{"version":3,"sources":["autorisatie-niveau/infra/autorisatie-niveau-row.module.scss","bankgarantieinstellingen/beschikbare-bankgarantieinstellingen/beschikbare-bankgarantieinstellingen.module.scss","serviceproviders/beschikbare-serviceproviders/beschikbare-serviceproviders.module.scss","taxatiebureaus/beschikbare-taxatiebureaus/beschikbare-taxatiebureaus.module.scss","software-koppelingen/beschikbare-software-koppelingen/beschikbare-software-koppelingen.module.scss","autorisatie-niveau/infra/autorisatie-niveau-grid.module.scss","documenten/documenten.module.scss","shared/components/formik/debug.module.scss","shared/components/modal/ModalButton.module.scss","topnav-dossier/TopNavbar.module.scss","assets/new-collapsed-brand-logo.svg","notarissen/beschikbare-notarissen/beschikbare-notarissen.module.scss","uitgangspunten/arbeidsongeschiktheid/arbeidsongeschiktheid.module.scss","vermogensbeheerders/beschikbarebeheerders/beschikbarebeheerders.module.scss","verzekeraars/beschikbare-verzekeraars/beschikbare-verzekeraars.module.scss",".generated/instellingen-forms/instellingen-formstypes.ts","autorisatie-niveau-context/autorisatie-niveau-context.ts","autorisatie-niveau-context/autorisatie-niveau-provider.tsx","shared/utils/validation-results-to-ui-error.ts","shared/utils/save-data.ts","adviesonderwerpen/infra/adviesonderwerpen-schema.ts","shared/utils/target-to-field.ts","shared/utils/create-map-to-ui.ts","shared/utils/create-map-to-dl.ts","adviesonderwerpen/infra/map-adviesonderwerpen.ts","adviesonderwerpen/onderwerpen/onderwerpen.tsx","adviesonderwerpen/menuonderdelen/menuonderdelen.tsx","vestigingen-context/vestigingen-context.ts","vestigingen-select/vestigingen-select.tsx","autorisatieniveau-manager/autorisatieniveau-manager.tsx","shared/components/formik/Debug.tsx","shared/utils/helpers.ts","shared/utils/with-adviesbox-formik.ts","shared/utils/text-resources-algemeen.ts","adviesonderwerpen/infra/adviesonderwerpen-resources.ts","shared/components/dev-debug/dev-debug.tsx","shared/components/modal/Modal.tsx","shared/utils/formik-is-valid-async.ts","shared/utils/save-validation.ts","shared/save-form/save-form-contex.tsx","save-button/save-button.tsx","save-button/save-button-with-confimation.tsx","adviesonderwerpen/adviesonderwerpen.tsx","adviesonderwerpen/adviesonderwerpen-ajax.tsx","shared/utils/environment-helper.tsx","shared/utils/menu-info.ts","navigation/appdata-context.tsx","shared/components/title/title.tsx","autorisatie-niveau/infra/autorisatie-niveau-row.tsx","autorisatie-niveau/infra/autorisatie-niveau-grid.tsx","autorisatie-niveau/beheer/beheer.tsx","autorisatie-niveau/infra/autorisatie-niveau-schema.ts","autorisatie-niveau/infra/map-autorisatie-niveau.ts","autorisatie-niveau/infra/autorisatie-niveau-resources.tsx","autorisatie-niveau/instellingen/instellingen.tsx","autorisatie-niveau/uitleg/uitleg.tsx","autorisatie-niveau/voorkeuren/voorkeuren.tsx","autorisatie-niveau/autorisatie-niveau.tsx","autorisatie-niveau/autorisatie-niveau-ajax.tsx","bankgarantieinstellingen/infra/bankgarantieinstellingen-schema.ts","bankgarantieinstellingen/infra/map-bankgarantieinstellingen.ts","bankgarantieinstellingen/beschikbare-bankgarantieinstellingen/bankgarantie-data-grid-components.tsx","bankgarantieinstellingen/beschikbare-bankgarantieinstellingen/beschikbare-bankgarantieinstellingen.tsx","bankgarantieinstellingen/bankgarantieinstellingen.tsx","bankgarantieinstellingen/bankgarantieinstellingen-ajax.tsx","berekeningen/infra/berekeningen-resources.tsx","berekeningen/infra/berekeningen-schema.ts","berekeningen/infra/map-berekeningen.ts","berekeningen/algemeen/algemeen.tsx","berekeningen/heffingskortingen/heffingskortingen.tsx","berekeningen/scenarios/scenarios.tsx","berekeningen/berekeningen.tsx","berekeningen/berekeningen-ajax.tsx","documenten/documenten-afbeeldingvoorblad-api.ts","shared/utils/yup-enum.ts","documenten/infra/documenten-schema.ts","documenten/instelingen-overzichten/instelingen-overzichten.tsx","documenten/instelingen-voorblad-en-vervolgpaginas/instelingen-voorblad-en-vervolgpaginas.tsx","documenten/kolommen-in-de-lastenoverzichten/kolommen-in-de-lastenoverzichten.tsx","documenten/kolommen-in-het-netto-besteedbaar-inkomen-overzicht/kolommen-in-het-netto-besteedbaar-inkomen-overzicht.tsx",".generated/licenties/licentiestypes.ts","user-details/user-details-context.ts","documenten/ondertekening/ondertekening.tsx","documenten/documenten.tsx","documenten/infra/map-documenten-dl-target-to-ui-field.ts","documenten/infra/map-documenten-dl-to-ui.ts","documenten/infra/map-documenten-ui-to-dl.ts","documenten/documenten-ajax.tsx","shared/hooks/use-autorisatie-niveau-data.ts","navigation/menu-config.ts","navigation/NavigationList.tsx","shared/save-form/save-form-provider.tsx","drawer/Drawer.tsx","shared/utils/partij-filter.ts","geldverstrekkers/infra/geldverstrekkers-schema.ts","geldverstrekkers/infra/map-geldverstrekkers-dl-to-ui.ts","shared/components/modal/ModalButton.tsx","shared/components/hdn-keuzelijst/use-hdn-data.ts","shared/components/hdn-keuzelijst/HdnKeuzelijst.tsx","geldverstrekkers/beschikbare-geldverstrekkers/geldverstrekkers-data-grid-components.tsx","geldverstrekkers/beschikbare-geldverstrekkers/beschikbare-geldverstrekkers.tsx","geldverstrekkers/geldverstrekkers.tsx","geldverstrekkers/infra/map-geldverstrekkers-ui-to-dl.ts","geldverstrekkers/geldverstrekkers-ajax.tsx","klantprofiel-motivering/infra/klantprofiel-motivering-schema.ts","klantprofiel-motivering/infra/map-klantprofiel-motivering.ts","klantprofiel-motivering/volledigheid/volledigheid.tsx","klantprofiel-motivering/klantprofiel-motivering.tsx","klantprofiel-motivering/klantprofiel-motivering-ajax.tsx","shared/hooks/use-adviesbox-data.ts","koppeling-adviseur-bemiddelaar/infra/map-koppeling-dl-target-to-ui-field.tsx","koppeling-adviseur-bemiddelaar/infra/koppeling-schema.tsx","koppeling-adviseur-bemiddelaar/infra/map-koppeling-dl-to-ui.ts","koppeling-adviseur-bemiddelaar/infra/map-koppeling-ui-to-dl.ts","shared/components/isw-side-effects/isw-types.ts","shared/components/isw-side-effects/create-isw-helpers.ts","koppeling-adviseur-bemiddelaar/infra/determine-koppeling-async-side-effects.ts","koppeling-adviseur-bemiddelaar/koppelingdatagrid/koppelingDataGrid.tsx","shared/utils/ajax.ts","shared/utils/set-formik-ui-errors.ts","shared/components/isw-side-effects/path-to-string-helper.ts","shared/components/isw-side-effects/has-changed-helper.ts","shared/components/isw-side-effects/use-isw-side-effects.ts","shared/components/isw-side-effects/isw-side-effects.tsx","koppeling-adviseur-bemiddelaar/koppelingscherm.tsx","koppeling-adviseur-bemiddelaar/koppelingscherm-ajax.tsx","lastenoverzicht/infra/lastenoverzicht-schema.ts","lastenoverzicht/infra/lastenoverzicht-resources.tsx","lastenoverzicht/infra/map-lastenoverzicht-dl-target-to-ui-field.ts","lastenoverzicht/infra/map-lastenoverzicht-dl-to-ui.ts","lastenoverzicht/infra/map-lastenoverzicht-ui-to-dl.ts","lastenoverzicht/meenemen/meenemen.tsx","lastenoverzicht/verrekenen/verrekenen.tsx","lastenoverzicht/lastenoverzicht.tsx","lastenoverzicht/lastenoverzicht-ajax.tsx",".generated/forms/formstypes.ts","notarissen/infra/notarissen-schema.ts","notarissen/infra/map-notarissen-dl-to-ui.ts","notarissen/infra/map-notarissen-ui-to-dl.ts","shared/components/hdn-keuzelijst/LabeledHdnKeuzelijst.tsx","shared/components/adres/get-postcode-info.ts","shared/components/adres/adres-input.tsx","notarissen/beschikbare-notarissen/notariskantoor-toevoegen-modal.tsx","shared/utils/enum-to-options.ts","notarissen/beschikbare-notarissen/notarissen-data-grid-components.tsx","notarissen/beschikbare-notarissen/beschikbare-notarissen.tsx","notarissen/notarissen.tsx","notarissen/notarissen-ajax.tsx","rapportage/infra/map-rapportage-samenstellen-dl-target-to-ui-field.ts","shared/components/rapportage/infra/rapportage-structuur-types.ts","shared/components/rapportage/rapportage-samenstellen-schema.ts","rapportage/infra/map-rapportage-samenstellen-dl-to-ui.ts","rapportage/infra/map-rapportage-samenstellen-ui-to-dl.ts","shared/components/rapportage/titel-aanpassen-modal.tsx","shared/components/rapportage/rapportage-structuur-elementen.tsx","shared/components/rapportage/rapportage-structuur.tsx","rapportage/kolommen-instellen-modal.tsx","rapportage/rapportage-samenstellen.tsx","rapportage/rapportage-samenstellen-ajax.tsx","serviceproviders/infra/serviceproviders-schema.ts","serviceproviders/infra/map-serviceproviders.ts","serviceproviders/beschikbare-serviceproviders/serviceproviders-data-grid-components.tsx","serviceproviders/beschikbare-serviceproviders/beschikbare-serviceproviders.tsx","serviceproviders/serviceproviders.tsx","serviceproviders/serviceproviders-ajax.tsx","shared/paramrouting/paramrouting-context.ts","shared/paramrouting/paramrouting-provider.tsx","standaard-teksten/infra/map-standaard-teksten-dl-target-to-ui-field.ts","standaard-teksten/infra/standaard-teksten-schema.tsx","standaard-teksten/infra/map-standaard-teksten-dl-to-ui.ts","standaard-teksten/infra/map-standaard-teksten-ui-to-dl.ts","standaard-teksten/standaard-teksten-details.tsx","standaard-teksten/standaard-teksten.tsx","standaard-teksten/standaard-teksten-ajax.tsx","standaard-teksten/map-standaard-teksten-importeren-exporteren-dl-target-to-ui.tsx","standaard-teksten/standaard-teksten-importeren-modal.tsx","standaard-teksten/standaard-teksten-importeren-exporteren.tsx","tarieven/infra/tarieven-schema.ts","tarieven/infra/map-tarieven.ts","tarieven/uitleg/uitleg.tsx","tarieven/financieringsopzet/financieringsopzet.tsx","tarieven/advieskosten-met-hypotheek/advieskosten-met-hypotheek.tsx","tarieven/advieskosten-zonder-hypotheek/advieskosten-zonder-hypotheek.tsx","tarieven/tarieven.tsx","tarieven/tarieven-ajax.tsx","taxatiebureaus/infra/taxatiebureaus-schema.ts","taxatiebureaus/infra/map-taxatiebureaus.ts","taxatiebureaus/beschikbare-taxatiebureaus/taxatiebureaus-data-grid-components.tsx","taxatiebureaus/beschikbare-taxatiebureaus/beschikbare-taxatiebureaus.tsx","taxatiebureaus/taxatiebureaus.tsx","taxatiebureaus/taxatiebureaus-ajax.tsx","topnav-dossier/TopNavbar.tsx","uitgangspunten/infra/uitgangspunten-schema.ts","uitgangspunten/infra/map-uitgangspunten.ts","uitgangspunten/uitleg/uitleg.tsx","uitgangspunten/infra/controle-norm-gewenst-inkomen.tsx","uitgangspunten/infra/determine-sync-inkomensuitgangspunt.ts","uitgangspunten/werkloosheid/werkloosheid.tsx","uitgangspunten/pensioen/pensioen.tsx","uitgangspunten/overlijden/overlijden.tsx","uitgangspunten/arbeidsongeschiktheid/arbeidsongeschiktheid-data-grid-components.tsx","uitgangspunten/arbeidsongeschiktheid/arbeidsongeschiktheid.tsx","uitgangspunten/uitgangspunten.tsx","uitgangspunten/uitgangspunten-ajax.tsx","vermogensbeheerders/infra/vermogensbeheerders-schema.ts","vermogensbeheerders/infra/map-vermogensbeheerders.ts","vermogensbeheerders/beschikbarebeheerders/beheerders-data-grid-components.tsx","vermogensbeheerders/beschikbarebeheerders/beschikbarebeheerders.tsx","vermogensbeheerders/vermogensbeheerders.tsx","vermogensbeheerders/vermogensbeheerders-ajax.tsx","verzekeraars/infra/verzekeraars-schema.ts","verzekeraars/infra/map-verzekeraars-dl-to-ui.ts","verzekeraars/infra/map-verzekeraars-ui-to-dl.ts","verzekeraars/beschikbare-verzekeraars/verzekeraars-data-grid-components.tsx","verzekeraars/beschikbare-verzekeraars/beschikbare-verzekeraars.tsx","verzekeraars/verzekeraars.tsx","verzekeraars/verzekeraars-ajax.tsx","externe-koppelingen/infra/nationale-waarborg-types.ts","externe-koppelingen/nationale-waarborg/nationalewaarborg-modal.tsx","externe-koppelingen/nationale-waarborg/nationalewaarborg.tsx","externe-koppelingen/nationale-waarborg/nationalewaarborg-ajax.tsx","software-koppelingen/infra/software-koppelingen-schema.ts","software-koppelingen/infra/map-software-koppelingen.ts","software-koppelingen/elements-instellingen-modal/elements-instellingen-modal-api.ts","software-koppelingen/elements-instellingen-modal/elements-instellingen-modal.tsx","software-koppelingen/hdn-instellingen-modal/hdn-instellingen-modal.tsx","software-koppelingen/importkoppeling-instellingen-modal/importkoppeling-instellingen-modal-api.ts","software-koppelingen/importkoppeling-instellingen-modal/importkoppeling-instellingen-modal.tsx","software-koppelingen/beschikbare-software-koppelingen/software-koppelingen-data-grid-components.tsx","software-koppelingen/beschikbare-software-koppelingen/beschikbare-software-koppelingen.tsx","software-koppelingen/software-koppelingen.tsx","software-koppelingen/software-koppelingen-ajax.tsx","abc-koppeling/acces-token-download.tsx","abc-koppeling/abc-koppeling.tsx","instellingen-app/AuthenticatedInstellingenApp.tsx","instellingen-app/UnauthenticatedInstellingenApp.tsx","use-current-vestiging.ts","instellingen-app/InstellingenApp.tsx","shared/components/validatie-popup/validatie-popup.tsx","user-details/user-details-provider.tsx","vestigingen-context/vestigingen-provider.tsx","App.tsx","index.tsx","shared/components/rapportage/rapportage-structuur.module.scss","geldverstrekkers/beschikbare-geldverstrekkers/beschikbare-geldverstrekkers.module.scss","assets/new-brand-logo.svg","save-button/SaveButton.module.scss"],"names":["module","exports","AoScenarioOptions","ControleGewenstInkomenOptions","ControleGewenstNbiOptions","ControleMaandlastOptions","ControleNbiOptions","DuurOverzichtOptions","InstellingNiveauOptions","OverzichtTonenVanOptions","SoortControleVolledigheidOptions","SoortElementOptions","StandaardRapportOptions","StandaardtekstVoorOptions","TonenOpFormulierenOptions","UitlijningOptions","VastBedragBedragPerUurOptions","VastBedragOptions","VastBedragPercentageOptions","WeergaveAdviseurnaamOptions","defaultSettings","isBeheerder","setIsBeheerder","_isbeheerder","autorisatieNiveau","algemeenNiveau","Medewerker","documentNiveau","tarievenNiveau","berekeningenNiveau","lastenoverzichtenNiveau","geldverstrekkersNiveau","verzekeraarsNiveau","vermogensbeheerdersNiveau","bankgarantieInstellingenNiveau","taxatiebureausNiveau","notarissenNiveau","serviceprovidersNiveau","klantprofielMotiveringNiveau","adviesonderwerpenNiveau","uitgangspuntenAdviesNiveau","standaardTekstenNiveau","generiekeKoppelingenNiveau","hdnNiveau","elementsNiveau","nationaleHypotheekbondNiveau","nationaleWaarborgNiveau","softwareKoppelingenNiveau","setAutorisatieNiveau","_autorisatieNiveau","AutorisatieNiveauContext","createContext","setContext","autorisatieNiveauSetter","AutorisatieNiveauProvider","children","useState","Provider","value","validationResultsToUiError","results","mapperDlNameToUiName","map","result","field","target","error","Error","logErrorToApplicationInsights","label","message","code","saveDataWithFiles","user","vestigingId","url","ocpApimSubscriptionKey","files","singleFormFilename","async","requestInit","formData","FormData","Array","length","append","file","name","filesToFormData","rsp","fetch","headers","method","body","ok","contentTypeIsJson","data","json","validationResults","e","saveDataWithFilesRequestInit","authorization","token_type","access_token","saveData","mapper","saveDataRequestInit","Accept","reloadNavigation","mappedValues","values","JSON","stringify","contentType","get","indexOf","menuonderdelenSchema","Yup","hypotheek","default","kapitaalVerzekering","ORV","AOV","vermogen","krediet","uitkerendeLijfrente","overig","onderwerpenSchema","overlijden","arbeidsongeschiktheid","werkloosheid","pensioen","vermogensopbouw","adviesonderwerpenSchema","menuonderdelen","onderwerpen","target2field","regexIndexFirstOccurance","indexArray","match","parts","replace","split","partPascal","shift","part","charAt","toLowerCase","slice","forEach","i","createMapToUi","schema","from","source","extra","def","keys","Object","prop","val","createMapToDl","_","to","with","mapMenuOnderdelen","v","onderdeelKapitaalverzekeringTonen","onderdeelOrvTonen","onderdeelAovTonen","onderdeelVermogenTonen","onderdeelKredietTonen","onderdeelUitkerendeLijfrenteTonen","onderdeelOverigTonen","mapOnderwerpen","onderwerpHypotheekTonen","onderwerpOverlijdenTonen","onderwerpArbeidsongeschiktheidTonen","onderwerpWerkloosheidTonen","onderwerpPensioenTonen","onderwerpVermogensopbouwTonen","mapAdviesOnderwerpen","mapAdviesonderwerpenDlToUi","adviesonderwerpen","cast","dl2ui","mapAdviesonderwerpenUiToDl","mapDlTargetToAdviesonderwerpenUiField","connect","formik","setFieldValue","className","caption","disabled","VestigingenContext","vestigingen","setVestigingen","_vestigingen","withRouter","withErrorBoundary","history","useContext","params","useRequestInit","id","data-testid","vestiging","onChange","event","push","window","location","pathname","index","key","naam","GeneralAutorisatieNiveau","AutorisatieNiveauManager","manageFor","Vestiging","organisatie","Organisatie","DebugToggle","checked","Math","random","classes","checkbox","type","sessionStorage","checkbox_label","htmlFor","Debug","force","traceAdvies","setTraceAdvies","React","showValues","setShowValues","showInitialValues","setShowInitialValues","valuesRef","useRef","style","margin","borderRadius","background","maxHeight","overflow","boxShadow","textTransform","fontSize","borderTopLeftRadius","borderTopRightRadius","fontWeight","padding","color","letterSpacing","validationSchema","validate","onSubmit","rest","current","difference","detailedDiff","added","deleted","updated","console","log","initialValues","voegApiFoutToe","formikErrors","platformApiFouten","element","setIn","hasValue","noop","withAdviesboxFormik","handleSubmit","mapPropsToValues","createValidationContext","withFormik","validateOnChange","props","getIn","context","validateYupSchema","yupErrors","yupToFormErrors","resources","ErrorHuisnummer","ErrorPostcode","ErrorDatumToekomst","ErrorMaxLengte","ErrorDatumLeeg","ErrorBedragPostief","ErrorAantalJaren","ErrorAantalMaanden","NavigatiePromptTekst","ErrorOnbekendeWaarde","ErrorDatumVerplicht","getGeneralTextResources","createGetTextResources","getAdviesonderwerpenResources","MenuonderdelenWarning","OnderwerpenWaring","OnderwerpenEnMenuonderdelenWaring","DevDebug","Modal","title","onCancelClick","onSubmitClick","isSubmitting","noEditableData","tooltip","invalid","saveButtonTekst","cancelButtonTekst","prependToFooter","appendToFooter","submitDisabled","saveBtnVariant","Header","Title","OverlayTrigger","trigger","rootClose","placement","overlay","Tooltip","Button","onClick","aria-hidden","Body","Footer","variant","displayName","checkAndDeletePropertyPath","baseObj","path","indicesRegex","regexCleanup","pathArray","obj","indexedPath","pop","join","submit","berekenSideEffectRef","callBack","dirty","setSubmitting","formikContext","uiErrors","validateForm","mappedError","baseKey","baseKeyIndex","baseKeyClean","remainingPath","setTouched","setNestedObjectValues","setErrors","formikIsValidAsync","asyncResult","setFieldError","resetForm","SaveFormContext","isSaving","saveResult","version","setIsSaving","_value","setSaveResult","SaveButtonComponent","lastSave","setLastSave","preSaveConfirmation","triggerPreSaveConfirmation","btnTekst","showValidatiePopup","setValidatiePopup","setSaveResultText","initialSaveResult","handleSubmitCallback","useCallback","validationResult","useEffect","then","catch","busy","isPlatformError","classNames","btn_danger","no_save","saved","infotekst","show","onHide","SaveButton","ConfirmationModal","save","modalBody","modalTitle","saveBtnTekst","cancelBtnTekst","closeModal","SaveButtonWithConfirmation","setTriggerPreSaveConfirmation","showWarningModal","setShowWarningModal","Adviesonderwerpen","useFormikContext","onderwerpenDirty","isEqual","menuonderdelenDirty","AdviesonderwerpenAjax","settings","instellingenFormsOrigin","loading","useAbortableFetch","mappedProps","OcpApimSubscriptionKey","getEnvironment","hostname","getActivePageTitle","menuConfig","locationPath","collectItems","items","collected","item","flatMap","config","lists","list","find","link","toString","AppDataContext","reloadCount","menuInfo","setMenuInfo","activePage","setActivePage","AppDataProvider","reloadNavigationCounter","setReloadNavigationCounter","oldState","appName","altTitle","hostnamePrefix","dossierTitel","aanvrager1","aanvrager","voorletters","voornamen","voorvoegsel","achternaam","getAanvragerNaam","activePageTitle","altPageTitel","document","AutorisatieNiveauUniverseel","formikKey","initialValue","tooltipMessage","showWarning","medewerker","autoristatieNiveauClasses","relative","layoutClass","noMarginLabel","warningText","iconType","tooltipClasses","warning","options","table_header","option","beheer","voorkeurenSchema","Lastenoverzicht","Berekeningen","Tarieven","Documenten","Algemeen","beheerSchema","Serviceproviders","Notarissen","Taxatiebureaus","Vermogensbeheerders","Verzekeraars","Geldverstrekkers","externSchema","instellingenSchema","autorisatieNiveauSchema","voorkeuren","extern","instellingen","mapVoorkeuren","mapBeheer","mapExtern","mapInstellingen","mapAutorisatieNiveauDlToUi","autorisatieniveau","mapAutorisatieNiveauUiToDl","mapDlTargetToAutorisatieNiveauUiField","getAutorisatieNiveauTextResources","ConfirmationTextAutorisatie","AutorisatieNiveau","setLoading","when","res","maxRowCount","AutorisatieNiveauAjax","bankgarantieInstellingPartij","partijnaam","actief","agentnummer","beschikbareBankgarantieinstellingenSchema","partijen","bankgarantieinstellingenSchema","beschikbareBankgarantieinstellingen","mapBankgarantieinstellingPartij","mapBeschikbareBankgarantieinstellingenSchema","mapBankgarantieInstellingen","mapBankgarantieinstellingenDlToUi","bankgarantieinstellingenId","bankgarantieinstellingen","mapBankgarantieinstellingenUiToDl","mapDlTargetToBankgarantieinstellingenUiField","EmptyComponent","createSpanWithId","c","original","createActiveCheckboxCell","clickable_label_fix","createTextInputAgentNummerCell","inputElement","ref","classnames","defaultValue","onBlur","onMouseUp","focus","getColumns","Cell","maxWidth","editable","resizable","sortable","filterable","columns","minRows","showPagination","pageSize","NoDataComponent","Bankgarantieinstellingen","text_container","process","BankgarantieinstellingenAjax","getBerekeningenTextResources","TooltipHeffingskortingen","TooltipIndexatieWaardePandPercentage","TooltipminderingOverwaardeGewensteHypotheek","TooltipIngangsdatumScenarios","TooltiprekenrenteContanteWaardePercentage","TooltipcontroleNbi","ErrorlengteOverzichtInJaren","ErrorindexatieWaardePandPercentage","ErrorrekenrenteContanteWaardePercentage","algemeenSchema","huurstijgingPercentage","indexatieWaardePandPercentage","test","minderingOverwaardeGewensteHypotheek","heffingskortingenSchema","algemeneHeffingskorting","arbeidskorting","inkomensafhankelijkeCombinatiekorting","ouderenkorting","alleenstaandeOuderenkorting","werkbonus","kindgebondenBudget","scenariosSchema","ingangsdatumScenarios","nullableLocalDateSchema","lengteOverzichtInJaren","eindleeftijdScenarios","rekenrenteContanteWaardePercentage","controleNbi","oneOf","HuidigeSituatie","berekeningenSchema","algemeen","heffingskortingen","scenarios","mapAlgemeen","mapHeffingskortingen","mapScenarios","convertUtcToTimeZone","toLocalDate","mapberekeningenDlToUi","berekeningen","mapberekeningenUiToDl","mapDlTargetToberekeningenUiField","decimalen","readonly","appendChildren","SituatieNaAdvies","BerekeningenAjax","getBlobUrlApi","setVoorblad","voorbladAfbeelding","yupEnum","ondertekeningSchema","tonenOpFormulier","AdviseurnaamVanHoofdkantoor","weergaveAdviseurnaam","VoorlettersAchternaam","voorbeeldweergaveAdviseurnaam","extraOndertekeningsregel","instelingenOverzichtenSchema","bedrijfslogoTonenOpOverzichten","overzichtTonenVan","AlleJaren","toonGrafiekenBijScenarioOverzichten","instelingenVoorbladEnVervolgpaginasSchema","bedrijfslogoTonenOpVoorblad","uitlijningLogoOpVoorblad","Links","bedrijfsgegevensTonenOpVoorblad","uitlijningBedrijfsgegevensOpVoorblad","bedrijfslogoOpVervolgpaginaSTonen","uitlijningBedrijfslogoOpVervolgpagina","kolommenInDeLastenoverzichtenSchema","brutoInkomen","somHypotheken","waardeopbouw","huur","rente","hypotheekAflossing","uitkeringKapitaalverzekering","verzekeringspremies","spaarEnBeleggingsdepot","opnameUitDepot","kredietLast","overigeUitgaven","brutoLast","fiscaalVoordeel","vrh","nettoLast","kolommenInHetNettoBesteedbaarInkomenOverzichtSchema","verzekeringen","spaarEnBeleggingsdepots","overigeUitgeven","totaleUitgaven","inkomstenbelasting","nettpOnkomsten","nettoBesteedbaarInkomen","documentenSchema","ondertekening","instelingenOverzichten","instelingenVoorbladEnVervolgpaginas","afbeeldingVoorblad","nullable","kolommenInDeLastenoverzichten","kolommenInHetNettoBesteedbaarInkomenOverzicht","InstelingenOverzichten","_props","InstelingenVoorbladEnVervolgpaginas","KolommenInDeLastenoverzichten","KolommenInHetNettoBesteedbaarInkomenOverzicht","Geslacht","defaultUserDetails","userDetails","voornaam","tussenvoegsels","roepnaam","telefoon","geslacht","Man","telefoonWerk","telefoonMobiel","email","functie","platformId","klantId","isActief","klantdossierRechtenVestigingen","klantdossierRechtenOrganisatie","medewerkerId","organisatieId","setUserDetails","_userDetails","UserDetailsContext","TonenOpFormulierenOptionsOptions","AdviseurnaamVanBijkantoor","WeergaveAdviseurnaamOptionsOptions","TitelAchternaam","TitelVoorlettersAchternaam","VoorlettersVoornamenAchternaam","VoornamenAchternaam","trimSpaces","txt","getNaamVolgensWeergave","weergave","Vrouw","fieldSize","voorblad","documenten_wrapper","mapDlTargetToDocumentenUiField","mapOndertekening","tonenOpFormulieren","mapInstelingenOverzichten","overzichten","bedrijfslogoOverzichtenTonen","toonGrafiekScenarioOverzicht","mapInstelingenVoorbladEnVervolgpaginas","voorbladVervolgpaginas","bedrijfslogoVoorbladTonen","uitlijningBedrijfslogoVoorblad","bedrijfsgegevensVoorbladTonen","uitlijningBedrijfsgegevensVoorblad","bedrijfsgegevensVervolgpaginasTonen","uitlijningBedrijfslogoVervolgpaginas","mapKolommenInDeLastenoverzichten","lastenoverzichten","uitkeringKapitaalverzekeringen","kredietlast","mapKolommenInHetNettoBesteedbaarInkomenOverzicht","nbiOverzicht","overigUitgaven","nettoInkomsten","nbi","mapDocumenten","mapDocumentenUiToDl","DocumentenAjax","documentenId","documenten","isValid","mapDocumentenDlToUi","hasAuthorization","usageLevel","NavigationList","collapsed","collapse","useParams","loadingDone","ForceRerenderContext","useAutorisatieNiveauData","useMemo","icon","isAllowed","capitalize","listen","brandLogoIcon","brandCollapsedLogoIcon","hasMenuInfo","SaveFormProvider","setVersion","setSaveFormProviderValue","oldvalue","Drawer","setcollapsed","medewerkerUrl","licentiesOrigin","medewerkerByEmail","gebruiksGroepenUrl","vestigingenUrl","gebruikersGroepen","gebruikersgroepen","some","groep","medewerkerVestigingen","isProductSupported","product","undefined","ondersteunenTot","LocalDateTime","parse","isAfter","now","partijFilter","filterList","geenProductenFilteren","producten","hypotheeklabels","maatschappijCode","String","k","p","AanvraagType","hypotheekLabelSchema","omschrijving","hypotheekopties","toelichting","geselecteerd","optieGroep","beschikbareGeldverstrekkersPartijen","serviceproviderId","softwareKoppelingId","aanvraagNaar","aanvullendeRetourwijze","beschikbareGeldverstrekkersServiceProviders","beschikbareSoftwareKoppelingen","beschikbareGeldverstrekkersSchema","serviceProviders","softwareKoppelingen","geldverstrekkersSchema","beschikbareGeldverstrekkers","mapHypotheekLabel","mapPartijen","size","padStart","prefixWithZero","getAanvraagNaar","geldverstrekkerPartij","mapServiceProvider","mapSoftwareKoppeling","mapGeldverstrekkers","serviceproviders","sort","a","b","Intl","Collator","compare","mapGeldverstrekkersDlToUi","geldverstrekkers","ModalButton","content","parent","render","modalIndex","isModalOpen","setModalOpen","appHasError","ErrorBoundaryContext","dialog","onMobile","navigator","userAgent","errors","hasError","evt","currentTarget","matches","backdropClassName","onEnter","firstInputFocus","keyboard","backdrop","cloneElement","useHdnData","berichtSoortType","keuzelijst","hdnKeuzelijstenOrigin","hdnKeuzelijst","HdnKeuzelijst","emptyValue","hdnData","HypotheekOptiesModal","cellIndex","hypotheekLabels","setHypotheekLabels","hlIndex","hoIndex","newVal","hl","ho","defaultChecked","modal_footer","createModalButton","align_center","filter","hypotheek_opties_button","alt","multiColor","createHDNKeuzeLijst","createAanvraagNaarSelectInput","aanvraagNaarOptions","serviceprovider","Serviceprovider","softwareKoppeling","SoftwareKoppeling","getAanvraagNaarOptions","aanvraagType","aanvraagId","isServiceprovider","width","parseInt","mapGeldverstrekkersUiToDl","mapDlTargetToGeldverstrekkersUiField","GeldverstrekkersAjax","filteredPartijen","l","beschikbareHypotheekProducten","volledigheidSchema","soortControle","GeenControle","klantprofielMotiveringSchema","volledigheid","mapVolledigheidDl2Ui","soortControleVolledigheid","mapklantprofielmotiveringUiToDl","mapDlTargetToklantprofielmotiveringUiField","klantprofielMotiveringOptions","AlleenKlantprofiel","KlantprofielEnMotivering","Klantprofielmotivering","KlantprofielmotiveringAjax","klantprofielMotivering","mapklantprofielmotiveringDlToUi","noUserResult","platformData","invalidDataResult","invalidDataIdResult","mapDlTargetToKoppelingUiField","bemiddelaarSchema","bemiddelaarId","emailadres","coupledAdviseurSchema","adviseurId","coupledBemiddelaarId","adviseurSchema","koppelSchema","adviseur","bemiddelaar","koppelingenSchema","adviseurs","bemiddelaars","koppelingen","update","deleteEvent","mapAdviseur","mapBemiddelaar","mapKoppelingen","dl2uiKoppeling","mapKoppelingDlNaarUi","adviesdossierId","Ui2dlKoppeling","forceReturnContext","Symbol","initISWSideEffect","sideEffects","bag","bagWithContext","subset","createSubBag","createISWAsyncSideEffectId","createISWAsyncSideEffect","asyncSideEffect","getInObject","pathArr","Proxy","newcontext","newbag","has","draft","prev","init","newCoupledAdvisorPair","fetchData","Promise","all","adviseurID","koppeling","bemiddelaarID","klantdossiersBemiddelingOrigin","deleteCoupledAdvisorPair","indexAdviseur","findIndex","advisuer","deletedId","koppelingAsyncSideEffects","asyncCondition","curr","runAsync","changed","hasDeleteEvents","KoppelingDataGrid","accessor","adviseursOptions","filteredAdviseur","prevAdviseurId","usedAdivseurIds","usedId","bemiddelaarOptions","sortConfig","datum","SortType","Ascending","showButtonAddRow","rowCaption","getNewRowValues","advisuerIds","availableAdviseurs","includes","adviseurIndex","getTdProps","_state","row","column","columnId","onMouseDown","array","hasJSONResponse","response","contentTypeHeader","ct","mediaType","mediaTyper","subtype","suffix","isJSON","setFormikUiErrors","setFieldTouched","pathPartToString","Number","isInteger","pathToString","pathInObjForCompare","_debug","hasChangedInternal","hasChanged","lastMemo","debounceAsyncSideEffect","memoize","asyncDebounce","clearTimeout","setTimeout","cache","Cache","pDebounce","contextToKey","useISWSideEffects","currentFormik","syncEffect","asyncEffect","runOnFirstRender","disablePlatformApiFoutenHandler","extraHeaders","getSyncContext","getASyncContext","previous","previousSyncContext","previousASyncContext","abortControllers","mounted","platformApiFoutenUpdate","patchSets","inverseSets","rerender","firstRender","runBecauseFirstRender","currentSyncContext","hasSyncContextChanges","currentASyncContext","hasASyncContextChanges","hasFormikStateChanges","hasPatches","devlog","mustSave","appliedPatches","next","signal","aborted","checkPatches","applyPatches","patches","err","changes","inv","produceWithPatches","hasSync","asyncWithContext","abort","AbortController","debouncedAsyncSideEffect","inverse","produce","hasAsync","fetchDataHelper","bind","concat","setValues","AsyncSideEffectError","constructor","super","this","status","op","j","args","ISWSideEffectChild","sync","ISWSideEffects","__RouterContext","Koppelingscherm","createUrl","s","KoppelingAjax","getUrl","getDataId","mapDlToUi","mapUiToDl","mapDlTarget","dataId","platformError","createSaveData","useAdviesboxData","meenemenSchema","kredietlasten","erfpacht","servicekosten","financieringskosten","boeterente","gespreideBetaling","verrekenenSchema","uitkeringenFinancieleDekkingen","aflossingenHypotheek","aanvangsstortingen","extraStortingen","onttrekkingen","extraOpnames","jaar1AlleenNieuweSituatie","lastenoverzichtSchema","meenemen","verrekenen","getLastenoverzichtTextResources","TooltipJaar1AlleenNieuweSituatie","mapDlTargetToLastenoverzichtUiField","mapMeenemen","mapVerrekenen","mapLastenoverzicht","meenemenInLastenoverzicht","verrekenenInLasten","mapLastenoverzichtUiToDl","LastenoverzichtAjax","lastenoverzicht","mapLastenoverzichtDlToUi","GeslachtOpties","contactpersoonSchema","notarisAdresSchema","straat","huisnummer","toevoeging","postcode","is","plaats","landCode","partijSchema","notariskantoorId","kantoornaam","adres","contactpersoon","telefoonnummer","beschikbareNotarissenSchema","mapContactpersoon","mapAdres","toUpperCase","letters","numbers","mapPartij","partij","mapDlTargetToNotarissenUiField","mapNotarissenUiToDl","LabeledHdnKeuzelijst","visible","labelColSize","inputColSize","invisible","getPostcodeInfo","postcodeOrigin","postcodeInfo","AdresInput","plaatsCaption","landCaption","metLand","AuthContext","SettingsContext","previousPostcodeHuisnummer","postcodeError","currVal","NotariskantoorToevoegenModal","onSave","submitForm","titleMapper","Geen","DeleteNotarisModal","splice","DeleteModalButton","EditModalButton","AdresComponent","substring","ContactPersonComponent","person","minWidth","NotarissenAjax","notarissen","mapNotarissenDlToUi","mapRapportageSamenstellenDlTargetToUiField","RapportageElementSoort","defaultElementen","naamWeergevenAlsTitel","inhoudBeschikbaar","soortElement","Onderdeel","volgnummer","elementen","inhoud","defaultInhoud","perAdviesAanpasbaar","kolommen","Hoofdstuk","kolommenLastenSchema","spaarBeleggingsdepots","kolommenNbiSchema","nettoInkomen","kolommenInstellenModalSchema","kolommenLasten","kolommenNbi","rapportageElementSchema","kolomTitel","kolomNaam","selected","rapportageStructuurSchema","structuurId","standaardRapport","VolledigFinancieelPlan","kolomselectie","isVerwijderbaar","rapportageSamenstellenSchema","structuren","defaultStructuur","movetoparent","findElement","elements","targetCode","foundInSubElement","mapRapportageElementenToUi","x","inhoudWijzigbaar","mapKolommenLastenToUi","mapKolommenNbiToUi","mapRapportageKolomSelectieToUi","mapRapportageStructuurToUi","z","Standaardrapport","mapRapportageElementToDl","Grafiek","RapportageElementSoortInstellingen","Koptekst","Tabel","Tekstblok","mapSoortElement","defaultGeselecteerdVoor","mapKolommenLastenToDl","mapKolommenNbiToDl","mapKolomSelectieToDl","mapRapportageStructuurToDl","mapRapportageSamenstellenUiToDl","TitelAanpassenModal","adoptionList","featureRapport2","useFeature","elementData","defaultElement","textarea","newValues","elementToMove","arrayToAddTo","nameList","parentListName","filteredParentList","RapportageStructuurElementen","parentKey","dragableProps","dragHandleProps","isDragging","open","setOpen","handleOnDragEnd","destructedElementName","draggableId","parentName","reorderedItem","destination","setAllChildrenValuesBasedOnParentReference","elem","setParentValueBasedOnChildReference","currentPath","parentElem","elementName","position","main_cell","drag_n_drop_wrapper","_v","spacer","expand_wrapper","aria-expanded","aria-controls","expand_btn","checkbox_wrapper","parentElementClone","label_wrapper","Collapse","in","onDragEnd","droppableId","mode","providedParrent","droppableProps","innerRef","onDragCapture","stopPropagation","providedChild","snapshot","draggableProps","borderTop","borderRight","backgroundColor","paddingTop","paddingBottom","getDragHandleProp","placeholder","edit_cell","aria-label","RapportageStructuur","flattened","flattenElements","layer","el","repeat","structuur_table","KolommenInstellenModal","saveModal","rapportNaam","getNewRapportageStructuurFactory","nextVolgnummer","newRapportageStructuur","RapportageSamenstellen","selectedState","rapportageSamenstellenMasterDetailDataGrid","DeleteButton","masterDetail","rowSelected","showButtonDelete","volgnummers","max","RapportageSamenstellenAjax","rapporageSamenstellen","rapportage","mapRapportageSamenstellenDlToUi","beschikbareServiceprovidersSchema","wijzigbaar","hdnNummer","serviceprovidersSchema","beschikbareServiceproviders","mapServiceprovidersDlToUi","ServiceprovidersId","mapServiceprovidersUiToDl","mapDlTargetToServiceprovidersUiField","createTextInputServiceProviderNaamCell","readOnly","createTextInputHdnNummerCell","ServiceprovidersAjax","ParamRouteContext","voorstel","adviesdossier","ParamRouteProvider","route","mapDlTargetToDStandaardTekstenUiField","tekstSchema","tekstVoor","korteOmschrijving","standaardTekst","standaardTekstenSchema","teksten","standaardTekstenImporterenExporterenSchema","overschrijven","newFileAdded","mapStandaardTeksten","standaardTekstenMotiveringOnderwerp","tekst","standaardtekstVoor","mapStandaardTekstenUiToDl","StandaardTekstDetails","OnsAdvies","AfwijkendeKeuze","StandaardTeksten","standaardTekstColumns","voor","getVoorTekst","onderwerp","StandaardteksenOnderwerpen","mapOnderwerpToTitle","StandaardTekstenAjax","standaardteksten","standaardTeksten","mapStandaardTekstenDlToUi","mapStandaardTekstenImporterenExporterenDlTargetToUiField","StandaardTekstenImporterenModal","filesRef","saveAction","updateRef","buttonText","hideFormats","hideIcon","filesref","StandaardTekstenImporterenExporteren","filesLength","setFilesLength","exportUrl","TextEncoder","encode","text","uInt8ArrayToDownload","financieringsopzetSchema","leveringsAkte","VastBedrag","bedragLeveringsAkte","hypotheekAkte","bedragHypotheekAkte","taxatieKosten","bedragTaxatieKosten","hypothecaireInschrijving","IndicatieveWaarde","bedragHypothecaireInschrijving","percentageHypothecaireInschrijving","advieskostenZonderHypotheekSchema","adviesKosten","bedragAdviesKosten","bemiddelingsVergoeding","bedragBemiddelingsVergoeding","advieskostenMetHypotheekSchema","overigeBemiddelingsVergoeding","bedragOverigeBemiddelingsVergoeding","dossierVergoeding","tarievenSchema","financieringsopzet","advieskostenMetHypotheek","advieskostenZonderHypotheek","mapKostenDl2Ui","kostenVorm","vast","perUur","mapFinancieringsopzetDl2Ui","leveringsakteVaststellingWaarde","leveringsakteVastBedrag","hypotheekakteVaststellingWaarde","hypotheekakteVastBedrag","taxatiekostenVaststellingWaarde","taxatiekostenVastBedrag","hypothecaireInschrijvingVaststellingWaarde","hypothecaireInschrijvingVastBedrag","hypothecaireInschrijvingPercentage","mapAdvieskostenMetHypotheekDl2Ui","hypotheekAdvieskostenVaststellingWaarde","hypotheekAdvieskostenVastBedrag","hypotheekAdvieskostenBedragPerUur","bemiddelingsvergoedingGeldleningVaststellingWaarde","bemiddelingsvergoedingGeldleningVastBedrag","bemiddelingsvergoedingGeldleningBedragPerUur","overigeBemiddelingsvergoedingVaststellingWaarde","overigeBemiddelingsvergoedingVastBedrag","overigeBemiddelingsvergoedingBedragPerUur","dossiervergoedingVastBedrag","mapAdvieskostenZondeHypotheekDl2Ui","advieskostenVaststellingWaarde","advieskostenVastBedrag","advieskostenBedragPerUur","bemiddelingsvergoedingVaststellingWaarde","bemiddelingsvergoedingVastBedrag","bemiddelingsvergoedingBedragPerUur","mapVastBedrag","bedrag","mapTarievenUiToDl","Percentage","BedragPerUur","mapDlTargetToTarievenUiField","TarievenAjax","tarieven","mapTarievenDlToUi","beschikbareTaxatiebureausSchema","taxatiebureausSchema","beschikbareTaxatiebureaus","mapTaxatiebureausDlToUi","taxatiebureausId","taxatiebureaus","beschikbareTaxatieProducten","mapTaxatiebureausUiToDl","mapDlTargetToTaxatiebureausUiField","TaxatiebureausAjax","TopNavbar","showMeldingmaken","setShowMeldingMaken","showRemoteAssistance","setShowRemoteAssistance","showInvalidAdviesboxResultErrorPage","setShowInvalidAdviesboxResultErrorPage","organisatieUrl","vestigingNaam","organisatieNaam","organisaties","showMeldingMaken","iconblack","iconpadding","feature","isDisabled","showInvalidResultErrorPage","controleHypotheeknormSchema","controleMaandlast","controleMaandlastEnumWaarde","BenodigdInkomen","controleerMaximaleHypotheek","controleGewenstInkomenSchema","controleOpGewenstInkomen","NettoBesteedbaarInkomen","controleGewenstNbi","BehoudenHuidigNbi","margeOndergrensPercentage","margeBovengrensPercentage","vastBedrag","huidigNbiPercentage","gewijzigdeJarenTonen","benodigdKapitaalTonen","werkloosheidSchema","controleHypotheeknorm","controleGewenstInkomen","pensioenSchema","overlijdenSchema","duurOverzicht","Levenslang","overzichtDuurInJaren","overzichtTotLeeftijdInMaanden","jaarMaandInputSchema","mapPeriodeInMaandenDl2Ui","arbeidsongeschiktheidScenarioSchema","scenario","Standaard","aoPercentage","duurzaamAo","verdiencapaciteitPercentage","arbeidsongeschiktheidSchema","toetsjaarTekort","uitgangspuntenSchema","mapControleHypotheekNorm","mapControleGewenstInkomen","mapWerkloosheid","mapPensioen","mapOverlijden","mapArbeidsongeschikt","arbeidongeschiktheid","mapDlTargetToUitgangspuntenUiField","mapUitgangspuntenDlToUi","uitgangspunten","uitgangspuntenAdvies","mapUitgangspuntenControleHypotheeknorm","mapUitgangspuntenControleGewenstInkomen","mapUitgangspuntenWerkloosheid","mapUitgangspuntenPensioen","mapUitgangspuntenOverlijden","VasteDuurInJaren","TotLeeftijd","jaarMaandInMaanden","mapArbeidsongeschiktheidScenario","mapUitgangspuntenArbeidsongeschiktheid","mapUitgangspuntenUiToDl","instellingenScherm","ControleNormEnGewenstInkomen","namePrefix","UitgangspuntenControleMaandlastEnumOptions","WerkelijkeLast","UitgangspuntenControleHypotheeknormOptions","BrutoInkomenswens","UitgangspuntenControleGewenstInkomenOptions","MargeHuidigNbi","PercentageHuidigNbi","tonenConfig","syncScenarioMinimaalUitgangspuntSideEffects","create","UitgangspuntenOverlijdenGewensteDuurOverzichtOptions","activeCheckboxCell","minimumAoPercentage","Extra1","Extra2","addScenario","Uitgangspunten","UitgangspuntenAjax","beschikbarebeheerdersSchema","vermogensbeheerdersSchema","beschikbarebeheerders","mapVermogensbeheerdersDlToUi","vermogensbeheerdersId","vermogensbeheerders","mapVermogensbeheerdersUiToDl","mapDlTargetToVermogensbeheerdersUiField","VermogensbeheerdersAjax","beschikbareVerzekeraarsPartijen","beschikbareVerzekeraarsServiceProviders","beschikbareVerzekeraarsSoftwareKoppelingen","beschikbareVerzekeraarsSchema","verzekeraarsSchema","beschikbareVerzekeraars","verzekeraarPartij","mapverzekeraarsDlToUi","verzekeraars","mapDlTargetToverzekeraarsUiField","mapverzekeraarsUiToDl","VerzekeraarsAjax","NationaleWaarborgSchema","emailaddress","password","apifoutNwb","token","reedsActief","NationaleWaarborgModal","responseNwb","nationaleWaarborgApiOrigin","uid","pwd","NationaleWaarborgAjax","profile","softwareKoppelingSchema","softwareKoppelingenSchema","elementsInstellingenSchema","locatiePortaalUrl","organisatienummer","gebruikersnaamApi","wachtwoordApi","importkoppelingInstellingenSchema","koppelingKey","isValidUUID","koppelingNaam","mapSoftwareKoppelingenDlToUi","mapSoftwareKoppelingenUiToDl","mapDlTargetToSoftwareKoppelingenUiField","ElementsInstellingenModal","setSubmitDisabled","errorMessage","elementsInstellingen","softwareKoppelingWijzigenModalApi","HdnInstellingenModal","ImportkoppelingInstellingenModal","importkoppelingId","importkoppelingInstellingen","importkoppeling","renderForm","clipboard","writeText","uuidv4","handleGenerateGUID","importkoppelingInstellingenModalApi","formikProps","createTextInputSoftwareKoppelingNaamCell","softwareKoppelingInstellingenCell","isImportKoppeling","isImportkoppeling","modalContent","getModalContent","SoftwareKoppelingen","SoftwareKoppelingenAjax","AccessTokenDownload","jsonContent","expires_at","user_name","jsonString","blob","Blob","createElement","href","URL","createObjectURL","download","appendChild","click","removeChild","AbcKoppeling","authresult","InnerAuthenticatedInstellingenApp","settingsContext","linkToPortal","getAppLocation","origin","baseUrls","useUpscope","getNaamAdviseur","vestigingIdCookie","getCookie","getOTAP","component","exact","autorisatieNiveauAjax","koppelingschermAjax","tarievenAjax","adviesonderwerpenAjax","verzekeraarsAjax","bankgarantieinstellingenAjax","vermogensbeheerdersAjax","notarissenAjax","geldverstrekkersAjax","taxatiebureausAjax","serviceprovidersAjax","softwareKoppelingenAjax","klantprofielMotiveringAjax","berekeningenAjax","lastenoverzichtAjax","uitgangspuntenAjax","getPathname","assign","returnUrl","lastMutationDate","AuthenticatedInstellingenApp","useRouteMatch","sourceApp","reloadTimeInSeconds","UnauthenticatedInstellingenApp","SigninOidc","appLogo","logo","getHoofdvestigingId","hoofdvestigingEntry","entries","isHoofdvestiging","InstellingenApp","useHistory","useLocation","medewerkerData","medewerkerLoading","medewerkerError","vestigingenData","vestigingenLoading","vestigingenError","hoofdvestigingId","warn","cookieDomain","cookieName","setCookie","useCurrentVestiging","ValidatiePopup","aria-labelledby","centered","navigatiepopup","UserDetailsProvider","setUserDetailsProviderValue","modalShow","setModalShow","continueRef","getUserConfirmation","_message","callback","loadingLogo","SigninSilentOidc","ReactDOM","getElementById"],"mappings":"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","file":"static/js/main.f74cc494.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"warning\":\"autorisatie-niveau-row_warning__10veb\",\"relative\":\"autorisatie-niveau-row_relative__1b_Mr\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"clickable_label_fix\":\"beschikbare-bankgarantieinstellingen_clickable_label_fix__1mgo4\",\"hypotheek_opties_button\":\"beschikbare-bankgarantieinstellingen_hypotheek_opties_button__18KVX\",\"text_container\":\"beschikbare-bankgarantieinstellingen_text_container__2JEh4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"clickable_label_fix\":\"beschikbare-serviceproviders_clickable_label_fix__bw0O2\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"clickable_label_fix\":\"beschikbare-taxatiebureaus_clickable_label_fix__1Z9gi\",\"text_container\":\"beschikbare-taxatiebureaus_text_container__1wzBi\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"clickable_label_fix\":\"beschikbare-software-koppelingen_clickable_label_fix__Oxg-1\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"table_header\":\"autorisatie-niveau-grid_table_header__1MUTM\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"documenten_wrapper\":\"documenten_documenten_wrapper__Cx5Ov\",\"voorblad\":\"documenten_voorblad__1Qi50\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"checkbox\":\"debug_checkbox__nbbmg\",\"checkbox_label\":\"debug_checkbox_label__1AWmn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"backdrop-1\":\"ModalButton_backdrop-1__1Zf1Q\",\"dialog-1\":\"ModalButton_dialog-1__1IqjC\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"homepage_logo\":\"TopNavbar_homepage_logo__3SD_4\",\"dropdown_menu\":\"TopNavbar_dropdown_menu__2xxBY\",\"nav_icon\":\"TopNavbar_nav_icon__1sWH3\",\"dropdown_item\":\"TopNavbar_dropdown_item__266Ba\",\"small_text\":\"TopNavbar_small_text__2y99d\",\"iconblack\":\"TopNavbar_iconblack__1ptOL\",\"switch_environment_icon\":\"TopNavbar_switch_environment_icon__2SMpI\",\"switch_environment\":\"TopNavbar_switch_environment__1aLTV\",\"iconpadding\":\"TopNavbar_iconpadding__1Xq-_\",\"nav_icon_new_entry_dot\":\"TopNavbar_nav_icon_new_entry_dot__3gcHJ\"};","module.exports = __webpack_public_path__ + \"static/media/new-collapsed-brand-logo.2906194a.svg\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"modal_footer\":\"beschikbare-notarissen_modal_footer__3NGlP\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"clickable_label_fix\":\"arbeidsongeschiktheid_clickable_label_fix__2JlTN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"clickable_label_fix\":\"beschikbarebeheerders_clickable_label_fix__3XlkI\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"clickable_label_fix\":\"beschikbare-verzekeraars_clickable_label_fix__SkHAT\",\"align_center\":\"beschikbare-verzekeraars_align_center__3R7Qg\"};","//----------------------\n// \n// Generated using the NSwag toolchain v13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\n// \n//----------------------\n\n/* tslint:disable */\n/* eslint-disable */\n// ReSharper disable InconsistentNaming\n\n\n\n/** Output voor het opvragen of een specifiek onderdeel actief is */\nexport interface ActiefOutput {\n /** Veld om aan te geven of het onderdee; actief is */\n isActief: boolean;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface Adres {\n straat: string | null;\n huisnummer: number | null;\n toevoeging: string | null;\n postcode: string | null;\n plaats: string | null;\n landCode: string | null;\n}\n\n/** Bevat de inhoud van het Adviesbox-form Adviesonderwerpen. */\nexport interface Adviesonderwerpen {\n /** Indicatie dat het onderwerp 'Hypotheek' getoond moet worden */\n onderwerpHypotheekTonen: boolean | null;\n /** Indicatie dat het onderwerp 'Overlijden' getoond moet worden */\n onderwerpOverlijdenTonen: boolean | null;\n /** Indicatie dat het onderwerp 'Arbeidsongeschiktheid' getoond moet worden */\n onderwerpArbeidsongeschiktheidTonen: boolean | null;\n /** Indicatie dat het onderwerp 'Werkloosheid' getoond moet worden */\n onderwerpWerkloosheidTonen: boolean | null;\n /** Indicatie dat het onderwerp 'Pensioen' getoond moet worden */\n onderwerpPensioenTonen: boolean | null;\n /** Indicatie dat het onderwerp 'Vermogensopbouw' getoond moet worden */\n onderwerpVermogensopbouwTonen: boolean | null;\n /** Indicatie dat het onderdeel 'Kapitaalverzekering' getoond moet worden */\n onderdeelKapitaalverzekeringTonen: boolean | null;\n /** Indicatie dat het onderdeel 'ORV' getoond moet worden */\n onderdeelOrvTonen: boolean | null;\n /** Indicatie dat het onderdeel 'AOV' getoond moet worden */\n onderdeelAovTonen: boolean | null;\n /** Indicatie dat het onderdeel 'Vermogen' getoond moet worden */\n onderdeelVermogenTonen: boolean | null;\n /** Indicatie dat het onderdeel 'Krediet' getoond moet worden */\n onderdeelKredietTonen: boolean | null;\n /** Indicatie dat het onderdeel 'Uitkerende lijfrente' getoond moet worden */\n onderdeelUitkerendeLijfrenteTonen: boolean | null;\n /** Indicatie dat het onderdeel 'Overig' getoond moet worden */\n onderdeelOverigTonen: boolean | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Adviesonderwerpen. */\nexport interface AdviesonderwerpenOutput {\n adviesonderwerpen: Adviesonderwerpen | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** AoScenarioOptions Standaard = 1, Extra1 = 2, Extra2 = 3 */\nexport enum AoScenarioOptions {\n Standaard = \"Standaard\",\n Extra1 = \"Extra1\",\n Extra2 = \"Extra2\",\n}\n\n/** Bevat de inhoud van het Adviesbox-form Autorisatieniveau. */\nexport interface Autorisatieniveau {\n algemeenNiveau: InstellingNiveauOptions;\n documentNiveau: InstellingNiveauOptions;\n tarievenNiveau: InstellingNiveauOptions;\n berekeningenNiveau: InstellingNiveauOptions;\n lastenoverzichtenNiveau: InstellingNiveauOptions;\n geldverstrekkersNiveau: InstellingNiveauOptions;\n verzekeraarsNiveau: InstellingNiveauOptions;\n vermogensbeheerdersNiveau: InstellingNiveauOptions;\n bankgarantieInstellingenNiveau: InstellingNiveauOptions;\n taxatiebureausNiveau: InstellingNiveauOptions;\n notarissenNiveau: InstellingNiveauOptions;\n serviceprovidersNiveau: InstellingNiveauOptions;\n klantprofielMotiveringNiveau: InstellingNiveauOptions;\n adviesonderwerpenNiveau: InstellingNiveauOptions;\n uitgangspuntenAdviesNiveau: InstellingNiveauOptions;\n standaardTekstenNiveau: InstellingNiveauOptions;\n generiekeKoppelingenNiveau: InstellingNiveauOptions;\n hdnNiveau: InstellingNiveauOptions;\n elementsNiveau: InstellingNiveauOptions;\n nationaleHypotheekbondNiveau: InstellingNiveauOptions;\n nationaleWaarborgNiveau: InstellingNiveauOptions;\n softwareKoppelingenNiveau: InstellingNiveauOptions;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Autorisatieniveau. */\nexport interface AutorisatieniveauOutput {\n autorisatieniveau: Autorisatieniveau | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface BadRequestResult {\n statusCode: number;\n}\n\nexport interface BankgarantieinstellingPartij {\n code: string | null;\n partijnaam: string | null;\n actief: boolean;\n agentnummer: string | null;\n}\n\nexport interface Bankgarantieinstellingen {\n partijen: BankgarantieinstellingPartij[] | null;\n}\n\nexport interface BankgarantieinstellingenOutput {\n bankgarantieinstellingen: Bankgarantieinstellingen | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de inhoud van het Adviesbox-form Voorkeuren/Berekeningen. */\nexport interface Berekeningen {\n algemeen: BerekeningenAlgemeen;\n heffingskortingen: BerekeningenHeffingskortingen;\n scenarios: BerekeningenScenarios;\n}\n\n/** Bevat de inhoud van 'Algemeen'. */\nexport interface BerekeningenAlgemeen {\n /** Huurstijging per jaar */\n huurstijgingPercentage: number;\n /** Indexatie waarde pand per jaar */\n indexatieWaardePandPercentage: number;\n /** Mindering overwaarde op de gewenste hypotheek */\n minderingOverwaardeGewensteHypotheek: boolean;\n}\n\n/** Bevat de inhoud van 'Heffingskortingen'. */\nexport interface BerekeningenHeffingskortingen {\n /** Algemene heffingskorting */\n algemeneHeffingskorting: boolean;\n /** Arbeidskorting */\n arbeidskorting: boolean;\n /** Inkomensafhankelijke combinatiekorting */\n inkomensafhankelijkeCombinatiekorting: boolean;\n /** Ouderenkorting */\n ouderenkorting: boolean;\n /** Alleenstaande ouderenkorting */\n alleenstaandeOuderenkorting: boolean;\n /** Werkbonus */\n werkbonus: boolean;\n /** Kindgebonden budget */\n kindgebondenBudget: boolean;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Voorkeuren/Berekeningen. */\nexport interface BerekeningenOutput {\n berekeningen: Berekeningen | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de inhoud van 'Scenario's'. */\nexport interface BerekeningenScenarios {\n /** Ingangsdatum scenario's */\n ingangsdatumScenarios: string;\n /** Lengte van het overzicht in jaren */\n lengteOverzichtInJaren: number;\n /** Eindleeftijd scenario's */\n eindleeftijdScenarios: number;\n /** Rekenrente contante waarde */\n rekenrenteContanteWaardePercentage: number;\n controleNbi: ControleNbiOptions;\n}\n\n/** ControleGewenstInkomenOptions NettoBesteedbaarInkomen = 1, BrutoInkomenswens = 2, Geen = 3 */\nexport enum ControleGewenstInkomenOptions {\n NettoBesteedbaarInkomen = \"NettoBesteedbaarInkomen\",\n BrutoInkomenswens = \"BrutoInkomenswens\",\n Geen = \"Geen\",\n}\n\n/** ControleGewenstNbiOptions BehoudenHuidigNbi = 0, MargeHuidigNbi = 1, VastBedrag = 2, PercentageHuidigNbi = 3 */\nexport enum ControleGewenstNbiOptions {\n BehoudenHuidigNbi = \"BehoudenHuidigNbi\",\n MargeHuidigNbi = \"MargeHuidigNbi\",\n VastBedrag = \"VastBedrag\",\n PercentageHuidigNbi = \"PercentageHuidigNbi\",\n}\n\n/** ControleMaandlastOptions BenodigdInkomen = 1, WerkelijkeLast = 2 */\nexport enum ControleMaandlastOptions {\n BenodigdInkomen = \"BenodigdInkomen\",\n WerkelijkeLast = \"WerkelijkeLast\",\n}\n\n/** ControleNbiOptions HuidigeSituatie = 1, SituatieNaAdvies = 2 */\nexport enum ControleNbiOptions {\n HuidigeSituatie = \"HuidigeSituatie\",\n SituatieNaAdvies = \"SituatieNaAdvies\",\n}\n\n/** Bevat de inhoud van het Adviesbox-form Voorkeuren/Documenten. */\nexport interface Documenten {\n ondertekening: DocumentenOndertekening | null;\n voorbladVervolgpaginas: DocumentenVoorbladVervolgpaginas | null;\n overzichten: DocumentenOverzichten | null;\n lastenoverzichten: DocumentenLastenoverzichten | null;\n nbiOverzicht: DocumentenNbiOverzicht | null;\n}\n\n/** Bevat de inhoud van 'Kolommen in de lastenoverzichten'. */\nexport interface DocumentenLastenoverzichten {\n /** Bruto inkomen */\n brutoInkomen: boolean;\n /** Som hypotheken */\n somHypotheken: boolean;\n /** Waardeopbouw */\n waardeopbouw: boolean;\n /** Huur */\n huur: boolean;\n /** Rente */\n rente: boolean;\n /** Hypotheek aflossing */\n hypotheekAflossing: boolean;\n /** Uitkering kapitaalverzekeringen */\n uitkeringKapitaalverzekeringen: boolean;\n /** Verzekeringspremies */\n verzekeringspremies: boolean;\n /** Spaar- en beleggingsdepot */\n spaarEnBeleggingsdepot: boolean;\n /** Opname uit depot */\n opnameUitDepot: boolean;\n /** Krediet last */\n kredietlast: boolean;\n /** Overige uitgaven */\n overigeUitgaven: boolean;\n /** Bruto last */\n brutoLast: boolean;\n /** Fiscaal voordeel */\n fiscaalVoordeel: boolean;\n /** VRH */\n vrh: boolean;\n /** Netto last */\n nettoLast: boolean;\n}\n\n/** Bevat de inhoud van 'Kolommen in het netto besteedbaar inkomen overzicht'. */\nexport interface DocumentenNbiOverzicht {\n /** Hypotheek */\n hypotheek: boolean;\n /** Verzekeringen */\n verzekeringen: boolean;\n /** Spaar- en beleggingsdepots */\n spaarEnBeleggingsdepots: boolean;\n /** Krediet last */\n kredietLast: boolean;\n /** Overige uitgaven */\n overigUitgaven: boolean;\n /** Totale uitgaven */\n totaleUitgaven: boolean;\n /** Bruto inkomen */\n brutoInkomen: boolean;\n /** Inkomstenbelasting */\n inkomstenbelasting: boolean;\n /** VRH */\n vrh: boolean;\n /** Netto inkomsten */\n nettoInkomsten: boolean;\n /** Netto besteedbaar inkomen */\n nbi: boolean;\n}\n\n/** Bevat de inhoud van 'Ondertekening'. */\nexport interface DocumentenOndertekening {\n tonenOpFormulieren: TonenOpFormulierenOptions;\n weergaveAdviseurnaam: WeergaveAdviseurnaamOptions;\n /** Extra ondertekeningsregel */\n extraOndertekeningsregel: string | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Voorkeuren/Documenten. */\nexport interface DocumentenOutput {\n /** Id van de entiteit */\n entiteitId: string | null;\n documenten: Documenten | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de inhoud van 'Overzichten'. */\nexport interface DocumentenOverzichten {\n /** Bedrijfslogo tonen op overzichten */\n bedrijfslogoOverzichtenTonen: boolean;\n overzichtTonenVan: OverzichtTonenVanOptions;\n /** Toon grafieken bij scenario overzichten */\n toonGrafiekScenarioOverzicht: boolean;\n}\n\n/** Bevat de inhoud van 'Voorblad en vervolgpagina's'. */\nexport interface DocumentenVoorbladVervolgpaginas {\n /** Bedrijfslogo tonen op voorblad */\n bedrijfslogoVoorbladTonen: boolean;\n uitlijningBedrijfslogoVoorblad: UitlijningOptions | null;\n /** Bedrijfsgegevens tonen op voorblad */\n bedrijfsgegevensVoorbladTonen: boolean;\n uitlijningBedrijfsgegevensVoorblad: UitlijningOptions | null;\n /** Bedrijfslogo op vervolgpagina's tonen */\n bedrijfsgegevensVervolgpaginasTonen: boolean;\n uitlijningBedrijfslogoVervolgpaginas: UitlijningOptions | null;\n}\n\n/** DuurOverzichtOptions TotLeeftijd = 1, VasteDuurInJaren = 2, Levenslang = 3 */\nexport enum DuurOverzichtOptions {\n TotLeeftijd = \"TotLeeftijd\",\n VasteDuurInJaren = \"VasteDuurInJaren\",\n Levenslang = \"Levenslang\",\n}\n\n/** Bevat de velden voor het instellen van de koppeling met Elements. */\nexport interface Elements {\n /** URL van het portaal van Elements */\n locatiePortaalUrl: string | null;\n /** Organisatienummer */\n organisatienummer: string | null;\n /** Gebruikersnaam voor de API van Elements */\n gebruikersnaamApi: string | null;\n /** Wachtwoord voor de API van Elements */\n wachtwoordApi: string | null;\n}\n\n/** Output voor het instellen van de koppeling met Elements. */\nexport interface ElementsOutput {\n elements: Elements | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface GeldverstrekkerPartij {\n serviceproviderId: string | null;\n softwareKoppelingId: string | null;\n aanvullendeRetourwijze: number | null;\n hypotheeklabels: Hypotheeklabel[] | null;\n code: string | null;\n partijnaam: string | null;\n actief: boolean;\n agentnummer: string | null;\n}\n\nexport interface Geldverstrekkers {\n partijen: GeldverstrekkerPartij[] | null;\n serviceproviders: ServiceproviderReadOnly[] | null;\n softwareKoppelingen: SoftwareKoppelingReadOnly[] | null;\n}\n\nexport interface GeldverstrekkersOutput {\n geldverstrekkers: Geldverstrekkers | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** GeslachtOpties Geen = 0, Man = 1, Vrouw = 2 */\nexport enum GeslachtOpties {\n Geen = \"Geen\",\n Man = \"Man\",\n Vrouw = \"Vrouw\",\n}\n\nexport interface Hypotheeklabel {\n code: number;\n readonly omschrijving: string | null;\n hypotheekopties: Hypotheekoptie[] | null;\n}\n\nexport interface Hypotheekoptie {\n code: number;\n readonly omschrijving: string | null;\n readonly toelichting: string | null;\n geselecteerd: boolean;\n readonly optieGroep: number | null;\n}\n\n/** Bevat de velden voor het instellen van een importkoppeling. */\nexport interface Importkoppeling {\n /** Koppeling key */\n koppelingKey: string | null;\n /** Naam van de importkoppeling */\n readonly koppelingNaam: string | null;\n}\n\n/** Output voor het instellen van een importkoppeling. */\nexport interface ImportkoppelingOutput {\n importkoppeling: Importkoppeling | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Output voor het instellen van een importkoppeling. */\nexport interface ImportkoppelingenOutput {\n /** De velden voor het instellen van de importkoppeling */\n importkoppelingen: Importkoppeling[] | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** InstellingNiveauOptions Organisatie = 1, Vestiging = 2, Medewerker = 3 */\nexport enum InstellingNiveauOptions {\n Organisatie = \"Organisatie\",\n Vestiging = \"Vestiging\",\n Medewerker = \"Medewerker\",\n}\n\n/** Bevat de inhoud van het Adviesbox-form Klantprofiel en motivering. */\nexport interface KlantprofielMotivering {\n soortControleVolledigheid: SoortControleVolledigheidOptions;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Klantprofiel en motivering. */\nexport interface KlantprofielMotiveringOutput {\n klantprofielMotivering: KlantprofielMotivering | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de inhoud van het Adviesbox-form Voorkeuren/Lastenoverzicht. */\nexport interface Lastenoverzicht {\n meenemenInLastenoverzicht: LastenoverzichtMeenemen | null;\n verrekenenInLasten: LastenoverzichtVerrekenen | null;\n}\n\n/** Bevat de inhoud van 'Meenemen in lastenoverzicht'. */\nexport interface LastenoverzichtMeenemen {\n /** Kredietlasten */\n kredietlasten: boolean;\n /** Erfpacht */\n erfpacht: boolean;\n /** Servicekosten */\n servicekosten: boolean;\n /** Financieringskosten */\n financieringskosten: boolean;\n /** Boeterente */\n boeterente: boolean;\n /** Gespreide betaling advieskosten en bemiddelingsvergoeding */\n gespreideBetaling: boolean;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Voorkeuren/Lastenoverzicht. */\nexport interface LastenoverzichtOutput {\n lastenoverzicht: Lastenoverzicht | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de inhoud van 'Verrekenen in lasten'. */\nexport interface LastenoverzichtVerrekenen {\n /** Uitkeringen uit financiĆ«le dekkingen */\n uitkeringenFinancieleDekkingen: boolean;\n /** Aflossingen hypotheek (niet zijnde: annuĆÆtair en lineair) */\n aflossingenHypotheek: boolean;\n /** Aanvangsstortingen / eerste inleg */\n aanvangsstortingen: boolean;\n /** Extra stortingen */\n extraStortingen: boolean;\n /** Onttrekkingen */\n onttrekkingen: boolean;\n /** Extra opnames */\n extraOpnames: boolean;\n /** 1e jaar alleen nieuwe situatie tonen */\n jaar1AlleenNieuweSituatie: boolean;\n}\n\n/** MotiveringOnderwerpsoort Geen = 0, Algemeen = 1, Rentevastperiode = 2, FiscaleAftrek = 3, InbrengEigenGeld = 4, OversluitenHypotheek = 5, VerantwoordeWoonlasten = 6, Box3Consumptief = 7, AfdekkenOverlijdensrisico = 8, AfdekkenAOWW = 9, Pensioenvoorziening = 10, HoogteOpbouwDoelvermogen = 11, WijzeOpbouwDoelvermogen = 12, Beleggingsproduct = 13, Beleggingsprofiel = 14, Fondskeuze = 15, OversluitenBeleggingspolis = 16, AfdekkenWW = 17, Kredieten = 18, DubbeleWoonlasten = 19, EerderStoppen = 20, Geldverstrekker = 21, HypotheekAflossen = 22, Schade = 23, Risicoprofiel = 24, Nazorg = 25, Energie = 26, Telecom = 27, Uitvaart = 28, Verduurzaming = 29, Alles = -1 */\nexport enum MotiveringOnderwerpsoort {\n Geen = \"Geen\",\n Algemeen = \"Algemeen\",\n Rentevastperiode = \"Rentevastperiode\",\n FiscaleAftrek = \"FiscaleAftrek\",\n InbrengEigenGeld = \"InbrengEigenGeld\",\n OversluitenHypotheek = \"OversluitenHypotheek\",\n VerantwoordeWoonlasten = \"VerantwoordeWoonlasten\",\n Box3Consumptief = \"Box3Consumptief\",\n AfdekkenOverlijdensrisico = \"AfdekkenOverlijdensrisico\",\n AfdekkenAOWW = \"AfdekkenAOWW\",\n Pensioenvoorziening = \"Pensioenvoorziening\",\n HoogteOpbouwDoelvermogen = \"HoogteOpbouwDoelvermogen\",\n WijzeOpbouwDoelvermogen = \"WijzeOpbouwDoelvermogen\",\n Beleggingsproduct = \"Beleggingsproduct\",\n Beleggingsprofiel = \"Beleggingsprofiel\",\n Fondskeuze = \"Fondskeuze\",\n OversluitenBeleggingspolis = \"OversluitenBeleggingspolis\",\n AfdekkenWW = \"AfdekkenWW\",\n Kredieten = \"Kredieten\",\n DubbeleWoonlasten = \"DubbeleWoonlasten\",\n EerderStoppen = \"EerderStoppen\",\n Geldverstrekker = \"Geldverstrekker\",\n HypotheekAflossen = \"HypotheekAflossen\",\n Schade = \"Schade\",\n Risicoprofiel = \"Risicoprofiel\",\n Nazorg = \"Nazorg\",\n Energie = \"Energie\",\n Telecom = \"Telecom\",\n Uitvaart = \"Uitvaart\",\n Verduurzaming = \"Verduurzaming\",\n Alles = \"Alles\",\n}\n\nexport interface NotarisPersoon {\n achternaam: string | null;\n voorvoegsel: string | null;\n voorletters: string | null;\n geslacht: GeslachtOpties;\n}\n\nexport interface Notariskantoor {\n notariskantoorId: string | null;\n kantoornaam: string;\n adres: Adres | null;\n contactpersoon: NotarisPersoon | null;\n telefoonnummer: string | null;\n}\n\nexport interface Notarissen {\n partijen: Notariskantoor[] | null;\n}\n\nexport interface NotarissenOutput {\n notarissen: Notarissen | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** OverzichtTonenVanOptions AlleJaren = 1, AllenJarenMetWijzigingen = 2 */\nexport enum OverzichtTonenVanOptions {\n AlleJaren = \"AlleJaren\",\n AllenJarenMetWijzigingen = \"AllenJarenMetWijzigingen\",\n}\n\nexport interface Rapportage {\n structuren: RapportageStructuur[];\n}\n\nexport interface RapportageElement {\n code: number;\n naam: string | null;\n naamWeergevenAlsTitel: boolean;\n defaultGeselecteerdVoor: StandaardRapportOptions[] | null;\n geselecteerd: boolean;\n inhoud: string | null;\n defaultInhoud: string | null;\n inhoudBeschikbaar: boolean | null;\n inhoudWijzigbaar: boolean | null;\n soortElement: SoortElementOptions;\n volgnummer: number;\n kolommen: string[] | null;\n elementen: RapportageElement[] | null;\n}\n\nexport interface RapportageKolommenLasten {\n brutoInkomen: boolean;\n somHypotheken: boolean;\n waardeopbouw: boolean;\n huur: boolean;\n rente: boolean;\n hypotheekAflossing: boolean;\n uitkeringKapitaalverzekering: boolean;\n verzekeringspremies: boolean;\n spaarBeleggingsdepots: boolean;\n opnameUitDepot: boolean;\n kredietLast: boolean;\n overigeUitgaven: boolean;\n brutoLast: boolean;\n fiscaalVoordeel: boolean;\n vrh: boolean;\n nettoLast: boolean;\n}\n\nexport interface RapportageKolommenNbi {\n hypotheek: boolean;\n verzekeringen: boolean;\n spaarBeleggingsdepots: boolean;\n kredietLast: boolean;\n overigeUitgaven: boolean;\n brutoLast: boolean;\n inkomstenbelasting: boolean;\n vrh: boolean;\n nettoInkomen: boolean;\n nbi: boolean;\n}\n\nexport interface RapportageKolomselectie {\n kolommenLasten: RapportageKolommenLasten;\n kolommenNbi: RapportageKolommenNbi;\n}\n\nexport interface RapportageOutput {\n rapportage: Rapportage | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface RapportageStructuur {\n structuurId: string | null;\n naam: string;\n volgnummer: number;\n standaardRapport: StandaardRapportOptions | null;\n isVerwijderbaar: boolean;\n kolomselectie: RapportageKolomselectie;\n elementen: RapportageElement[];\n}\n\nexport interface Serviceprovider {\n serviceproviderId: string | null;\n wijzigbaar: boolean;\n naam: string;\n actief: boolean;\n hdnNummer: string | null;\n}\n\nexport interface ServiceproviderReadOnly {\n serviceproviderId: string;\n readonly naam: string | null;\n readonly hdnNummer: string | null;\n}\n\nexport interface Serviceproviders {\n partijen: Serviceprovider[] | null;\n}\n\nexport interface ServiceprovidersOutput {\n serviceproviders: Serviceproviders | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface SoftwareKoppeling {\n softwareKoppelingId: string | null;\n wijzigbaar: boolean;\n naam: string;\n actief: boolean;\n hdnNummer: string | null;\n isImportkoppeling: boolean;\n}\n\nexport interface SoftwareKoppelingReadOnly {\n softwareKoppelingId: string;\n readonly naam: string | null;\n}\n\nexport interface SoftwareKoppelingen {\n partijen: SoftwareKoppeling[] | null;\n}\n\nexport interface SoftwareKoppelingenOutput {\n softwareKoppelingen: SoftwareKoppelingen | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** SoortControleVolledigheidOptions GeenControle = 1, AlleenKlantprofiel = 2, KlantprofielEnMotivering = 3 */\nexport enum SoortControleVolledigheidOptions {\n GeenControle = \"GeenControle\",\n AlleenKlantprofiel = \"AlleenKlantprofiel\",\n KlantprofielEnMotivering = \"KlantprofielEnMotivering\",\n}\n\n/** SoortElementOptions Onderdeel = 1, Hoofdstuk = 2, Koptekst = 3, Tekstblok = 4, Grafiek = 5, Tabel = 6 */\nexport enum SoortElementOptions {\n Onderdeel = \"Onderdeel\",\n Hoofdstuk = \"Hoofdstuk\",\n Koptekst = \"Koptekst\",\n Tekstblok = \"Tekstblok\",\n Grafiek = \"Grafiek\",\n Tabel = \"Tabel\",\n}\n\n/** StandaardRapportOptions VolledigFinancieelPlan = 1, KortRapport = 2, Inventarisatierapport = 3, Standaardrapport = 4 */\nexport enum StandaardRapportOptions {\n VolledigFinancieelPlan = \"VolledigFinancieelPlan\",\n KortRapport = \"KortRapport\",\n Inventarisatierapport = \"Inventarisatierapport\",\n Standaardrapport = \"Standaardrapport\",\n}\n\nexport interface StandaardTekst {\n standaardtekstVoor: StandaardtekstVoorOptions;\n korteOmschrijving: string | null;\n tekst: string | null;\n}\n\nexport interface StandaardTeksten {\n standaardTekstenMotiveringOnderwerp: StandaardTekst[];\n}\n\nexport interface StandaardTekstenOutput {\n standaardTeksten: StandaardTeksten | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** StandaardtekstVoorOptions OnsAdvies = 1, AfwijkendeKeuze = 2 */\nexport enum StandaardtekstVoorOptions {\n OnsAdvies = \"OnsAdvies\",\n AfwijkendeKeuze = \"AfwijkendeKeuze\",\n}\n\n/** Gegevens van de tarieven */\nexport interface Tarieven {\n leveringsakteVaststellingWaarde: VastBedragOptions;\n /** Vast bedrag voor 'Leveringsakte' */\n leveringsakteVastBedrag: number | null;\n hypotheekakteVaststellingWaarde: VastBedragOptions;\n /** Vast bedrag voor 'Hypotheekakte' */\n hypotheekakteVastBedrag: number | null;\n taxatiekostenVaststellingWaarde: VastBedragOptions;\n /** Vast bedrag voor 'Taxatiekosten' */\n taxatiekostenVastBedrag: number | null;\n hypothecaireInschrijvingVaststellingWaarde: VastBedragPercentageOptions;\n /** Vast bedrag voor 'Hypothecaire inschrijving' */\n hypothecaireInschrijvingVastBedrag: number | null;\n /** Percentage voor 'Hypothecaire inschrijving' */\n hypothecaireInschrijvingPercentage: number | null;\n hypotheekAdvieskostenVaststellingWaarde: VastBedragBedragPerUurOptions;\n /** Vast bedrag voor 'Advieskosten' (met hypotheekadvies) */\n hypotheekAdvieskostenVastBedrag: number | null;\n /** Bedrag per uur voor 'Advieskosten' (met hypotheekadvies) */\n hypotheekAdvieskostenBedragPerUur: number | null;\n bemiddelingsvergoedingGeldleningVaststellingWaarde: VastBedragBedragPerUurOptions;\n /** Vast bedrag voor 'Bemiddelingsvergoeding geldlening' */\n bemiddelingsvergoedingGeldleningVastBedrag: number | null;\n /** Bedrag per uur voor 'Bemiddelingsvergoeding geldlening' */\n bemiddelingsvergoedingGeldleningBedragPerUur: number | null;\n overigeBemiddelingsvergoedingVaststellingWaarde: VastBedragBedragPerUurOptions;\n /** Vast bedrag voor 'Overige bemiddelingsvergoeding' */\n overigeBemiddelingsvergoedingVastBedrag: number | null;\n /** Bedrag per uur voor 'Overige bemiddelingsvergoeding' */\n overigeBemiddelingsvergoedingBedragPerUur: number | null;\n /** Vast bedrag voor 'Dossiervergoeding' */\n dossiervergoedingVastBedrag: number | null;\n advieskostenVaststellingWaarde: VastBedragBedragPerUurOptions;\n /** Vast bedrag voor 'Advieskosten' (zonder hypotheekadvies) */\n advieskostenVastBedrag: number | null;\n /** Bedrag per uur voor 'Advieskosten' (zonder hypotheekadvies) */\n advieskostenBedragPerUur: number | null;\n bemiddelingsvergoedingVaststellingWaarde: VastBedragBedragPerUurOptions;\n /** Vast bedrag voor 'Bemiddelingsvergoeding' (zonder hypotheekadvies) */\n bemiddelingsvergoedingVastBedrag: number | null;\n /** Bedrag per uur voor 'Bemiddelingsvergoeding' (zonder hypotheekadvies) */\n bemiddelingsvergoedingBedragPerUur: number | null;\n}\n\n/** Outputmodel voor het opvragen van de gegevens van Tarieven. */\nexport interface TarievenOutput {\n tarieven: Tarieven | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface TaxatiebureauPartij {\n code: string | null;\n partijnaam: string | null;\n actief: boolean;\n agentnummer: string | null;\n}\n\nexport interface Taxatiebureaus {\n partijen: TaxatiebureauPartij[] | null;\n}\n\nexport interface TaxatiebureausOutput {\n taxatiebureaus: Taxatiebureaus | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Output voor het opvragen van de token voor de communicatie met een externe partij */\nexport interface TokenOutput {\n tokens: Tokens | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de velden voor het onderhouden van een token voor de communicatie met een externe partij. */\nexport interface Tokens {\n /** Token voor het communiceren met een externe partij. */\n token: string | null;\n}\n\n/** TonenOpFormulierenOptions AdviseurnaamVanHoofdkantoor = 1, AdviseurnaamVanBijkantoor = 2 */\nexport enum TonenOpFormulierenOptions {\n AdviseurnaamVanHoofdkantoor = \"AdviseurnaamVanHoofdkantoor\",\n AdviseurnaamVanBijkantoor = \"AdviseurnaamVanBijkantoor\",\n}\n\n/** Bevat de inhoud van het Adviesbox-form Uitgangspunten Advies. */\nexport interface UitgangspuntenAdvies {\n /** Geeft aan of een call vanaf Instellingenscherm of Scenario komt */\n instellingenScherm: boolean;\n werkloosheid: UitgangspuntenAdviesWerkloosheid;\n pensioen: UitgangspuntenAdviesPensioen;\n overlijden: UitgangspuntenAdviesOverlijden;\n arbeidongeschiktheid: UitgangspuntenAdviesArbeidongeschiktheid;\n}\n\n/** Bevat de inhoud van een scenario t.b.v. 'Arbeidongeschiktheid'. */\nexport interface UitgangspuntenAdviesAoScenario {\n scenario: AoScenarioOptions;\n /** AO percentage */\n aoPercentage: number;\n /** Duurzaam AO */\n duurzaamAo: boolean | null;\n /** Benutting verdiencapaciteit */\n verdiencapaciteitPercentage: number;\n}\n\n/** Bevat de inhoud van 'Arbeidongeschiktheid'. */\nexport interface UitgangspuntenAdviesArbeidongeschiktheid {\n /** Toetsjaar tekort */\n toetsjaarTekort: number;\n /** De AO-scenario's */\n scenarios: UitgangspuntenAdviesAoScenario[];\n controleHypotheeknorm: UitgangspuntenAdviesControleHypotheeknorm;\n controleGewenstInkomen: UitgangspuntenAdviesControleGewenstInkomen;\n}\n\n/** Bevat de uitgangspunten voor de controle op gewenst inkomen. */\nexport interface UitgangspuntenAdviesControleGewenstInkomen {\n controleOpGewenstInkomen: ControleGewenstInkomenOptions;\n controleGewenstNbi: ControleGewenstNbiOptions | null;\n /** Ondergrens van 'Acceptabele marge op huidig NBI' */\n margeOndergrensPercentage: number | null;\n /** Bovengrens van 'Acceptabele marge op huidig NBI' */\n margeBovengrensPercentage: number | null;\n /** Bedrag bij 'Overhouden van vast bedrag NBI' */\n vastBedrag: number | null;\n /** Percentage van huidig NBI */\n huidigNbiPercentage: number | null;\n /** Indicatie dat de tabel 'Gewijzigde jaren' getoond moet worden */\n gewijzigdeJarenTonen: boolean | null;\n /** Indicatie dat de tabel 'Benodigd kapitaal' getoond moet worden */\n benodigdKapitaalTonen: boolean | null;\n}\n\n/** Bevat de uitgangspunten voor de controle op hypotheeknorm. */\nexport interface UitgangspuntenAdviesControleHypotheeknorm {\n controleMaandlast: ControleMaandlastOptions | null;\n /** Indicatie dat op de maximale hypotheeksom gecontroleerd moet worden */\n controleerMaximaleHypotheek: boolean;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Uitgangspunten Advies. */\nexport interface UitgangspuntenAdviesOutput {\n uitgangspuntenAdvies: UitgangspuntenAdvies | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de inhoud van 'Overlijden'. */\nexport interface UitgangspuntenAdviesOverlijden {\n duurOverzicht: DuurOverzichtOptions;\n /** De duur van het overzicht bij keuze voor 'VasteDuurInJaren' */\n overzichtDuurInJaren: number | null;\n /** De leeftijd tot waar het overzicht moet lopen bij keuze voor 'TotLeeftijd' */\n overzichtTotLeeftijdInMaanden: number | null;\n controleHypotheeknorm: UitgangspuntenAdviesControleHypotheeknorm;\n controleGewenstInkomen: UitgangspuntenAdviesControleGewenstInkomen;\n}\n\n/** Bevat de inhoud van 'Pensioen'. */\nexport interface UitgangspuntenAdviesPensioen {\n controleHypotheeknorm: UitgangspuntenAdviesControleHypotheeknorm;\n controleGewenstInkomen: UitgangspuntenAdviesControleGewenstInkomen;\n}\n\n/** Bevat de inhoud van 'Werkloosheid'. */\nexport interface UitgangspuntenAdviesWerkloosheid {\n controleHypotheeknorm: UitgangspuntenAdviesControleHypotheeknorm;\n controleGewenstInkomen: UitgangspuntenAdviesControleGewenstInkomen;\n}\n\n/** UitlijningOptions Links = 1, Rechts = 2, Midden = 3 */\nexport enum UitlijningOptions {\n Links = \"Links\",\n Rechts = \"Rechts\",\n Midden = \"Midden\",\n}\n\nexport interface ValidationResultModel {\n code: string | null;\n target: string | null;\n message: string | null;\n}\n\nexport interface ValidationResultsModel {\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** VastBedragBedragPerUurOptions IndicatieveWaarde = 1, VastBedrag = 2, BedragPerUur = 3 */\nexport enum VastBedragBedragPerUurOptions {\n IndicatieveWaarde = \"IndicatieveWaarde\",\n VastBedrag = \"VastBedrag\",\n BedragPerUur = \"BedragPerUur\",\n}\n\n/** VastBedragOptions IndicatieveWaarde = 1, VastBedrag = 2 */\nexport enum VastBedragOptions {\n IndicatieveWaarde = \"IndicatieveWaarde\",\n VastBedrag = \"VastBedrag\",\n}\n\n/** VastBedragPercentageOptions IndicatieveWaarde = 1, VastBedrag = 2, Percentage = 4 */\nexport enum VastBedragPercentageOptions {\n IndicatieveWaarde = \"IndicatieveWaarde\",\n VastBedrag = \"VastBedrag\",\n Percentage = \"Percentage\",\n}\n\nexport interface VermogensbeheerderPartij {\n code: string | null;\n partijnaam: string | null;\n actief: boolean;\n agentnummer: string | null;\n}\n\nexport interface Vermogensbeheerders {\n partijen: VermogensbeheerderPartij[] | null;\n}\n\nexport interface VermogensbeheerdersOutput {\n vermogensbeheerders: Vermogensbeheerders | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface VersionInfo {\n naam: string | null;\n versie: string | null;\n auteur: string | null;\n copyright: string | null;\n opstartDatumTijd: string | null;\n}\n\nexport interface VerzekeraarPartij {\n serviceproviderId: string | null;\n softwareKoppelingId: string | null;\n code: string | null;\n partijnaam: string | null;\n actief: boolean;\n agentnummer: string | null;\n}\n\nexport interface Verzekeraars {\n partijen: VerzekeraarPartij[] | null;\n serviceproviders: ServiceproviderReadOnly[] | null;\n softwareKoppelingen: SoftwareKoppelingReadOnly[] | null;\n}\n\nexport interface VerzekeraarsOutput {\n verzekeraars: Verzekeraars | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de gegevens van een voorblad-afbeelding. */\nexport interface VoorbladAfbeelding {\n /** Tijdelijke URL van de afbeelding */\n url: string | null;\n}\n\n/** Output voor het opvragen van een voorblad-afbeeling. */\nexport interface VoorbladAfbeeldingOutput {\n voorbladAfbeelding: VoorbladAfbeelding | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** WeergaveAdviseurnaamOptions VoorlettersAchternaam = 1, TitelAchternaam = 2, TitelVoorlettersAchternaam = 3, VoorlettersVoornamenAchternaam = 4, VoornamenAchternaam = 5 */\nexport enum WeergaveAdviseurnaamOptions {\n VoorlettersAchternaam = \"VoorlettersAchternaam\",\n TitelAchternaam = \"TitelAchternaam\",\n TitelVoorlettersAchternaam = \"TitelVoorlettersAchternaam\",\n VoorlettersVoornamenAchternaam = \"VoorlettersVoornamenAchternaam\",\n VoornamenAchternaam = \"VoornamenAchternaam\",\n}\n\n/** Het soort motivering-onderwerp */\nexport enum Onderwerpsoort {\n Geen = \"Geen\",\n Algemeen = \"Algemeen\",\n Rentevastperiode = \"Rentevastperiode\",\n FiscaleAftrek = \"FiscaleAftrek\",\n InbrengEigenGeld = \"InbrengEigenGeld\",\n OversluitenHypotheek = \"OversluitenHypotheek\",\n VerantwoordeWoonlasten = \"VerantwoordeWoonlasten\",\n Box3Consumptief = \"Box3Consumptief\",\n AfdekkenOverlijdensrisico = \"AfdekkenOverlijdensrisico\",\n AfdekkenAOWW = \"AfdekkenAOWW\",\n Pensioenvoorziening = \"Pensioenvoorziening\",\n HoogteOpbouwDoelvermogen = \"HoogteOpbouwDoelvermogen\",\n WijzeOpbouwDoelvermogen = \"WijzeOpbouwDoelvermogen\",\n Beleggingsproduct = \"Beleggingsproduct\",\n Beleggingsprofiel = \"Beleggingsprofiel\",\n Fondskeuze = \"Fondskeuze\",\n OversluitenBeleggingspolis = \"OversluitenBeleggingspolis\",\n AfdekkenWW = \"AfdekkenWW\",\n Kredieten = \"Kredieten\",\n DubbeleWoonlasten = \"DubbeleWoonlasten\",\n EerderStoppen = \"EerderStoppen\",\n Geldverstrekker = \"Geldverstrekker\",\n HypotheekAflossen = \"HypotheekAflossen\",\n Schade = \"Schade\",\n Risicoprofiel = \"Risicoprofiel\",\n Nazorg = \"Nazorg\",\n Energie = \"Energie\",\n Telecom = \"Telecom\",\n Uitvaart = \"Uitvaart\",\n Verduurzaming = \"Verduurzaming\",\n Alles = \"Alles\",\n}\n\n/** Het soort motivering-onderwerp */\nexport enum Onderwerpsoort2 {\n Geen = \"Geen\",\n Algemeen = \"Algemeen\",\n Rentevastperiode = \"Rentevastperiode\",\n FiscaleAftrek = \"FiscaleAftrek\",\n InbrengEigenGeld = \"InbrengEigenGeld\",\n OversluitenHypotheek = \"OversluitenHypotheek\",\n VerantwoordeWoonlasten = \"VerantwoordeWoonlasten\",\n Box3Consumptief = \"Box3Consumptief\",\n AfdekkenOverlijdensrisico = \"AfdekkenOverlijdensrisico\",\n AfdekkenAOWW = \"AfdekkenAOWW\",\n Pensioenvoorziening = \"Pensioenvoorziening\",\n HoogteOpbouwDoelvermogen = \"HoogteOpbouwDoelvermogen\",\n WijzeOpbouwDoelvermogen = \"WijzeOpbouwDoelvermogen\",\n Beleggingsproduct = \"Beleggingsproduct\",\n Beleggingsprofiel = \"Beleggingsprofiel\",\n Fondskeuze = \"Fondskeuze\",\n OversluitenBeleggingspolis = \"OversluitenBeleggingspolis\",\n AfdekkenWW = \"AfdekkenWW\",\n Kredieten = \"Kredieten\",\n DubbeleWoonlasten = \"DubbeleWoonlasten\",\n EerderStoppen = \"EerderStoppen\",\n Geldverstrekker = \"Geldverstrekker\",\n HypotheekAflossen = \"HypotheekAflossen\",\n Schade = \"Schade\",\n Risicoprofiel = \"Risicoprofiel\",\n Nazorg = \"Nazorg\",\n Energie = \"Energie\",\n Telecom = \"Telecom\",\n Uitvaart = \"Uitvaart\",\n Verduurzaming = \"Verduurzaming\",\n Alles = \"Alles\",\n}\n\nexport interface FileParameter {\n data: any;\n fileName: string;\n}","import { createContext } from \"react\";\nimport { Autorisatieniveau, InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\n/* istanbul ignore next */\nexport const defaultSettings: {\n autorisatieNiveau: Autorisatieniveau;\n setAutorisatieNiveau: (autorisatieNiveau: Autorisatieniveau) => void;\n isBeheerder: boolean;\n setIsBeheerder: (isBeheerder: boolean) => void;\n} = {\n isBeheerder: false,\n setIsBeheerder: (_isbeheerder: boolean) => {},\n autorisatieNiveau: {\n algemeenNiveau: InstellingNiveauOptions.Medewerker,\n documentNiveau: InstellingNiveauOptions.Medewerker,\n tarievenNiveau: InstellingNiveauOptions.Medewerker,\n berekeningenNiveau: InstellingNiveauOptions.Medewerker,\n lastenoverzichtenNiveau: InstellingNiveauOptions.Medewerker,\n geldverstrekkersNiveau: InstellingNiveauOptions.Medewerker,\n verzekeraarsNiveau: InstellingNiveauOptions.Medewerker,\n vermogensbeheerdersNiveau: InstellingNiveauOptions.Medewerker,\n bankgarantieInstellingenNiveau: InstellingNiveauOptions.Medewerker,\n taxatiebureausNiveau: InstellingNiveauOptions.Medewerker,\n notarissenNiveau: InstellingNiveauOptions.Medewerker,\n serviceprovidersNiveau: InstellingNiveauOptions.Medewerker,\n klantprofielMotiveringNiveau: InstellingNiveauOptions.Medewerker,\n adviesonderwerpenNiveau: InstellingNiveauOptions.Medewerker,\n uitgangspuntenAdviesNiveau: InstellingNiveauOptions.Medewerker,\n standaardTekstenNiveau: InstellingNiveauOptions.Medewerker,\n generiekeKoppelingenNiveau: InstellingNiveauOptions.Medewerker,\n hdnNiveau: InstellingNiveauOptions.Medewerker,\n elementsNiveau: InstellingNiveauOptions.Medewerker,\n nationaleHypotheekbondNiveau: InstellingNiveauOptions.Medewerker,\n nationaleWaarborgNiveau: InstellingNiveauOptions.Medewerker,\n softwareKoppelingenNiveau: InstellingNiveauOptions.Medewerker\n },\n setAutorisatieNiveau: (_autorisatieNiveau: Autorisatieniveau): void => {}\n};\n\nexport type AutorisatieNiveauContextType = typeof defaultSettings;\n\nconst AutorisatieNiveauContext = createContext(defaultSettings);\n\nexport default AutorisatieNiveauContext;\n","import React, { ReactElement, ReactNode, useState } from \"react\";\nimport AutorisatieNiveauContext, { AutorisatieNiveauContextType } from \"./autorisatie-niveau-context\";\nimport { InstellingNiveauOptions, Autorisatieniveau } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst setContext = (\n autorisatieNiveau: AutorisatieNiveauContextType[\"autorisatieNiveau\"],\n autorisatieNiveauSetter: (vestiging: AutorisatieNiveauContextType[\"autorisatieNiveau\"]) => void,\n isBeheerder: boolean,\n setIsBeheerder: (isBeheerder: boolean) => void\n): AutorisatieNiveauContextType => ({\n autorisatieNiveau,\n setAutorisatieNiveau: autorisatieNiveauSetter,\n isBeheerder,\n setIsBeheerder\n});\n\nconst AutorisatieNiveauProvider = ({ children }: { children: ReactNode }): ReactElement => {\n const [isBeheerder, setIsBeheerder] = useState(false);\n const [autorisatieNiveau, setAutorisatieNiveau] = useState({\n algemeenNiveau: InstellingNiveauOptions.Medewerker,\n documentNiveau: InstellingNiveauOptions.Medewerker,\n tarievenNiveau: InstellingNiveauOptions.Medewerker,\n berekeningenNiveau: InstellingNiveauOptions.Medewerker,\n lastenoverzichtenNiveau: InstellingNiveauOptions.Medewerker,\n geldverstrekkersNiveau: InstellingNiveauOptions.Medewerker,\n verzekeraarsNiveau: InstellingNiveauOptions.Medewerker,\n vermogensbeheerdersNiveau: InstellingNiveauOptions.Medewerker,\n bankgarantieInstellingenNiveau: InstellingNiveauOptions.Medewerker,\n taxatiebureausNiveau: InstellingNiveauOptions.Medewerker,\n notarissenNiveau: InstellingNiveauOptions.Medewerker,\n serviceprovidersNiveau: InstellingNiveauOptions.Medewerker,\n klantprofielMotiveringNiveau: InstellingNiveauOptions.Medewerker,\n adviesonderwerpenNiveau: InstellingNiveauOptions.Medewerker,\n uitgangspuntenAdviesNiveau: InstellingNiveauOptions.Medewerker,\n standaardTekstenNiveau: InstellingNiveauOptions.Medewerker,\n generiekeKoppelingenNiveau: InstellingNiveauOptions.Medewerker,\n hdnNiveau: InstellingNiveauOptions.Medewerker,\n elementsNiveau: InstellingNiveauOptions.Medewerker,\n nationaleHypotheekbondNiveau: InstellingNiveauOptions.Medewerker\n } as Autorisatieniveau);\n\n return (\n \n {children}\n \n );\n};\n\nexport default AutorisatieNiveauProvider;\n","import { logErrorToApplicationInsights } from \"adviesbox-shared\";\nimport { ValidationResultModel } from \"../../.generated/forms/formstypes\";\nimport { UiError, UiName } from \"../types\";\nexport const validationResultsToUiError = (\n results: ValidationResultModel[],\n mapperDlNameToUiName: (target: string) => UiName | null\n): UiError[] => {\n return results.map(\n (result: ValidationResultModel): UiError => {\n let field: UiName | null = null;\n\n if (result.target) {\n field = mapperDlNameToUiName(result.target);\n /* istanbul ignore next */\n if (!field) {\n const error = new Error(`Geen mapping voor '${result.target}'`);\n logErrorToApplicationInsights(error);\n\n if (process.env.NODE_ENV === \"development\") {\n /* eslint-disable-next-line no-console */\n console.warn(error.message);\n }\n }\n }\n\n return {\n field: field && field.field,\n label: field && field.label,\n error: result.message ?? result.code ?? \"Onbekende fout\"\n };\n }\n );\n};\n","import { PlatformData } from \"adviesbox-shared\";\nimport { User } from \"oidc-client\";\nimport { UiError, UiName } from \"../../shared/types\";\nimport { validationResultsToUiError } from \"./validation-results-to-ui-error\";\n\nexport type WithSaveData = {\n saveData: (values: T) => Promise;\n};\n\nexport type FileWithName = File & { name: string };\n\nexport function saveDataWithFiles(\n user: User,\n vestigingId: string,\n url: string,\n ocpApimSubscriptionKey: string,\n files: FileWithName | FileWithName[],\n mapperDlNameToUiName: (target: string) => UiName | null,\n singleFormFilename?: string | null\n): (values: any) => Promise {\n if (!user) {\n return async (): Promise => {\n throw new Error(\"Geen user object.\");\n };\n }\n\n const headers: Record = {\n \"Ocp-Apim-Subscription-Key\": ocpApimSubscriptionKey,\n authorization: `${user.token_type} ${user.access_token}`,\n vestigingId,\n };\n\n const requestInit = { headers };\n\n return saveDataWithFilesRequestInit(\n url,\n requestInit,\n files,\n mapperDlNameToUiName,\n singleFormFilename\n );\n}\n\nexport function saveDataWithFilesRequestInit(\n url: string,\n requestInit: RequestInit,\n files: FileWithName | FileWithName[],\n mapperDlNameToUiName: (target: string) => UiName | null,\n singleFormFilename?: string | null | undefined\n): (values: any) => Promise {\n return async (): Promise => {\n try {\n const formData = filesToFormData(files, singleFormFilename);\n const rsp = await fetch(url, {\n ...requestInit,\n ...{\n headers: {\n ...requestInit.headers,\n },\n },\n method: \"POST\",\n body: formData,\n });\n\n if (!rsp.ok) {\n if (contentTypeIsJson(rsp)) {\n const data: PlatformData = await rsp.json();\n if (data && data.validationResults) {\n return validationResultsToUiError(\n data.validationResults,\n mapperDlNameToUiName\n );\n }\n }\n }\n return null;\n } catch (e) {\n return [\n {\n field: \"\",\n label: \"\",\n error: e.message,\n },\n ];\n }\n };\n}\n\nexport function filesToFormData(\n files: FileWithName | FileWithName[],\n singleFormFilename?: string | null\n): FormData {\n const formData = new FormData();\n\n if (files instanceof Array && files.length > 1) {\n files.map(async (file: FileWithName) => {\n formData.append(file.name, file);\n });\n } else if (singleFormFilename) {\n const file: FileWithName =\n files instanceof Array && files.length === 1\n ? files[0]\n : (files as FileWithName);\n formData.append(singleFormFilename, file);\n } else {\n const file: FileWithName =\n files instanceof Array && files.length === 1\n ? files[0]\n : (files as FileWithName);\n formData.append(file.name, file);\n }\n return formData;\n}\n\nexport function saveData(\n user: User,\n vestigingId: string,\n url: string,\n ocpApimSubscriptionKey: string,\n mapper: (values: T) => any,\n mapperDlNameToUiName: (target: string) => UiName | null\n): (values: T) => Promise {\n if (!user) {\n return async (): Promise => {\n throw new Error(\"Geen user object.\");\n };\n }\n\n const headers: Record = {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Ocp-Apim-Subscription-Key\": ocpApimSubscriptionKey,\n authorization: `${user.token_type} ${user.access_token}`,\n vestigingId,\n };\n\n const requestInit = { headers };\n\n return saveDataRequestInit(url, requestInit, mapper, mapperDlNameToUiName);\n}\n\nexport function saveDataRequestInit(\n url: string,\n requestInit: RequestInit,\n mapper: (values: T) => any,\n mapperDlNameToUiName: (target: string) => UiName | null,\n reloadNavigation?: () => void\n) {\n return async (values: T): Promise => {\n const mappedValues = mapper(values);\n const rsp = await fetch(url, {\n ...requestInit,\n ...{\n headers: {\n ...requestInit.headers,\n \"Content-Type\": \"application/json\",\n },\n },\n method: \"PUT\",\n body: JSON.stringify(mappedValues),\n });\n\n if (!rsp.ok) {\n if (contentTypeIsJson(rsp)) {\n const data: PlatformData = await rsp.json();\n if (data && data.validationResults) {\n return validationResultsToUiError(\n data.validationResults,\n mapperDlNameToUiName\n );\n }\n }\n } else if (reloadNavigation) {\n reloadNavigation();\n }\n\n return null;\n };\n}\n\nfunction contentTypeIsJson(rsp: Response): boolean {\n const contentType = rsp.headers.get(\"content-type\");\n return !!(contentType && contentType.indexOf(\"application/json\") !== -1);\n}\n","import * as Yup from \"yup\";\nimport { InferType } from \"yup\";\n\nexport const menuonderdelenSchema = Yup.object({\n hypotheek: Yup.boolean().default(true),\n kapitaalVerzekering: Yup.boolean().default(false),\n ORV: Yup.boolean().default(false),\n AOV: Yup.boolean().default(false),\n vermogen: Yup.boolean().default(false),\n krediet: Yup.boolean().default(false),\n uitkerendeLijfrente: Yup.boolean().default(false),\n overig: Yup.boolean().default(false)\n});\n\nexport const onderwerpenSchema = Yup.object({\n hypotheek: Yup.boolean().default(false),\n overlijden: Yup.boolean().default(false),\n arbeidsongeschiktheid: Yup.boolean().default(false),\n werkloosheid: Yup.boolean().default(false),\n pensioen: Yup.boolean().default(false),\n vermogensopbouw: Yup.boolean().default(false)\n});\n\nexport const adviesonderwerpenSchema = Yup.object({\n menuonderdelen: menuonderdelenSchema,\n onderwerpen: onderwerpenSchema\n});\n\nexport type AdviesonderwerpenState = InferType;\nexport type AdviesonderwerpenProps = InferType;\n\nexport type OnderwerpenType = InferType;\n\nexport type MenuonderdelenType = InferType;\n","import { UiName } from \"../types\";\n\nexport const target2field = (map: { [key: string]: any }, target: string): UiName | null => {\n const regexIndex = /(?<=\\[)([^.])(?=\\])/gm;\n const regexCleanup = /\\[([^.])\\]/gm;\n const regexIndexFirstOccurance = /(?<=\\[)([i])(?=\\])/m;\n const indexArray = target.match(regexIndex);\n const parts = target.replace(regexCleanup, \"\").split(\".\");\n\n while (parts.length > 0) {\n const partPascal = parts.shift() as string;\n\n const part = partPascal.charAt(0).toLowerCase() + partPascal.slice(1);\n if (part && map[part]) {\n map = map[part];\n }\n }\n\n if (indexArray && map.field) {\n indexArray.forEach(i => {\n map.field = map.field.replace(regexIndexFirstOccurance, i);\n });\n }\n\n if (map) return { label: target, field: null, ...map };\n\n return null;\n};\n","import { Schema } from \"yup\";\n\ntype MapIt = {\n [P in keyof D]-?: Exclude extends never\n ? (from: S) => D[P] | null | undefined\n : (from: S, extra: T) => D[P] | null | undefined;\n};\ntype Mapper = Exclude extends never\n ? (source: S | null | undefined) => D\n : (source: S | null | undefined, extra: T) => D;\n\ntype CreateMapToUiReturnType = {\n from: (map: MapIt, D, T>) => Mapper;\n};\nexport const createMapToUi = (schema: Schema): CreateMapToUiReturnType => ({\n from: (map: MapIt, D, T>): Mapper => {\n const mapper = (source: S | null | undefined, extra: T): D => {\n const def = schema.default();\n if (typeof source === \"undefined\" || source === null) {\n return def;\n }\n\n const keys = Object.keys(map) as (keyof D)[];\n for (let i = 0; i < keys.length; i++) {\n const prop = keys[i];\n const val = map[prop](source as Exclude, extra);\n if (typeof val !== \"undefined\" && val !== null) {\n def[prop] = val;\n }\n }\n\n return def;\n };\n\n return mapper as Mapper;\n }\n});\n","/* istanbul ignore file */\n\nimport { Schema } from \"yup\";\n\ntype IfEquals = (() => T extends X ? 1 : 2) extends () => T extends Y ? 1 : 2 ? A : B;\n\ntype WritableKeys = {\n [P in keyof T]-?: IfEquals<{ [Q in P]: T[P] }, { -readonly [Q in P]: T[P] }, P>;\n}[keyof T];\n\ntype ReadonlyKeys = {\n [P in keyof T]-?: IfEquals<{ [Q in P]: T[P] }, { -readonly [Q in P]: T[P] }, never, P>;\n}[keyof T];\n\ntype PickWritable = T extends object\n ? Pick<\n {\n [P in keyof T]: SetReadonlyOptional;\n },\n WritableKeys\n >\n : T;\n\ntype PickReadonly = T extends object\n ? Pick<\n {\n [P in keyof T]+?: SetReadonlyOptional;\n },\n ReadonlyKeys\n >\n : T;\n\ntype SetReadonlyOptional = PickWritable & PickReadonly;\n\ntype MapIt = {\n [P in keyof D]: Exclude extends never ? (from: S) => D[P] : (from: S, extra: T) => D[P];\n};\n\ntype Mapper = Exclude extends never ? (source: S) => D : (source: S, extra: T) => D;\n\ntype CreateMapToDlReturnType = {\n with: (_?: Schema) => { to: (map: MapIt, T>) => Mapper };\n to: (map: MapIt, undefined>) => Mapper;\n};\n\nexport const createMapToDl = (_: Schema): CreateMapToDlReturnType => {\n const to = (map: MapIt, T>): Mapper => {\n const mapper = (source: S, extra?: T): D => {\n const keys = Object.keys(map);\n const result: any = {};\n for (let i = 0; i < keys.length; i++) {\n const prop = keys[i];\n result[prop] = (map as any)[prop](source, extra);\n }\n return result;\n };\n return mapper as Mapper;\n };\n\n return {\n with: (): { to: typeof to } => ({ to }),\n to: to\n };\n};\n","import { FieldMap, UiName } from \"../../shared/types\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\n\nimport {\n adviesonderwerpenSchema,\n onderwerpenSchema,\n menuonderdelenSchema,\n AdviesonderwerpenState\n} from \"./adviesonderwerpen-schema\";\nimport {\n Adviesonderwerpen,\n AdviesonderwerpenOutput\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\nimport { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\n\nconst mapMenuOnderdelen = createMapToUi(menuonderdelenSchema).from({\n kapitaalVerzekering: v => v.onderdeelKapitaalverzekeringTonen,\n ORV: v => v.onderdeelOrvTonen,\n AOV: v => v.onderdeelAovTonen,\n vermogen: v => v.onderdeelVermogenTonen,\n krediet: v => v.onderdeelKredietTonen,\n uitkerendeLijfrente: v => v.onderdeelUitkerendeLijfrenteTonen,\n overig: v => v.onderdeelOverigTonen,\n hypotheek: _ => true\n});\n\nconst mapOnderwerpen = createMapToUi(onderwerpenSchema).from({\n hypotheek: v => v.onderwerpHypotheekTonen,\n overlijden: v => v.onderwerpOverlijdenTonen,\n arbeidsongeschiktheid: v => v.onderwerpArbeidsongeschiktheidTonen,\n werkloosheid: v => v.onderwerpWerkloosheidTonen,\n pensioen: v => v.onderwerpPensioenTonen,\n vermogensopbouw: v => v.onderwerpVermogensopbouwTonen\n});\n\nconst mapAdviesOnderwerpen = createMapToUi(adviesonderwerpenSchema).from({\n menuonderdelen: v => mapMenuOnderdelen(v),\n onderwerpen: v => mapOnderwerpen(v)\n});\n\nfunction dl2ui(values: Adviesonderwerpen): AdviesonderwerpenState {\n const adviesonderwerpen = mapAdviesOnderwerpen(values);\n\n return adviesonderwerpenSchema.cast(adviesonderwerpen);\n}\n\nexport function mapAdviesonderwerpenDlToUi(data: AdviesonderwerpenOutput): AdviesonderwerpenState | null {\n const adviesonderwerpen = data && data.adviesonderwerpen ? data.adviesonderwerpen : null;\n\n if (!adviesonderwerpen) {\n return null;\n }\n\n return dl2ui(adviesonderwerpen);\n}\n\nexport const mapAdviesonderwerpenUiToDl = createMapToDl(adviesonderwerpenSchema).to({\n onderwerpHypotheekTonen: v => v.onderwerpen.hypotheek,\n onderwerpOverlijdenTonen: v => v.onderwerpen.overlijden,\n onderwerpArbeidsongeschiktheidTonen: v => v.onderwerpen.arbeidsongeschiktheid,\n onderwerpWerkloosheidTonen: v => v.onderwerpen.werkloosheid,\n onderwerpPensioenTonen: v => v.onderwerpen.pensioen,\n onderwerpVermogensopbouwTonen: v => v.onderwerpen.vermogensopbouw,\n onderdeelKapitaalverzekeringTonen: v => v.menuonderdelen.kapitaalVerzekering,\n onderdeelOrvTonen: v => v.menuonderdelen.ORV,\n onderdeelAovTonen: v => v.menuonderdelen.AOV,\n onderdeelVermogenTonen: v => v.menuonderdelen.vermogen,\n onderdeelKredietTonen: v => v.menuonderdelen.krediet,\n onderdeelUitkerendeLijfrenteTonen: v => v.menuonderdelen.uitkerendeLijfrente,\n onderdeelOverigTonen: v => v.menuonderdelen.overig\n});\n\nexport function mapDlTargetToAdviesonderwerpenUiField(target: string): UiName | null {\n const map: FieldMap = {};\n\n return target2field(map, target);\n}\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType } from \"formik\";\nimport { CheckBox } from \"adviesbox-shared\";\nimport { AdviesonderwerpenState } from \"../infra\";\n\nconst Onderwerpen = ({\n formik: {\n setFieldValue,\n values: { onderwerpen }\n }\n}: {\n formik: FormikContextType;\n}): ReactElement => {\n return (\n
\n

\n Als u het selectievakje bij een onderwerp uitzet komt deze niet meer terug in aanleiding, scenario, dashboard,\n motivering, advies en rapportage.\n

\n
\n

Financiering

\n
\n \n
\n
\n
\n

Financiƫle planning

\n
\n \n \n \n \n \n
\n
\n
\n );\n};\n\nexport default connect<{}, AdviesonderwerpenState>(Onderwerpen);\n","import React, { ReactElement } from \"react\";\nimport { connect } from \"formik\";\nimport { AdviesonderwerpenState } from \"../infra\";\nimport { CheckBox } from \"adviesbox-shared\";\n\nconst Menuonderdelen = (): ReactElement => {\n return (\n
\n

\n Als u het selectievakje bij een menu onderdeel uitzet komt deze niet meer terug onder 'huidige\n situatie' en 'voorstel'. Let op, als u dit uitzet kunt u de productsoorten ook niet meer\n inventariseren en berekenen.\n

\n
\n \n \n \n \n \n \n \n \n
\n
\n );\n};\n\nexport default connect<{}, AdviesonderwerpenState>(Menuonderdelen);\n","import { createContext } from \"react\";\n\nexport type vestiging = {\n vestigingId: string;\n naam: string;\n bezoekadres: {\n straatnaam: string;\n huisnummer: string;\n toevoeging: string;\n postcode: string;\n land: string;\n plaats: string;\n };\n postadres: {\n straatnaam: string;\n huisnummer: string;\n toevoeging: string;\n postcode: string;\n land: string;\n plaats: string;\n };\n emailadres: string;\n telefoonnummer: string;\n platformId: string;\n isHoofdvestiging: boolean;\n};\n\nexport const defaultSettings = {\n vestigingen: [] as vestiging[],\n setVestigingen: (_vestigingen: vestiging[]): void => {}\n};\n\nexport type VestigingenContextType = typeof defaultSettings;\n\nconst VestigingenContext = createContext(defaultSettings);\n\nexport default VestigingenContext;\n","import React, { ChangeEvent, ReactElement, useContext } from \"react\";\nimport { RouteComponentProps, withRouter } from \"react-router-dom\";\nimport { useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\n\nimport VestigingenContext from \"../vestigingen-context/vestigingen-context\";\n\nconst VestigingenSelect = ({ history }: RouteComponentProps): ReactElement | null => {\n const { vestigingen } = useContext(VestigingenContext);\n const { params } = useRequestInit();\n\n const onChange = (event: ChangeEvent): void => {\n if (params.vestiging) {\n history.push(window.location.pathname.replace(params.vestiging, event.target.value));\n }\n };\n\n return (\n
\n {vestigingen && (\n
\n

voor 

\n \n {vestigingen.map((v, index) => (\n \n ))}\n \n  \n
\n )}\n
\n );\n};\n\nexport default withRouter(withErrorBoundary(VestigingenSelect));\n","import React, { ReactElement } from \"react\";\nimport VestigingenSelect from \"../vestigingen-select/vestigingen-select\";\n\nenum GeneralAutorisatieNiveau {\n Vestiging,\n Organisatie\n}\n\nexport const AutorisatieNiveauManager = ({ manageFor }: { manageFor: string | null }): ReactElement => {\n const autorisatieNiveau = {\n vestiging:\n GeneralAutorisatieNiveau[manageFor as keyof typeof GeneralAutorisatieNiveau] ===\n GeneralAutorisatieNiveau.Vestiging,\n organisatie:\n GeneralAutorisatieNiveau[manageFor as keyof typeof GeneralAutorisatieNiveau] ===\n GeneralAutorisatieNiveau.Organisatie\n };\n\n return (\n
\n {autorisatieNiveau.vestiging && }\n {autorisatieNiveau.organisatie && (\n

\n voor de hele organisatie \n

\n )}\n
\n );\n};\n","/* istanbul ignore file */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { ReactElement } from \"react\";\nimport { FormikConsumer } from \"formik\";\nimport { detailedDiff } from \"deep-object-diff\";\nimport classes from \"./debug.module.scss\";\n\ntype DebugProps = {\n force?: boolean;\n};\n\ntype DebugToggleProps = {\n label: string;\n name: string;\n checked: boolean;\n onChange: (checked: boolean) => void;\n};\n\nconst DebugToggle = ({ label, name, checked, onChange }: DebugToggleProps): ReactElement => {\n const id = Math.random();\n\n return (\n
\n {\n sessionStorage[name] = !checked;\n onChange(!checked);\n }}\n />\n \n
\n );\n};\n\nexport const Debug = ({ force = false }): ReactElement | null => {\n const [traceAdvies, setTraceAdvies] = React.useState(sessionStorage.traceAdvies === \"true\");\n const [showValues, setShowValues] = React.useState(sessionStorage.showValues === \"true\");\n const [showInitialValues, setShowInitialValues] = React.useState(\n sessionStorage.showInitialValues === \"true\"\n );\n const valuesRef = React.useRef(null);\n\n if (process.env.NODE_ENV !== \"development\" && !force) {\n return null;\n }\n\n return (\n \n \n Formik State\n \n
\n \n \n \n
\n \n {({ validationSchema, validate, onSubmit, ...rest }: any): ReactElement => {\n if (traceAdvies && valuesRef.current !== rest.values) {\n const difference = detailedDiff(valuesRef.current, rest.values) as DetailedDiff;\n if (!Object.keys(difference.added).length) {\n delete difference.added;\n }\n if (!Object.keys(difference.deleted).length) {\n delete difference.deleted;\n }\n if (!difference.updated || !Object.keys(difference.updated).length) {\n delete difference.updated;\n }\n\n /* eslint-disable-next-line no-console */\n console.log(difference);\n valuesRef.current = rest.values;\n }\n\n if (!showValues) {\n delete rest.values;\n }\n\n if (!showInitialValues) {\n delete rest.initialValues;\n }\n\n return
{JSON.stringify(rest, null, 2)}
;\n }}\n
\n \n );\n};\n\ntype DetailedDiff = {\n added: object;\n deleted: object;\n updated: object;\n};\n","/* istanbul ignore file */\n\nimport { UiError } from \"../types\";\nimport { getIn, setIn, FormikErrors } from \"formik\";\n\nexport function capitalizeFirstLetter(input: string): string {\n return input.charAt(0).toUpperCase() + input.slice(1);\n}\n\nexport function sleep(ms = 10): Promise {\n return new Promise((resolve): void => {\n setTimeout((): void => resolve(), ms);\n });\n}\n\nexport function assertNever(value: never): never {\n throw new Error(\"Unexpected value: \" + value);\n}\n\nexport function prefixWithZero(value: number | null | undefined, size = 2): string | null {\n if (typeof value === \"number\") {\n return value.toString().padStart(size, \"0\");\n }\n\n return null;\n}\n\nexport const limitCurrent = (current: number | null): number =>\n !hasValue(current) ? 0 : current > 100 ? 100 : current < 0 ? 0 : current;\n\nexport const getSum = (input: (number | null | undefined)[]): number => {\n return input.reduce((x, y): number => (x || 0) + (y || 0), 0) || 0;\n};\n\nexport const keysToLowerCaseFirst = (obj: any): any => {\n Object.keys(obj).forEach(function(key): any {\n // only first char gets lowercased :-)\n const k = key.charAt(0).toLowerCase() + key.slice(1);\n\n if (k !== key) {\n obj[k] = obj[key];\n delete obj[key];\n }\n });\n return obj;\n};\n\nexport function voegApiFoutToe(formikErrors: {}, platformApiFouten: UiError[] | null): FormikErrors {\n if (platformApiFouten) {\n platformApiFouten.forEach((element): void => {\n if (element.field) {\n formikErrors = setIn(formikErrors, element.field, element.error);\n }\n });\n }\n\n return formikErrors;\n}\n\nexport function verwijderApiFoutVoor(\n formik: {\n values: {};\n setFieldValue: (field: string, value: any) => void;\n },\n name: string\n): void {\n const currentPlaformApiFouten: UiError[] | null = getIn(formik.values, \"platformApiFouten\");\n\n if (Array.isArray(currentPlaformApiFouten)) {\n const newPlaformApiFouten = currentPlaformApiFouten.filter((e): boolean => e.field !== name);\n if (currentPlaformApiFouten.length !== newPlaformApiFouten.length) {\n formik.setFieldValue(\"platformApiFouten\", newPlaformApiFouten);\n }\n }\n}\n\nexport function hasValue(value: T | null | undefined): value is T {\n return typeof value !== \"undefined\" && value !== null;\n}\nclass AssertValueError extends Error {}\nexport function assertValue(value: T | null | undefined): asserts value is T {\n if (!hasValue(value)) {\n throw new AssertValueError(\"value must not be null or undefined\");\n }\n}\n","import {\n ComponentDecorator,\n FormikBag,\n FormikErrors,\n FormikProps,\n getIn,\n validateYupSchema,\n withFormik,\n yupToFormErrors\n} from \"formik\";\nimport * as Yup from \"yup\";\nimport { UiError } from \"../types\";\nimport { voegApiFoutToe } from \"./helpers\";\n\n/* istanbul ignore next */\nconst noop = (): void => {};\n\nexport type WithAdviesBoxFormikConfig = {\n handleSubmit?: (values: Values, formikBag: FormikBag) => void;\n mapPropsToValues: (props: OuterProps) => Values;\n validationSchema: Yup.ObjectSchema | ((props: OuterProps) => Yup.ObjectSchema);\n createValidationContext?: (props: OuterProps, values: Values) => any;\n};\n\nexport default function withAdviesboxFormik({\n handleSubmit = noop,\n mapPropsToValues,\n validationSchema,\n createValidationContext\n}: WithAdviesBoxFormikConfig): ComponentDecorator> {\n return withFormik({\n mapPropsToValues,\n handleSubmit,\n validateOnChange: false,\n validate: async (values, props): Promise | object> => {\n const platformApiFouten: UiError[] | null = getIn(values, \"platformApiFouten\");\n\n try {\n if (typeof validationSchema === \"function\") {\n validationSchema = validationSchema(props);\n }\n\n const context = typeof createValidationContext === \"function\" ? createValidationContext(props, values) : {};\n\n await validateYupSchema(values, validationSchema, true, context);\n } catch (yupErrors) {\n const formikErrors = voegApiFoutToe(yupToFormErrors(yupErrors), platformApiFouten);\n\n return formikErrors;\n }\n\n return voegApiFoutToe({}, platformApiFouten);\n }\n });\n}\n","const resources = {\n ErrorHuisnummer: \"Nummer mag niet groter zijn dan 32767.\",\n ErrorPostcode: \"Ongeldige postcode.\",\n ErrorDatumToekomst: \"Datum mag niet in de toekomst liggen.\",\n ErrorMaxLengte: \"Veld mag maximaal {lengte} lang zijn.\",\n ErrorDatumLeeg: \"Vul hier alsjeblieft geen datum in\",\n ErrorBedragPostief: \"Vul alsjeblieft een positief bedrag in.\",\n ErrorAantalJaren: \"Aantal jaren van 0 t/m 99 invullen.\",\n ErrorAantalMaanden: \"Aantal maanden van 0 t/m 11 invullen.\",\n NavigatiePromptTekst: \"Weet je het zeker? Hier staat een tekst uit de resource file.. ?\",\n ErrorOnbekendeWaarde: \"Onbekende waarde\",\n ErrorDatumVerplicht: \"Vul alsjeblieft een datum in.\"\n};\n\nexport type GeneralTextResources = typeof resources;\n\nexport function getGeneralTextResources(id: keyof GeneralTextResources): string {\n return resources[id];\n}\n\nexport function createGetTextResources(resources: T): (id: keyof T | keyof GeneralTextResources) => string {\n return function getTextResources(id: keyof T | keyof GeneralTextResources): string {\n if (id in resources) {\n return (resources as any)[id];\n }\n\n return getGeneralTextResources(id as keyof GeneralTextResources);\n };\n}\n","/* istanbul ignore file */\n\nimport { createGetTextResources } from \"../../shared/utils/text-resources-algemeen\";\n\nexport const getAdviesonderwerpenResources = createGetTextResources({\n MenuonderdelenWarning:\n \"Als menuonderdelen uitgeschakeld worden, dan zullen de gegevens die deze menuonderdelen bevatten verwijderd worden als je het dossier opent.\",\n OnderwerpenWaring:\n \"Als adviesonderwerpen uitgeschakeld worden, dan zullen de gegevens die deze adviesonderwerpen bevatten verwijderd worden als je het dossier opent.\",\n OnderwerpenEnMenuonderdelenWaring:\n \"Als menuonderdelen en adviesonderwerpen uitgeschakeld worden, dan zullen de gegevens die deze menuonderdelen en adviesonderwerpen bevatten verwijderd worden als je het dossier opent.\"\n});\n","/* istanbul ignore file */\nimport React, { ReactElement } from \"react\";\nimport { Debug } from \"../formik/Debug\";\n\nexport const DevDebug = /*#__PURE__*/ (): ReactElement | null => {\n return process.env.NODE_ENV === \"development\" ? : null;\n};\n","import { Button, Modal as ModalBootstrap, OverlayTrigger, Tooltip } from \"react-bootstrap\";\nimport React, { ReactElement } from \"react\";\n\nimport { ButtonVariant } from \"react-bootstrap/esm/types\";\nimport { DevDebug } from \"../dev-debug/dev-debug\";\nimport { ErrorBoundary } from \"adviesbox-shared\";\n\ntype ModalProps = {\n title?: string;\n body?: JSX.Element;\n onCancelClick?: () => void;\n onSubmitClick?: () => void;\n isSubmitting?: boolean;\n noEditableData?: boolean;\n modalIndex?: number;\n invalid?: boolean;\n tooltip?: string | ReactElement;\n saveButtonTekst?: string;\n cancelButtonTekst?: string;\n prependToFooter?: React.ReactNode;\n appendToFooter?: React.ReactNode;\n submitDisabled?: boolean;\n saveBtnVariant?: ButtonVariant;\n};\n\nconst Modal = ({\n title,\n body,\n onCancelClick,\n onSubmitClick,\n isSubmitting,\n noEditableData,\n tooltip,\n invalid = false,\n saveButtonTekst = \"Bevestigen\",\n cancelButtonTekst = \"Annuleren\",\n prependToFooter = <>,\n appendToFooter = <>,\n submitDisabled,\n saveBtnVariant = \"primary\"\n}: ModalProps): ReactElement => {\n return (\n <>\n \n
\n \n <>\n {title}\n {tooltip && (\n {tooltip}}\n >\n \n
\n
\n \n <>\n \n <>{body}\n \n \n \n \n \n {!noEditableData && (\n <>\n {prependToFooter}\n \n {cancelButtonTekst}\n \n \n {saveButtonTekst}\n \n {appendToFooter}\n \n )}\n {noEditableData && (\n \n )}\n \n \n );\n};\n\nModal.displayName = \"Modal\";\n\nexport default Modal;\n","import { FormikContextType, setNestedObjectValues } from \"formik\";\nimport { UiError } from \"../types\";\n\n/* istanbul ignore next */\nexport const formikIsValidAsync = async function(\n formikContext: FormikContextType\n): Promise {\n const indicesRegex = /(?<=\\[)([^.])(?=\\])/gm;\n const regexCleanup = /\\[([^.])\\]/gm;\n const errors = await formikContext.validateForm(formikContext.values);\n const uiErrors: any = errors;\n\n formikContext.values?.platformApiFouten?.forEach((mappedError: UiError) => {\n const baseKey = mappedError.field?.split(\".\").shift() ?? \"\";\n const baseKeyIndex = baseKey.match(indicesRegex)?.pop() ?? \"\";\n const baseKeyClean = baseKey.replace(regexCleanup, \"\");\n let remainingPath = mappedError.field;\n\n if (!remainingPath) {\n return;\n }\n\n while (remainingPath) {\n remainingPath = checkAndDeletePropertyPath(uiErrors, remainingPath);\n }\n\n if (baseKeyIndex && Object.keys(uiErrors[baseKeyClean][baseKeyIndex]).length === 0) {\n delete uiErrors[baseKeyClean][baseKeyIndex];\n }\n\n if (Object.keys(uiErrors[baseKeyClean]).length === 0) {\n delete uiErrors[baseKeyClean];\n }\n });\n\n if (Object.keys(uiErrors).length === 0) {\n return true;\n }\n\n formikContext.setTouched(setNestedObjectValues(uiErrors, true));\n formikContext.setErrors(uiErrors);\n return false;\n};\n\n/* istanbul ignore next */\nfunction checkAndDeletePropertyPath(baseObj: Record, path: string): string {\n const indicesRegex = /(?<=\\[)([^.])(?=\\])/gm;\n const regexCleanup = /\\[([^.])\\]/gm;\n const pathArray = path.split(\".\");\n let obj = { ...baseObj };\n\n if (!obj || pathArray.length < 1) {\n return \"\";\n }\n\n for (let i = 0; i < pathArray.length - 1; i++) {\n let path = pathArray[i];\n const indexedPath = path.match(indicesRegex)?.pop() ?? \"\";\n\n if (indexedPath) {\n path = path.replace(regexCleanup, \"\");\n obj = obj[path][indexedPath];\n }\n\n if (!indexedPath) {\n obj = obj[path];\n }\n\n if (typeof obj === \"undefined\") {\n return pathArray[i];\n }\n }\n\n const deleteKey = pathArray.pop() ?? \"\";\n delete obj[deleteKey];\n\n if (Object.keys(obj).length) {\n return \"\";\n }\n\n return pathArray.join(\".\");\n}\n","import { UiError } from \"../../shared/types\";\nimport { formikIsValidAsync } from \"./formik-is-valid-async\";\nimport { FormikContextType } from \"formik\";\nimport { RefObject } from \"react\";\n\nexport type SubmitResultTypes = \"platformError\" | \"Exception\" | \"clientError\" | \"default\" | \"completed\";\n\nexport async function submit(\n saveData: (values: any) => Promise,\n formik: FormikContextType,\n berekenSideEffectRef?: RefObject<{ asyncResult: Promise }>,\n callBack?: () => void\n): Promise {\n if (formik.dirty) {\n //Client validatie\n formik.setSubmitting(true);\n if (await formikIsValidAsync(formik)) {\n // Server validatie & Save\n try {\n formik.setFieldValue(\"platformApiFouten\", null, false);\n berekenSideEffectRef && berekenSideEffectRef.current && (await berekenSideEffectRef.current.asyncResult);\n\n const result = await saveData(formik.values);\n\n if (result) {\n result.forEach((element): void => {\n element.field && formik.setFieldError(element.field, element.error);\n });\n\n formik.setFieldValue(\"platformApiFouten\", result);\n\n return \"platformError\";\n }\n\n formik.resetForm({ values: { ...formik.values, platformApiFouten: null } });\n callBack && callBack();\n return \"completed\";\n } catch (e) {\n // TODO: Foutafhandeling\n /* istanbul ignore next */\n /* eslint-disable-next-line no-console */\n process.env.NODE_ENV === \"development\" && console.error(e);\n return \"Exception\";\n } finally {\n formik.setSubmitting(false);\n }\n } else {\n formik.setSubmitting(false);\n return \"clientError\";\n }\n }\n return \"default\";\n}\n","/* istanbul ignore file */\nimport { createContext } from \"react\";\nimport { SubmitResultTypes } from \"../utils/save-validation\";\n\nexport type SaveFormData = {\n isSaving: boolean;\n saveResult: SubmitResultTypes | null;\n version: number;\n saveData: () => void;\n setIsSaving: (_v: boolean) => void;\n setSaveResult: (_v: SubmitResultTypes | null) => void;\n}\n\nexport const defaultSaveFormData: SaveFormData = {\n isSaving: false,\n saveResult: null,\n version: 0,\n saveData: (): void => { },\n setIsSaving: /* istanbul ignore next */ (_value: boolean): void => { },\n setSaveResult: /* istanbul ignore next */ (_value: SubmitResultTypes | null): void => { }\n}\n\nexport const SaveFormContext = createContext(defaultSaveFormData);","/* istanbul ignore file */\nimport { ValidatiePopup } from \"adviesbox-shared\";\nimport classNames from \"classnames\";\nimport { FormikContextType } from \"formik\";\nimport React, {\n MutableRefObject,\n ReactElement,\n useState,\n useEffect,\n useContext,\n useCallback,\n} from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { RouteComponentProps, withRouter } from \"react-router\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport { submit, SubmitResultTypes } from \"../shared/utils/save-validation\";\nimport classes from \"./SaveButton.module.scss\";\nimport { SaveFormContext } from \"../shared/save-form/save-form-contex\";\n\ntype SaveButtonProps = {\n callBack?: () => void;\n preSaveConfirmation?: () => Promise | void;\n triggerPreSaveConfirmation?: boolean;\n name?: string;\n btnTekst?: string;\n initialSaveResult?: SubmitResultTypes; // Voor testen alleen\n context: FormikContextType &\n WithSaveData & {\n berekenSideEffectRef?: MutableRefObject<{\n asyncResult: Promise;\n }>;\n };\n};\n\nconst SaveButtonComponent = (\n props: SaveButtonProps & RouteComponentProps & any\n): ReactElement | null => {\n const { version } = useContext(SaveFormContext);\n const [lastSave, setLastSave] = useState(version);\n let result: ReactElement | null = null;\n\n const {\n context: { saveData, dirty, isSubmitting },\n callBack,\n preSaveConfirmation,\n triggerPreSaveConfirmation,\n btnTekst,\n } = props;\n\n const [showValidatiePopup, setValidatiePopup] = useState(false);\n const [saveResult, setSaveResultText] = useState(\n props.initialSaveResult || \"default\"\n );\n\n const handleSubmitCallback = useCallback(async () => {\n if (triggerPreSaveConfirmation) {\n preSaveConfirmation && (await preSaveConfirmation());\n return;\n }\n const validationResult = await submit(\n saveData,\n props.context,\n props.context.berekenSideEffectRef,\n callBack\n );\n setSaveResultText(validationResult);\n setValidatiePopup(\n validationResult !== \"default\" && validationResult !== \"completed\"\n );\n }, [\n triggerPreSaveConfirmation,\n preSaveConfirmation,\n saveData,\n props.context,\n callBack,\n ]);\n\n useEffect(() => {\n if (lastSave === version) return;\n setLastSave(version);\n handleSubmitCallback()\n .then(() => {})\n .catch(() => {});\n }, [version, lastSave, handleSubmitCallback]);\n\n if (isSubmitting) {\n result = (\n \n Bezig met opslaan.\n \n );\n } else if (dirty) {\n const isPlatformError = saveResult === \"platformError\";\n result = (\n => {\n // trigger het opslaan\n setLastSave(version - 1);\n }}\n >\n {isPlatformError\n ? \"Opslag mislukt. Probeer nogmaals\"\n : btnTekst\n ? btnTekst\n : \"Wijzigingen opslaan\"}\n \n );\n } else {\n result = (\n \n Alle gegevens zijn opgeslagen\n \n );\n }\n\n return (\n <>\n {result}\n\n {\n setValidatiePopup(false);\n }}\n />\n \n );\n};\n\nSaveButtonComponent.displayName = \"SaveButton\";\n\nexport const SaveButton = withRouter(SaveButtonComponent);\n","import { SimpleModal } from \"adviesbox-shared\";\nimport React, { ReactElement, useState, useContext } from \"react\";\nimport { ButtonVariant } from \"react-bootstrap/esm/types\";\nimport Modal from \"../shared/components/modal/Modal\";\nimport { SaveButton } from \"./save-button\";\nimport { SaveFormContext } from \"../shared/save-form/save-form-contex\";\n\ntype ConfirmationModalProps = {\n save: () => Promise;\n btnTekst?: string;\n closeModal?: () => void;\n};\n\ntype SaveButtonWithConfirmProps = {\n modalBody: ReactElement;\n modalTitle: string;\n disabled?: boolean;\n saveBtnVariant?: ButtonVariant;\n saveBtnTekst?: string;\n cancelBtnTekst?: string;\n};\n\nexport const ConfirmationModal = ({\n save,\n modalBody,\n modalTitle,\n saveBtnVariant,\n saveBtnTekst,\n cancelBtnTekst,\n closeModal,\n}: SaveButtonWithConfirmProps & ConfirmationModalProps): ReactElement => {\n return (\n \n {\n await save();\n closeModal && closeModal();\n }}\n title={modalTitle}\n body={
{modalBody}
}\n saveButtonTekst={saveBtnTekst}\n cancelButtonTekst={cancelBtnTekst}\n saveBtnVariant={saveBtnVariant}\n onCancelClick={closeModal}\n />\n
\n );\n};\n\nexport const SaveButtonWithConfirmation = ({\n props,\n saveBtnTekst,\n modalBody,\n modalTitle,\n disabled,\n saveBtnVariant,\n cancelBtnTekst,\n}: { props: any } & SaveButtonWithConfirmProps): ReactElement => {\n const { saveData } = useContext(SaveFormContext);\n const [triggerPreSaveConfirmation, setTriggerPreSaveConfirmation] = useState(\n true\n );\n const [showWarningModal, setShowWarningModal] = React.useState(false);\n\n const preSaveConfirmation = (): void => {\n setShowWarningModal(true);\n };\n\n const save = async (): Promise => {\n setShowWarningModal(false);\n setTriggerPreSaveConfirmation(false);\n saveData();\n };\n\n return (\n <>\n \n {showWarningModal && (\n {\n setShowWarningModal(false);\n // ConfirmationModal opnieuw tonen nadat data is opgeslagen\n setTriggerPreSaveConfirmation(true);\n }}\n modalBody={modalBody}\n modalTitle={modalTitle}\n disabled={disabled}\n saveBtnVariant={saveBtnVariant}\n cancelBtnTekst={cancelBtnTekst}\n saveBtnTekst={saveBtnTekst}\n />\n )}\n \n );\n};\n","import React, { ReactElement, useContext } from \"react\";\nimport { FormikProps, Form, useFormikContext } from \"formik\";\nimport {\n Card,\n CardWrapper,\n PlatformFoutenSamenvatting,\n} from \"adviesbox-shared\";\nimport {\n AdviesonderwerpenState,\n AdviesonderwerpenProps,\n adviesonderwerpenSchema,\n} from \"./infra\";\nimport Onderwerpen from \"./onderwerpen/onderwerpen\";\nimport Menuonderdelen from \"./menuonderdelen/menuonderdelen\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { AutorisatieNiveauManager } from \"../autorisatieniveau-manager/autorisatieniveau-manager\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { getAdviesonderwerpenResources } from \"./infra/adviesonderwerpen-resources\";\nimport { isEqual } from \"lodash\";\nimport { SaveButtonWithConfirmation } from \"../save-button/save-button-with-confimation\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Adviesonderwerpen = (\n props: FormikProps &\n WithSaveData\n): ReactElement => {\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { initialValues, values } = useFormikContext();\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n const onderwerpenDirty = !isEqual(\n values.onderwerpen,\n initialValues.onderwerpen\n );\n const menuonderdelenDirty = !isEqual(\n values.menuonderdelen,\n initialValues.menuonderdelen\n );\n\n let body = <>;\n let title = \"\";\n if (onderwerpenDirty && menuonderdelenDirty) {\n title =\n \"Menuonderdelen en adviesonderwerpen uitschakelen en data verwijderen\";\n body = (\n

\n {getAdviesonderwerpenResources(\"OnderwerpenEnMenuonderdelenWaring\")}\n

\n );\n } else if (onderwerpenDirty) {\n title = \"Adviesonderwerpen uitschakelen en data verwijderen\";\n body =

{getAdviesonderwerpenResources(\"OnderwerpenWaring\")}

;\n } else if (menuonderdelenDirty) {\n title = \"Menuonderdelen uitschakelen en data verwijderen\";\n body =

{getAdviesonderwerpenResources(\"MenuonderdelenWarning\")}

;\n }\n\n return (\n
\n \n\n \n \n
\n
\n

Adviesonderwerpen 

\n \n
\n \n
\n
\n
\n
\n\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nAdviesonderwerpen.displayName = \"Adviesonderwerpen\";\n\nexport default withAdviesboxFormik<\n AdviesonderwerpenProps & WithSaveData,\n AdviesonderwerpenState\n>({\n // Transform outer props into form values\n mapPropsToValues: (e: AdviesonderwerpenProps): AdviesonderwerpenState => e,\n validationSchema: adviesonderwerpenSchema,\n})(Adviesonderwerpen);\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { AdviesonderwerpenOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport Adviesonderwerpen from \"./adviesonderwerpen\";\nimport { mapAdviesonderwerpenDlToUi, mapAdviesonderwerpenUiToDl, mapDlTargetToAdviesonderwerpenUiField } from \"./infra\";\n\ntype RouteParams = {\n vestiging: string;\n};\n\nconst AdviesonderwerpenAjax = (): ReactElement => {\n const { user, settings, requestInit, params } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/Adviesonderwerpen`;\n const { loading, error, data } = useAbortableFetch(url, requestInit);\n\n if (!user) {\n return ;\n }\n\n if (error) {\n return ;\n }\n\n if (typeof data === \"string\") {\n return ;\n }\n\n if (loading || !data) {\n return ;\n }\n\n const mappedProps = mapAdviesonderwerpenDlToUi(data);\n\n if (!mappedProps) {\n return ;\n }\n\n return (\n \n );\n};\n\nAdviesonderwerpenAjax.displayName = \"AdviesonderwerpenAjax\";\n\nexport default withErrorBoundary(AdviesonderwerpenAjax);\n","export const getEnvironment = (hostname: string): \"(O)\" | \"(T)\" | \"(A)\" | \"\" => {\n if (hostname.toLowerCase().match(/^localhost/)) return \"(O)\";\n if (hostname.toLowerCase().match(/^test/)) return \"(T)\";\n if (hostname.toLowerCase().match(/^acc/)) return \"(A)\";\n return \"\";\n};\n","import { ItemType, MenuConfigType } from \"adviesbox-shared\";\nimport { KlantnaamReadOnly } from \"../../.generated/forms/formstypes\";\n\nexport const getAanvragerNaam = (aanvrager: KlantnaamReadOnly): string => {\n const voorletters = aanvrager?.voorletters?.length\n ? `\\xa0${aanvrager?.voorletters}`\n : aanvrager?.voornamen\n ? `\\xa0${aanvrager.voornamen}`\n : /* istanbul ignore next */ \"\";\n\n const voorvoegsel = aanvrager?.voorvoegsel ? `\\xa0${aanvrager?.voorvoegsel}` : /* istanbul ignore next */ \"\";\n\n const achternaam = aanvrager?.achternaam ? `${aanvrager.achternaam}` : /* istanbul ignore next */ \"\";\n\n return `${achternaam},${voorletters}${voorvoegsel}`;\n};\n\nexport const getActivePageTitle = (menuConfig: MenuConfigType[], locationPath: string): string => {\n const collectItems = (items: ItemType[], collected: ItemType[] = []): ItemType[] => {\n items.forEach(item => {\n collected.push(item);\n if (item.items) {\n collectItems(item.items, collected);\n }\n });\n return collected;\n };\n\n const allItems = menuConfig.flatMap(config =>\n config.lists.flatMap(list =>\n collectItems([list])\n )\n );\n\n return allItems.find(item => item.link === locationPath)?.title.toString() || \"Page name\";\n};","import React, { createContext, ReactElement, ReactNode, useCallback, useState, SetStateAction } from \"react\";\nimport { MenuInfo } from \"../.generated/forms/formstypes\";\n\ntype AppDataProviderProps = {\n children: ReactNode;\n};\n\nexport type AppDataContextType = {\n reloadCount: number;\n reloadNavigation: () => void;\n menuInfo: MenuInfo;\n setMenuInfo: React.Dispatch>;\n activePage: string;\n setActivePage: React.Dispatch>;\n};\n\nexport const AppDataContext = createContext({\n reloadCount: 0,\n reloadNavigation: () => 0,\n menuInfo: {} as MenuInfo,\n setMenuInfo: /* istanbul ignore next */ () => {},\n activePage: \"\",\n setActivePage: () => {}\n} as AppDataContextType);\n\nexport const AppDataProvider = ({ children }: AppDataProviderProps): ReactElement => {\n const [reloadNavigationCounter, setReloadNavigationCounter] = useState(1);\n const reloadNavigation = useCallback(\n /* istanbul ignore next */ () => setReloadNavigationCounter(oldState => oldState + 1),\n [setReloadNavigationCounter]\n );\n const [activePage, setActivePage] = useState(\"\");\n const [menuInfo, setMenuInfo] = useState({} as MenuInfo);\n\n return (\n \n {children}\n \n );\n};\n","import { useContext } from \"react\";\nimport { getEnvironment } from \"../../utils/environment-helper\";\nimport { getAanvragerNaam } from \"../../utils/menu-info\";\nimport { AppDataContext } from \"../../../navigation/appdata-context\";\n\n// use altTitle when a page has no NavigationList (side menu) loaded (ie. zoekscherm::Advies).\ntype TitleProps = { appName: string; altTitle?: string };\nexport const Title = ({ appName, altTitle }: TitleProps): null => {\n const { menuInfo, activePage } = useContext(AppDataContext);\n\n const hostnamePrefix = getEnvironment(window.location.hostname)\n ? `${getEnvironment(window.location.hostname)}\\xa0`\n : \"\";\n const dossierTitel = menuInfo && menuInfo.aanvrager1 ? `${getAanvragerNaam(menuInfo.aanvrager1)}\\xa0` : \"\";\n const activePageTitle = activePage ? `${activePage}\\xa0` : \"\";\n const altPageTitel = `${altTitle ? `${altTitle}\\xa0` : \"\"}`;\n\n window.document.title =\n hostnamePrefix +\n (dossierTitel ? dossierTitel : activePageTitle ? activePageTitle : altPageTitel) +\n `|\\xa0${appName}`;\n\n return null;\n};\n","import React, { ReactElement, ChangeEvent } from \"react\";\nimport { RadioInputOption, TooltipWrap } from \"adviesbox-shared\";\nimport {\n AutorisatieNiveauRowProps,\n AutorisatieNiveauState,\n} from \"./autorisatie-niveau-schema\";\nimport { connect, getIn, FormikContextType } from \"formik\";\nimport autoristatieNiveauClasses from \"./autorisatie-niveau-row.module.scss\";\n\nexport enum AutorisatieNiveauUniverseel {\n Organisatie = \"Organisatie\",\n Vestiging = \"Vestiging\",\n Medewerker = \"Medewerker\",\n}\n\nconst AutorisatieNiveauRow = ({\n formikKey,\n name,\n index,\n formik: { values, setFieldValue, initialValues },\n}: AutorisatieNiveauRowProps & {\n formik: FormikContextType;\n}): ReactElement => {\n const centerElementByClassNameString =\n \"d-flex align-items-center justify-content-center h-100\";\n const value = getIn(values, `${formikKey}.${name}`);\n const initialValue = getIn(initialValues, `${formikKey}.${name}`);\n const tooltipMessage =\n \"Let op; Instellingen worden per autorisatieniveau opgeslagen. Als u het autorisatieniveau aanpast worden de instellingen behorende bij het nieuw geselecteerde autorisatieniveau geactiveerd. Controleer per scherm of de instellingen overeen komen met de gewenste instellingen.\";\n\n const showWarning = {\n vestiging:\n value === AutorisatieNiveauUniverseel.Vestiging &&\n initialValue !== AutorisatieNiveauUniverseel.Vestiging,\n organisatie:\n value === AutorisatieNiveauUniverseel.Organisatie &&\n initialValue !== AutorisatieNiveauUniverseel.Organisatie,\n medewerker:\n value === AutorisatieNiveauUniverseel.Medewerker &&\n initialValue !== AutorisatieNiveauUniverseel.Medewerker,\n };\n\n const onChange = (event: ChangeEvent): void => {\n setFieldValue(`${formikKey}.${name}`, event.target.value);\n };\n\n return (\n
\n
{name}
\n
\n {/* ../../shared/components/radio-input/RadioInputGroup.module.scss: radio */}\n
\n \n {showWarning.organisatie && (\n \n )}\n
\n
\n
\n
\n \n {showWarning.vestiging && (\n \n )}\n
\n
\n
\n
\n \n {showWarning.medewerker && (\n \n )}\n
\n
\n
\n );\n};\n\nexport default connect(\n AutorisatieNiveauRow\n);\n","import React, { ReactElement } from \"react\";\nimport { AutorisatieNiveauGridProps, AutorisatieNiveauState } from \"./autorisatie-niveau-schema\";\nimport { connect, FormikContextType} from \"formik\";\nimport AutorisatieNiveauRow from \"./autorisatie-niveau-row\";\nimport classes from \"./autorisatie-niveau-grid.module.scss\";\n\nconst AutorisatieNiveauGrid = ({\n options,\n formikKey\n}: AutorisatieNiveauGridProps & { formik: FormikContextType }): ReactElement => {\n const centerElementByClassNameString = \"d-flex align-items-center justify-content-center h-100\";\n\n return options.length ? (\n <>\n
\n
\n
\n
\n Organisatie\n
\n
\n Vestiging\n
\n
\n Gebruiker\n
\n
\n
\n
\n {options.map(\n (option, index): ReactElement => {\n return (\n \n );\n }\n )}\n
\n \n ) : (\n
Geen opties meegeleverd
\n );\n};\nexport default connect(AutorisatieNiveauGrid);\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType} from \"formik\";\nimport { AutorisatieNiveauState } from \"../infra\";\nimport AutorisatieNiveauGrid from \"../infra/autorisatie-niveau-grid\";\n\nconst Beheer = ({ formik: { values } }: { formik: FormikContextType }): ReactElement => {\n return ;\n};\n\nexport default connect<{}, AutorisatieNiveauState>(Beheer);\n","import * as Yup from \"yup\";\nimport { InferType } from \"yup\";\nimport { InstellingNiveauOptions } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\n\nexport const voorkeurenSchema = Yup.object({\n Lastenoverzicht: Yup.string().default(InstellingNiveauOptions.Medewerker),\n Berekeningen: Yup.string().default(InstellingNiveauOptions.Medewerker),\n Tarieven: Yup.string().default(InstellingNiveauOptions.Medewerker),\n Documenten: Yup.string().default(InstellingNiveauOptions.Medewerker),\n Algemeen: Yup.string().default(InstellingNiveauOptions.Medewerker)\n});\n\nexport const beheerSchema = Yup.object({\n \"Software Koppelingen\": Yup.string().default(InstellingNiveauOptions.Medewerker),\n Serviceproviders: Yup.string().default(InstellingNiveauOptions.Medewerker),\n Notarissen: Yup.string().default(InstellingNiveauOptions.Medewerker),\n Taxatiebureaus: Yup.string().default(InstellingNiveauOptions.Medewerker),\n \"Bankgarantie instellingen\": Yup.string().default(InstellingNiveauOptions.Medewerker),\n Vermogensbeheerders: Yup.string().default(InstellingNiveauOptions.Medewerker),\n Verzekeraars: Yup.string().default(InstellingNiveauOptions.Medewerker),\n Geldverstrekkers: Yup.string().default(InstellingNiveauOptions.Medewerker),\n});\n\nexport const externSchema = Yup.object({\n // TODO: Op een later tijdstip toevoegen\n // \"Nationale Hypotheekbond\": Yup.string().default(InstellingNiveauOptions.Medewerker),\n // Elements: Yup.string().default(InstellingNiveauOptions.Medewerker),\n // HDN: Yup.string().default(InstellingNiveauOptions.Medewerker),\n // \"Generieke koppelingen\": Yup.string().default(InstellingNiveauOptions.Medewerker),\n \"Nationale Waarborg\": Yup.string().default(InstellingNiveauOptions.Medewerker)\n});\n\nexport const instellingenSchema = Yup.object({\n \"Standaard teksten\": Yup.string().default(InstellingNiveauOptions.Medewerker),\n \"Uitgangspunten advies\": Yup.string().default(InstellingNiveauOptions.Medewerker),\n Adviesonderwerpen: Yup.string().default(InstellingNiveauOptions.Medewerker),\n \"Klantprofiel en motivering\": Yup.string().default(InstellingNiveauOptions.Medewerker)\n});\n\nexport const autorisatieNiveauSchema = Yup.object({\n voorkeuren: voorkeurenSchema,\n beheer: beheerSchema,\n extern: externSchema,\n instellingen: instellingenSchema\n});\n\nexport type AutorisatieNiveauState = InferType;\nexport type AutorisatieNiveauProps = InferType;\nexport type VoorkeurenType = InferType;\nexport type BeheerType = InferType;\nexport type ExternType = InferType;\nexport type InstellingenType = InferType;\nexport type AutorisatieNiveauGridProps = { options: string[]; formikKey: string };\nexport type AutorisatieNiveauRowProps = { formikKey: string; name: string; index: number };\n","import {\n autorisatieNiveauSchema,\n voorkeurenSchema,\n beheerSchema,\n externSchema,\n instellingenSchema,\n AutorisatieNiveauState\n} from \"./autorisatie-niveau-schema\";\nimport { FieldMap, UiName } from \"../../shared/types\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\nimport {\n InstellingNiveauOptions,\n Autorisatieniveau,\n AutorisatieniveauOutput\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\nimport { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\n\nconst mapVoorkeuren = createMapToUi(voorkeurenSchema).from({\n Lastenoverzicht: v => v.lastenoverzichtenNiveau as InstellingNiveauOptions,\n Berekeningen: v => v.berekeningenNiveau as InstellingNiveauOptions,\n Tarieven: v => v.tarievenNiveau as InstellingNiveauOptions,\n Documenten: v => v.documentNiveau as InstellingNiveauOptions,\n Algemeen: v => v.algemeenNiveau as InstellingNiveauOptions\n});\n\nconst mapBeheer = createMapToUi(beheerSchema).from({\n \"Software Koppelingen\": v => v.softwareKoppelingenNiveau as InstellingNiveauOptions,\n Serviceproviders: v => v.serviceprovidersNiveau as InstellingNiveauOptions,\n Notarissen: v => v.notarissenNiveau as InstellingNiveauOptions,\n Taxatiebureaus: v => v.taxatiebureausNiveau as InstellingNiveauOptions,\n \"Bankgarantie instellingen\": v => v.bankgarantieInstellingenNiveau as InstellingNiveauOptions,\n Vermogensbeheerders: v => v.vermogensbeheerdersNiveau as InstellingNiveauOptions,\n Verzekeraars: v => v.verzekeraarsNiveau as InstellingNiveauOptions,\n Geldverstrekkers: v => v.geldverstrekkersNiveau as InstellingNiveauOptions,\n});\n\nconst mapExtern = createMapToUi(externSchema).from({\n // TODO: Op een later tijdstip toevoegen\n // \"Nationale Hypotheekbond\": v => v.nationaleHypotheekbondNiveau as InstellingNiveauOptions,\n // Elements: v => v.elementsNiveau as InstellingNiveauOptions,\n // HDN: v => v.hdnNiveau as InstellingNiveauOptions,\n // \"Generieke koppelingen\": v => v.generiekeKoppelingenNiveau as InstellingNiveauOptions,\n \"Nationale Waarborg\": v => v.nationaleWaarborgNiveau as InstellingNiveauOptions\n});\n\nconst mapInstellingen = createMapToUi(instellingenSchema).from({\n \"Standaard teksten\": v => v.standaardTekstenNiveau as InstellingNiveauOptions,\n \"Uitgangspunten advies\": v => v.uitgangspuntenAdviesNiveau as InstellingNiveauOptions,\n Adviesonderwerpen: v => v.adviesonderwerpenNiveau as InstellingNiveauOptions,\n \"Klantprofiel en motivering\": v => v.klantprofielMotiveringNiveau as InstellingNiveauOptions\n});\n\nfunction dl2ui(values: Autorisatieniveau): AutorisatieNiveauState {\n const autorisatieNiveau = {\n voorkeuren: mapVoorkeuren(values),\n beheer: mapBeheer(values),\n extern: mapExtern(values),\n instellingen: mapInstellingen(values)\n };\n\n return autorisatieNiveauSchema.cast(autorisatieNiveau);\n}\n\nexport function mapAutorisatieNiveauDlToUi(data: AutorisatieniveauOutput): AutorisatieNiveauState | null {\n const autorisatieNiveau = data && data.autorisatieniveau ? data.autorisatieniveau : null;\n\n if (!autorisatieNiveau) {\n return null;\n }\n\n return dl2ui(autorisatieNiveau);\n}\n\nexport const mapAutorisatieNiveauUiToDl = createMapToDl(autorisatieNiveauSchema).to({\n algemeenNiveau: v => v.voorkeuren.Algemeen as InstellingNiveauOptions,\n documentNiveau: v => v.voorkeuren.Documenten as InstellingNiveauOptions,\n tarievenNiveau: v => v.voorkeuren.Tarieven as InstellingNiveauOptions,\n berekeningenNiveau: v => v.voorkeuren.Berekeningen as InstellingNiveauOptions,\n lastenoverzichtenNiveau: v => v.voorkeuren.Lastenoverzicht as InstellingNiveauOptions,\n geldverstrekkersNiveau: v => v.beheer.Geldverstrekkers as InstellingNiveauOptions,\n verzekeraarsNiveau: v => v.beheer.Verzekeraars as InstellingNiveauOptions,\n vermogensbeheerdersNiveau: v => v.beheer[\"Vermogensbeheerders\"] as InstellingNiveauOptions,\n bankgarantieInstellingenNiveau: v => v.beheer[\"Bankgarantie instellingen\"] as InstellingNiveauOptions,\n taxatiebureausNiveau: v => v.beheer.Taxatiebureaus as InstellingNiveauOptions,\n notarissenNiveau: v => v.beheer.Notarissen as InstellingNiveauOptions,\n serviceprovidersNiveau: v => v.beheer.Serviceproviders as InstellingNiveauOptions,\n klantprofielMotiveringNiveau: v => v.instellingen[\"Klantprofiel en motivering\"] as InstellingNiveauOptions,\n adviesonderwerpenNiveau: v => v.instellingen.Adviesonderwerpen as InstellingNiveauOptions,\n uitgangspuntenAdviesNiveau: v => v.instellingen[\"Uitgangspunten advies\"] as InstellingNiveauOptions,\n standaardTekstenNiveau: v => v.instellingen[\"Standaard teksten\"] as InstellingNiveauOptions,\n // TODO: Op een later tijdstip toevoegen\n // generiekeKoppelingenNiveau: v => v.extern[\"Generieke koppelingen\"] as InstellingNiveauOptions,\n // hdnNiveau: v => v.extern.HDN as InstellingNiveauOptions,\n // elementsNiveau: v => v.extern.Elements as InstellingNiveauOptions,\n // nationaleHypotheekbondNiveau: v =>\n // v.extern[\"Nationale Hypotheekbond\"] as InstellingNiveauOptions,\n generiekeKoppelingenNiveau: v => InstellingNiveauOptions.Organisatie, //TODO: Op een later tijdstip toevoegen\n hdnNiveau: v => InstellingNiveauOptions.Organisatie, // TODO: Op een later tijdstip toevoegen\n elementsNiveau: v => InstellingNiveauOptions.Organisatie, // TODO: Op een later tijdstip toevoegen\n nationaleHypotheekbondNiveau: v => InstellingNiveauOptions.Organisatie, // TODO: Op een later tijdstip toevoegen\n nationaleWaarborgNiveau: v => v.extern[\"Nationale Waarborg\"] as InstellingNiveauOptions,\n softwareKoppelingenNiveau: v => v.beheer[\"Software Koppelingen\"] as InstellingNiveauOptions\n});\n\nexport function mapDlTargetToAutorisatieNiveauUiField(target: string): UiName | null {\n const map: FieldMap = {};\n return target2field(map, target);\n}\n","import { createGetTextResources } from \"../../shared/utils/text-resources-algemeen\";\n\nexport const getAutorisatieNiveauTextResources = createGetTextResources({\n ConfirmationTextAutorisatie: `Weet u het zeker? De al ingevoerde gegevens in Instellingen worden\n hierdoor verwijderd.`,\n});\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType} from \"formik\";\nimport { AutorisatieNiveauState } from \"../infra\";\nimport AutorisatieNiveauGrid from \"../infra/autorisatie-niveau-grid\";\n\nconst Instellingen = ({ formik: { values } }: { formik: FormikContextType }): ReactElement => {\n return ;\n};\n\nexport default connect<{}, AutorisatieNiveauState>(Instellingen);\n","import React, { ReactElement } from \"react\";\nimport { connect } from \"formik\";\nimport { AutorisatieNiveauState } from \"../infra\";\n\nconst Uitleg = (): ReactElement => {\n return (\n
\n \n Per Instellingen-scherm kan hier bepaald worden voor wie deze instelling geldt. Gebruikers (zonder\n beheerrechten) kunnen alleen de Instellingen met autorisatieniveau ā€˜Gebruikerā€™ zelf wijzigen.\n \n
\n );\n};\n\nexport default connect<{}, AutorisatieNiveauState>(Uitleg);\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType} from \"formik\";\nimport { AutorisatieNiveauState } from \"../infra\";\nimport AutorisatieNiveauGrid from \"../infra/autorisatie-niveau-grid\";\n\nconst Voorkeuren = ({ formik: { values } }: { formik: FormikContextType }): ReactElement => {\n return ;\n};\n\nexport default connect<{}, AutorisatieNiveauState>(Voorkeuren);\n","import {\n Card,\n CardWrapper,\n PageLoading,\n PlatformFoutenSamenvatting,\n} from \"adviesbox-shared\";\nimport { UiError } from \"adviesbox-shared/utils/types\";\nimport { Form, FormikProps } from \"formik\";\nimport React, { ReactElement, useContext, useState } from \"react\";\nimport { Prompt } from \"react-router-dom\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport Beheer from \"./beheer/beheer\";\nimport {\n AutorisatieNiveauProps,\n autorisatieNiveauSchema,\n AutorisatieNiveauState,\n mapAutorisatieNiveauUiToDl,\n getAutorisatieNiveauTextResources,\n} from \"./infra\";\nimport Instellingen from \"./instellingen/instellingen\";\nimport Uitleg from \"./uitleg/uitleg\";\nimport Voorkeuren from \"./voorkeuren/voorkeuren\";\nimport { SaveButtonWithConfirmation } from \"../save-button/save-button-with-confimation\";\n\nconst AutorisatieNiveau = (\n props: FormikProps &\n WithSaveData\n): ReactElement => {\n const { saveData, values, resetForm, dirty } = props;\n const { setAutorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const [loading, setLoading] = useState(false);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n const save = async (): Promise => {\n let res = null;\n try {\n setLoading(true);\n res = await saveData(values);\n resetForm({ values });\n const mappedValues = mapAutorisatieNiveauUiToDl(values);\n setAutorisatieNiveau(mappedValues);\n setLoading(false);\n return res;\n } catch {\n /* eslint-disable-next-line no-console */\n console.error(\"opslaan autorisatieniveau mislukt\");\n return res;\n }\n };\n\n const modalBody = (\n

{getAutorisatieNiveauTextResources(\"ConfirmationTextAutorisatie\")}

\n );\n\n return (\n
\n \n\n
\n \n {loading && }\n \n
\n
\n

Autorisatieniveau 

\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\nAutorisatieNiveau.displayName = \"AutorisatieNiveau\";\n\nexport default withAdviesboxFormik<\n AutorisatieNiveauProps & WithSaveData,\n AutorisatieNiveauState\n>({\n mapPropsToValues: (e: AutorisatieNiveauProps): AutorisatieNiveauState => e,\n validationSchema: autorisatieNiveauSchema,\n})(AutorisatieNiveau);\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { AutorisatieniveauOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { Title } from \"../shared/components/title/title\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport AutorisatieNiveau from \"./autorisatie-niveau\";\nimport { mapAutorisatieNiveauDlToUi, mapAutorisatieNiveauUiToDl, mapDlTargetToAutorisatieNiveauUiField } from \"./infra\";\n\ntype RouteParams = {\n vestiging: string;\n};\n\nconst AutorisatieNiveauAjax = (): ReactElement => {\n const { settings, user, requestInit, params } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/Autorisatieniveau`;\n const { loading, error, data } = useAbortableFetch(url, requestInit);\n\n if (!user) {\n return ;\n }\n\n if (error) {\n return ;\n }\n\n if (typeof data === \"string\") {\n return ;\n }\n\n if (loading || !data) {\n return ;\n }\n\n const mappedProps = mapAutorisatieNiveauDlToUi(data);\n if (!mappedProps) {\n return ;\n }\n\n return (\n <>\n \n <AutorisatieNiveau\n saveData={saveData(\n user,\n params.vestiging,\n url,\n settings.OcpApimSubscriptionKey,\n mapAutorisatieNiveauUiToDl,\n mapDlTargetToAutorisatieNiveauUiField\n )}\n {...mappedProps}\n />\n </>\n );\n};\n\nAutorisatieNiveauAjax.displayName = \"AutorisatieNiveauAjax\";\n\nexport default withErrorBoundary(AutorisatieNiveauAjax);\n","import { InferType } from \"yup\";\nimport * as Yup from \"yup\";\n\nexport const bankgarantieInstellingPartij = Yup.object({\n code: Yup.string().default(\"\"),\n partijnaam: Yup.string().default(\"\"),\n actief: Yup.boolean().default(false),\n agentnummer: Yup.string().default(\"\")\n});\n\nexport const beschikbareBankgarantieinstellingenSchema = Yup.object({\n partijen: Yup.array(bankgarantieInstellingPartij).default([])\n});\n\nexport const bankgarantieinstellingenSchema = Yup.object({\n beschikbareBankgarantieinstellingen: beschikbareBankgarantieinstellingenSchema\n});\n\nexport type BankgarantieinstellingenState = InferType<typeof bankgarantieinstellingenSchema>;\nexport type BankgarantieinstellingenProps = InferType<typeof bankgarantieinstellingenSchema>;\n\nexport type BeschikbareBankgarantieinstellingenType = InferType<typeof beschikbareBankgarantieinstellingenSchema>;\n","import {\n Bankgarantieinstellingen,\n BankgarantieinstellingPartij\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { FieldMap, UiName } from \"../../shared/types\";\nimport { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\nimport { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\nimport {\n bankgarantieinstellingenSchema,\n BankgarantieinstellingenState,\n bankgarantieInstellingPartij,\n beschikbareBankgarantieinstellingenSchema\n} from \"./bankgarantieinstellingen-schema\";\n\nconst mapBankgarantieinstellingPartij = createMapToUi(bankgarantieInstellingPartij).from<BankgarantieinstellingPartij>({\n actief: v => v.actief,\n agentnummer: v => v.agentnummer,\n code: v => v.code,\n partijnaam: v => v.partijnaam\n});\n\nconst mapBeschikbareBankgarantieinstellingenSchema = createMapToUi(beschikbareBankgarantieinstellingenSchema).from<\n Bankgarantieinstellingen\n>({\n partijen: v =>\n v.partijen?.map(mapBankgarantieinstellingPartij)\n});\n\nconst mapBankgarantieInstellingen = createMapToUi(bankgarantieinstellingenSchema).from<Bankgarantieinstellingen>({\n beschikbareBankgarantieinstellingen: v => mapBeschikbareBankgarantieinstellingenSchema(v)\n});\n\nfunction dl2ui(values: Bankgarantieinstellingen): BankgarantieinstellingenState {\n const bankgarantieinstellingen = mapBankgarantieInstellingen(values);\n\n return bankgarantieinstellingenSchema.cast(bankgarantieinstellingen);\n}\n\nexport function mapBankgarantieinstellingenDlToUi(\n bankgarantieinstellingenId: string,\n data: any\n): BankgarantieinstellingenState | null {\n const bankgarantieinstellingen = data ? data[bankgarantieinstellingenId] : null;\n\n if (!bankgarantieinstellingen) {\n return null;\n }\n\n return dl2ui(bankgarantieinstellingen);\n}\n\nexport const mapBankgarantieinstellingenUiToDl = createMapToDl(bankgarantieinstellingenSchema).to<\n Bankgarantieinstellingen\n>({\n partijen: v => v.beschikbareBankgarantieinstellingen.partijen\n});\n\nexport function mapDlTargetToBankgarantieinstellingenUiField(target: string): UiName | null {\n const map: FieldMap<any> = {};\n\n return target2field(map, target);\n}\n","import React, { ReactElement, ChangeEvent, RefObject, useRef } from \"react\";\nimport { FormikContextType } from \"formik\";\nimport { CellInfo } from \"react-table-6\";\nimport { BankgarantieinstellingenState } from \"../infra\";\nimport { AdviesBoxColumn, CheckBox } from \"adviesbox-shared\";\nimport classes from \"./beschikbare-bankgarantieinstellingen.module.scss\";\nimport classnames from \"classnames\";\n\nexport const EmptyComponent = (): null => null;\n\nconst createSpanWithId = (c: CellInfo): ReactElement => {\n return <span id={`${c.index}-row-partijnaam-bankgarantieinstellingen`}>{c.original.partijnaam}</span>;\n};\n\nexport const createActiveCheckboxCell = (c: CellInfo): ReactElement => {\n return (\n <div className={classes.clickable_label_fix}>\n <CheckBox\n name={`beschikbareBankgarantieinstellingen.partijen[${c.index}].actief`}\n caption=\"\"\n disabled={c.original.code === \"XX\"}\n />\n </div>\n );\n};\n\nexport const createTextInputAgentNummerCell = (\n formik: FormikContextType<BankgarantieinstellingenState>\n): ((c: CellInfo) => ReactElement) => (c: CellInfo): ReactElement => {\n const { values, setFieldValue } = formik;\n const inputElement: RefObject<HTMLInputElement> | null = useRef(null);\n\n const onMouseUp = (): void => {\n inputElement.current?.focus();\n };\n\n const onBlur = (e: ChangeEvent<HTMLInputElement>): void => {\n setFieldValue(`beschikbareBankgarantieinstellingen.partijen[${c.index}].agentnummer`, e.target.value);\n };\n\n return (\n <div className=\"input-group\">\n <input\n ref={inputElement}\n data-testid={`agentnummer-input-${c.index}`}\n id={`agentnummer-input-${c.index}`}\n type=\"text\"\n // ../../shared/components/tekst-input/TextInput.module.scss: input_control\n className={classnames(\"input_control\", \"grid-cell\")}\n defaultValue={values.beschikbareBankgarantieinstellingen.partijen[c.index].agentnummer || \"\"}\n onBlur={onBlur}\n onMouseUp={onMouseUp}\n />\n </div>\n );\n};\n\nexport const getColumns = (formik: FormikContextType<BankgarantieinstellingenState>): AdviesBoxColumn[] => {\n return [\n {\n Header: \"Partijnaam\",\n Cell: createSpanWithId\n },\n {\n Header: \"Actief\",\n Cell: createActiveCheckboxCell,\n maxWidth: 100\n },\n {\n Header: \"Agentnummer\",\n Cell: createTextInputAgentNummerCell(formik)\n }\n ];\n};\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType } from \"formik\";\nimport { BankgarantieinstellingenState } from \"../infra\";\nimport { getColumns, EmptyComponent } from \"./bankgarantie-data-grid-components\";\nimport { DataGrid } from \"adviesbox-shared\";\n\nconst BeschikbareBankgarantieinstellingen = ({\n formik\n}: {\n formik: FormikContextType<BankgarantieinstellingenState>;\n}): ReactElement => {\n const { values } = formik;\n return (\n <DataGrid\n name=\"beschikbareBankgarantieinstellingen.partijen\"\n editable={true}\n resizable={false}\n sortable={false}\n filterable={false}\n columns={getColumns(formik)}\n minRows={values.beschikbareBankgarantieinstellingen.partijen.length || 0}\n showPagination={false}\n pageSize={values.beschikbareBankgarantieinstellingen.partijen.length || 0}\n NoDataComponent={EmptyComponent}\n />\n );\n};\n\nexport default connect<{}, BankgarantieinstellingenState>(BeschikbareBankgarantieinstellingen);\n","import React, { ReactElement, useContext } from \"react\";\nimport { Form, FormikProps } from \"formik\";\nimport { Card, CardWrapper, PlatformFoutenSamenvatting } from \"adviesbox-shared\";\nimport { BankgarantieinstellingenState, BankgarantieinstellingenProps, bankgarantieinstellingenSchema } from \"./infra\";\nimport BeschikbareBankgarantieinstellingen from \"./beschikbare-bankgarantieinstellingen/beschikbare-bankgarantieinstellingen\";\nimport { AutorisatieNiveauManager } from \"../autorisatieniveau-manager/autorisatieniveau-manager\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport classnames from \"classnames\";\nimport classes from \"./beschikbare-bankgarantieinstellingen/beschikbare-bankgarantieinstellingen.module.scss\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Bankgarantieinstellingen = (\n props: FormikProps<BankgarantieinstellingenState> & WithSaveData<BankgarantieinstellingenState>\n): ReactElement => {\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n return (\n <Form>\n <PlatformFoutenSamenvatting />\n <fieldset\n disabled={\n !(isBeheerder || autorisatieNiveau.bankgarantieInstellingenNiveau === InstellingNiveauOptions.Medewerker)\n }\n >\n <CardWrapper className=\"px-3\">\n <div className={classnames(classes.text_container, \"text-container\")}>\n <div className={\"p-2\"}>\n <h2>Bankgarantieinstellingen </h2>\n <AutorisatieNiveauManager manageFor={autorisatieNiveau.bankgarantieInstellingenNiveau} />\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n </div>\n </div>\n </CardWrapper>\n <CardWrapper className=\"px-3\">\n <Card title=\"Beschikbare bankgarantieinstellingen\" className=\"w-100\">\n <div className=\"px-1\">\n <BeschikbareBankgarantieinstellingen />\n </div>\n </Card>\n </CardWrapper>\n </fieldset>\n\n {/* istanbul ignore next */\n process.env.NODE_ENV === \"development\" && <Debug />}\n </Form>\n );\n};\n\nBankgarantieinstellingen.displayName = \"Bankgarantieinstellingen\";\n\nexport default withAdviesboxFormik<\n BankgarantieinstellingenProps & WithSaveData<BankgarantieinstellingenState>,\n BankgarantieinstellingenState\n>({\n // Transform outer props into form values\n mapPropsToValues: (e: BankgarantieinstellingenProps): BankgarantieinstellingenState => e,\n validationSchema: bankgarantieinstellingenSchema\n})(Bankgarantieinstellingen);\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { BankgarantieinstellingenOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport Bankgarantieinstellingen from \"./bankgarantieinstellingen\";\nimport {\n mapBankgarantieinstellingenDlToUi,\n mapBankgarantieinstellingenUiToDl,\n mapDlTargetToBankgarantieinstellingenUiField\n} from \"./infra\";\n\nconst BankgarantieinstellingenAjax = (): ReactElement => {\n // TODO: replace useRequestInit/useAbortableFetch with useAdviesboxData\n const { settings, user, params, requestInit } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/BeheerPartijen/Bankgarantieinstellingen`;\n const { loading, error, data } = useAbortableFetch<BankgarantieinstellingenOutput>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapBankgarantieinstellingenDlToUi(\"bankgarantieinstellingen\", data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <Bankgarantieinstellingen\n saveData={saveData(\n user,\n params.vestiging ?? \"\",\n url,\n settings.OcpApimSubscriptionKey,\n mapBankgarantieinstellingenUiToDl,\n mapDlTargetToBankgarantieinstellingenUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nBankgarantieinstellingenAjax.displayName = \"BankgarantieinstellingenAjax\";\n\nexport default withErrorBoundary(BankgarantieinstellingenAjax);\n","import { createGetTextResources } from \"../../shared/utils/text-resources-algemeen\";\n\nexport const getBerekeningenTextResources = createGetTextResources({\n TooltipHeffingskortingen:\n \"Geef hieronder aan welke heffingskortingen meegenomen moeten worden in de fiscale berekeningen. In de doorrekening van de rapportagejaren wordt per jaar gekeken of de aanvrager(s) ervoor in aanmerking komen. Ook in de doorrekening van de scenario's wordt gekeken of de aanvrager(s) in dat geval in aanmerking komen voor deze heffingskortingen.\",\n TooltipIndexatieWaardePandPercentage:\n \"De indexatie waarde pand heeft geen invloed op de 'automatische rentedaling'. Die wordt gebaseerd op de initiĆ«le marktwaarde die bekend is bij de geldverstrekker.\",\n TooltipminderingOverwaardeGewensteHypotheek:\n \"Kies 'Ja' indien u de overwaarde van een te verkopen woning standaard als inbreng eigen geld wilt inzetten.\",\n TooltipIngangsdatumScenarios:\n \"Deze ingangsdatum is een jaar na het startjaar van de overzichten. In dit voorbeeld is uitgegaan van het huidige jaar. Het betreft de scenario's overlijden, arbeidsongeschiktheid en werkloosheid.\",\n TooltiprekenrenteContanteWaardePercentage:\n \"Dit tarief wordt gebruikt om de totale waarde van het tekort c.q. overschot over een vastgestelde duur te bepalen.\",\n TooltipcontroleNbi:\n \"Met deze instelling kunt u aangeven of de controle van het gewenste netto besteedbaar inkomen moet plaatsvinden op basis van de huidige situatie of situatie na advies (voorstel). \\nā€¢ Bij de keuze voor 'Huidige situatie' wordt het huidige netto besteedbaar inkomen van de klant als uitgangspunt genomen in de nbi-scenario's. De huidige financiĆ«le ruimte van het lopende kalenderjaar wordt gebruikt als het gewenste netto besteedbaar inkomen.\\nā€¢ Bij de keuze voor 'Situatie na advies' wordt het nieuwe netto besteedbaar inkomen van de klant als uitgangspunt genomen in de nbi-scenario's. De financiĆ«le ruimte van het betreffende voorstel van het eerste kalenderjaar na advies wordt gebruikt als het gewenste netto besteedbaar inkomen.\",\n ErrorlengteOverzichtInJaren: \"Waarde tussen 1 t/m 50 invullen.\",\n ErrorindexatieWaardePandPercentage: \"Maximale waarde 99% (niet 100%).\",\n ErrorrekenrenteContanteWaardePercentage: \"Waarde tussen 0 t/m 20% invullen.\"\n});\n","import { getBerekeningenTextResources } from \"./berekeningen-resources\";\nimport * as Yup from \"yup\";\nimport { ControleNbiOptions } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\n\nimport { InferType } from \"yup\";\nimport { hasValue } from \"../../shared/utils/helpers\";\nimport { nullableLocalDateSchema } from \"adviesbox-shared\";\n\nexport const algemeenSchema = Yup.object({\n huurstijgingPercentage: Yup.number().default(0),\n indexatieWaardePandPercentage: Yup.number()\n .default(0)\n .test({\n message: getBerekeningenTextResources(\"ErrorindexatieWaardePandPercentage\"),\n test: function(value: number): boolean {\n return !!value ? value <= 99 : true;\n }\n }),\n minderingOverwaardeGewensteHypotheek: Yup.boolean().default(false)\n});\n\nexport const heffingskortingenSchema = Yup.object({\n algemeneHeffingskorting: Yup.boolean().default(true),\n arbeidskorting: Yup.boolean().default(false),\n inkomensafhankelijkeCombinatiekorting: Yup.boolean().default(false),\n ouderenkorting: Yup.boolean().default(false),\n alleenstaandeOuderenkorting: Yup.boolean().default(false),\n werkbonus: Yup.boolean().default(false),\n kindgebondenBudget: Yup.boolean().default(false)\n});\n\nexport const scenariosSchema = Yup.object({\n ingangsdatumScenarios: nullableLocalDateSchema,\n lengteOverzichtInJaren: Yup.number()\n .default(0)\n .test({\n message: getBerekeningenTextResources(\"ErrorlengteOverzichtInJaren\"),\n test: function(value: number): boolean {\n return hasValue(value) ? value >= 1 && value <= 50 : true;\n }\n }),\n eindleeftijdScenarios: Yup.number().default(0),\n rekenrenteContanteWaardePercentage: Yup.number()\n .default(0)\n .test({\n message: getBerekeningenTextResources(\"ErrorrekenrenteContanteWaardePercentage\"),\n test: function(value: number): boolean {\n return hasValue(value) ? value >= 0 && value <= 20 : true;\n }\n }),\n controleNbi: Yup.mixed()\n .oneOf(Object.values(ControleNbiOptions))\n .default(ControleNbiOptions.HuidigeSituatie)\n});\n\nexport const berekeningenSchema = Yup.object({\n algemeen: algemeenSchema,\n heffingskortingen: heffingskortingenSchema,\n scenarios: scenariosSchema\n});\n\nexport type BerekeningenState = InferType<typeof berekeningenSchema>;\nexport type BerekeningenProps = InferType<typeof berekeningenSchema>;\n\nexport type AlgemeenType = InferType<typeof algemeenSchema>;\nexport type HeffingskortingenType = InferType<typeof heffingskortingenSchema>;\nexport type ScenariosType = InferType<typeof scenariosSchema>;\n","import { FieldMap, UiName } from \"../../shared/types\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\n\nimport {\n berekeningenSchema,\n algemeenSchema,\n heffingskortingenSchema,\n scenariosSchema,\n BerekeningenState\n} from \"./berekeningen-schema\";\nimport {\n Berekeningen,\n BerekeningenOutput,\n ControleNbiOptions\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\nimport { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\nimport { convertUtcToTimeZone } from \"adviesbox-shared\";\n\nconst mapAlgemeen = createMapToUi(algemeenSchema).from<Berekeningen>({\n huurstijgingPercentage: v => v.algemeen.huurstijgingPercentage,\n indexatieWaardePandPercentage: v => v.algemeen.indexatieWaardePandPercentage,\n minderingOverwaardeGewensteHypotheek: v => v.algemeen.minderingOverwaardeGewensteHypotheek\n});\n\nconst mapHeffingskortingen = createMapToUi(heffingskortingenSchema).from<Berekeningen>({\n algemeneHeffingskorting: v => v.heffingskortingen.algemeneHeffingskorting,\n arbeidskorting: v => v.heffingskortingen.arbeidskorting,\n inkomensafhankelijkeCombinatiekorting: v => v.heffingskortingen.inkomensafhankelijkeCombinatiekorting,\n ouderenkorting: v => v.heffingskortingen.ouderenkorting,\n alleenstaandeOuderenkorting: v => v.heffingskortingen.alleenstaandeOuderenkorting,\n werkbonus: v => v.heffingskortingen.werkbonus,\n kindgebondenBudget: v => v.heffingskortingen.kindgebondenBudget\n});\n\nconst mapScenarios = createMapToUi(scenariosSchema).from<Berekeningen>({\n ingangsdatumScenarios: v =>\n v.scenarios.ingangsdatumScenarios ? convertUtcToTimeZone(v.scenarios.ingangsdatumScenarios)?.toLocalDate() : null,\n lengteOverzichtInJaren: v => v.scenarios.lengteOverzichtInJaren,\n eindleeftijdScenarios: v => v.scenarios.eindleeftijdScenarios,\n rekenrenteContanteWaardePercentage: v => v.scenarios.rekenrenteContanteWaardePercentage,\n controleNbi: v => v.scenarios.controleNbi || ControleNbiOptions.HuidigeSituatie\n});\n\nfunction dl2ui(values: Berekeningen): BerekeningenState {\n const berekeningen = {\n algemeen: mapAlgemeen(values),\n heffingskortingen: mapHeffingskortingen(values),\n scenarios: mapScenarios(values)\n };\n\n return berekeningenSchema.cast(berekeningen);\n}\n\nexport function mapberekeningenDlToUi(data: BerekeningenOutput): BerekeningenState | null {\n const berekeningen = data && data?.berekeningen ? data.berekeningen : null;\n\n if (!berekeningen) {\n return null;\n }\n\n return dl2ui(berekeningen);\n}\n\nexport const mapberekeningenUiToDl = createMapToDl(berekeningenSchema).to<Berekeningen>({\n algemeen: v => ({\n huurstijgingPercentage: v.algemeen.huurstijgingPercentage,\n indexatieWaardePandPercentage: v.algemeen.indexatieWaardePandPercentage,\n minderingOverwaardeGewensteHypotheek: v.algemeen.minderingOverwaardeGewensteHypotheek\n }),\n heffingskortingen: v => ({\n algemeneHeffingskorting: v.heffingskortingen.algemeneHeffingskorting,\n arbeidskorting: v.heffingskortingen.arbeidskorting,\n inkomensafhankelijkeCombinatiekorting: v.heffingskortingen.inkomensafhankelijkeCombinatiekorting,\n ouderenkorting: v.heffingskortingen.ouderenkorting,\n alleenstaandeOuderenkorting: v.heffingskortingen.alleenstaandeOuderenkorting,\n werkbonus: v.heffingskortingen.werkbonus,\n kindgebondenBudget: v.heffingskortingen.kindgebondenBudget\n }),\n scenarios: v => ({\n ingangsdatumScenarios: \"\",\n eindleeftijdScenarios: v.scenarios.eindleeftijdScenarios,\n controleNbi: v.scenarios.controleNbi,\n lengteOverzichtInJaren: v.scenarios.lengteOverzichtInJaren,\n rekenrenteContanteWaardePercentage: v.scenarios.rekenrenteContanteWaardePercentage\n })\n});\n\nexport function mapDlTargetToberekeningenUiField(target: string): UiName | null {\n const map: FieldMap<any> = {};\n\n return target2field(map, target);\n}\n","import React, { ReactElement } from \"react\";\nimport { connect } from \"formik\";\nimport { LabeledBevestigingInput, LabeledPercentageInput } from \"adviesbox-shared\";\nimport { BerekeningenState } from \"../infra\";\nimport { getBerekeningenTextResources } from \"../infra/berekeningen-resources\";\n\nconst Algemeen = (): ReactElement => {\n return (\n <div>\n <LabeledPercentageInput\n caption=\"Huurstijging per jaar\"\n name=\"algemeen.huurstijgingPercentage\"\n decimalen={2}\n ></LabeledPercentageInput>\n\n <LabeledPercentageInput\n caption=\"Indexatie waarde pand per jaar\"\n name=\"algemeen.indexatieWaardePandPercentage\"\n decimalen={2}\n tooltip={getBerekeningenTextResources(\"TooltipIndexatieWaardePandPercentage\")}\n ></LabeledPercentageInput>\n\n <LabeledBevestigingInput\n caption=\"Mindering overwaarde op de gewenste hypotheek\"\n name=\"algemeen.minderingOverwaardeGewensteHypotheek\"\n tooltip={getBerekeningenTextResources(\"TooltipminderingOverwaardeGewensteHypotheek\")}\n />\n </div>\n );\n};\n\nexport default connect<{}, BerekeningenState>(Algemeen);\n","import React, { ReactElement } from \"react\";\nimport { connect } from \"formik\";\nimport { CheckBox } from \"adviesbox-shared\";\nimport { BerekeningenState } from \"../infra\";\n\nconst Heffingskortingen = (): ReactElement => {\n return (\n <div className=\"p-3\">\n <p>Hieronder zijn de heffingskortingen voor de fiscale berekeningen in te stellen.</p>\n <>\n <CheckBox\n caption=\"Algemene heffingskortingen\"\n name=\"heffingskortingen.algemeneHeffingskorting\"\n disabled={true}\n ></CheckBox>\n <CheckBox caption=\"Arbeidskorting\" name=\"heffingskortingen.arbeidskorting\"></CheckBox>\n <CheckBox\n caption=\"Inkomensafhankelijke combinatiekorting\"\n name=\"heffingskortingen.inkomensafhankelijkeCombinatiekorting\"\n ></CheckBox>\n <CheckBox caption=\"Ouderenkorting\" name=\"heffingskortingen.ouderenkorting\"></CheckBox>\n <CheckBox\n caption=\"Alleenstaande ouderenkorting\"\n name=\"heffingskortingen.alleenstaandeOuderenkorting\"\n ></CheckBox>\n <CheckBox caption=\"Werkbonus\" name=\"heffingskortingen.werkbonus\"></CheckBox>\n <CheckBox caption=\"Kindgebonden budget\" name=\"heffingskortingen.kindgebondenBudget\"></CheckBox>\n </>\n </div>\n );\n};\n\nexport default connect<{}, BerekeningenState>(Heffingskortingen);\n","import React, { ReactElement } from \"react\";\nimport { connect } from \"formik\";\nimport { LabeledRadioInput, LabeledDateInput, LabeledNumberInput, LabeledPercentageInput } from \"adviesbox-shared\";\nimport { BerekeningenState } from \"../infra\";\nimport { ControleNbiOptions } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { getBerekeningenTextResources } from \"../infra/berekeningen-resources\";\n\nconst Scenarios = (): ReactElement => {\n return (\n <div>\n <LabeledDateInput\n caption=\"Ingangsdatum scenario's\"\n name=\"scenarios.ingangsdatumScenarios\"\n readonly={true}\n tooltip={getBerekeningenTextResources(\"TooltipIngangsdatumScenarios\")}\n ></LabeledDateInput>\n\n <LabeledNumberInput\n caption=\"Lengte van het overzicht in jaren\"\n name=\"scenarios.lengteOverzichtInJaren\"\n appendChildren={<span>Jaar</span>}\n ></LabeledNumberInput>\n\n <LabeledNumberInput\n caption=\"Eindleeftijd scenario's\"\n name=\"scenarios.eindleeftijdScenarios\"\n appendChildren={<span>Jaar</span>}\n ></LabeledNumberInput>\n\n <LabeledPercentageInput\n caption=\"Rekenrente contante waarde\"\n name=\"scenarios.rekenrenteContanteWaardePercentage\"\n tooltip={getBerekeningenTextResources(\"TooltiprekenrenteContanteWaardePercentage\")}\n decimalen={2}\n ></LabeledPercentageInput>\n\n <LabeledRadioInput\n caption=\"Controle netto besteedbaar inkomen o.b.v\"\n name=\"scenarios.controleNbi\"\n tooltip={getBerekeningenTextResources(\"TooltipcontroleNbi\")}\n options={[\n {\n label: \"Huidige situatie\",\n value: ControleNbiOptions.HuidigeSituatie\n },\n {\n label: \"Situatie na advies\",\n value: ControleNbiOptions.SituatieNaAdvies\n }\n ]}\n ></LabeledRadioInput>\n </div>\n );\n};\n\nexport default connect<{}, BerekeningenState>(Scenarios);\n","import React, { ReactElement, useContext } from \"react\";\nimport { FormikProps, Form } from \"formik\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { Card, CardWrapper, PlatformFoutenSamenvatting } from \"adviesbox-shared\";\nimport { getBerekeningenTextResources } from \"./infra/berekeningen-resources\";\n\nimport { berekeningenSchema, BerekeningenProps, BerekeningenState } from \"./infra\";\nimport Algemeen from \"./algemeen/algemeen\";\nimport Heffingskortingen from \"./heffingskortingen/heffingskortingen\";\nimport Scenarios from \"./scenarios/scenarios\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { AutorisatieNiveauManager } from \"../autorisatieniveau-manager/autorisatieniveau-manager\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Berekeningen = (props: FormikProps<BerekeningenState> & WithSaveData<BerekeningenState>): ReactElement => {\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n return (\n <Form>\n <PlatformFoutenSamenvatting />\n <fieldset\n disabled={!(isBeheerder || autorisatieNiveau.berekeningenNiveau === InstellingNiveauOptions.Medewerker)}\n >\n <CardWrapper className=\"px-3\">\n <div className=\"text-container\">\n <div className={\"p-2\"}>\n <h2 className=\"p-0\">Berekeningen </h2>\n <AutorisatieNiveauManager manageFor={autorisatieNiveau.berekeningenNiveau} />\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n </div>\n </div>\n </CardWrapper>\n <CardWrapper className=\"px-3\">\n <Card title=\"Algemeen\">\n <Algemeen />\n </Card>\n <Card title=\"Scenario's\">\n <Scenarios />\n </Card>\n <Card title=\"Heffingskortingen\" tooltip={getBerekeningenTextResources(\"TooltipHeffingskortingen\")}>\n <Heffingskortingen />\n </Card>\n </CardWrapper>\n </fieldset>\n\n {/* istanbul ignore next */\n process.env.NODE_ENV === \"development\" && <Debug />}\n </Form>\n );\n};\n\nBerekeningen.displayName = \"berekeningen\";\n\nexport default withAdviesboxFormik<BerekeningenProps & WithSaveData<BerekeningenState>, BerekeningenState>({\n // Transform outer props into form values\n mapPropsToValues: (e: BerekeningenProps): BerekeningenState => e,\n validationSchema: berekeningenSchema\n})(Berekeningen);\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport Berekeningen from \"./berekeningen\";\nimport { mapberekeningenDlToUi, mapberekeningenUiToDl, mapDlTargetToberekeningenUiField } from \"./infra\";\n\nconst BerekeningenAjax = (): ReactElement => {\n // TODO: replace useRequestInit/useAbortableFetch with useAdviesboxData\n\n const { params, requestInit, settings, user } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/Berekeningen`;\n const { loading, error, data } = useAbortableFetch<any>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapberekeningenDlToUi(data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <Berekeningen\n saveData={saveData(\n user,\n params.vestiging ?? \"\",\n url,\n settings.OcpApimSubscriptionKey,\n mapberekeningenUiToDl,\n mapDlTargetToberekeningenUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nBerekeningenAjax.displayName = \"berekeningenAjax\";\n\nexport default withErrorBoundary(BerekeningenAjax);\n","import { logErrorToApplicationInsights, PlatformData, SettingsType } from \"adviesbox-shared\";\nimport { FormikContextType } from \"formik\";\nimport { User } from \"oidc-client\";\nimport { DocumentenState } from \"./infra/documenten-schema\";\nexport const uploadFotoVanVoorbladApi = async (\n settings: SettingsType,\n user: User | null,\n vestigingId: string,\n body: FormData,\n formik: FormikContextType<DocumentenState>\n): Promise<boolean> => {\n const url = `${settings.instellingenFormsOrigin}/Documenten/VoorbladAfbeelding`;\n\n try {\n const rsp = await fetch(url, {\n method: \"POST\",\n body,\n headers: {\n Accept: \"*/*\",\n \"Ocp-Apim-Subscription-Key\": settings.OcpApimSubscriptionKey,\n authorization: `${user?.token_type} ${user?.access_token}`,\n vestigingId\n }\n });\n\n formik.setFieldValue(\"platformApiFouten\", null);\n\n if (!rsp.ok) {\n /* istanbul ignore next*/\n formik.setFieldValue(\"platformApiFouten\", [\n {\n field: \"\",\n label: \"Op te nemen foto\",\n error: \"Fout bij aanroep van web-api\"\n }\n ]);\n\n throw Error(\"Fout bij aanroep VoorbladAfbeelding\");\n }\n\n return true;\n } catch (error) {\n formik.setFieldValue(\"platformApiFouten\", [\n {\n field: \"\",\n label: \"Op te nemen foto\",\n error: \"Fout bij aanroep van web-api\"\n }\n ]);\n\n throw error;\n }\n};\n\nexport const getBlobUrlApi = async (\n settings: SettingsType,\n user: User | null,\n vestigingId: string,\n setVoorblad?: React.Dispatch<React.SetStateAction<string | null>>\n): Promise<string | null> => {\n try {\n const url = `${settings.instellingenFormsOrigin}/Documenten/VoorbladAfbeelding`;\n const rsp = await fetch(url, {\n method: \"GET\",\n headers: {\n authorization: `${user?.token_type} ${user?.access_token}`,\n \"Ocp-Apim-Subscription-Key\": settings.OcpApimSubscriptionKey,\n \"Content-Type\": \"application/json;charset=UTF-8\",\n vestigingId\n }\n });\n\n const result: PlatformData & { voorbladAfbeelding: { url: string } } = await rsp.json();\n\n if (!rsp.ok) {\n throw Error(`Fout bij aanroep van web-api '${url}'. Resultaat bevat geen JSON.`);\n }\n\n if (result.voorbladAfbeelding && result.voorbladAfbeelding.url) {\n setVoorblad && setVoorblad(result.voorbladAfbeelding.url);\n return result.voorbladAfbeelding.url;\n }\n\n return null;\n } catch (error) {\n logErrorToApplicationInsights(error as Error);\n }\n\n return null;\n};\n\nexport const deleteVoorbladApi = async (\n settings: SettingsType,\n user: User | null,\n vestigingId: string\n): Promise<void> => {\n try {\n const url = `${settings.instellingenFormsOrigin}/Documenten/VoorbladAfbeelding`;\n const rsp = await fetch(url, {\n method: \"DELETE\",\n headers: {\n authorization: `${user?.token_type} ${user?.access_token}`,\n \"Ocp-Apim-Subscription-Key\": settings.OcpApimSubscriptionKey,\n \"Content-Type\": \"application/json;charset=UTF-8\",\n vestigingId\n }\n });\n\n if (!rsp.ok || rsp.status !== 204) {\n throw Error(`Fout bij aanroep van web-api '${url}'. Resultaat bevat geen JSON.`);\n }\n } catch (error) {\n logErrorToApplicationInsights(error as Error);\n\n throw error;\n }\n};\n","import * as Yup from \"yup\";\n\n// If you want global module augmentation instead\n// declare module \"yup\" {\n// function enumeration<T>(e: T): Yup.MixedSchema<T[keyof T]>;\n// }\n// Yup.enumeration = <T>(e: T): Yup.MixedSchema<T[keyof T]> => {\n// return Yup.mixed<T[keyof T]>().oneOf(Object.values(e))\n// }\n\nexport function yupEnum<T>(e: T): Yup.MixedSchema<T[keyof T]> {\n return Yup.mixed<T[keyof T]>().oneOf(Object.values(e));\n}\n\nexport function yupNullableEnum<T>(e: T): Yup.MixedSchema<T[keyof T] | null> {\n return Yup.mixed<T[keyof T] | null>().oneOf([...Object.values(e), null]);\n}\n","import * as Yup from \"yup\";\nimport {\n TonenOpFormulierenOptions,\n WeergaveAdviseurnaamOptions,\n OverzichtTonenVanOptions,\n UitlijningOptions\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { WithSaveData } from \"../../shared/utils/save-data\";\nimport { yupEnum } from \"../../shared/utils/yup-enum\";\n\nexport const ondertekeningSchema = Yup.object({\n tonenOpFormulier: yupEnum(TonenOpFormulierenOptions).default(TonenOpFormulierenOptions.AdviseurnaamVanHoofdkantoor),\n weergaveAdviseurnaam: yupEnum(WeergaveAdviseurnaamOptions).default(WeergaveAdviseurnaamOptions.VoorlettersAchternaam),\n voorbeeldweergaveAdviseurnaam: Yup.string().default(\"A. de Adviseur\"),\n extraOndertekeningsregel: Yup.string().default(\"\")\n});\nexport type OndertekeningType = Yup.InferType<typeof ondertekeningSchema>;\n\nexport const instelingenOverzichtenSchema = Yup.object({\n bedrijfslogoTonenOpOverzichten: Yup.boolean().default(false),\n overzichtTonenVan: yupEnum(OverzichtTonenVanOptions).default(OverzichtTonenVanOptions.AlleJaren),\n toonGrafiekenBijScenarioOverzichten: Yup.boolean().default(true)\n});\nexport type InstelingenOverzichtenType = Yup.InferType<typeof instelingenOverzichtenSchema>;\n\nexport const instelingenVoorbladEnVervolgpaginasSchema = Yup.object({\n bedrijfslogoTonenOpVoorblad: Yup.boolean().default(true),\n uitlijningLogoOpVoorblad: yupEnum(UitlijningOptions).default(UitlijningOptions.Links),\n bedrijfsgegevensTonenOpVoorblad: Yup.boolean().default(true),\n uitlijningBedrijfsgegevensOpVoorblad: yupEnum(UitlijningOptions).default(UitlijningOptions.Links),\n bedrijfslogoOpVervolgpaginaSTonen: Yup.boolean().default(true),\n uitlijningBedrijfslogoOpVervolgpagina: yupEnum(UitlijningOptions).default(UitlijningOptions.Links)\n});\nexport type InstelingenVoorbladEnVervolgpaginasType = Yup.InferType<typeof instelingenVoorbladEnVervolgpaginasSchema>;\n\nexport const kolommenInDeLastenoverzichtenSchema = Yup.object({\n brutoInkomen: Yup.boolean(),\n somHypotheken: Yup.boolean(),\n waardeopbouw: Yup.boolean(),\n huur: Yup.boolean(),\n rente: Yup.boolean(),\n hypotheekAflossing: Yup.boolean(),\n uitkeringKapitaalverzekering: Yup.boolean(),\n verzekeringspremies: Yup.boolean(),\n spaarEnBeleggingsdepot: Yup.boolean(),\n opnameUitDepot: Yup.boolean(),\n kredietLast: Yup.boolean(),\n overigeUitgaven: Yup.boolean(),\n brutoLast: Yup.boolean(),\n fiscaalVoordeel: Yup.boolean(),\n vrh: Yup.boolean(),\n nettoLast: Yup.boolean()\n});\nexport type KolommenInDeLastenoverzichtenType = Yup.InferType<typeof kolommenInDeLastenoverzichtenSchema>;\n\nexport const kolommenInHetNettoBesteedbaarInkomenOverzichtSchema = Yup.object({\n hypotheek: Yup.boolean(),\n verzekeringen: Yup.boolean(),\n spaarEnBeleggingsdepots: Yup.boolean(),\n kredietLast: Yup.boolean(),\n overigeUitgeven: Yup.boolean(),\n totaleUitgaven: Yup.boolean(),\n brutoInkomen: Yup.boolean(),\n inkomstenbelasting: Yup.boolean(),\n vrh: Yup.boolean(),\n nettpOnkomsten: Yup.boolean(),\n nettoBesteedbaarInkomen: Yup.boolean()\n});\nexport type KolommenInHetNettoBesteedbaarInkomenOverzichtType = Yup.InferType<\n typeof kolommenInHetNettoBesteedbaarInkomenOverzichtSchema\n>;\n\nexport const documentenSchema = Yup.object({\n ondertekening: ondertekeningSchema,\n instelingenOverzichten: instelingenOverzichtenSchema,\n instelingenVoorbladEnVervolgpaginas: instelingenVoorbladEnVervolgpaginasSchema,\n afbeeldingVoorblad: Yup.string().nullable(),\n kolommenInDeLastenoverzichten: kolommenInDeLastenoverzichtenSchema,\n kolommenInHetNettoBesteedbaarInkomenOverzicht: kolommenInHetNettoBesteedbaarInkomenOverzichtSchema\n});\nexport type DocumentenState = Yup.InferType<typeof documentenSchema>;\nexport type DocumentenProps = Yup.InferType<typeof documentenSchema> & WithSaveData<DocumentenState>;\n","import React, { ReactElement } from \"react\";\nimport { LabeledBevestigingInput } from \"adviesbox-shared\";\n\ntype InstelingenOverzichtenProps = {};\nconst logoFunctionaliteitTonen = false;\n\n// const overzichtVanOptions: LabelValuePairs = [\n// { label: \"Alle jaren\", value: OverzichtTonenVanOptions.AlleJaren },\n// { label: \"Alleen jaren met wijzigingen\", value: OverzichtTonenVanOptions.AllenJarenMetWijzigingen }\n// ];\n\nexport const InstelingenOverzichten = (_props: InstelingenOverzichtenProps): ReactElement => {\n return (\n <>\n {logoFunctionaliteitTonen && (\n <LabeledBevestigingInput\n name=\"instelingenOverzichten.bedrijfslogoTonenOpOverzichten\"\n caption=\"Bedrijfslogo tonen op overzichten\"\n />)}\n {/* <LabeledSelectInput\n name=\"instelingenOverzichten.overzichtTonenVan\"\n caption=\"Overzicht tonen van\"\n options={overzichtVanOptions}\n /> */}\n <LabeledBevestigingInput\n name=\"instelingenOverzichten.toonGrafiekenBijScenarioOverzichten\"\n caption=\"Toon grafieken bij scenario overzichten\"\n />\n </>\n );\n};\n/* istanbul ignore else */ if (process.env.NODE_ENV !== \"production\")\n InstelingenOverzichten.displayName = \"InstelingenOverzichten\";\n","import React, { ReactElement } from \"react\";\n\nimport { LabeledBevestigingInput } from \"adviesbox-shared\";\n\ntype InstelingenVoorbladEnVervolgpaginasProps = {};\nconst logoFunctionaliteitTonen = false;\n\n// const uitlijningOptions: LabelValuePairs = [\n// { label: \"Links\", value: UitlijningOptions.Links },\n// { label: \"Rechts\", value: UitlijningOptions.Rechts },\n// { label: \"Midden\", value: UitlijningOptions.Midden }\n// ];\n\n// const uitlijningBedrijfsgegevensOpVoorbladOptions: LabelValuePairs = [\n// { label: \"Links\", value: UitlijningOptions.Links },\n// { label: \"Rechts\", value: UitlijningOptions.Rechts },\n// { label: \"Midden\", value: UitlijningOptions.Midden }\n// ];\n\n// const uitlijningBedrijfslogoOpVervolgpaginaOptions: LabelValuePairs = [\n// { label: \"Links\", value: UitlijningOptions.Links },\n// { label: \"Rechts\", value: UitlijningOptions.Rechts },\n// { label: \"Midden\", value: UitlijningOptions.Midden }\n// ];\n\nexport const InstelingenVoorbladEnVervolgpaginas = (_props: InstelingenVoorbladEnVervolgpaginasProps): ReactElement => {\n return (\n <>\n {logoFunctionaliteitTonen && ( \n <LabeledBevestigingInput\n name=\"instelingenVoorbladEnVervolgpaginas.bedrijfslogoTonenOpVoorblad\"\n caption=\"Bedrijfslogo tonen op voorblad\"\n />\n )}\n {/* <LabeledSelectInput\n name=\"instelingenVoorbladEnVervolgpaginas.uitlijningLogoOpVoorblad\"\n caption=\"Uitlijning logo op voorblad\"\n options={uitlijningOptions}\n /> */}\n <LabeledBevestigingInput\n name=\"instelingenVoorbladEnVervolgpaginas.bedrijfsgegevensTonenOpVoorblad\"\n caption=\"Bedrijfsgegevens tonen op voorblad\"\n />\n {/* <LabeledSelectInput\n name=\"instelingenVoorbladEnVervolgpaginas.uitlijningBedrijfsgegevensOpVoorblad\"\n caption=\"Uitlijning bedrijfsgegevens op voorblad\"\n options={uitlijningBedrijfsgegevensOpVoorbladOptions}\n /> */}\n {logoFunctionaliteitTonen && ( \n <LabeledBevestigingInput\n name=\"instelingenVoorbladEnVervolgpaginas.bedrijfslogoOpVervolgpaginaSTonen\"\n caption=\"Bedrijfslogo op vervolgpagina s tonen\"\n />\n )}\n {/* <LabeledSelectInput\n name=\"instelingenVoorbladEnVervolgpaginas.uitlijningBedrijfslogoOpVervolgpagina\"\n caption=\"Uitlijning bedrijfslogo op vervolgpagina\"\n options={uitlijningBedrijfslogoOpVervolgpaginaOptions}\n /> */}\n </>\n );\n};\n/* istanbul ignore else */ if (process.env.NODE_ENV !== \"production\")\n InstelingenVoorbladEnVervolgpaginas.displayName = \"InstelingenVoorbladEnVervolgpaginas\";\n","import React, { ReactElement } from \"react\";\n\nimport { CheckBox } from \"adviesbox-shared\";\n\ntype KolommenInDeLastenoverzichtenProps = {};\n\nexport const KolommenInDeLastenoverzichten = (_props: KolommenInDeLastenoverzichtenProps): ReactElement => {\n return (\n <>\n <p className=\"p-3\">\n Het aantal kolommen dat op de pagina past is afhankelijk van de afdrukstand. Bij de{\" \"}\n <span className=\"font-weight-bold text-danger\">staande</span> afdrukstand passen{\" \"}\n <span className=\"font-weight-bold text-danger\">maximaal 9 kolommen</span> op de pagina. In de{\" \"}\n <span className=\"font-weight-bold\">liggende</span> afdrukstand{\" \"}\n <span className=\"font-weight-bold\">maximaal 14 kolommen</span>. Kolommen met alleen maar nulwaarden worden niet\n getoond.\n </p>\n <CheckBox name=\"kolommenInDeLastenoverzichten.brutoInkomen\" caption=\"Bruto inkomen\" />\n <CheckBox name=\"kolommenInDeLastenoverzichten.somHypotheken\" caption=\"Som hypotheken\" />\n <CheckBox name=\"kolommenInDeLastenoverzichten.waardeopbouw\" caption=\"Waardeopbouw\" />\n <CheckBox name=\"kolommenInDeLastenoverzichten.huur\" caption=\"Huur\" />\n <CheckBox name=\"kolommenInDeLastenoverzichten.rente\" caption=\"Rente\" />\n <CheckBox name=\"kolommenInDeLastenoverzichten.hypotheekAflossing\" caption=\"Hypotheek aflossing\" />\n <CheckBox\n name=\"kolommenInDeLastenoverzichten.uitkeringKapitaalverzekering\"\n caption=\"Uitkering kapitaalverzekering\"\n />\n <CheckBox name=\"kolommenInDeLastenoverzichten.verzekeringspremies\" caption=\"Verzekeringspremies\" />\n <CheckBox name=\"kolommenInDeLastenoverzichten.spaarEnBeleggingsdepot\" caption=\"Spaar- en beleggingsdepot\" />\n <CheckBox name=\"kolommenInDeLastenoverzichten.opnameUitDepot\" caption=\"Opname uit depot\" />\n <CheckBox name=\"kolommenInDeLastenoverzichten.kredietLast\" caption=\"Krediet last\" />\n <CheckBox name=\"kolommenInDeLastenoverzichten.overigeUitgaven\" caption=\"Overige uitgaven\" />\n <CheckBox name=\"kolommenInDeLastenoverzichten.brutoLast\" caption=\"Bruto last\" />\n <CheckBox name=\"kolommenInDeLastenoverzichten.fiscaalVoordeel\" caption=\"Fiscaal voordeel\" />\n <CheckBox name=\"kolommenInDeLastenoverzichten.vrh\" caption=\"VRH\" />\n <CheckBox name=\"kolommenInDeLastenoverzichten.nettoLast\" caption=\"Netto last\" />\n </>\n );\n};\n/* istanbul ignore else */ if (process.env.NODE_ENV !== \"production\")\n KolommenInDeLastenoverzichten.displayName = \"KolommenInDeLastenoverzichten\";\n","import React, { ReactElement } from \"react\";\n\nimport { CheckBox } from \"adviesbox-shared\";\n\ntype KolommenInHetNettoBesteedbaarInkomenOverzichtProps = {};\n\nexport const KolommenInHetNettoBesteedbaarInkomenOverzicht = (\n _props: KolommenInHetNettoBesteedbaarInkomenOverzichtProps\n): ReactElement => {\n return (\n <>\n <p className=\"p-3\">\n Het aantal kolommen dat op de pagina past is afhankelijk van de afdrukstand. Bij de{\" \"}\n <span className=\"font-weight-bold\">staande</span> afdrukstand passen{\" \"}\n <span className=\"font-weight-bold\">maximaal 9 kolommen</span> op de pagina. Kolommen met alleen maar nulwaarden\n worden niet getoond.\n </p>\n <CheckBox name=\"kolommenInHetNettoBesteedbaarInkomenOverzicht.hypotheek\" caption=\"Hypotheek\" />\n <CheckBox name=\"kolommenInHetNettoBesteedbaarInkomenOverzicht.verzekeringen\" caption=\"Verzekeringen\" />\n <CheckBox\n name=\"kolommenInHetNettoBesteedbaarInkomenOverzicht.spaarEnBeleggingsdepots\"\n caption=\"Spaar- en beleggingsdepots\"\n />\n <CheckBox name=\"kolommenInHetNettoBesteedbaarInkomenOverzicht.kredietLast\" caption=\"Krediet last\" />\n <CheckBox name=\"kolommenInHetNettoBesteedbaarInkomenOverzicht.overigeUitgeven\" caption=\"Overige uitgaven\" />\n <CheckBox name=\"kolommenInHetNettoBesteedbaarInkomenOverzicht.totaleUitgaven\" caption=\"Totale uitgaven\" />\n <CheckBox name=\"kolommenInHetNettoBesteedbaarInkomenOverzicht.brutoInkomen\" caption=\"Bruto inkomen\" />\n <CheckBox name=\"kolommenInHetNettoBesteedbaarInkomenOverzicht.inkomstenbelasting\" caption=\"Inkomstenbelasting\" />\n <CheckBox name=\"kolommenInHetNettoBesteedbaarInkomenOverzicht.vrh\" caption=\"VRH\" />\n <CheckBox name=\"kolommenInHetNettoBesteedbaarInkomenOverzicht.nettpOnkomsten\" caption=\"Netto inkomsten\" />\n <CheckBox\n name=\"kolommenInHetNettoBesteedbaarInkomenOverzicht.nettoBesteedbaarInkomen\"\n caption=\"Netto besteedbaar inkomen\"\n />\n </>\n );\n};\n/* istanbul ignore else */ if (process.env.NODE_ENV !== \"production\")\n KolommenInHetNettoBesteedbaarInkomenOverzicht.displayName = \"KolommenInHetNettoBesteedbaarInkomenOverzicht\";\n","//----------------------\n// <auto-generated>\n// Generated using the NSwag toolchain v13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\n// </auto-generated>\n//----------------------\n\n/* tslint:disable */\n/* eslint-disable */\n// ReSharper disable InconsistentNaming\n\n\n\n/** De gegevens van een adres. */\nexport interface AdresInput {\n /** De straatnaam */\n straatnaam: string;\n /** Het huisnummer */\n huisnummer: string;\n /** Toevoeging op het huisnummer */\n toevoeging: string | null;\n /** De postcode */\n postcode: string;\n /** Land (identificatie) */\n landCode: string;\n /** Het land */\n land: string;\n /** De plaats */\n plaats: string;\n}\n\nexport interface BadRequestResult {\n statusCode: number;\n}\n\n/** Gegevens contactpersoon voor een kantoor */\nexport interface Contactpersoon {\n /** Voornaam. */\n voornaam: string | null;\n /** Voorletters. */\n voorletters: string;\n /** Tussenvoegsel. */\n tussenvoegsel: string | null;\n /** Achternaam. */\n achternaam: string;\n geslacht: Geslacht;\n /** E-mail adres. */\n emailadres: string;\n /** E-mail adres bevestiging. */\n emailadresBevestiging: string;\n /** Telefoonnummer. */\n telefoonnummer: string;\n}\n\n/** Het resultaat van een de vraag of een e-mailadres in gebruik is. */\nexport interface EmailInGebruikOutput {\n /** Indicatie dat het e-mailadres in gebruik is bij een medewerker. */\n inGebruik: boolean;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Adres voor factuur */\nexport interface FacturatieGegevens {\n terAttentieVan: string | null;\n straat: string | null;\n huisnummer: string | null;\n toevoeging: string | null;\n postcode: string | null;\n plaats: string | null;\n}\n\n/** Bevat gegevens van een gebruikersgroep. */\nexport interface Gebruikersgroep {\n /** Naam van de Gebruikersgroep */\n naam: string;\n /** Beschrijving van de gebruikersgroep */\n beschrijving: string | null;\n /** ID van de organisatie */\n organisatieId: string;\n /** Gekoppelde product onderdelen */\n productonderdelen: string[] | null;\n}\n\n/** Uitvoer van een lijst met gebruikersgroepen (incl. key). */\nexport interface GebruikersgroepenOutput {\n /** Lijst met gebruikersgroepen (incl. key) */\n gebruikersgroepen: { [key: string]: Gebruikersgroep; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Geslacht Man = 0, Vrouw = 1, Neutraal = 2 */\nexport enum Geslacht {\n Man = \"Man\",\n Vrouw = \"Vrouw\",\n Neutraal = \"Neutraal\",\n}\n\n/** Bevat gegevens van een HDN nodenummer. */\nexport interface HdnNodenummer {\n /** Nummer van de HDN node (kan voorloopnullen bevatten) */\n nodenummer: string;\n /** Indicatie dat het nodenummer geactiveerd is bij HDN */\n readonly geactiveerd: boolean | null;\n geldigVoor: HdnNodenummerGeldigVoorOptions;\n /** Vestigingen waarvoor het HDN nodenummer geldig is */\n vestigingen: HdnNodenummerVestiging[] | null;\n}\n\n/** HdnNodenummerGeldigVoorOptions Vestiging = 1, Organisatie = 2 */\nexport enum HdnNodenummerGeldigVoorOptions {\n Vestiging = \"Vestiging\",\n Organisatie = \"Organisatie\",\n}\n\n/** Bevat gegevens van een vestiging waarvoor een HDN nodenummer geldig is. */\nexport interface HdnNodenummerVestiging {\n /** Het Id van de vestiging. */\n vestigingId: string;\n /** De naam van de vestiging */\n readonly naam: string | null;\n}\n\n/** Bevat de output van het opvragen van HDN nodenummers. */\nexport interface HdnNodenummersOutput {\n /** Collectie met HDN nodenummers met bijbehorend ID */\n hdnNodenummers: { [key: string]: HdnNodenummer; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Ggevens betreffende een kantoor. */\nexport interface Kantoorgegevens {\n /** Naam Bedrijf */\n bedrijfsnaam: string;\n /** KVK nummer */\n kvkNummer: string;\n /** AFM Nummer */\n afmVergunningsnummer: string | null;\n /** De postcode */\n postcode: string;\n /** Het huisnummer */\n huisnummer: string;\n /** Toevoeging op het huisnummer */\n toevoeging: string | null;\n /** De straatnaam */\n straat: string;\n /** De plaats */\n plaats: string;\n /** Telefoonnummer */\n algemeenTelefoonnummer: string;\n /** Aantal af te nemen licenties */\n aantalLicenties: number;\n}\n\n/** KlantdossierRechtenOptions Geen = 0, AlleenLezen = 1, LezenEnSchrijven = 2 */\nexport enum KlantdossierRechtenOptions {\n Geen = \"Geen\",\n AlleenLezen = \"AlleenLezen\",\n LezenEnSchrijven = \"LezenEnSchrijven\",\n}\n\n/** Het resultaat van een de vraag of een KvK-nummer in gebruik is. */\nexport interface KvKnummerInGebruikOutput {\n /** Indicatie dat het KvK-nummer in gebruik is bij een organisatie met een actieve licentieovereenkomst */\n inGebruik: boolean;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Gegevens van een licentie. */\nexport interface Licentie {\n /** Unieke identificatie van de licentie binnen het platform. */\n platformId: string | null;\n /** ID van de gekoppelde medewerker */\n medewerkerId: string | null;\n /** ID van het gekoppelde productsamenstelling */\n productsamenstellingId: string;\n /** Naam van de productsamenstelling */\n productsamenstellingNaam: string | null;\n /** ID van de gekoppelde licentieovereenkomst */\n licentieovereenkomstId: string;\n}\n\n/** Gegevens van een licentieovereenkomst. */\nexport interface Licentieovereenkomst {\n /** Is de licentieovereenkomst geblokkeerd, buiten andere regels om (bv. bij wanbetaling) */\n isGeblokkeerd: boolean;\n /** Is de licentieovereenkomst actief */\n isActief: boolean;\n /** Begindatum van de overeenkomst */\n begindatum: string;\n /** Einddatum van de overeenkomst */\n einddatum: string | null;\n licentiesoort: LicentiesoortOpties;\n /** E-mail adres */\n emailFinancieelGemachtigde: string | null;\n /** ID van de gekoppelde organisatie */\n organisatieId: string;\n /** ID van het gekoppelde product */\n productId: string;\n /** Naam van het gekoppelde product */\n productNaam: string | null;\n /** Contractcode */\n contractId: string | null;\n /** Documenten behorende bij de overeenkomst */\n licentieovereenkomstDocumenten: { [key: string]: LicentieovereenkomstDocument; } | null;\n}\n\n/** Document behorende bij een licentieovereenkomst. */\nexport interface LicentieovereenkomstDocument {\n /** id van dit document */\n licentieovereenkomstDocumentId: string;\n /** De naam/titel van dit licentieovereenkomst document. */\n naam: string | null;\n /** De bestandsnaam. */\n bestandsnaam: string | null;\n /** Datum tijd van aanmaken document. */\n aanmaakDatumTijd: string;\n /** Naam van het bestand */\n url: string | null;\n}\n\n/** Output van licentieovereenkomsten. */\nexport interface LicentieovereenkomstenOutput {\n /** Collectie met licentieovereenkomsten. */\n licentieovereenkomsten: { [key: string]: Licentieovereenkomst; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Licentie gegevens van een productsamenstelling */\nexport interface LicentiesDetails {\n /** Id van de licentie */\n licentieId: string;\n /** Id van de medewerker */\n medewerkerId: string | null;\n medewerker: Medewerker | null;\n /** Opsomming van de vestigingen die aan de medewerker gekoppeld zijn */\n vestiging: string | null;\n /** Einddatum van de licentie */\n einddatum: string | null;\n}\n\n/** Uitvoer van een lijst met licentie gegevens van een productsamenstelling */\nexport interface LicentiesDetailsOutput {\n /** De lijst met lecentiegegevens van een productsamenstelling */\n productsamenstellingLicenties: { [key: string]: LicentiesDetails; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Gegevens van een licentie. */\nexport interface LicentiesOutput {\n /** Lijst met licenties en hun key */\n licenties: { [key: string]: Licentie; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** LicentiesoortOpties Betaald = 0, Proef = 1, Intern = 2 */\nexport enum LicentiesoortOpties {\n Betaald = \"Betaald\",\n Proef = \"Proef\",\n Intern = \"Intern\",\n}\n\n/** Bevat gegevens van een medewerker. */\nexport interface Medewerker {\n /** Voornaam */\n voornaam: string | null;\n /** Tussenvoegsels */\n tussenvoegsels: string | null;\n /** Achternaam */\n achternaam: string;\n /** Roepnaam */\n roepnaam: string | null;\n /** Voorletters */\n voorletters: string;\n geslacht: Geslacht;\n /** Telefoonnummer */\n telefoon: string | null;\n /** Telefoonnummer werk */\n telefoonWerk: string | null;\n /** Mobiele nummer */\n telefoonMobiel: string | null;\n /** E-mail adres */\n email: string;\n /** Functie */\n functie: string | null;\n /** PlatformId */\n platformId: string | null;\n /** Klantcode */\n klantId: string | null;\n /** Actief */\n isActief: boolean;\n klantdossierRechtenVestigingen: KlantdossierRechtenOptions | null;\n klantdossierRechtenOrganisatie: KlantdossierRechtenOptions | null;\n}\n\n/** Medewerker met vestigingen */\nexport interface MedewerkerEx {\n /** Vestigingen */\n vestigingen: string[] | null;\n /** Gebruikersgroepen */\n gebruikersgroepen: string[] | null;\n /** Productsamenstelling van de licentie */\n productsamenstellingId: string | null;\n /** Naam van de productsamenstelling */\n productsamenstelling: string | null;\n /** Voornaam */\n voornaam: string | null;\n /** Tussenvoegsels */\n tussenvoegsels: string | null;\n /** Achternaam */\n achternaam: string;\n /** Roepnaam */\n roepnaam: string | null;\n /** Voorletters */\n voorletters: string;\n geslacht: Geslacht;\n /** Telefoonnummer */\n telefoon: string | null;\n /** Telefoonnummer werk */\n telefoonWerk: string | null;\n /** Mobiele nummer */\n telefoonMobiel: string | null;\n /** E-mail adres */\n email: string;\n /** Functie */\n functie: string | null;\n /** PlatformId */\n platformId: string | null;\n /** Klantcode */\n klantId: string | null;\n /** Actief */\n isActief: boolean;\n klantdossierRechtenVestigingen: KlantdossierRechtenOptions | null;\n klantdossierRechtenOrganisatie: KlantdossierRechtenOptions | null;\n}\n\n/** Output voor MedewerkerEx */\nexport interface MedewerkerExOutput {\n /** Unieke identificatie van een medewerker */\n medewerkers: { [key: string]: MedewerkerEx; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Gegevens van een medewerker en de organisatie waaraan de medewerker gekoppeld is. */\nexport interface MedewerkerOrganisatieOutput {\n /** Unieke identificatie van de medewerker. */\n medewerkerId: string;\n medewerker: Medewerker | null;\n /** Unieke identificatie van de organisatie. */\n organisatieId: string;\n /** Naam van de organisatie. */\n readonly organisatieNaam: string | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Output voor Medewerker */\nexport interface MedewerkerOutput {\n /** Unieke identificatie van een medewerker */\n medewerkers: { [key: string]: Medewerker; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface NewOutput {\n id: string | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Gegevens van een organisatie. */\nexport interface Organisatie {\n /** Naam van de organisatie */\n naam: string;\n /** Unieke identificatie van de organisatie binnen het platform */\n platformId: string | null;\n /** Het KvK-nummer van de organisatie */\n kvKnummer: string | null;\n /** Logo van de organisatie */\n logo: string | null;\n /** IBAN voor incasso */\n iban: string | null;\n /** Het Id van de organisatie. */\n organisatieId: string;\n}\n\n/** Organisatie en vestiging voor het toevoegen van een nieuwe organisatie (met hoofdvestiging). */\nexport interface OrganisatieEx {\n vestiging: Vestiging | null;\n /** Licentieovereenkomsten */\n licentieovereenkomsten: Licentieovereenkomst[] | null;\n /** Naam van de organisatie */\n naam: string;\n /** Unieke identificatie van de organisatie binnen het platform */\n platformId: string | null;\n /** Het KvK-nummer van de organisatie */\n kvKnummer: string | null;\n /** Logo van de organisatie */\n logo: string | null;\n /** IBAN voor incasso */\n iban: string | null;\n /** Het Id van de organisatie. */\n organisatieId: string;\n}\n\n/** Bevat de output van het opvragen van (extended) organisaties. */\nexport interface OrganisatiesExOutput {\n /** Lijst met organisaties en hun key */\n organisaties: { [key: string]: OrganisatieEx; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de output van het opvragen van organisaties. */\nexport interface OrganisatiesOutput {\n /** Lijst met organisaties en hun key */\n organisaties: { [key: string]: Organisatie; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Gegevens van een product. */\nexport interface Product {\n /** Naam van het product */\n naam: string;\n /** Code van het product */\n code: string;\n /** Unieke identificatie van het product binnen het platform */\n platformId: string | null;\n /** Status (Actief, Niet actief) */\n isActief: boolean;\n /** Indien 'false' mag het product niet getoond worden in het aanbod waar de gebruiker zelf zijn licentie kan bestellen */\n isOnlineBestelbaar: boolean;\n}\n\n/** Producten output. */\nexport interface ProductenOutput {\n /** Lijst met producten en hun key */\n producten: { [key: string]: Product; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Onderdeel van een product. */\nexport interface Productonderdeel {\n /** Naam van het productonderdeel. */\n naam: string;\n /** Code van het productonderdeel */\n code: string | null;\n /** Geeft aan of het productonderdeel actief is. */\n isActief: boolean;\n /** Geeft aan of het productonderdeel instelbaar is door de klant. */\n isInstelbaarDoorKlant: boolean;\n /** ID van het gekoppelde product */\n productId: string;\n /** Aantal gekoppelde gebruikersgroepen */\n aantalGekoppeldeGebruikersgroepen: number;\n}\n\n/** Uitvoer van een lijst met productonderdelen. */\nexport interface ProductonderdelenOutput {\n /** De lijst met productonderdelen */\n productOnderdelen: { [key: string]: Productonderdeel; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Complete gegevens van een productsamenstelling. */\nexport interface Productsamenstelling {\n /** Naam van de product samenstelling */\n naam: string | null;\n /** Code van de product samenstelling */\n code: string | null;\n /** Gekoppeld product */\n productId: string;\n /** Gekoppelde product onderdelen */\n productonderdelen: string[] | null;\n /** Aantal gekoppelde licenties */\n aantalGekoppeldeLicenties: number;\n /** Is de productsamenstelling actief? */\n isActief: boolean;\n}\n\n/** Uitvoer van een lijst met productsamenstellingen. */\nexport interface ProductsamenstellingenOutput {\n /** De lijst met productonderdelen. */\n productSamenstellingen: { [key: string]: Productsamenstelling; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Output voor het opvragen van rechten van een medewerker. */\nexport interface RechtenOutPut {\n /** De rechten van een medewerker */\n rechten: string[] | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** De gegevens van het registratiescherm. */\nexport interface RegistratieKantoor {\n kantoorgegevens: Kantoorgegevens;\n contactpersoon: Contactpersoon;\n facturatieGegevens: FacturatieGegevens | null;\n}\n\n/** Uitvoermodel van registratie kantoor. */\nexport interface RegistratieKantoorOutput {\n registratieKantoor: RegistratieKantoor | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat gegevens van een Subscription op de Service Bus Topic waarmee de trigger voor een Overeenkomst kan worden verkregen. */\nexport interface RegistreerkantoorSubscriptionOutput {\n /** Unieke ID van de overeenkomst (= naam van Topic Subscription) */\n organisatieId: string;\n /** SAS-token waarmee lees-rechten voor de Topic Subscription verkregen worden */\n readonly sasToken: string | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de inhoud van het registratie-form. */\nexport interface Registreren {\n organisatie: Organisatie | null;\n vestiging: Vestiging | null;\n medewerker: Medewerker | null;\n}\n\nexport interface ValidationResultModel {\n code: string | null;\n target: string | null;\n message: string | null;\n}\n\nexport interface ValidationResultsModel {\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface VersionInfo {\n naam: string | null;\n versie: string | null;\n auteur: string | null;\n copyright: string | null;\n opstartDatumTijd: string | null;\n}\n\n/** Gegevens van de vestiging. */\nexport interface Vestiging {\n /** De naam van de vestiging */\n naam: string;\n bezoekadres: AdresInput;\n postadres: AdresInput | null;\n /** Het e-mailadres van (de contactpersoon van) de vestiging */\n emailadres: string;\n /** Het telefoonnummer van de vestiging */\n telefoonnummer: string;\n /** Unieke identificatie van de vestiging binnen het platform */\n platformId: string | null;\n /** Het AFM-registratienummer */\n afmRegistratienummer: string;\n /** Geeft aan of dit de hoofdvestiging is */\n isHoofdvestiging: boolean;\n /** Geeft bijbehorende organisatieId aan */\n organisatieId: string | null;\n}\n\n/** De uitvoer van een opvraging van een lijst met vestigingen. */\nexport interface VestigingenOutput {\n /** De gevonden vestigingen */\n vestigingen: { [key: string]: Vestiging; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** ZoekcriteriumOptions Organisatienaam = 0, Postcode = 1, Plaats = 2, KvkNummer = 3 */\nexport enum ZoekcriteriumOptions {\n Organisatienaam = \"Organisatienaam\",\n Postcode = \"Postcode\",\n Plaats = \"Plaats\",\n KvkNummer = \"KvkNummer\",\n}\n\n/** Een zoekresultaat */\nexport interface Zoekresultaat {\n organisatie: Organisatie | null;\n hoofdvestiging: Vestiging | null;\n}\n\n/** Het resultaat van een zoekopdracht */\nexport interface ZoekresultaatOutput {\n /** De zoekresultaten */\n readonly zoekresultaten: Zoekresultaat[] | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Criterium waarop gezocht wordt */\nexport enum Soort {\n Organisatienaam = \"Organisatienaam\",\n Postcode = \"Postcode\",\n Plaats = \"Plaats\",\n KvkNummer = \"KvkNummer\",\n}","import { createContext } from \"react\";\nimport { Medewerker as M, Geslacht } from \"../.generated/licenties/licentiestypes\";\n\nexport interface Medewerker extends M {\n medewerkerId: string;\n organisatieId: string;\n}\n\n/* istanbul ignore next */\nexport const defaultUserDetails = {\n userDetails: {\n voornaam: \"\",\n tussenvoegsels: \"\",\n achternaam: \"\",\n roepnaam: null,\n voorletters: \"\",\n telefoon: null,\n geslacht: Geslacht.Man,\n telefoonWerk: null,\n telefoonMobiel: null,\n email: \"\",\n functie: null,\n platformId: null,\n klantId: null,\n isActief: false,\n klantdossierRechtenVestigingen: null,\n klantdossierRechtenOrganisatie: null,\n medewerkerId: \"\",\n organisatieId: \"\"\n } as Medewerker,\n setUserDetails: (_userDetails: Medewerker): void => {}\n};\n\nconst UserDetailsContext = createContext(defaultUserDetails);\n\nexport default UserDetailsContext;\n","import { LabeledRadioInput, LabeledSelectInput, LabeledText, LabeledTextInput } from \"adviesbox-shared\";\nimport { connect, FormikContextType } from \"formik\";\nimport React, { ReactElement, useContext } from \"react\";\nimport {\n TonenOpFormulierenOptions,\n WeergaveAdviseurnaamOptions\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { Geslacht } from \"../../.generated/licenties/licentiestypes\";\nimport { LabelValuePairs } from \"../../shared/types\";\nimport UserDetailsContext, { Medewerker } from \"../../user-details/user-details-context\";\nimport { DocumentenState } from \"../infra/documenten-schema\";\n\ntype OndertekeningProps = {};\n\nconst TonenOpFormulierenOptionsOptions: LabelValuePairs = [\n { label: \"Adviseurnaam van bijkantoor\", value: TonenOpFormulierenOptions.AdviseurnaamVanBijkantoor },\n {\n label: \"Adviseurnaam van hoofdkantoor\",\n value: TonenOpFormulierenOptions.AdviseurnaamVanHoofdkantoor\n }\n];\n\nconst WeergaveAdviseurnaamOptionsOptions: LabelValuePairs = [\n { label: \"Voorletters achternaam\", value: WeergaveAdviseurnaamOptions.VoorlettersAchternaam },\n { label: \"Titel achternaam\", value: WeergaveAdviseurnaamOptions.TitelAchternaam },\n {\n label: \"Titel voorletters achternaam\",\n value: WeergaveAdviseurnaamOptions.TitelVoorlettersAchternaam\n },\n {\n label: \"Voorletters voornamen achternaam\",\n value: WeergaveAdviseurnaamOptions.VoorlettersVoornamenAchternaam\n },\n { label: \"Voornamen achternaam\", value: WeergaveAdviseurnaamOptions.VoornamenAchternaam }\n];\n\nexport const trimSpaces = (txt: string): string => txt.replace(/^\\s+|\\s+$|\\s+(?=\\s)/g, \"\");\nexport const getNaamVolgensWeergave = (\n weergave: WeergaveAdviseurnaamOptions | null,\n userDetails: Medewerker\n): string => {\n const title =\n userDetails.geslacht === Geslacht.Man\n ? \"Dhr.\"\n : userDetails.geslacht === Geslacht.Vrouw\n ? \"Mevr.\"\n : \"\";\n if (weergave === WeergaveAdviseurnaamOptions.TitelAchternaam) return trimSpaces(`${title} ${userDetails.tussenvoegsels} ${userDetails.achternaam}`);\n if (weergave === WeergaveAdviseurnaamOptions.TitelVoorlettersAchternaam)\n return trimSpaces(`${title} ${userDetails.voorletters} ${userDetails.tussenvoegsels} ${userDetails.achternaam}`);\n if (weergave === WeergaveAdviseurnaamOptions.VoorlettersAchternaam)\n return trimSpaces(`${userDetails.voorletters} ${userDetails.tussenvoegsels} ${userDetails.achternaam}`);\n if (weergave === WeergaveAdviseurnaamOptions.VoorlettersVoornamenAchternaam)\n return trimSpaces(`${userDetails.voorletters} ${userDetails.voornaam} ${userDetails.tussenvoegsels} ${userDetails.achternaam}`);\n if (weergave === WeergaveAdviseurnaamOptions.VoornamenAchternaam)\n return trimSpaces(`${userDetails.voornaam} ${userDetails.tussenvoegsels} ${userDetails.achternaam}`);\n return \"\";\n};\n\nconst Ondertekening = ({\n formik: { values }\n}: OndertekeningProps & {\n formik: FormikContextType<DocumentenState>;\n}): ReactElement => {\n const { userDetails } = useContext(UserDetailsContext);\n\n return (\n <>\n <LabeledRadioInput\n name=\"ondertekening.tonenOpFormulier\"\n caption=\"Tonen op formulier\"\n options={TonenOpFormulierenOptionsOptions}\n />\n <LabeledSelectInput\n name=\"ondertekening.weergaveAdviseurnaam\"\n caption=\"Weergave adviseurnaam\"\n options={WeergaveAdviseurnaamOptionsOptions}\n />\n <LabeledText\n name=\"ondertekening.voorbeeldweergaveAdviseurnaam\"\n caption=\"Voorbeeldweergave adviseurnaam\"\n value={getNaamVolgensWeergave(values.ondertekening.weergaveAdviseurnaam, userDetails)}\n fieldSize=\"no-size\"\n />\n <LabeledTextInput name=\"ondertekening.extraOndertekeningsregel\" caption=\"Extra ondertekeningsregel\" />\n </>\n );\n};\n/* istanbul ignore else */ if (process.env.NODE_ENV !== \"production\") Ondertekening.displayName = \"Ondertekening\";\n\nexport default connect<OndertekeningProps, DocumentenState>(Ondertekening);\n","import {\n Card,\n CardWrapper,\n FileUpload,\n FormFirstFocus,\n Icon,\n useRequestInit,\n PlatformFoutenSamenvatting,\n} from \"adviesbox-shared\";\nimport { Form, FormikProps, useFormikContext } from \"formik\";\nimport React, { ReactElement, useContext, useEffect, useRef } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport {\n deleteVoorbladApi,\n getBlobUrlApi,\n uploadFotoVanVoorbladApi,\n} from \"./documenten-afbeeldingvoorblad-api\";\nimport classes from \"./documenten.module.scss\";\nimport {\n DocumentenProps,\n documentenSchema,\n DocumentenState,\n} from \"./infra/documenten-schema\";\nimport { InstelingenOverzichten } from \"./instelingen-overzichten/instelingen-overzichten\";\nimport { InstelingenVoorbladEnVervolgpaginas } from \"./instelingen-voorblad-en-vervolgpaginas/instelingen-voorblad-en-vervolgpaginas\";\nimport { KolommenInDeLastenoverzichten } from \"./kolommen-in-de-lastenoverzichten/kolommen-in-de-lastenoverzichten\";\nimport { KolommenInHetNettoBesteedbaarInkomenOverzicht } from \"./kolommen-in-het-netto-besteedbaar-inkomen-overzicht/kolommen-in-het-netto-besteedbaar-inkomen-overzicht\";\nimport Ondertekening from \"./ondertekening/ondertekening\";\n\nconst DocumentenComponent = (\n props: FormikProps<DocumentenState> & DocumentenProps\n): ReactElement => {\n const filesRef = useRef<File[]>([]);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { settings, params, user } = useRequestInit<{ vestiging: string }>();\n const formik = useFormikContext<DocumentenState>();\n const imgRef = useRef<HTMLImageElement | null>(null);\n const [voorblad, setVoorblad] = React.useState<string | null>(null);\n const logoFunctionaliteitTonen = false;\n\n useEffect(() => {\n /* eslint-disable-next-line @typescript-eslint/no-floating-promises */\n getBlobUrlApi(settings, user, params.vestiging, setVoorblad);\n }, [settings, user, params.vestiging, props.setFieldValue]);\n\n return (\n <FormFirstFocus>\n <Form>\n <PlatformFoutenSamenvatting />\n\n <fieldset\n disabled={\n !(\n isBeheerder ||\n autorisatieNiveau.documentNiveau ===\n InstellingNiveauOptions.Medewerker\n )\n }\n >\n <CardWrapper className=\"px-3\">\n <div className=\"text-container\">\n <h2>Documenten</h2>\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n </div>\n </CardWrapper>\n\n <div className={classes.documenten_wrapper}>\n <CardWrapper>\n <Card title=\"Ondertekening\">\n <Ondertekening />\n </Card>\n <Card title=\"Instellingen overzichten\">\n <InstelingenOverzichten />\n </Card>\n <Card title=\"Instellingen voorblad en vervolgpagina's\">\n <InstelingenVoorbladEnVervolgpaginas />\n </Card>\n {/* todo:#66385 disabled until platform functionality is completed */}\n {logoFunctionaliteitTonen && (\n <Card title=\"Afbeelding voorblad\">\n <div className=\"p-3\">\n <p>\n Hier kan de afbeelding voor het voorblad toegevoegd\n worden. Als er geen afbeelding toegevoegd is dan zal het\n voorblad van het document geen plaatje bevatten. Let op;\n als er in het advies gekozen is voor een afbeelding van de\n woning op de voorkant zal deze de afbeelding van het\n voorblad overschrijven.\n </p>\n\n {/*istanbul ignore next*/ voorblad && (\n <div>\n <img\n ref={imgRef}\n onError={({ currentTarget }) => {\n currentTarget.onerror = null; // prevents looping\n currentTarget.style.display = \"none\";\n setVoorblad(null);\n }}\n data-testid=\"blob-image-voorblad\"\n src={voorblad}\n className={classes.voorblad}\n alt=\"Aan te kopen woning\"\n />\n {imgRef.current?.style.display !== \"none\" && (\n <Button\n data-testid=\"btn-verwijder-woning-foto\"\n id=\"btn-verwijder-woning-foto\"\n variant=\"outline-secondary\"\n onClick={async (\n event: React.MouseEvent<HTMLElement, MouseEvent>\n ): Promise<void> => {\n setVoorblad(null);\n await deleteVoorbladApi(\n settings,\n user,\n params.vestiging\n );\n event.stopPropagation();\n }}\n >\n <Icon name=\"prullenbak\" alt=\"Verwijderen\" />\n </Button>\n )}\n </div>\n )}\n\n {/*istanbul ignore next*/ !voorblad && (\n <FileUpload\n name={\"voorblad\"}\n title={\n <span className={\"font-weight-bold\"}>\n Sleep de afbeelding voor het voorblad in dit vak\n <br /> of\n <br />\n </span>\n }\n variant={\"Afbeeldingen\"}\n multipleFiles={false}\n updateRef={\n /*istanbul ignore next*/ async (f: File[]) => {\n const file = f[0];\n const formData = new FormData();\n formData.append(\n \"voorbladAfbeeldingBestand\",\n file ?? new Blob()\n );\n const uploadSuccess = await uploadFotoVanVoorbladApi(\n settings,\n user,\n params.vestiging,\n formData,\n formik\n );\n\n if (uploadSuccess) {\n const locatieFoto = await getBlobUrlApi(\n settings,\n user,\n params.vestiging\n );\n if (locatieFoto) {\n if (imgRef.current)\n imgRef.current.style.display = \"inherit\";\n setVoorblad(locatieFoto);\n }\n }\n }\n }\n filesref={filesRef}\n ></FileUpload>\n )}\n </div>\n </Card>\n )}\n </CardWrapper>\n </div>\n\n <div className={classes.documenten_wrapper}>\n <CardWrapper>\n <Card title=\"Kolommen in de lastenoverzichten\">\n <KolommenInDeLastenoverzichten />\n </Card>\n <Card title=\"Kolommen in het netto besteedbaar inkomen overzicht\">\n <KolommenInHetNettoBesteedbaarInkomenOverzicht />\n </Card>\n </CardWrapper>\n </div>\n </fieldset>\n <Debug />\n </Form>\n </FormFirstFocus>\n );\n};\n\nexport const Documenten = withAdviesboxFormik<\n DocumentenProps & WithSaveData<DocumentenState>,\n DocumentenState\n>({\n // Transform outer props into form values\n mapPropsToValues: (e: DocumentenProps): DocumentenState => e,\n validationSchema: documentenSchema,\n})(DocumentenComponent);\n/* istanbul ignore else */ if (process.env.NODE_ENV !== \"production\")\n Documenten.displayName = \"Documenten\";\n","/* istanbul ignore file*/\nimport { Documenten as DocumentenDlEntry } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { UiName, FieldMap } from \"../../shared/types\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\n\nexport function mapDlTargetToDocumentenUiField(target: string): UiName | null {\n const map: FieldMap<DocumentenDlEntry> = {};\n\n return target2field(map, target);\n}\n","import {\n Documenten as DocumentenDlEntry,\n DocumentenOutput as DocumentenDlOutput\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\nimport {\n documentenSchema,\n DocumentenState,\n instelingenOverzichtenSchema,\n instelingenVoorbladEnVervolgpaginasSchema,\n kolommenInDeLastenoverzichtenSchema,\n kolommenInHetNettoBesteedbaarInkomenOverzichtSchema,\n ondertekeningSchema\n} from \"./documenten-schema\";\n\nconst mapOndertekening = createMapToUi(ondertekeningSchema).from<DocumentenDlEntry>({\n tonenOpFormulier: v => v.ondertekening?.tonenOpFormulieren,\n weergaveAdviseurnaam: v => v.ondertekening?.weergaveAdviseurnaam,\n voorbeeldweergaveAdviseurnaam: v => null,\n extraOndertekeningsregel: v => v.ondertekening?.extraOndertekeningsregel\n});\n\nconst mapInstelingenOverzichten = createMapToUi(instelingenOverzichtenSchema).from<DocumentenDlEntry>({\n bedrijfslogoTonenOpOverzichten: v => v.overzichten?.bedrijfslogoOverzichtenTonen,\n overzichtTonenVan: v => v.overzichten?.overzichtTonenVan,\n toonGrafiekenBijScenarioOverzichten: v => v.overzichten?.toonGrafiekScenarioOverzicht\n});\n\nconst mapInstelingenVoorbladEnVervolgpaginas = createMapToUi(instelingenVoorbladEnVervolgpaginasSchema).from<\n DocumentenDlEntry\n>({\n bedrijfslogoTonenOpVoorblad: v => v.voorbladVervolgpaginas?.bedrijfslogoVoorbladTonen,\n uitlijningLogoOpVoorblad: v => v.voorbladVervolgpaginas?.uitlijningBedrijfslogoVoorblad,\n bedrijfsgegevensTonenOpVoorblad: v => v.voorbladVervolgpaginas?.bedrijfsgegevensVoorbladTonen,\n uitlijningBedrijfsgegevensOpVoorblad: v => v.voorbladVervolgpaginas?.uitlijningBedrijfsgegevensVoorblad,\n bedrijfslogoOpVervolgpaginaSTonen: v => v.voorbladVervolgpaginas?.bedrijfsgegevensVervolgpaginasTonen,\n uitlijningBedrijfslogoOpVervolgpagina: v => v.voorbladVervolgpaginas?.uitlijningBedrijfslogoVervolgpaginas\n});\n\nconst mapKolommenInDeLastenoverzichten = createMapToUi(kolommenInDeLastenoverzichtenSchema).from<DocumentenDlEntry>({\n brutoInkomen: v => v.lastenoverzichten?.brutoInkomen,\n somHypotheken: v => v.lastenoverzichten?.somHypotheken,\n waardeopbouw: v => v.lastenoverzichten?.waardeopbouw,\n huur: v => v.lastenoverzichten?.huur,\n rente: v => v.lastenoverzichten?.rente,\n hypotheekAflossing: v => v.lastenoverzichten?.hypotheekAflossing,\n uitkeringKapitaalverzekering: v => v.lastenoverzichten?.uitkeringKapitaalverzekeringen,\n verzekeringspremies: v => v.lastenoverzichten?.verzekeringspremies,\n spaarEnBeleggingsdepot: v => v.lastenoverzichten?.spaarEnBeleggingsdepot,\n opnameUitDepot: v => v.lastenoverzichten?.opnameUitDepot,\n kredietLast: v => v.lastenoverzichten?.kredietlast,\n overigeUitgaven: v => v.lastenoverzichten?.overigeUitgaven,\n brutoLast: v => v.lastenoverzichten?.brutoLast,\n fiscaalVoordeel: v => v.lastenoverzichten?.fiscaalVoordeel,\n vrh: v => v.lastenoverzichten?.vrh,\n nettoLast: v => v.lastenoverzichten?.nettoLast\n});\nconst mapKolommenInHetNettoBesteedbaarInkomenOverzicht = createMapToUi(\n kolommenInHetNettoBesteedbaarInkomenOverzichtSchema\n).from<DocumentenDlEntry>({\n hypotheek: v => v.nbiOverzicht?.hypotheek,\n verzekeringen: v => v.nbiOverzicht?.verzekeringen,\n spaarEnBeleggingsdepots: v => v.nbiOverzicht?.spaarEnBeleggingsdepots,\n kredietLast: v => v.nbiOverzicht?.kredietLast,\n overigeUitgeven: v => v.nbiOverzicht?.overigUitgaven,\n totaleUitgaven: v => v.nbiOverzicht?.totaleUitgaven,\n brutoInkomen: v => v.nbiOverzicht?.brutoInkomen,\n inkomstenbelasting: v => v.nbiOverzicht?.inkomstenbelasting,\n vrh: v => v.nbiOverzicht?.vrh,\n nettpOnkomsten: v => v.nbiOverzicht?.nettoInkomsten,\n nettoBesteedbaarInkomen: v => v.nbiOverzicht?.nbi\n});\n\nconst mapDocumenten = createMapToUi(documentenSchema).from<DocumentenDlEntry>({\n ondertekening: v => mapOndertekening(v),\n instelingenOverzichten: v => mapInstelingenOverzichten(v),\n instelingenVoorbladEnVervolgpaginas: v => mapInstelingenVoorbladEnVervolgpaginas(v),\n afbeeldingVoorblad: v => null, //todo: #66386\n kolommenInDeLastenoverzichten: v => mapKolommenInDeLastenoverzichten(v),\n kolommenInHetNettoBesteedbaarInkomenOverzicht: v => mapKolommenInHetNettoBesteedbaarInkomenOverzicht(v)\n});\n\nexport function mapDocumentenDlToUi(documentenId: string, data: DocumentenDlOutput): DocumentenState | null {\n const documenten = data && data.isValid && data.documenten ? data.documenten : null;\n\n if (documenten) {\n return mapDocumenten(documenten);\n }\n\n return null;\n}\n","import { Documenten as DocumentenDlEntry } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\nimport { documentenSchema } from \"./documenten-schema\";\n\nexport const mapDocumentenUiToDl = createMapToDl(documentenSchema).to<DocumentenDlEntry>({\n lastenoverzichten: v => ({\n brutoInkomen: v.kolommenInDeLastenoverzichten?.brutoInkomen,\n brutoLast: v.kolommenInDeLastenoverzichten?.brutoLast,\n fiscaalVoordeel: v.kolommenInDeLastenoverzichten?.fiscaalVoordeel,\n huur: v.kolommenInDeLastenoverzichten?.huur,\n hypotheekAflossing: v.kolommenInDeLastenoverzichten?.hypotheekAflossing,\n kredietlast: v.kolommenInDeLastenoverzichten?.kredietLast,\n nettoLast: v.kolommenInDeLastenoverzichten?.nettoLast,\n opnameUitDepot: v.kolommenInDeLastenoverzichten?.opnameUitDepot,\n overigeUitgaven: v.kolommenInDeLastenoverzichten?.overigeUitgaven,\n rente: v.kolommenInDeLastenoverzichten?.rente,\n somHypotheken: v.kolommenInDeLastenoverzichten?.somHypotheken,\n spaarEnBeleggingsdepot: v.kolommenInDeLastenoverzichten?.spaarEnBeleggingsdepot,\n uitkeringKapitaalverzekeringen: v.kolommenInDeLastenoverzichten?.uitkeringKapitaalverzekering,\n verzekeringspremies: v.kolommenInDeLastenoverzichten?.verzekeringspremies,\n vrh: v.kolommenInDeLastenoverzichten?.vrh,\n waardeopbouw: v.kolommenInDeLastenoverzichten?.waardeopbouw\n }),\n nbiOverzicht: v => ({\n brutoInkomen: v.kolommenInHetNettoBesteedbaarInkomenOverzicht?.brutoInkomen,\n hypotheek: v.kolommenInHetNettoBesteedbaarInkomenOverzicht?.hypotheek,\n inkomstenbelasting: v.kolommenInHetNettoBesteedbaarInkomenOverzicht?.inkomstenbelasting,\n kredietLast: v.kolommenInHetNettoBesteedbaarInkomenOverzicht?.kredietLast,\n nbi: v.kolommenInHetNettoBesteedbaarInkomenOverzicht?.nettoBesteedbaarInkomen,\n overigUitgaven: v.kolommenInHetNettoBesteedbaarInkomenOverzicht?.overigeUitgeven,\n spaarEnBeleggingsdepots: v.kolommenInHetNettoBesteedbaarInkomenOverzicht?.spaarEnBeleggingsdepots,\n totaleUitgaven: v.kolommenInHetNettoBesteedbaarInkomenOverzicht?.totaleUitgaven,\n verzekeringen: v.kolommenInHetNettoBesteedbaarInkomenOverzicht?.verzekeringen,\n vrh: v.kolommenInHetNettoBesteedbaarInkomenOverzicht?.vrh,\n nettoInkomsten: v.kolommenInHetNettoBesteedbaarInkomenOverzicht?.nettpOnkomsten\n }),\n ondertekening: v => ({\n extraOndertekeningsregel: v.ondertekening?.extraOndertekeningsregel,\n tonenOpFormulieren: v.ondertekening?.tonenOpFormulier,\n weergaveAdviseurnaam: v.ondertekening?.weergaveAdviseurnaam\n }),\n overzichten: v => ({\n bedrijfslogoOverzichtenTonen: v.instelingenOverzichten?.bedrijfslogoTonenOpOverzichten,\n overzichtTonenVan: v.instelingenOverzichten?.overzichtTonenVan,\n toonGrafiekScenarioOverzicht: v.instelingenOverzichten.toonGrafiekenBijScenarioOverzichten\n }),\n voorbladVervolgpaginas: v => ({\n bedrijfsgegevensVervolgpaginasTonen: v.instelingenVoorbladEnVervolgpaginas?.bedrijfslogoOpVervolgpaginaSTonen,\n bedrijfsgegevensVoorbladTonen: v.instelingenVoorbladEnVervolgpaginas?.bedrijfsgegevensTonenOpVoorblad,\n bedrijfslogoVoorbladTonen: v.instelingenVoorbladEnVervolgpaginas?.bedrijfslogoTonenOpVoorblad,\n uitlijningBedrijfslogoVervolgpaginas: v.instelingenVoorbladEnVervolgpaginas?.uitlijningBedrijfslogoOpVervolgpagina,\n uitlijningBedrijfsgegevensVoorblad: v.instelingenVoorbladEnVervolgpaginas?.uitlijningBedrijfsgegevensOpVoorblad,\n uitlijningBedrijfslogoVoorblad: v.instelingenVoorbladEnVervolgpaginas?.uitlijningLogoOpVoorblad\n })\n});\n","/* istanbul ignore file*/\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { DocumentenOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport { Documenten } from \"./documenten\";\nimport { mapDlTargetToDocumentenUiField } from \"./infra/map-documenten-dl-target-to-ui-field\";\nimport { mapDocumentenDlToUi } from \"./infra/map-documenten-dl-to-ui\";\nimport { mapDocumentenUiToDl } from \"./infra/map-documenten-ui-to-dl\";\n\nconst DocumentenAjaxComponent = (): ReactElement => {\n const { settings, user, params, requestInit } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/Documenten`;\n const { loading, error, data } = useAbortableFetch<DocumentenOutput>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapDocumentenDlToUi(\"\", data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <Documenten\n saveData={saveData(\n user,\n params.vestiging ?? \"\",\n url,\n settings.OcpApimSubscriptionKey,\n mapDocumentenUiToDl,\n mapDlTargetToDocumentenUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nexport const DocumentenAjax = withErrorBoundary(DocumentenAjaxComponent);\n/* istanbul ignore else */ if (process.env.NODE_ENV !== \"production\") DocumentenAjax.displayName = \"DocumentenAjax\";\n","/* istanbul ignore file */\n\nimport { useRequestInit, ForceRerenderContext } from \"adviesbox-shared\";\nimport { useContext, useEffect } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { Autorisatieniveau, AutorisatieniveauOutput } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { RouteParams } from \"../paramrouting/paramrouting-context\";\n\nexport type UseAutorisatieNiveauDataResult = {\n error: null | Error;\n data: Autorisatieniveau | null;\n loading: boolean;\n};\n\nexport const useAutorisatieNiveauData = (): UseAutorisatieNiveauDataResult => {\n const { requestInit, settings } = useRequestInit<RouteParams>();\n const url = `${settings.instellingenFormsOrigin}/Autorisatieniveau`;\n const loadingDone = useContext(ForceRerenderContext);\n const { loading, error, data } = useAbortableFetch<AutorisatieniveauOutput>(url, requestInit);\n\n useEffect((): void => {\n if (!loading && !!data && loadingDone) {\n loadingDone();\n }\n }, [loading, data, loadingDone]);\n\n if (typeof data === \"string\") {\n return { error: new Error(\"Fout bij het laden van instellingen-tarieven data\"), data: null, loading: false };\n }\n\n return { error, data: data ? data.autorisatieniveau : null, loading };\n};\n","import { MenuConfigType } from \"adviesbox-shared\";\nimport { Autorisatieniveau } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { RouteParams } from \"../shared/paramrouting/paramrouting-context\";\n\nconst hasAuthorization = (usageLevel?: string | null): boolean => {\n return usageLevel === \"Medewerker\";\n};\n\nexport const menuConfig = (\n menuInfo: Autorisatieniveau,\n params: RouteParams,\n isBeheerder: boolean\n): MenuConfigType[] => [\n {\n name: \"algemeen\",\n title: \"Algemeen\",\n lists: [\n {\n name: \"dev\",\n title: \"DEV menu\",\n icon: \"dev\",\n isAllowed: () => process.env.NODE_ENV === \"development\",\n items: []\n }, \n {\n name: \"autorisatieniveau\",\n title: \"Autorisatieniveau\",\n icon: \"menuautorisatieniveau\",\n link: `/vestiging/${params.vestiging}/autorisatieniveau`\n },\n {\n name: \"beheer-partijen\",\n title: \"Beheer partijen\",\n icon: \"menubeheerpartijen\",\n items: [\n {\n name: \"bankgarantie-instellingen\",\n title: \"Bankgarantieinstellingen\",\n link: `/vestiging/${params.vestiging}/bankgarantie-instellingen`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.bankgarantieInstellingenNiveau)\n },\n {\n name: \"geldverstrekkers\",\n title: \"Geldverstrekkers\",\n link: `/vestiging/${params.vestiging}/geldverstrekkers`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.geldverstrekkersNiveau)\n },\n {\n name: \"notarissen\",\n title: \"Notarissen\",\n link: `/vestiging/${params.vestiging}/notarissen`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.notarissenNiveau)\n },\n {\n name: \"serviceproviders\",\n title: \"Serviceproviders\",\n link: `/vestiging/${params.vestiging}/serviceproviders`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.serviceprovidersNiveau)\n },\n {\n name: \"software-koppelingen\",\n title: \"Software koppelingen\",\n link: `/vestiging/${params.vestiging}/software-koppelingen`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.softwareKoppelingenNiveau)\n },\n {\n name: \"taxatiebureaus\",\n title: \"Taxatiebureaus\",\n link: `/vestiging/${params.vestiging}/taxatiebureaus`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.taxatiebureausNiveau)\n },\n {\n name: \"vermogensbeheerders\",\n title: \"Vermogensbeheerders\",\n link: `/vestiging/${params.vestiging}/vermogensbeheerders`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.vermogensbeheerdersNiveau)\n },\n {\n name: \"verzekeraars\",\n title: \"Verzekeraars\",\n link: `/vestiging/${params.vestiging}/verzekeraars`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.verzekeraarsNiveau)\n }\n ]\n },\n\n // {/* niet opgenomen in AB v1*/\n {\n name: \"externe-koppelingen\",\n title: \"Externe koppelingen\",\n icon: \"menuexternekoppelingen\",\n items: [\n // {\n // name: \"generieke-koppelingen\",\n // title: \"Generieke koppelingen\",\n // link: `/vestiging/${params.vestiging}/generieke-koppelingen`,\n // isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.generiekeKoppelingenNiveau)\n // },\n // {\n // name: \"hdn\",\n // title: \"HDN\",\n // link: `/vestiging/${params.vestiging}/hdn`,\n // isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.hdnNiveau)\n // },\n // {\n // name: \"elements\",\n // title: \"Elements\",\n // link: `/vestiging/${params.vestiging}/elements`,\n // isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.elementsNiveau)\n // },\n //{\n // name: \"nationale-waarborg\",\n // title: \"Nationale Waarborg\",\n // link: `/vestiging/${params.vestiging}/extern/nationale-waarborg`,\n // isAllowed: () => true //() => isBeheerder || hasAuthorization(menuInfo?.nationaleHypotheekbondNiveau)\n //}\n ]\n },\n \n ]\n },\n {\n name: \"advies\",\n title: \"Advies\",\n lists: [\n {\n title: \"Voorkeuren\",\n name: \"voorkeuren\",\n icon: \"menuvoorkeuren\",\n items: [\n {\n title: \"Documenten\",\n name: \"documenten\",\n link: `/vestiging/${params.vestiging}/documenten`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.documentNiveau)\n },\n {\n title: \"Tarieven\",\n name: \"tarieven\",\n link: `/vestiging/${params.vestiging}/tarieven`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.tarievenNiveau)\n },\n {\n title: \"Berekeningen\",\n name: \"berekeningen\",\n link: `/vestiging/${params.vestiging}/berekeningen`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.berekeningenNiveau)\n },\n {\n title: \"Lastenoverzicht\",\n name: \"lastenoverzicht\",\n link: `/vestiging/${params.vestiging}/lastenoverzicht`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.lastenoverzichtenNiveau)\n },\n {\n title: \"Rapportage samenstellen\",\n name: \"rapportage-samenstellen\",\n link: `/vestiging/${params.vestiging}/rapportage-samenstellen`,\n isAllowed: () => isBeheerder //TODO: 60953 AutorisatieNiveau is missing for rapportage samenstellen\n }\n ]\n },\n {\n name: \"adviesinstellingen\",\n title: \"Adviesinstellingen\",\n icon: \"menuadviesinstellingen\",\n items: [\n {\n name: \"klantprofiel-en-motivering\",\n title: \"Klantprofiel en motivering\",\n link: `/vestiging/${params.vestiging}/klantprofiel-en-motivering`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.klantprofielMotiveringNiveau)\n },\n {\n name: \"adviesonderwerpen\",\n title: \"Adviesonderwerpen\",\n link: `/vestiging/${params.vestiging}/adviesonderwerpen`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.adviesonderwerpenNiveau)\n },\n {\n name: \"uitgangspunten-advies\",\n title: \"Uitgangspunten Advies\",\n link: `/vestiging/${params.vestiging}/uitgangspunten-advies`,\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.uitgangspuntenAdviesNiveau)\n }\n ]\n },\n {\n name: \"standaardteskten\",\n title: \"Standaardteksten\",\n icon: \"menustandaardteksten\",\n isAllowed: () => isBeheerder || hasAuthorization(menuInfo?.standaardTekstenNiveau),\n items: [\n {\n name: \"importeren-en-exporteren\",\n title: \"Importeren en exporteren\",\n link: `/vestiging/${params.vestiging}/standaardteksten/importeren-en-exporteren`\n },\n {\n name: \"standaardteksten-algemeen\",\n title: \"Algemeen\",\n link: `/vestiging/${params.vestiging}/standaardteksten/motivering/algemeen`\n },\n {\n name: \"standaardteksten-hypotheek\",\n title: \"Hypotheek\",\n items: [\n {\n name: \"standaardteksten-hypotheek-verduurzaming\",\n title: \"Verduurzaming\",\n link: `/vestiging/${params.vestiging}/standaardteksten/hypotheek/energie`\n },\n {\n name: \"standaardteksten-hypotheek-verantwoorde-woonlasten\",\n title: \"Verantwoorde woonlasten\",\n link: `/vestiging/${params.vestiging}/standaardteksten/hypotheek/verantwoordewoonlasten`\n },\n {\n name: \"standaardteksten-hypotheek-eigen-geld\",\n title: \"Eigen geld\",\n link: `/vestiging/${params.vestiging}/standaardteksten/hypotheek/inbrengeigengeld`\n },\n {\n name: \"standaardteksten-hypotheek-dubbele-woonlasten\",\n title: \"Dubbele woonlasten\",\n link: `/vestiging/${params.vestiging}/standaardteksten/hypotheek/dubbelewoonlasten`\n },\n {\n name: \"standaardteksten-hypotheek-fiscaal\",\n title: \"Fiscaal\",\n link: `/vestiging/${params.vestiging}/standaardteksten/hypotheek/fiscaleaftrek`\n },\n {\n name: \"standaardteksten-hypotheek-hypotheekvorm\",\n title: \"Hypotheekvorm\",\n link: `/vestiging/${params.vestiging}/standaardteksten/hypotheek/hypotheekaflossen`\n },\n {\n name: \"standaardteksten-hypotheek-rentevastperiode\",\n title: \"Rentevastperiode\",\n link: `/vestiging/${params.vestiging}/standaardteksten/hypotheek/rentevastperiode`\n },\n {\n name: \"standaardteksten-hypotheek-geldverstrekker\",\n title: \"Geldverstrekker\",\n link: `/vestiging/${params.vestiging}/standaardteksten/hypotheek/geldverstrekker`\n }\n ]\n },\n {\n name: \"standaardteksten-risicos\",\n title: \"Risico's\",\n items: [\n {\n name: \"standaardteksten-risicos-overlijden\",\n title: \"Overlijden\",\n link: `/vestiging/${params.vestiging}/standaardteksten/risicos/afdekkenoverlijdensrisico`\n },\n {\n name: \"standaardteksten-risicos-arbeidsongeschiktheid\",\n title: \"Arbeidsongeschiktheid\",\n link: `/vestiging/${params.vestiging}/standaardteksten/risicos/afdekkenaoww`\n },\n {\n name: \"standaardteksten-risicos-werkloosheid\",\n title: \"Werkloosheid\",\n link: `/vestiging/${params.vestiging}/standaardteksten/risicos/afdekkenww`\n },\n {\n name: \"standaardteksten-risicos-pensioen\",\n title: \"Pensioen\",\n link: `/vestiging/${params.vestiging}/standaardteksten/risicos/pensioenvoorziening`\n }\n ]\n },\n {\n name: \"standaardteksten-vermogensopbouw\",\n title: \"Vermogensopbouw\",\n items: [\n {\n name: \"standaardteksten-vermogensopbouw-opbouw-doelvermogen\",\n title: \"Opbouw Doelvermogen\",\n link: `/vestiging/${params.vestiging}/standaardteksten/vermogensopbouw/wijzeopbouwdoelvermogen`\n },\n {\n name: \"standaardteksten-vermogensopbouw-risicoprofiel\",\n title: \"Risicoprofiel\",\n link: `/vestiging/${params.vestiging}/standaardteksten/vermogensopbouw/risicoprofiel`\n }\n ]\n }\n ]\n }\n ]\n },\n {\n name: \"Exter\",\n title: \"extern\",\n lists:[\n {\n name: \"Adviesbox - lokale installatie\",\n title: \"Koppeling Adviesbox\",\n icon: \"menuautorisatieniveau\",\n link: `/vestiging/${params.vestiging}/koppeling`\n },\n ]\n }\n // Logboek momenteel nog niet bruikbaar\n // {\n // name: \"logboek\",\n // title: \"Logboek\",\n // lists: [\n // {\n // name: \"logboek\",\n // title: \"Logboek\",\n // icon: \"menulogboek\"\n // }\n // ]\n // }\n];\n","import { MenuWrapper } from \"adviesbox-shared\";\nimport { capitalize } from \"lodash\";\nimport React, { ReactElement, useContext, useEffect, useMemo } from \"react\";\nimport { RouteComponentProps, useParams, withRouter } from \"react-router-dom\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport brandLogoIcon from \"../assets/new-brand-logo.svg\";\nimport brandCollapsedLogoIcon from \"../assets/new-collapsed-brand-logo.svg\";\nimport { useAutorisatieNiveauData } from \"../shared/hooks/use-autorisatie-niveau-data\";\nimport { RouteParams } from \"../shared/paramrouting/paramrouting-context\";\nimport { getActivePageTitle } from \"../shared/utils/menu-info\";\nimport { AppDataContext } from \"./appdata-context\";\nimport { menuConfig } from \"./menu-config\";\n\ntype NavigationListProps = {\n collapsed: boolean;\n collapse(): void;\n isBeheerder: boolean;\n};\n\nconst NavigationList = ({\n collapsed,\n collapse,\n isBeheerder,\n history\n}: NavigationListProps & RouteComponentProps): ReactElement => {\n const { setAutorisatieNiveau, setIsBeheerder } = useContext(AutorisatieNiveauContext);\n const { setActivePage } = useContext(AppDataContext);\n\n const params = useParams<RouteParams>();\n\n const { data: menuInfo, loading } = useAutorisatieNiveauData();\n\n const config = useMemo(() => {\n if (menuInfo !== null) {\n return menuConfig(menuInfo, params, isBeheerder);\n }\n return [];\n }, [isBeheerder, menuInfo, params]);\n\n useEffect(() => {\n setIsBeheerder(isBeheerder);\n\n if (!menuInfo) {\n return;\n }\n setAutorisatieNiveau(menuInfo);\n\n setActivePage(capitalize(getActivePageTitle(config, window.location.pathname)));\n\n history.listen((location): void => {\n setActivePage(capitalize(getActivePageTitle(config, location.pathname)));\n });\n }, [menuInfo, setAutorisatieNiveau, setIsBeheerder, isBeheerder, history, params, setActivePage, config]);\n\n return (\n <MenuWrapper\n brandLogoIcon={brandLogoIcon}\n brandCollapsedLogoIcon={brandCollapsedLogoIcon}\n collapse={collapse}\n collapsed={collapsed}\n hasMenuInfo={!!menuInfo}\n loading={loading}\n menuConfig={config}\n appName={\"instellingen\"}\n />\n );\n};\n\nNavigationList.displayName = \"NavigationList\";\n\nexport default withRouter(NavigationList);\n","import React, { ReactElement, ReactNode, useState } from \"react\";\nimport { SubmitResultTypes } from \"../utils/save-validation\";\nimport { SaveFormData, SaveFormContext } from \"./save-form-contex\";\n\nconst setSaveFormProviderValue = (\n isSaving: boolean,\n saveResult: SubmitResultTypes | null,\n version: number,\n saveData: () => void,\n setIsSaving: (_v: boolean) => void,\n setSaveResult: (_v: SubmitResultTypes | null) => void\n): SaveFormData => ({\n isSaving,\n saveResult,\n version,\n saveData,\n setIsSaving,\n setSaveResult\n});\n\nexport const SaveFormProvider = ({ children }: { children: ReactNode }): ReactElement => {\n const [isSaving, setIsSaving] = useState(false);\n const [saveResult, setSaveResult] = useState<SubmitResultTypes | null>(null);\n const [version, setVersion] = useState(0)\n\n const internalSaveData = (): void => {\n setVersion(oldvalue => oldvalue + 1);\n }\n\n const val = setSaveFormProviderValue(\n isSaving,\n saveResult,\n version,\n () => internalSaveData(),\n setIsSaving,\n setSaveResult\n );\n return <SaveFormContext.Provider value={val} >{children}</SaveFormContext.Provider>;\n}","/* istanbul ignore file */\n\nimport { useRequestInit } from \"adviesbox-shared\";\nimport classnames from \"classnames\";\nimport React, { ReactElement, ReactNode, useContext, useEffect, useState } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { AppDataProvider } from \"../navigation/appdata-context\";\nimport NavigationList from \"../navigation/NavigationList\";\nimport {\n GebruikersgroepenOutput,\n MedewerkerOrganisatieOutput,\n VestigingenOutput\n} from \"../.generated/licenties/licentiestypes\";\nimport UserDetailsContext from \"../user-details/user-details-context\";\nimport VestigingenContext, { vestiging } from \"../vestigingen-context/vestigingen-context\";\nimport { SaveFormProvider } from \"../shared/save-form/save-form-provider\";\n\ntype DrawerProps = {\n children: ReactNode;\n};\n\nconst Drawer = (props: DrawerProps): ReactElement => {\n const { userDetails, setUserDetails } = useContext(UserDetailsContext);\n const { setVestigingen } = useContext(VestigingenContext);\n const { children } = props;\n const [collapsed, setcollapsed] = useState(false);\n const { requestInit, settings, user } = useRequestInit();\n\n if (!user) throw Error(\"user is not signed in\");\n const medewerkerUrl = `${settings.licentiesOrigin}/Medewerkers/current`;\n const medewerkerByEmail = useAbortableFetch<MedewerkerOrganisatieOutput>(medewerkerUrl, requestInit);\n const gebruiksGroepenUrl =\n medewerkerByEmail.data && typeof medewerkerByEmail.data !== \"string\" && medewerkerByEmail.data.medewerkerId\n ? `${settings.licentiesOrigin}/Medewerkers/${medewerkerByEmail.data.medewerkerId}/Gebruikersgroepen`\n : null;\n const vestigingenUrl =\n medewerkerByEmail.data && typeof medewerkerByEmail.data !== \"string\" && medewerkerByEmail.data.medewerkerId\n ? `${settings.licentiesOrigin}/medewerkers/${medewerkerByEmail.data?.medewerkerId}/vestigingen`\n : null;\n const gebruikersGroepen = useAbortableFetch<GebruikersgroepenOutput>(gebruiksGroepenUrl, requestInit);\n const vestigingen = useAbortableFetch<VestigingenOutput>(vestigingenUrl, requestInit);\n const isBeheerder =\n gebruikersGroepen.data &&\n typeof gebruikersGroepen.data !== \"string\" &&\n gebruikersGroepen.data.gebruikersgroepen &&\n gebruikersGroepen.data.isValid\n ? Object.values(gebruikersGroepen.data.gebruikersgroepen).some((groep): boolean => groep.naam === \"Beheerder\")\n : null;\n\n useEffect(() => {\n const medewerkerVestigingen =\n vestigingen.data && typeof vestigingen.data !== \"string\" && vestigingen.data.vestigingen\n ? Object.keys(vestigingen.data.vestigingen).map(key => {\n if (!vestigingen.data || typeof vestigingen.data === \"string\" || !vestigingen.data.vestigingen)\n throw Error(\"Found invalid data\");\n return {\n ...vestigingen.data.vestigingen[key],\n vestigingId: key\n };\n })\n : [];\n\n setVestigingen(medewerkerVestigingen as vestiging[]);\n }, [setVestigingen, vestigingen.data]);\n\n useEffect(() => {\n if (\n !medewerkerByEmail ||\n !medewerkerByEmail.data ||\n typeof medewerkerByEmail.data === \"string\" ||\n !medewerkerByEmail.data.organisatieId ||\n !medewerkerByEmail.data.medewerkerId ||\n !medewerkerByEmail.data.medewerker ||\n userDetails.medewerkerId === medewerkerByEmail.data.medewerkerId\n )\n return;\n\n setUserDetails({\n ...medewerkerByEmail.data.medewerker,\n medewerkerId: medewerkerByEmail.data.medewerkerId,\n organisatieId: medewerkerByEmail.data.organisatieId\n });\n });\n\n return (\n <div className=\"drawer-wrapper\">\n <SaveFormProvider>\n <AppDataProvider>\n <div className={classnames(\"drawer-panel\", { collapsed })}>\n <NavigationList\n isBeheerder={isBeheerder ?? false}\n collapsed={collapsed}\n collapse={(): void => setcollapsed(!collapsed)}\n />\n </div>\n <div className=\"drawer-content\">{children}</div>\n </AppDataProvider>\n </SaveFormProvider>\n </div>\n );\n};\n\nDrawer.displayName = \"Drawer\";\n\nexport default Drawer;\n","import { LocalDateTime } from \"@js-joda/core\";\nimport {\n BeschikbareHypotheekProductenType,\n BeschikbareProductenType,\n ProductFilterType\n} from \"adviesbox-shared/product-filters/filter-types\";\nimport {\n HypotheekvormBasis,\n KredietvormBasis,\n LijfrenteBasis,\n OrvBasis,\n ProductBasis,\n Vermogensvorm\n} from \"../../.generated/producten/productentypes\";\nexport type AlleMogelijkeProductBasisTypes =\n | HypotheekvormBasis\n | KredietvormBasis\n | LijfrenteBasis\n | OrvBasis\n | ProductBasis\n | Vermogensvorm;\n\nexport function isProductSupported(product: ProductFilterType): boolean {\n return (\n product.ondersteunenTot === undefined || LocalDateTime.parse(product.ondersteunenTot).isAfter(LocalDateTime.now())\n );\n}\n\n//Filter vanuit de hardcoded lijst in shared, deze word gemocked om huidige tests intact te houden\nexport const partijFilter = (\n product: AlleMogelijkeProductBasisTypes,\n filterList: BeschikbareHypotheekProductenType[] | BeschikbareProductenType[],\n geenProductenFilteren = false\n): boolean => {\n const hypotheek = filterList as BeschikbareHypotheekProductenType[];\n const producten = filterList as BeschikbareProductenType[];\n\n if (hypotheek[0].hypotheeklabels) {\n return (\n hypotheek.find(\n c =>\n c.code &&\n c.code === product.maatschappijCode &&\n c.actief &&\n isProductSupported(c) &&\n (geenProductenFilteren || c.hypotheeklabels.find(v => v.actief && String(v.code) === String(product.code)))\n ) !== undefined\n );\n } else if (producten[0].producten) {\n return (\n producten.find(\n k =>\n k.code === product.maatschappijCode &&\n k.actief &&\n isProductSupported(k) &&\n (geenProductenFilteren || k.producten.find(p => p.actief && p.code === product.code && isProductSupported(p)))\n ) !== undefined\n );\n }\n return false;\n};\n","import { InferType } from \"yup\";\nimport * as Yup from \"yup\";\n\nexport enum AanvraagType {\n Serviceprovider = \"Serviceprovider\",\n SoftwareKoppeling = \"SoftwareKoppeling\"\n}\n\nexport const hypotheekLabelSchema = Yup.object({\n code: Yup.number(),\n omschrijving: Yup.string().nullable(),\n hypotheekopties: Yup.array(\n Yup.object({\n code: Yup.number(),\n omschrijving: Yup.string().nullable(),\n toelichting: Yup.string().nullable(),\n geselecteerd: Yup.boolean(),\n optieGroep: Yup.number().nullable()\n })\n ).default([])\n});\n\nexport const beschikbareGeldverstrekkersPartijen = Yup.object({\n serviceproviderId: Yup.string().nullable(),\n softwareKoppelingId: Yup.string().nullable(),\n aanvraagNaar: Yup.string().default(\"\").nullable(),\n aanvullendeRetourwijze: Yup.string().nullable(),\n hypotheeklabels: Yup.array(hypotheekLabelSchema).default([]),\n code: Yup.string().nullable(),\n partijnaam: Yup.string().nullable(),\n actief: Yup.boolean(),\n agentnummer: Yup.string().nullable()\n});\n\nexport const beschikbareGeldverstrekkersServiceProviders = Yup.object({\n serviceproviderId: Yup.string(),\n naam: Yup.string().nullable()\n});\n\nexport const beschikbareSoftwareKoppelingen = Yup.object({\n softwareKoppelingId: Yup.string().default(\"\"),\n naam: Yup.string().nullable()\n});\n\nexport const beschikbareGeldverstrekkersSchema = Yup.object({\n partijen: Yup.array(beschikbareGeldverstrekkersPartijen).default([]),\n serviceProviders: Yup.array(beschikbareGeldverstrekkersServiceProviders).default([]),\n softwareKoppelingen: Yup.array(beschikbareSoftwareKoppelingen).default([])\n});\n\nexport const geldverstrekkersSchema = Yup.object({\n beschikbareGeldverstrekkers: beschikbareGeldverstrekkersSchema\n});\n\nexport type GeldverstrekkersState = InferType<typeof geldverstrekkersSchema>;\nexport type GeldverstrekkersProps = InferType<typeof geldverstrekkersSchema>;\n\nexport type BeschikbareGeldverstrekkersType = InferType<typeof beschikbareGeldverstrekkersSchema>;\n","import {\n geldverstrekkersSchema,\n GeldverstrekkersState,\n beschikbareGeldverstrekkersPartijen,\n hypotheekLabelSchema,\n beschikbareGeldverstrekkersServiceProviders,\n beschikbareSoftwareKoppelingen\n} from \"./geldverstrekkers-schema\";\nimport {\n GeldverstrekkersOutput,\n Geldverstrekkers,\n Hypotheeklabel,\n GeldverstrekkerPartij,\n ServiceproviderReadOnly,\n SoftwareKoppelingReadOnly\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\nimport { prefixWithZero } from \"../../shared/utils/helpers\";\n\nconst getAanvraagNaar = (geldverstrekkerPartij: GeldverstrekkerPartij): string | null => {\n if (geldverstrekkerPartij.serviceproviderId) return `Serviceprovider**${geldverstrekkerPartij.serviceproviderId}`\n else if (geldverstrekkerPartij.softwareKoppelingId) return `SoftwareKoppeling**${geldverstrekkerPartij.softwareKoppelingId}`\n return null;\n}\n\nconst mapHypotheekLabel = createMapToUi(hypotheekLabelSchema).from<Hypotheeklabel>({\n code: v => v.code,\n hypotheekopties: v => v.hypotheekopties,\n omschrijving: v => v.omschrijving\n});\n\nconst mapPartijen = createMapToUi(beschikbareGeldverstrekkersPartijen).from<GeldverstrekkerPartij>({\n aanvullendeRetourwijze: v => prefixWithZero(v.aanvullendeRetourwijze),\n actief: v => v.actief,\n agentnummer: v => v.agentnummer,\n code: v => v.code,\n hypotheeklabels: v => v.hypotheeklabels?.map(c => mapHypotheekLabel(c)),\n partijnaam: v => v.partijnaam,\n serviceproviderId: v => v.serviceproviderId,\n softwareKoppelingId: v => v.softwareKoppelingId,\n aanvraagNaar: v => getAanvraagNaar(v)\n});\n\nconst mapServiceProvider = createMapToUi(beschikbareGeldverstrekkersServiceProviders).from<ServiceproviderReadOnly>({\n naam: v => v.naam,\n serviceproviderId: v => v.serviceproviderId\n});\n\nconst mapSoftwareKoppeling = createMapToUi(beschikbareSoftwareKoppelingen).from<SoftwareKoppelingReadOnly>({\n naam: v => v.naam,\n softwareKoppelingId: v => v.softwareKoppelingId\n});\n\nconst mapGeldverstrekkers = createMapToUi(geldverstrekkersSchema).from<Geldverstrekkers>({\n beschikbareGeldverstrekkers: v => ({\n partijen: v.partijen?.map(c => mapPartijen(c)) || [],\n serviceProviders:\n v.serviceproviders\n ?.map(c => mapServiceProvider(c))\n .sort((a: any, b: any): number => {\n return new Intl.Collator([\"NL\"]).compare(a.naam || \"\", b.naam || \"\");\n }) || [],\n softwareKoppelingen:\n v.softwareKoppelingen\n ?.map(c => mapSoftwareKoppeling(c))\n .sort((a: any, b: any): number => {\n return new Intl.Collator([\"NL\"]).compare(a.naam || \"\", b.naam || \"\");\n }) || []\n })\n});\n\nfunction dl2ui(values: Geldverstrekkers): GeldverstrekkersState {\n const geldverstrekkers = mapGeldverstrekkers(values);\n\n return geldverstrekkersSchema.cast(geldverstrekkers);\n}\n\nexport function mapGeldverstrekkersDlToUi(data: GeldverstrekkersOutput | null): GeldverstrekkersState | null {\n const geldverstrekkers = data ? data.geldverstrekkers : null;\n\n if (!geldverstrekkers) {\n return null;\n }\n\n return dl2ui(geldverstrekkers);\n}\n","import { ErrorBoundaryContext, firstInputFocus } from \"adviesbox-shared\";\nimport classnames from \"classnames\";\nimport { FormikConsumer, getIn } from \"formik\";\nimport React, { ReactElement, ReactNode, useContext, useRef, useState } from \"react\";\nimport { Modal } from \"react-bootstrap\";\nimport classes from \"./ModalButton.module.scss\";\n\ntype ModalButtonProps = {\n content: ReactNode;\n children: ReactElement<any, any>;\n size?: \"sm\" | \"lg\";\n parent: string;\n disabled?: boolean;\n render?: boolean;\n validate?: boolean;\n modalIndex?: number;\n className?: string;\n};\n\nconst ModalButton = ({\n content,\n parent,\n children,\n size,\n disabled,\n render = true,\n modalIndex,\n className = \"btn-outline-secondary\",\n validate = true,\n ...props\n}: ModalButtonProps): ReactElement => {\n const [isModalOpen, setModalOpen] = useState(false);\n const appHasError = useContext(ErrorBoundaryContext).error ? true : false;\n const dialog = useRef<HTMLDivElement | null>(null);\n const onMobile = /Android|Tablet|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\n return render ? (\n <FormikConsumer>\n {({ errors, values }): ReactElement => {\n const hasError = !!getIn(errors, parent);\n\n if (process.env.NODE_ENV === \"development\") {\n const hasNoValue = !getIn(values, parent);\n if (hasNoValue) {\n /* eslint-disable-next-line no-console */\n console.warn(\n `De <ModalButton/> met parent: '${parent}' wijst de parent prop niet naar de data in de values!`\n );\n }\n }\n\n return (\n <>\n <button\n {...props}\n disabled={appHasError || disabled}\n id={parent + \"-popup\"}\n data-testid={parent + \"-popup\"}\n type=\"button\"\n onClick={(evt): void => (!evt.currentTarget.matches(\":disabled\") ? setModalOpen(true) : undefined)}\n className={classnames(`btn ${className}`, { \"is-invalid\": hasError && validate })}\n >\n {content}\n </button>\n\n <Modal\n backdropClassName={classes[`backdrop-${modalIndex}`]}\n className={classes[`dialog-${modalIndex}`]}\n onEnter={(): void | undefined => (onMobile ? undefined : firstInputFocus(dialog))}\n keyboard={false}\n show={isModalOpen}\n backdrop={\"static\"}\n onHide={(): void => setModalOpen(false)}\n size={size}\n data-testid=\"modal-form\"\n >\n <div ref={dialog} />\n {React.cloneElement(children, {\n closeModal: (): void => setModalOpen(false)\n })}\n </Modal>\n </>\n );\n }}\n </FormikConsumer>\n ) : (\n <></>\n );\n};\n\nModalButton.displayName = \"ModalButton\";\n\nexport default ModalButton;\n","/* istanbul ignore file */\n\n/**\n * DEZE FILE STAAT NIET ONDER TEST. WIJZIGINGEN -ALTIJD- CONTROLEREN!\n */\n\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { useRequestInit } from \"adviesbox-shared\";\n\nexport type HdnBerichtSoortType = \"AX\" | \"DA\" | \"DX\" | \"KX\";\nexport type UseHdnDataResult = {\n error: null | Error;\n hdnKeuzelijst: { [index: string]: string };\n};\n\nexport function useHdnData(berichtSoortType: HdnBerichtSoortType, keuzelijst: string): UseHdnDataResult {\n const {\n requestInit,\n settings: { hdnKeuzelijstenOrigin }\n } = useRequestInit();\n const url = `${hdnKeuzelijstenOrigin}/${berichtSoortType}/${keuzelijst}`;\n const { error, data } = useAbortableFetch<UseHdnDataResult>(url, requestInit);\n\n const listWithLoadingEntry = { \"-1\": \"Laden...\" };\n\n if (typeof data === \"string\") {\n return { error: new Error(\"Fout bij het laden van HDN data\"), hdnKeuzelijst: {} };\n }\n\n return { error, hdnKeuzelijst: !data || !data.hdnKeuzelijst ? listWithLoadingEntry : data.hdnKeuzelijst };\n}\n","import React, { ReactElement, ReactNode, InputHTMLAttributes } from \"react\";\nimport { HdnKeuzelijstPresentation } from \"adviesbox-shared\";\nimport { HdnBerichtSoortType, UseHdnDataResult, useHdnData } from \"./use-hdn-data\";\n\nexport type HdnKeuzelijstProps = {\n name: string;\n berichtSoortType: HdnBerichtSoortType;\n keuzelijst: string;\n appendChildren?: ReactNode;\n readonly?: boolean;\n visible?: boolean;\n fieldSize?: \"xl\" | \"l\" | \"m\" | \"s\" | \"grid-cell\";\n emptyValue?: string;\n hdnData?: UseHdnDataResult;\n useHdnData?: (berichtSoortType: HdnBerichtSoortType, keuzelijst: string) => UseHdnDataResult;\n};\n\nconst HdnKeuzelijst = ({\n berichtSoortType,\n keuzelijst,\n name,\n appendChildren,\n readonly,\n fieldSize,\n emptyValue,\n onChange,\n hdnData\n}: HdnKeuzelijstProps & InputHTMLAttributes<HTMLSelectElement>): ReactElement | null => {\n const { error, hdnKeuzelijst } = hdnData ?? useHdnData(berichtSoortType, keuzelijst);\n\n if (error) {\n return <div>Error: {error.message}</div>;\n }\n\n return (\n <HdnKeuzelijstPresentation\n name={name}\n hdnKeuzelijst={hdnKeuzelijst}\n appendChildren={appendChildren}\n readonly={readonly}\n fieldSize={fieldSize}\n emptyValue={emptyValue}\n onChange={onChange}\n />\n );\n};\n\nHdnKeuzelijst.displayName = \"HdnKeuzelijst\";\n\nexport default HdnKeuzelijst;\n","import React, { ReactElement, ChangeEvent, useState, RefObject, useRef } from \"react\";\nimport { Column, CellInfo } from \"react-table-6\";\nimport { CheckBox, Icon, TooltipWrap } from \"adviesbox-shared\";\n\nimport classes from \"./beschikbare-geldverstrekkers.module.scss\";\nimport { Modal as ModalBootstrap } from \"react-bootstrap\";\nimport { GeldverstrekkersState, AanvraagType } from \"../infra\";\nimport { FormikContextType } from \"formik\";\nimport classnames from \"classnames\";\nimport { UseHdnDataResult } from \"../../shared/components/hdn-keuzelijst/use-hdn-data\";\nimport ModalButton from \"../../shared/components/modal/ModalButton\";\nimport HdnKeuzelijst from \"../../shared/components/hdn-keuzelijst/HdnKeuzelijst\";\nimport { LabelValuePairs } from \"adviesbox-shared/utils/types\";\n\nexport const EmptyComponent = (): null => null;\n\nconst createSpanWithId = (c: CellInfo): ReactElement => {\n return <span id={`${c.index}-row-partijnaam-geldverstrekkers`}>{c.original.partijnaam}</span>;\n};\n\nexport const HypotheekOptiesModal = ({\n closeModal,\n cellIndex,\n formik\n}: {\n cellIndex: number;\n formik: FormikContextType<GeldverstrekkersState>;\n closeModal?: () => void;\n}): ReactElement => {\n const { setFieldValue, values } = formik;\n const [hypotheekLabels, setHypotheekLabels] = useState(\n values.beschikbareGeldverstrekkers.partijen[cellIndex].hypotheeklabels\n );\n\n const onChange = (hlIndex: number, hoIndex: number) => (e: ChangeEvent<HTMLInputElement>): void => {\n const newVal = hypotheekLabels;\n newVal[hlIndex].hypotheekopties[hoIndex].geselecteerd = e.target.checked;\n setHypotheekLabels(newVal);\n };\n\n const submit = (): void => {\n setFieldValue(`beschikbareGeldverstrekkers.partijen[${cellIndex}].hypotheeklabels`, hypotheekLabels);\n closeModal && closeModal();\n };\n\n return (\n <div>\n <ModalBootstrap.Header>\n <div className=\"d-flex w-100\">\n <ModalBootstrap.Title>Beschikbare hypotheekopties</ModalBootstrap.Title>\n <button type=\"button\" className={\"close ml-auto\"} onClick={closeModal} id={`btnClose-hypotheekopties`}>\n <span aria-hidden=\"true\">Ɨ</span>\n <span className=\"sr-only\">Close</span>\n </button>\n </div>\n </ModalBootstrap.Header>\n <ModalBootstrap.Body className=\"pb-0\">\n <div>\n {values.beschikbareGeldverstrekkers.partijen[cellIndex].hypotheeklabels.map((hl, hlIndex: number) => {\n return (\n <div key={`${hlIndex}-wrapper`}>\n {values.beschikbareGeldverstrekkers.partijen[cellIndex].hypotheeklabels[hlIndex].hypotheekopties &&\n values.beschikbareGeldverstrekkers.partijen[cellIndex].hypotheeklabels[hlIndex].hypotheekopties\n .length ? (\n <div key={`${hl.code}-${cellIndex}-${hlIndex}`} className=\"mb-3\">\n <h2>{hl.omschrijving}</h2>\n {values.beschikbareGeldverstrekkers.partijen[cellIndex].hypotheeklabels[\n hlIndex\n ].hypotheekopties.map(\n (ho, hoIndex: number): ReactElement => {\n return (\n <div\n key={`${hl.code}-${cellIndex}-${hlIndex}-${hoIndex}`}\n // ../../shared/components/checkbox-input/CheckboxInput.module.scss: checkbox\n className={`checkbox d-flex align-items-center`}\n >\n <input\n id={`checkbox-${hlIndex}-${hoIndex}`}\n data-testid={`checkbox-${hlIndex}-${hoIndex}`}\n onChange={onChange(hlIndex, hoIndex)}\n type=\"checkbox\"\n defaultChecked={!!ho.geselecteerd}\n />\n <label\n htmlFor={`checkbox-${hlIndex}-${hoIndex}`}\n // ../../shared/components/checkbox-input/CheckboxInput.module.scss: checkbox_label\n className={classnames(\"checkbox_label\", \"ml-2\")}\n >\n <span>{ho.omschrijving}</span>\n <TooltipWrap\n name={`${hl.code}-${cellIndex}-${hlIndex}-${hoIndex}`}\n warningText={ho.toelichting||\"\"}\n iconType=\"questionmark\"\n placement=\"bottom\"\n tooltipClasses=\"mx-1\"\n />\n </label>\n </div>\n );\n }\n )}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n </ModalBootstrap.Body>\n <ModalBootstrap.Footer className={classes.modal_footer}>\n <button type=\"button\" className=\"btn btn-link\" id=\"btnannuleren\" onClick={closeModal}>\n Annuleren\n </button>\n <button type=\"button\" className=\"btn btn-primary\" id=\"btnopslaan\" onClick={submit}>\n Bevestigen\n </button>\n </ModalBootstrap.Footer>\n </div>\n );\n};\n\nexport const createModalButton = (\n formik: FormikContextType<GeldverstrekkersState>\n): ((c: CellInfo) => ReactElement) => (c: CellInfo): ReactElement => {\n const { values } = formik;\n return (\n <div className={classes.align_center}>\n {values.beschikbareGeldverstrekkers.partijen[c.index].hypotheeklabels.length &&\n values.beschikbareGeldverstrekkers.partijen[c.index].hypotheeklabels.filter(\n hl => hl.hypotheekopties && hl.hypotheekopties.length\n ).length ? (\n <ModalButton\n parent={`beschikbareGeldverstrekkers.partijen[${c.index}]`}\n key={`${c.index}`}\n content={\n <div className={classes.hypotheek_opties_button}>\n <Icon name=\"motivering\" alt=\"motivering\" multiColor={false} />\n </div>\n }\n >\n <HypotheekOptiesModal formik={formik} cellIndex={c.index} />\n </ModalButton>\n ) : null}\n </div>\n );\n};\n\nexport const createHDNKeuzeLijst = (hdnData: UseHdnDataResult) => (c: CellInfo): ReactElement => {\n return (\n <div className=\"input-group\">\n <div className=\"w-100\">\n <HdnKeuzelijst\n berichtSoortType=\"AX\"\n name={`beschikbareGeldverstrekkers.partijen[${c.index}].aanvullendeRetourwijze`}\n keuzelijst=\"AanvullendeVerzendwijzeType\"\n fieldSize=\"grid-cell\"\n hdnData={hdnData}\n />\n </div>\n </div>\n );\n};\n\nconst getAanvraagNaarOptions = (values: GeldverstrekkersState): LabelValuePairs => {\n const aanvraagNaarOptions: LabelValuePairs = [];\n values.beschikbareGeldverstrekkers.serviceProviders.forEach(serviceprovider => {\n aanvraagNaarOptions.push({\n label: `${serviceprovider.naam}`,\n value: `${AanvraagType.Serviceprovider}**${serviceprovider.serviceproviderId}`\n });\n });\n values.beschikbareGeldverstrekkers.softwareKoppelingen.forEach(softwareKoppeling => {\n aanvraagNaarOptions.push({\n label: `${softwareKoppeling.naam}`,\n value: `${AanvraagType.SoftwareKoppeling}**${softwareKoppeling.softwareKoppelingId}`\n });\n });\n\n aanvraagNaarOptions.sort((a, b) => (a.label > b.label) ? 1 : -1); \n return aanvraagNaarOptions;\n}\n\nconst createAanvraagNaarSelectInput = (\n formik: FormikContextType<GeldverstrekkersState>\n): ((c: CellInfo) => ReactElement) => (c: CellInfo): ReactElement => {\n const { setFieldValue, values } = formik;\n\n const setAanvraagNaar = (event: ChangeEvent<HTMLSelectElement>): void => {\n const val = event.target.value === \"null\" ? null : event.target.value;\n const [aanvraagType, aanvraagId] = event.target.value.split(\"**\");\n const isServiceprovider = aanvraagType === AanvraagType.Serviceprovider;\n setFieldValue(`beschikbareGeldverstrekkers.partijen[${c.index}].aanvraagNaar`, val);\n\n if (isServiceprovider) {\n setFieldValue(`beschikbareGeldverstrekkers.partijen[${c.index}].serviceproviderId`, aanvraagId);\n setFieldValue(`beschikbareGeldverstrekkers.partijen[${c.index}].softwareKoppelingId`, null);\n } else {\n setFieldValue(`beschikbareGeldverstrekkers.partijen[${c.index}].serviceproviderId`, null);\n setFieldValue(`beschikbareGeldverstrekkers.partijen[${c.index}].softwareKoppelingId`, aanvraagId);\n }\n };\n\n const aanvraagNaarOptions = getAanvraagNaarOptions(values);\n\n return (\n <div className=\"input-group\">\n <select\n id={`aanvraag-naar-select-${c.index}`}\n data-testid={`aanvraag-naar-select-${c.index}`}\n onChange={setAanvraagNaar}\n defaultValue={c.original.aanvraagNaar}\n // ../../shared/components/select-input/SelectInput.module.scss: input_control\n className={classnames(\"input_control\", \"grid-cell\")}\n >\n <option value={\"null\"}>Geen</option>\n {aanvraagNaarOptions.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n );\n};\n\nexport const createTextInputAgentNummerCell = (\n formik: FormikContextType<GeldverstrekkersState>\n): ((c: CellInfo) => ReactElement) => (c: CellInfo): ReactElement => {\n const { setFieldValue, values } = formik;\n const inputElement: RefObject<HTMLInputElement> | null = useRef(null);\n\n const onMouseUp = (): void => {\n inputElement.current?.focus();\n };\n\n const onBlur = (e: ChangeEvent<HTMLInputElement>): void => {\n setFieldValue(`beschikbareGeldverstrekkers.partijen[${c.index}].agentnummer`, e.target.value);\n };\n\n return (\n <div className=\"input-group\">\n <input\n data-testid={`agentnummer-input-${c.index}`}\n id={`agentnummer-input-${c.index}`}\n // ../../shared/components/tekst-input/TextInput.module.scss: input_control\n className={classnames(\"input_control\", \"grid-cell\")}\n type=\"text\"\n defaultValue={values.beschikbareGeldverstrekkers.partijen[c.index].agentnummer || \"\"}\n onBlur={onBlur}\n ref={inputElement}\n onMouseUp={onMouseUp}\n />\n </div>\n );\n};\n\nexport const createActiveCheckboxCell = (c: CellInfo): ReactElement => {\n return (\n <div className={classes.clickable_label_fix}>\n <CheckBox\n name={`beschikbareGeldverstrekkers.partijen[${c.index}].actief`}\n caption=\"\"\n disabled={c.original.code === \"XX\"}\n />\n </div>\n );\n};\n\nexport const getColumns = (formik: FormikContextType<GeldverstrekkersState>, hdnData: UseHdnDataResult): Column[] => [\n {\n Header: \"Partijnaam\",\n Cell: createSpanWithId\n },\n {\n width: 100,\n Header: \"Actief\",\n Cell: createActiveCheckboxCell\n },\n {\n width: 100,\n Header: \"Agentnummer\",\n Cell: createTextInputAgentNummerCell(formik)\n },\n {\n Header: \"Aanvraag naar\",\n Cell: createAanvraagNaarSelectInput(formik)\n },\n {\n width: 175,\n Header: \"Aanvullende retourwijze\",\n Cell: createHDNKeuzeLijst(hdnData)\n },\n {\n maxWidth: 100,\n Header: \"Hypotheekopties\",\n Cell: createModalButton(formik)\n }\n];\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType } from \"formik\";\nimport { GeldverstrekkersState } from \"../infra\";\nimport { getColumns } from \"./geldverstrekkers-data-grid-components\";\nimport { useHdnData } from \"../../shared/components/hdn-keuzelijst/use-hdn-data\";\nimport { DataGrid } from \"adviesbox-shared\";\n\nconst BeschikbareGeldverstrekkers = ({\n formik\n}: {\n formik: FormikContextType<GeldverstrekkersState>;\n}): ReactElement => {\n const { values } = formik;\n const hdnData = useHdnData(\"AX\", \"AanvullendeVerzendwijzeType\");\n\n return (\n <>\n <div>\n <DataGrid\n name=\"beschikbareGeldverstrekkers.partijen\"\n resizable={false}\n sortable={false}\n filterable={false}\n columns={getColumns(formik, hdnData)}\n minRows={values.beschikbareGeldverstrekkers.partijen.length || 0}\n showPagination={false}\n pageSize={values.beschikbareGeldverstrekkers.partijen.length || 0}\n />\n </div>\n </>\n );\n};\n\nexport default connect<{}, GeldverstrekkersState>(BeschikbareGeldverstrekkers);\n","import React, { ReactElement, useContext } from \"react\";\nimport { Form, FormikProps } from \"formik\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { Card, CardWrapper, PlatformFoutenSamenvatting } from \"adviesbox-shared\";\n\nimport { GeldverstrekkersState, GeldverstrekkersProps, geldverstrekkersSchema } from \"./infra\";\n\nimport BeschikbareGeldverstrekkers from \"./beschikbare-geldverstrekkers/beschikbare-geldverstrekkers\";\nimport { AutorisatieNiveauManager } from \"../autorisatieniveau-manager/autorisatieniveau-manager\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport classnames from \"classnames\";\nimport classes from \"./beschikbare-geldverstrekkers/beschikbare-geldverstrekkers.module.scss\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Geldverstrekkers = (\n props: FormikProps<GeldverstrekkersState> & WithSaveData<GeldverstrekkersState>\n): ReactElement => {\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n return (\n <Form>\n <PlatformFoutenSamenvatting />\n\n <fieldset\n disabled={!(isBeheerder || autorisatieNiveau.geldverstrekkersNiveau === InstellingNiveauOptions.Medewerker)}\n >\n <CardWrapper className=\"px-3\">\n <div className={classnames(classes.text_container, \"text-container\")}>\n <div className={\"p-2\"}>\n <h2>Geldverstrekkers </h2>\n\n <AutorisatieNiveauManager manageFor={autorisatieNiveau.geldverstrekkersNiveau} />\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n </div>\n </div>\n </CardWrapper>\n <CardWrapper maxRowCount={12} className=\"px-3\">\n <Card title=\"Beschikbare Geldverstrekkers\" className=\"w-100\">\n <div className=\"px-1\">\n <BeschikbareGeldverstrekkers />\n </div>\n </Card>\n </CardWrapper>\n </fieldset>\n\n {/* istanbul ignore next */\n process.env.NODE_ENV === \"development\" && <Debug />}\n </Form>\n );\n};\n\nGeldverstrekkers.displayName = \"Geldverstrekkers\";\n\nexport default withAdviesboxFormik<GeldverstrekkersProps & WithSaveData<GeldverstrekkersState>, GeldverstrekkersState>({\n // Transform outer props into form values\n mapPropsToValues: (e: GeldverstrekkersProps): GeldverstrekkersState => e,\n validationSchema: geldverstrekkersSchema\n})(Geldverstrekkers);\n","import { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\nimport { beschikbareGeldverstrekkersPartijen, geldverstrekkersSchema } from \".\";\nimport { GeldverstrekkerPartij, Geldverstrekkers } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { UiName, FieldMap } from \"../../shared/types\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\nimport { hasValue } from \"../../shared/utils/helpers\";\n\nconst mapPartijen = createMapToDl(beschikbareGeldverstrekkersPartijen).to<GeldverstrekkerPartij>({\n aanvullendeRetourwijze: v => (hasValue(v.aanvullendeRetourwijze) ? parseInt(v.aanvullendeRetourwijze) : null),\n actief: v => v.actief,\n agentnummer: v => v.agentnummer,\n code: v => v.code,\n hypotheeklabels: v => v.hypotheeklabels,\n partijnaam: v => v.partijnaam,\n serviceproviderId: v => v.serviceproviderId,\n softwareKoppelingId: v => v.softwareKoppelingId\n});\n\nexport const mapGeldverstrekkersUiToDl = createMapToDl(geldverstrekkersSchema).to<Geldverstrekkers>({\n partijen: v => v.beschikbareGeldverstrekkers.partijen.map(c => mapPartijen(c)),\n serviceproviders: v => v.beschikbareGeldverstrekkers.serviceProviders,\n softwareKoppelingen: v => v.beschikbareGeldverstrekkers.softwareKoppelingen\n});\n\nexport function mapDlTargetToGeldverstrekkersUiField(target: string): UiName | null {\n const map: FieldMap<any> = {};\n\n return target2field(map, target);\n}\n","/* istanbul ignore file */\n\nimport {\n beschikbareHypotheekProducten,\n ErrorPage,\n PageLoading,\n useRequestInit,\n withErrorBoundary\n} from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { GeldverstrekkersOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { HypotheekvormBasis } from \"../.generated/producten/productentypes\";\nimport { partijFilter } from \"../shared/utils/partij-filter\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport Geldverstrekkers from \"./geldverstrekkers\";\nimport { mapGeldverstrekkersDlToUi } from \"./infra\";\nimport { mapDlTargetToGeldverstrekkersUiField, mapGeldverstrekkersUiToDl } from \"./infra/map-geldverstrekkers-ui-to-dl\";\n\nconst GeldverstrekkersAjax = (): ReactElement => {\n const { requestInit, settings, params, user } = useRequestInit<{ vestiging: string }>();\n const url = `${settings.instellingenFormsOrigin}/BeheerPartijen/Geldverstrekkers`;\n const { loading, error, data } = useAbortableFetch<GeldverstrekkersOutput>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapGeldverstrekkersDlToUi(data);\n\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n const filteredPartijen = mappedProps.beschikbareGeldverstrekkers.partijen.filter(\n c =>\n c.hypotheeklabels.find(l =>\n partijFilter({ maatschappijCode: c.code, code: l.code } as HypotheekvormBasis, beschikbareHypotheekProducten)\n ) !== undefined\n );\n\n mappedProps.beschikbareGeldverstrekkers.partijen = filteredPartijen;\n\n return (\n <Geldverstrekkers\n saveData={saveData(\n user,\n params.vestiging,\n url,\n settings.OcpApimSubscriptionKey,\n mapGeldverstrekkersUiToDl,\n mapDlTargetToGeldverstrekkersUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nGeldverstrekkersAjax.displayName = \"GeldverstrekkersAjax\";\n\nexport default withErrorBoundary(GeldverstrekkersAjax);\n","import * as Yup from \"yup\";\nimport { InferType } from \"yup\";\n\nimport { SoortControleVolledigheidOptions } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { yupEnum } from \"../../shared/utils/yup-enum\";\n\nexport const volledigheidSchema = Yup.object({\n soortControle: yupEnum(SoortControleVolledigheidOptions).default(SoortControleVolledigheidOptions.GeenControle)\n});\n\nexport const klantprofielMotiveringSchema = Yup.object({\n volledigheid: volledigheidSchema\n});\n\nexport type VolledigheidType = InferType<typeof volledigheidSchema>;\nexport type klantprofielMotiveringState = InferType<typeof klantprofielMotiveringSchema>;\nexport type klantprofielMotiveringProps = InferType<typeof klantprofielMotiveringSchema>;\n","import { FieldMap, UiName } from \"../../shared/types\";\nimport {\n klantprofielMotiveringSchema,\n klantprofielMotiveringState,\n volledigheidSchema\n} from \"./klantprofiel-motivering-schema\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\nimport {\n KlantprofielMotivering,\n KlantprofielMotiveringOutput\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\nimport { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\n\nconst mapVolledigheidDl2Ui = createMapToUi(volledigheidSchema).from<KlantprofielMotivering>({\n soortControle: v => v.soortControleVolledigheid\n});\n\nconst dl2ui = createMapToUi(klantprofielMotiveringSchema).from<KlantprofielMotivering>({\n volledigheid: v => mapVolledigheidDl2Ui(v)\n});\n\nexport function mapklantprofielmotiveringDlToUi(\n data: KlantprofielMotiveringOutput\n): klantprofielMotiveringState | null {\n const klantprofielMotivering = data && data.isValid ? data.klantprofielMotivering : null;\n\n if (klantprofielMotivering) {\n return dl2ui(klantprofielMotivering);\n }\n\n return null;\n}\n\nexport const mapklantprofielmotiveringUiToDl = createMapToDl(klantprofielMotiveringSchema).to<KlantprofielMotivering>({\n soortControleVolledigheid: v => v.volledigheid.soortControle\n});\n\nexport function mapDlTargetToklantprofielmotiveringUiField(target: string): UiName | null {\n const map: FieldMap<any> = {};\n\n return target2field(map, target);\n}\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType } from \"formik\";\nimport { LabeledRadioInput } from \"adviesbox-shared\";\nimport { klantprofielMotiveringState } from \"../infra\";\nimport { SoortControleVolledigheidOptions } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Volledigheid = ({\n formik: {\n values: { volledigheid }\n }\n}: {\n formik: FormikContextType<klantprofielMotiveringState>;\n}): ReactElement => {\n const klantprofielMotiveringOptions = [\n { label: \"Geen controle\", value: SoortControleVolledigheidOptions.GeenControle },\n { label: \"Alleen klantprofiel\", value: SoortControleVolledigheidOptions.AlleenKlantprofiel },\n {\n label: \"Klantprofiel en motivering\",\n value: SoortControleVolledigheidOptions.KlantprofielEnMotivering\n }\n ];\n\n return (\n <>\n <p className=\"p-3\">Controle op volledigheid klantprofiel en motivering bij HDN-aanvraag.</p>\n <LabeledRadioInput\n caption=\"Soort controle\"\n name=\"volledigheid.soortControle\"\n options={klantprofielMotiveringOptions}\n />\n </>\n );\n};\n\nexport default connect<{}, klantprofielMotiveringState>(Volledigheid);\n","import React, { ReactElement, useContext } from \"react\";\nimport { FormikProps, Form } from \"formik\";\nimport { Card, CardWrapper, PlatformFoutenSamenvatting } from \"adviesbox-shared\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport Volledigheid from \"./volledigheid/volledigheid\";\nimport { klantprofielMotiveringState, klantprofielMotiveringProps, klantprofielMotiveringSchema } from \"./infra\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { AutorisatieNiveauManager } from \"../autorisatieniveau-manager/autorisatieniveau-manager\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Klantprofielmotivering = (\n props: FormikProps<klantprofielMotiveringState> & WithSaveData<klantprofielMotiveringState>\n): ReactElement => {\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n return (\n <Form>\n <PlatformFoutenSamenvatting />\n\n <fieldset\n disabled={\n !(isBeheerder || autorisatieNiveau.klantprofielMotiveringNiveau === InstellingNiveauOptions.Medewerker)\n }\n >\n <CardWrapper className=\"px-3\">\n <div className=\"text-container\">\n <div className=\"p-2\">\n <h2 className=\"p-0\">Klantprofiel en motivering </h2>\n <AutorisatieNiveauManager manageFor={autorisatieNiveau.klantprofielMotiveringNiveau} />\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n </div>\n </div>\n </CardWrapper>\n <CardWrapper className=\"px-3\">\n <Card title=\"Controle op volledigheid\">\n <Volledigheid />\n </Card>\n </CardWrapper>\n </fieldset>\n\n {/* istanbul ignore next */\n process.env.NODE_ENV === \"development\" && <Debug />}\n </Form>\n );\n};\n\nKlantprofielmotivering.displayName = \"klantprofiel-motivering\";\n\nexport default withAdviesboxFormik<\n klantprofielMotiveringProps & WithSaveData<klantprofielMotiveringState>,\n klantprofielMotiveringState\n>({\n mapPropsToValues: (e: klantprofielMotiveringProps): klantprofielMotiveringState => e,\n validationSchema: klantprofielMotiveringSchema\n})(Klantprofielmotivering);\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { KlantprofielMotiveringOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport {\n mapDlTargetToklantprofielmotiveringUiField,\n mapklantprofielmotiveringDlToUi,\n mapklantprofielmotiveringUiToDl\n} from \"./infra\";\nimport Klantprofielmotivering from \"./klantprofiel-motivering\";\n\nconst KlantprofielmotiveringAjax = (): ReactElement => {\n // TODO: replace useRequestInit/useAbortableFetch with useAdviesboxData\n\n const { params, settings, requestInit, user } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/KlantprofielMotivering`;\n const { loading, error, data } = useAbortableFetch<KlantprofielMotiveringOutput>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapklantprofielmotiveringDlToUi(data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <Klantprofielmotivering\n saveData={saveData(\n user,\n params.vestiging ?? \"\",\n url,\n settings.OcpApimSubscriptionKey,\n mapklantprofielmotiveringUiToDl,\n mapDlTargetToklantprofielmotiveringUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nKlantprofielmotiveringAjax.displayName = \"klantprofielmotiveringAjax\";\n\nexport default withErrorBoundary(KlantprofielmotiveringAjax);\n","/* istanbul ignore file */\n\nimport { SettingsType, useRequestInit, ForceRerenderContext } from \"adviesbox-shared\";\nimport { useCallback, useContext, useEffect, useMemo } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { AbortableFetchResult } from \"use-abortable-fetch/release/types\";\nimport { AppDataContext } from \"../../navigation/appdata-context\";\nimport { UiError, UiName } from \"../types\";\nimport { saveDataRequestInit as createSaveData } from \"../utils/save-data\";\n\nconst noop = async (): Promise<null> => null;\n\nconst noUserResult = {\n loading: false,\n error: new Error(\"Missing AuthContext\"),\n data: null,\n platformData: null,\n saveData: noop\n};\n\nconst invalidDataResult = {\n loading: false,\n error: new Error(\"Invalid data\"),\n data: null,\n platformData: null,\n saveData: noop\n};\n\nconst invalidDataIdResult = {\n loading: false,\n error: new Error(\"Invalid dataId\"),\n data: null,\n platformData: null,\n saveData: noop\n};\n\ntype UseAdviesboxDataReturnType<DL, UI> = Omit<AbortableFetchResult<DL>, \"data\"> & {\n platformData: AbortableFetchResult<DL>[\"data\"];\n data: UI | null;\n saveData: (values: UI) => Promise<UiError[] | null>;\n};\n\nexport const useAdviesboxData = <DL, P extends ReturnType<typeof useRequestInit>[\"params\"], UI>(\n getUrl: (settings: SettingsType, params: P) => string,\n getDataId: (params: P) => string | undefined,\n mapDlToUi: (dataId: string, values: DL) => UI | null,\n mapUiToDl: (values: UI) => any,\n mapDlTarget: (target: string) => UiName | null\n): UseAdviesboxDataReturnType<DL, UI> => {\n const loadingDone = useContext(ForceRerenderContext);\n const { reloadNavigation } = useContext(AppDataContext);\n const { requestInit, settings, params, user } = useRequestInit<P>();\n\n const url = useMemo(() => getUrl(settings, params), [getUrl, settings, params]);\n const dataId = useMemo(() => getDataId(params), [getDataId, params]);\n\n const { loading, error: platformError, data: platformData, abort } = useAbortableFetch<DL>(url, requestInit);\n\n useEffect((): void => {\n if (!loading && platformData && loadingDone) {\n loadingDone();\n }\n }, [loading, platformData, loadingDone]);\n\n const saveData = useCallback(\n user ? createSaveData(url, requestInit, mapUiToDl, mapDlTarget, reloadNavigation) : noop,\n [user, params.vestiging, url, settings.OcpApimSubscriptionKey, mapUiToDl, mapDlTarget]\n );\n\n if (!user) {\n abort();\n return {\n ...noUserResult,\n abort\n };\n }\n\n if (!dataId) {\n abort();\n return {\n ...invalidDataIdResult,\n abort\n };\n }\n\n if (typeof platformData === \"string\") {\n return {\n ...invalidDataResult,\n abort\n };\n }\n const data = platformData ? mapDlToUi(dataId, platformData) : null;\n const error =\n platformData && !data && !platformError ? new Error(`Unable to map platform data for dataId: ${dataId}`) : null;\n\n return { loading, error: platformError || error, data, platformData, saveData, abort };\n};\n","/*istanbul ignore file*/\nimport { FieldMap, UiName } from \"../../shared/types\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\nimport { Dossier as DossierDlEntry } from \"../../.generated/bemiddeling/bemiddelingtypes\";\n\nexport function mapDlTargetToKoppelingUiField(target: string): UiName | null {\n const map: FieldMap<DossierDlEntry> = {};\n\n return target2field(map, target);\n}\n","import * as Yup from \"yup\";\nimport { InferType } from \"yup\";\n\nexport enum MeldingType {\n aanvraagOntvangen = \"Hypotheek aanvraag ontvangen\",\n documentenOntvangen = \"Documenten ontvangen\",\n documentGekoppeld = \"Document gekoppeld\",\n foutmelding = \"Foutmelding verzending document\"\n}\n\nexport const bemiddelaarSchema = Yup.object({\n bemiddelaarId: Yup.string().default(\"\"),\n naam: Yup.string().default(\"\"),\n emailadres: Yup.string().default(\"\")\n});\nexport type BemiddelaarSchemaType = InferType<typeof bemiddelaarSchema>;\n\nexport const coupledAdviseurSchema = Yup.object({\n adviseurId: Yup.string().default(\"\"),\n naam: Yup.string().default(\"\"),\n coupledBemiddelaarId: Yup.string()\n .nullable()\n .default(\"\"),\n emailadres: Yup.string().default(\"\")\n});\nexport type CoupledAdviseurSchemaType = InferType<typeof coupledAdviseurSchema>;\n\nexport const gekoppeldSchema = Yup.object({\n naam: Yup.string().default(\"\"),\n id: Yup.string().default(\"\")\n});\n\nexport const adviseurSchema = Yup.object({\n adviseurId: Yup.string().default(\"\"),\n naam: Yup.string().default(\"\")\n});\n\nexport const koppelSchema = Yup.object({\n adviseur: adviseurSchema,\n bemiddelaar: bemiddelaarSchema\n});\nexport type KoppelSchemaType = InferType<typeof koppelSchema>;\n\n// TODO remove defaults\nexport const koppelingenSchema = Yup.object({\n adviseurs: Yup.array(coupledAdviseurSchema).default([]),\n bemiddelaars: Yup.array(bemiddelaarSchema).default([]),\n koppelingen: Yup.array(koppelSchema).default([]),\n update: Yup.boolean().default(false),\n deleteEvent: Yup.array(Yup.string()).default([])\n});\n\nexport type KoppelingType = InferType<typeof koppelingenSchema>;\nexport type KoppelingProps = InferType<typeof koppelingenSchema>;\nexport type KoppelingState = InferType<typeof koppelingenSchema>;\n","import { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\nimport {\n AdviseurModel,\n BemiddelaarModel,\n GetAdviseursAndBemiddelaarsApiOutputModel\n} from \"../../.generated/bemiddeling/bemiddelingtypes\";\nimport {\n KoppelingState,\n koppelSchema,\n bemiddelaarSchema,\n coupledAdviseurSchema,\n koppelingenSchema\n} from \"./koppeling-schema\";\n\nconst mapAdviseur = createMapToUi(coupledAdviseurSchema).from<AdviseurModel>({\n adviseurId: v => v.adviseurId,\n naam: v => v.naam,\n coupledBemiddelaarId: v => v.coupledBemiddelaarId,\n emailadres: v => v.emailadres\n});\n\nconst mapBemiddelaar = createMapToUi(bemiddelaarSchema).from<BemiddelaarModel>({\n bemiddelaarId: v => v.bemiddelaarId,\n naam: v => v.naam,\n emailadres: v => v.emailadres\n});\n\nconst mapKoppelingen = createMapToUi(koppelSchema).from<{\n adviseur: AdviseurModel;\n bemiddelaars: BemiddelaarModel[] | null;\n}>({\n adviseur: v => {\n return {\n naam: v.adviseur.naam ?? /*istanbul ignore next */ \"\",\n adviseurId: v.adviseur.adviseurId ?? /*istanbul ignore next */ \"\",\n emailadres: v.adviseur.emailadres ?? /*istanbul ignore next */ \"\"\n };\n },\n bemiddelaar: v => {\n const bemiddelaar = v.bemiddelaars?.find(\n (b: BemiddelaarModel) => b.bemiddelaarId === v.adviseur.coupledBemiddelaarId\n );\n\n return {\n bemiddelaarId: bemiddelaar?.bemiddelaarId ?? /*istanbul ignore next */ \"\",\n naam: bemiddelaar?.naam ?? /*istanbul ignore next */ \"\",\n emailadres: bemiddelaar?.emailadres ?? /*istanbul ignore next */ \"\"\n };\n }\n});\n\nconst dl2uiKoppeling = createMapToUi(koppelingenSchema).from<GetAdviseursAndBemiddelaarsApiOutputModel>({\n bemiddelaars: v =>\n v.bemiddelaars ? v.bemiddelaars.map((bemiddelaar: BemiddelaarModel) => mapBemiddelaar(bemiddelaar)) : [],\n adviseurs: v => (v.adviseurs ? v.adviseurs.map((adviseur: AdviseurModel) => mapAdviseur(adviseur)) : []),\n koppelingen: v =>\n v.adviseurs\n ?.filter((adviseur: AdviseurModel) => adviseur.coupledBemiddelaarId)\n .map((a: AdviseurModel) => mapKoppelingen({ adviseur: a, bemiddelaars: v.bemiddelaars })),\n update: v => false,\n deleteEvent: v => []\n});\n\nexport function mapKoppelingDlNaarUi(\n adviesdossierId: string,\n data: GetAdviseursAndBemiddelaarsApiOutputModel\n): KoppelingState | null {\n return dl2uiKoppeling(data);\n}\n","/* istanbul ignore file */\n// TODO remove istanbul ignore, after the end points for kantoorgegevens are fixed\nimport { AdviseurModel, BemiddelaarModel } from \"../../.generated/bemiddeling/bemiddelingtypes\";\nimport { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\n// import { DossierOutput as DossierdlOutput } from \"../../.generated/bemiddeling/bemiddelingtypes\";\nimport {\n bemiddelaarSchema,\n coupledAdviseurSchema,\n BemiddelaarSchemaType,\n CoupledAdviseurSchemaType,\n koppelingenSchema\n} from \"./koppeling-schema\";\n// TODO to fix enum types in bemiddeling types and map them\n\nconst mapAdviseur = createMapToDl(coupledAdviseurSchema).to<AdviseurModel>({\n adviseurId: v => v.adviseurId || null,\n naam: v => v.naam || null,\n coupledBemiddelaarId: v => v.coupledBemiddelaarId,\n emailadres: _ => null\n});\n\nconst mapBemiddelaar = createMapToDl(bemiddelaarSchema).to<BemiddelaarModel>({\n bemiddelaarId: v => v.bemiddelaarId || null,\n naam: v => v.naam || null,\n emailadres: _ => null\n});\n\nexport const Ui2dlKoppeling = createMapToDl(koppelingenSchema).to<any>({\n bemiddelaars: v =>\n v.bemiddelaars ? v.bemiddelaars.map((bemiddelaar: BemiddelaarSchemaType) => mapBemiddelaar(bemiddelaar)) : [],\n adviseurs: v => (v.adviseurs ? v.adviseurs.map((adviseur: CoupledAdviseurSchemaType) => mapAdviseur(adviseur)) : []),\n koppelingen: v =>\n v.adviseurs\n .filter((adviseur: CoupledAdviseurSchemaType) => adviseur.coupledBemiddelaarId)\n .map((adviseur: CoupledAdviseurSchemaType) => adviseur)\n});\n","import { Draft } from \"immer\";\nimport { FormikContextType } from \"formik\";\nimport { HasChanged } from \"./has-changed-helper\";\nimport { RouteParams } from \"../../paramrouting/paramrouting-context\";\nimport { SettingsType } from \"adviesbox-shared\";\nimport { UiName } from \"../../types\";\nimport { User } from \"oidc-client\";\n\n/*istanbul ignore file */\nexport const forceReturnContext = Symbol(\"forceReturnContext\");\n\nexport type ISWSideEffect<T> = (bag: ISWSideEffectBag<T>) => void;\nexport type ISWSideEffectWithContext<T, X> = (bag: ISWSideEffectBagWithContext<T, X>) => void;\n\nexport type CreateBagFunction<T, X> = {\n create: () => ISWSideEffectBagWithContext<T, X>;\n createWithContext: <N>(newcontext: N) => ISWSideEffectBagWithContext<T, N>;\n};\n\ntype SubBagObj<T, X> = { [P in keyof T]: ISWSideEffectSubBag<T[P], X> };\nexport type ISWSideEffectSubBag<T, X> = Extract<T, object> extends never\n ? never\n : SubBagObj<T, X> & Omit<CreateBagFunction<T, X>, keyof T>;\n\ntype ISWSideEffectBag<T> = {\n has: HasChanged<T>;\n draft: Draft<T>;\n prev: Readonly<T>;\n init: Readonly<T>;\n subset: ISWSideEffectSubBag<T, any>;\n};\nexport type ISWSideEffectBagWithContext<T, X> = {\n has: HasChanged<T>;\n draft: Draft<T>;\n prev: Readonly<T>;\n init: Readonly<T>;\n subset: ISWSideEffectSubBag<T, X>;\n context: X extends object ? Readonly<X> : X;\n};\n\nexport type ISWAsyncCondition<T, X = undefined> = (bag: ISWAsyncConditionBag<T, X>) => void;\nexport type ISWAsyncSideEffect<T, X, P = RouteParams> = (bag: ISWAsyncSideEffectBag<T, X, P>) => Promise<void>;\nexport type ISWAsyncContext<T, X> = { id: number; asyncSideEffect: ISWAsyncSideEffect<T, X>; context: X };\n\nexport type ISWAsyncConditionBag<T, X> = {\n has: HasChanged<T>;\n curr: Readonly<T>;\n prev: Readonly<T>;\n init: Readonly<T>;\n context: X extends object ? Readonly<X> : X;\n runAsync: (asyncContext: ISWAsyncContext<T, X>) => void;\n};\nexport type ISWAsyncSideEffectBag<T, X, P = RouteParams> = {\n has: HasChanged<T>;\n draft: Draft<T>;\n prev: Readonly<T>;\n init: Readonly<T>;\n signal: AbortSignal;\n fetchData: <R, B = undefined>(params: ISWFetchDataParams<T, B>) => Promise<R>;\n params: Readonly<P>;\n settings: SettingsType;\n user: User | null;\n context: X extends object ? Readonly<X> : X;\n formik: FormikContextType<T>;\n};\n\nexport type ISWFetchDataParams<T, B> = {\n url: string;\n method?: \"GET\" | \"POST\" | \"PUT\";\n body?: string | B | ((data: T) => B);\n extraHeaders?: Record<string, string>;\n mapperDlNameToUiName?: (target: string) => UiName | null;\n};\n","import {\n ISWSideEffect,\n ISWSideEffectWithContext,\n ISWAsyncSideEffect,\n ISWAsyncContext,\n ISWAsyncCondition,\n ISWSideEffectSubBag,\n ISWSideEffectBagWithContext,\n forceReturnContext\n} from \"./isw-types\";\n/* istanbul ignore file */\nexport function createISWSideEffect<T>(handler: ISWSideEffect<T>): ISWSideEffect<T>;\nexport function createISWSideEffect<T, X>(handler: ISWSideEffectWithContext<T, X>): ISWSideEffectWithContext<T, X>;\nexport function createISWSideEffect(handler: any): any {\n return handler;\n}\n\nexport function initISWSideEffect<T>(sideEffects: ISWSideEffect<T>): (nocontext?: undefined) => ISWSideEffect<T>;\nexport function initISWSideEffect<T, X>(\n sideEffects: ISWSideEffectWithContext<T, X>\n): (context: X) => ISWSideEffectWithContext<T, X>;\nexport function initISWSideEffect<T, X>(\n sideEffects: ISWSideEffectWithContext<T, X>\n): (context?: X) => ISWSideEffectWithContext<T, X> {\n return context => (bag): void | X => {\n if ((bag as any) === forceReturnContext) return context;\n const bagWithContext = { ...bag, context: context as any };\n return sideEffects({ ...bagWithContext, subset: createSubBag<T, X>([], bagWithContext) });\n };\n}\n\nlet createISWAsyncSideEffectId = 1;\nexport function createISWAsyncSideEffect<T>(\n asyncSideEffect: ISWAsyncSideEffect<T, undefined>\n): () => ISWAsyncContext<T, undefined>;\nexport function createISWAsyncSideEffect<T, X = undefined>(\n asyncSideEffect: ISWAsyncSideEffect<T, X>\n): (context: X) => ISWAsyncContext<T, X>;\nexport function createISWAsyncSideEffect<T, X = undefined>(\n asyncSideEffect: ISWAsyncSideEffect<T, X>\n): (context: X) => ISWAsyncContext<T, X> {\n const id = createISWAsyncSideEffectId++;\n return (context: X) => ({\n id: id,\n context,\n asyncSideEffect\n });\n}\nexport function initISWAsyncSideEffect<T>(asyncCondition: ISWAsyncCondition<T, any>): () => ISWAsyncCondition<T>;\nexport function initISWAsyncSideEffect<T, X>(\n asyncCondition: ISWAsyncCondition<T, X>\n): (context: X) => ISWAsyncCondition<T, X>;\nexport function initISWAsyncSideEffect<T, X>(\n asyncCondition: ISWAsyncCondition<T, X>\n): (context: X) => ISWAsyncCondition<T, X> {\n return context => bag => {\n if ((bag as any) === forceReturnContext) return context;\n return asyncCondition({ ...bag, context: context as any });\n };\n}\n\nfunction getInObject(obj: { [index: string]: any }, pathArr: (string | number)[]): any {\n if (!obj || !pathArr) return;\n if (pathArr.length === 0) return obj;\n\n let i = 0;\n for (; i < pathArr.length - 1; i++) {\n obj = obj[pathArr[i]];\n if (typeof obj !== \"object\") return;\n }\n\n return obj[pathArr[i]];\n}\n\nexport function createSubBag<T, X>(\n pathArr: string[],\n bag: Omit<ISWSideEffectBagWithContext<T, X>, \"subset\">\n): ISWSideEffectSubBag<T, X> {\n return new Proxy(\n {},\n {\n get(target: { [index: string]: any }, name: string): any {\n if (name === \"createWithContext\" && typeof target[\"createWithContext\"] === \"undefined\") {\n return (newcontext: any) => {\n const newbag: any =\n pathArr.length === 0\n ? { ...bag, context: newcontext }\n : {\n has: getInObject(bag.has, pathArr),\n draft: getInObject(bag.draft, pathArr),\n prev: getInObject(bag.prev, pathArr),\n init: getInObject(bag.init, pathArr),\n context: newcontext\n };\n\n newbag.subset = createSubBag([], newbag);\n return newbag;\n };\n }\n if (name === \"create\" && typeof target[\"create\"] === \"undefined\") {\n return () => {\n if (pathArr.length === 0) return bag;\n const newbag: any = {\n has: getInObject(bag.has, pathArr),\n draft: getInObject(bag.draft, pathArr),\n prev: getInObject(bag.prev, pathArr),\n init: getInObject(bag.init, pathArr),\n context: bag.context\n };\n newbag.subset = createSubBag([], newbag);\n return newbag;\n };\n }\n return createSubBag([...pathArr, name], bag);\n }\n }\n ) as any;\n}\n","import { SetDefaultBemiddelaarInputApiModel } from \"../../.generated/bemiddeling/bemiddelingtypes\";\nimport {\n createISWAsyncSideEffect,\n initISWAsyncSideEffect\n} from \"../../shared/components/isw-side-effects/create-isw-helpers\";\nimport { KoppelingType } from \"./koppeling-schema\";\n/*istanbul ignore file */\ntype AsyncContext = { hasDeleteEvents: boolean };\n\nexport const newCoupledAdvisorPair = createISWAsyncSideEffect<KoppelingType, AsyncContext>(\n async ({ settings, fetchData, formik, draft }): Promise<void> => {\n await Promise.all(\n draft.koppelingen.map(async koppeling => {\n const adviseurID = formik.values.adviseurs.find(\n adviseur => adviseur.adviseurId === koppeling.adviseur.adviseurId\n )?.adviseurId;\n const bemiddelaarID = formik.values.bemiddelaars.find(\n bemiddelaar => bemiddelaar.bemiddelaarId === koppeling.bemiddelaar.bemiddelaarId\n )?.bemiddelaarId;\n\n if (adviseurID && bemiddelaarID) {\n await fetchData<SetDefaultBemiddelaarInputApiModel>({\n url: `${settings.klantdossiersBemiddelingOrigin}/Bemiddelaar/default`,\n method: \"PUT\",\n body: JSON.stringify({\n adviseurId: adviseurID,\n bemiddelaarId: bemiddelaarID\n })\n });\n }\n })\n );\n }\n);\n\nexport const deleteCoupledAdvisorPair = createISWAsyncSideEffect<KoppelingType>(\n async ({ settings, fetchData, draft }): Promise<void> => {\n if (draft.deleteEvent.length > 0) {\n await Promise.all(\n draft.deleteEvent.map(async deletedId => {\n const indexAdviseur = draft.adviseurs.findIndex(advisuer => advisuer.adviseurId === deletedId);\n const indexKoppeling = draft.koppelingen.findIndex(koppeling => koppeling.adviseur.adviseurId === deletedId);\n\n if (indexKoppeling !== -1) {\n return;\n }\n\n if (indexAdviseur !== -1) {\n draft.adviseurs[indexAdviseur].coupledBemiddelaarId = \"\";\n }\n\n await fetchData<SetDefaultBemiddelaarInputApiModel>({\n url: `${settings.klantdossiersBemiddelingOrigin}/Bemiddelaar/default`,\n method: \"PUT\",\n body: JSON.stringify({\n adviseurId: deletedId,\n bemiddelaarId: null\n })\n });\n })\n );\n\n draft.deleteEvent = [];\n }\n }\n);\n\nexport const koppelingAsyncSideEffects = initISWAsyncSideEffect<KoppelingType>(({ has, curr, runAsync }): void => {\n if (has.update.changed) {\n runAsync(newCoupledAdvisorPair({ hasDeleteEvents: curr.deleteEvent.length > 0 }));\n\n if (curr.deleteEvent.length > 0) {\n runAsync(deleteCoupledAdvisorPair());\n }\n }\n})();\n","import React, { ReactElement } from \"react\";\nimport { DataGrid, AdviesBoxColumn, SortType, SelectInput } from \"adviesbox-shared\";\nimport { koppelingenSchema, MeldingType, KoppelSchemaType, KoppelingState, CoupledAdviseurSchemaType } from \"../infra\";\nimport { CellInfo } from \"react-table-6\";\nimport { useFormikContext } from \"formik\";\nimport { LabelValuePairs } from \"adviesbox-shared/utils/types\";\nimport { AdviseurModel } from \"../../.generated/bemiddeling/bemiddelingtypes\";\n/*istanbul ignore file */\nexport type KoppelingGridProps = {\n selected: number;\n type: MeldingType;\n};\n\nconst KoppelingDataGrid = (): ReactElement => {\n const { values, setFieldValue } = useFormikContext<KoppelingState>();\n\n const uncouple = (adviseurId: string | null, columnId: string): { onMouseDown: () => void } => ({\n onMouseDown: (): void => {\n if (columnId !== \"delete\") {\n return;\n }\n\n if (adviseurId && typeof adviseurId === \"string\") {\n const array = values.deleteEvent ? [...values.deleteEvent, adviseurId] : [adviseurId];\n setFieldValue(`deleteEvent`, array);\n }\n }\n });\n\n const SelectBemiddelaarComponentCell = (c: CellInfo): ReactElement => {\n const bemiddelaarOptions = values.bemiddelaars.map(bemiddelaar => {\n return { label: bemiddelaar.naam, value: bemiddelaar.bemiddelaarId };\n });\n return (\n <>\n <SelectInput\n key={`bemiddelaarSelect-${c.index}`}\n readonly={bemiddelaarOptions.length <= 1}\n name={`koppelingen[${c.index}].bemiddelaar.bemiddelaarId`}\n className=\"grid-cell\"\n options={bemiddelaarOptions}\n />\n </>\n );\n };\n\n const SelectAdviseurComponentCell = (c: CellInfo): ReactElement => {\n const adviseursOptions: LabelValuePairs = values.adviseurs\n .filter(adviseur => {\n return (\n adviseur.adviseurId === values.koppelingen[c.index].adviseur.adviseurId ||\n adviseur.coupledBemiddelaarId === \"\" ||\n !adviseur.coupledBemiddelaarId\n );\n })\n .map(filteredAdviseur => {\n return { label: filteredAdviseur.naam, value: filteredAdviseur.adviseurId };\n });\n\n return (\n <>\n <SelectInput\n key={`adviseurSelect-${c.index}`}\n readonly={adviseursOptions.length <= 1}\n onChange={(e: React.ChangeEvent<HTMLSelectElement>) => {\n const prevAdviseurId = values.koppelingen[c.index].adviseur.adviseurId;\n const index = values.adviseurs.findIndex(adviseur => adviseur.adviseurId === e.target.value);\n if (index !== -1) {\n setFieldValue(`koppelingen[${c.index}].adviseur.adviseurId`, e.target.value);\n }\n\n const usedAdivseurIds = values.koppelingen.map(koppeling => koppeling.adviseur.adviseurId);\n const update: AdviseurModel[] = values.adviseurs.map(adviseur => {\n if (adviseur.adviseurId === e.target.value) {\n return {\n ...adviseur,\n coupledBemiddelaarId: values.koppelingen[c.index].bemiddelaar.bemiddelaarId\n };\n }\n if (\n usedAdivseurIds.findIndex(usedId => usedId === adviseur.adviseurId) === -1 ||\n (adviseur.adviseurId === prevAdviseurId && prevAdviseurId !== e.target.value)\n ) {\n return {\n ...adviseur,\n coupledBemiddelaarId: \"\"\n };\n }\n\n return adviseur;\n });\n setFieldValue(`adviseurs`, update);\n }}\n name={`koppelingen[${c.index}].adviseur.adviseurId`}\n className=\"grid-cell\"\n options={adviseursOptions ?? { label: \"Geen adviseurs\", value: \"\" }}\n />\n </>\n );\n };\n\n const columns: AdviesBoxColumn[] = [\n {\n id: \"adviseur\",\n Header: \"Adviseur\",\n accessor: \"adviseur\",\n Cell: SelectAdviseurComponentCell,\n maxWidth: 500\n },\n {\n id: \"bemiddelaar\",\n Header: \"Bemiddelaar\",\n accessor: \"bemiddelaar\",\n Cell: SelectBemiddelaarComponentCell,\n maxWidth: 500\n },\n {\n id: \"delete\",\n Cell: \"DeleteButton\"\n }\n ];\n\n return (\n <DataGrid\n columns={columns}\n name=\"koppelingen\"\n sortable={true}\n sortConfig={{\n datum: SortType.Ascending\n }}\n validationSchema={koppelingenSchema}\n showButtonAddRow={\n values.adviseurs.filter(\n advisuer => advisuer.coupledBemiddelaarId === null || advisuer.coupledBemiddelaarId === \"\"\n ).length > 0\n }\n rowCaption=\"Koppeling\"\n getNewRowValues={(): KoppelSchemaType => {\n const advisuerIds: string[] = [];\n const availableAdviseurs: CoupledAdviseurSchemaType[] = [];\n\n values.koppelingen.forEach(koppeling => {\n advisuerIds.push(koppeling.adviseur.adviseurId);\n });\n\n values.adviseurs.forEach(advisuer => {\n if (advisuerIds.includes(advisuer.adviseurId)) {\n return;\n }\n availableAdviseurs.push(advisuer);\n });\n\n if (availableAdviseurs[0]?.adviseurId) {\n const adviseur = values.adviseurs.find(\n (adviseur: CoupledAdviseurSchemaType) => adviseur.adviseurId === availableAdviseurs[0].adviseurId\n );\n if (adviseur) {\n const adviseurIndex = values.adviseurs.indexOf(adviseur ?? {});\n const update = {\n ...values.adviseurs[adviseurIndex],\n coupledBemiddelaarId: values.bemiddelaars[0].bemiddelaarId\n };\n\n if (adviseurIndex > -1) {\n setFieldValue(`adviseurs[${adviseurIndex}]`, update);\n }\n }\n }\n\n const koppelObject = {\n adviseur: {\n adviseurId: availableAdviseurs[0]?.adviseurId ?? \"\",\n naam: availableAdviseurs[0]?.naam ?? \"\",\n emailadres: availableAdviseurs[0]?.emailadres\n },\n bemiddelaar: {\n bemiddelaarId: values.bemiddelaars[0].bemiddelaarId,\n naam: values.bemiddelaars[0].naam,\n emailadres: values.bemiddelaars[0]?.emailadres\n }\n };\n\n return koppelObject;\n }}\n getTdProps={(_state: any, row: any, column: any): { onMouseDown: () => void } | undefined => {\n return uncouple(row.original?.adviseur?.adviseurId, column.id);\n }}\n />\n );\n};\n\nKoppelingDataGrid.displayName = \"KoppelingDataGrid\";\n\nexport default KoppelingDataGrid;\n","import mediaTyper from \"media-typer\";\nimport contentType from \"content-type\";\n\nexport function isJSON(contentTypeHeader?: string | null): boolean {\n if (contentTypeHeader) {\n const ct = contentType.parse(contentTypeHeader);\n\n const mediaType = mediaTyper.parse(ct.type);\n\n if (mediaType.subtype === \"json\") {\n return true;\n }\n\n if (mediaType.suffix === \"json\") {\n return true;\n }\n\n if (mediaType.suffix && /\\bjson\\b/i.test(mediaType.suffix)) {\n return true;\n }\n\n if (mediaType.subtype && /\\bjson\\b/i.test(mediaType.subtype)) {\n return true;\n }\n }\n return false;\n}\n\nexport function hasJSONResponse(response: Response): boolean {\n return isJSON(response.headers.get(\"content-type\"));\n}\n","import { FormikContextType, FormikHelpers } from \"formik\";\nimport { UiError } from \"../types\";\n\nexport const setFormikUiErrors = (errors: UiError[], formik: FormikContextType<any> | FormikHelpers<any>): void => {\n formik.setFieldValue(\"platformApiFouten\", errors);\n\n errors.forEach((element): void => {\n if (element.field) {\n formik.setFieldError(element.field, element.error);\n formik.setFieldTouched(element.field);\n }\n });\n};\n","const pathPartToString = (index: string | number, i: number): string =>\n Number.isInteger(Number(index)) ? `[${index}]` : i === 0 ? `${index}` : `.${index}`;\n/* istanbul ignore file */\nexport const pathToString = (path: (number | string)[]): string => path.map(pathPartToString).join(\"\");\n","import isEqual from \"react-fast-compare\";\nimport { pathToString } from \"./path-to-string-helper\";\n/*istanbul ignore file */\nexport type HasChanged<T> = Extract<T, object> extends never\n ? ChangedProp\n : HasChangedObj<T> & Omit<ChangedProp, keyof T>;\ntype ChangedProp = { changed: boolean };\ntype HasChangedObj<T> = { [P in keyof T]: HasChanged<T[P]> };\n\nconst pathInObjForCompare = (obj: { [index: string]: any }, pathArr: string[], _debug: string): any => {\n let i = 0;\n if (typeof obj !== \"object\") return `pathInObj: ${typeof obj} is not an object`;\n for (; i < pathArr.length - 1; i++) {\n obj = obj[pathArr[i]];\n if (obj === null || typeof obj !== \"object\") {\n return `pathInObj: missing property for path \"${pathToString(pathArr)}\"`;\n }\n }\n\n return obj[pathArr[i]];\n};\n\nconst compare = <T>(curr: Readonly<T>, prev: Readonly<T>, pathArr: string[]): boolean =>\n pathArr.length === 0\n ? !isEqual(curr, prev)\n : !isEqual(pathInObjForCompare(curr, pathArr, \"curr\"), pathInObjForCompare(prev, pathArr, \"prev\"));\n\nfunction hasChangedInternal<T>(pathArr: string[], curr: Readonly<T>, prev: Readonly<T>): HasChanged<T> {\n return new Proxy(\n {},\n {\n get(target: { [index: string]: any }, name: string): HasChanged<T> | boolean {\n if (name === \"changed\" && typeof target[\"changed\"] === \"undefined\") {\n return compare(curr, prev, pathArr);\n }\n return hasChangedInternal([...pathArr, name], curr, prev);\n }\n }\n ) as HasChanged<T>;\n}\nexport function hasChanged<T>(curr: T, prev: T): HasChanged<T> {\n return hasChangedInternal([], curr, prev);\n}\n","/* istanbul ignore file */\n\nimport { logErrorToApplicationInsights, useRequestInit } from \"adviesbox-shared\";\nimport { diff } from \"deep-object-diff\";\nimport { FormikContextType } from \"formik\";\nimport produce, { applyPatches, Patch, produceWithPatches } from \"immer\";\nimport memoize from \"lodash/memoize\";\nimport pDebounce from \"p-debounce\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport isEqual from \"react-fast-compare\";\nimport { RouteParams } from \"../../paramrouting/paramrouting-context\";\nimport { hasJSONResponse } from \"../../utils/ajax\";\nimport { setFormikUiErrors } from \"../../utils/set-formik-ui-errors\";\nimport { validationResultsToUiError } from \"../../utils/validation-results-to-ui-error\";\nimport { createSubBag } from \"./create-isw-helpers\";\nimport { hasChanged } from \"./has-changed-helper\";\nimport {\n forceReturnContext,\n ISWAsyncCondition,\n ISWAsyncContext,\n ISWAsyncSideEffectBag,\n ISWFetchDataParams,\n ISWSideEffect,\n ISWSideEffectWithContext\n} from \"./isw-types\";\nimport { pathToString } from \"./path-to-string-helper\";\n\nconst isDev = process.env.NODE_ENV === \"development\";\n\nlet lastMemo: any;\nconst debounceAsyncSideEffect = memoize(\n <T, X>(context: ISWAsyncContext<T, X>, asyncDebounce: number) => {\n if (lastMemo) /* istanbul ignore next */ clearTimeout(lastMemo);\n lastMemo = setTimeout(\n /* istanbul ignore next */ () => (debounceAsyncSideEffect.cache = new memoize.Cache()),\n 30000 + asyncDebounce\n );\n\n return pDebounce(async (bag: ISWAsyncSideEffectBag<T, X>) => {\n return await context.asyncSideEffect(bag);\n }, asyncDebounce);\n },\n context => contextToKey(context)\n);\n\nexport const useISWSideEffects = <T extends {}>(\n currentFormik: FormikContextType<T>,\n syncEffect?: ISWSideEffect<T> | ISWSideEffectWithContext<T, any>,\n asyncEffect?: ISWAsyncCondition<T>,\n runOnFirstRender?: boolean,\n disablePlatformApiFoutenHandler?: boolean\n): void => {\n const { requestInit, params, settings, user } = useRequestInit<RouteParams>({\n extraHeaders: { \"Content-Type\": \"application/json;charset=UTF-8\" }\n });\n\n const getSyncContext = useCallback(() => (syncEffect ? syncEffect(forceReturnContext as any) : null), [syncEffect]);\n const getASyncContext = useCallback(() => (asyncEffect ? asyncEffect(forceReturnContext as any) : null), [\n asyncEffect\n ]);\n\n const previous = useRef(currentFormik.values);\n const previousSyncContext = useRef<any>(getSyncContext());\n const previousASyncContext = useRef<any>(getASyncContext());\n const abortControllers = useRef<{ [index: string]: AbortController }>({});\n const mounted = useRef<boolean>(true);\n const platformApiFoutenUpdate = useRef<boolean>(false);\n const patchSets = useRef<{ patches: Patch[]; signal: AbortSignal }[]>([]);\n const inverseSets = useRef<Patch[][]>([]);\n const [, rerender] = useState({});\n const firstRender = useRef(true);\n const runBecauseFirstRender = firstRender.current && runOnFirstRender;\n\n useEffect(() => {\n mounted.current = true;\n\n const currentSyncContext = getSyncContext();\n const hasSyncContextChanges = !isEqual(previousSyncContext.current, currentSyncContext);\n previousSyncContext.current = currentSyncContext;\n\n const currentASyncContext = getASyncContext();\n const hasASyncContextChanges = !isEqual(previousASyncContext.current, currentASyncContext);\n previousASyncContext.current = currentASyncContext;\n\n const hasFormikStateChanges = previous.current !== currentFormik.values;\n const hasPatches = patchSets.current.length > 0;\n\n if (platformApiFoutenUpdate.current) {\n devlog(\"Skipping sideEffects because platformApiFoutenUpdate\");\n platformApiFoutenUpdate.current = false;\n return;\n }\n\n if (\n !runBecauseFirstRender &&\n !hasFormikStateChanges &&\n !hasPatches &&\n !hasSyncContextChanges &&\n !hasASyncContextChanges\n )\n return;\n\n isDev &&\n devlog(\n \"Running sideEffects because:\",\n [\n runBecauseFirstRender && \"first render\",\n hasFormikStateChanges && \"formik state changed\",\n hasPatches && \"async patches\",\n hasSyncContextChanges && \"sync context changed\",\n hasASyncContextChanges && \"async context changed\"\n ]\n .filter(f => typeof f === \"string\")\n .join(\", \"),\n hasFormikStateChanges ? diff(previous.current, currentFormik.values) : \"\"\n );\n\n let mustSave = false;\n let appliedPatches = false;\n let next = currentFormik.values;\n\n if (hasPatches) {\n for (let i = patchSets.current.length - 1; i >= 0; i--) {\n try {\n if (!patchSets.current[i].signal.aborted && checkPatches(next, inverseSets.current[i])) {\n isDev && devlog(\"applying async patchset\", merge(patchSets.current[i].patches, inverseSets.current[i]));\n next = applyPatches(next, patchSets.current[i].patches);\n mustSave = true;\n } else {\n isDev &&\n devlog(\"unable to apply async patchset\", merge(patchSets.current[i].patches, inverseSets.current[i]));\n }\n } catch (err) {\n isDev && deverror(\"unexpected error while applying async patchset\", patchSets.current[i], err);\n logErrorToApplicationInsights(err);\n }\n }\n appliedPatches = mustSave;\n patchSets.current = [];\n inverseSets.current = [];\n // TODO: mogelijk nodig om rekening te gaan houden met paralell async (1 gaat fout, ander heeft patch)\n if (appliedPatches) next = { ...next, platformApiFouten: null };\n }\n\n if (syncEffect && (runBecauseFirstRender || hasFormikStateChanges || appliedPatches || hasSyncContextChanges)) {\n const prev = previous.current;\n const [result, changes, inv] = produceWithPatches(next, draft => {\n const has = hasChanged<T>(draft as T, prev);\n const bag = { has, draft, prev, init: currentFormik.initialValues, context: undefined };\n syncEffect({ ...bag, subset: createSubBag([], bag) });\n });\n if (changes.length) {\n isDev &&\n devlog(\n appliedPatches ? \"applying sync patchset (caused by async changes)\" : \"applying sync patchset\",\n merge(changes, inv)\n );\n next = result;\n mustSave = true;\n }\n }\n\n if (\n asyncEffect &&\n (runBecauseFirstRender || hasFormikStateChanges || hasASyncContextChanges || mustSave) &&\n !appliedPatches\n ) {\n const prev = { ...previous.current };\n const hasSync = hasChanged<T>(next, prev);\n const runAsync = (asyncWithContext: ISWAsyncContext<T, any>): void => {\n const key = contextToKey(asyncWithContext);\n if (abortControllers.current[key]) abortControllers.current[key].abort();\n abortControllers.current[key] = new AbortController();\n const signal = abortControllers.current[key].signal;\n /* eslint-disable-next-line @typescript-eslint/no-floating-promises */\n (async (): Promise<void> => {\n try {\n const debouncedAsyncSideEffect = debounceAsyncSideEffect(asyncWithContext, +settings.asyncDebounce);\n let patches: Patch[] = [];\n let inverse: Patch[] = [];\n await produce(\n next,\n async draft => {\n const hasAsync = hasChanged<T>(draft as T, prev);\n const fetchData = fetchDataHelper.bind({\n requestInit: { ...requestInit, signal },\n data: draft,\n formik: currentFormik,\n mounted,\n disablePlatformApiFoutenHandler\n }) as typeof fetchDataHelper;\n const bag = {\n has: hasAsync,\n draft,\n prev,\n init: currentFormik.initialValues,\n signal,\n fetchData,\n params,\n settings,\n user,\n context: asyncWithContext.context,\n formik: currentFormik\n };\n await debouncedAsyncSideEffect(bag);\n },\n (p, i) => {\n if (p.length && !signal.aborted) {\n patches = patches.concat(p);\n inverse = inverse.concat(i);\n }\n }\n );\n if (patches.length && !signal.aborted) {\n patchSets.current.push({ patches, signal });\n inverseSets.current.push(inverse);\n if (mounted.current) rerender({});\n }\n } catch (err) {\n if (err.name === \"AsyncSideEffectError\") platformApiFoutenUpdate.current = true;\n\n if (err.name !== \"AbortError\" && err.name !== \"AsyncSideEffectError\") {\n isDev && deverror(\"unexpected error in async sideeffect:\", asyncWithContext, err);\n logErrorToApplicationInsights(err);\n }\n }\n })();\n };\n asyncEffect({\n has: hasSync,\n curr: next,\n prev,\n init: currentFormik.initialValues,\n context: undefined,\n runAsync\n });\n }\n\n if (mustSave) currentFormik.setValues(next, true);\n previous.current = next;\n firstRender.current = false;\n return (): void => {\n mounted.current = false;\n };\n }, [currentFormik, syncEffect, asyncEffect, requestInit, params, settings, user, rerender, getSyncContext, getASyncContext, runBecauseFirstRender, disablePlatformApiFoutenHandler]);\n};\n\nfunction contextToKey<T, X>({ id, context }: ISWAsyncContext<T, X>): string {\n return JSON.stringify({\n id,\n context\n });\n}\n\nclass AsyncSideEffectError extends Error {\n constructor(...params: any[]) {\n super(...params);\n this.name = \"AsyncSideEffectError\";\n }\n}\nasync function fetchDataHelper<T, B extends { call?: never }, R>(\n this: {\n requestInit: RequestInit;\n data: T;\n formik: FormikContextType<any>;\n mounted: React.MutableRefObject<boolean>;\n disablePlatformApiFoutenHandler?: boolean;\n },\n { url, method, body, extraHeaders, mapperDlNameToUiName }: ISWFetchDataParams<T, B>\n): Promise<R> {\n if (typeof body === \"function\") body = body(this.data);\n\n if (typeof body === \"object\" && body !== null) {\n body = JSON.stringify(body);\n } else if (typeof body !== \"string\") {\n body = undefined;\n }\n\n const headers = {\n ...this.requestInit.headers,\n ...extraHeaders\n };\n\n const rsp = await fetch(url, {\n ...this.requestInit,\n headers: headers,\n method: method ?? \"POST\",\n body: body\n });\n\n if (rsp.ok && rsp.status === 204) return undefined as any;\n\n if (!hasJSONResponse(rsp)) {\n if (!this.mounted.current) throw new Error(\"fout bij tonen van foutmelding: component not mounted\");\n\n const label = `Fout bij aanroep van web-api '${url}'`;\n const error = `Resultaat met status ${rsp.status} bevat geen JSON`;\n setFormikUiErrors([{ field: null, label, error }], this.formik);\n throw new AsyncSideEffectError(label + \": \" + error);\n }\n\n const json = await rsp.json();\n if ((!rsp.ok || json.isValid === false) && !this.disablePlatformApiFoutenHandler) {\n if (!this.mounted.current) throw new Error(\"fout bij tonen validationResults: component not mounted\");\n\n if (json.validationResults instanceof Array) {\n setFormikUiErrors(\n validationResultsToUiError(json.validationResults, mapperDlNameToUiName ?? (() => null)),\n this.formik\n );\n throw new AsyncSideEffectError(\"platform fout\");\n } else {\n const label = `Fout bij aanroep van web-api '${url}'`;\n const error = `Resultaat met status ${rsp.status} bevat geen validationResults`;\n setFormikUiErrors([{ field: null, label, error }], this.formik);\n throw new AsyncSideEffectError(label + \": \" + error);\n }\n }\n\n return json;\n}\n\nfunction checkPatches<T extends object>(next: T, inverse: Patch[]): boolean {\n for (let i = 0; i < inverse.length; i++) {\n const { op, path, value } = inverse[i];\n let target: any = next;\n let j = 0;\n for (; j < path.length - 1; j++) {\n target = target[path[j]];\n if (typeof target !== \"object\") {\n isDev &&\n devlog(\n `patch target \"${pathToString(path)}\" not available because: ${pathToString(\n path.slice(0, j + 1)\n )} is not an object`\n );\n return false;\n }\n }\n const curr = target[path[j]];\n\n if (op === \"remove\" && curr !== undefined) {\n isDev &&\n devlog(\n `patch target \"${pathToString(path)}\" has unexpected value ${curr}, expected value to be empty for adding`\n );\n return false;\n }\n\n if (op !== \"remove\" && !isEqual(curr, value)) {\n isDev && devlog(`patch target \"${pathToString(path)}\" changed to ${curr}, expected: ${value}`);\n return false;\n }\n }\n return true;\n}\ntype MergedPatch = Patch & { prev?: any };\nfunction merge(patches: Patch[], inverse: Patch[]): MergedPatch[] {\n const merged: MergedPatch[] = [];\n for (let i = 0; i < patches.length; i++) {\n if (patches[i].path === inverse[i].path) {\n merged[i] = { ...patches[i], prev: inverse[i].value };\n } else {\n /* istanbul ignore next */\n isDev && deverror(\"patch/inverse patch mismatch: expecting immer to return matching indexes for patch/inverse\");\n /* istanbul ignore next */\n return patches;\n }\n }\n\n return merged;\n}\n\n/*#__PURE__*/\nfunction devlog(...args: any): void {\n /* eslint-disable-next-line no-console */\n if (process.env.NODE_ENV === \"development\") console.log.apply(undefined, args);\n}\n/* istanbul ignore next */\n/*#__PURE__*/\nfunction deverror(...args: any): void {\n /* eslint-disable-next-line no-console */\n if (process.env.NODE_ENV === \"development\") console.log.apply(undefined, args);\n}\n","/* istanbul ignore file */\nimport React, { ReactElement, useContext } from \"react\";\nimport { FormikConsumer, FormikContextType } from \"formik\";\nimport { ISWSideEffect, ISWAsyncCondition, ISWSideEffectWithContext } from \"./isw-types\";\nimport { useISWSideEffects } from \"./use-isw-side-effects\";\nimport { __RouterContext } from \"react-router\";\n\ntype FormikSideEffectProps<T> = {\n sync?: ISWSideEffect<T> | ISWSideEffectWithContext<T, any>;\n async?: ISWAsyncCondition<T, any>;\n runOnFirstRender?: boolean;\n disablePlatformApiFoutenHandler?: boolean;\n};\n\nconst ISWSideEffectChild = <T extends {}>({\n formik,\n sync,\n async,\n runOnFirstRender,\n disablePlatformApiFoutenHandler\n}: FormikSideEffectProps<T> & {\n formik: FormikContextType<T>;\n}): null => {\n useISWSideEffects<T>(formik, sync, async, runOnFirstRender, disablePlatformApiFoutenHandler);\n\n return null;\n};\n\nexport const ISWSideEffects = <T extends {}>({\n sync,\n async,\n runOnFirstRender,\n disablePlatformApiFoutenHandler\n}: FormikSideEffectProps<T>): ReactElement => {\n const hasRouterContext = useContext(__RouterContext);\n\n if (!hasRouterContext) throw new Error(\"Component must be inside a react-router context to use ISWSideEffects\");\n\n return (\n <FormikConsumer>\n {formik => (\n <ISWSideEffectChild\n disablePlatformApiFoutenHandler={disablePlatformApiFoutenHandler}\n sync={sync}\n async={async}\n runOnFirstRender={runOnFirstRender}\n formik={formik}\n />\n )}\n </FormikConsumer>\n );\n};\n","import React, { ReactElement, useContext } from \"react\";\nimport { CardWrapper, Card, FormFirstFocus } from \"adviesbox-shared\";\nimport { KoppelingProps, KoppelingState, koppelingenSchema, KoppelingType } from \"./infra\";\nimport { koppelingAsyncSideEffects } from \"./infra/determine-koppeling-async-side-effects\";\nimport KoppelingDataGrid from \"./koppelingdatagrid/koppelingDataGrid\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { Form, FormikProps, useFormikContext } from \"formik\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { ISWSideEffects } from \"../shared/components/isw-side-effects/isw-side-effects\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Koppelingscherm = (props: FormikProps<KoppelingState>): ReactElement => {\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { values, setFieldValue } = useFormikContext<KoppelingState>();\n /*istanbul ignore next */\n const saveEditedData = (): void => {\n setFieldValue(`update`, !values.update);\n };\n\n return (\n <FormFirstFocus>\n <Form>\n <fieldset\n disabled={\n !(isBeheerder || autorisatieNiveau.generiekeKoppelingenNiveau === InstellingNiveauOptions.Medewerker)\n }\n >\n <ISWSideEffects<KoppelingType> async={koppelingAsyncSideEffects} />\n <CardWrapper className=\"px-3\">\n <div className=\"text-container\">\n <h2>{\"Koppeling adviseur & bemiddelaar\"}</h2>\n <div className=\"save-btn-position\">\n <SaveButton context={{ ...props, saveData: saveEditedData }} />\n </div>\n </div>\n </CardWrapper>\n <CardWrapper className=\"px-3\" maxRowCount={4}>\n <Card title={`Koppeling adviseur & bemiddelaar`} className=\" w-md-50 w-50\">\n <div>\n <p>\n Je kunt hier een standaardkoppeling tussen adviseur en bemiddelaar toevoegen. Als je hier een adviseur\n aan een bemiddelaar koppelt zullen de adviesdossiers bij het aanvragen direct gekoppeld worden aan de\n genoemde bemiddelaar. Als de adviseur niet in onderstaande lijst staat moet de adviseur bij elke\n aanvraag een bemiddelaar selecteren.\n </p>\n <p>Let op; een adviseur kan maximaal Ć©Ć©n keer gekoppeld worden aan een bemiddelaar.</p>\n </div>\n <KoppelingDataGrid />\n </Card>\n </CardWrapper>\n </fieldset>\n <Debug />\n </Form>\n </FormFirstFocus>\n );\n};\n\n/*istanbul ignore next */\nKoppelingscherm.displayName = \"Koppelingscherm\";\nexport default withAdviesboxFormik<KoppelingProps, KoppelingState>({\n // Transform outer props into form values\n mapPropsToValues: (e: KoppelingProps): KoppelingState => e,\n validationSchema: koppelingenSchema\n})(Koppelingscherm);\n","import { ErrorPage, PageLoading, SettingsType, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport { useAdviesboxData } from \"../shared/hooks/use-adviesbox-data\";\nimport { mapDlTargetToKoppelingUiField } from \"./infra/map-koppeling-dl-target-to-ui-field\";\nimport { mapKoppelingDlNaarUi } from \"./infra/map-koppeling-dl-to-ui\";\nimport { Ui2dlKoppeling } from \"./infra/map-koppeling-ui-to-dl\";\nimport Koppelingscherm from \"./koppelingscherm\";\n\ntype RouteParams = {\n vestiging: string;\n adviesdossier: string;\n};\n\nconst createUrl = (s: SettingsType, p: RouteParams): string => `${s.klantdossiersBemiddelingOrigin}/Bemiddelaar?actief=true`;\n\nexport const KoppelingAjax = (): ReactElement => {\n const { loading, error, data } = useAdviesboxData(\n createUrl,\n p => p.vestiging,\n mapKoppelingDlNaarUi,\n Ui2dlKoppeling,\n mapDlTargetToKoppelingUiField\n );\n\n if (error) {\n return <ErrorPage error={error} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n return <Koppelingscherm {...data} />;\n};\nKoppelingAjax.displayName = \"KoppelingAjax\";\nexport default withErrorBoundary(KoppelingAjax);\n","import * as Yup from \"yup\";\nimport { InferType } from \"yup\";\n\nexport const meenemenSchema = Yup.object({\n kredietlasten: Yup.boolean().default(false),\n erfpacht: Yup.boolean().default(false),\n servicekosten: Yup.boolean().default(false),\n financieringskosten: Yup.boolean().default(false),\n boeterente: Yup.boolean().default(false),\n gespreideBetaling: Yup.boolean().default(false)\n});\n\nexport const verrekenenSchema = Yup.object({\n uitkeringenFinancieleDekkingen: Yup.boolean().default(false),\n aflossingenHypotheek: Yup.boolean().default(false),\n aanvangsstortingen: Yup.boolean().default(false),\n extraStortingen: Yup.boolean().default(false),\n onttrekkingen: Yup.boolean().default(false),\n extraOpnames: Yup.boolean().default(false),\n jaar1AlleenNieuweSituatie: Yup.boolean().default(false)\n});\n\nexport const lastenoverzichtSchema = Yup.object({\n meenemen: meenemenSchema,\n verrekenen: verrekenenSchema\n});\n\nexport type LastenoverzichtState = InferType<typeof lastenoverzichtSchema>;\nexport type LastenoverzichtProps = InferType<typeof lastenoverzichtSchema>;\n\nexport type MeenemenType = InferType<typeof meenemenSchema>;\nexport type VerrekenenType = InferType<typeof verrekenenSchema>;\n","import { createGetTextResources } from \"../../shared/utils/text-resources-algemeen\";\n\nexport const getLastenoverzichtTextResources = createGetTextResources({\n TooltipJaar1AlleenNieuweSituatie:\n \" Met deze instelling op 'ja' worden alleen de lasten vanaf de ingangsdatum van het nieuwe advies meegenomen in de lastenoverzichten. Loopt het advies bijvoorbeeld nog 6 maanden in het huidige kalenderjaar dan worden de lasten van die 6 maanden opgeteld en gedeeld door 6. \\nStaat de instelling op 'nee' dan worden de huidige lasten tot aan de ingangsdatum van het nieuwe advies ook meegenomen in de lastenoverzichten.\\nBij een ingangsdatum van 1 juli worden de 6 maanden huidige lasten en 6 maanden nieuwe lasten opgeteld bij elkaar en gedeeld door 12. Let op! Deze instelling heeft alleen invloed op de lastenoverzichten. Netto besteedbaar inkomen blijft over het gehele kalenderjaar genomen worden.\"\n});\n","import { target2field } from \"../../shared/utils/target-to-field\";\nimport { FieldMap, UiName } from \"../../shared/types\";\n\nexport function mapDlTargetToLastenoverzichtUiField(target: string): UiName | null {\n const map: FieldMap<any> = {};\n\n return target2field(map, target);\n}\n","import {\n lastenoverzichtSchema,\n LastenoverzichtState,\n meenemenSchema,\n verrekenenSchema\n} from \"./lastenoverzicht-schema\";\nimport {\n Lastenoverzicht,\n LastenoverzichtMeenemen,\n LastenoverzichtOutput,\n LastenoverzichtVerrekenen\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\n\nconst mapMeenemen = createMapToUi(meenemenSchema).from<LastenoverzichtMeenemen>({\n boeterente: v => v.boeterente,\n erfpacht: v => v.erfpacht,\n financieringskosten: v => v.financieringskosten,\n gespreideBetaling: v => v.gespreideBetaling,\n kredietlasten: v => v.kredietlasten,\n servicekosten: v => v.servicekosten\n});\nconst mapVerrekenen = createMapToUi(verrekenenSchema).from<LastenoverzichtVerrekenen>({\n aanvangsstortingen: v => v.aanvangsstortingen,\n aflossingenHypotheek: v => v.aflossingenHypotheek,\n extraOpnames: v => v.extraOpnames,\n extraStortingen: v => v.extraStortingen,\n jaar1AlleenNieuweSituatie: v => v.jaar1AlleenNieuweSituatie,\n onttrekkingen: v => v.onttrekkingen,\n uitkeringenFinancieleDekkingen: v => v.uitkeringenFinancieleDekkingen\n});\n\nconst mapLastenoverzicht = createMapToUi(lastenoverzichtSchema).from<Lastenoverzicht>({\n meenemen: v => mapMeenemen(v.meenemenInLastenoverzicht),\n verrekenen: v => mapVerrekenen(v.verrekenenInLasten)\n});\n\nexport function mapLastenoverzichtDlToUi(data: LastenoverzichtOutput): LastenoverzichtState | null {\n const lastenoverzicht = data?.lastenoverzicht ?? null;\n\n if (!lastenoverzicht) {\n return null;\n }\n\n return mapLastenoverzicht(lastenoverzicht);\n}\n","import { lastenoverzichtSchema, meenemenSchema, verrekenenSchema } from \"./lastenoverzicht-schema\";\nimport {\n Lastenoverzicht,\n LastenoverzichtMeenemen,\n LastenoverzichtVerrekenen\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\n\nconst mapMeenemen = createMapToDl(meenemenSchema).to<LastenoverzichtMeenemen>({\n boeterente: v => v.boeterente,\n erfpacht: v => v.erfpacht,\n financieringskosten: v => v.financieringskosten,\n gespreideBetaling: v => v.gespreideBetaling,\n kredietlasten: v => v.kredietlasten,\n servicekosten: v => v.servicekosten\n});\n\nconst mapVerrekenen = createMapToDl(verrekenenSchema).to<LastenoverzichtVerrekenen>({\n aanvangsstortingen: v => v.aanvangsstortingen,\n aflossingenHypotheek: v => v.aflossingenHypotheek,\n extraOpnames: v => v.extraOpnames,\n extraStortingen: v => v.extraStortingen,\n jaar1AlleenNieuweSituatie: v => v.jaar1AlleenNieuweSituatie,\n onttrekkingen: v => v.onttrekkingen,\n uitkeringenFinancieleDekkingen: v => v.uitkeringenFinancieleDekkingen\n});\n\nexport const mapLastenoverzichtUiToDl = createMapToDl(lastenoverzichtSchema).to<Lastenoverzicht>({\n meenemenInLastenoverzicht: v => mapMeenemen(v.meenemen),\n verrekenenInLasten: v => mapVerrekenen(v.verrekenen)\n});\n","import React, { ReactElement } from \"react\";\nimport { connect } from \"formik\";\nimport { CheckBox } from \"adviesbox-shared\";\nimport { LastenoverzichtState } from \"../infra\";\n\nconst Meenemen = (): ReactElement => {\n return (\n <div className=\"px-1\">\n <div>\n <CheckBox caption=\"Kredietlasten\" name=\"meenemen.kredietlasten\"></CheckBox>\n <CheckBox caption=\"Erfpacht\" name=\"meenemen.erfpacht\"></CheckBox>\n <CheckBox caption=\"Servicekosten\" name=\"meenemen.servicekosten\"></CheckBox>\n <CheckBox caption=\"Financieringskosten\" name=\"meenemen.financieringskosten\"></CheckBox>\n <CheckBox caption=\"Boeterente\" name=\"meenemen.boeterente\"></CheckBox>\n <CheckBox\n caption=\"Gespreide betaling advieskosten en bemiddelingsvergoeding\"\n name=\"meenemen.gespreideBetaling\"\n ></CheckBox>\n </div>\n </div>\n );\n};\n\nexport default connect<{}, LastenoverzichtState>(Meenemen);\n","import React, { ReactElement } from \"react\";\nimport { connect } from \"formik\";\nimport { CheckBox, LabeledBevestigingInput } from \"adviesbox-shared\";\nimport { LastenoverzichtState, getLastenoverzichtTextResources } from \"../infra\";\n\nconst Verrekenen = (): ReactElement => {\n return (\n <div className=\"px-1\">\n <div>\n <CheckBox\n caption=\"Uitkeringen uit financiĆ«le dekkingen\"\n name=\"verrekenen.uitkeringenFinancieleDekkingen\"\n ></CheckBox>\n <CheckBox\n caption=\"Aflossingen hypotheek (niet zijnde: annuĆÆtair en lineair)\"\n name=\"verrekenen.aflossingenHypotheek\"\n ></CheckBox>\n <CheckBox caption=\" Aanvangsstortingen / eerste inleg\" name=\"verrekenen.aanvangsstortingen\"></CheckBox>\n <CheckBox caption=\"Extra stortingen\" name=\"verrekenen.extraStortingen\"></CheckBox>\n <CheckBox caption=\"Onttrekkingen\" name=\"verrekenen.onttrekkingen\"></CheckBox>\n <CheckBox caption=\"Extra opnames\" name=\"verrekenen.extraOpnames\"></CheckBox>\n <LabeledBevestigingInput\n caption=\"1e jaar alleen nieuwe situatie tonen\"\n name=\"verrekenen.jaar1AlleenNieuweSituatie\"\n tooltip={getLastenoverzichtTextResources(\"TooltipJaar1AlleenNieuweSituatie\")}\n ></LabeledBevestigingInput>\n </div>\n </div>\n );\n};\n\nexport default connect<{}, LastenoverzichtState>(Verrekenen);\n","import React, { ReactElement, useContext } from \"react\";\nimport { FormikProps, Form } from \"formik\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { Card, CardWrapper, PlatformFoutenSamenvatting } from \"adviesbox-shared\";\n\nimport { SaveButton } from \"../save-button/save-button\";\nimport { LastenoverzichtState, LastenoverzichtProps, lastenoverzichtSchema } from \"./infra\";\n\nimport Meenemen from \"./meenemen/meenemen\";\nimport Verrekenen from \"./verrekenen/verrekenen\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { AutorisatieNiveauManager } from \"../autorisatieniveau-manager/autorisatieniveau-manager\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Lastenoverzicht = (\n props: FormikProps<LastenoverzichtState> & WithSaveData<LastenoverzichtState>\n): ReactElement => {\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n return (\n <Form>\n <PlatformFoutenSamenvatting />\n\n <fieldset\n disabled={!(isBeheerder || autorisatieNiveau.lastenoverzichtenNiveau === InstellingNiveauOptions.Medewerker)}\n >\n <CardWrapper className=\"px-3\">\n <div className=\"text-container\">\n <h2>Lastenoverzicht</h2>\n <AutorisatieNiveauManager manageFor={autorisatieNiveau.lastenoverzichtenNiveau} />\n <SaveButton context={props} />\n </div>\n </CardWrapper>\n <CardWrapper>\n <Card title=\"Meenemen in lastenoverzicht\">\n <Meenemen />\n </Card>\n <Card title=\"Verrekenen in lasten\">\n <Verrekenen />\n </Card>\n </CardWrapper>\n </fieldset>\n\n {/* istanbul ignore next */\n process.env.NODE_ENV === \"development\" && <Debug />}\n </Form>\n );\n};\n\nLastenoverzicht.displayName = \"Lastenoverzicht\";\n\nexport default withAdviesboxFormik<LastenoverzichtProps & WithSaveData<LastenoverzichtState>, LastenoverzichtState>({\n // Transform outer props into form values\n mapPropsToValues: (e: LastenoverzichtProps): LastenoverzichtState => e,\n validationSchema: lastenoverzichtSchema\n})(Lastenoverzicht);\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport { mapDlTargetToLastenoverzichtUiField, mapLastenoverzichtDlToUi, mapLastenoverzichtUiToDl } from \"./infra\";\nimport Lastenoverzicht from \"./lastenoverzicht\";\n\nconst LastenoverzichtAjax = (): ReactElement => {\n // TODO: replace useRequestInit/useAbortableFetch with useAdviesboxData\n\n const { params, requestInit, settings, user } = useRequestInit();\n\n const url = `${settings.instellingenFormsOrigin}/Lastenoverzicht`;\n const { loading, error, data } = useAbortableFetch<any>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapLastenoverzichtDlToUi(data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <Lastenoverzicht\n saveData={saveData(\n user,\n params.vestiging ?? \"\",\n url,\n settings.OcpApimSubscriptionKey,\n mapLastenoverzichtUiToDl,\n mapDlTargetToLastenoverzichtUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nLastenoverzichtAjax.displayName = \"lastenoverzichtAjax\";\n\nexport default withErrorBoundary(LastenoverzichtAjax);\n","//----------------------\n// <auto-generated>\n// Generated using the NSwag toolchain v13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\n// </auto-generated>\n//----------------------\n\n/* tslint:disable */\n/* eslint-disable */\n// ReSharper disable InconsistentNaming\n\n\n\n/** Bevat de inhoud van het Adviesbox-form Aanleiding. */\nexport interface Aanleiding {\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n financiering: FinancieringOptions;\n /** Tweede woning (box 3) */\n tweedeWoning: boolean | null;\n /** Indicatie dat er huidige woningen in eigendom aanwezig zijn in het adviesdossier */\n huidigeWoningenInEigendomAanwezig: boolean;\n /** Geselecteerde keuzes onder 'FinanciĆ«le planning' */\n financielePlanningKeuzes: FinancielePlanningKeuze[] | null;\n /** Geselecteerde keuzes onder 'Aanleiding gesprek' */\n aanleidingen: AanleidingBasis[] | null;\n /** Voorstellen (maximaal 3) */\n voorstellen: AanleidingVoorstel[] | null;\n}\n\n/** Bevat basisgegevens van een aanleiding voor het adviesgesprek. */\nexport interface AanleidingBasis {\n aanleidingGesprek: AanleidingGesprekOptions | null;\n /** Omschrijving van aanleiding, indien gekozen is voor AanleidingGesprek 'overig' */\n omschrijving: string | null;\n}\n\n/** AanleidingGesprekOptions Geen = 0, Verbouwing = 1, AfkoopErfpacht = 2, ExtraAflossen = 3, Echtscheiding = 4, EindeRentevastperiode = 5, AflossingsvormAanpassen = 6, MaandlastenVerlichting = 7, Risicoscan = 8, Vermogensadvies = 9, Controlegesprek = 10, FinancieringWoning = 11, Overig = 99 */\nexport enum AanleidingGesprekOptions {\n Geen = \"Geen\",\n Verbouwing = \"Verbouwing\",\n AfkoopErfpacht = \"AfkoopErfpacht\",\n ExtraAflossen = \"ExtraAflossen\",\n Echtscheiding = \"Echtscheiding\",\n EindeRentevastperiode = \"EindeRentevastperiode\",\n AflossingsvormAanpassen = \"AflossingsvormAanpassen\",\n MaandlastenVerlichting = \"MaandlastenVerlichting\",\n Risicoscan = \"Risicoscan\",\n Vermogensadvies = \"Vermogensadvies\",\n Controlegesprek = \"Controlegesprek\",\n FinancieringWoning = \"FinancieringWoning\",\n Overig = \"Overig\",\n}\n\n/** Bevat de gegevens van een voorstel in het scherm Aanleiding. */\nexport interface AanleidingVoorstel {\n /** Unieke identificatie van het voorstel (analyse). */\n voorstelId: string | null;\n /** Unieke identificatie van het voorstel (analyse) waarvan een kopie moet worden gemaakt */\n kopieVanVoorstelId: string | null;\n /** Naam van het voorstel */\n omschrijving: string | null;\n /** Volgnummer van het voorstel */\n readonly volgnummer: number | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Aanleiding. */\nexport interface AanleidingenOutput {\n /** Lijst met de inhoud van het Adviesbox-form Aanleiding per adviesdossier. */\n aanleidingen: { [key: string]: Aanleiding; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** AanpassingRenteOptions DirectBijLagereLtv = 1, NaEindeRentevastperiode = 3 */\nexport enum AanpassingRenteOptions {\n DirectBijLagereLtv = \"DirectBijLagereLtv\",\n NaEindeRentevastperiode = \"NaEindeRentevastperiode\",\n}\n\nexport interface Aanvraag {\n hypotheek: AanvraagHypotheek | null;\n orv: AanvraagVerzekering[] | null;\n aov: AanvraagVerzekering[] | null;\n bankgarantie: AanvraagBankgarantie | null;\n taxatie: AanvraagTaxatie | null;\n readonly serviceproviders: ServiceproviderReadOnly[] | null;\n readonly softwareKoppelingen: SoftwareKoppelingReadOnly[] | null;\n readonly voorstellen: AanvraagVoorstel[] | null;\n externeReferentie: string | null;\n}\n\nexport interface AanvraagBankgarantie {\n readonly hoofdsom: number | null;\n hdnNummer: number | null;\n readonly partijcode: string | null;\n readonly hdnOntvangerCode: string | null;\n readonly partijnaam: string | null;\n productcode: number;\n readonly productnaam: string | null;\n productId: string;\n voorstel: number;\n versie: number;\n meenemenNaarBemiddeling: boolean | null;\n aanvraagVerzonden: boolean;\n}\n\nexport interface AanvraagHypotheek {\n looptijdMaanden: number;\n readonly leningdelen: AanvraagLeningdeel[] | null;\n aanvraagNaarPartij: boolean | null;\n aanvraagNaarServiceproviderId: string | null;\n hdnNummer: number | null;\n aanvraagNaarSoftwareKoppelingId: string | null;\n readonly partijcode: string | null;\n readonly hdnOntvangerCode: string | null;\n readonly partijnaam: string | null;\n productcode: number;\n readonly productnaam: string | null;\n productId: string;\n voorstel: number;\n versie: number;\n meenemenNaarBemiddeling: boolean | null;\n aanvraagVerzonden: boolean;\n}\n\nexport interface AanvraagLeningdeel {\n aflossingsvorm: AflossingsVormType;\n productcode: number;\n readonly productnaam: string | null;\n readonly hoofdsom: number | null;\n}\n\nexport interface AanvraagTaxatie {\n hdnNummer: number | null;\n readonly partijcode: string | null;\n readonly hdnOntvangerCode: string | null;\n readonly partijnaam: string | null;\n productcode: number;\n readonly productnaam: string | null;\n productId: string;\n voorstel: number;\n versie: number;\n meenemenNaarBemiddeling: boolean | null;\n aanvraagVerzonden: boolean;\n}\n\nexport interface AanvraagVerzekerde {\n persoonId: string;\n volgnummer: number;\n readonly naamVerzekerde: string | null;\n}\n\nexport interface AanvraagVerzekering {\n readonly premie: number | null;\n readonly verzekerden: AanvraagVerzekerde[] | null;\n aanvraagNaarPartij: boolean | null;\n aanvraagNaarServiceproviderId: string | null;\n hdnNummer: number | null;\n aanvraagNaarSoftwareKoppelingId: string | null;\n readonly partijcode: string | null;\n readonly hdnOntvangerCode: string | null;\n readonly partijnaam: string | null;\n productcode: number;\n readonly productnaam: string | null;\n productId: string;\n voorstel: number;\n versie: number;\n meenemenNaarBemiddeling: boolean | null;\n aanvraagVerzonden: boolean;\n}\n\nexport interface AanvraagVoorstel {\n readonly voorstelNaam: string | null;\n readonly voorstelId: string | null;\n readonly geselecteerd: boolean | null;\n}\n\nexport interface AanvragenOutput {\n aanvragen: { [key: string]: Aanvraag; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de uitvoer van het exporteren van een adviesdossier naar abox. */\nexport interface AboxExportOutput {\n /** Het gegenereerde abox-bestand */\n resultaat: string | null;\n /** De (default) bestandsnaam */\n filename: string | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de inhoud van het Adviesbox-form Acceptatie. */\nexport interface Acceptatie {\n hypotheek: AcceptatieHypotheek | null;\n zuiverNhg: AcceptatieHypotheek | null;\n indicatie: AcceptatieIndicatie | null;\n aanvrager1: AcceptatieAanvrager | null;\n aanvrager2: AcceptatieAanvrager | null;\n /** De naam van de geldverstrekker die in het Form Hypotheek geselecteerd is. */\n readonly geldverstrekkerNaam: string | null;\n}\n\n/** Bevat gegevens van de aanvrager (klant). */\nexport interface AcceptatieAanvrager {\n /** Toetsinkomen van aanvrager */\n readonly brutoInkomenBedrag: number | null;\n /** Hinttekst bij Bruto inkomen */\n readonly hintTekst: string | null;\n klantId: string;\n readonly achternaam: string | null;\n readonly voorvoegsel: string | null;\n readonly voorletters: string | null;\n readonly voornamen: string | null;\n geslacht: GeslachtOpties | null;\n readonly roker: boolean | null;\n readonly geboortedatum: string | null;\n readonly aowdatum: string | null;\n}\n\n/** Bevat de gegevens van de (verplichte) extra aflossing voor een bepaalde periode. */\nexport interface AcceptatieExtraAflossingPeriode {\n /** Periode (van t/m maand) */\n readonly periode: string | null;\n /** Verplichte extra aflossing */\n verplichteAflossingBedrag: number;\n /** Mogelijke extra aflossing */\n mogelijkeAflossingBedrag: number;\n /** Looptijd (mnd) */\n looptijdInMaanden: number;\n /** Rente */\n rentePercentage: number;\n}\n\n/** Bevat gegevens van 'Hypotheek bij...'. */\nexport interface AcceptatieHypotheek {\n /** Krediet toetslast per jaar */\n readonly kredietToetslastBedrag: number | null;\n /** Marktwaarde */\n readonly marktwaardeBedrag: number | null;\n /** Erfpachtcanon */\n erfpachtBedrag: number;\n /** Doorlopende hypotheken */\n doorlopendeHypothekenBedrag: number;\n /** Gewenste hypotheek */\n readonly gewensteHypotheekBedrag: number | null;\n /** Totaal gevraagde hypotheek */\n readonly totaalGevraagdeHypotheekBedrag: number | null;\n /** Indicatie meer/minder lenen (contante waarde) */\n readonly indicatieMeerLenenBedrag: number | null;\n /** Toetsrente */\n readonly toetsrentePercentage: number | null;\n /** Woonquote */\n readonly woonquotePercentage: number | null;\n /** Fictieve jaarlast */\n readonly fictieveJaarlastBedrag: number | null;\n /** Toegestane jaarlast */\n readonly toegestaneJaarlastBedrag: number | null;\n /** Maximale hypotheek o.b.v. inkomen en lasten */\n readonly maximaleHypotheekInkomenBedrag: number | null;\n /** Indicatie of \"Maximale hypotheek o.b.v. inkomen en lasten\" goedgekeurd is */\n maximaleHypotheekInkomenIndicatie: boolean;\n /** Maximale hypotheek o.b.v. onderpand en lening */\n readonly maximaleHypotheekOnderpandBedrag: number | null;\n /** Indicatie of \"Maximale hypotheek o.b.v. onderpand en lening\" goedgekeurd is */\n maximaleHypotheekOnderpandIndicatie: boolean;\n /** Maximale hypotheek o.b.v. NHG voorwaarden */\n readonly maximaleHypotheekNhgBedrag: number | null;\n /** Indicatie of \"Maximale hypotheek o.b.v. NHG voorwaarden\" goedgekeurd is */\n maximaleHypotheekNhgIndicatie: boolean;\n /** Uitwerking meer/minder lenen (periodes) */\n readonly meerLenenPeriodes: AcceptatieMeerLenenPeriode[] | null;\n /** Specificatie extra aflossing */\n readonly extraAflossingPeriodes: AcceptatieExtraAflossingPeriode[] | null;\n}\n\n/** Bevat indicatie-gegevens van 'Acceptatie'. */\nexport interface AcceptatieIndicatie {\n indicatie: IndicatieOptions | null;\n /** Indicatie of er een waarschuwing getoond moet worden dat de maximale hypotheek o.b.v. inkomen en lasten\ngelijk is aan de maximale hypotheek in box 3. */\n toonWaarschuwingMaxHypotheekIsMaxHypotheekBox3: boolean;\n /** Toelichting (regels) */\n readonly toelichtingRegels: AcceptatieToelichtingRegel[] | null;\n /** Voetnoten (regels) */\n readonly voetnoten: AcceptatieVoetnoot[] | null;\n}\n\n/** Bevat de gegevens van de indicatie meer/minder lenen voor een bepaalde periode. */\nexport interface AcceptatieMeerLenenPeriode {\n /** Periode (van t/m maand) */\n readonly periode: string | null;\n /** Toegestane maandlast */\n toegestaneMaandlastBedrag: number;\n /** Ink. aanvrager */\n inkomenAanvrager1Bedrag: number;\n /** Ink. partner */\n inkomenAanvrager2Bedrag: number;\n /** Vrij te besteden vermogen */\n vrijVermogenBedrag: number;\n /** Toetsrente */\n toetsrentePercentage: number;\n /** Woonquote (vervallen) */\n woonquotePercentage: number;\n /** Woonquote box 1 */\n woonquoteBox1Percentage: number;\n /** Woonquote box 3 */\n woonquoteBox3Percentage: number;\n /** Maandlast uit voorstel box 1 */\n maandlastVoorstelBox1Bedrag: number;\n /** Maandlast uit voorstel box 3 */\n maandlastVoorstelBox3Bedrag: number;\n /** Beschikbare ruimte */\n ruimteBedrag: number;\n /** Beschikbare ruimte */\n werkelijkeMaandlast: number;\n /** Aaanvang datum periode */\n readonly startDatum: string | null;\n /** Einddatum periode */\n readonly eindDatum: string | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Acceptatie. */\nexport interface AcceptatieOutput {\n /** Lijst met de inhoud van het Adviesbox-form Acceptatie per voorstel. */\n acceptaties: { [key: string]: Acceptatie; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat een toelichtingsregel van de indicatie. */\nexport interface AcceptatieToelichtingRegel {\n /** Tekst van de toelichting */\n readonly toelichting: string | null;\n}\n\n/** Bevat een voetnoot ter onderbouwing van de acceptatie-uitslag. */\nexport interface AcceptatieVoetnoot {\n /** Tekst van de voetnoot */\n readonly voetnoot: string | null;\n}\n\n/** Bevat adresgegevens. */\nexport interface Adres {\n /** Straatnaam */\n straat: string | null;\n /** Huisnummer (het numerieke deel van het huisnummer) */\n huisnummer: number | null;\n /** Huisnummer toevoeging (het niet-numerieke deel van het huisnummer) */\n toevoeging: string | null;\n /** Postcode */\n postcode: string | null;\n /** De locatieaanduiding. Wordt veelal gebuikt bij bedrijfscomplexen (bijv. toren II). */\n locatie: string | null;\n /** Plaatsnaam */\n plaats: string | null;\n /** Land (identificatie) */\n landCode: string | null;\n}\n\n/** De gegevens van een adres (niet te wijzigen) */\nexport interface AdresReadOnly {\n /** Straatnaam */\n readonly straat: string | null;\n /** Huisnummer (het numerieke deel van het huisnummer) */\n readonly huisnummer: number | null;\n /** Huisnummer toevoeging (het niet-numerieke deel van het huisnummer) */\n readonly toevoeging: string | null;\n /** Postcode */\n readonly postcode: string | null;\n /** De locatieaanduiding. Wordt veelal gebuikt bij bedrijfscomplexen (bijv. toren II). */\n readonly locatie: string | null;\n /** Plaatsnaam */\n readonly plaats: string | null;\n /** Land (identificatie) */\n readonly landCode: string | null;\n}\n\n/** Advies eigenaar output model */\nexport interface AdviesEigenaarOutput {\n /** Id van de adviseur */\n adviseurId: string;\n /** Persoonsgegevens van de adviseur */\n naam: string | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface AdviesNotificatie {\n rapportId: string;\n adviesDossierId: string | null;\n readonly uniqueIdentification: string | null;\n adviseurId: string;\n vestigingId: string;\n content: string | null;\n aanmaakdatum: string | null;\n isGelezen: boolean;\n redirectPagina: string | null;\n}\n\n/** Gegevens van een adviesdossier. Alleen de korte en lange omschrijving zijn nodig. */\nexport interface AdviesdossierOmschrijvingen {\n /** Korte omschrijving van het advies */\n korteOmschrijving: string | null;\n /** Lange/uitgebreide omschrijving van het advies */\n langeOmschrijving: string | null;\n}\n\n/** Gegevens van een adviesdossier. */\nexport interface AdviesdossierOutput {\n adviesdossier: AdviesdossierOmschrijvingen | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Output voor Toegang : AdviesdossierRechten */\nexport interface AdviesdossierRechtenOutput {\n /** Wel of geen toegang */\n adviesdossierIds: string[] | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Gegevens voor het bijwerken van de status van een adviesdossier */\nexport interface AdviesdossierStatus {\n status: AdviesdossierStatusOptions;\n}\n\n/** AdviesdossierStatusOptions Nieuw = 0, InBehandeling = 1, Afgerond = 2, Vervallen = 3 */\nexport enum AdviesdossierStatusOptions {\n Nieuw = \"Nieuw\",\n InBehandeling = \"InBehandeling\",\n Afgerond = \"Afgerond\",\n Vervallen = \"Vervallen\",\n}\n\n/** Output voor Toegang : Wijzigen eigenaar adviesdossier */\nexport interface AdviesdossierWijzigenEigenaar {\n /** Overzetten naar nieuwe eigenaar succesvol? */\n overgezet: boolean;\n /** Heeft vorige eigenaar nog toegang? */\n voorgaandeEigenaarUitsluiten: boolean;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Gegevens van de adviseur */\nexport interface AdviseurOutput {\n /** Lijst met adviseurs en gekoppelde vestigingen */\n adviseurs: AdviseurVestiging[] | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Adviseur met gekoppelde vestiging */\nexport interface AdviseurVestiging {\n /** ID van de adviseur */\n adviseurId: string;\n /** ID van de gekoppelde vestiging */\n vestigingId: string;\n}\n\nexport interface Aflosproduct {\n soortAflosproduct: SoortAflosproductOptions;\n productId: string;\n volgnummer: number;\n readonly omschrijving: string | null;\n aflossen: boolean;\n prioriteit: number | null;\n readonly ingangsdatum: string | null;\n readonly looptijdInMaanden: number | null;\n readonly doorlopend: boolean | null;\n}\n\n/** AflossingsVormType Geen = 0, AnnuĆÆteit = 1, Lineair = 2, Levensverzekering = 3, Spaar = 4, Aflosvrij = 5, Krediet = 9, Belegging = 10, Hybride = 11, UnitLinked = 12, Spaarrekening = 13, AnnuĆÆteitUitgesteld = 20, AnnuĆÆteitBlok = 21, KredietNoPay = 22 */\nexport enum AflossingsVormType {\n Geen = \"Geen\",\n AnnuĆÆteit = \"AnnuĆÆteit\",\n Lineair = \"Lineair\",\n Levensverzekering = \"Levensverzekering\",\n Spaar = \"Spaar\",\n Aflosvrij = \"Aflosvrij\",\n Krediet = \"Krediet\",\n Belegging = \"Belegging\",\n Hybride = \"Hybride\",\n UnitLinked = \"UnitLinked\",\n Spaarrekening = \"Spaarrekening\",\n AnnuĆÆteitUitgesteld = \"AnnuĆÆteitUitgesteld\",\n AnnuĆÆteitBlok = \"AnnuĆÆteitBlok\",\n KredietNoPay = \"KredietNoPay\",\n}\n\n/** AoBeoordelingscriterium Geen = 0, PassendeArbeid = 1, GangbareArbeid = 2, Beroeps = 3 */\nexport enum AoBeoordelingscriterium {\n Geen = \"Geen\",\n PassendeArbeid = \"PassendeArbeid\",\n GangbareArbeid = \"GangbareArbeid\",\n Beroeps = \"Beroeps\",\n}\n\n/** Ao-dekking */\nexport interface AoDekkingBedragen {\n /** Collectie van verzekerde bedragen per jaar */\n readonly verzekerdeBedragen: VerzekerdBedrag[] | null;\n}\n\nexport interface AoIndexering {\n volgnummer: number;\n ondergrensPercentage: number | null;\n bovengrensPercentage: number | null;\n uitkeringPercentage: number | null;\n}\n\nexport interface AoUitkering {\n minimaalAoPercentage: number | null;\n totAoPercentage: number | null;\n gedeeltelijkeUitkeringObv: GedeeltelijkeUitkeringAoOpties | null;\n rvcAfwijkingCode: RvcAfwijkingsoort | null;\n rvcAfwijkingPercentage: number | null;\n isAfwijkendBijRestVerdienCapaciteit: boolean | null;\n rvcUitkeringPercentage: number | null;\n aoIndexeringen: AoIndexering[] | null;\n}\n\n/** Bevat de gegevens van Adviesbox Form AOV. */\nexport interface Aov {\n /** De producten op het scherm */\n producten: AovProduct[];\n aanvrager1: AovAanvrager | null;\n aanvrager2: AovAanvrager | null;\n /** De af te lossen leningdelen van het voorstel. */\n readonly leningdelen: LeningdeelReadOnly[] | null;\n /** De af te lossen kredieten van het voorstel. */\n readonly kredieten: KredietReadOnly[] | null;\n /** Ingangsdatum van het voorstel (of: 'Passeerdatum' wanneer er een hypotheek geadviseerd wordt) */\n readonly ingangsdatumVoorstel: string | null;\n /** Marktwaarde van het pand */\n readonly marktwaardeBedrag: number | null;\n /** Gewenste hypotheek op het pand */\n readonly gewensteHypotheekBedrag: number | null;\n}\n\n/** De aanvraaggegevens van een AOV-product. */\nexport interface AovAanvraag {\n /** Is aanvrager 1 in aanraking (geweest) met politie of justitie, vanwege het (mede)plegen van een strafbaar feit */\n strafrechtelijkVerledenAanvrager1: boolean | null;\n /** Is aanvrager 2 in aanraking (geweest) met politie of justitie, vanwege het (mede)plegen van een strafbaar feit */\n strafrechtelijkVerledenAanvrager2: boolean | null;\n /** Verwacht aanvrager 1 een ontslag */\n verwachtingOntslagAanvrager1: boolean | null;\n /** Verwacht aanvrager 2 een ontslag */\n verwachtingOntslagAanvrager2: boolean | null;\n /** Heeft de werkgever van aanvrager 1 plannen bekend gemaakt over en/of is werkgever van aanvrager 1 bezig met een werktijdverkorting, een uitstel van betaling en/of faillissement */\n financieleProblemenWerkgeverAanvrager1: boolean | null;\n /** Heeft de werkgever van aanvrager 2 plannen bekend gemaakt over en/of is werkgever van aanvrager 2 bezig met een werktijdverkorting, een uitstel van betaling en/of faillissement */\n financieleProblemenWerkgeverAanvrager2: boolean | null;\n /** Heeft de werkgever van aanvrager 1 plannen bekend gemaakt over en/of is werkgever van aanvrager 1 bezig met een reorganisatie */\n reorganisatieWerkgeverAanvrager1: boolean | null;\n /** Heeft de werkgever van aanvrager 2 plannen bekend gemaakt over en/of is werkgever van aanvrager 2 bezig met een reorganisatie */\n reorganisatieWerkgeverAanvrager2: boolean | null;\n /** Verwacht de verzekerde veranderingen in zijn/haar werkomgeving */\n verwachtingWerkomgeving: boolean | null;\n /** Verwacht de verzekerde een beeindiging van het dienstverband */\n verwachtingEindeDienstverband: boolean | null;\n /** Geeft aan of de toelichting is gelezen en slotverklaring akkoord is. */\n toelichtingGelezenAkkoordMetSlotverklaring: boolean | null;\n /** Marktwaarde */\n readonly marktwaardeBedrag: number | null;\n /** Hypotheekbedrag */\n readonly hypotheekbedrag: number | null;\n /** TOP-verzekering */\n topVerzekering: boolean | null;\n /** Indexatie tijdens uitkering */\n indexatieTijdensUitkering: boolean | null;\n verzekerdBedragScenario: BedragScenario | null;\n /** Het opgegeven maandinkomen */\n maandinkomen: number | null;\n /** Het berekende netto maandinkomen */\n nettoMaandinkomen: number | null;\n /** Maandinkomen overnemen uit inkomen uit arbeid van de aanvrager */\n maandinkomenOvernemen: boolean | null;\n /** Gewenste gegerandeerde maandinkomen */\n maandinkomenGegarandeerd: number | null;\n}\n\n/** Gegevens van de aanvrager van een AOV-verzekering */\nexport interface AovAanvrager {\n /** Het bruto jaarinkomen van de aanvrager. */\n readonly brutoJaarinkomen: number | null;\n /** Indicatief maandinkomen van de aanvrager van deze dekking */\n readonly indicatiefMaandinkomenBedrag: number | null;\n /** Indicatief jaarinkomen van de aanvrager van deze dekking */\n readonly indicatiefJaarinkomenBedrag: number | null;\n klantId: string;\n readonly achternaam: string | null;\n readonly voorvoegsel: string | null;\n readonly voorletters: string | null;\n readonly voornamen: string | null;\n geslacht: GeslachtOpties | null;\n readonly roker: boolean | null;\n readonly geboortedatum: string | null;\n readonly aowdatum: string | null;\n}\n\n/** Invoer voor een AOV-berekening. */\nexport interface AovBerekening {\n aovProduct: AovProduct;\n}\n\n/** AovBetalingMiddelsOptions Koopsom = 0, Maandpremie = 1, Combinatie = 2 */\nexport enum AovBetalingMiddelsOptions {\n Koopsom = \"Koopsom\",\n Maandpremie = \"Maandpremie\",\n Combinatie = \"Combinatie\",\n}\n\n/** Gegevens van een dekking van een AOV-verzekering. */\nexport interface AovDekking {\n voornaamsteInkomstenbron: AovVoornaamsteInkomstenbronOptions | null;\n verzekerdeDekkingen: AovVerzekerdeDekkingenOptions | null;\n dekkingAo: AovDekkingArbeidsongeschiktheid | null;\n dekkingWw: AovDekkingWerkloosheid | null;\n dekkingEa: AovDekkingBasis | null;\n /** Geeft aan of de WGA-gat-verzekering aanvult tot het uitkeringspercentage van het laatst verdiende loon */\n uitgebreid: boolean | null;\n keuzeDekking: AovKeuzeDekkingOptions | null;\n /** Het vaste bedrag dat uitgekeerd wordt bij een WIA-excedent-verzekering */\n vastBedrag: number | null;\n /** Het percentage van het inkomen uit arbeid boven het maximum dagloon dat wordt verzekerd door WIA-excedent-verzekering */\n percentageBovenMaxDagloon: number | null;\n rubriekA: AovDekkingRubriekA | null;\n rubriekB: AovDekkingRubriekB | null;\n beoordelingscriterium: AoBeoordelingscriterium | null;\n}\n\n/** Gegevens van onderdeel arbeidsongeschiktheid van de dekking */\nexport interface AovDekkingArbeidsongeschiktheid {\n /** Uitkeringsduur in maanden */\n uitkeringsduurInMaandenAo: number | null;\n uitkeringsduurInMaanden: AovUitkeringsduurOptions | null;\n /** Geeft het beroep van de verzekerde aan (alleen bij TAF MLBZ van toepassing) */\n beroep: string | null;\n eigenRisico: AovEigenRisicoOptions | null;\n uitkeringGedeeltelijkAo: UitkeringAoSoort | null;\n aoUitkering: AoUitkering | null;\n /** AnnuiteitsPercentage van de dekking */\n annuiteitsPercentage: number | null;\n /** Verzekerd maandbedrag of verzekerd kapitaal gedeeltelijk AO */\n verzekerdBedragGedeeltelijkAo: number | null;\n /** Verzekerd maandbedrag of verzekerd kapitaal */\n verzekerdBedrag: number | null;\n /** Looptijd in maanden */\n looptijdInMaanden: number | null;\n}\n\n/** Basisgegevens van de dekking. */\nexport interface AovDekkingBasis {\n /** Verzekerd maandbedrag of verzekerd kapitaal */\n verzekerdBedrag: number | null;\n /** Looptijd in maanden */\n looptijdInMaanden: number | null;\n}\n\n/** Gegevens van Rubriek A van een arbeidsongeschiktheidsverzekering */\nexport interface AovDekkingRubriekA {\n /** Jaarlijkse indexatie */\n jaarlijkseIndexatiePercentage: number | null;\n soortJaarlijkseIndexering: Indexatiesoort | null;\n /** Duur eigen risico in maanden */\n eigenRisicoInMaanden: number | null;\n uitkeringGedeeltelijkAo: UitkeringAoSoort | null;\n aoUitkering: AoUitkering | null;\n /** Het verzekerd bedrag */\n verzekerdBedrag: number | null;\n beoordelingscriterium: AoBeoordelingscriterium | null;\n}\n\n/** Gegevens van Rubriek B van een arbeidsongeschiktheidsverzekering */\nexport interface AovDekkingRubriekB {\n /** Eindleeftijd van de uitkering */\n eindleeftijd: number | null;\n /** Het verzekerd bedrag */\n verzekerdBedrag: number | null;\n beoordelingscriterium: AoBeoordelingscriterium | null;\n}\n\n/** Gegevens van onderdeel werkloosheid van de dekking */\nexport interface AovDekkingWerkloosheid {\n /** Uitkeringsduur in maanden */\n uitkeringsduurInMaanden: number | null;\n /** Verzekerd maandbedrag of verzekerd kapitaal */\n verzekerdBedrag: number | null;\n /** Looptijd in maanden */\n looptijdInMaanden: number | null;\n}\n\n/** AovEigenRisicoOptions Dagen30 = 0, Dagen90 = 1, Dagen180 = 2, Dagen365 = 3, Dagen730 = 4 */\nexport enum AovEigenRisicoOptions {\n Dagen30 = \"Dagen30\",\n Dagen90 = \"Dagen90\",\n Dagen180 = \"Dagen180\",\n Dagen365 = \"Dagen365\",\n Dagen730 = \"Dagen730\",\n}\n\n/** AovKeuzeDekkingOptions VastBedrag = 0, Percentage = 1 */\nexport enum AovKeuzeDekkingOptions {\n VastBedrag = \"VastBedrag\",\n Percentage = \"Percentage\",\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form AOV (zowel huidige situatie als voorstel). */\nexport interface AovOutput {\n /** Lijst met AOV-producten per adviesdossier (huidige situatie) of voorstel. */\n aovs: { [key: string]: Aov; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Gegevens van een AOV-polis. */\nexport interface AovPolis {\n productnummer: string | null;\n maatschappijCode: string | null;\n maatschappijOmschrijving: string | null;\n maatschappijCodeHdn: string | null;\n productnaam: string | null;\n productcode: number;\n ingangsdatum: string;\n looptijdInMaanden: number | null;\n uwBemiddeling: boolean;\n}\n\n/** Premiegegevens van de AOV-verzekering */\nexport interface AovPremie {\n betalingMiddels: AovBetalingMiddelsOptions | null;\n /** Koopsomperiode in aantal maanden indien gekozen is voor BetalingMiddels 'Combinatie' */\n koopsomperiodeInMaanden: number | null;\n /** Koopsom indien gekozen is voor BetalingMiddels 'Combinatie' of 'Koopsom' */\n koopsomBedrag: number | null;\n /** Aftrekbaar gedeelte van de koopsom indien gekozen is voor BetalingMiddels 'Combinatie' of 'Koopsom' */\n koopsomAftrekbaarBedrag: number | null;\n /** Premie of vervolgpremie */\n premieBedrag: number | null;\n /** Premie AO Dekking */\n premieBedragAo: number | null;\n /** Premie WW Dekking */\n premieBedragWw: number | null;\n /** Premie TOP Dekking */\n premieBedragTop: number | null;\n /** Premie EA Dekking */\n premieBedragEa: number | null;\n /** Aftrekbaar gedeelte van de premie */\n premieAftrekbaarBedrag: number | null;\n /** Geeft aan of de premie (en eventuele koopsom) aftrekbaar is */\n premieAftrekbaar: boolean | null;\n betalingstermijn: BetalingsTermijnType | null;\n /** Geeft aan of de premie collectief betaald wordt */\n collectief: boolean | null;\n /** Jaarlijkse indexatie van de termijnpremie bij de Arbeidsongeschiktheidsverzekering. */\n jaarlijksIndexatiePercentage: number | null;\n}\n\n/** Bevat de gegevens van het Aov-product. */\nexport interface AovProduct {\n soortProduct: AovSoortProductOptions;\n /** Geeft het beroep van de verzekerde aan (alleen bij TAF MLBZ van toepassing) */\n beroep: string | null;\n /** Geeft de risicoklasse van het beroep van de verzekerde aan\n(alleen bij TAF MLBZ van toepassing) */\n risicoklasseberoep: string | null;\n /** Geeft aan of de einddatum gelijk is aan de aowdatum van de verzekerde\n(alleen bij TAF MLBZ van toepassing) */\n einddatumIsAowLeeftijd: boolean;\n /** Geeft aan of het om een doorlopend product gaat. */\n readonly doorlopend: boolean | null;\n polis: AovPolis;\n /** Unieke identificaties van de klanten die als verzekerde geselecteerd zijn. */\n verzekerdeKlantIds: string[];\n dekkingVerzekerde1: AovDekking;\n dekkingVerzekerde2: AovDekking | null;\n premie: AovPremie;\n verpanding: Verpanding | null;\n aanvraag: AovAanvraag | null;\n /** Indicatie dat indien er doorlopende leningdelen gewijzigd zijn, deze opnieuw overgenomen moeten worden naar de voorstellen */\n wijzigingenInDoorlopendeProductenOvernemen: boolean;\n /** 10% van Hypotheeksom met max. 75.000 en min. 2.500 */\n verzekerdeKredietsom: number;\n productId: string | null;\n meenemen: boolean;\n}\n\n/** Het resultaat van een AOV-berekening. */\nexport interface AovResultaat {\n /** Ingangsdatum */\n readonly ingangsdatum: string | null;\n /** De berekende premie. */\n readonly premies: AovResultaatPremie[] | null;\n /** De berekende gegevens voor een verzekerde.\nDeze wordt alleen door Dazure GoedIdee Inkomensbeschermer gebruikt */\n readonly verzekerden: AovResultaatVerzekerde[] | null;\n aoDekking: AoDekkingBedragen | null;\n wwDekking: WwDekkingBedragen | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Een berekende AOV-premie. */\nexport interface AovResultaatPremie {\n /** Premiebedrag */\n readonly bedrag: number | null;\n /** Het AO-gedeelte van het premiebedrag */\n readonly aoBedrag: number | null;\n /** Het WW-gedeelte van het premiebedrag */\n readonly wwBedrag: number | null;\n /** Het IGP-gedeelte van het premiebedrag */\n readonly igpBedrag: number | null;\n /** Looptijd in maanden */\n readonly looptijdInMaanden: number | null;\n}\n\n/** Een berekende AOV-verzekerde. */\nexport interface AovResultaatVerzekerde {\n /** Netto inkomen, maandbedrag */\n readonly nettoInkomen: number | null;\n /** VerzekerdBedragGedeeltelijkeAo */\n readonly verzekerdBedragGedeeltelijkeAo: number | null;\n /** VerzekerdBedragVolledigeAo */\n readonly verzekerdBedragVolledigeAo: number | null;\n}\n\n/** AovSoortProductOptions Woonlastenverzekering = 0, WgaGatVerzekering = 1, WiaExcedentVerzekering = 2, Arbeidsongeschiktheidverzekering = 3, Hypotheekaflosverzekering = 4, Inkomensgarantieverzekering = 5, Product = 6 */\nexport enum AovSoortProductOptions {\n Woonlastenverzekering = \"Woonlastenverzekering\",\n WgaGatVerzekering = \"WgaGatVerzekering\",\n WiaExcedentVerzekering = \"WiaExcedentVerzekering\",\n Arbeidsongeschiktheidverzekering = \"Arbeidsongeschiktheidverzekering\",\n Hypotheekaflosverzekering = \"Hypotheekaflosverzekering\",\n Inkomensgarantieverzekering = \"Inkomensgarantieverzekering\",\n Product = \"Product\",\n}\n\n/** AovUitkeringsduurOptions Jaren2 = 0, Jaren5 = 1, Jaren10 = 2, EindeLooptijd = 3 */\nexport enum AovUitkeringsduurOptions {\n Jaren2 = \"Jaren2\",\n Jaren5 = \"Jaren5\",\n Jaren10 = \"Jaren10\",\n EindeLooptijd = \"EindeLooptijd\",\n}\n\n/** AovVerzekerdeDekkingenOptions Ao = 0, Ww = 1, Ea = 2, AoWw = 3, AoEa = 4, AoWwEa = 5 */\nexport enum AovVerzekerdeDekkingenOptions {\n Ao = \"Ao\",\n Ww = \"Ww\",\n Ea = \"Ea\",\n AoWw = \"AoWw\",\n AoEa = \"AoEa\",\n AoWwEa = \"AoWwEa\",\n}\n\n/** AovVoornaamsteInkomstenbronOptions Loondienst = 0, Zelfstandige = 1 */\nexport enum AovVoornaamsteInkomstenbronOptions {\n Loondienst = \"Loondienst\",\n Zelfstandige = \"Zelfstandige\",\n}\n\n/** Bevat gegevens over de AOW-uitkering. */\nexport interface AowData {\n /** Indicatieveld of AOW datum berekend wordt */\n aowDatumOvernemen: boolean;\n /** Datum AOW */\n aowDatum: string;\n /** Duur korting AOW */\n duurkortingAowInJaren: number;\n /** AOW-bedrag (berekend) */\n aowBedrag: number;\n /** AOW-datum, zoals die bepaald is op basis van de geboortedatum. */\n berekendeAowDatum: string;\n}\n\n/** Gegevens van 1 arrangement. */\nexport interface Arrangement {\n /** De arrangements identifier. */\n id: string | null;\n /** Arrangements omschrijving. */\n omschrijving: string | null;\n /** Indicatie inkomen koper(s) verplicht. */\n inkomenKopersVerplicht: boolean;\n /** Indicatie financieringsinformatie verplicht. */\n financieringsinformatieVerplicht: boolean;\n /** Indicating direct. */\n isDirect: boolean;\n /** Gekoppelde geldverstrekker. */\n gekoppeldeGeldverstrekker: string | null;\n /** De verlengingskosten. */\n verlengingskosten: number;\n /** Indicating digitale nota. */\n digitaleNota: boolean;\n}\n\nexport interface BadRequestResult {\n statusCode: number;\n}\n\n/** Bevat de inhoud van het Adviesbox-form Aanvraag/Bankgarantie. */\nexport interface Bankgarantie {\n algemeen: BankgarantieAlgemeen;\n onroerendeZaak: BankgarantieOnroerendeZaak | null;\n notaris: BankgarantieNotaris | null;\n verkopers: BankgarantieVerkopers | null;\n pand: BankgarantiePand | null;\n garantie: BankgarantieGarantie | null;\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n soortFinanciering: Financieringsoort | null;\n}\n\n/** Uitvoer voor een Bankgarantie aanvraag */\nexport interface BankgarantieAanvraagOutput {\n bnpAanvraag: BankgarantieBnpAanvraagOutput | null;\n nwbAanvraag: BankgarantieBnpAanvraagOutput | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat gegevens van het gekozen voorstel (de gewenste hypotheek). */\nexport interface BankgarantieAlgemeen {\n /** Gets or sets de product identifier. (intern) */\n productId: string | null;\n /** Gets or sets de arrangement identifier. */\n arrangementId: string | null;\n /** Gets or sets uw kenmerk. */\n uwKenmerk: string | null;\n /** De code van de bankgarantieinstelling uit de Producten Web API */\n instellingMaatschappijCode: string | null;\n /** De code van het gekozen arrangement uit de Nationale Waarborg API */\n aanvraagViaArrangementId: string | null;\n /** Nummer van tussenpersoon zoals bekend bij nat. waarborg */\n tussenpersoonnummer: string | null;\n /** Het agentnummer. */\n agentnummer: string | null;\n /** De arrangementsnaam. */\n arrangementsnaam: string | null;\n productkeuze: ProductkeuzeOptions | null;\n /** Gets or sets het offertenummer. */\n offertenummer: string | null;\n}\n\n/** Uitvoer voor een BNP aanvraag */\nexport interface BankgarantieBnpAanvraagOutput {\n /** Id van de maatschappij */\n readonly id: string | null;\n /** Status van de aanvraag */\n readonly status: string | null;\n /** Url van de aanvraag */\n readonly url: string | null;\n /** Token om de url uit te kunnen voeren */\n readonly token: string | null;\n /** Naam van de token parameter in de querystring */\n readonly tokenName: string | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de gegevens van de afgegeven garantie. */\nexport interface BankgarantieGarantie {\n /** Afgiftedatum bankgarantie */\n afgiftedatum: string | null;\n /** Datum ondertekening koopakte */\n ondertekeningKoopakteDatum: string | null;\n /** Passeerdatum/einddatum van de bankgarantie */\n passeerdatum: string | null;\n /** Standaard passeerdatum, zoals ingevuld op het Form Vergoedingenoverzicht */\n passeerdatumStandaard: string | null;\n /** Indicatie dat de standaard passeerdatum overgenomen moet worden */\n passeerdatumOvernemen: boolean | null;\n /** Code van de gekozen vergoeding uit de API van Nationale Waarborg */\n vergoedingCode: string | null;\n /** Indicatie of er sprake is van 'Verzekerde bankgarantie' */\n verzekerdeBankgarantie: boolean | null;\n /** Totale bankgarantiekosten */\n bankgarantiekostenBedrag: number | null;\n /** Geeft aan of het bankgarantiekostenbedrag eigen invoer is */\n bankgarantiekostenEigenInvoer: boolean;\n /** Bankgarantie premiebedrag */\n premieBedrag: number | null;\n /** Ingangsdatum van de bankgarantie */\n ingangsdatum: string | null;\n /** Einddatum van de bankgarantie */\n einddatum: string | null;\n}\n\n/** Bevat gegevens van een notaris. */\nexport interface BankgarantieNotaris {\n /** Unieke identificatie van het gekozen notariskantoor uit de instellingen */\n gekozenNotariskantoorId: string | null;\n /** Naam notariskantoor */\n kantoornaam: string | null;\n adres: Adres | null;\n typeNotaris: NotarisType;\n /** Telefoonnummer notaris */\n telefoonNummer: string | null;\n}\n\n/** Bevat de gegevens van de afgegeven onroerende zaak. */\nexport interface BankgarantieOnroerendeZaak {\n adres: Adres | null;\n nieuwWoonadres: AdresReadOnly | null;\n /** De naam van het nieuwbouw project */\n projectnaam: string | null;\n /** Bouwnummer van het nieuwbouw project */\n bouwnummer: string | null;\n /** Omschrijving van het nieuwbouwproject */\n omschrijving: string | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Aanvraag/Bankgarantie. */\nexport interface BankgarantieOutput {\n /** Lijst met de inhoud van het Adviesbox-form Aanvraag/Bankgarantie per adviesdossier. */\n bankgaranties: { [key: string]: Bankgarantie; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de gegevens van het aan te kopen pand. */\nexport interface BankgarantiePand {\n /** Aankoopprijs */\n aankoopprijsBedrag: number | null;\n /** Hypotheekbedrag */\n hypotheekbedrag: number | null;\n /** Gehanteerde marktwaarde */\n marktwaardeBedrag: number | null;\n /** De naam van de geldverstrekker die in het Form Hypotheek geselecteerd is. */\n geldverstrekkerNaam: string | null;\n /** Indicatie dat NHG-garantie van toepassing is op de nieuwe financiering */\n nhg: boolean | null;\n /** Garantiebedrag */\n garantiebedrag: number | null;\n /** Indicatie dat het garantiebedrag berekend moet worden */\n garantieOvernemen: boolean | null;\n /** Bedrag aan eigen middelen */\n eigenMiddelenBedrag: number | null;\n /** Bedrag van overbrugging */\n overbruggingBedrag: number | null;\n}\n\n/** Bevat gegevens van een verkoper. */\nexport interface BankgarantieVerkoper {\n /** Achternaam */\n achternaam: string | null;\n /** Voorvoegsel */\n voorvoegsel: string | null;\n /** Voorletters */\n voorletters: string | null;\n /** Roepnaam */\n woonplaats: string | null;\n}\n\n/** Bevat gegevens van de verkopers. */\nexport interface BankgarantieVerkopers {\n /** Bedrijfsnaam */\n bedrijfsnaam: string | null;\n verkoper1: BankgarantieVerkoper | null;\n verkoper2: BankgarantieVerkoper | null;\n}\n\n/** BasisdekkingOptions Geen = 1, PercentageOpgebouwdeWaarde = 2, SomBetaaldePremies = 3 */\nexport enum BasisdekkingOptions {\n Geen = \"Geen\",\n PercentageOpgebouwdeWaarde = \"PercentageOpgebouwdeWaarde\",\n SomBetaaldePremies = \"SomBetaaldePremies\",\n}\n\nexport interface BedragIndexering {\n bedrag: number | null;\n volgnummer: number;\n ingangsmaand: number | null;\n}\n\nexport interface BedragScenario {\n waarde: number | null;\n indexeringen: BedragIndexering[] | null;\n omschrijving: string | null;\n}\n\n/** Begunstigingsoort Geen = 0, Standaard = 1, Afwijkend = 2 */\nexport enum Begunstigingsoort {\n Geen = \"Geen\",\n Standaard = \"Standaard\",\n Afwijkend = \"Afwijkend\",\n}\n\n/** BelastingBoxOptions Box1 = 0, Box3 = 1 */\nexport enum BelastingBoxOptions {\n Box1 = \"Box1\",\n Box3 = \"Box3\",\n}\n\n/** Belastingbox Geen = 0, Box1 = 1, Box2 = 2, Box3 = 3 */\nexport enum Belastingbox {\n Geen = \"Geen\",\n Box1 = \"Box1\",\n Box2 = \"Box2\",\n Box3 = \"Box3\",\n}\n\n/** BeleggersprofielOptions ZeerDefensief = 1, Defensief = 2, Gematigd = 3, Neutraal = 4, GematigdOffensief = 5, Offensief = 6, ZeerOffensief = 7 */\nexport enum BeleggersprofielOptions {\n ZeerDefensief = \"ZeerDefensief\",\n Defensief = \"Defensief\",\n Gematigd = \"Gematigd\",\n Neutraal = \"Neutraal\",\n GematigdOffensief = \"GematigdOffensief\",\n Offensief = \"Offensief\",\n ZeerOffensief = \"ZeerOffensief\",\n}\n\n/** Het resultaat van een gemiddeld jaarinkomen-berekening. */\nexport interface BerekendGemiddeldInkomen {\n /** Het berekende gemiddelde jaarinkomen. */\n gemiddeldInkomen: number | null;\n}\n\n/** Bevat het resultaat van de inkomensperiode-berekening. */\nexport interface BerekendResultaat {\n /** Het bruto salarisbedrag per periode. */\n brutoSalarisBedrag: number | null;\n /** Het bruto salarisbedrag per jaar. */\n brutoSalarisJaarBedrag: number | null;\n /** Het bedrag aan vakantietoeslag. */\n vakantietoeslagBedrag: number | null;\n /** Het bedrag 13e maand waarmee gerekend is. */\n maand13Bedrag: number | null;\n /** Het totaal bruto salarisbedrag per jaar */\n totaalBrutoJaarsalarisBedrag: number | null;\n}\n\n/** Berekeningsoort Geen = 0, Kapitaal = 1, Premie = 2, Rendement = 3, EigenInvoer = 4, Aanvangsstorting = 5, Onttrekking = 6, LijfrenteUitkering = 7, UitgesteldeInleg = 8, Garantiekapitaal = 9, PremieObvGarantiekapitaal = 10 */\nexport enum Berekeningsoort {\n Geen = \"Geen\",\n Kapitaal = \"Kapitaal\",\n Premie = \"Premie\",\n Rendement = \"Rendement\",\n EigenInvoer = \"EigenInvoer\",\n Aanvangsstorting = \"Aanvangsstorting\",\n Onttrekking = \"Onttrekking\",\n LijfrenteUitkering = \"LijfrenteUitkering\",\n UitgesteldeInleg = \"UitgesteldeInleg\",\n Garantiekapitaal = \"Garantiekapitaal\",\n PremieObvGarantiekapitaal = \"PremieObvGarantiekapitaal\",\n}\n\n/** BetaalwijzeAdvieskostenOptions MeefinancierenInHypotheek = 1, VoldoenUitEigenMiddelen = 2 */\nexport enum BetaalwijzeAdvieskostenOptions {\n MeefinancierenInHypotheek = \"MeefinancierenInHypotheek\",\n VoldoenUitEigenMiddelen = \"VoldoenUitEigenMiddelen\",\n}\n\n/** BetalenUitPremiedepot Geen = 0, Aanvangsstorting = 1, Premie = 2, PremieHoog = 4, Spaarpremie = 8, SpaarpremieHoog = 16, Risicopremie = 32, RisicopremieHoog = 64, Inleg = 128, Storting = 256 */\nexport enum BetalenUitPremiedepot {\n Geen = \"Geen\",\n Aanvangsstorting = \"Aanvangsstorting\",\n Premie = \"Premie\",\n PremieHoog = \"PremieHoog\",\n Spaarpremie = \"Spaarpremie\",\n SpaarpremieHoog = \"SpaarpremieHoog\",\n Risicopremie = \"Risicopremie\",\n RisicopremieHoog = \"RisicopremieHoog\",\n Inleg = \"Inleg\",\n Storting = \"Storting\",\n}\n\n/** BetalingVia Geen = 0, Notaris = 1, AcceptGiro = 2, AutoIncasso = 3, Geldverstrekker = 4, Anders = 99 */\nexport enum BetalingVia {\n Geen = \"Geen\",\n Notaris = \"Notaris\",\n AcceptGiro = \"AcceptGiro\",\n AutoIncasso = \"AutoIncasso\",\n Geldverstrekker = \"Geldverstrekker\",\n Anders = \"Anders\",\n}\n\n/** BetalingsTermijnType Geen = 0, Maand = 1, TweeMaanden = 2, Kwartaal = 3, HalfJaar = 6, Jaar = 12, Eenmalig = 99, Week = -7, Dag = -1 */\nexport enum BetalingsTermijnType {\n Geen = \"Geen\",\n Maand = \"Maand\",\n TweeMaanden = \"TweeMaanden\",\n Kwartaal = \"Kwartaal\",\n HalfJaar = \"HalfJaar\",\n Jaar = \"Jaar\",\n Eenmalig = \"Eenmalig\",\n Week = \"Week\",\n Dag = \"Dag\",\n}\n\n/** BewonersOpties Aanvrager1 = 1, Aanvrager2 = 2, Beiden = 3 */\nexport enum BewonersOpties {\n Aanvrager1 = \"Aanvrager1\",\n Aanvrager2 = \"Aanvrager2\",\n Beiden = \"Beiden\",\n}\n\n/** BijtellingAutovdZaakOpties _0Procent = 0, _4Procent = 4, _7Procent = 7, _8Procent = 8, _12Procent = 12, _14Procent = 14, _15Procent = 15, _16Procent = 16, _20Procent = 20, _21Procent = 21, _22Procent = 22, _25Procent = 25 */\nexport enum BijtellingAutovdZaakOpties {\n _0Procent = \"_0Procent\",\n _4Procent = \"_4Procent\",\n _7Procent = \"_7Procent\",\n _8Procent = \"_8Procent\",\n _12Procent = \"_12Procent\",\n _14Procent = \"_14Procent\",\n _15Procent = \"_15Procent\",\n _16Procent = \"_16Procent\",\n _20Procent = \"_20Procent\",\n _21Procent = \"_21Procent\",\n _22Procent = \"_22Procent\",\n _25Procent = \"_25Procent\",\n}\n\n/** BoeterenteBerekeningswijzeOpties Contant = 3, EigenInvoer = 7 */\nexport enum BoeterenteBerekeningswijzeOpties {\n Contant = \"Contant\",\n EigenInvoer = \"EigenInvoer\",\n}\n\n/** BurgerlijkeStaatType Geen = 0, GehuwdGemeenschapVanGoederen = 1, GehuwdMetHuwelijkseVoorwaarden = 2, Alleenstaand = 3, SamenwonendMetSamenlevingscontract = 4, SamenwonendZonderSamenlevingscontract = 5, PartnerregistratieInGemeenschapVanGoederen = 6, PartnerregistratieOnderRegistratievoorwaarden = 7, GehuwdVolgensBuitenlandsRecht = 8, GehuwdInBeperkteGemeenschapVanGoederen = 9, PartnerregistratieInBeperkteGemeenschapVanGoederen = 10 */\nexport enum BurgerlijkeStaatType {\n Geen = \"Geen\",\n GehuwdGemeenschapVanGoederen = \"GehuwdGemeenschapVanGoederen\",\n GehuwdMetHuwelijkseVoorwaarden = \"GehuwdMetHuwelijkseVoorwaarden\",\n Alleenstaand = \"Alleenstaand\",\n SamenwonendMetSamenlevingscontract = \"SamenwonendMetSamenlevingscontract\",\n SamenwonendZonderSamenlevingscontract = \"SamenwonendZonderSamenlevingscontract\",\n PartnerregistratieInGemeenschapVanGoederen = \"PartnerregistratieInGemeenschapVanGoederen\",\n PartnerregistratieOnderRegistratievoorwaarden = \"PartnerregistratieOnderRegistratievoorwaarden\",\n GehuwdVolgensBuitenlandsRecht = \"GehuwdVolgensBuitenlandsRecht\",\n GehuwdInBeperkteGemeenschapVanGoederen = \"GehuwdInBeperkteGemeenschapVanGoederen\",\n PartnerregistratieInBeperkteGemeenschapVanGoederen = \"PartnerregistratieInBeperkteGemeenschapVanGoederen\",\n}\n\n/** ConceptAdres. */\nexport interface ConceptAdres {\n /** Gets or sets straat. */\n straat: string | null;\n /** Gets or sets plaats. */\n plaats: string | null;\n /** Gets or sets postcode. */\n postcode: string | null;\n /** Gets or sets huisnummer. */\n huisnummer: number | null;\n /** Gets or sets toevoeging (optioneel). */\n huisnummerToevoeging: string | null;\n}\n\n/** Gegevens bedrijfsmatige verkoper. */\nexport interface ConceptBedrijfVerkoper {\n /** Gets or sets de bedrijfsnaam. */\n bedrijfsnaam: string | null;\n /** Gets or sets vestigingsplaats. */\n plaats: string | null;\n}\n\n/** ConceptKoper gegevens. */\nexport interface ConceptKoper {\n /** Gets or sets voorletters. */\n voorletters: string | null;\n /** Gets or sets achternaam. */\n achternaam: string | null;\n /** Gets or sets emailadres. */\n emailAdres: string | null;\n /** Gets or sets geslacht. */\n geslacht: string | null;\n /** Gets or sets geboortedatum. */\n geboortedatum: string | null;\n /** Gets or sets inkomen. */\n inkomen: number | null;\n /** Gets or sets nationaliteitIso3166Alpha3 Landcode 3 tekens ISO. */\n nationaliteitIso3166Alpha3: string | null;\n adres: ConceptAdres | null;\n}\n\n/** Gegevens nieuwubouw. */\nexport interface ConceptNieuwbouwgegevens {\n /** Gets or sets straat / projectnaam. */\n straatOfProject: string | null;\n /** Gets or sets bouw/Kavel nummer. */\n bouwOfKavelnummer: string | null;\n /** Gets or sets postcode */\n postcode: string | null;\n /** Gets or sets plaatsnaam. */\n plaats: string | null;\n}\n\n/** ConceptNotaris. */\nexport interface ConceptNotaris {\n /** Gets or sets naam notariskantoor. */\n naamKantoor: string | null;\n adres: ConceptAdres | null;\n}\n\n/** Gegevens pariculiere verkoper. */\nexport interface ConceptParticuliereVerkoper {\n /** Gets or sets voorletters. */\n voorletters: string | null;\n /** Gets or sets achternaam. */\n achternaam: string | null;\n /** Gets or sets plaats. */\n plaats: string | null;\n}\n\n/** De verschillend mogelijk verkoperstypen. */\nexport interface ConceptVerkopers {\n /** Gets or sets gegevens particuliere verkopers. */\n particuliereVerkopers: ConceptParticuliereVerkoper[] | null;\n /** Gets or sets gegevens bedrijfsmatige verkopers. */\n bedrijfVerkopers: ConceptBedrijfVerkoper[] | null;\n /** Gets or sets gegevens eventuele ander verkoper(s) (alleen\nomschrijving). */\n anderVerkoperOmschrijving: string[] | null;\n}\n\n/** ControleGewenstInkomenOptions Nbi = 1, BrutoInkomenswens = 2, Geen = 3 */\nexport enum ControleGewenstInkomenOptions {\n Nbi = \"Nbi\",\n BrutoInkomenswens = \"BrutoInkomenswens\",\n Geen = \"Geen\",\n}\n\n/** ControleGewenstNbiOptions BehoudenHuidigNbi = 0, MargeHuidigNbi = 1, VastBedrag = 2, PercentageHuidigNbi = 3 */\nexport enum ControleGewenstNbiOptions {\n BehoudenHuidigNbi = \"BehoudenHuidigNbi\",\n MargeHuidigNbi = \"MargeHuidigNbi\",\n VastBedrag = \"VastBedrag\",\n PercentageHuidigNbi = \"PercentageHuidigNbi\",\n}\n\n/** ControleMaandlastOptions BenodigdInkomen = 1, WerkelijkeLast = 2 */\nexport enum ControleMaandlastOptions {\n BenodigdInkomen = \"BenodigdInkomen\",\n WerkelijkeLast = \"WerkelijkeLast\",\n}\n\n/** Bevat de inhoud van het Adviesbox-form Dashboard. */\nexport interface Dashboard {\n werkloosheid: DashboardScenarioWerkloosheid | null;\n arbeidsongeschiktheid: DashboardScenarioArbeidsongeschiktheid | null;\n overlijden: DashboardScenarioOverlijden | null;\n pensioen: DashboardScenarioPensioen | null;\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n}\n\n/** DashboardOnderdeelOptions HypotheekAcceptatie = 0, Snelinzicht = 1, Overlijden = 2, Arbeidsongeschiktheid = 3, Werkloosheid = 4, Pensioen = 5, VerantwoordeWoonlasten = 6, Aflossingsvorm = 7, Rentevastperiode = 8, OpbouwDoelvermogen = 9 */\nexport enum DashboardOnderdeelOptions {\n HypotheekAcceptatie = \"HypotheekAcceptatie\",\n Snelinzicht = \"Snelinzicht\",\n Overlijden = \"Overlijden\",\n Arbeidsongeschiktheid = \"Arbeidsongeschiktheid\",\n Werkloosheid = \"Werkloosheid\",\n Pensioen = \"Pensioen\",\n VerantwoordeWoonlasten = \"VerantwoordeWoonlasten\",\n Aflossingsvorm = \"Aflossingsvorm\",\n Rentevastperiode = \"Rentevastperiode\",\n OpbouwDoelvermogen = \"OpbouwDoelvermogen\",\n}\n\n/** Geeft de geselecteerde onderwerpen voor het dashboard */\nexport interface DashboardOnderwerpen {\n /** Werkloosheid onderwerp geselecteerd ja/nee */\n werkloosheid: boolean | null;\n /** Arbeidsongeschiktheid onderwerp geselecteerd ja/nee */\n arbeidsongeschiktheid: boolean | null;\n /** Overlijden onderwerp geselecteerd ja/nee */\n overlijden: boolean | null;\n /** Pensioen onderwerp geselecteerd ja/nee */\n pensioen: boolean | null;\n}\n\n/** Geeft de geselecteerde onderwerpen voor het dashboard */\nexport interface DashboardOnderwerpenOutput {\n onderwerpen: DashboardOnderwerpen | null;\n code: string | null;\n target: string | null;\n message: string | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Dashboard. */\nexport interface DashboardOutput {\n /** Lijst met Dashboards per adviesdossier of voorstel. */\n dashboards: { [key: string]: Dashboard; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de gegevens van 'Arbeidsongeschiktheid' t.b.v. het Adviesbox-form Dashboard */\nexport interface DashboardScenarioArbeidsongeschiktheid {\n uitgangspunten: DashboardUitgangspuntenArbeidsongeschiktheid | null;\n tekort: DashboardTekort | null;\n}\n\n/** Bevat de gegevens van 'Overlijden' t.b.v. het Adviesbox-form Dashboard. */\nexport interface DashboardScenarioOverlijden {\n uitgangspunten: DashboardUitgangspuntenOverlijden | null;\n tekort: DashboardTekort | null;\n}\n\n/** Bevat de gegevens van 'Pensioen' t.b.v. het Adviesbox-form Dashboard. */\nexport interface DashboardScenarioPensioen {\n uitgangspunten: DashboardUitgangspuntenPensioen | null;\n tekort: DashboardTekort | null;\n}\n\n/** Bevat de gegevens van 'Werkloosheid' t.b.v. het Adviesbox-form Dashboard */\nexport interface DashboardScenarioWerkloosheid {\n uitgangspunten: DashboardUitgangspuntenWerkloosheid | null;\n tekort: DashboardTekort | null;\n}\n\n/** Bevat het tekort/overschot van een scenario t.b.v. het Adviesbox-form Dashboard. */\nexport interface DashboardTekort {\n /** Tekort t.o.v. de maximale hypotheek bij toepassing van het scenario op aanvrager 1 */\n readonly tekortHypotheek1Bedrag: number | null;\n /** Tekort t.o.v. de maximale hypotheek bij toepassing van het scenario op aanvrager 2 */\n readonly tekortHypotheek2Bedrag: number | null;\n /** Tekort t.o.v. de maximale hypotheek bij toepassing van het scenario beide aanvragers */\n readonly tekortHypotheekBeideBedrag: number | null;\n /** Tekort aan inkomen o.b.v. maand/jaarlast bij toepassing van het scenario op aanvrager 1 */\n readonly tekortInkomen1Bedrag: number | null;\n /** Tekort aan inkomen o.b.v. maand/jaarlast bij toepassing van het scenario op aanvrager 2 */\n readonly tekortInkomen2Bedrag: number | null;\n /** Tekort aan inkomen o.b.v. maand/jaarlast bij toepassing van het scenario op beide aanvragers */\n readonly tekortInkomenBeideBedrag: number | null;\n}\n\n/** Bevat de uitgangspunten voor de berekeningen van 'Arbeidsongeschiktheid' t.b.v. het Adviesbox-form Dashboard. */\nexport interface DashboardUitgangspuntenArbeidsongeschiktheid {\n /** Unieke identificaties van de klanten die geselecteerd zijn bij 'Scenario van'. */\n scenarioVanKlantIds: string[];\n /** Indicatieveld of het vinkje van 'Beide' is aangevinkt wel of niet */\n overzichtBeideTonen: boolean | null;\n scenarioDoorrekeningExtra1: boolean | null;\n scenarioDoorrekeningExtra2: boolean | null;\n arbeidsongeschiktheidStandaardPercentage: number | null;\n arbeidsongeschiktheidExtra1Percentage: number | null;\n arbeidsongeschiktheidExtra2Percentage: number | null;\n duurzaamArbeidsongeschiktStandaard: boolean | null;\n duurzaamArbeidsongeschiktExtra1: boolean | null;\n duurzaamArbeidsongeschiktExtra2: boolean | null;\n benuttingVerdiencapaciteitStandaardPercentage: number | null;\n benuttingVerdiencapaciteitExtra1Percentage: number | null;\n benuttingVerdiencapaciteitExtra2Percentage: number | null;\n readonly toetsjaar: number | null;\n controleHypotheeknorm: MotiveringControleHypotheeknorm | null;\n controleGewenstInkomen: MotiveringControleGewenstInkomen | null;\n readonly voorstellen: MotiveringVoorstel[] | null;\n motiveringVoorVoorstelId: string | null;\n}\n\n/** Bevat de uitgangspunten voor de berekeningen van 'Overlijden' t.b.v. het Adviesbox-form Dashboard. */\nexport interface DashboardUitgangspuntenOverlijden {\n /** Unieke identificaties van de klanten die geselecteerd zijn bij 'Scenario van'. */\n scenarioVanKlantIds: string[];\n /** Indicatieveld of het vinkje van 'Beide' is aangevinkt wel of niet */\n overzichtBeideTonen: boolean | null;\n werkenNaOverlijdenPartnerAanvrager1Percentage: number | null;\n werkenNaOverlijdenPartnerAanvrager2Percentage: number | null;\n duurOverzicht: DuurOverzichtOptions | null;\n overzichtDuurInJaren: number | null;\n overzichtTotLeeftijdInMaanden: number | null;\n controleHypotheeknorm: MotiveringControleHypotheeknorm | null;\n controleGewenstInkomen: MotiveringControleGewenstInkomen | null;\n readonly voorstellen: MotiveringVoorstel[] | null;\n motiveringVoorVoorstelId: string | null;\n}\n\n/** Bevat de uitgangspunten voor de berekeningen van 'Pensioen' t.b.v. het Adviesbox-form Dashboard. */\nexport interface DashboardUitgangspuntenPensioen {\n /** Unieke identificaties van de klanten die geselecteerd zijn bij 'Scenario van'. */\n scenarioVanKlantIds: string[];\n /** Indicatieveld of het vinkje van 'Beide' is aangevinkt wel of niet */\n overzichtBeideTonen: boolean | null;\n beschikbareJaarruimteAanvrager1: MotiveringBeschikbareJaarruimte | null;\n beschikbareJaarruimteAanvrager2: MotiveringBeschikbareJaarruimte | null;\n controleHypotheeknorm: MotiveringControleHypotheeknorm | null;\n controleGewenstInkomen: MotiveringControleGewenstInkomen | null;\n readonly voorstellen: MotiveringVoorstel[] | null;\n motiveringVoorVoorstelId: string | null;\n}\n\n/** Bevat de uitgangspunten voor de berekeningen van 'Werkloosheid' t.b.v. het Adviesbox-form Dashboard. */\nexport interface DashboardUitgangspuntenWerkloosheid {\n /** Unieke identificaties van de klanten die geselecteerd zijn bij 'Scenario van'. */\n scenarioVanKlantIds: string[];\n /** Indicatieveld of het vinkje van 'Beide' is aangevinkt wel of niet */\n overzichtBeideTonen: boolean | null;\n controleHypotheeknorm: MotiveringControleHypotheeknorm | null;\n controleGewenstInkomen: MotiveringControleGewenstInkomen | null;\n readonly voorstellen: MotiveringVoorstel[] | null;\n motiveringVoorVoorstelId: string | null;\n}\n\nexport interface Dekking {\n volgnummer: number;\n huidigDekkingId: string | null;\n origineelDekkingId: string | null;\n pakketDekkingId: string | null;\n soortDekking: Dekkingsoort | null;\n soortLijfrenteclausule: Lijfrenteclausulesoort | null;\n aanvangsdatum: string | null;\n looptijdInMaanden: number | null;\n productnaam: string | null;\n productHost: ProductHostOpties | null;\n maatschappijCode: string | null;\n polisnummer: string | null;\n hoogLaagPercentage: number | null;\n hoogLaagAantalMaanden: number | null;\n premiesplitsing: boolean | null;\n premieBerekenen: boolean | null;\n productcode: number | null;\n collectief: boolean | null;\n rentevastPeriodeInJaren: number | null;\n optimalisatie: boolean | null;\n brutoBerekening: boolean | null;\n rendementPercentage: number | null;\n dekkingnaam: string | null;\n betalingKoopsom: number | null;\n maatschappijOmschrijving: string | null;\n leningAflossen: boolean | null;\n verpanden: boolean | null;\n royeren: boolean | null;\n soortBerekening: Berekeningsoort | null;\n poliswaardeBedrag: number | null;\n premiedemper: boolean | null;\n ingebrachteWaardeBedrag: number | null;\n poliswaardeDatum: string | null;\n subproductCode: number | null;\n extraGegevens: string | null;\n opgebouwdKapitaalBedrag: number | null;\n opgebouwdKapitaalDatum: string | null;\n stortingKostenPercentage: number | null;\n premiePeriode1Percentage: number | null;\n duurEerstePeriodeInMaanden: number | null;\n premieVervolgperiodePercentage: number | null;\n poliskostenEersteStortingBedrag: number | null;\n poliskostenPremiePeriode1Bedrag: number | null;\n risicocategorie: number | null;\n provisiePercentage: number | null;\n provisieBedrag: number | null;\n begunstiging: Begunstigingsoort | null;\n soortDepot: string | null;\n bestedingsdoel: string | null;\n portefeuille: number | null;\n betalingKoopsomAan: string | null;\n jaarlijkseIndexering: boolean | null;\n beleggingsprofielCodeHdn: string | null;\n productcodeHdn: string | null;\n bijzonderheden: string | null;\n nettoWaardeBedrag: number | null;\n betaalmethode: BetalingVia | null;\n productvariabelen: string | null;\n eenmaligeHogeStorting: boolean | null;\n hoogLaagConstructie: HoogLaagConstructie | null;\n provisie: string | null;\n hoogstePremieOoitBedrag: number | null;\n laagstePremieooitBedrag: number | null;\n premieLopendJaarBedrag: number | null;\n maatschappijCodeOrigineel: string | null;\n origineleAanvangsdatum: string | null;\n uitgebreid: boolean | null;\n premieverloop: Premieverloopsoort | null;\n maatschappijOmschrijvingOrigineel: string | null;\n uwBemiddeling: boolean | null;\n lxVerstuurd: boolean | null;\n origineleSoortDekking: Dekkingsoort | null;\n aanvangBox1Datum: string | null;\n eerdereUitkeringenBedrag: number | null;\n premieVervolgperiodeBedrag: number | null;\n wtvDatum: string | null;\n wtvVoorPercentage: number | null;\n wtvNaPercentage: number | null;\n maatschappijCodeAdn: string | null;\n maatschappijCodeOndergebrachtAdn: string | null;\n maatschappijOndergebrachtOmschrijving: string | null;\n contractVervaldatum: string | null;\n administratiekostenBedrag: number | null;\n administratiekostenEenmalig: boolean | null;\n maatschappijCodeEnergie: number | null;\n maatschappijCodeTelecom: number | null;\n verzekeringsmotief: Verzekeringsmotief | null;\n origineelDoelkapitaalBedrag: number | null;\n origineleEinddatum: string | null;\n fiscaleVoortzettingMuteerbaar: boolean | null;\n fiscaleVoortzetting: boolean | null;\n verkortePremieduur: boolean | null;\n beeindigenInSituatie: Situatiekeuze | null;\n premievrijMakenInSituatie: Situatiekeuze | null;\n lijfrenteclausuleOrigineel: boolean | null;\n premieInvoerSamenstellen: boolean | null;\n onttrekkingSamenstellen: boolean | null;\n boetevrijOpnemen: boolean | null;\n inbrengHypotheekBedrag: number | null;\n waardeInbrengenInSituatie: Situatiekeuze | null;\n hdnAanvraagversie: number | null;\n premiereserve: boolean | null;\n provisiekeuze: Provisiekeuze | null;\n}\n\nexport interface DekkingReadOnly {\n dekkingId: string;\n readonly productnaam: string | null;\n}\n\nexport interface DekkingenOutput {\n dekkingen: { [key: string]: Dekking; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Dekkingsoort Geen = 0, Leven = 1, Spaar = 2, Belegging = 3, Risico = 4, KapWoning = 5, Lijfrente = 6, Hybride = 7, Uitvaart = 8, Aansprakelijkheid = 9, Opstal = 10, Inboedel = 11, Ongevallen = 12, Rechtsbijstand = 13, Reis = 14, Caravan = 15, Kostbaarheden = 16, Motorrijtuig = 17, Motor = 18, Buitenshuis = 19, BromfietsScooter = 20, Auto = 21, Fiets = 22, Boot = 23, Annulering = 24, Glas = 25, Ziektekosten = 26, Abonnement = 27, OngevallenZiekte = 28, OngevallenInzittenden = 29, Aanhangwagen = 30, Brand = 31, OpstalAnboedel = 32, Huiselectronica = 33, AansprakelijkheidGewoon = 34, RechtsbijstandVerkeer = 35, RechtsbijstandGezin = 36, RechtsbijstandBedrijf = 37, Buitenlandreizen = 38, Recreatie = 39, Energie = 40, Telecom = 41, Vereniging = 42, GoedDoel = 43, Krant = 44, Tijdschrift = 45, Anders = 99, Pakket = 100, Bestelauto = 210 */\nexport enum Dekkingsoort {\n Geen = \"Geen\",\n Leven = \"Leven\",\n Spaar = \"Spaar\",\n Belegging = \"Belegging\",\n Risico = \"Risico\",\n KapWoning = \"KapWoning\",\n Lijfrente = \"Lijfrente\",\n Hybride = \"Hybride\",\n Uitvaart = \"Uitvaart\",\n Aansprakelijkheid = \"Aansprakelijkheid\",\n Opstal = \"Opstal\",\n Inboedel = \"Inboedel\",\n Ongevallen = \"Ongevallen\",\n Rechtsbijstand = \"Rechtsbijstand\",\n Reis = \"Reis\",\n Caravan = \"Caravan\",\n Kostbaarheden = \"Kostbaarheden\",\n Motorrijtuig = \"Motorrijtuig\",\n Motor = \"Motor\",\n Buitenshuis = \"Buitenshuis\",\n BromfietsScooter = \"BromfietsScooter\",\n Auto = \"Auto\",\n Fiets = \"Fiets\",\n Boot = \"Boot\",\n Annulering = \"Annulering\",\n Glas = \"Glas\",\n Ziektekosten = \"Ziektekosten\",\n Abonnement = \"Abonnement\",\n OngevallenZiekte = \"OngevallenZiekte\",\n OngevallenInzittenden = \"OngevallenInzittenden\",\n Aanhangwagen = \"Aanhangwagen\",\n Brand = \"Brand\",\n OpstalAnboedel = \"OpstalAnboedel\",\n Huiselectronica = \"Huiselectronica\",\n AansprakelijkheidGewoon = \"AansprakelijkheidGewoon\",\n RechtsbijstandVerkeer = \"RechtsbijstandVerkeer\",\n RechtsbijstandGezin = \"RechtsbijstandGezin\",\n RechtsbijstandBedrijf = \"RechtsbijstandBedrijf\",\n Buitenlandreizen = \"Buitenlandreizen\",\n Recreatie = \"Recreatie\",\n Energie = \"Energie\",\n Telecom = \"Telecom\",\n Vereniging = \"Vereniging\",\n GoedDoel = \"GoedDoel\",\n Krant = \"Krant\",\n Tijdschrift = \"Tijdschrift\",\n Anders = \"Anders\",\n Pakket = \"Pakket\",\n Bestelauto = \"Bestelauto\",\n}\n\n/** DoelVerzekeringOptions Hypotheek = 1, VerliesVanInkomen = 2, Compagnon = 3, KeymanKeywoman = 4, AfdekkingErfbelasting = 5, FiscaleClaimBijOverlijden = 6, FinancieringKredietverstrekking = 7, LijfrenteAanvullendPensioenopbouw = 8 */\nexport enum DoelVerzekeringOptions {\n Hypotheek = \"Hypotheek\",\n VerliesVanInkomen = \"VerliesVanInkomen\",\n Compagnon = \"Compagnon\",\n KeymanKeywoman = \"KeymanKeywoman\",\n AfdekkingErfbelasting = \"AfdekkingErfbelasting\",\n FiscaleClaimBijOverlijden = \"FiscaleClaimBijOverlijden\",\n FinancieringKredietverstrekking = \"FinancieringKredietverstrekking\",\n LijfrenteAanvullendPensioenopbouw = \"LijfrenteAanvullendPensioenopbouw\",\n}\n\n/** DoorlopendLeningdeelMeenemenOptions Rentemiddeling = 2, EenOpEen = 3 */\nexport enum DoorlopendLeningdeelMeenemenOptions {\n Rentemiddeling = \"Rentemiddeling\",\n EenOpEen = \"EenOpEen\",\n}\n\n/** Bevat de informatie voor de dossierbalk van een adviesdossier. */\nexport interface DossierbalkInfo {\n /** Korte omschrijving van het advies */\n korteOmschrijving: string | null;\n /** Uitgebreide omschrijving van het advies */\n uitgebreideOmschrijving: string | null;\n /** Externe identificatie van het advies */\n externeIdentificatie: string | null;\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n}\n\n/** Output voor het opvragen van de dossierbalk-informatie. */\nexport interface DossierbalkOutput {\n /** De informatie in de dossierbalk. */\n readonly dossierbalkInfo: { [key: string]: DossierbalkInfo; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Dossierstatus Geen = 0, InBehandeling = 1, Actief = 2, NietActief = 3 */\nexport enum Dossierstatus {\n Geen = \"Geen\",\n InBehandeling = \"InBehandeling\",\n Actief = \"Actief\",\n NietActief = \"NietActief\",\n}\n\n/** DuurOverzichtOptions TotLeeftijd = 1, VasteDuurInJaren = 2, Levenslang = 3 */\nexport enum DuurOverzichtOptions {\n TotLeeftijd = \"TotLeeftijd\",\n VasteDuurInJaren = \"VasteDuurInJaren\",\n Levenslang = \"Levenslang\",\n}\n\n/** DuurPensioenuitkeringOptions TotLeeftijd = 1, Levenslang = 3 */\nexport enum DuurPensioenuitkeringOptions {\n TotLeeftijd = \"TotLeeftijd\",\n Levenslang = \"Levenslang\",\n}\n\n/** EnergieKlasseType Geen = 0, A__ = 1, A_ = 2, A = 3, B = 4, C = 5, D = 6, E = 7, F = 8, G = 9, A___ = 10, A____ = 11, EnergieNeutraal = 12, NulOpDeMeter = 13, A____EP = 14, GeenEnergielabelMogelijk = 90, GeenEnergielabelBeschikbaar = 91 */\nexport enum EnergieKlasseType {\n Geen = \"Geen\",\n A__ = \"A__\",\n A_ = \"A_\",\n A = \"A\",\n B = \"B\",\n C = \"C\",\n D = \"D\",\n E = \"E\",\n F = \"F\",\n G = \"G\",\n A___ = \"A___\",\n A____ = \"A____\",\n EnergieNeutraal = \"EnergieNeutraal\",\n NulOpDeMeter = \"NulOpDeMeter\",\n A____EP = \"A____EP\",\n GeenEnergielabelMogelijk = \"GeenEnergielabelMogelijk\",\n GeenEnergielabelBeschikbaar = \"GeenEnergielabelBeschikbaar\",\n}\n\n/** Extra gegevens van de erfpacht t.b.v. woning in eigendom */\nexport interface ErfpachtOpWoning {\n /** Bedrag jaarlijkse canon */\n erfpachtBedrag: number | null;\n /** Indicatieveld. Is er sprake van eeuwigdurende erfpacht? */\n erfpachtEeuwigdurend: boolean;\n /** Datum einde erfpacht */\n erfpachtEinddatum: string | null;\n /** Indicatie dat er sprake is van particuliere erfpacht */\n erfpachtParticulier: boolean;\n}\n\n/** Error object zoals gebruikt door ING */\nexport interface ErrorMessageType {\n /** Gets or sets veld met Error (uit de XML) */\n veld: string | null;\n /** Gets or sets ING error code */\n code: string | null;\n /** Gets or sets leesbare melding */\n message: string | null;\n}\n\n/** Bevat gegevens van bestaande eigenwoningreserve of -schuld. */\nexport interface EwrOfEws {\n /** Bedrag (bestaanden) Eigenwoning reserve */\n bestaandeEwrBedrag: number | null;\n /** Bedrag eigenwoningschuld (EWS) overgangsrecht */\n ewsOvergangsrechtBedrag: number | null;\n /** Bedrag eigenwoningschuld (EWS) met verplichte aflossing */\n ewsVerplichteAflossingBedrag: number | null;\n /** Collectie met renteaftrek voor EwsOvergangsrecht */\n ewsOvergangsrechtRenteaftrekken: WoonsituatieRenteaftrek[] | null;\n /** Collectie met renteaftrek voor verplichte aflossing */\n ewsVerplichteAflossingRenteaftrekken: WoonsituatieRenteaftrek[] | null;\n}\n\nexport interface EwsInput {\n koopsomBedrag: number | null;\n bouwrenteVoorAankoopBedrag: number | null;\n verbouwingBedrag: number | null;\n meerwerkBedrag: number | null;\n overdrachtsbelastingBedrag: number | null;\n courtageBedrag: number | null;\n transportakteBedrag: number | null;\n erfpachtAfkoopBedrag: number | null;\n vergoedingPartnerBedrag: number | null;\n readonly doorlopendeLeningdelenBox1Bedrag: number | null;\n afsluitkostenBedrag: number | null;\n readonly advieskostenBedrag: number | null;\n readonly bemiddelingsvergoedingGeldleningBedrag: number | null;\n readonly dossiervergoedingBedrag: number | null;\n gespreidBetalen: boolean | null;\n gespreidBetalenDuurInMaanden: number | null;\n advieskostenGespreidBedrag: number | null;\n bemiddelingsvergoedingGeldleningGespreidBedrag: number | null;\n nhgBedrag: number | null;\n hypotheekakteBedrag: number | null;\n taxatiekostenBedrag: number | null;\n startersleningAfsluitprovisieBedrag: number | null;\n afsluitkostenOverbruggingskredietBedrag: number | null;\n bereidstellingsprovisieBedrag: number | null;\n kostenOmzettingBedrag: number | null;\n overigeKosten1Bedrag: number | null;\n overigeKosten2Bedrag: number | null;\n overigeKosten3Bedrag: number | null;\n royementskostenBedrag: number | null;\n gewensteHypotheekBedrag: number | null;\n financieringskostenAftrekbaarPercentage: number | null;\n financieringskostenAftrekbaarOvernemen: boolean;\n arbeidskostenNotarisBedrag: number | null;\n}\n\nexport interface EwsOutput {\n resultaat: EwsResultaat | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface EwsResultaat {\n investeringBedrag: number | null;\n financieringskostenAftrekbaarPercentage: number | null;\n financieringskostenAftrekbaarBedrag: number | null;\n financieringskostenBedrag: number | null;\n maximaalTeFinancierenBox1Bedrag: number | null;\n ewsBedrag: number | null;\n ewrBedrag: number | null;\n advieskostenAftrekbaarBedrag: number | null;\n ewsAflossingBedrag: number | null;\n}\n\n/** Bevat een keuze voor 'FinanciĆ«le planning'. */\nexport interface FinancielePlanningKeuze {\n keuze: FinancielePlanningOptions;\n}\n\n/** FinancielePlanningOptions Overlijden = 1, Arbeidsongeschiktheid = 2, Werkloosheid = 3, Pensioen = 4, Vermogensopbouw = 5 */\nexport enum FinancielePlanningOptions {\n Overlijden = \"Overlijden\",\n Arbeidsongeschiktheid = \"Arbeidsongeschiktheid\",\n Werkloosheid = \"Werkloosheid\",\n Pensioen = \"Pensioen\",\n Vermogensopbouw = \"Vermogensopbouw\",\n}\n\n/** FinancieringOptions AankoopNieuwbouw = 1, AankoopBestaandeBouw = 2, HuidigeHypotheekWijzigen = 3, GeenFinanciering = 4 */\nexport enum FinancieringOptions {\n AankoopNieuwbouw = \"AankoopNieuwbouw\",\n AankoopBestaandeBouw = \"AankoopBestaandeBouw\",\n HuidigeHypotheekWijzigen = \"HuidigeHypotheekWijzigen\",\n GeenFinanciering = \"GeenFinanciering\",\n}\n\n/** Bevat de gegevens van het scherm Financieringsbehoefte. */\nexport interface Financieringsbehoefte {\n /** Omschrijving van het eerste voorstel */\n readonly omschrijvingVoorstel1: string | null;\n hypotheekNorm: TarievenNorm | null;\n /** Wanneer partner aanwezig is, benodigd voor eigendomsverhouding */\n readonly heeftPartner: boolean | null;\n /** Restant schuld box 1 */\n readonly restantSchuldBox1Bedrag: number | null;\n /** Restant schuld box 3 */\n readonly restantSchuldBox3Bedrag: number | null;\n /** Bedrag vrij vermogen */\n vrijVermogenBedrag: number | null;\n /** Berekend bedrag vrij vermogen */\n vrijVermogenBerekendBedrag: number | null;\n /** Indicatie dat het berekende vrij vermogen van de huidige situatie overgenomen moet worden */\n vrijVermogenOvernemen: boolean | null;\n /** Overwaarde t.b.v. de vermogenspositie */\n readonly overwaardeVermogenBedrag: number | null;\n /** Af te lossen bestaande overige lening(en) (kredieten) */\n readonly afTeLossenOverigeLeningenBedrag: number | null;\n /** Totaal van de huidige leningdelen */\n readonly totaalHuidigeLeningdelen: number | null;\n /** Het gewenste hypotheekbedrag */\n gewensteHypotheekBedrag: number | null;\n /** Vaste kosten die de adviseur in rekening brengt voor het adviseren */\n readonly advieskostenBedrag: number | null;\n /** Vaste kosten die de adviseur in rekening brengt voor het bemiddelen van de geldlening */\n readonly bemiddelingsvergoedingGeldleningBedrag: number | null;\n /** Overige vaste bemiddelingsvergoeding die de adviseur in rekening brengt voor het adviseren */\n readonly overigeBemiddelingsvergoedingBedrag: number | null;\n /** Vaste kosten die de adviseur in rekening brengt voor het beheer van het dossier t.b.v. de geldlening. */\n readonly dossiervergoedingBedrag: number | null;\n /** Indicatie dat de advieskosten gespreid betaald moeten worden */\n gespreidBetalen: boolean | null;\n /** Aantal maanden waarover het bedrag aan advieskosten gespreid wordt */\n gespreidBetalenDuurInMaanden: number | null;\n /** Vaste kosten die de adviseur in rekening brengt voor het adviseren */\n advieskostenGespreidBedrag: number | null;\n /** Indicatie dat het bedrag van de te spreiden advieskosten automatisch bepaald wordt */\n advieskostenGespreidOvernemen: boolean | null;\n /** Vaste kosten die de adviseur in rekening brengt voor het bemiddelen van de geldlening */\n bemiddelingsvergoedingGeldleningGespreidBedrag: number | null;\n /** Indicatie dat het bedrag van de te spreiden bemiddelingsvergoeding automatisch bepaald wordt */\n bemiddelingsvergoedingGeldleningGespreidOvernemen: boolean | null;\n /** Overige vaste bemiddelingsvergoeding die de adviseur in rekening brengt voor het adviseren */\n overigeBemiddelingsvergoedingGespreidBedrag: number | null;\n /** Indicatie dat het bedrag van de te spreiden overige bemiddelingsvergoeding automatisch bepaald wordt */\n overigeBemiddelingsvergoedingGespreidOvernemen: boolean | null;\n /** Passeerdatum van de hypotheek */\n readonly passeerdatum: string | null;\n /** Volgnummer van het voorstel waar de financieringsbehoefte onder valt */\n volgnummerVoorstel: number;\n /** Naam van het voorstel */\n readonly omschrijving: string | null;\n /** Percentage aftrekbare afsluitkosten indien door gebruiker zelf ingevuld */\n financieringskostenAftrekbaarPercentage: number | null;\n /** Indicatie dat het aftrekbaar percentage van de afsluitkosten berekend moet worden */\n financieringskostenAftrekbaarOvernemen: boolean;\n /** Bedrag hypothecaire inschrijving */\n inschrijvingBedrag: number | null;\n /** Indicatie dat de hypothecaire inschrijving automatisch bepaald (overgenomen) moet worden */\n inschrijvingOvernemen: boolean | null;\n /** Het berekende bevoorschottingspercentage (verhouding tussen marktwaarden en gewenste hypotheek) */\n readonly bevoorschottingspercentage: number | null;\n /** Het berekende maximale bevoorschottingspercentage */\n readonly maxBevoorschottingspercentage: number | null;\n /** Indicatie of NHG mogelijk is */\n readonly nhgMogelijk: boolean | null;\n /** Maximale hypotheek op basis van de koopsom. */\n readonly maximaleHypotheekKoopsom: number | null;\n /** Saldo in box 1 van de huidige leningdelen die doorlopen van verkochte panden */\n doorlopendeLeningdelenBox1Bedrag: number | null;\n financieringsopzet: FinancieringsbehoefteFinancieringsopzet;\n pand: FinancieringsbehoeftePand;\n /** De specificatie van de netto verkoopopbrengst. */\n readonly specificatiesNettoVerkoopopbrengst: SpecificatieNettoVerkoopopbrengst[] | null;\n /** De specificatie van (extra) werkzaamheden die gedaan moeten worden */\n specificatiesVerbouwingVerbetering: FinancieringsbehoefteVerbouwing[] | null;\n /** Uitbetalingen per maand van de bouw. */\n uitbetalingen: Uitbetaling[] | null;\n /** Lijst met te beeindigen leningdelen, nodig voor de berekening van de boeterente */\n teBeeindigenLeningdelen: TeBeeindigenLeningdeel[] | null;\n /** Indicatie dat overbruggingskrediet mogelijk is */\n overbruggingskredietMogelijk: boolean;\n overbruggingskrediet: FinancieringsbehoefteOverbrugging | null;\n rentelastenOverbruggingskrediet: RentelastenOverbrugging | null;\n ewsResultaat: EwsResultaat | null;\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n /** Geeft aan of de financieringsbehoefte eerder opgeslagen is of niet. */\n eerderOpslagen: boolean;\n nhgMogelijkResultaat: NhgMogelijkOutput | null;\n}\n\n/** Gegevens van een financieringsopzet */\nexport interface FinancieringsbehoefteFinancieringsopzet {\n /** Bedrag bankgarantie */\n bankgarantieBedrag: number | null;\n /** Bedrag bankgarantiekosten */\n kostenBankgarantieBedrag: number | null;\n /** Indicatieveld. Is er sprake van taxatiekosten */\n taxatiekosten: boolean | null;\n /** Bedrag taxatiekosten */\n taxatiekostenBedrag: number | null;\n /** Indicatieveld. Is er sprake van kosten opmaken hypotheekakte */\n hypotheekakte: boolean | null;\n /** Bedrag opmaken hypotheekakte */\n hypotheekakteBedrag: number | null;\n /** Bedrag arbeidskosten Notaris */\n arbeidskostenNotarisBedrag: number | null;\n /** Indicatieveld. Is er sprake van inbreng eigen geld */\n inbrengEigenGeld: boolean | null;\n /** Bedrag inbreng eigen geld */\n inbrengEigenGeldBedrag: number | null;\n /** Bedrag boeterente aflossing */\n boeterenteBedrag: number | null;\n /** Omschrijving inbreng eigen geld */\n eigenGeldOmschrijving1: string | null;\n /** EigenGeldOmschrijving2 */\n eigenGeldOmschrijving2: string | null;\n /** Bedrag inbreng eigen geld */\n eigenGeldBedrag1: number | null;\n /** Bedrag inbreng eigen geld */\n eigenGeldBedrag2: number | null;\n /** Bedrag gewenst consumptief te besteden bedrag */\n gewenstConsumptiefBedrag: number | null;\n /** Bedrag van de huidige leningdelen die doorlopen (berekend) */\n readonly doorlopendeLeningdelenBedrag: number | null;\n /** Geeft aan of er doorlopende leningdelen zijn in de situatie */\n readonly heeftDoorlopendeLeningdelen: boolean | null;\n /** Geeft aan of er in het voorstel leningdelen bestaan */\n readonly analyseHeeftLeningdelen: boolean | null;\n /** Vergoeding aan partner conform akte van verdeling */\n vergoedingPartnerBedrag: number | null;\n soortFinanciering: Financieringsoort | null;\n /** Indicatie dat de aanvrager gebruik wil maken van een Starterslening */\n starterslening: boolean | null;\n /** Bedrag Starterslening */\n startersleningBedrag: number | null;\n /** Afsluitprovisie berekend over de SVn Starterslening */\n startersleningAfsluitprovisieBedrag: number | null;\n /** Bedrag restschuld huidige woning */\n restschuldTotaalBedrag: number | null;\n /** Indicatie of de restschuld berekend moet worden aan de hand van de verkoopgegevens van de huidige woning */\n restschuldOvernemen: boolean | null;\n /** Berekend bedrag restschuld huidige woning */\n restschuldTotaalBerekendBedrag: number | null;\n /** Bedrag van de administratiekosten die de maatschappij rekent voor het omzetten van een of meerdere leningdelen */\n kostenOmzettingBedrag: number | null;\n /** Inbreng eigen middelen uit overwaarde */\n eigenGeldOverwaardeBedrag: number | null;\n /** Bereidstellingsprovisie (kosten om de geldigheidstermijn van de offerte te verlengen) */\n bereidstellingsprovisieBedrag: number | null;\n /** Bedrag van de extra aflossing als onderdeel van inbreng eigen geld */\n eigenGeldExtraAflossing: number | null;\n /** Bedrag extra kosten huidige hypotheek */\n extraKostenHuidigBedrag: number | null;\n /** Bedrag bijkomende kosten restschuld */\n restschuldBijkomendeKosten: number | null;\n /** Bedrag inbreng eigen geld voor verlagen restschuld */\n eigenGeldRestschuldBedrag: number | null;\n /** Bedrag inbreng kortlopende lening / krediet */\n inbrengKredietBedrag: number | null;\n /** Overige financiering 1 */\n overigeFinanciering1Omschrijving: string | null;\n /** Overige financiering 2 */\n overigeFinanciering2Omschrijving: string | null;\n /** Bedrag overige financiering 1 */\n overigeFinanciering1Bedrag: number | null;\n /** Bedrag overige financiering 1 */\n overigeFinanciering2Bedrag: number | null;\n /** Bankgarantie aanvragen */\n bankgarantieAanvragen: boolean | null;\n /** Bedrag voor de NHG */\n nhgBedrag: number | null;\n /** Bestaand NHG bedrag. */\n readonly bestaandNhgBedrag: number | null;\n /** Som doorlopende leningdelen zonder NHG. */\n readonly doorlopendZonderNhgBedrag: number | null;\n /** Indicatieveld. Is er sprake van een leveringsakte/transportakte? */\n transportakte: boolean | null;\n /** Bedrag kosten transportakte */\n transportakteBedrag: number | null;\n /** Bedrag overige mee te financieren kosten */\n overigeKosten1Bedrag: number | null;\n /** Indicatieveld. Is er sprake van overdrachtbelasting? */\n overdrachtsbelasting: boolean | null;\n /** Bedrag overdrachtsbelasting */\n overdrachtsbelastingBedrag: number | null;\n /** Percentage overdrachtsbelasting */\n overdrachtsbelastingPercentage: number | null;\n /** Indicatieveld. Is er sprake van makelaarscourtage? */\n courtage: boolean | null;\n /** Bedrag makelaarscourtage */\n courtageBedrag: number | null;\n /** Bedrag koopsom woning */\n koopsomBedrag: number | null;\n /** Indicatieveld. Is er sprake van kosten koper? */\n kostenKoper: boolean | null;\n /** Bedrag kosten grond */\n kostenGrondBedrag: number | null;\n /** Stichtingskosten bij nieuwbouw */\n stichtingskostenBedrag: number | null;\n /** Grond reeds in bezit */\n grondReedsInBezit: boolean | null;\n /** Bedrag renteverlies tijdens de bouw */\n renteverliesTijdensBouwBedrag: number | null;\n /** Bedrag meerwerk */\n meerwerkBedrag: number | null;\n /** Bedrag verbouwing/verbetering */\n verbouwingBedrag: number | null;\n /** Omschrijving overige kosten */\n overigeKosten1Omschrijving: string | null;\n /** Bedrag afkoop erfpacht */\n erfpachtAfkoopBedrag: number | null;\n /** Datum erfpacht afgekocht */\n erfpachtAfgekochtTotDatum: string | null;\n /** Bedrag koopsom roerende zaken */\n roerendeZakenBedrag: number | null;\n /** Bedrag bouwrente over de periode voor aankoop */\n bouwrenteVoorAankoopBedrag: number | null;\n /** Bedrag bouwrente over de periode voor aankoop */\n bouwrenteNaAankoopBedrag: number | null;\n /** Omschrijving overige kosten 2 */\n overigeKosten2Omschrijving: string | null;\n /** Bedrag overige mee te financieren kosten 2 */\n overigeKosten2Bedrag: number | null;\n overigeKosten1Box: Belastingbox | null;\n overigeKosten2Box: Belastingbox | null;\n /** Bedrag verbouwing/verbetering niet waardevermeerderen */\n meerwerkWaardeloosBedrag: number | null;\n /** Percentage hypotheekrente t.b.v. renteverlies tijdens de bouw */\n renteverliesHypotheekrentePercentage: number | null;\n /** Percentage depotvergoeding */\n depotvergoedingPercentage: number | null;\n /** Bedrag aan energiebesparende maatregelen */\n energiebesparendeMaatregelenBedrag: number | null;\n /** Bedrag waarvan in energiebespaarbudget */\n energiebespaarbudgetBedrag: number | null;\n /** Bedrag achterstallig onderhoud bij verbouwing/verbetering */\n achterstalligOnderhoudBedrag: number | null;\n /** Indicatie of de overige kostenpost eenmalig aftrekbaar is in het jaar van betaling */\n overigeKosten1EenmaligAftrekbaar: boolean | null;\n /** Indicatie of de 2e overige kostenpost eenmalig aftrekbaar is in het jaar van betaling */\n overigeKosten2EenmaligAftrekbaar: boolean | null;\n /** Indicatie dat de NHG-kosten berekend zijn */\n nhgKostenOvernemen: boolean | null;\n /** Overwaarde gebruiken als eigen geld */\n eigenGeldOverwaarde: boolean | null;\n /** Bedrag af te lossen bestaande hypotheken */\n hypotheekAflossingBedrag: number | null;\n /** Indicatie dat het 'bedrag af te lossen bestaande hypotheken' overgenomen moet worden */\n hypotheekAflossingOvernemen: boolean | null;\n /** Berekend bedrag af te lossen bestaande hypotheken */\n readonly hypotheekAflossingBerekendBedrag: number | null;\n /** Omschrijving overige kosten 3 */\n overigeKosten3Omschrijving: string | null;\n /** Bedrag overige mee te financieren kosten 3 */\n overigeKosten3Bedrag: number | null;\n overigeKosten3Box: Belastingbox | null;\n /** Indicatie of de 3e overige kostenpost eenmalig aftrekbaar is in het jaar van betaling */\n overigeKosten3EenmaligAftrekbaar: boolean | null;\n /** Indicatie dat de berekende overwaarde bij inbreng eigen geld overgenomen moet worden */\n eigenGeldOverwaardeOvernemen: boolean | null;\n /** Indicatie dat de eigenwoningschuld berekend moet worden */\n eigenwoningschuldOvernemen: boolean | null;\n /** Bedrag eigenwoningschuld indien deze niet berekend maar door de gebruiker zelf ingevoerd is */\n eigenwoningschuldBedrag: number | null;\n /** Bedrag berekende inbreng eigen geld uit opgebouwde waarde (berekend) */\n readonly eigenGeldInbrengBedrag: number | null;\n /** Bedrag inbreng eigen geld uit inbreng polis/rekening met vrije invoer */\n eigenGeldInbrengOverig1Bedrag: number | null;\n /** Bedrag inbreng eigen geld uit opgebouwde waarde ter verlaging van restschuld */\n eigenGeldInbrengRestschuldBedrag: number | null;\n /** Indicatie dat de inbreng eigen geld uit opgebouwde waarde ter verlaging van restschuld berekend moet worden */\n eigenGeldInbrengRestschuldOvernemen: boolean | null;\n /** Omschrijving inbreng eigen geld uit inbreng polis/rekening met vrije invoer */\n eigenGeldInbrengOverig1Omschrijving: string | null;\n /** Soort nieuwbouw conform de HDN keuzelijst SoortNieuwbouwType */\n soortNieuwbouw: number | null;\n /** Soort zelfbouw conform de HDN keuzelijst SoortZelfbouwType */\n soortZelfbouw: number | null;\n /** Royementskosten die meegefinancierd moeten worden */\n royementskostenBedrag: number | null;\n /** Het bedrag dat betaald is aan de bouwkundige keuring */\n bouwkundigeKeuringBedrag: number | null;\n bouwkundigeKeuringBox: Belastingbox | null;\n /** Geeft aan of de kosten voor de bouwkundige keuring eenmalig aftrekbaar zijn. */\n bouwkundigeKeuringEenmaligAftrekbaar: boolean | null;\n /** Geeft de toekomstige energie (label) klasse in welke de woning gaat vallen na de verbouwing volgens de HDN keuzelijst EnergieKlasseType */\n energieklasseToekomstig: number | null;\n}\n\n/** Gegevens van een overbrugging */\nexport interface FinancieringsbehoefteOverbrugging {\n /** De hoogte van het overbruggingskrediet */\n overbruggingBedrag: number | null;\n /** De bij het overbruggingskrediet behorende afsluitkosten (provisie) */\n afsluitkostenBedrag: number | null;\n /** Het gedeelte van de overbrugging dat in box 1 valt (box 3 wordt hiervan afgeleid) */\n box1Bedrag: number | null;\n /** Indicatie dat de overwaarde default overgenomen moet worden */\n overwaardeMeenemen: boolean | null;\n /** Indicatie dat de einddatum default overgenomen moet worden van de verkoopdatum van een te verkopen pand */\n einddatumMeenemen: boolean | null;\n /** De einddatum van het overbruggingskrediet */\n einddatum: string | null;\n /** Aantal maanden rentevastperiode */\n rentevastAantalMaanden: number | null;\n /** De rente van het overbruggingskrediet */\n rentePercentage: number | null;\n /** De ingangsdatum van het overbruggingskrediet (gelijk aan passeerdatum) */\n aanvangsdatum: string | null;\n /** Het gedeelte van de overwaarde dat meegenomen moet worden in het overbruggingskrediet */\n meenemenInOverbruggingBedrag: number | null;\n}\n\n/** Gegevens van een pand */\nexport interface FinancieringsbehoeftePand {\n /** Indicatieveld. Is er sprake van erfpacht? */\n erfpacht: boolean | null;\n /** Indicatieveld. Is de erfpacht afgekocht? */\n erfpachtAfgekocht: boolean | null;\n /** Indicatieveld. Is er sprake van eeuwigdurende erfpacht? */\n erfpachtEeuwigdurend: boolean | null;\n /** Datum einde erfpacht */\n erfpachtEinddatum: string | null;\n /** Bedrag jaarlijkse canon */\n erfpachtBedrag: number | null;\n /** Bedrag WOZ-waarde */\n wozWaarde: number | null;\n /** Bedrag eigenwoningforfait */\n eigenWoningForfaitBedrag: number | null;\n /** Bedrag getaxeerde marktwaarde */\n taxatieBedrag: number | null;\n /** Bedrag marktwaarde na verbouw */\n marktwaardeNaVerbouwingBedrag: number | null;\n /** Aantal maanden duur van de bouw */\n duurBouwInMaanden: number | null;\n /** Eigendomsverhouding aanvrager 1 */\n eigendom1Percentage: number | null;\n /** Eigendomsverhouding aanvrager 2 */\n eigendom2Percentage: number | null;\n gebruikPand: GebruikPandSoort | null;\n /** Indicatie dat er sprake is van particuliere erfpacht */\n erfpachtParticulier: boolean | null;\n adres: AdresReadOnly | null;\n}\n\n/** Bevat gegevens van de verbouwing van een taxatie. */\nexport interface FinancieringsbehoefteVerbouwing {\n /** De unieke identificatie van een verbouwing. */\n verbouwingId: string | null;\n /** Volgnummer van de verbouwing binnen een pand */\n volgnummer: number;\n /** Omschrijving werkzaamheden */\n werkzaamheden: string | null;\n /** Bedrag werkzaamheden */\n werkzaamhedenBedrag: number | null;\n /** Code veld. Bevat waarde uit ENUM_TAUVerbouwType */\n typeVerbouwing: string | null;\n /** Omschrijving werkzaamheden */\n omschrijving: string | null;\n /** Indicatieveld. Verbouwing in eigen beheer */\n verbouwingInEigenBeheer: boolean | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Financieringsbehoefte. */\nexport interface FinancieringsbehoeftenOutput {\n /** Lijst met de inhoud van scherm Financieringsbehoefte per Voorstel. */\n financieringsbehoeften: { [key: string]: Financieringsbehoefte; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Financieringsoort Geen = 0, AankoopBestaandeBouw = 1, AankoopNieuwbouw = 2, Oversluiten = 3, Heropname = 4, _2eHypotheek = 5, _3eHypotheek = 6, _4eHypotheek = 7, Omzetting = 8, _1eHypotheek = 9 */\nexport enum Financieringsoort {\n Geen = \"Geen\",\n AankoopBestaandeBouw = \"AankoopBestaandeBouw\",\n AankoopNieuwbouw = \"AankoopNieuwbouw\",\n Oversluiten = \"Oversluiten\",\n Heropname = \"Heropname\",\n _2eHypotheek = \"_2eHypotheek\",\n _3eHypotheek = \"_3eHypotheek\",\n _4eHypotheek = \"_4eHypotheek\",\n Omzetting = \"Omzetting\",\n _1eHypotheek = \"_1eHypotheek\",\n}\n\n/** FiscaalRegimeOptions PreBredeHerwaardering = 0, BredeHerwaardering = 1, Ib2001 = 2 */\nexport enum FiscaalRegimeOptions {\n PreBredeHerwaardering = \"PreBredeHerwaardering\",\n BredeHerwaardering = \"BredeHerwaardering\",\n Ib2001 = \"Ib2001\",\n}\n\n/** Bevat gegevens van fiscale aftrekposten. */\nexport interface FiscaleAftrekposten {\n /** Bedrag aan te betalen partneralimentatie */\n teBetalenPartnerAlimentatieBedrag: number;\n /** Einddatum van de betaling van de partneralimentatie */\n teBetalenPartnerAlimentatieEinddatum: string | null;\n}\n\n/** Bevat gegevens van fiscale bijtelposten. */\nexport interface FiscaleBijtelposten {\n /** Bedrag cataloguswaarde auto van de zaak */\n autovdZaakCataloguswaardeBedrag: number;\n bijtellingAutovdZaak: BijtellingAutovdZaakOpties;\n /** Eigen bijdrage t.b.v. de auto van de zaak */\n bijdrageAutovdZaakBedrag: number;\n /** Handmatig opgegeven bijtellingbedrag */\n autovdZaakBijtellingBedrag: number | null;\n}\n\n/** FiscalePlaatsingOrvOptions Box1 = 0, Box3 = 1 */\nexport enum FiscalePlaatsingOrvOptions {\n Box1 = \"Box1\",\n Box3 = \"Box3\",\n}\n\n/** FiscaleTyperingOptions Geen = 0, KapitaalverzekeringEigenWoningKew = 1, SpaarrekeningEigenWoningSew = 2, BeleggingsrekeningEigenWoningBew = 3, KapitaalverzekeringZonderEigenWoning = 4 */\nexport enum FiscaleTyperingOptions {\n Geen = \"Geen\",\n KapitaalverzekeringEigenWoningKew = \"KapitaalverzekeringEigenWoningKew\",\n SpaarrekeningEigenWoningSew = \"SpaarrekeningEigenWoningSew\",\n BeleggingsrekeningEigenWoningBew = \"BeleggingsrekeningEigenWoningBew\",\n KapitaalverzekeringZonderEigenWoning = \"KapitaalverzekeringZonderEigenWoning\",\n}\n\nexport interface FiscaleVoortzettingKeuze {\n productId: string | null;\n omschrijving: string | null;\n productkenmerken: ProductKenmerken | null;\n}\n\n/** FiscaleVoortzettingOptions Geen = 0, VoortgezetProduct = 1, EigenInvoer = 2 */\nexport enum FiscaleVoortzettingOptions {\n Geen = \"Geen\",\n VoortgezetProduct = \"VoortgezetProduct\",\n EigenInvoer = \"EigenInvoer\",\n}\n\n/** Garantiesoort Geen = 0, Nhg = 1, Gemeente = 2 */\nexport enum Garantiesoort {\n Geen = \"Geen\",\n Nhg = \"Nhg\",\n Gemeente = \"Gemeente\",\n}\n\n/** GebruikPandSoort Geen = 0, PrimaireWoning = 1, TweedeWoning = 2, DeelsVerhuurd = 3, GeheelVerhuurd = 4 */\nexport enum GebruikPandSoort {\n Geen = \"Geen\",\n PrimaireWoning = \"PrimaireWoning\",\n TweedeWoning = \"TweedeWoning\",\n DeelsVerhuurd = \"DeelsVerhuurd\",\n GeheelVerhuurd = \"GeheelVerhuurd\",\n}\n\n/** GedeeltelijkeUitkeringAoOpties WerkelijkAoPercentage = 1, Staffel = 2 */\nexport enum GedeeltelijkeUitkeringAoOpties {\n WerkelijkAoPercentage = \"WerkelijkAoPercentage\",\n Staffel = \"Staffel\",\n}\n\n/** Geldverstrekker gegevens */\nexport interface Geldverstrekker {\n /** Code van de geldverstrekker (volgens nat. waarborg). */\n code: string | null;\n /** Naam geldverstrekker. */\n naam: string | null;\n}\n\n/** De uitvoer van de gemiddeld jaarinkomen-berekening. */\nexport interface GemiddeldInkomenOutput {\n resultaat: BerekendGemiddeldInkomen | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** GeslachtOpties Geen = 0, Man = 1, Vrouw = 2 */\nexport enum GeslachtOpties {\n Geen = \"Geen\",\n Man = \"Man\",\n Vrouw = \"Vrouw\",\n}\n\n/** Bevat de uitvoer van het exporteren van een adviesdossier naar hbx. */\nexport interface HbxExportOutput {\n /** Het gegenereerde hbx-bestand */\n resultaat: string | null;\n /** De (default) bestandsnaam */\n filename: string | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat gegevens van heffingskortingen. Alleen de beleggingskorting wordt momenteel gebruikt, de andere kortingen zijn daarom voorlopig verwijderd */\nexport interface Heffingskortingen {\n /** Beleggingskorting */\n beleggingskortingBedrag: number;\n}\n\n/** HoogLaagConstructie Onbekend = 0, HoogLaag = 1, LaagHoog = 2, Geen = 3, Eenmalig = 4 */\nexport enum HoogLaagConstructie {\n Onbekend = \"Onbekend\",\n HoogLaag = \"HoogLaag\",\n LaagHoog = \"LaagHoog\",\n Geen = \"Geen\",\n Eenmalig = \"Eenmalig\",\n}\n\n/** Extra gegevens van het huidige pand t.b.v. woning in eigendom */\nexport interface HuidigPand {\n /** Code van het type woning volgens de HDN keuzelijst CodeObjectType */\n typePand: number | null;\n /** Code van het gebruiksdoel van het betreffende object volgens de HDN keuzelijst ObjectSoortType */\n objectSoort: number | null;\n /** Code van het bijzondere gebruiksdoel van het betreffende object volgens de HDN keuzelijst BijzObjectSoortType */\n bijzonderObjectSoort: number | null;\n /** Indicatie dat er een garage aanwezig is */\n heeftGarage: boolean | null;\n /** Indicatie dat het object wordt gebruikt voor recreatieve bewoning */\n recreatieveBewoning: boolean | null;\n /** Geeft de energie (label) klasse in welke de woning valt volgens de HDN keuzelijst EnergieKlasseType */\n energieklasse: number | null;\n /** Indicatie dat het adres gelijk is het woonadres van de (1e) klant */\n gelijkAanWoonadres: boolean | null;\n adres: Adres | null;\n /** Bouwjaar */\n bouwjaar: number | null;\n /** Opleveringsdatum */\n opleverdatum: string | null;\n /** Bouwplan */\n bouwplan: string | null;\n /** Bouwnummer */\n bouwnummer: string | null;\n /** Kadastrale gemeente */\n kadasterGemeente: string | null;\n /** Kadastrale sectie */\n kadasterSectie: string | null;\n /** Kadastraal nummer */\n kadasterNummer: string | null;\n /** Indicatieveld. Is er sprake van een gedeeld perceel? */\n gedeeld: boolean;\n /** Indicatieveld. Is er sprake van appartementsrecht? */\n appartement: boolean;\n /** Servicekosten */\n servicekosten: number | null;\n /** Geeft de bouwaard van het object weer volgens de HDN keuzelijst BouwaardType */\n bouwaard: number | null;\n /** Staat van onderhoud volgens de HDN keuzelijst OnderhoudsToestandType */\n staatOnderhoud: number | null;\n /** Geeft aan dat op het object een voorwaarde bij verkoop van toepassing is */\n verkoopOnderVoorwaarden: boolean;\n /** Geeft aan welke voorwaarde bij verkoop van toepassing is (indien VerkoopOnderVoorwaarden = True) */\n verkoopOnderVoorwaardenConstructie: number | null;\n /** Omschrijving constructie verkoop onder voorwaarden */\n verkoopOnderVoorwaardenConstructieOmschrijving: string | null;\n /** Afbouwgarantie */\n afbouwgarantie: boolean;\n /** Taxatie aanwezig */\n taxatieAanwezig: boolean;\n /** Taxatiedatum */\n taxatiedatum: string | null;\n /** Datum ontbindende voorwaarden */\n ontbindendeVoorwaardenDatum: string | null;\n /** Geeft aan op welke datum de energie (label) klasse is afgegeven */\n energieklasseDatum: string | null;\n /** Wanneer de erfpacht- of kortingsconstructie nog niet is opgenomen in de waardelijst VerkoopOnderVoorwaardenConstructieType, kan hier \n worden aangegeven om wat voor type constructie het gaat, zodat er rekening mee gehouden kan worden in de volledigheidstoets van NHG. */\n soortConstructieAnders: number | null;\n}\n\n/** Gegevens van de huidige woning */\nexport interface HuidigeWoning {\n /** Referentie naar pand in de huidige situatie */\n readonly pandId: string | null;\n /** Volgnummer van de woning op het scherm */\n readonly volgnummer: number | null;\n /** Bedrag marktwaarde */\n readonly marktwaardeBedrag: number | null;\n adres: AdresReadOnly | null;\n}\n\n/** Bevat gegevens van een huidige woonsituatie. */\nexport interface HuidigeWoonsituatie {\n /** Unieke identificatie van een huidige woonsituatie */\n woonsituatieId: string | null;\n /** Volgnummer van een woonsituatie binnen een situatie */\n volgnummer: number;\n soortWoonsituatie: Woonsituatiesoort;\n bewoners: BewonersOpties;\n ewrOfEws: EwrOfEws | null;\n huurwoning: Huurwoning | null;\n woningInEigendom: WoningInEigendom | null;\n}\n\n/** Extra gegevens van een huurwoning */\nexport interface Huurwoning {\n /** Huur per maand (bedrag) */\n huurPerMaandBedrag: number | null;\n /** Stijging (percentage) per jaar */\n stijgingPercentage: number | null;\n}\n\nexport interface HypotheekAutomatischeRentedaling {\n aanpassingRente: AanpassingRenteOptions;\n renteopslagen: HypotheekRenteopslagMarktwaarde[];\n rentescenario: boolean;\n opslagNaRentevastperiodePercentage: number | null;\n marktwaardeRenteBedrag: number | null;\n}\n\nexport interface HypotheekExtraAflossing {\n extraAflossingId: string | null;\n volgnummer: number;\n datum: string;\n bedrag: number;\n looptijdInMaanden: number;\n betalingstermijn: BetalingsTermijnType | null;\n}\n\nexport interface HypotheekFiscaleRegeling {\n polisnummer: string | null;\n kapitaalopbouw: KapitaalopbouwOptions | null;\n productId: string | null;\n fiscaleVoortzetting: FiscaleVoortzettingOptions | null;\n originelePolisnummer: string | null;\n externeMaatschappijCode: string | null;\n externeMaatschappijOmschrijving: string | null;\n lijfrenteclausuleOrigineel: boolean | null;\n fiscaleTypering: FiscaleTyperingOptions | null;\n garantieverzekering: boolean | null;\n fiscaalRegime: FiscaalRegimeOptions | null;\n oorspronkelijkeIngangsdatum: string | null;\n ingangsdatumBox1: string | null;\n einddatum: string | null;\n doelkapitaalBedrag: number | null;\n laagstePremieooitBedrag: number | null;\n hoogstePremieOoitBedrag: number | null;\n huidigeJaarPremieBedrag: number | null;\n premieLopendJaarBedrag: number | null;\n eerdereUitkeringenBedrag: number | null;\n ingebrachteWaardeBedrag: number | null;\n}\n\nexport interface HypotheekHuidigeSituatie {\n panden: HypotheekPand[] | null;\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n leningdelen: HypotheekHuidigeSituatieLeningdeel[] | null;\n hypotheekAanwezig: boolean;\n readonly oorspronkelijkHypotheekbedragIngevuld: boolean | null;\n readonly administratiekostenBedrag: number | null;\n readonly maatschappijCode: string | null;\n readonly productnaam: string | null;\n}\n\nexport interface HypotheekHuidigeSituatieLeningdeel {\n pandId: string;\n rangorde: number | null;\n klantIds: string[] | null;\n oorspronkelijkeHoofdsomBedrag: number | null;\n garantie: Garantiesoort | null;\n restantHoofdsomOvernemen: boolean | null;\n opgaveDatum: string | null;\n aanvangsdatum: string;\n wijzigingenInDoorlopendeProductenOvernemen: boolean;\n leningdeelId: string | null;\n volgnummer: number;\n meenemen: boolean;\n hypotheekvorm: Hypotheekvorm;\n maatschappijCodeHdn: string | null;\n maatschappijCode: string | null;\n maatschappijOmschrijving: string | null;\n productcode: number;\n leningdeelBedrag: number | null;\n aflossingBedrag: number | null;\n rentevariant: RentevariantOptions;\n renteboxSoort: number | null;\n rentevastAantalMaanden: number | null;\n rentebedenktijdInMaanden: number | null;\n rentevastperiodeEinddatum: string | null;\n renteScenario: PercentageScenario | null;\n leningnummer: string | null;\n looptijdInMaanden: number | null;\n uwBemiddeling: boolean;\n deelBox1Bedrag: number | null;\n consumptiefBedrag: number | null;\n automatischeRentedaling: HypotheekAutomatischeRentedaling | null;\n extraAflossingen: HypotheekExtraAflossing[] | null;\n renteaftrekken: HypotheekRenteaftrek[] | null;\n}\n\nexport interface HypotheekHuidigeSituatieOutput {\n hypotheken: { [key: string]: HypotheekHuidigeSituatie; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface HypotheekHypotheeklabel {\n code: number;\n readonly omschrijving: string | null;\n maatschappijCode: string | null;\n maatschappijOmschrijving: string | null;\n hypotheekopties: Hypotheekoptie[] | null;\n hypotheekoptiesIngPriceTool: HypotheekoptiesIngPriceTool | null;\n}\n\nexport interface HypotheekKapitaalopbouw {\n doelkapitaal1Bedrag: number | null;\n doelkapitaal2Bedrag: number | null;\n doelkapitaal1Overnemen: boolean | null;\n doelkapitaal2Overnemen: boolean | null;\n doelkapitaal1Percentage: number | null;\n doelkapitaal2Percentage: number | null;\n voorbeeldkapitaal1Bedrag: number | null;\n voorbeeldkapitaal2Bedrag: number | null;\n voorbeeldkapitaal1Percentage: number | null;\n voorbeeldkapitaal2Percentage: number | null;\n}\n\n/** Extra gegevens van de hypotheek op het huidige pand t.b.v. woning in eigendom */\nexport interface HypotheekOpWoning {\n /** Oorspronkelijke hypotheek op het pand */\n oorspronkelijkHypotheekbedrag: number | null;\n /** Bedrag hypothecaire inschrijving */\n inschrijvingBedrag: number | null;\n /** Indicatie dat de inschrijving berekend is/moet worden */\n inschrijvingOvernemen: boolean | null;\n}\n\nexport interface HypotheekOverlijdensrisicodekking {\n verzekerdKapitaal1Bedrag: number | null;\n verzekerdKapitaal2Bedrag: number | null;\n premiesplitsing: boolean | null;\n}\n\n/** Bevat de inhoud van het Adviesbox-form Hypotheek oversluiten. */\nexport interface HypotheekOversluiten {\n /** De marktwaarde van het pand. */\n readonly marktwaardeBedrag: number | null;\n /** De gewenste nieuwe hypotheek op het pand. */\n readonly gewensteHypotheekBedrag: number | null;\n /** Het bedrag aan notariskosten dat betaald moet worden. */\n readonly notariskostenBedrag: number | null;\n /** Het bedrag aan taxatiekosten dat betaald moet worden. */\n readonly taxatiekostenBedrag: number | null;\n /** Het bedrag aan NHG kosten dat betaald moet worden indien NHG van toepassing. */\n readonly nhgkostenBedrag: number | null;\n /** Het bedrag aan advieskosten dat betaald moet worden. */\n readonly advieskostenBedrag: number | null;\n /** Het bedrag aan bemiddelingsvergoeding dat betaald moet worden. */\n readonly bemiddelingsvergoedingBedrag: number | null;\n /** Het bedrag aan dossiervergoeding dat betaald moet worden. */\n readonly dossiervergoedingBedrag: number | null;\n /** Het bedrag aan boeterente dat betaald moet worden op de oude hypotheek. */\n readonly boeterenteBedrag: number | null;\n /** De gewenste rentevastperiode op de nieuwe hypotheek. */\n gewensteRentevastperiodeInJaren: number | null;\n /** De totale bruto rentelast van de huidige situaties */\n totaleBrutoRentelast: number;\n /** Huidige situatie van leningdelen. */\n readonly huidigeSituatie: HypotheekOversluitenHuidigeHypotheek[] | null;\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n}\n\n/** Gegevens van een huidig leningdeel. */\nexport interface HypotheekOversluitenHuidigeHypotheek {\n /** Naam van de maatschappij. */\n readonly maatschappij: string | null;\n /** Bedrag van het leningdeel. */\n readonly leningdeelBedrag: number | null;\n /** De rente van het leningdeel. */\n readonly rentepercentage: number | null;\n /** Het bedrag aan bruto rentelasten. */\n readonly brutoRentelastenBedrag: number | null;\n /** Het gecorrigeerde bedrag aan bruto rentelasten. */\n readonly gecorrigeerdeBrutoRentelastenBedrag: number | null;\n /** Rentevastperiode in maanden. */\n readonly rentevastperiodeInMaanden: number | null;\n /** Einddatum huidige rentevastperiode. */\n readonly eindeRentevastperiode: string | null;\n}\n\n/** Uitvoer van de Hypotheek oversluiten berekening voor een label. */\nexport interface HypotheekOversluitenHypotheekLabel {\n /** Code van de geldverstrekker. */\n readonly geldverstrekkerCode: string | null;\n /** Gets or sets verkorte naam van de geldverstrekker. */\n readonly geldverstrekkerNaam: string | null;\n /** Code van het hypotheeklabel binnen een geldverstrekker. */\n hypotheeklabelCode: number;\n /** Gets or sets naam van het hypotheeklabel binnen een geldverstrekker. */\n readonly hypotheeklabelNaam: string | null;\n /** Rentepercentage dat gebruikt is bij de berekening. */\n rentepercentage: number;\n /** De kosten van het oversluiten. */\n oversluitkostenBedrag: number;\n /** Bruto rentelast per maand */\n brutoRentelastPerMaand: number;\n /** Besparing op de bruto rentelast per maand */\n besparingPerMaand: number;\n /** Totale besparing binnen de rentevastperiode */\n besparingRvp: number;\n /** Terugverdienperiode in maanden */\n readonly terugverdienperiodeInMaanden: number | null;\n /** Terugverdienpercentage in nieuwe rentevastperiode */\n readonly terugverdienpercentage: number | null;\n uitslag: UitslagOptions;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Hypotheek oversluiten. */\nexport interface HypotheekOversluitenOutput {\n /** Lijst met de inhoud van het Adviesbox-form Hypotheek oversluiten per voorstel. */\n hypotheekOversluiten: { [key: string]: HypotheekOversluiten; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Uitvoer van de Hypotheek oversluiten berekening. */\nexport interface HypotheekOversluitenResultaat {\n /** De resultaten per label. */\n readonly resultatenPerLabel: HypotheekOversluitenHypotheekLabel[] | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface HypotheekPand {\n pandId: string;\n readonly marktwaardeRenteBedrag: number | null;\n readonly bevoorschottingspercentage: number | null;\n marktwaardeLtvBedrag: number | null;\n readonly marktwaardeLtvBerekendBedrag: number | null;\n marktwaardeLtvOvernemen: boolean | null;\n gebruikPand: GebruikPandSoort | null;\n energieKlasse: EnergieKlasseType | null;\n readonly meerwerkEbvBedrag: number | null;\n readonly totaleHypotheekBedrag: number | null;\n bewoners: BewonersOpties | null;\n}\n\nexport interface HypotheekPremie {\n premieduurInMaanden: number | null;\n readonly einddatumStortingen: string | null;\n premieduurHooglaagInMaanden: number | null;\n readonly einddatumStortingenHoogLaag: string | null;\n hooglaagVerhouding: number | null;\n betalingsTermijn: BetalingsTermijnType | null;\n premieBedrag: number | null;\n premieTotaalBedragLaag: number | null;\n premieTotaalBedragHoog: number | null;\n aanvangsstorting: number | null;\n premiedepot: HypotheekPremiedepot | null;\n}\n\nexport interface HypotheekPremiedepot {\n uitgangspunt: PremiedepotUitgangspunt | null;\n opnameLagePremies: boolean | null;\n opnameHogePremies: boolean | null;\n opnameAanvangsstorting: boolean | null;\n opnameExtraStortingen: boolean | null;\n vergoeding: number | null;\n premiedepotBedrag: number | null;\n premiedepotDuurInMaanden: number | null;\n}\n\nexport interface HypotheekProductwaarde {\n readonly waardeopbouwBedrag: number | null;\n waardeopbouwMaanden: WaardeopbouwInMaand[] | null;\n}\n\nexport interface HypotheekRenteaftrek {\n renteaftrekId: string | null;\n volgnummer: number;\n bedrag: number | null;\n aanvangsdatum: string;\n einddatum: string;\n}\n\nexport interface HypotheekRenteopslagMarktwaarde {\n marktwaardeTmPercentage: number;\n renteopslagPercentage: number | null;\n}\n\nexport interface HypotheekVerklaringInkomen {\n werkgever: boolean;\n uwv: boolean;\n perspectief: boolean;\n accountantsverklaring: boolean;\n ibStukken: boolean;\n}\n\nexport interface HypotheekVoorstel {\n hypotheeklabel: HypotheekHypotheeklabel | null;\n readonly totaleHypotheekBedrag: number | null;\n readonly gewensteHypotheekBedrag: number | null;\n readonly aanvangsdatum: string | null;\n soortFinanciering: Financieringsoort | null;\n readonly nhg: boolean | null;\n readonly eigenwoningschuldBedrag: number | null;\n readonly overbruggingBedrag: number | null;\n readonly kredietenBox1Bedrag: number | null;\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n pand: HypotheekPand | null;\n fiscaleVoortzettingKeuzes: FiscaleVoortzettingKeuze[] | null;\n leningdelen: HypotheekVoorstelLeningdeel[] | null;\n verklaringInkomen: HypotheekVerklaringInkomen | null;\n readonly administratiekostenBedrag: number | null;\n readonly maatschappijCode: string | null;\n readonly productnaam: string | null;\n}\n\nexport interface HypotheekVoorstelLeningdeel {\n doorlopend: boolean;\n readonly aanvangsdatum: string | null;\n readonly opgaveDatum: string | null;\n readonly klantIds: string[] | null;\n verzekeringnemerKlantIds: string[];\n verzekerdeKlantIds: string[];\n kapitaalopbouw: HypotheekKapitaalopbouw | null;\n overlijdensrisicoDekking: HypotheekOverlijdensrisicodekking | null;\n fiscaleRegeling: HypotheekFiscaleRegeling | null;\n premie: HypotheekPremie | null;\n hypotheekoptiesIngPriceTool: HypotheekoptiesIngLeningdeel | null;\n productwaarde: HypotheekProductwaarde | null;\n leningdeelId: string | null;\n volgnummer: number;\n meenemen: boolean;\n hypotheekvorm: Hypotheekvorm;\n maatschappijCodeHdn: string | null;\n maatschappijCode: string | null;\n maatschappijOmschrijving: string | null;\n productcode: number;\n leningdeelBedrag: number | null;\n aflossingBedrag: number | null;\n rentevariant: RentevariantOptions;\n renteboxSoort: number | null;\n rentevastAantalMaanden: number | null;\n rentebedenktijdInMaanden: number | null;\n rentevastperiodeEinddatum: string | null;\n renteScenario: PercentageScenario | null;\n leningnummer: string | null;\n looptijdInMaanden: number | null;\n uwBemiddeling: boolean;\n deelBox1Bedrag: number | null;\n consumptiefBedrag: number | null;\n automatischeRentedaling: HypotheekAutomatischeRentedaling | null;\n extraAflossingen: HypotheekExtraAflossing[] | null;\n renteaftrekken: HypotheekRenteaftrek[] | null;\n}\n\nexport interface HypotheekVoorstelOutput {\n hypotheken: { [key: string]: HypotheekVoorstel; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface Hypotheekoptie {\n code: number;\n readonly omschrijving: string | null;\n readonly toelichting: string | null;\n readonly rentekortingPercentage: number | null;\n geselecteerd: boolean;\n}\n\nexport interface HypotheekoptiesIngLeningdeel {\n readonly productnaam: string | null;\n doorlopendLeningdeelMeenemen: DoorlopendLeningdeelMeenemenOptions | null;\n loyaliteitsbonusBedrag: number | null;\n standaardRenteData: HypotheekoptiesIngRenteData | null;\n ltvData: HypotheekoptiesIngRenteData | null;\n dagrenteData: HypotheekoptiesIngRenteData | null;\n actieveBetaalrekeningData: HypotheekoptiesIngRenteData | null;\n loyaliteitsbonusData: HypotheekoptiesIngRenteData | null;\n teBetalenRenteData: HypotheekoptiesIngRenteData | null;\n optimalisatiemelding: string | null;\n}\n\nexport interface HypotheekoptiesIngPriceTool {\n correlationId: string | null;\n dagrente: boolean;\n actieveBetaalrekening: boolean;\n loyaliteitsbonus: boolean;\n melding: string | null;\n}\n\nexport interface HypotheekoptiesIngRenteData {\n percentage: number | null;\n melding: string | null;\n}\n\nexport interface Hypotheeksamenstelling {\n leningdelen: HypotheeksamenstellingLeningdeel[] | null;\n}\n\nexport interface HypotheeksamenstellingInput {\n maatschappijCode: string | null;\n hypotheeklabelCode: number;\n}\n\nexport interface HypotheeksamenstellingLeningdeel {\n readonly matchHypotheekvormen: Hypotheekvorm[] | null;\n readonly nearMatchHypotheekvormen: Hypotheekvorm[] | null;\n huidigeHypotheekvorm: Hypotheekvorm | null;\n doorlopend: boolean;\n readonly aanvangsdatum: string | null;\n readonly opgaveDatum: string | null;\n readonly klantIds: string[] | null;\n verzekeringnemerKlantIds: string[];\n verzekerdeKlantIds: string[];\n kapitaalopbouw: HypotheekKapitaalopbouw | null;\n overlijdensrisicoDekking: HypotheekOverlijdensrisicodekking | null;\n fiscaleRegeling: HypotheekFiscaleRegeling | null;\n premie: HypotheekPremie | null;\n hypotheekoptiesIngPriceTool: HypotheekoptiesIngLeningdeel | null;\n productwaarde: HypotheekProductwaarde | null;\n leningdeelId: string | null;\n volgnummer: number;\n meenemen: boolean;\n hypotheekvorm: Hypotheekvorm;\n maatschappijCodeHdn: string | null;\n maatschappijCode: string | null;\n maatschappijOmschrijving: string | null;\n productcode: number;\n leningdeelBedrag: number | null;\n aflossingBedrag: number | null;\n rentevariant: RentevariantOptions;\n renteboxSoort: number | null;\n rentevastAantalMaanden: number | null;\n rentebedenktijdInMaanden: number | null;\n rentevastperiodeEinddatum: string | null;\n renteScenario: PercentageScenario | null;\n leningnummer: string | null;\n looptijdInMaanden: number | null;\n uwBemiddeling: boolean;\n deelBox1Bedrag: number | null;\n consumptiefBedrag: number | null;\n automatischeRentedaling: HypotheekAutomatischeRentedaling | null;\n extraAflossingen: HypotheekExtraAflossing[] | null;\n renteaftrekken: HypotheekRenteaftrek[] | null;\n}\n\nexport interface HypotheeksamenstellingOutput {\n resultaat: Hypotheeksamenstelling | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface Hypotheekvorm {\n code: number;\n omschrijving: string | null;\n aflossingsvorm: AflossingsVormType | null;\n renteboxCode: number;\n starterslening: boolean;\n restschuldFinanciering: boolean;\n heeftLooptijdInMaanden: boolean;\n}\n\n/** Indexatiesoort Geen = 0, Uitkering = 1, VerzekerdBedrag = 2 */\nexport enum Indexatiesoort {\n Geen = \"Geen\",\n Uitkering = \"Uitkering\",\n VerzekerdBedrag = \"VerzekerdBedrag\",\n}\n\n/** IndicatieOptions Goedgekeurd = 1, Afgekeurd = 2, ValidatieNietMogelijk = 3 */\nexport enum IndicatieOptions {\n Goedgekeurd = \"Goedgekeurd\",\n Afgekeurd = \"Afgekeurd\",\n ValidatieNietMogelijk = \"ValidatieNietMogelijk\",\n}\n\n/** Inputmodel voor IgnPricetool */\nexport interface IngPriceInput {\n /** Dagrente optie. */\n dagrente: boolean;\n /** Actieve betaalrekening optie. */\n actieveBetaalrekening: boolean;\n /** Loyaliteitsbonus optie. */\n loyaliteitsbonus: boolean;\n /** Lijt met leningdeelgegevens */\n perLeningdelen: PerLeningdeel[] | null;\n /** Wel/geen NHG. */\n nhg: boolean;\n /** Marktwaarde bedrag */\n marktwaarde: number | null;\n /** Hypotheek bedrag. */\n hypotheekBedrag: number | null;\n /** Overbruggings bedrag. */\n overbruggingsBedrag: number | null;\n}\n\n/** Resultaat van de aanroep */\nexport interface IngPriceOutput {\n hypotheek: IngPricetoolHypotheek | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** IngPricetoll hypotheek gegevens */\nexport interface IngPricetoolHypotheek {\n /** Resultaat per leningdeel */\n leningdelenResult: LeningdelenResult[] | null;\n /** OverbruggingsRente */\n overbruggingsRente: string | null;\n /** Ongebruikt hoofdbedrag. */\n ongebruiktHoofdbedrag: string | null;\n errorMessages: ErrorMessageType[] | null;\n}\n\n/** Bevat de inhoud van het Adviesbox-form Inkomen & Fiscus. */\nexport interface InkomenFiscus {\n aanvrager1: InkomenFiscusAanvrager | null;\n aanvrager2: InkomenFiscusAanvrager | null;\n /** Indicatie dat sprake is van optimale fiscale verdeling */\n optimaleFiscaleVerdeling: boolean;\n}\n\n/** Bevat inkomensgegevens van de aanvrager (klant). */\nexport interface InkomenFiscusAanvrager {\n /** Unieke identificatie van de klant */\n klantId: string;\n aowData: AowData | null;\n fiscaleAftrekposten: FiscaleAftrekposten | null;\n fiscaleBijtelposten: FiscaleBijtelposten | null;\n heffingskortingen: Heffingskortingen | null;\n /** Geboortedatum */\n readonly geboortedatum: string | null;\n /** Percentage fiscale verdeling (alleen van belang wanneer de optimale fiscale verdeling niet berekend wordt) */\n fiscaleVerdelingPercentage: number | null;\n /** Indicatie dat aan de wekeneis (minstens 26 van de 36 weken gewerkt voor werkloosheid) is voldaan */\n wekenEis: boolean | null;\n /** Indicatieveld. Voldoet aan jareneis */\n jarenEis: boolean | null;\n /** Aantal jaar arbeidsverleden */\n arbeidsverledenInJaren: number | null;\n soortLoonverklaring: LoonverklaringOpties | null;\n /** Toetsinkomen UWV (bij Verklaring inkomen \"UWV document\")\nVerdiencapaciteit (bij Verklaring inkomen \"Arbeidmarktscan\") */\n toetsinkomenUwv: number | null;\n /** Verdiencapaciteit score volgens de Arbeidsmarktscan */\n verdiencapaciteitScore: number | null;\n /** Rapportnummer van de arbeidsmarktscan */\n rapportnummer: string | null;\n /** De lijst met loondiensten (t.b.v. 'Bruto salaris uit dienstverband') */\n loondiensten: Loondienst[] | null;\n onderneming: Onderneming | null;\n overigeWerkzaamheden: Onderneming | null;\n aanmerkelijkBelang: Onderneming | null;\n teOntvangenAlimentatieExPartner: OverigeInkomstenBox1 | null;\n anwUitkering: OverigeInkomstenBox1 | null;\n wgaUitkering: OverigeInkomstenBox1 | null;\n ivaUitkering: OverigeInkomstenBox1 | null;\n wazUitkering: OverigeInkomstenBox1 | null;\n waoUitkeringTijdelijk: OverigeInkomstenBox1 | null;\n waoUitkeringBlijvend: OverigeInkomstenBox1 | null;\n wajongUitkering: OverigeInkomstenBox1 | null;\n wwUitkering: OverigeInkomstenBox1 | null;\n rwwUitkering: OverigeInkomstenBox1 | null;\n wachtgeld: OverigeInkomstenBox1 | null;\n /** Nabestaandenpensioen voor AOW */\n nabestaandenpensioenVooAow: number | null;\n /** Nabestaandenpensioen na AOW */\n nabestaandenpensioenNaAow: number | null;\n overigeInkomsten1: OverigeInkomstenBox1 | null;\n overigeInkomsten2: OverigeInkomstenBox1 | null;\n inkomstenBox3Verhuur: InkomstenBox3 | null;\n inkomstenBox3Beleggingen: InkomstenBox3 | null;\n /** Indicatie er Ć©Ć©n of meerdere loondiensten aanwezig zijn (t.b.v. 'Bruto salaris uit dienstverband') */\n heeftLoondienst: boolean;\n /** Indicatie er overige inkomsten box 1 aanwezig zijn */\n heeftOverigeInkomstenBox1: boolean;\n /** Indicatie er inkomsten box 3 aanwezig zijn */\n heeftInkomstenBox3: boolean;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Inkomen & Fiscus. */\nexport interface InkomenFiscusOutput {\n /** Lijst met de inhoud van het scherm Inkomen & Fiscus per adviesdossier. */\n inkomenFiscusen: { [key: string]: InkomenFiscus; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface InkomenLoondienstInput {\n vebBedrag: number | null;\n provisieBedrag: number | null;\n onregelmatigheidstoeslagBedrag: number | null;\n vakantiegeldPercentage: number | null;\n maand13: boolean | null;\n gratificatieBedrag: number | null;\n overwerkBedrag: number | null;\n inkomstentoeslag: number | null;\n vastFlexibelBudgetBedrag: number | null;\n}\n\n/** De uitvoer van de inkomensperiode-berekening. */\nexport interface InkomenOutput {\n resultaat: BerekendResultaat | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** InkomenPeriode Geen = 0, PerJaar = 1, PerMaand = 12, Per4Weken = 13, PerWeek = 52 */\nexport enum InkomenPeriode {\n Geen = \"Geen\",\n PerJaar = \"PerJaar\",\n PerMaand = \"PerMaand\",\n Per4Weken = \"Per4Weken\",\n PerWeek = \"PerWeek\",\n}\n\n/** Gegevens van inkomensaanvulling bij overlijden. */\nexport interface InkomensaanvullingBijOverlijden {\n /** Het tarief dat gehanteerd wordt. */\n gehanteerdTariefPercentage: number | null;\n /** Het bedrag aan gewenste uitkering. */\n gewensteUitkeringBedrag: number | null;\n uitkeringstermijn: BetalingsTermijnType;\n /** Duur van de uitkering in maanden */\n readonly duurInMaanden: number | null;\n}\n\n/** Invoer voor de berekening van de duur in maanden van de inkomensaanvulling. */\nexport interface InkomensaanvullingDuurInMaandenInput {\n /** Het verzekerd bedrag */\n verzekerdBedrag: number;\n betalingsTermijn: BetalingsTermijnType;\n /** Het bedrag aan gewenste uitkering. */\n gewensteUitkeringBedrag: number | null;\n /** Het tarief dat gehanteerd wordt. */\n gehanteerdTariefPercentage: number | null;\n}\n\n/** Uitvoer van de berekening van de duur in maanden van de inkomensaanvulling. */\nexport interface InkomensaanvullingDuurInMaandenOutput {\n /** Berekende duur in maanden */\n readonly duurInMaanden: number | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** InkomenverklaringOpties Geen = 0, IbStukken = 1, Accountantsverklaring = 2 */\nexport enum InkomenverklaringOpties {\n Geen = \"Geen\",\n IbStukken = \"IbStukken\",\n Accountantsverklaring = \"Accountantsverklaring\",\n}\n\n/** Inkomsten box 3 van een persoon, voornamelijk uit verhuur en beleggingen. */\nexport interface InkomstenBox3 {\n /** Einddatum van de inkomsten */\n einddatum: string | null;\n /** Bedrag van de inkomsten */\n bedrag: number | null;\n /** Eindleeftijd wanneer de inkomsten overgaat op partner */\n overgangOpPartnerEindleeftijd: number | null;\n /** Datum per wanneer de inkomsten overgaat op partner */\n overgangOpPartnerEinddatum: string | null;\n /** Percentage van het bedrag dat overgaat op partner */\n overgangOpPartnerPercentage: number | null;\n /** Einde bij werkloosheid */\n eindeBijWw: boolean | null;\n /** Indicatie dat het resultaat bij arbeidsongeschiktheid afhankelijk is van de verdiencapaciteit */\n resultaatVdc: boolean | null;\n /** Einde bij arbeidsongeschiktheid */\n eindeBijAo: boolean | null;\n /** Indicatie dat de inkomsten bij overlijden overgaat op de partner */\n overgangOpPartner: boolean | null;\n /** Omschrijving inkomstenpost, soort OverigeInkomsten */\n omschrijving: string | null;\n /** Aantal maanden dat de inkomsten ontvangen worden */\n looptijdInMaanden: number | null;\n /** Bedrag bijtelling */\n fiscaalBedrag: number | null;\n soort: OverigeInkomstenBox3Soort;\n /** Volgnummer binnen de overige inkomsten van de klant. */\n volgnummer: number;\n}\n\n/** KapitaalopbouwOptions Box1 = 0, Box3 = 1, Box3TijdelijkVrijgesteld = 2 */\nexport enum KapitaalopbouwOptions {\n Box1 = \"Box1\",\n Box3 = \"Box3\",\n Box3TijdelijkVrijgesteld = \"Box3TijdelijkVrijgesteld\",\n}\n\n/** Bevat de gegevens van Adviesbox Form Kapitaalverzekering. */\nexport interface Kapitaalverzekering {\n /** De producten op het scherm */\n producten: KapitaalverzekeringProduct[];\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n /** De af te lossen leningdelen van het voorstel. */\n readonly leningdelen: LeningdeelReadOnly[] | null;\n /** De af te lossen kredieten van het voorstel. */\n readonly kredieten: KredietReadOnly[] | null;\n /** De mogelijk fiscaal voort te zetten huidige dekkingen (kapitaalverzekeringen en vermogensrekeningen). */\n readonly dekkingen: DekkingReadOnly[] | null;\n /** De naam van de geldverstrekker die in het Form Hypotheek geselecteerd is. */\n readonly geldverstrekkerNaam: string | null;\n /** Ingangsdatum van het voorstel (of: 'Passeerdatum' wanneer er een hypotheek geadviseerd wordt) */\n readonly ingangsdatumVoorstel: string | null;\n /** Mogelijke keuzes indien er sprake is van fiscale voorzetting */\n readonly fiscaleVoortzettingKeuzes: FiscaleVoortzettingKeuze[] | null;\n}\n\n/** Invoer voor de berekening van een kapitaalverzekering. */\nexport interface KapitaalverzekeringBerekeningInput {\n kapitaalverzekeringProduct: KapitaalverzekeringProduct;\n}\n\n/** Het resultaat van de kapitaalverzekering-berekening. */\nexport interface KapitaalverzekeringBerekeningOutput {\n resultaat: KapitaalverzekeringBerekeningResultaat | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de berekende resultaten van de berekening. */\nexport interface KapitaalverzekeringBerekeningResultaat {\n /** Bedrag voor de (lage) beleggingsinleg of totaalpremie */\n readonly lagePremieBedrag: number | null;\n /** Bedrag voor de hoge beleggingsinleg of hoge totaalpremie */\n readonly hogePremieBedrag: number | null;\n /** Bedrag voor de aanvangsstorting (koopsom) */\n readonly aanvangsstortingBedrag: number | null;\n /** Rendement garantie- of voorbeeldkapitaal */\n readonly rendementPercentage: number | null;\n /** Waardeopbouw aan het einde van de dekking (ook wel: voorbeeldkapitaal) */\n readonly waardeopbouwBedrag: number | null;\n /** Waardeopbouw per jaar */\n readonly waardeopbouwJaren: WaardeopbouwInJaar[] | null;\n /** De berekende waardeopbouw per maand */\n readonly waardeopbouwMaanden: WaardeopbouwInMaand[] | null;\n}\n\n/** De gegevens van 'Extra premiestorting' voor een bepaald jaar. */\nexport interface KapitaalverzekeringExtraPremiestortingInJaar {\n jaar: number;\n bedrag: number;\n}\n\n/** Bevat gegevens van de fiscale regeling. */\nexport interface KapitaalverzekeringFiscaleRegeling {\n /** Polisnummer */\n polisnummer: string | null;\n orv: FiscalePlaatsingOrvOptions | null;\n /** Geeft aan of er sprake is van een lijfrenteclausule */\n lijfrenteclausule: boolean | null;\n kapitaalopbouw: KapitaalopbouwOptions | null;\n productId: string | null;\n fiscaleVoortzetting: FiscaleVoortzettingOptions | null;\n originelePolisnummer: string | null;\n externeMaatschappijCode: string | null;\n externeMaatschappijOmschrijving: string | null;\n lijfrenteclausuleOrigineel: boolean | null;\n fiscaleTypering: FiscaleTyperingOptions | null;\n garantieverzekering: boolean | null;\n fiscaalRegime: FiscaalRegimeOptions | null;\n oorspronkelijkeIngangsdatum: string | null;\n ingangsdatumBox1: string | null;\n einddatum: string | null;\n doelkapitaalBedrag: number | null;\n laagstePremieooitBedrag: number | null;\n hoogstePremieOoitBedrag: number | null;\n huidigeJaarPremieBedrag: number | null;\n premieLopendJaarBedrag: number | null;\n eerdereUitkeringenBedrag: number | null;\n ingebrachteWaardeBedrag: number | null;\n}\n\n/** Gegevens van 'Kapitaalopbouw'. */\nexport interface KapitaalverzekeringKapitaalopbouw {\n soortRekening: SoortKapitaalverzekeringsrekeningOptions | null;\n soortBerekening: SoortBerekeningOptionsKv | null;\n /** Doelkapitaal */\n doelkapitaalBedrag: number | null;\n /** Rendement doelkapitaal */\n doelrendementPercentage: number | null;\n /** Voorbeeldkapitaal */\n voorbeeldkapitaalBedrag: number | null;\n /** Rendement voorbeeldkapitaal */\n voorbeeldrendementPercentage: number | null;\n /** Garantiekapitaal / waarvan gegarandeerd */\n garantiekapitaalBedrag: number | null;\n /** Rendement garantiekapitaal / waarvan gegarandeerd */\n garantierendementPercentage: number | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Kapitaalverzekering (zowel huidige situatie als voorstel). */\nexport interface KapitaalverzekeringOutput {\n /** Lijst met in houd van het scherm Kapitaalverzekering per adviesdossier (huidige situatie) of voorstel. */\n kapitaalverzekeringen: { [key: string]: Kapitaalverzekering; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Gegevens van 'Overlijdensrisicodekking'. */\nexport interface KapitaalverzekeringOverlijdensrisicodekking {\n basisdekking: BasisdekkingOptions;\n /** Verzekerd kapitaal */\n verzekerdKapitaalBedrag: number | null;\n soortRisicodekking: OrvUitkeringssoortOptions | null;\n /** Het annuĆÆteitspercentage */\n annuiteitsPercentage: number | null;\n /** Dekking daalt tot */\n dekkingDaaltTotBedrag: number | null;\n /** Duur daling in jaren */\n duurdalingInJaren: number | null;\n /** Percentage waarde */\n waardePercentage: number | null;\n partnerrente: KapitaalverzekeringPartnerrente | null;\n}\n\n/** Bevat gegevens van Partnerrente. */\nexport interface KapitaalverzekeringPartnerrente {\n /** Partnerrente per jaar */\n partnerrentePerJaarBedrag: number;\n /** Levenslang */\n levenslang: boolean;\n /** Maximale duur rente in jaren */\n maxDuurInJaren: number | null;\n /** Direct ingaande rente */\n directIngaandeRente: boolean;\n /** Uitsteldatum */\n uitsteldatum: string | null;\n}\n\n/** Gegevens van een Kapitaalverzekering-polis. */\nexport interface KapitaalverzekeringPolis {\n productnummer: string | null;\n maatschappijCode: string | null;\n maatschappijOmschrijving: string | null;\n maatschappijCodeHdn: string | null;\n productnaam: string | null;\n productcode: number;\n ingangsdatum: string;\n looptijdInMaanden: number | null;\n uwBemiddeling: boolean;\n}\n\n/** Gegevens van 'Poliswaarde'. */\nexport interface KapitaalverzekeringPoliswaarde {\n /** Reeds opgebouwd */\n reedsOpgebouwdBedrag: number | null;\n /** Reeds opgebouwd per datum */\n reedsOpgebouwdDatum: string | null;\n /** Afkoopwaarde */\n afkoopwaardeBedrag: number | null;\n /** Afkoopwaarde per datum */\n afkoopwaardeDatum: string | null;\n /** Waardeopbouw (na x jaar) */\n readonly waardeopbouwBedrag: number | null;\n /** Waardeopbouw per jaar */\n readonly waardeopbouwJaren: WaardeopbouwInJaar[] | null;\n /** De berekende waardeopbouw per maand */\n waardeopbouwMaanden: WaardeopbouwInMaand[] | null;\n}\n\n/** De premiegegevens van een premie-/inlegdepot */\nexport interface KapitaalverzekeringPremiedepot {\n uitgangspunt: PremiedepotUitgangspunt | null;\n opnameLagePremies: boolean | null;\n opnameHogePremies: boolean | null;\n opnameAanvangsstorting: boolean | null;\n opnameExtraStortingen: boolean | null;\n vergoeding: number | null;\n premiedepotBedrag: number | null;\n premiedepotDuurInMaanden: number | null;\n}\n\n/** Gegevens van 'Premiegegevens'. */\nexport interface KapitaalverzekeringPremiegegevens {\n /** Het aantal maanden dat inleg betaald moet worden */\n duurInMaanden: number | null;\n /** Het aantal maanden dat inleg betaald moet worden in de hooglaag-constructie */\n duurHooglaagInMaanden: number | null;\n /** Hoog/laag verhouding 1: ... */\n hooglaagVerhouding: number | null;\n betalingstermijn: BetalingsTermijnType | null;\n /** Bedrag voor de (lage) beleggingsinleg */\n beleggingsinlegBedrag: number | null;\n /** Bedrag voor de hoge beleggingsinleg */\n hogeBeleggingsinlegBedrag: number | null;\n /** Bedrag voor de (lage) risicopremie */\n risicopremieBedrag: number | null;\n /** Bedrag voor de hoge risicopremie */\n hogeRisicopremieBedrag: number | null;\n /** Bedrag voor de (lage) totaalpremie */\n totaalPremieBedrag: number | null;\n /** Bedrag voor de hoge totaalpremie */\n hogeTotaalPremieBedrag: number | null;\n /** Bedrag voor de aanvangsstorting */\n aanvangsstortingBedrag: number | null;\n /** Het aftrekbare deel van de premie */\n premieAftrekbaarBedrag: number | null;\n /** Het aftrekbare deel van de aanvangsstorting */\n aanvangsstortingAftrekbaarBedrag: number | null;\n /** Extra premiestorting per jaar */\n extraPremiestortingJaren: KapitaalverzekeringExtraPremiestortingInJaar[] | null;\n premiedepot: KapitaalverzekeringPremiedepot | null;\n}\n\n/** Bevat de gegevens van het Kapitaalverzekering-product. */\nexport interface KapitaalverzekeringProduct {\n soortProduct: SoortKapitaalverzekeringProductOptions;\n /** Geeft aan of het om een doorlopend product gaat */\n readonly doorlopend: boolean | null;\n polis: KapitaalverzekeringPolis;\n /** Unieke identificaties van de klanten die als verzekeringnemer geselecteerd zijn */\n verzekeringnemerKlantIds: string[];\n /** Unieke identificaties van de klanten die als verzekerde geselecteerd zijn */\n verzekerdeKlantIds: string[];\n /** Geeft aan of er gebruik gemaakt wordt van premiesplitsing. */\n premiesplitsing: boolean | null;\n poliswaarde: KapitaalverzekeringPoliswaarde | null;\n premiegegevens: KapitaalverzekeringPremiegegevens | null;\n kapitaalopbouw: KapitaalverzekeringKapitaalopbouw | null;\n verzekerde1Overlijdensrisicodekking: KapitaalverzekeringOverlijdensrisicodekking | null;\n verzekerde2Overlijdensrisicodekking: KapitaalverzekeringOverlijdensrisicodekking | null;\n fiscaleRegeling: KapitaalverzekeringFiscaleRegeling | null;\n verpanding: KapitaalverzekeringVerpanding | null;\n /** Indicatie dat indien het doorlopende product gewijzigd is, deze opnieuw overgenomen moet worden naar de voorstellen */\n wijzigingenInDoorlopendeProductenOvernemen: boolean;\n productId: string | null;\n meenemen: boolean;\n}\n\n/** De verpanding van een Kapitaalverzekeringsproduct. */\nexport interface KapitaalverzekeringVerpanding {\n uitkerendeFase: UitkerendeFase | null;\n verpandAanGeldverstrekker: boolean | null;\n bedoeldVoorAflossing: boolean | null;\n aflosproducten: Aflosproduct[] | null;\n}\n\n/** Bevat gegevens van een klant. */\nexport interface KlantDetails {\n /** Volgnummer van de klant binnen de klantsamenstelling. */\n volgnummer: number;\n /** Indicatie of klant gescheiden is */\n gescheiden: boolean;\n /** Datum gescheiden */\n gescheidenPerDatum: string | null;\n /** Legitimatiebewijs code volgens de HDN keuzelijst LegitimatieSoortType */\n legitimatiebewijsSoort: string | null;\n /** Nummer legitimatiebewijs */\n legitimatiebewijsNummer: string | null;\n /** Geldigheidsdatum legitimatiebewijs */\n legitimatiebewijsGeldTotDatum: string | null;\n /** Indicatieveld. Is aanvrager hoofdelijk aansprakelijk */\n hoofdelijkAansprakelijk: boolean;\n /** Hoogst genoten opleiding van de aanvrager volgens de HDN Keuzelijst OpleidingsNiveauType */\n opleidingsNiveau: number | null;\n /** Datum afgifte legitimatiebewijs */\n legitimatiebewijsAfgiftedatum: string | null;\n /** Plaats afgifte legitimatiebewijs */\n legitimatiebewijsAfgifteplaats: string | null;\n /** Geldigheidsdatum verblijfsvergunning */\n verblijfsvergunningGeldigTotDatum: string | null;\n /** Nummer verblijfsvergunning */\n verblijfsvergunningNummer: string | null;\n verblijfsvergunningCode: VerblijfsVergunningType | null;\n /** HDN code van de voortitel die een klant evt. heeft volgens de HDN keuzelijst VoortitelType */\n titel: number | null;\n /** Roker */\n roken: boolean;\n /** Code burgerlijke staat volgens de HDN keuzelijst BurgerlijkeStaatType */\n burgerlijkeStaat: number;\n /** Legitimatie land (code) */\n legitimatieLandCode: string | null;\n /** Code van het soort partnerschap dat ontbonden is bij een scheiding */\n gescheidenPartnerschap: number | null;\n /** Fiscale woonstaat (code) */\n fiscaleWoonstaatCode: string | null;\n}\n\nexport interface KlantgegevensReadOnly {\n readonly straat: string | null;\n readonly huisnummer: number | null;\n readonly toevoeging: string | null;\n readonly postcode: string | null;\n readonly plaats: string | null;\n readonly telefoonWerk: string | null;\n readonly telefoonMobiel: string | null;\n readonly telefoonPrive: string | null;\n readonly email: string | null;\n klantId: string;\n readonly achternaam: string | null;\n readonly voorvoegsel: string | null;\n readonly voorletters: string | null;\n readonly voornamen: string | null;\n geslacht: GeslachtOpties | null;\n readonly roker: boolean | null;\n readonly geboortedatum: string | null;\n readonly aowdatum: string | null;\n}\n\nexport interface KlantnaamReadOnly {\n klantId: string;\n readonly achternaam: string | null;\n readonly voorvoegsel: string | null;\n readonly voorletters: string | null;\n readonly voornamen: string | null;\n geslacht: GeslachtOpties | null;\n readonly roker: boolean | null;\n readonly geboortedatum: string | null;\n readonly aowdatum: string | null;\n}\n\n/** Bevat de inhoud van het Adviesbox-form Klantprofiel (onderwerp). */\nexport interface Klantprofiel {\n /** De vragen van het gevraagde klantprofiel-onderwerp */\n vragen: KlantprofielVraag[];\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n /** Indicatie dat er in het adviesdossier een Adviesbox Classic klantprofiel opgeslagen is */\n heeftKlantprofielAbc: boolean;\n}\n\n/** Bevat de inhoud van het Adviesbox Classic klantprofiel. */\nexport interface KlantprofielAbc {\n /** De categorieĆ«n van het Adviesbox Classic klantprofiel (read-only) met onderliggende onderwerpen en vragen */\n readonly categorieen: KlantprofielCategorieAbc[] | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox Classic klantprofiel. */\nexport interface KlantprofielAbcOutput {\n /** Lijst met Adviesbox Classic klantprofielen per adviesdossier. */\n klantprofielen: { [key: string]: KlantprofielAbc; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de gegevens van een klantprofiel-antwoord t.b.v. het Adviesbox-form Klantprofiel. */\nexport interface KlantprofielAntwoord {\n /** Code van het klantprofiel-antwoord */\n code: number;\n /** Omschrijving van de klantprofiel-antwoord */\n readonly omschrijving: string | null;\n /** Waarde van het (1e deel van het) antwoord */\n waarde1: any | null;\n /** Waarde van het 2e deel van het antwoord, indien van toepassing */\n waarde2: any | null;\n /** Waarde van het 3e deel van het antwoord, indien van toepassing */\n waarde3: any | null;\n}\n\n/** Bevat de gegevens van een ABC klantprofiel-antwoord t.b.v. het Adviesbox-form Klantprofiel. */\nexport interface KlantprofielAntwoordAbc {\n /** Code van het klantprofiel-antwoord */\n code: number;\n /** Omschrijving van het klantprofiel-antwoord */\n readonly omschrijving: string | null;\n}\n\n/** Bevat de inhoud van een Adviesbox Classic klantprofiel-categorie. */\nexport interface KlantprofielCategorieAbc {\n /** Code van de klantprofiel-categorie */\n code: number;\n /** Omschrijving van de categorie */\n omschrijving: string | null;\n /** Lijst met onderwerpen (read-only) behorend bij de klantprofiel-categorie */\n readonly onderwerpen: KlantprofielOnderwerpAbc[] | null;\n}\n\n/** Bevat de inhoud van een Adviesbox Classic klantprofiel-onderwerp. */\nexport interface KlantprofielOnderwerpAbc {\n /** Code van het klantprofiel-onderwerp */\n code: number;\n /** Omschrijving van het onderwerp */\n readonly omschrijving: string | null;\n /** Lijst met vragen (read-only) en bijbehorende antwoorden behorend bij het klantprofiel-onderwerp. */\n readonly vragen: KlantprofielVraagAbc[] | null;\n /** Toelichting (indien van toepassing) */\n readonly toelichting: string | null;\n}\n\n/** KlantprofielOnderwerpOptions AlgemeenDoelstelling = 1, AlgemeenToekomstperspectief = 2, AlgemeenRisicoEnKennis = 3, HypotheekAlgemeen = 4, HypotheekVerduurzaming = 5, HypotheekVerantwoordeWoonlasten = 6, HypotheekEigenGeld = 7, HypotheekDubbeleWoonlasten = 8, HypotheekFiscaal = 9, HypotheekHypotheekvorm = 10, HypotheekRentevastperiode = 11, HypotheekGeldverstrekker = 12, RisicosOverlijden = 13, RisicosArbeidsongeschiktheid = 14, RisicosWerkloosheid = 15, RisicosPensioen = 16, VermogensopbouwOpbouwDoelvermogen = 17, VermogensopbouwRisicoprofiel = 18 */\nexport enum KlantprofielOnderwerpOptions {\n AlgemeenDoelstelling = \"AlgemeenDoelstelling\",\n AlgemeenToekomstperspectief = \"AlgemeenToekomstperspectief\",\n AlgemeenRisicoEnKennis = \"AlgemeenRisicoEnKennis\",\n HypotheekAlgemeen = \"HypotheekAlgemeen\",\n HypotheekVerduurzaming = \"HypotheekVerduurzaming\",\n HypotheekVerantwoordeWoonlasten = \"HypotheekVerantwoordeWoonlasten\",\n HypotheekEigenGeld = \"HypotheekEigenGeld\",\n HypotheekDubbeleWoonlasten = \"HypotheekDubbeleWoonlasten\",\n HypotheekFiscaal = \"HypotheekFiscaal\",\n HypotheekHypotheekvorm = \"HypotheekHypotheekvorm\",\n HypotheekRentevastperiode = \"HypotheekRentevastperiode\",\n HypotheekGeldverstrekker = \"HypotheekGeldverstrekker\",\n RisicosOverlijden = \"RisicosOverlijden\",\n RisicosArbeidsongeschiktheid = \"RisicosArbeidsongeschiktheid\",\n RisicosWerkloosheid = \"RisicosWerkloosheid\",\n RisicosPensioen = \"RisicosPensioen\",\n VermogensopbouwOpbouwDoelvermogen = \"VermogensopbouwOpbouwDoelvermogen\",\n VermogensopbouwRisicoprofiel = \"VermogensopbouwRisicoprofiel\",\n}\n\n/** KlantprofielOnderwerpStatusOptions NietIngevuld = 1, Onvolledig = 2, Volledig = 3 */\nexport enum KlantprofielOnderwerpStatusOptions {\n NietIngevuld = \"NietIngevuld\",\n Onvolledig = \"Onvolledig\",\n Volledig = \"Volledig\",\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Klantprofiel (onderwerp). */\nexport interface KlantprofielOutput {\n /** Lijst met klantprofielen per adviesdossier. */\n klantprofielen: { [key: string]: Klantprofiel; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de gegevens van een klantprofiel-vraag t.b.v. het Adviesbox-form Klantprofiel. */\nexport interface KlantprofielVraag {\n code: KlantprofielVraagOptions;\n /** Omschrijving van de klantprofiel-vraag */\n readonly omschrijving: string | null;\n /** De antwoorden/het antwoord bij de klantprofiel-vraag */\n antwoorden: KlantprofielAntwoord[];\n /** Toelichting (indien van toepassing) */\n toelichting: string | null;\n}\n\n/** Bevat de gegevens van een ABC klantprofiel-vraag t.b.v. het Adviesbox-form Klantprofiel. */\nexport interface KlantprofielVraagAbc {\n /** Code van de klantprofiel-vraag */\n code: number;\n /** Omschrijving van de klantprofiel-vraag */\n readonly omschrijving: string | null;\n /** Lijst met antwoorden (read-only) behorend bij de klantprofiel-vraag. */\n readonly antwoorden: KlantprofielAntwoordAbc[] | null;\n}\n\n/** KlantprofielVraagOptions FinancieleDoelen = 101, VerwachteInkomensontwikkelingAanvrager1 = 201, VerwachteInkomensontwikkelingAanvrager2 = 202, WaaromZalInkomenStijgenAanvrager1 = 203, WaaromZalInkomenStijgenAanvrager2 = 204, WaaromZalInkomenDalenAanvrager1 = 205, WaaromZalInkomenDalenAanvrager2 = 206, WanneerStoppenMetWerkenAanvrager1 = 207, WanneerStoppenMetWerkenAanvrager2 = 208, WijzigingGezinssituatieVerwacht = 209, HoelangBlijvenWonen = 210, FinancieleMeevallerVerwacht = 211, GroteUitgavenVerwacht = 212, KennisFinancieelEnErvaring = 301, KennisFinancieleProducten = 302, KennisFiscaleSocialeWetgeving = 303, KennisFinancieelAdvies = 304, WelkeMateFinancieleRisicos = 305, GeldVoorFinancieleTegenvallers = 306, HoeveelGeldVoorFinancieleTegenvallers = 307, WatSpreektMeesteAanRisico = 308, WensenDoelstellingenHypotheek = 401, KennisHypothekenAlgemeen = 402, KennisHypothekenHypotheekvormen = 403, KennisHypothekenNhg = 404, KennisHypothekenFiscaliteit = 405, KennisRisicosRestschuld = 406, KennisRentewijzigingen = 407, KennisInkomstendaling = 408, KennisDubbeleWoonlasten = 409, KennisHypothekenVerduurzaming = 501, KennisHypothekenEnergiebesparendeMaatregelen = 502, KennisHypothekenBesparingen = 503, KennisHypothekenFinancieringsmogelijkheden = 504, InteresseVerduurzamenWoning = 505, VoornaamsteRedenVerduurzamenWoning = 506, FinancierenVerduurzamenWoning = 507, WensenMbtVerantwoordeWoonlasten = 601, HoeveelSparenPerMaand = 602, HoeveelEigenGeldBeschikbaar = 701, HoeveelEigenGeldInbrengen = 702, HoeveelGeldOverhouden = 703, WaarvoorEigenGeldGebruiken = 704, KrijgtTeMakenDubbeleWoonlasten = 801, HoeLangDubbeleWoonlasten = 802, HoeDubbeleWoonlastenBetalen = 803, WensFiscaleAftrekHypotheek = 901, WensAflossenHypotheek = 1001, VanPlanTussentijdsAflossen = 1002, DoelExtraAflossen = 1003, BereidRisicoRentestijging = 1101, HoelangVastzettenHypotheekrente = 1102, VoornaamsteRedenVastzettenHypotheekrente = 1103, HoeStijgingMaandlastenOpvangen = 1104, VoorkeurGeldverstrekker = 1201, GeldverstrekkerVoorwaardenBelangrijk = 1202, KennisInkomenssituatieNaOvl = 1301, KennisOrv = 1302, KennisNabestaandenvoorzieningPensioenregeling = 1303, KennisNabestaandenvoorzieningAnw = 1304, KennisNabestaandenvoorzieningUitkering = 1305, WensMaatregelenOvlAanvrager1 = 1306, WensMaatregelenOvlAanvrager2 = 1307, VerzorgdAchterlaten = 1308, MaatregelenFinancieleGevolgenOvl = 1309, NabestaandenUitgavenBeperken = 1310, WelkeUitgavenBeperkenOvl = 1311, KennisInkomenssituatieNaAo = 1401, KennisAoVerzekeringen = 1402, KennisAoVoorzieningWerkgever = 1403, KennisAoVoorzieningWia = 1404, WensMaatregelenAoAanvrager1 = 1405, WensMaatregelenAoAanvrager2 = 1406, WaarvoorInkomensaanvullingAo = 1407, HoelangInkomensaanvullingAo = 1408, MaatregelenFinancieleGevolgenAo = 1409, UitgavenBeperkenAo = 1410, WelkeUitgavenBeperkenAo = 1411, KennisInkomenssituatieNaWw = 1501, KennisWwVerzekeringen = 1502, KennisWwVoorziening = 1503, WensMaatregelenWwAanvrager1 = 1504, WensMaatregelenWwAanvrager2 = 1505, WaarvoorInkomensaanvullingWw = 1506, HoelangInkomensaanvullingWw = 1507, HoeveelTijdNieuweBaanAanvrager1 = 1508, HoeveelTijdNieuweBaanAanvrager2 = 1509, MaatregelenFinancieleGevolgenWw = 1510, UitgavenBeperkenWw = 1511, WelkeUitgavenBeperkenWw = 1512, KennisInkomenssituatiePensioen = 1601, KennisPensioenWerkgever = 1602, KennisPensioenAow = 1603, KennisPensioenLijfrente = 1604, KennisPensioenVermogen = 1605, MaatregelenPensioenAanvrager1 = 1606, MaatregelenPensioenAanvrager2 = 1607, MaatregelenGevolgenPensioenBeperken = 1608, UitgavenLagerPensioenInkomenBeperken = 1609, WelkeUitgavenBeperkenPensioen = 1610, WaarvoorInkomenVermogenOpzijZetten = 1611, KennisSparenBeleggenAlgemeen = 1701, KennisOntwikkelingenFinancieleMarkt = 1702, KennisBeleggingsfondsen = 1703, KennisZelfHandelen = 1704, KennisVermogensbeheer = 1705, KennisSparenSpaarrekening = 1706, KennisSparenVerzekering = 1707, BelangrijksteSpaarBeleggingsdoel = 1708, BereidRisicoLagerDoelvermogen = 1709, HoeDoelvermogenBereiken = 1710, BelangrijksteBronInkomen = 1801, LevensonderhoudReguliereInkomsten = 1802, WelkDeelVermogenBeleggen = 1803, ErvaringBeleggenAandelenObligaties = 1804, KennisBeleggenAandelenObligaties = 1805, BeleggingsgedragVolgensStelling = 1806, AlsWaardeVermogenAanzienlijkDaalt = 1807, RisicoLopenVermogensopbouw = 1808, HoeBelangrijkBereikenDoel = 1809 */\nexport enum KlantprofielVraagOptions {\n FinancieleDoelen = \"FinancieleDoelen\",\n VerwachteInkomensontwikkelingAanvrager1 = \"VerwachteInkomensontwikkelingAanvrager1\",\n VerwachteInkomensontwikkelingAanvrager2 = \"VerwachteInkomensontwikkelingAanvrager2\",\n WaaromZalInkomenStijgenAanvrager1 = \"WaaromZalInkomenStijgenAanvrager1\",\n WaaromZalInkomenStijgenAanvrager2 = \"WaaromZalInkomenStijgenAanvrager2\",\n WaaromZalInkomenDalenAanvrager1 = \"WaaromZalInkomenDalenAanvrager1\",\n WaaromZalInkomenDalenAanvrager2 = \"WaaromZalInkomenDalenAanvrager2\",\n WanneerStoppenMetWerkenAanvrager1 = \"WanneerStoppenMetWerkenAanvrager1\",\n WanneerStoppenMetWerkenAanvrager2 = \"WanneerStoppenMetWerkenAanvrager2\",\n WijzigingGezinssituatieVerwacht = \"WijzigingGezinssituatieVerwacht\",\n HoelangBlijvenWonen = \"HoelangBlijvenWonen\",\n FinancieleMeevallerVerwacht = \"FinancieleMeevallerVerwacht\",\n GroteUitgavenVerwacht = \"GroteUitgavenVerwacht\",\n KennisFinancieelEnErvaring = \"KennisFinancieelEnErvaring\",\n KennisFinancieleProducten = \"KennisFinancieleProducten\",\n KennisFiscaleSocialeWetgeving = \"KennisFiscaleSocialeWetgeving\",\n KennisFinancieelAdvies = \"KennisFinancieelAdvies\",\n WelkeMateFinancieleRisicos = \"WelkeMateFinancieleRisicos\",\n GeldVoorFinancieleTegenvallers = \"GeldVoorFinancieleTegenvallers\",\n HoeveelGeldVoorFinancieleTegenvallers = \"HoeveelGeldVoorFinancieleTegenvallers\",\n WatSpreektMeesteAanRisico = \"WatSpreektMeesteAanRisico\",\n WensenDoelstellingenHypotheek = \"WensenDoelstellingenHypotheek\",\n KennisHypothekenAlgemeen = \"KennisHypothekenAlgemeen\",\n KennisHypothekenHypotheekvormen = \"KennisHypothekenHypotheekvormen\",\n KennisHypothekenNhg = \"KennisHypothekenNhg\",\n KennisHypothekenFiscaliteit = \"KennisHypothekenFiscaliteit\",\n KennisRisicosRestschuld = \"KennisRisicosRestschuld\",\n KennisRentewijzigingen = \"KennisRentewijzigingen\",\n KennisInkomstendaling = \"KennisInkomstendaling\",\n KennisDubbeleWoonlasten = \"KennisDubbeleWoonlasten\",\n KennisHypothekenVerduurzaming = \"KennisHypothekenVerduurzaming\",\n KennisHypothekenEnergiebesparendeMaatregelen = \"KennisHypothekenEnergiebesparendeMaatregelen\",\n KennisHypothekenBesparingen = \"KennisHypothekenBesparingen\",\n KennisHypothekenFinancieringsmogelijkheden = \"KennisHypothekenFinancieringsmogelijkheden\",\n InteresseVerduurzamenWoning = \"InteresseVerduurzamenWoning\",\n VoornaamsteRedenVerduurzamenWoning = \"VoornaamsteRedenVerduurzamenWoning\",\n FinancierenVerduurzamenWoning = \"FinancierenVerduurzamenWoning\",\n WensenMbtVerantwoordeWoonlasten = \"WensenMbtVerantwoordeWoonlasten\",\n HoeveelSparenPerMaand = \"HoeveelSparenPerMaand\",\n HoeveelEigenGeldBeschikbaar = \"HoeveelEigenGeldBeschikbaar\",\n HoeveelEigenGeldInbrengen = \"HoeveelEigenGeldInbrengen\",\n HoeveelGeldOverhouden = \"HoeveelGeldOverhouden\",\n WaarvoorEigenGeldGebruiken = \"WaarvoorEigenGeldGebruiken\",\n KrijgtTeMakenDubbeleWoonlasten = \"KrijgtTeMakenDubbeleWoonlasten\",\n HoeLangDubbeleWoonlasten = \"HoeLangDubbeleWoonlasten\",\n HoeDubbeleWoonlastenBetalen = \"HoeDubbeleWoonlastenBetalen\",\n WensFiscaleAftrekHypotheek = \"WensFiscaleAftrekHypotheek\",\n WensAflossenHypotheek = \"WensAflossenHypotheek\",\n VanPlanTussentijdsAflossen = \"VanPlanTussentijdsAflossen\",\n DoelExtraAflossen = \"DoelExtraAflossen\",\n BereidRisicoRentestijging = \"BereidRisicoRentestijging\",\n HoelangVastzettenHypotheekrente = \"HoelangVastzettenHypotheekrente\",\n VoornaamsteRedenVastzettenHypotheekrente = \"VoornaamsteRedenVastzettenHypotheekrente\",\n HoeStijgingMaandlastenOpvangen = \"HoeStijgingMaandlastenOpvangen\",\n VoorkeurGeldverstrekker = \"VoorkeurGeldverstrekker\",\n GeldverstrekkerVoorwaardenBelangrijk = \"GeldverstrekkerVoorwaardenBelangrijk\",\n KennisInkomenssituatieNaOvl = \"KennisInkomenssituatieNaOvl\",\n KennisOrv = \"KennisOrv\",\n KennisNabestaandenvoorzieningPensioenregeling = \"KennisNabestaandenvoorzieningPensioenregeling\",\n KennisNabestaandenvoorzieningAnw = \"KennisNabestaandenvoorzieningAnw\",\n KennisNabestaandenvoorzieningUitkering = \"KennisNabestaandenvoorzieningUitkering\",\n WensMaatregelenOvlAanvrager1 = \"WensMaatregelenOvlAanvrager1\",\n WensMaatregelenOvlAanvrager2 = \"WensMaatregelenOvlAanvrager2\",\n VerzorgdAchterlaten = \"VerzorgdAchterlaten\",\n MaatregelenFinancieleGevolgenOvl = \"MaatregelenFinancieleGevolgenOvl\",\n NabestaandenUitgavenBeperken = \"NabestaandenUitgavenBeperken\",\n WelkeUitgavenBeperkenOvl = \"WelkeUitgavenBeperkenOvl\",\n KennisInkomenssituatieNaAo = \"KennisInkomenssituatieNaAo\",\n KennisAoVerzekeringen = \"KennisAoVerzekeringen\",\n KennisAoVoorzieningWerkgever = \"KennisAoVoorzieningWerkgever\",\n KennisAoVoorzieningWia = \"KennisAoVoorzieningWia\",\n WensMaatregelenAoAanvrager1 = \"WensMaatregelenAoAanvrager1\",\n WensMaatregelenAoAanvrager2 = \"WensMaatregelenAoAanvrager2\",\n WaarvoorInkomensaanvullingAo = \"WaarvoorInkomensaanvullingAo\",\n HoelangInkomensaanvullingAo = \"HoelangInkomensaanvullingAo\",\n MaatregelenFinancieleGevolgenAo = \"MaatregelenFinancieleGevolgenAo\",\n UitgavenBeperkenAo = \"UitgavenBeperkenAo\",\n WelkeUitgavenBeperkenAo = \"WelkeUitgavenBeperkenAo\",\n KennisInkomenssituatieNaWw = \"KennisInkomenssituatieNaWw\",\n KennisWwVerzekeringen = \"KennisWwVerzekeringen\",\n KennisWwVoorziening = \"KennisWwVoorziening\",\n WensMaatregelenWwAanvrager1 = \"WensMaatregelenWwAanvrager1\",\n WensMaatregelenWwAanvrager2 = \"WensMaatregelenWwAanvrager2\",\n WaarvoorInkomensaanvullingWw = \"WaarvoorInkomensaanvullingWw\",\n HoelangInkomensaanvullingWw = \"HoelangInkomensaanvullingWw\",\n HoeveelTijdNieuweBaanAanvrager1 = \"HoeveelTijdNieuweBaanAanvrager1\",\n HoeveelTijdNieuweBaanAanvrager2 = \"HoeveelTijdNieuweBaanAanvrager2\",\n MaatregelenFinancieleGevolgenWw = \"MaatregelenFinancieleGevolgenWw\",\n UitgavenBeperkenWw = \"UitgavenBeperkenWw\",\n WelkeUitgavenBeperkenWw = \"WelkeUitgavenBeperkenWw\",\n KennisInkomenssituatiePensioen = \"KennisInkomenssituatiePensioen\",\n KennisPensioenWerkgever = \"KennisPensioenWerkgever\",\n KennisPensioenAow = \"KennisPensioenAow\",\n KennisPensioenLijfrente = \"KennisPensioenLijfrente\",\n KennisPensioenVermogen = \"KennisPensioenVermogen\",\n MaatregelenPensioenAanvrager1 = \"MaatregelenPensioenAanvrager1\",\n MaatregelenPensioenAanvrager2 = \"MaatregelenPensioenAanvrager2\",\n MaatregelenGevolgenPensioenBeperken = \"MaatregelenGevolgenPensioenBeperken\",\n UitgavenLagerPensioenInkomenBeperken = \"UitgavenLagerPensioenInkomenBeperken\",\n WelkeUitgavenBeperkenPensioen = \"WelkeUitgavenBeperkenPensioen\",\n WaarvoorInkomenVermogenOpzijZetten = \"WaarvoorInkomenVermogenOpzijZetten\",\n KennisSparenBeleggenAlgemeen = \"KennisSparenBeleggenAlgemeen\",\n KennisOntwikkelingenFinancieleMarkt = \"KennisOntwikkelingenFinancieleMarkt\",\n KennisBeleggingsfondsen = \"KennisBeleggingsfondsen\",\n KennisZelfHandelen = \"KennisZelfHandelen\",\n KennisVermogensbeheer = \"KennisVermogensbeheer\",\n KennisSparenSpaarrekening = \"KennisSparenSpaarrekening\",\n KennisSparenVerzekering = \"KennisSparenVerzekering\",\n BelangrijksteSpaarBeleggingsdoel = \"BelangrijksteSpaarBeleggingsdoel\",\n BereidRisicoLagerDoelvermogen = \"BereidRisicoLagerDoelvermogen\",\n HoeDoelvermogenBereiken = \"HoeDoelvermogenBereiken\",\n BelangrijksteBronInkomen = \"BelangrijksteBronInkomen\",\n LevensonderhoudReguliereInkomsten = \"LevensonderhoudReguliereInkomsten\",\n WelkDeelVermogenBeleggen = \"WelkDeelVermogenBeleggen\",\n ErvaringBeleggenAandelenObligaties = \"ErvaringBeleggenAandelenObligaties\",\n KennisBeleggenAandelenObligaties = \"KennisBeleggenAandelenObligaties\",\n BeleggingsgedragVolgensStelling = \"BeleggingsgedragVolgensStelling\",\n AlsWaardeVermogenAanzienlijkDaalt = \"AlsWaardeVermogenAanzienlijkDaalt\",\n RisicoLopenVermogensopbouw = \"RisicoLopenVermogensopbouw\",\n HoeBelangrijkBereikenDoel = \"HoeBelangrijkBereikenDoel\",\n}\n\n/** Bevat de gegevens van Adviesbox Form Krediet. */\nexport interface Krediet {\n /** De producten op het scherm */\n producten: KredietProduct[];\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n /** Ingangsdatum van het voorstel (of: 'Passeerdatum' wanneer er een hypotheek geadviseerd wordt) */\n readonly ingangsdatumVoorstel: string | null;\n}\n\n/** Gegevens van een dekking van een Krediet-verzekering. */\nexport interface KredietLeninggegevens {\n /** Hoofdsom */\n hoofdsomBedrag: number | null;\n /** Indicatie of het hoofdsombedrag overgenomen moet worden. */\n hoofdsomBedragOvernemen: boolean | null;\n /** Het berekende hoofdsombedrag dat gebruikt wordt als het hoofdsombedrag niet overgenomen wordt. */\n berekendHoofdsomBedrag: number | null;\n /** Restant hoofdsom */\n restantHoofdsomBedrag: number | null;\n /** Datum opgave restant hoofdsom */\n opgaveDatum: string | null;\n /** Slottermijn */\n slottermijnBedrag: number | null;\n /** Aflossingpercentage */\n aflossingPercentage: number | null;\n /** Rentepercentage per jaar */\n rentePercentage: number | null;\n /** Slottermijn */\n maandlastBedrag: number | null;\n /** Indicatie dat de berekende maandlast overgenomen moet worden. */\n maandlastOvernemen: boolean | null;\n garantie: Garantiesoort | null;\n /** HDN code van het bestedingsdoel volgens de HDN-keuzelijst BestedingsDoelType (KX). */\n bestedingsdoelCode: number | null;\n /** Beschrijving bestedingsdoel */\n bestedingsdoelOmschrijving: string | null;\n /** Deel box 1 */\n deelBox1Bedrag: number | null;\n /** Einddatum renteaftrek */\n renteaftrekEinddatum: string | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Krediet (zowel huidige situatie als voorstel). */\nexport interface KredietOutput {\n /** Lijst met Krediet-producten per adviesdossier (huidige situatie) of voorstel. */\n kredieten: { [key: string]: Krediet; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Gegevens van een Krediet-polis. */\nexport interface KredietPolis {\n productnummer: string | null;\n maatschappijCode: string | null;\n maatschappijOmschrijving: string | null;\n maatschappijCodeHdn: string | null;\n productnaam: string | null;\n productcode: number;\n ingangsdatum: string;\n looptijdInMaanden: number | null;\n uwBemiddeling: boolean;\n}\n\n/** Bevat de gegevens van het Krediet-product. */\nexport interface KredietProduct {\n soortProduct: SoortKredietProductOptions;\n /** Geeft aan of het om een doorlopend product gaat. */\n readonly doorlopend: boolean | null;\n polis: KredietPolis;\n /** Unieke identificaties van de klanten die als geldnemer geselecteerd zijn. */\n geldnemerKlantIds: string[];\n leninggegevens: KredietLeninggegevens;\n /** Indicatie dat indien het doorlopende product gewijzigd is, deze opnieuw overgenomen moet worden naar de voorstellen */\n wijzigingenInDoorlopendProductOvernemen: boolean | null;\n productId: string | null;\n meenemen: boolean;\n}\n\nexport interface KredietReadOnly {\n kredietId: string;\n doorlopend: boolean;\n readonly productnaam: string | null;\n}\n\n/** Bevat de inhoud van het Adviesbox-form Aanvraag/Lening. */\nexport interface Lening {\n /** Voorstellen binnen het adviesdossier */\n voorstellen: LeningVoorstelReadOnly[] | null;\n algemeen: LeningAlgemeen;\n notaris: LeningNotaris | null;\n maatwerkoplossing: LeningMaatwerkoplossing | null;\n financiering: LeningFinanciering | null;\n erfpacht: LeningErfpacht | null;\n aanvullendeGegevens: LeningAanvullendeGegevens | null;\n dataLeverancier: LeningDataLeverancier | null;\n inventarisatieStudielening: LeningInventarisatieStudielening | null;\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n}\n\n/** 'Aanvullende gegevens'. */\nexport interface LeningAanvullendeGegevens {\n /** Tekst van de aanvullende gegevens */\n toelichting: string | null;\n}\n\n/** Bevat gegevens van het gekozen voorstel (de gewenste hypotheek). */\nexport interface LeningAlgemeen {\n /** Unieke identificatie van het voorstel (analyse) van de gewenste hypotheek */\n gewensteHypotheekVoorstelId: string;\n /** Bespreekzaak */\n bespreekzaak: boolean;\n /** Verduurzaming besproken */\n verduurzamingBesproken: boolean;\n /** Soort advies conform de HDN keuzelijst 'AdviesTypeType' */\n soortAdvies: number;\n /** Netto advieskosten */\n nettoAdvieskostenBedrag: number | null;\n betaalwijzeAdvieskosten: BetaalwijzeAdvieskostenOptions | null;\n}\n\n/** Bevat gegevens van 'DataLeverancier'. */\nexport interface LeningDataLeverancier {\n /** Bevat selectie-gegevens van dataleveranciers. */\n dataLeveranciers: LeningDataLeverancierSelectie[];\n}\n\n/** Bevat selectie-gegevens van een dataleverancier. */\nexport interface LeningDataLeverancierSelectie {\n /** HDN code van de dataleverancier conform de HDN keuzelijst 'DataleverancierType' */\n hdnCode: number;\n /** Indicatie of de dataleverancier is geselecteerd. */\n geselecteerd: boolean;\n}\n\n/** Gegevens van 'Erfpacht'. */\nexport interface LeningErfpacht {\n /** Ingangsdatum erfpacht */\n ingangsdatum: string | null;\n}\n\n/** Bevat gegevens van 'Financiering'. */\nexport interface LeningFinanciering {\n /** Reden aanvraag conform de HDN keuzelijst 'MutatieType' */\n redenAanvraag: number | null;\n redenAankoop: RedenAankoopOptions;\n soortOversluiting: SoortOversluitingOptions | null;\n /** Senioren verhuisregeling */\n seniorenVerhuisregeling: boolean | null;\n aanleidingGesprek: AanleidingGesprekOptions | null;\n /** Bedrag verbouwing/verbetering */\n readonly verbouwingskosten: number | null;\n}\n\n/** Gegevens van 'Inventarisatie Studielening'. */\nexport interface LeningInventarisatieStudielening {\n /** HDN Code voor aanvrager 1 van de inventarisatie studielening conform de HDN keuzelijst StudieleningInventarisatieType */\n hdnCodeAanvrager1: number | null;\n /** HDN Code voor aanvrager 2 van de inventarisatie studielening conform de HDN keuzelijst StudieleningInventarisatieType */\n hdnCodeAanvrager2: number | null;\n}\n\n/** Bevat gegevens van een eventuele maatwerkoplossing. */\nexport interface LeningMaatwerkoplossing {\n /** Bevat maatwerkredenen van de maatwerkoplossing. */\n maatwerkredenen: LeningMaatwerkreden[];\n}\n\n/** Bevat gegevens van een maatwerkreden. */\nexport interface LeningMaatwerkreden {\n /** Unieke identificatie van de maatwerkreden */\n maatwerkRedenId: string | null;\n /** Volgnummer van de maatwerkreden voor weergave op het scherm */\n volgnummer: number;\n /** Unieke identificatie van de klant op wie de maatwerkoplossing betrekking heeft */\n betrekkingOpKlantId: string;\n /** Geeft de generieke explainreden weer conform HDN keuzelijst ExplainRedenType */\n redentypeCode: number;\n /** HDN-code van de maatwerkreden conform de HDN keuzelijst MaatwerkOplCodeMijType */\n reden: string | null;\n /** Toelichting op de maatwerkreden */\n toelichting: string | null;\n}\n\n/** Bevat gegevens van een notaris. */\nexport interface LeningNotaris {\n /** Unieke identificatie van het gekozen notariskantoor uit de instellingen */\n gekozenNotariskantoorId: string | null;\n /** Naam notariskantoor */\n kantoornaam: string | null;\n /** Rol notaris conform de HDN keuzelijst 'NotarisType' */\n typeNotaris: number;\n adres: Adres | null;\n contactpersoon: PersoonBasis | null;\n /** Telefoonnummer */\n telefoonnummer: string | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Aanvraag/Lening. */\nexport interface LeningOutput {\n /** Lijst met de inhoud van het Adviesbox-form Aanvraag/Lening per adviesdossier. */\n leningen: { [key: string]: Lening; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de gegevens van een voorstel (niet te wijzigen). */\nexport interface LeningVoorstelReadOnly {\n /** Unieke identificatie van het voorstel (analyse) */\n voorstelId: string;\n /** Volgnummer voor weergave in het scherm */\n volgnummer: number;\n /** Naam van het voorstel */\n readonly omschrijving: string | null;\n /** Bedrag hypothecaire inschrijving */\n readonly inschrijvingBedrag: number | null;\n /** Code van de geldverstrekker uit de Producten API */\n readonly maatschappijCode: string | null;\n /** Passeerdatum */\n passeerdatum: string;\n /** Indicatie dat NHG-garantie van toepassing is op de nieuwe financiering */\n readonly nhg: boolean | null;\n soortFinanciering: Financieringsoort | null;\n /** Indicatie dat er sprake is van erfpacht */\n readonly erfpacht: boolean | null;\n /** Indicatie dat het voorstel een nieuw leningdeel bevat */\n heeftNieuwLeningdeel: boolean;\n /** Indicatie dat het voorstel een meeneemhypotheek bevat */\n isMeeneemHypotheek: boolean;\n}\n\n/** Mee te nemen leningdeel */\nexport interface Leningdeel {\n /** Unieke identificatie van het leningdeel */\n leningdeelId: string | null;\n /** Referentie naar leningdeel in de huidige situatie (indien automatisch overgenomen) */\n huidigLeningdeelId: string | null;\n /** Bedrag leningdeel */\n leningdeelBedrag: number | null;\n aflossingsvorm: AflossingsVormType;\n /** Opgebouwde waarde */\n opgebouwdeWaardeBedrag: number | null;\n /** Het deel maanden van het restant van de looptijd */\n restantLooptijdInMaanden: number | null;\n /** Het gedeelte (als bedrag) van het hypotheekbedrag dat in box 3 zit */\n box3Bedrag: number | null;\n}\n\nexport interface LeningdeelReadOnly {\n leningdeelId: string;\n doorlopend: boolean;\n readonly productnaam: string | null;\n readonly maatschappijCode: string | null;\n productcode: number;\n aanvangsdatum: string;\n looptijdInMaanden: number;\n volgnummer: number;\n leningdeelBedrag: number | null;\n}\n\n/** Result per leningdeel */\nexport interface LeningdelenResult {\n /** Standaard rente. */\n standaardRente: string | null;\n /** Gets or sets the Loan to value */\n ltv: string | null;\n /** Dagrente. */\n dagrente: string | null;\n /** Betaalrekening. */\n betaalrekening: string | null;\n /** Loyaliteit. */\n loyaliteit: string | null;\n /** leningdeel volgnummer. */\n volgnummer: number;\n /** Tooltip. */\n tooltip: string | null;\n}\n\n/** Bevat de gegevens van Adviesbox Form Uitkerende lijfrente. */\nexport interface Lijfrente {\n /** De producten op het scherm */\n producten: LijfrenteProduct[];\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n /** Ingangsdatum van het voorstel (of: 'Passeerdatum' wanneer er een hypotheek geadviseerd wordt) */\n readonly ingangsdatumVoorstel: string | null;\n}\n\n/** Het kapitaal van een Uitkerende lijfrente-product. */\nexport interface LijfrenteKapitaal {\n uitgangspuntBerekening: LijfrenteUitgangspuntBerekeningOptions | null;\n /** Beschikbare koopsom */\n beschikbareKoopsomBedrag: number | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Uitkerende lijfrente (zowel huidige situatie als voorstel). */\nexport interface LijfrenteOutput {\n /** Lijst met Uitkerende lijfrente-producten per adviesdossier (huidige situatie) of voorstel. */\n lijfrentes: { [key: string]: Lijfrente; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** De polisgegevens van een Uitkerende lijfrente-product. */\nexport interface LijfrentePolis {\n productnummer: string | null;\n maatschappijCode: string | null;\n maatschappijOmschrijving: string | null;\n maatschappijCodeHdn: string | null;\n productnaam: string | null;\n productcode: number;\n ingangsdatum: string;\n looptijdInMaanden: number | null;\n uwBemiddeling: boolean;\n}\n\n/** Basis Uitkerende lijfrente-product. */\nexport interface LijfrenteProduct {\n soortProduct: SoortLijfrenteProductOptions | null;\n /** Geeft aan of het om een doorlopend product gaat. */\n readonly doorlopend: boolean | null;\n polis: LijfrentePolis;\n /** Unieke identificaties van de klanten die als verzekeringnemer geselecteerd zijn */\n verzekeringnemerKlantIds: string[];\n /** Unieke identificaties van de klanten die als verzekerde geselecteerd zijn */\n verzekerdeKlantIds: string[];\n kapitaal: LijfrenteKapitaal;\n uitkerendeFase: LijfrenteUitkerendeFase;\n /** Indicatie dat indien er doorlopende producten gewijzigd zijn, deze opnieuw overgenomen moeten worden naar de voorstellen */\n wijzigingenInDoorlopendeProductenOvernemen: boolean;\n productId: string | null;\n meenemen: boolean;\n}\n\n/** LijfrenteUitgangspuntBerekeningOptions BeschikbareKoopsom = 0, Lijfrenteuitkering = 1 */\nexport enum LijfrenteUitgangspuntBerekeningOptions {\n BeschikbareKoopsom = \"BeschikbareKoopsom\",\n Lijfrenteuitkering = \"Lijfrenteuitkering\",\n}\n\n/** Bevat gegevens van de indicatieve uitkerende fase */\nexport interface LijfrenteUitkerendeFase {\n /** Indicatie dat het berekende lijfrente-uitkering overgenomen moet worden. */\n lijfrenteUitkeringOvernemen: boolean;\n belastingBox: BelastingBoxOptions | null;\n soortLijfrenteUitkering: SoortLijfrenteUitkeringOptions | null;\n duurUitkeringInMaanden: number | null;\n duurUitkeringHoogInMaanden: number | null;\n hooglaagVerhouding: number | null;\n lijfrenteTariefPercentage: number | null;\n overgangOp2eVerzekerde: boolean | null;\n overgangOp2eVerzekerdePercentage: number | null;\n lijfrenteUitkeringBedrag: number | null;\n termijn: BetalingsTermijnType | null;\n}\n\n/** Lijfrenteclausulesoort Geen = 0, Leven = 1, Overlijden = 2, LevenEnOverlijden = 3 */\nexport enum Lijfrenteclausulesoort {\n Geen = \"Geen\",\n Leven = \"Leven\",\n Overlijden = \"Overlijden\",\n LevenEnOverlijden = \"LevenEnOverlijden\",\n}\n\n/** Bevat de gegevens van een loondienst. */\nexport interface Loondienst {\n /** Unieke identificatie van de loondienst (null, indien loondienst toegevoegd moet worden) */\n loondienstId: string | null;\n /** Vergoeding voor Extra Beslaglegging */\n vebBedrag: number | null;\n /** Bedrag flexibel inkomen gemiddeld */\n inkomenFlexibelBedrag: number | null;\n /** Bedrag flexibel inkomen opgegeven jaar (Jr_InkomenFlexibel_Min_1) */\n inkomenFlexibelJaarBedrag: number | null;\n /** Bedrag flexibel inkomen 1 jaar voor opgegeven jaar */\n inkomenFlexibelJaarMin1Bedrag: number | null;\n /** Jaartal flexibel inkomen */\n inkomenFlexibelJaar: number | null;\n /** Bedrag flexibel inkomen 2 jaar voor opgegeven jaar */\n inkomenFlexibelJaarMin2Bedrag: number | null;\n /** Inkomsten uit toeslagen die structrureel mee kunnen tellen (bijv. diplomatoeslag, gevarentoeslag, oefeningtoeslag enz.) */\n inkomstenToeslagBedrag: number | null;\n /** Percentage loondoorbetaling bij AO jaar 1 */\n percentageLoondoorbetalingAoJaar1: number | null;\n /** Percentage loondoorbetaling bij AO jaar 2 */\n percentageLoondoorbetalingAoJaar2: number | null;\n /** Het aantal uren in de parttime arbeidsovereenkomst dat de persoon werkt */\n aantalContracturenPerWeek: number | null;\n /** Beroeptype (code) conform HDN keuzelijst BeroepType per HDN 16 */\n beroeptypeCode: number | null;\n inkomenScenario: BedragScenario | null;\n /** Bedrag jaarlijkse provisie */\n provisieBedrag: number | null;\n /** Indicatie of inkomen buitenlands is */\n buitenlandsInkomen: boolean | null;\n /** Bedrag onregelmatigheidstoeslag */\n onregelmatigheidstoeslagBedrag: number | null;\n /** Volgnummer van het werk binnen een klant */\n volgnummer: number;\n soortDienstBetrekking: SoortDienstBetrekkingType | null;\n /** Datum aanvang dienstverband */\n dienstverbandAanvangsdatum: string | null;\n /** Datum einde dienstverband */\n dienstverbandEinddatum: string | null;\n /** De datum waarop het inkomen uit overwerk van start is gegaan */\n overwerkAanvangsdatum: string | null;\n /** De datum waarop het inkomen uit overwerk wordt beƙindigd */\n overwerkEinddatum: string | null;\n /** De datum waarop het inkomen uit provisie van start is gegaan */\n provisieAanvangsdatum: string | null;\n /** De datum waarop het inkomen uit provisie wordt beeindigd */\n provisieEinddatum: string | null;\n /** Datum einde contract */\n contractEinddatum: string | null;\n /** Beschrijving beroep */\n beroepOmschrijving: string | null;\n /** Bedrag bruto salaris per periode. Periode beschreven in Anv_Cd_InkomenPeriode */\n inkomenPeriodeBedrag: number | null;\n inkomenPeriodeCode: InkomenPeriode | null;\n /** Percentage vakantiegeld */\n vakantiegeldPercentage: number | null;\n /** Bedrag vakantietoeslag */\n vakantiegeldBedrag: number | null;\n /** Bedrag 13e maand */\n maand13Bedrag: number | null;\n /** Bedrag vaste gratificatie / tantieme per jaar */\n gratificatieBedrag: number | null;\n /** Bedrag overwerk */\n overwerkBedrag: number | null;\n /** Indicatie dat de klant in dienst is bij familie */\n werkgeverIsFamilie: boolean | null;\n /** Werkgever-info van de klant */\n naamWerkgever: string | null;\n /** Geeft de fase waarin de uitzendkracht zich bevindt conform de HDN keuzelijst SoortUitzendcontractType */\n faseUitzendcontract: number | null;\n adresWerkgever: Adres | null;\n /** Toetsinkomen bij perspectiefverklaring */\n toetsinkomenPerspectiefverklaring: number | null;\n /** Inkomsten uit vast flexibel budget */\n vastFlexibelBudgetBedrag: number | null;\n}\n\n/** Aantal gegevens van een loondienst (niet te wijzigen). */\nexport interface LoondienstReadOnly {\n /** Uniek Id van de loondienst */\n loondienstId: string;\n /** Beroepsfunctie */\n readonly beroepsfunctie: string | null;\n /** Totaal bruto inkomen uit deze loondienst */\n readonly totaalBrutoInkomenBedrag: number | null;\n /** Datum tot wanneer deze loondienst meetelt (meestal de pensioen- of AOW datum) */\n readonly meetellenTotDatum: string | null;\n}\n\n/** LoonverklaringOpties Geen = 0, Werkgeververklaring = 1, UwvDocument = 2, Perspectiefverklaring = 3, Arbeidsmarktscan = 4 */\nexport enum LoonverklaringOpties {\n Geen = \"Geen\",\n Werkgeververklaring = \"Werkgeververklaring\",\n UwvDocument = \"UwvDocument\",\n Perspectiefverklaring = \"Perspectiefverklaring\",\n Arbeidsmarktscan = \"Arbeidsmarktscan\",\n}\n\nexport interface MaxKoopsomOutput {\n success: boolean | null;\n readonly maxKoopsomBedrag: number | null;\n}\n\nexport interface MaxKostenInEigendomOutput {\n success: boolean | null;\n readonly maxKostenInEigendomBedrag: number | null;\n}\n\nexport interface MaxLeningOutput {\n success: boolean | null;\n readonly kostenInEigendomBedrag: number | null;\n readonly maxHypMarktwaardeBedrag: number | null;\n}\n\n/** Bevat de gegevens van Adviesbox Form Maximale Hypotheek */\nexport interface MaximaleHypotheek {\n /** Is er in de financieringsbehoefte gekozen voor Nhg */\n readonly nhg: boolean | null;\n /** Type woning volgens de HDN keuzelijst CodeObjectType. */\n readonly typePand: number | null;\n /** Code van het gebruiksdoel van het betreffende object volgens de HDN keuzelijst ObjectSoortType */\n readonly objectSoort: number | null;\n /** Indicatie dat het object wordt gebruikt voor recreatieve bewoning */\n readonly recreatieveBewoning: boolean | null;\n /** Gewenste looptijd van de hypotheek */\n hypotheekLooptijdInMaanden: number;\n /** Marktwaarde van het onderpand */\n readonly marktwaardeBedrag: number | null;\n /** Gewenste hypotheek volgens de financieringsbehoefte */\n readonly gewensteHypotheekBedrag: number | null;\n /** Andere financiering volgens de financieringsbehoefte */\n readonly andereFinancieringBedrag: number | null;\n toetsrenteBerekeningOpBasisVan: ToetsrenteBerekeningOptions;\n /** Specificatie toetsrente */\n specificatieToetsrentePercentage: number | null;\n /** Gewenste rentevastperiode */\n gewensteRentevastperiodeInMaanden: number | null;\n /** Vrij te besteden vermogen */\n vrijVermogenBedrag: number | null;\n /** De kredietjaarlast van beide aanvragers */\n kredietToetslastBedrag: number | null;\n /** Geeft aan of de krediettoetslast berekend (true) of opgegeven (not true) moet worden */\n kredietToetslastOvernemen: boolean | null;\n /** De berekende kredietjaarlast van beide aanvragers */\n readonly kredietToetslastBerekendBedrag: number | null;\n /** Geeft aan of leningdelen uit het verleden meegenomen moeten worden */\n leningdelenUitVerledenMeenemen: boolean | null;\n /** De leningdelen uit het verleden die meegenomen moeten worden */\n leningdelenUitVerleden: Leningdeel[] | null;\n /** Alle huidige leningdelen van alle huidige woonsituaties/hypotheken */\n readonly huidigeLeningdelen: Leningdeel[] | null;\n aanvrager1: MaximaleHypotheekAanvrager | null;\n aanvrager2: MaximaleHypotheekAanvrager | null;\n}\n\n/** Bevat gegevens van de aanvrager (klant). */\nexport interface MaximaleHypotheekAanvrager {\n aanvrager: KlantnaamReadOnly | null;\n /** Toetsinkomen van aanvrager */\n toetsinkomenBedrag: number | null;\n /** Geeft aan of het toetsinkomen van aanvrager berekend moet worden */\n toetsinkomenOvernemen: boolean | null;\n /** Het berekende toetsinkomen van aanvrager */\n readonly toetsinkomenBerekendBedrag: number | null;\n /** Pensioeninkomen van aanvrager */\n pensioeninkomenBedrag: number | null;\n /** Pensioeninkomen van aanvrager */\n readonly pensioeninkomenBerekendBedrag: number | null;\n /** Geeft aan of het pensioeninkomen van aanvrager berekend moet worden */\n pensioeninkomenOvernemen: boolean | null;\n /** De AOW leeftijd in maanden */\n readonly aowLeeftijdInMaanden: number | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Maximale hypotheek. */\nexport interface MaximaleHypotheekOutput {\n /** Lijst met de inhoud van scherm Maximale hypotheek per Voorstel. */\n maximaleHypotheken: { [key: string]: MaximaleHypotheek; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** De uitkomsten van de maximale hypotheekberekening */\nexport interface MaximaleHypotheekUitkomst {\n /** Gets or sets code van het product zoals deze in de Adviesbox\nproducten-database is gedefinieerd. */\n productCode: number | null;\n /** Gets or sets productnaam. */\n productnaam: string | null;\n /** Gets or sets code van de maatschappij zoals deze in de Adviesbox\nproducten-database is gedefinieerd. */\n maatschappijCode: string | null;\n /** Gets or sets renteboxcode van de maatschappij zoals deze in de Adviesbox\nproducten-database is gedefinieerd. */\n renteboxMaatschappijCode: string | null;\n /** Gets or sets verkorte naam van de maatschappij. */\n maatschappijNaam: string | null;\n /** De toetsrente waarmee getoetst is / hypotheekrente */\n toetsrente: number | null;\n /** De maximale hypotheek op inkomen */\n maximaleHypotheek: number | null;\n /** De maximale hypotheek op het onderpand */\n maximaleHypotheekOnderpand: number | null;\n toetsinkomenVerklaringAanvrager1: ToetsinkomenVerklaring | null;\n toetsinkomenVerklaringAanvrager2: ToetsinkomenVerklaring | null;\n uitslag: UitslagOptions;\n}\n\nexport interface MaximaleHypotheekUitkomstOutput {\n /** Lijst met de inhoud van scherm Maximale hypotheek per Voorstel. */\n maximaleHypotheken: { [key: string]: MaximaleHypotheekUitkomst; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Meeneemtype EenOpEen = 0, RenteBemiddeling = 1 */\nexport enum Meeneemtype {\n EenOpEen = \"EenOpEen\",\n RenteBemiddeling = \"RenteBemiddeling\",\n}\n\n/** Bevat de menu-informatie voor het menu van een adviesdossier. */\nexport interface MenuInfo {\n /** Unieke identificatie van het klantdossier. */\n klantdossierId: string;\n /** Gegevens van de voorstellen in het adviesdossier. */\n readonly voorstellen: MenuInfoVoorstel[] | null;\n /** Geeft aan of er woningen in eigendom zijn. */\n woningenInEigendom: boolean;\n financiering: FinancieringOptions;\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n klantprofiel: MenuInfoKlantprofiel | null;\n motivering: MenuInfoMotivering | null;\n /** Laatste mutatiedatum van het adviesdossier. */\n readonly laatsteMutatieDatum: string | null;\n /** De ids van de adviseurs gekoppeld aan dit adviesdossier */\n adviseurIds: string[] | null;\n}\n\n/** Bevat gegevens van het menu-item Klantprofiel. */\nexport interface MenuInfoKlantprofiel {\n /** Gegevens van de onderwerpen van het klantprofiel */\n readonly onderwerpen: MenuInfoKlantprofielOnderwerp[] | null;\n}\n\n/** Bevat gegevens van een menu-item t.b.v. een klantprofiel-onderwerp. */\nexport interface MenuInfoKlantprofielOnderwerp {\n onderwerp: KlantprofielOnderwerpOptions;\n status: KlantprofielOnderwerpStatusOptions;\n}\n\n/** Bevat gegevens van het menu-item Motivering. */\nexport interface MenuInfoMotivering {\n /** Gegevens van de motivering-onderwerpen */\n readonly onderwerpen: MenuInfoMotiveringOnderwerp[] | null;\n}\n\n/** Bevat gegevens van een menu-item t.b.v. een motivering-onderwerp. */\nexport interface MenuInfoMotiveringOnderwerp {\n onderwerp: MotiveringOnderwerpsoort;\n status: MotiveringOnderwerpStatusOptions;\n}\n\n/** Gegevens van een voorstel voor een menu. */\nexport interface MenuInfoVoorstel {\n /** Het volgnummer van het voorstel. */\n volgnummer: number;\n /** Unieke identificatie van het voorstel. */\n id: string;\n /** Naam van het voorstel. */\n readonly naam: string | null;\n soortFinanciering: Financieringsoort | null;\n /** Geeft aan of er sprake is van een doorlopend leningdeel. */\n doorlopendeLeningdelen: boolean;\n}\n\n/** Output voor het opvragen van de menu-informatie. */\nexport interface MenuOutput {\n /** De menu-informatie van een adviesdossier. */\n readonly menuInfo: { [key: string]: MenuInfo; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface Motivering {\n onsAdvies: string | null;\n afwijkendeKeuze: string | null;\n onsAdvies2: string | null;\n afwijkendeKeuze2: string | null;\n readonly wensenAlgemeen: string[] | null;\n readonly wensenAanvrager1: string[] | null;\n readonly wensenAanvrager2: string[] | null;\n uitgangspuntenOverlijden: MotiveringUitgangspuntenOverlijden | null;\n uitgangspuntenArbeidsongeschiktheid: MotiveringUitgangspuntenArbeidsongeschiktheid | null;\n uitgangspuntenWerkloosheid: MotiveringUitgangspuntenWerkloosheid | null;\n uitgangspuntenPensioen: MotiveringUitgangspuntenPensioen | null;\n uitgangspuntenDubbeleWoonlasten: MotiveringUitgangspuntenDubbeleWoonlasten | null;\n uitgangspuntenHypotheek: MotiveringUitgangspuntenHypotheek | null;\n uitgangspuntenVermogen: MotiveringUitgangspunten | null;\n readonly tabellenResourceUrl: string | null;\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n}\n\nexport interface MotiveringBeschikbareJaarruimte {\n gewensteDuurPensioenUitkering: DuurPensioenuitkeringOptions | null;\n pensioenuitkeringTotLeeftijdInMaanden: number | null;\n winstBedrag: number | null;\n winstBerekendBedrag: number;\n winstOvernemen: boolean;\n tegenwoordigeDienstbetrekkingBedrag: number | null;\n tegenwoordigeDienstbetrekkingBerekendBedrag: number;\n tegenwoordigeDienstbetrekkingOvernemen: boolean;\n vroegereDienstbetrekkingBedrag: number | null;\n vroegereDienstbetrekkingBerekendBedrag: number;\n vroegereDienstbetrekkingOvernemen: boolean;\n buitenlandseInkomstenBedrag: number | null;\n reisaftrekBedrag: number;\n overigeWerkzaamhedenBedrag: number | null;\n overigeWerkzaamhedenBerekendBedrag: number;\n overigeWerkzaamhedenOvernemen: boolean;\n periodiekeUitkeringenBedrag: number | null;\n premiegrondslagBedrag: number;\n franchiseBedrag: number;\n subtotaalFranchise1Bedrag: number;\n premiegrondslagPercentage: number;\n subtotaalFranchise2Bedrag: number;\n pensioenaangroeiBedrag: number | null;\n readonly pensioenaangroeiPercentage: number | null;\n subtotaalPensioenaangroeiBedrag: number;\n toevoegingOdrBedrag: number | null;\n subtotaalToevoegingOdrBedrag: number;\n jaarruimteBedrag: number;\n benutteJaarruimteBedrag: number;\n benutteJaarruimteBerekendBedrag: number;\n benutteJaarruimteOvernemen: boolean;\n beschikbareJaarruimteBedrag: number;\n maxPremieGrondslag: number;\n}\n\nexport interface MotiveringControleGewenstInkomen {\n controleGewenstInkomen: ControleGewenstInkomenOptions | null;\n brutoInkomenswensPercentage: number | null;\n controleGewenstNbi: ControleGewenstNbiOptions | null;\n margeOndergrensPercentage: number | null;\n margeBovengrensPercentage: number | null;\n vastBedrag: number | null;\n huidigNbiPercentage: number | null;\n gewijzigdeJarenTonen: boolean;\n benodigdKapitaalTonen: boolean;\n}\n\nexport interface MotiveringControleHypotheeknorm {\n controleMaandlast: ControleMaandlastOptions | null;\n controleerMaximaleHypotheek: boolean;\n}\n\n/** MotiveringOnderwerpStatusOptions NietIngevuld = 1, Onvolledig = 2, Volledig = 3 */\nexport enum MotiveringOnderwerpStatusOptions {\n NietIngevuld = \"NietIngevuld\",\n Onvolledig = \"Onvolledig\",\n Volledig = \"Volledig\",\n}\n\n/** MotiveringOnderwerpsoort Geen = 0, Algemeen = 1, Rentevastperiode = 2, FiscaleAftrek = 3, InbrengEigenGeld = 4, OversluitenHypotheek = 5, VerantwoordeWoonlasten = 6, Box3Consumptief = 7, AfdekkenOverlijdensrisico = 8, AfdekkenAOWW = 9, Pensioenvoorziening = 10, HoogteOpbouwDoelvermogen = 11, WijzeOpbouwDoelvermogen = 12, Beleggingsproduct = 13, Beleggingsprofiel = 14, Fondskeuze = 15, OversluitenBeleggingspolis = 16, AfdekkenWW = 17, Kredieten = 18, DubbeleWoonlasten = 19, EerderStoppen = 20, Geldverstrekker = 21, HypotheekAflossen = 22, Schade = 23, Risicoprofiel = 24, Nazorg = 25, Energie = 26, Telecom = 27, Uitvaart = 28, Verduurzaming = 29, Alles = -1 */\nexport enum MotiveringOnderwerpsoort {\n Geen = \"Geen\",\n Algemeen = \"Algemeen\",\n Rentevastperiode = \"Rentevastperiode\",\n FiscaleAftrek = \"FiscaleAftrek\",\n InbrengEigenGeld = \"InbrengEigenGeld\",\n OversluitenHypotheek = \"OversluitenHypotheek\",\n VerantwoordeWoonlasten = \"VerantwoordeWoonlasten\",\n Box3Consumptief = \"Box3Consumptief\",\n AfdekkenOverlijdensrisico = \"AfdekkenOverlijdensrisico\",\n AfdekkenAOWW = \"AfdekkenAOWW\",\n Pensioenvoorziening = \"Pensioenvoorziening\",\n HoogteOpbouwDoelvermogen = \"HoogteOpbouwDoelvermogen\",\n WijzeOpbouwDoelvermogen = \"WijzeOpbouwDoelvermogen\",\n Beleggingsproduct = \"Beleggingsproduct\",\n Beleggingsprofiel = \"Beleggingsprofiel\",\n Fondskeuze = \"Fondskeuze\",\n OversluitenBeleggingspolis = \"OversluitenBeleggingspolis\",\n AfdekkenWW = \"AfdekkenWW\",\n Kredieten = \"Kredieten\",\n DubbeleWoonlasten = \"DubbeleWoonlasten\",\n EerderStoppen = \"EerderStoppen\",\n Geldverstrekker = \"Geldverstrekker\",\n HypotheekAflossen = \"HypotheekAflossen\",\n Schade = \"Schade\",\n Risicoprofiel = \"Risicoprofiel\",\n Nazorg = \"Nazorg\",\n Energie = \"Energie\",\n Telecom = \"Telecom\",\n Uitvaart = \"Uitvaart\",\n Verduurzaming = \"Verduurzaming\",\n Alles = \"Alles\",\n}\n\nexport interface MotiveringOutput {\n motiveringen: { [key: string]: Motivering; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface MotiveringUitgangspunten {\n readonly voorstellen: MotiveringVoorstel[] | null;\n motiveringVoorVoorstelId: string | null;\n}\n\nexport interface MotiveringUitgangspuntenArbeidsongeschiktheid {\n scenarioDoorrekeningExtra1: boolean | null;\n scenarioDoorrekeningExtra2: boolean | null;\n arbeidsongeschiktheidStandaardPercentage: number | null;\n arbeidsongeschiktheidExtra1Percentage: number | null;\n arbeidsongeschiktheidExtra2Percentage: number | null;\n duurzaamArbeidsongeschiktStandaard: boolean | null;\n duurzaamArbeidsongeschiktExtra1: boolean | null;\n duurzaamArbeidsongeschiktExtra2: boolean | null;\n benuttingVerdiencapaciteitStandaardPercentage: number | null;\n benuttingVerdiencapaciteitExtra1Percentage: number | null;\n benuttingVerdiencapaciteitExtra2Percentage: number | null;\n readonly toetsjaar: number | null;\n controleHypotheeknorm: MotiveringControleHypotheeknorm | null;\n controleGewenstInkomen: MotiveringControleGewenstInkomen | null;\n readonly scenarioVanKlantIds: string[] | null;\n readonly overzichtBeideTonen: boolean | null;\n readonly voorstellen: MotiveringVoorstel[] | null;\n motiveringVoorVoorstelId: string | null;\n}\n\nexport interface MotiveringUitgangspuntenDubbeleWoonlasten {\n geschatteDuurOverbruggingInMaanden: number | null;\n}\n\nexport interface MotiveringUitgangspuntenHypotheek {\n controleHypotheeknorm: MotiveringControleHypotheeknorm | null;\n controleGewenstInkomen: MotiveringControleGewenstInkomen | null;\n readonly scenarioVanKlantIds: string[] | null;\n readonly overzichtBeideTonen: boolean | null;\n readonly voorstellen: MotiveringVoorstel[] | null;\n motiveringVoorVoorstelId: string | null;\n}\n\nexport interface MotiveringUitgangspuntenOverlijden {\n werkenNaOverlijdenPartnerAanvrager1Percentage: number | null;\n werkenNaOverlijdenPartnerAanvrager2Percentage: number | null;\n duurOverzicht: DuurOverzichtOptions | null;\n overzichtDuurInJaren: number | null;\n overzichtTotLeeftijdInMaanden: number | null;\n controleHypotheeknorm: MotiveringControleHypotheeknorm | null;\n controleGewenstInkomen: MotiveringControleGewenstInkomen | null;\n readonly scenarioVanKlantIds: string[] | null;\n readonly overzichtBeideTonen: boolean | null;\n readonly voorstellen: MotiveringVoorstel[] | null;\n motiveringVoorVoorstelId: string | null;\n}\n\nexport interface MotiveringUitgangspuntenPensioen {\n beschikbareJaarruimteAanvrager1: MotiveringBeschikbareJaarruimte | null;\n beschikbareJaarruimteAanvrager2: MotiveringBeschikbareJaarruimte | null;\n controleHypotheeknorm: MotiveringControleHypotheeknorm | null;\n controleGewenstInkomen: MotiveringControleGewenstInkomen | null;\n readonly scenarioVanKlantIds: string[] | null;\n readonly overzichtBeideTonen: boolean | null;\n readonly voorstellen: MotiveringVoorstel[] | null;\n motiveringVoorVoorstelId: string | null;\n}\n\nexport interface MotiveringUitgangspuntenWerkloosheid {\n controleHypotheeknorm: MotiveringControleHypotheeknorm | null;\n controleGewenstInkomen: MotiveringControleGewenstInkomen | null;\n readonly scenarioVanKlantIds: string[] | null;\n readonly overzichtBeideTonen: boolean | null;\n readonly voorstellen: MotiveringVoorstel[] | null;\n motiveringVoorVoorstelId: string | null;\n}\n\nexport interface MotiveringVoorstel {\n voorstelId: string;\n readonly omschrijving: string | null;\n volgnummer: number;\n}\n\nexport interface NhgMogelijkOutput {\n maxKoopsomResult: MaxKoopsomOutput | null;\n maxKostenInEigendomResult: MaxKostenInEigendomOutput | null;\n tweedeWoningNietMogelijkResult: TweedeWoningNietMogelijkOutput | null;\n maxLeningResult: MaxLeningOutput | null;\n}\n\n/** Gegevens van het nieuwe adviesdossier. */\nexport interface NieuwAdviesdossier {\n /** De unieke identificatie van het nieuwe adviesdossier. */\n adviesdossierId: string;\n}\n\n/** Gegevens van een nieuw adviesdossier. Opgegeven kunnen worden: korte en lange omschrijving. De overige gegevens van het dossier worden overgenomen van het opgegeven adviesdossier. */\nexport interface NieuwAdviesdossierInput {\n /** Korte omschrijving van het advies */\n korteOmschrijving: string | null;\n /** Lange/uitgebreide omschrijving van het advies */\n langeOmschrijving: string | null;\n}\n\n/** Het resultaat van het aanmaken van een nieuw adviesdossier. */\nexport interface NieuwAdviesdossierOutput {\n adviesdossier: NieuwAdviesdossier | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** De identificaties van dossiers en klanten. */\nexport interface NieuwKlantdossier {\n /** De unieke identificatie van het aangemaakte klantdossier. */\n klantdossierId: string;\n /** De unieke identificatie van het aangemaakte adviesdossier. */\n adviesdossierId: string;\n /** De unieke identificatie van de aangemaakte klant. */\n aanvrager1KlantId: string;\n /** Optioneel, de unieke identificatie van de aangemaakte partner. */\n readonly aanvrager2KlantId: string | null;\n}\n\n/** Gegevens van een nieuw klantdossier */\nexport interface NieuwKlantdossierInput {\n /** De achternaam van de klant. */\n achternaamAanvrager1: string;\n /** Het tussenvoegsel van de klant. */\n tussenvoegselAanvrager1: string | null;\n /** De roepnaam van de klant. */\n roepnaamAanvrager1: string | null;\n /** De geboortedatum van de klant. */\n geboortedatumAanvrager1: string;\n /** Geeft aan of er sprake is van een partner. */\n heeftAanvrager2: boolean;\n /** De achternaam van de partner. */\n achternaamAanvrager2: string | null;\n /** Het tussenvoegsel van de partner. */\n tussenvoegselAanvrager2: string | null;\n /** De roepnaam van de partner. */\n roepnaamAanvrager2: string | null;\n /** De geboortedatum van de partner. */\n geboortedatumAanvrager2: string | null;\n}\n\n/** Resultaat van het toevoegen van een nieuw klantdossier. */\nexport interface NieuwKlantdossierOutput {\n nieuwKlantdossier: NieuwKlantdossier | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** NotarisType Geen = 0, Passerend = 1, Transporterend = 2, OpstellerGarantieverklaring = 3 */\nexport enum NotarisType {\n Geen = \"Geen\",\n Passerend = \"Passerend\",\n Transporterend = \"Transporterend\",\n OpstellerGarantieverklaring = \"OpstellerGarantieverklaring\",\n}\n\nexport interface NotificatieOutput {\n adviesNotificaties: AdviesNotificatie[] | null;\n systeemNotificatie: SysteemNotificatie[] | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Output voor het gevraagde arrangement. */\nexport interface NwbArrangementenOutput {\n /** Output voor het gevraagde arrangement. */\n arrangementen: Arrangement[] | null;\n /** Goed/Fout indicatie */\n isValid: boolean;\n /** Eventuele foutmelding */\n message: string | null;\n}\n\n/** Het model voor de concept methods. */\nexport interface NwbConceptAanvraag {\n /** Gets or sets de product identifier. (intern) */\n productId: string | null;\n /** Gets or sets de arrangement identifier. */\n arrangementId: string | null;\n /** Gets or sets uw kenmerk. */\n uwKenmerk: string | null;\n /** Gets or sets de kopers. */\n kopers: ConceptKoper[] | null;\n verkopers: ConceptVerkopers | null;\n adresOnroerendeZaak: ConceptAdres | null;\n nieuwbouwgegevens: ConceptNieuwbouwgegevens | null;\n /** Gets or sets de geldverstrekker. */\n geldverstrekker: string | null;\n /** Gets or sets het offertenummer. */\n offertenummer: string | null;\n /** Gets or sets het hypotheekbedrag. */\n hypotheekbedrag: number | null;\n /** Gets or sets bedrag aan eigenmiddelen. */\n eigenmiddelen: number | null;\n /** Gets or sets marktwaarde bedrag. */\n marktwaarde: number | null;\n /** Gets or sets het aankoopbedrag. */\n aankoopbedrag: number | null;\n /** Gets or sets het overbruggingsbedrag. */\n overbrugging: number | null;\n /** Gets or sets indicatie nationale hypotheekgarantie Ja/Nee. */\n nationaleHypotheekgarantie: boolean | null;\n /** Gets or sets de passeerdatum. */\n passeerdatum: string | null;\n /** Gets or sets de uiterste afgiftedatum. */\n uitersteAfgiftedatum: string | null;\n notaris: ConceptNotaris | null;\n /** Gets or sets indicatie verzekerd Ja/Nee. */\n isVerzekerd: boolean | null;\n /** Gets or sets eventuele opmerkingen. */\n opmerkingen: string | null;\n}\n\n/** Output model voor concept aanvraag */\nexport interface NwbConceptOutput {\n concept: NwbConceptAanvraag | null;\n /** Gets or sets bevat na de postconcept aanroep de URL naar de\naanvraag in het NWB portaal. De klkant kan deze gebruiken om direc,\nzonder in te loggen naar de aanvraag te gaan. */\n aanvraagUrl: string | null;\n /** Gets or sets goed/Fout indicatie */\n isValid: boolean | null;\n /** Gets or sets eventuele foutmelding */\n message: string | null;\n}\n\n/** Ouput voor geldverstekkers method. */\nexport interface NwbGeldverstrekkersOutput {\n /** Lijst met geldverstekker gegevens. */\n geldverstrekkers: Geldverstrekker[] | null;\n /** Goed/Fout indicatie */\n isValid: boolean;\n /** Eventuele foutmelding */\n message: string | null;\n}\n\n/** Output voor de producten method. */\nexport interface NwbProductenOutput {\n /** Lijst met product elementen */\n producten: Product[] | null;\n /** Goed/Fout indicatie */\n isValid: boolean;\n /** Eventuele foutmelding */\n message: string | null;\n}\n\n/** Bevat gegevens van een onderneming. */\nexport interface Onderneming {\n /** Volgnummer van het inkomen binnen de ondernemingen van een klant */\n volgnummer: number;\n /** Bedrag inkomen vorig jaar */\n inkomenJaarMin1Bedrag: number | null;\n /** Bedrag inkomen 2 jaar geleden */\n inkomenJaarMin2Bedrag: number | null;\n /** Datum overgang op partner */\n overgangOpPartnerEinddatum: string | null;\n /** Datum einde onderneming */\n eindeOndernemingDatum: string | null;\n /** Indicatieveld. Einde bij arbeidsongeschiktheid */\n eindeBijAo: boolean | null;\n /** Indicatieveld. Is er sprake van dotatie FOR? */\n forDotatie: boolean | null;\n /** Indicatieveld. Is er sprake van meewerkaftrek? */\n meewerkaftrek: boolean | null;\n /** Indicatieveld. Is er sprake van overgang op partner bij overlijden? */\n overgangOpPartner: boolean | null;\n /** Indicatieveld. Is er sprake van zelfstandigenaftrek? */\n zelfstandigenaftrek: boolean | null;\n /** Boekjaar */\n boekjaar: number | null;\n /** Leeftijd overgang op partner */\n overgangOpPartnerEindleeftijd: number | null;\n /** Percentage overgang op partner */\n overgangOpPartnerPercentage: number | null;\n /** Indicatie dat men gebruik maakt van de MKB-Winstvrijstelling */\n mkbWinstvrijstelling: boolean | null;\n soortOndernemingHdn: SoortOndernemingType | null;\n rechtsVorm: RechtsVormType | null;\n /** Het nummer van de onderneming waarmee het bij de Kamer van Koophandel geregistreerd staat */\n kvkNummer: string | null;\n /** Het nummer van de vestiging waarmee het bij de Kamer van Koophandel geregistreerd staat */\n kvkVestigingsnummer: string | null;\n /** Indicatieveld. Einde bij werkloosheid */\n eindeBijWw: boolean | null;\n /** Indicatie dat het resultaat bij arbeidsongeschiktheid afhankelijk is van de verdiencapaciteit */\n resultaatVdc: boolean | null;\n /** Datum aanvang onderneming */\n ondernemingAanvangsdatum: string | null;\n inkomenScenario: BedragScenario | null;\n /** Indicatie dat het een DGA betreft */\n dga: boolean | null;\n /** Aandelenpercentage i.g.v. een DGA */\n aandelenPercentage: number | null;\n /** SBI-code */\n sbiCode: string | null;\n /** Rechtspersonen Samenwerkingsverbanden Informatie Nummer (RSIN) */\n rsin: string | null;\n soortInkomenverklaring: InkomenverklaringOpties | null;\n /** Toetsinkomen */\n toetsinkomen: number | null;\n /** Het aantal ondernemingen dat bijdraagt aan het opgegeven inkomen. */\n aantalOndernemingen: number | null;\n /** Kenmerk van de inkomensverklaring ondernemer waarmee deze bekend is binnen het accountancy domein. (BOI) */\n boi: string | null;\n /** Uitgiftedatum verklaring inkomen */\n uitgiftedatumVerklaringInkomen: string | null;\n /** Rekenexpert conform HDN keuzelijst RekenexpertType */\n rekenexperttypeCode: number | null;\n /** Kenmerk van de inkomensverklaring ondernemer waarmee deze bekend is binnen het accountancy domein (voorheen 'BOI'). */\n dossiernummer: string | null;\n /** Omschrijving soort overige inkomsten */\n soortOverigeInkomsten: string | null;\n}\n\n/** Invoer voor een Opbouw-berekening. */\nexport interface OpbouwBerekening {\n opbouwProduct: HypotheekVoorstelLeningdeel | null;\n}\n\n/** Het resultaat van de opnameberekening. */\nexport interface OpnameBerekeningOutput {\n /** De berekende resultaten van de opnameberekening. */\n readonly resultaat: OpnamePerJaarResultaat[] | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat het voorbeeldbedrag en de maximale opname van de vermogensrekening in een bepaald jaar. */\nexport interface OpnamePerJaarResultaat {\n /** Jaar van de vermogensrekening. */\n jaar: number;\n /** Voorbeeldkapitaal. */\n voorbeeldBedrag: number;\n /** Maximale opname. */\n maxOpnameBedrag: number;\n}\n\n/** Bevat de gegevens van Adviesbox Form Overlijdensrisicoverzekering. */\nexport interface Orv {\n /** De producten op het scherm */\n producten: OrvProduct[];\n aanvrager1: OrvAanvrager | null;\n aanvrager2: OrvAanvrager | null;\n /** De af te lossen leningdelen van het voorstel. */\n readonly leningdelen: LeningdeelReadOnly[] | null;\n /** De af te lossen kredieten van het voorstel. */\n readonly kredieten: KredietReadOnly[] | null;\n /** De naam van de geldverstrekker die in het Form Hypotheek geselecteerd is. */\n readonly geldverstrekkerNaam: string | null;\n /** Ingangsdatum van het voorstel (of: 'Passeerdatum' wanneer er een hypotheek geadviseerd wordt) */\n readonly ingangsdatumVoorstel: string | null;\n}\n\n/** De aanvraaggegevens van een ORV-product. */\nexport interface OrvAanvraag {\n /** Heeft aanvrager 1 een strafrechtelijk verleden. */\n strafrechtelijkVerledenAanvrager1: boolean | null;\n /** Heeft aanvrager 2 een strafrechtelijk verleden. */\n strafrechtelijkVerledenAanvrager2: boolean | null;\n /** Geeft aan of er sprake is van een voorlopige ingangsdatum. */\n voorlopigeIngangsdatum: boolean | null;\n /** Geeft aan of de communicatie digitaal verzonden mag worden. */\n akkoordMetDigitaleCommunicatie: boolean | null;\n /** Geeft aan of de polis digitaal opgestuurd mag worden. */\n akkoordMetDigitalePolis: boolean | null;\n /** Geeft aan of de toelichting is gelezen en slotverklaring akkoord is. */\n toelichtingGelezenAkkoordMetSlotverklaring: boolean | null;\n /** Geeft aan of er bij een andere verzeraar een nog een lopende aanvraag is. */\n eldersLopendeAanvraag: boolean | null;\n /** Indicatie dat men voldoet aan de acceptatiecriteria. */\n voldoetAanAcceptatiecriteria: boolean | null;\n}\n\n/** De gegevens van de aanvrager */\nexport interface OrvAanvrager {\n /** Indicatie of de aanvrager kinderen heeft */\n readonly heeftKinderen: boolean | null;\n klantId: string;\n readonly achternaam: string | null;\n readonly voorvoegsel: string | null;\n readonly voorletters: string | null;\n readonly voornamen: string | null;\n geslacht: GeslachtOpties | null;\n readonly roker: boolean | null;\n readonly geboortedatum: string | null;\n readonly aowdatum: string | null;\n}\n\n/** Invoer voor een ORV-berekening. */\nexport interface OrvBerekening {\n orvProduct: OrvProduct;\n}\n\n/** De dekking van een ORV-product. */\nexport interface OrvDekking {\n /** Het annuĆÆteitspercentage. */\n annuiteits1Percentage: number | null;\n verzekeringsmotief: Verzekeringsmotief | null;\n doelVerzekering: DoelVerzekeringOptions | null;\n /** Verzekerd kapitaal van aanvrager 1 of van het product. */\n verzekerdKapitaal1Bedrag: number | null;\n /** Dekking daalt tot van aanvrager 1 of van het product. */\n dekkingDaaltTot1Bedrag: number | null;\n /** Dur van de daling in jaren voor aanvrager 1. */\n duurDalingInJaren1: number | null;\n /** AnnuĆÆteitspercentage aanvrager 2. */\n annuiteits2Percentage: number | null;\n /** Verzekerd kapitaal aanvrager 2. */\n verzekerdKapitaal2Bedrag: number | null;\n /** Dekking daalt tot van aanvrager 2. */\n dekkingDaaltTot2Bedrag: number | null;\n /** Dur van de daling in jaren voor aanvrager 2. */\n duurDalingInJaren2: number | null;\n /** Indicatie dat er sprake is van 'reservewaarde' (ook wel: 'premiereserve') */\n reservewaarde: boolean | null;\n basisdekking: Indexatiesoort | null;\n /** Het verzekerd maandbedrag. */\n verzekerdMaandbedrag: number | null;\n uitkeringBij: UitkeringBijOverlijdenSoort | null;\n /** Einddatum van de HAV-dekking. */\n einddatum: string | null;\n /** Leeftijd op de einddatum. */\n readonly eindleeftijd: number | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form ORV (zowel huidige situatie als voorstel). */\nexport interface OrvOutput {\n /** Lijst met ORV-producten per adviesdossier (huidige situatie) of voorstel. */\n orvs: { [key: string]: Orv; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** De polisgegevens van een ORV-product. */\nexport interface OrvPolis {\n productnummer: string | null;\n maatschappijCode: string | null;\n maatschappijOmschrijving: string | null;\n maatschappijCodeHdn: string | null;\n productnaam: string | null;\n productcode: number;\n ingangsdatum: string;\n looptijdInMaanden: number | null;\n uwBemiddeling: boolean;\n}\n\n/** De premiegegevens van een ORV-product. */\nexport interface OrvPremie {\n /** Geeft aan of er sprake is van verkorte premieduur. */\n verkortePremieduur: boolean | null;\n /** Het aantal maanden dat premie betaald moet worden. */\n premieduurInMaanden: number | null;\n betalingsTermijn: BetalingsTermijnType | null;\n /** Premiebedrag. */\n premieBedrag: number | null;\n /** Specificatie van het verloop van de premie per jaar bij premieverloop 'Variabel'. */\n premiesPerJaar: PremiePerJaar[] | null;\n /** Geeft aan of de premie aftrekbaar is. */\n premieAftrekbaar: boolean | null;\n}\n\n/** Basis ORV-product. */\nexport interface OrvProduct {\n soortProduct: SoortOrvProductOptions;\n uitkeringssoort: OrvUitkeringssoortOptions | null;\n /** Geeft aan of het om een doorlopend product gaat. */\n readonly doorlopend: boolean | null;\n polis: OrvPolis;\n /** Unieke identificaties van de klanten die als verzekeringnemer geselecteerd zijn */\n verzekeringnemerKlantIds: string[];\n /** Unieke identificaties van de klanten die als verzekerde geselecteerd zijn */\n verzekerdeKlantIds: string[];\n /** Geeft aan of er gebruik gemaakt wordt van premiesplitsing. */\n premiesplitsing: boolean | null;\n dekking: OrvDekking;\n premie: OrvPremie;\n verpanding: OrvVerpanding | null;\n aanvraag: OrvAanvraag | null;\n /** Indicatie dat indien er doorlopende producten gewijzigd zijn, deze opnieuw overgenomen moeten worden naar de voorstellen */\n wijzigingenInDoorlopendeProductenOvernemen: boolean;\n premieverloop: PremieverloopOptions;\n productId: string | null;\n meenemen: boolean;\n}\n\n/** Het resultaat van een ORV-berekening. */\nexport interface OrvResultaat {\n /** De berekende premie. */\n readonly premies: OrvResultaatPremie[] | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Een berekende ORV-premie. */\nexport interface OrvResultaatPremie {\n /** Premiebedrag */\n readonly bedrag: number | null;\n /** Premie bedrag inclusief premievrijstelling bij arbeidsongeschiktheid */\n readonly bedragInclusiefPva: number | null;\n /** Premie bedrag exclusief premievrijstelling bij arbeidsongeschiktheid */\n readonly bedragExclusiefPva: number | null;\n /** Looptijd in maanden */\n readonly looptijdInMaanden: number | null;\n}\n\n/** OrvUitkeringssoortOptions LineairDalend = 1, AnnuĆÆtairDalend = 2, Gelijkblijvend = 3 */\nexport enum OrvUitkeringssoortOptions {\n LineairDalend = \"LineairDalend\",\n AnnuĆÆtairDalend = \"AnnuĆÆtairDalend\",\n Gelijkblijvend = \"Gelijkblijvend\",\n}\n\n/** Bevat de invoergegevens van de ORV premievergelijker. */\nexport interface OrvVergelijkerInput {\n /** Unieke identificaties van de klanten die als verzekerde geselecteerd zijn */\n verzekerdeKlantIds: string[];\n /** Indicatie dat de eerste verzekerde rookt */\n verzekerde1Roker: boolean;\n /** Indicatie dat de tweede verzekerde (indien aanwezig) rookt */\n verzekerde2Roker: boolean | null;\n verzekeringsvorm: OrvUitkeringssoortOptions;\n /** Aanvangsdatum */\n aanvangsdatum: string;\n /** Duur */\n duurInJaren: number;\n /** Verzekerd kapitaal */\n verzekerdKapitaalBedrag: number;\n /** Het annuĆÆteitspercentage */\n annuiteitsPercentage: number | null;\n /** Verpand */\n verpand: boolean;\n}\n\n/** Het resultaat van een ORV premievergelijker. */\nexport interface OrvVergelijkerOutput {\n /** De berekende resultaten. */\n readonly resultaten: OrvVergelijkerResultaat[] | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Een berekende ORV-premie. */\nexport interface OrvVergelijkerResultaat {\n /** De code van de verzekeringsmaatschappij uit de Producten Web API */\n readonly maatschappijCode: string | null;\n /** Maatschappij */\n readonly maatschappijOmschrijving: string | null;\n /** De code van het product uit de Producten Web API. */\n productcode: number;\n /** Product */\n readonly productnaam: string | null;\n /** Premieduur (in jaren) */\n premieduurInJaren: number;\n premieverloop: PremieverloopOptions;\n /** Totale premie */\n readonly totalePremieBedrag: number | null;\n /** Eerste premie */\n readonly eerstePremieBedrag: number | null;\n /** Reservewaarde true/false */\n readonly reservewaarde: boolean | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** De verpanding van een ORV-product. */\nexport interface OrvVerpanding {\n /** Geeft aan of het product bedoeld is als inkomensaanvulling. */\n inkomensaanvulling: boolean | null;\n inkomensaanvullingAanvrager1: InkomensaanvullingBijOverlijden | null;\n inkomensaanvullingAanvrager2: InkomensaanvullingBijOverlijden | null;\n verpandAanGeldverstrekker: boolean | null;\n bedoeldVoorAflossing: boolean | null;\n aflosproducten: Aflosproduct[] | null;\n}\n\n/** Bevat het bedrag van het ouderdomspensioen van een bepaalde ingangsdatum. */\nexport interface OuderdomspensioenIndexering {\n /** Volgnummer van de indexering binnen de AO-uitkering */\n volgnummer: number;\n /** Ingangsdatum */\n ingangsdatum: string | null;\n /** Bedrag */\n bedrag: number | null;\n}\n\n/** Bevat het verloop van het ouderdomspensioen. */\nexport interface OuderdomspensioenScenario {\n /** Bevat de bedragen per ingangsdata */\n indexeringen: OuderdomspensioenIndexering[] | null;\n}\n\n/** De invoer voor de overbruggingskrediet-berekening. */\nexport interface OverbruggingskredietInput {\n /** De hoogte van het overbruggingskrediet */\n overbruggingBedrag: number | null;\n /** De bij het overbruggingskrediet behorende afsluitkosten (provisie) */\n afsluitkostenBedrag: number | null;\n /** Het gedeelte van de overbrugging dat in box 1 valt (box 3 wordt hiervan afgeleid) */\n box1Bedrag: number | null;\n /** Indicatie dat de overwaarde default overgenomen moet worden */\n overwaardeMeenemen: boolean | null;\n /** Indicatie dat de einddatum default overgenomen moet worden van de verkoopdatum van een te verkopen pand */\n einddatumMeenemen: boolean | null;\n /** De einddatum van het overbruggingskrediet */\n einddatum: string | null;\n /** De rente van het overbruggingskrediet */\n rentePercentage: number | null;\n /** De ingangsdatum van het overbruggingskrediet (gelijk aan passeerdatum) */\n aanvangsdatum: string | null;\n /** Het gedeelte van de overwaarde dat meegenomen moet worden in het overbruggingskrediet */\n meenemenInOverbruggingBedrag: number | null;\n hypotheekNorm: TarievenNorm | null;\n}\n\n/** De uitvoer van de overbruggingskrediet-berekening. */\nexport interface OverbruggingskredietOutput {\n resultaat: OverbruggingskredietResultaat | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat het resultaat van de overbruggingskrediet-berekening. */\nexport interface OverbruggingskredietResultaat {\n /** Maandelijkse rentelast bruto. */\n rentelastMaandelijksBrutoBedrag: number | null;\n /** Maandelijkse rentelast netto. */\n rentelastMaandelijksNettoBedrag: number | null;\n /** Totale rentelast bruto. */\n rentelastTotaalBrutoBedrag: number | null;\n /** Totale rentelast netto. */\n rentelastTotaalNettoBedrag: number | null;\n}\n\n/** Bevat de gegevens van Adviesbox Form Overig. */\nexport interface Overig {\n /** De producten op het scherm */\n producten: OverigProduct[];\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n /** Ingangsdatum van het voorstel (of: 'Passeerdatum' wanneer er een hypotheek geadviseerd wordt) */\n readonly ingangsdatumVoorstel: string | null;\n}\n\n/** Algemene gegevens van het product. */\nexport interface OverigAlgemeen {\n /** De naam van het product */\n productnaam: string | null;\n /** Omschrijving van het product */\n omschrijving: string | null;\n /** De ingangsdatum van het product. */\n aanvangsdatum: string;\n /** De looptijd van het product in maanden. */\n looptijdInMaanden: number;\n /** True indien de adviseur de nazorg op het product levert. */\n uwBemiddeling: boolean;\n /** Geeft aan doorlopend of nieuw */\n doorlopend: boolean | null;\n}\n\n/** Gegevens van het product. */\nexport interface OverigGegevens {\n correctieScenario: BedragScenario;\n betalingstermijn: BetalingsTermijnType;\n /** Geeft aan of er sprake is van inkomen uit arbeid. */\n inkomenUitArbeid: boolean | null;\n /** Geeft aan of de correctie onderdeel uitmaakt van het dagloon. */\n onderdeelDagloon: boolean | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Overig (zowel huidige situatie als voorstel). */\nexport interface OverigOutput {\n /** Lijst met Overige-producten per adviesdossier (huidige situatie) of voorstel. */\n overigen: { [key: string]: Overig; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de gegevens van het overige product. */\nexport interface OverigProduct {\n /** Unieke identificatie van het product. */\n productId: string | null;\n /** Indicatie dat het product doorloopt in de nieuwe situatie */\n meenemen: boolean;\n algemeen: OverigAlgemeen;\n correctieLast: SoortCorrectieLastOptions | null;\n correctieFiscaal: SoortCorrectieFiscaalOptions | null;\n /** Unieke identificatie van de klant die als heffingspartij geselecteerd is. */\n heffingBijKlantId: string;\n gegevens: OverigGegevens;\n verrekenen: OverigVerrekenen;\n /** Indicatie dat indien er doorlopende producten gewijzigd zijn, deze opnieuw overgenomen moeten worden naar de voorstellen */\n wijzigingenInDoorlopendeProductenOvernemen: boolean;\n}\n\n/** Gegevens met betrekking tot de verrekening van het product. */\nexport interface OverigVerrekenen {\n /** Geeft aan of er sprake is van scenario Langleven. */\n langleven: boolean;\n /** Geeft aan of er sprake is van scenario Arbeidsongeschiktheid. */\n arbeidsongeschiktheid: boolean;\n /** Geeft aan of er sprake is van scenario Werkloosheid. */\n werkloosheid: boolean;\n /** Geeft aan of er sprake is van scenario Overlijden. */\n overlijden: boolean;\n /** Percentage overgang op partner */\n overgangOpPartnerPercentage: number | null;\n /** Datum overgang op partner */\n overgangOpPartnerEinddatum: string | null;\n}\n\n/** Bevat gegevens van overige inkomsten box 1. */\nexport interface OverigeInkomstenBox1 {\n /** Omschrijving (bij overige inkomsten) */\n omschrijving: string | null;\n /** Overige inkomsten (vrij invoerbaar) */\n bedrag: number;\n /** Einddatum overige inkomsten 2 */\n einddatum: string | null;\n /** Indicatie dat de einddatum gelijkgesteld moet worden aan de AOW-datum */\n einddatumOvernemen: boolean;\n}\n\n/** OverigeInkomstenBox3Soort BeleggingenInkomsten = 2, VerhuurInkomsten = 13 */\nexport enum OverigeInkomstenBox3Soort {\n BeleggingenInkomsten = \"BeleggingenInkomsten\",\n VerhuurInkomsten = \"VerhuurInkomsten\",\n}\n\n/** Bevat de inhoud van het Adviesbox-form Pensioen. */\nexport interface Pensioen {\n /** Bevat pensioenen */\n pensioenen: PensioenGegevens[] | null;\n aanvrager1: PensioenAanvrager | null;\n aanvrager2: PensioenAanvrager | null;\n}\n\n/** Bevat de naamgegevens en loondiensten van een aanvrager. */\nexport interface PensioenAanvrager {\n /** Collectie met loondiensten / inkomens uit dienstverband\nDeze is benodigd om 'Dienstverband bij pensioen Huidige werkgever' te kunnen vullen\nLoondienst bevat velden voor loondienstid, naam werkgever, totaal inkomen en de einddatum van het inkomen / pensioendatum */\n readonly loondiensten: LoondienstReadOnly[] | null;\n burgerlijkeStaat: BurgerlijkeStaatType | null;\n klantId: string;\n readonly achternaam: string | null;\n readonly voorvoegsel: string | null;\n readonly voorletters: string | null;\n readonly voornamen: string | null;\n geslacht: GeslachtOpties | null;\n readonly roker: boolean | null;\n readonly geboortedatum: string | null;\n readonly aowdatum: string | null;\n}\n\n/** Gegevens van een pensioen */\nexport interface PensioenGegevens {\n /** Unieke identificatie van het pensioen */\n pensioenId: string | null;\n /** Volgnummer van het pensioen binnen de pensioenen van de klant */\n volgnummer: number;\n /** Unieke identificatie van de klant; wordt gebruikt om de geselecteerde pensioendeelnemer bij te houden */\n klantId: string;\n /** Indicatieveld. Behoort pensioen bij huidige werkgever (True) of vorige (False) */\n pensioenBijHuidigeWerkgever: boolean;\n /** Naam pensioenuitvoerder */\n pensioenUitvoerder: string | null;\n /** Branche */\n branche: string | null;\n /** Unieke identificatie van dienstverband / loondienst; wordt gebruikt om de geselecteerde dienstverband / loondienst bij te houden */\n loondienstId: string | null;\n soortPensioenregeling: Pensioenregelingsoort | null;\n /** Percentage rekenrente opbouwfase */\n opbouwPercentage: number | null;\n /** Percentage rekenrente uitkeringsfase */\n uitkeringPercentage: number | null;\n /** Bedrag beschikbare premie (soort pensioen) */\n beschikbaarBedrag: number | null;\n /** Bedrag pensioengevend inkomen */\n pensioengevendInkomenBedrag: number | null;\n /** Bedrag pensioengevend inkomen overnemen uit berekening */\n pensioengevendInkomenOvernemen: boolean | null;\n /** Bedrag franchise */\n franchiseBedrag: number | null;\n /** Bedrag franchise overnemen uit berekening */\n franchiseOvernemen: boolean | null;\n /** Bedrag grondslag */\n grondslagBedrag: number | null;\n /** Bedrag grondslag overnemen uit berekening */\n grondslagOvernemen: boolean | null;\n /** Bedrag pensioen aangroei (factor A) */\n aangroeiBedrag: number | null;\n /** Bedrag Aangroei (factor A) overnemen uit berekening */\n aangroeiOvernemen: boolean | null;\n /** Huidig opgebouwd pensioenbedrag */\n opgebouwdBedrag: number | null;\n /** Datum overzicht */\n overzichtDatum: string | null;\n /** Bedrag doelvermogen */\n doelvermogenBedrag: number | null;\n /** Bedrag bijdrage prepensioen */\n bijdragePrePensioenBedrag: number | null;\n /** Bedrag bijdrage ouderdomspensioen */\n bijdrageOuderdomsPensioenBedrag: number | null;\n /** Indicatieveld. Sprake van ouderdomspensioen? */\n ouderdomspensioen: boolean | null;\n /** Bedrag ouderdomspensioen */\n ouderdomspensioenBedrag: number | null;\n /** Datum ouderdomspensioen */\n ouderdomspensioenDatum: string | null;\n ouderdomspensioenScenario: OuderdomspensioenScenario | null;\n /** Indicatieveld. Sprake van prepensioen? */\n prepensioen: boolean | null;\n /** Bedrag prepensioen */\n prepensioenBedrag: number | null;\n /** Datum prepensioen */\n prepensioenDatum: string | null;\n /** Is er sprake van partnerpensioen tot AOW bij overlijden voor AOW */\n partnerpensioenTotAowOverlijdenVoorAow: boolean | null;\n /** Percentage partnerpensioen tot AOW bij overlijden voor AOW van ouderdomspensioen */\n partnerpensioenTotAowOverlijdenVoorAowPercentage: number | null;\n /** Bedrag partnerpensioen tot AOW bij overlijden voor AOW van ouderdomspensioen */\n partnerpensioenTotAowOverlijdenVoorAowBedrag: number | null;\n /** Partnerpensioen na AOW bij overlijden voor AOW */\n partnerpensioenNaAowOverlijdenVoorAow: boolean | null;\n /** Percentage partnerpensioen na AOW bij overlijden voor AOW van ouderdomspensioen */\n partnerpensioenNaAowOverlijdenVoorAowPercentage: number | null;\n /** Bedrag partnerpensioen na AOW bij overlijden voor AOW van ouderdomspensioen */\n partnerpensioenNaAowOverlijdenVoorAowBedrag: number | null;\n /** Partnerpensioen tot AOW bij overlijden na AOW */\n partnerpensioenTotAowOverlijdenNaAow: boolean | null;\n /** Percentage partnerpensioen tot AOW bij overlijden na AOW van ouderdomspensioen */\n partnerpensioenTotAowOverlijdenNaAowPercentage: number | null;\n /** Bedrag partnerpensioen tot AOW bij overlijden na AOW van ouderdomspensioen */\n partnerpensioenTotAowOverlijdenNaAowBedrag: number | null;\n /** Partnerpensioen na AOW bij overlijden na AOW */\n partnerpensioenNaAowOverlijdenNaAow: boolean | null;\n /** Percentage partnerpensioen na AOW bij overlijden na AOW van ouderdomspensioen */\n partnerpensioenNaAowOverlijdenNaAowPercentage: number | null;\n /** Bedrag partnerpensioen na AOW bij overlijden na AOW van ouderdomspensioen */\n partnerpensioenNaAowOverlijdenNaAowBedrag: number | null;\n /** Indicatieveld. Sprake van ANW compensatie tot AOW jaar bij onvolledig ANW? */\n anwCompensatie: boolean | null;\n /** Bedrag ANW compensatie tot AOW jaar bij onvolledig ANW */\n anwCompensatieBedrag: number | null;\n /** Indicatieveld. Sprake van wezenpensioen? */\n wezenpensioen: boolean | null;\n /** Wezenpensioen bedrag */\n wezenpensioenBedrag: number | null;\n /** Percentage wezenpensioen (na AOW) van ouderdomspensioen */\n wezenpensioenPercentage: number | null;\n /** Eindleeftijd wezenpensioen */\n wezenpensioenEindleeftijd: number | null;\n /** Invaliditeitspensioen */\n invaliditeitspensioen: boolean | null;\n /** Bedrag bij invaliditeit */\n invaliditeitspensioenBedrag: number | null;\n /** Percentage invaliditeitspensioen (na AOW) van ouderdomspensioen */\n invaliditeitspensioenPercentage: number | null;\n invaliditeitspensioenUitkeringswijze: UitkeringAoSoort | null;\n aoUitkering: AoUitkering | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Pensioen. */\nexport interface PensioenOutput {\n /** Lijst met de inhoud van het scherm Pensioen per adviesdossier. */\n pensioenen: { [key: string]: Pensioen; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Pensioenregelingsoort Geen = 0, Eindloon = 1, Middelloon = 2, BeschikbarePremie = 3 */\nexport enum Pensioenregelingsoort {\n Geen = \"Geen\",\n Eindloon = \"Eindloon\",\n Middelloon = \"Middelloon\",\n BeschikbarePremie = \"BeschikbarePremie\",\n}\n\n/** Gegevens van 1 leningdeel. */\nexport interface PerLeningdeel {\n /** Gets/sets het leningdeelbedrag. */\n leningdeelBedrag: number;\n meenemen: Meeneemtype | null;\n /** Gets/sets het loyaliteitsbedrag. */\n loyaliteitsbedrag: number | null;\n /** Volgnummer. */\n volgnummer: number;\n /** Afloscodevorm code HDN. */\n afloscodeHdn: string | null;\n /** Ingangsdatum leningdeel. */\n ingangsdatum: string | null;\n renteAfspraak: RenteAfspraakType;\n /** Gets/sets de rentevastperiode in maanden. */\n rentevastInMaanden: number;\n /** De huidige rente. */\n huidigeRente: number | null;\n}\n\nexport interface PercentageIndexering {\n percentage: number | null;\n volgnummer: number;\n ingangsmaand: number | null;\n}\n\nexport interface PercentageScenario {\n waarde: number | null;\n indexeringen: PercentageIndexering[] | null;\n omschrijving: string | null;\n}\n\n/** Bevat de input voor de periodieke aflossing-berekening. */\nexport interface PeriodiekeAflossingInput {\n aflossingsVorm: AflossingsVormType;\n /** Bedrag leningdeel (restant hoofdsom) */\n leningdeelBedrag: number | null;\n /** Datum aanvang van het leningdeel */\n aanvangsdatum: string;\n /** Aantal maanden looptijd */\n looptijdInMaanden: number | null;\n /** Datum opgave */\n opgaveDatum: string | null;\n /** RentePercentage */\n rentePercentage: number;\n}\n\n/** De uitvoer van de periodieke aflossing-berekening. */\nexport interface PeriodiekeAflossingOutput {\n resultaat: PeriodiekeAflossingResultaat | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat het resultaat van de aflossing-berekening. */\nexport interface PeriodiekeAflossingResultaat {\n /** De berekende periodieke aflossing */\n aflossingBedrag: number | null;\n}\n\n/** Bevat de gegevens van de Adviesbox form Personalia. */\nexport interface Personalia {\n /** Geeft aan of het advies met een mede-aanvrager gevraagd wordt */\n adviesMetMedeaanvrager: boolean;\n /** Geeft aan of aanvrager 2 een afwijkend adres heeft */\n aanvrager2HeeftAfwijkendAdres: boolean | null;\n aanvrager1: PersonaliaAanvrager;\n aanvrager2: PersonaliaAanvrager | null;\n /** De keuze die gemaakt is in het herberekeningscherm */\n herberekeningkeuze: number | null;\n}\n\n/** Gegevens van een aanvrager */\nexport interface PersonaliaAanvrager {\n /** Unieke identificatie van de klant */\n klantId: string | null;\n persoonsgegevens: PersoonDetails;\n klantgegevens: KlantDetails;\n woonadres: Adres | null;\n rekening: Rekening | null;\n /** Uitsluitingen van deze persoon */\n uitsluitingen: Uitsluiting[] | null;\n /** Weigeringen van deze persoon */\n weigeringen: Weigering[] | null;\n /** Kinderen van de aanvrager */\n kinderen: PersonaliaKind[] | null;\n}\n\n/** Gegevens van een kind */\nexport interface PersonaliaKind {\n /** Unieke identificatie van een Kind */\n kindId: string | null;\n /** Roepnaam */\n voornamen: string | null;\n /** Geboortedatum */\n geboortedatum: string;\n /** Indicatie dat het kind bij beide aanvragers hoort (indien van toepassing) */\n gezamenlijkKind: boolean | null;\n /** Indicatieveld. Is het kind inwonend? */\n inwonend: boolean;\n schooltype: Schooltype;\n /** Berekende kinderbijslag per kwartaal */\n readonly kinderbijslagPerKwartaal: number | null;\n /** Aantal keer kinderbijslag. Enkelvoudige of dubbele.. */\n aantalKeerKinderbijslag: number;\n /** Indicatieveld. Is er sprake van co-ouderschap? */\n coOuderschap: boolean;\n /** Berekende kinderbijslag per jaar */\n kinderbijslagPerJaar: number | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Personalia. */\nexport interface PersonaliaOutput {\n /** Lijst met de inhoud van het Adviesbox-form Personalia per adviesdossier. */\n personalia: { [key: string]: Personalia; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Output voor het opvragen de waarschuwingen voor het Adviesbox-form Personalia. */\nexport interface PersonaliaWaarschuwingenOutput {\n /** Waarschuwingen voor herberekening optie 1. */\n herberekeningOptie1Waarschuwingen: ValidationResultModel[] | null;\n /** Waarschuwingen voor herberekening optie 2. */\n herberekeningOptie2Waarschuwingen: ValidationResultModel[] | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de input voor het bepalen van de personeelskorting. */\nexport interface PersoneelskortingInput {\n /** Code van het hypotheeklabel binnen een geldverstrekker uit de Producten API */\n hypotheeklabelCode: number;\n /** Code van de hypotheekvorm binnen een geldverstrekker */\n hypotheekvormCode: number;\n rentevariant: RentevariantOptions;\n /** Aantal maanden rentevastperiode */\n rentevastAantalMaanden: number | null;\n /** Aantal maanden rentebedenktijd */\n rentebedenktijdInMaanden: number | null;\n personeelskortingKeuze: PersoneelskortingKeuzeOptions;\n}\n\n/** PersoneelskortingKeuzeOptions Geen = 0, AmevCode30 = 30, AmevCode31 = 31, AsrCode50 = 50 */\nexport enum PersoneelskortingKeuzeOptions {\n Geen = \"Geen\",\n AmevCode30 = \"AmevCode30\",\n AmevCode31 = \"AmevCode31\",\n AsrCode50 = \"AsrCode50\",\n}\n\n/** De uitvoer van het bepalen van de personeelskorting. */\nexport interface PersoneelskortingOutput {\n resultaat: PersoneelskortingResultaat | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat het resultaat van de bepaling. */\nexport interface PersoneelskortingResultaat {\n /** Het bepaalde personeelskorting */\n personeelskortingPercentage: number | null;\n}\n\nexport interface PersoonBasis {\n achternaam: string | null;\n voorvoegsel: string | null;\n voorletters: string | null;\n voornamen: string | null;\n geslacht: GeslachtOpties | null;\n geboortedatum: string | null;\n telefoonPrive: string | null;\n email: string | null;\n}\n\n/** Bevat detailleerde gegevens van een persoon. */\nexport interface PersoonDetails {\n /** Achternaam */\n achternaam: string | null;\n /** Voorvoegsel */\n voorvoegsel: string | null;\n /** Voorletters */\n voorletters: string | null;\n /** Roepnaam */\n roepnaam: string | null;\n geslacht: GeslachtOpties;\n /** Geboortedatum */\n geboortedatum: string;\n /** Telefoonnummer prive */\n telefoonPrive: string | null;\n /** E-mailadres */\n email: string | null;\n /** Burgerservicenummer (BSN) */\n bsn: string | null;\n /** Nationaliteit (code) */\n nationaliteitCode: string | null;\n /** Geboortenaam */\n geboortenaam: string | null;\n /** Geboortevoorvoegsel */\n geboorteVoorvoegsel: string | null;\n /** Geboorteplaats */\n geboorteplaats: string | null;\n /** Geboorteland (code) */\n geboortelandCode: string | null;\n /** Telefoonnummer werk */\n telefoonWerk: string | null;\n /** Telefoonnummer mobiel */\n telefoonMobiel: string | null;\n /** Geboortevoornamen */\n voornamen: string | null;\n}\n\nexport interface Premie {\n volgnummer: number;\n soortPremie: Premiesoort | null;\n aanvangNaMaanden: number | null;\n looptijdInMaanden: number | null;\n premieBedrag: number | null;\n betalingstermijn: BetalingsTermijnType | null;\n uitPremiedepotBedrag: number | null;\n betalingAchteraf: boolean | null;\n premieUitEigenMiddelen: boolean | null;\n premieAftrekbaar: boolean | null;\n stijgingPercentage: number | null;\n stijgingDuurInMaanden: number | null;\n garantiePercentage: number | null;\n aftrekbaarBedrag: number | null;\n minimaalBedrag: number | null;\n optimaalBedrag: number | null;\n premieAlsBuitengewoneUitgave: boolean | null;\n soortRisicodekking: Risicodekkingen | null;\n uitPremiedepotDuurInMaanden: number | null;\n contraverzekeringBedrag: number | null;\n}\n\n/** Bevat de totale premie in een bepaald jaar in geval van variabele premie. */\nexport interface PremiePerJaar {\n /** Jaar van de looptijd van het product waarin de premie geldt. */\n jaar: number;\n /** Het totale premiebedrag in het gegeven jaar. */\n premieTotaalBedrag: number;\n}\n\n/** Bevat de input voor de premiedepot-berekening. */\nexport interface PremiedepotInput {\n uitgangspunt: PremiedepotUitgangspunt;\n uitgangspuntBetaling: BetalenUitPremiedepot | null;\n /** Bedrag depot storting */\n premiedepotBedrag: number | null;\n /** Percentage premiedepot */\n percentage: number | null;\n /** Aantal maanden looptijd */\n looptijdInMaanden: number | null;\n /** Aantal maanden looptijd */\n looptijdDekkingInMaanden: number | null;\n premies: Premie[] | null;\n}\n\n/** De uitvoer van de premiedepot-berekening. */\nexport interface PremiedepotOutput {\n resultaat: PremiedepotResultaat | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat het resultaat van de premiedepot-berekening. */\nexport interface PremiedepotResultaat {\n /** Het berekende premiedepot */\n premiedepotBedrag: number | null;\n /** Aantal maanden looptijd */\n looptijdInMaanden: number | null;\n}\n\n/** PremiedepotUitgangspunt Geen = 0, DuurDepot = 1, BedragDepot = 2, VolledigDepot = 3 */\nexport enum PremiedepotUitgangspunt {\n Geen = \"Geen\",\n DuurDepot = \"DuurDepot\",\n BedragDepot = \"BedragDepot\",\n VolledigDepot = \"VolledigDepot\",\n}\n\n/** Premiesoort Geen = 0, RisicoNormaal = 1, RisicoHoog = 2, TotaalNormaal = 3, TotaalHoog = 4, Storting = 5, Inleg = 6, Aanvangsstorting = 7, OnttrekkingRente = 8, OnttrekkingPremie = 9, OnttrekkingBelasting = 10, OnttrekkingOverig = 11 */\nexport enum Premiesoort {\n Geen = \"Geen\",\n RisicoNormaal = \"RisicoNormaal\",\n RisicoHoog = \"RisicoHoog\",\n TotaalNormaal = \"TotaalNormaal\",\n TotaalHoog = \"TotaalHoog\",\n Storting = \"Storting\",\n Inleg = \"Inleg\",\n Aanvangsstorting = \"Aanvangsstorting\",\n OnttrekkingRente = \"OnttrekkingRente\",\n OnttrekkingPremie = \"OnttrekkingPremie\",\n OnttrekkingBelasting = \"OnttrekkingBelasting\",\n OnttrekkingOverig = \"OnttrekkingOverig\",\n}\n\n/** PremieverloopOptions Gelijkblijvend = 0, Variabel = 1 */\nexport enum PremieverloopOptions {\n Gelijkblijvend = \"Gelijkblijvend\",\n Variabel = \"Variabel\",\n}\n\n/** Premieverloopsoort Geen = 0, Gelijkblijvend = 1, Jaarlijks = 2 */\nexport enum Premieverloopsoort {\n Geen = \"Geen\",\n Gelijkblijvend = \"Gelijkblijvend\",\n Jaarlijks = \"Jaarlijks\",\n}\n\n/** Product gegevens */\nexport interface Product {\n /** Id van de geldverstrekker (volgens nat. waarborg) */\n id: string | null;\n /** Naam geldverstrekker */\n naam: string | null;\n}\n\n/** ProductHostOpties Geen = 0, Leven = 1, Orv = 2, Aov = 3, Vermogen = 4, Lijfrente = 5, Uitvaart = 6, Schade = 7, Abonnement = 8, Krediet = 9, VrijeKolom = 10, Energie = 11, Telecom = 12, Hypotheek = 13 */\nexport enum ProductHostOpties {\n Geen = \"Geen\",\n Leven = \"Leven\",\n Orv = \"Orv\",\n Aov = \"Aov\",\n Vermogen = \"Vermogen\",\n Lijfrente = \"Lijfrente\",\n Uitvaart = \"Uitvaart\",\n Schade = \"Schade\",\n Abonnement = \"Abonnement\",\n Krediet = \"Krediet\",\n VrijeKolom = \"VrijeKolom\",\n Energie = \"Energie\",\n Telecom = \"Telecom\",\n Hypotheek = \"Hypotheek\",\n}\n\nexport interface ProductKenmerken {\n readonly polisnummer: string | null;\n kapitaalopbouw: KapitaalopbouwOptions | null;\n readonly productId: string | null;\n readonly externeMaatschappijCode: string | null;\n readonly externeMaatschappijOmschrijving: string | null;\n readonly lijfrenteclausuleOrigineel: boolean | null;\n fiscaleTypering: FiscaleTyperingOptions | null;\n readonly garantieverzekering: boolean | null;\n fiscaalRegime: FiscaalRegimeOptions | null;\n readonly oorspronkelijkeIngangsdatum: string | null;\n readonly ingangsdatumBox1: string | null;\n readonly einddatum: string | null;\n readonly doelkapitaalBedrag: number | null;\n readonly laagstePremieooitBedrag: number | null;\n readonly hoogstePremieOoitBedrag: number | null;\n readonly huidigeJaarPremieBedrag: number | null;\n readonly premieLopendJaarBedrag: number | null;\n readonly eerdereUitkeringenBedrag: number | null;\n readonly ingebrachteWaardeBedrag: number | null;\n}\n\n/** ProductkeuzeOptions GS1218 = 1 */\nexport enum ProductkeuzeOptions {\n GS1218 = \"GS1218\",\n}\n\nexport interface ProvisieItem {\n volgnummer: number;\n provisieCodeHdn: string | null;\n afwijkend: boolean | null;\n afsluitPercentage: number | null;\n doorloopPercentage: number | null;\n rentekortingPercentage: number | null;\n netto: boolean | null;\n premiesoort: ProvisiePremiesoort | null;\n percentage: number | null;\n code: string | null;\n soort: Provisiesoort | null;\n bedrag: number | null;\n}\n\n/** ProvisiePremiesoort Geen = 0, Termijnpremie = 1, Koopsom = 2, Hypotheek = 3 */\nexport enum ProvisiePremiesoort {\n Geen = \"Geen\",\n Termijnpremie = \"Termijnpremie\",\n Koopsom = \"Koopsom\",\n Hypotheek = \"Hypotheek\",\n}\n\nexport interface Provisiekeuze {\n provisieItems: ProvisieItem[] | null;\n}\n\n/** Provisiesoort Geen = 0, Afsluitprovisie = 1, Doorlopendeprovisie = 2, Opbouw = 3, Inbouw = 4, Code = 5, Afsluitkorting = 6, Rentekorting = 7, ProvisieBedrag = 8, Prolongatie = 9, Incassovergoeding = 10 */\nexport enum Provisiesoort {\n Geen = \"Geen\",\n Afsluitprovisie = \"Afsluitprovisie\",\n Doorlopendeprovisie = \"Doorlopendeprovisie\",\n Opbouw = \"Opbouw\",\n Inbouw = \"Inbouw\",\n Code = \"Code\",\n Afsluitkorting = \"Afsluitkorting\",\n Rentekorting = \"Rentekorting\",\n ProvisieBedrag = \"ProvisieBedrag\",\n Prolongatie = \"Prolongatie\",\n Incassovergoeding = \"Incassovergoeding\",\n}\n\n/** Het resultaat van een zoekopdracht naar recent geopende adviesdossiers. */\nexport interface RecentGeopendOutput {\n /** De gevonden resultaten. */\n readonly zoekresultaten: ZoekenAdviesdossierMetKlantInfo[] | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** RechtsVormType Geen = 0, Eenmanszaak = 1, Maatschap = 2, VennootschapOnderFirma_Vof_ = 3, CommanditaireVennootschap_Cv_ = 4, BeslotenVennootschap_Bv_ = 5, NaamlozeVennootschap_Nv_ = 6, Stichting = 8 */\nexport enum RechtsVormType {\n Geen = \"Geen\",\n Eenmanszaak = \"Eenmanszaak\",\n Maatschap = \"Maatschap\",\n VennootschapOnderFirma_Vof_ = \"VennootschapOnderFirma_Vof_\",\n CommanditaireVennootschap_Cv_ = \"CommanditaireVennootschap_Cv_\",\n BeslotenVennootschap_Bv_ = \"BeslotenVennootschap_Bv_\",\n NaamlozeVennootschap_Nv_ = \"NaamlozeVennootschap_Nv_\",\n Stichting = \"Stichting\",\n}\n\n/** RedenAankoopOptions WoningEigenGebruik = 1, TweedeWoning = 2, DeelsVerhuurd = 3, GeheelVerhuurd = 4 */\nexport enum RedenAankoopOptions {\n WoningEigenGebruik = \"WoningEigenGebruik\",\n TweedeWoning = \"TweedeWoning\",\n DeelsVerhuurd = \"DeelsVerhuurd\",\n GeheelVerhuurd = \"GeheelVerhuurd\",\n}\n\n/** Bevat gegevens van een rekening. */\nexport interface Rekening {\n /** Unieke identificatie van een rekening */\n rekeningId: string | null;\n /** IBAN van de rekening */\n iban: string | null;\n /** Indicatie dat het een gezamenlijke rekening betreft */\n gezamenlijkeRekening: boolean;\n}\n\n/** RenteAfspraakType Geen = 0, Rentevast = 1, Rentedempend = 2, ContinuVariabel = 3, Correctie = 4, PlafondClick = 5, Samengesteld = 6, Orientatie = 9 */\nexport enum RenteAfspraakType {\n Geen = \"Geen\",\n Rentevast = \"Rentevast\",\n Rentedempend = \"Rentedempend\",\n ContinuVariabel = \"ContinuVariabel\",\n Correctie = \"Correctie\",\n PlafondClick = \"PlafondClick\",\n Samengesteld = \"Samengesteld\",\n Orientatie = \"Orientatie\",\n}\n\n/** Rentelasten bruto/netto, per maand/totaal van het overbruggingskrediet */\nexport interface RentelastenOverbrugging {\n /** Maandelijkse rentelast bruto. */\n rentelastMaandelijksBrutoBedrag: number | null;\n /** Maandelijkse rentelast netto. */\n rentelastMaandelijksNettoBedrag: number | null;\n /** Totale rentelast bruto. */\n rentelastTotaalBrutoBedrag: number | null;\n /** Totale rentelast netto. */\n rentelastTotaalNettoBedrag: number | null;\n}\n\nexport interface RentepercentageInput {\n maatschappijCode: string | null;\n hypotheeklabelCode: number;\n hypotheekvormCode: number;\n rentevariant: RentevariantOptions;\n aflossingsVorm: AflossingsVormType;\n rentevastAantalMaanden: number | null;\n rentebedenktijdInMaanden: number | null;\n personeelskortingPercentage: number | null;\n hypotheekopties: Hypotheekoptie[] | null;\n}\n\nexport interface RentepercentageOutput {\n resultaat: RentepercentageResultaat | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\nexport interface RentepercentageResultaat {\n rentePercentage: number | null;\n}\n\n/** RentevariantOptions Rentevast = 1, Rentedempend = 2, Variabel = 3 */\nexport enum RentevariantOptions {\n Rentevast = \"Rentevast\",\n Rentedempend = \"Rentedempend\",\n Variabel = \"Variabel\",\n}\n\n/** Risicodekkingen Geen = 0, Ovl = 1, Ww = 2, Ea = 4, Anw = 8, Wga = 16, Wia = 32, WiaExcedent = 64, Zdg = 128, Schade = 256 */\nexport enum Risicodekkingen {\n Geen = \"Geen\",\n Ovl = \"Ovl\",\n Ww = \"Ww\",\n Ea = \"Ea\",\n Anw = \"Anw\",\n Wga = \"Wga\",\n Wia = \"Wia\",\n WiaExcedent = \"WiaExcedent\",\n Zdg = \"Zdg\",\n Schade = \"Schade\",\n}\n\n/** Invoer voor de bepaling van het risicoprofiel. */\nexport interface RisicoprofielInput {\n klantprofiel: Klantprofiel;\n}\n\n/** RisicoprofielOptions ZeerDefensief = 1, Defensief = 2, Neutraal = 3, Offensief = 4, ZeerOffensief = 5 */\nexport enum RisicoprofielOptions {\n ZeerDefensief = \"ZeerDefensief\",\n Defensief = \"Defensief\",\n Neutraal = \"Neutraal\",\n Offensief = \"Offensief\",\n ZeerOffensief = \"ZeerOffensief\",\n}\n\n/** Bevat de output van de bepaling van het risicoprofiel. */\nexport interface RisicoprofielOutput {\n resultaat: RisicoprofielResultaat | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat het resultaat van de bepaling van het risicoprofiel. */\nexport interface RisicoprofielResultaat {\n risicoprofiel: RisicoprofielOptions;\n}\n\n/** RvcAfwijkingsoort Geen = 0, Vanaf = 1, Tot = 2 */\nexport enum RvcAfwijkingsoort {\n Geen = \"Geen\",\n Vanaf = \"Vanaf\",\n Tot = \"Tot\",\n}\n\n/** Schooltype Geen = 0, GeenSchool = 1, Basisschool = 2, Mbo = 3, Hbo = 4, Wo = 5, NietErkendeOpleiding = 6, OnderbouwHavoVwo = 7, BovenbouwHavoVwo = 8, OnderbouwVmbo = 9, BovenbouwVmbo = 10 */\nexport enum Schooltype {\n Geen = \"Geen\",\n GeenSchool = \"GeenSchool\",\n Basisschool = \"Basisschool\",\n Mbo = \"Mbo\",\n Hbo = \"Hbo\",\n Wo = \"Wo\",\n NietErkendeOpleiding = \"NietErkendeOpleiding\",\n OnderbouwHavoVwo = \"OnderbouwHavoVwo\",\n BovenbouwHavoVwo = \"BovenbouwHavoVwo\",\n OnderbouwVmbo = \"OnderbouwVmbo\",\n BovenbouwVmbo = \"BovenbouwVmbo\",\n}\n\nexport interface ServiceproviderReadOnly {\n serviceproviderId: string;\n naam: string | null;\n hdnNummer: string | null;\n}\n\n/** Situatiekeuze Geen = 0, Situatie1 = 1, Situatie2 = 2, Situatie3 = 4, HuidigeSituatie = 256 */\nexport enum Situatiekeuze {\n Geen = \"Geen\",\n Situatie1 = \"Situatie1\",\n Situatie2 = \"Situatie2\",\n Situatie3 = \"Situatie3\",\n HuidigeSituatie = \"HuidigeSituatie\",\n}\n\nexport interface SoftwareKoppelingReadOnly {\n softwareKoppelingId: string;\n naam: string | null;\n}\n\n/** SoortAflosproductOptions Leningdeel = 0, Krediet = 1 */\nexport enum SoortAflosproductOptions {\n Leningdeel = \"Leningdeel\",\n Krediet = \"Krediet\",\n}\n\n/** SoortBerekeningOptions Inleg = 1, EersteInleg = 2, Onttrekking = 3, Voorbeeldkapitaal = 4, Voorbeeldrendement = 5, EigenInvoer = 6 */\nexport enum SoortBerekeningOptions {\n Inleg = \"Inleg\",\n EersteInleg = \"EersteInleg\",\n Onttrekking = \"Onttrekking\",\n Voorbeeldkapitaal = \"Voorbeeldkapitaal\",\n Voorbeeldrendement = \"Voorbeeldrendement\",\n EigenInvoer = \"EigenInvoer\",\n}\n\n/** SoortBerekeningOptionsKv Premie = 1, Voorbeeldkapitaal = 2, Voorbeeldrendement = 3, EigenInvoer = 4 */\nexport enum SoortBerekeningOptionsKv {\n Premie = \"Premie\",\n Voorbeeldkapitaal = \"Voorbeeldkapitaal\",\n Voorbeeldrendement = \"Voorbeeldrendement\",\n EigenInvoer = \"EigenInvoer\",\n}\n\n/** SoortCorrectieFiscaalOptions Aftrekpost = 0, Bijtelling = 1, Neutraal = 2 */\nexport enum SoortCorrectieFiscaalOptions {\n Aftrekpost = \"Aftrekpost\",\n Bijtelling = \"Bijtelling\",\n Neutraal = \"Neutraal\",\n}\n\n/** SoortCorrectieLastOptions Last = 0, Bijdrage = 1, Neutraal = 2 */\nexport enum SoortCorrectieLastOptions {\n Last = \"Last\",\n Bijdrage = \"Bijdrage\",\n Neutraal = \"Neutraal\",\n}\n\n/** SoortDepotOptions OpbouwDepot = 1, OpnameDepot = 2, VrijDepot = 3 */\nexport enum SoortDepotOptions {\n OpbouwDepot = \"OpbouwDepot\",\n OpnameDepot = \"OpnameDepot\",\n VrijDepot = \"VrijDepot\",\n}\n\n/** SoortDienstBetrekkingType Geen = 0, FlexibeleArbeidsrelatieMetPerspectiefverklaring = 8, FlexibeleArbeidsrelatieZonderPerspectiefverklaring = 9, LoondienstVast = 10, LoondienstTijdelijkMetIntentie = 11, LoondienstTijdelijkZonderIntentie = 12 */\nexport enum SoortDienstBetrekkingType {\n Geen = \"Geen\",\n FlexibeleArbeidsrelatieMetPerspectiefverklaring = \"FlexibeleArbeidsrelatieMetPerspectiefverklaring\",\n FlexibeleArbeidsrelatieZonderPerspectiefverklaring = \"FlexibeleArbeidsrelatieZonderPerspectiefverklaring\",\n LoondienstVast = \"LoondienstVast\",\n LoondienstTijdelijkMetIntentie = \"LoondienstTijdelijkMetIntentie\",\n LoondienstTijdelijkZonderIntentie = \"LoondienstTijdelijkZonderIntentie\",\n}\n\n/** SoortKapitaalverzekeringProductOptions Levensverzekering = 1, UniversalLifePremie = 2, Product = 99 */\nexport enum SoortKapitaalverzekeringProductOptions {\n Levensverzekering = \"Levensverzekering\",\n UniversalLifePremie = \"UniversalLifePremie\",\n Product = \"Product\",\n}\n\n/** SoortKapitaalverzekeringsrekeningOptions Spaar = 1, Belegging = 2, Hybride = 3 */\nexport enum SoortKapitaalverzekeringsrekeningOptions {\n Spaar = \"Spaar\",\n Belegging = \"Belegging\",\n Hybride = \"Hybride\",\n}\n\n/** SoortKredietProductOptions AflopendKrediet = 1, DoorlopendKrediet = 2, Studielening = 3, Restschuldlening = 4, Werkgeverslening = 5, Privatelease = 6 */\nexport enum SoortKredietProductOptions {\n AflopendKrediet = \"AflopendKrediet\",\n DoorlopendKrediet = \"DoorlopendKrediet\",\n Studielening = \"Studielening\",\n Restschuldlening = \"Restschuldlening\",\n Werkgeverslening = \"Werkgeverslening\",\n Privatelease = \"Privatelease\",\n}\n\n/** SoortLijfrenteProductOptions BancaireLijfrente = 0, LijfrenteVerzekering = 1 */\nexport enum SoortLijfrenteProductOptions {\n BancaireLijfrente = \"BancaireLijfrente\",\n LijfrenteVerzekering = \"LijfrenteVerzekering\",\n}\n\n/** SoortLijfrenteUitkeringOptions Levenslang = 0, Tijdelijk = 1 */\nexport enum SoortLijfrenteUitkeringOptions {\n Levenslang = \"Levenslang\",\n Tijdelijk = \"Tijdelijk\",\n}\n\n/** SoortOndernemingType Geen = 0, ZelfstandigeZonderPersoneel_ZZP_ = 1, ZelfstandigeMetPersoneel = 3 */\nexport enum SoortOndernemingType {\n Geen = \"Geen\",\n ZelfstandigeZonderPersoneel_ZZP_ = \"ZelfstandigeZonderPersoneel_ZZP_\",\n ZelfstandigeMetPersoneel = \"ZelfstandigeMetPersoneel\",\n}\n\n/** SoortOrvProductOptions Orv = 0, AnwHiaatVerzekering = 1 */\nexport enum SoortOrvProductOptions {\n Orv = \"Orv\",\n AnwHiaatVerzekering = \"AnwHiaatVerzekering\",\n}\n\n/** SoortOversluitingOptions InterneOversluiting = 1, OversluitingAndereGeldgever = 2 */\nexport enum SoortOversluitingOptions {\n InterneOversluiting = \"InterneOversluiting\",\n OversluitingAndereGeldgever = \"OversluitingAndereGeldgever\",\n}\n\n/** SoortProductOptions Onbekend = 0, Hypotheek = 1, Kapitaalverzekering = 2, Overlijdensrisicoverzekering = 3, Woonlastenverzekering = 4, Vermogensrekening = 5, Krediet = 6, Lijfrente = 8, Overig = 9 */\nexport enum SoortProductOptions {\n Onbekend = \"Onbekend\",\n Hypotheek = \"Hypotheek\",\n Kapitaalverzekering = \"Kapitaalverzekering\",\n Overlijdensrisicoverzekering = \"Overlijdensrisicoverzekering\",\n Woonlastenverzekering = \"Woonlastenverzekering\",\n Vermogensrekening = \"Vermogensrekening\",\n Krediet = \"Krediet\",\n Lijfrente = \"Lijfrente\",\n Overig = \"Overig\",\n}\n\n/** SoortVermogenProductOptions Beleggingsdepot = 1, Spaarrekening = 2, Effectenlease = 3, Betaalrekening = 4, Product = 99 */\nexport enum SoortVermogenProductOptions {\n Beleggingsdepot = \"Beleggingsdepot\",\n Spaarrekening = \"Spaarrekening\",\n Effectenlease = \"Effectenlease\",\n Betaalrekening = \"Betaalrekening\",\n Product = \"Product\",\n}\n\n/** SoortVermogensrekeningOptions Spaar = 1, Belegging = 2, Hybride = 3 */\nexport enum SoortVermogensrekeningOptions {\n Spaar = \"Spaar\",\n Belegging = \"Belegging\",\n Hybride = \"Hybride\",\n}\n\n/** De uitvoer van de (bank)spaarpremie-berekening. */\nexport interface SpaarHypotheekOutput {\n resultaat: SpaarHypotheekResultaat | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat het resultaat van de (bank)spaarpremie-berekening. */\nexport interface SpaarHypotheekResultaat {\n /** Berekend Premiebedrag */\n premie: number;\n /** Berekende aanvangsstorting */\n aanvangsstorting: number;\n /** Berekend Premiebedrag hoog */\n premieHoog: number;\n}\n\n/** Specificatie van de netto verkoopopbrengst van een object */\nexport interface SpecificatieNettoVerkoopopbrengst {\n /** De identificatie van het pand waar het om gaat */\n pandId: string;\n adres: AdresReadOnly | null;\n /** De (geschatte) verkoopprijs van het object */\n readonly verkoopprijsBedrag: number | null;\n /** De (geschatte) verkoopkosten van het object */\n readonly verkoopkostenBedrag: number | null;\n /** Eigendomsverhouding aanvrager 1 */\n readonly eigendom1Percentage: number | null;\n /** Eigendomsverhouding aanvrager 2 */\n readonly eigendom2Percentage: number | null;\n}\n\nexport interface SysteemNotificatie {\n isPinned: boolean;\n webUrl: string | null;\n readonly uniqueIdentification: string | null;\n adviseurId: string;\n vestigingId: string;\n content: string | null;\n aanmaakdatum: string | null;\n isGelezen: boolean;\n redirectPagina: string | null;\n}\n\nexport interface TarievenNorm {\n jaar: number;\n maand: number;\n}\n\n/** Bevat de inhoud van het Adviesbox-form Aanvraag/Taxatie. */\nexport interface Taxatie {\n taxatiebureau: Taxatiebureau | null;\n opdrachtgever: TaxatiePersoon | null;\n partner: TaxatiePersoon | null;\n taxatieObject: TaxatieObject | null;\n bouwkundigeKeuring: TaxatieBouwkundigeKeuring | null;\n taxatieAlgemeen: TaxatieAlgemeen | null;\n contactpersoon: TaxatieContactpersoon | null;\n aanvullendeInformatie: TaxatieAanvullendeInformatie | null;\n aanvrager1: KlantgegevensReadOnly | null;\n aanvrager2: KlantgegevensReadOnly | null;\n taxatieObjectReadOnly: TaxatieObjectReadOnly | null;\n taxatieAlgemeenReadOnly: TaxatieAlgemeenReadOnly | null;\n}\n\n/** Uitvoer voor een Taxatie aanvraag */\nexport interface TaxatieAanvraagOutput {\n nwwiAanvraag: TaxatieNwwiAanvraagOutput | null;\n taxatheekAanvraag: TaxatieTaxatheekAanvraagOutput | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat aanvullende informatie. */\nexport interface TaxatieAanvullendeInformatie {\n /** Opmerkingen */\n opmerkingen: string | null;\n /** Spoed */\n spoed: boolean | null;\n /** Naam eigenaar */\n naamEigenaar: string | null;\n /** Telefoonnummer */\n telefoonnummer: string | null;\n /** Taxateurnummer */\n taxateurnummer: string | null;\n /** Geldverstrekker (ContractId uit de NWWI webservice) */\n geldverstrekker: number | null;\n /** Taxateur */\n taxateur: string | null;\n /** Opdrachtnummer */\n opdrachtnummer: string | null;\n /** Extern referentienummer */\n externReferentienummer: string | null;\n /** Tussenpersoon naam ten behoeve van een taxatie aanvraag */\n tussenpersoonNaam: string | null;\n /** Tussenpersoon nummer ten behoeve van een taxatie aanvraag */\n tussenpersoonNummer: string | null;\n /** Betaling via notaris */\n betalingViaNotaris: boolean | null;\n}\n\n/** Bevat gegevens voor de kaart taxatie. */\nexport interface TaxatieAlgemeen {\n doelTaxatie: TaxatieDoelOptions | null;\n /** De geldverstrekker */\n geldverstrekker: string | null;\n /** Referentie geldverstrekker */\n referentieGeldverstrekker: string | null;\n /** Indicatie of NHG van toepassing is */\n nhg: boolean | null;\n /** Indicatie of herbouwwaarde van toepassing is */\n herbouwwaarde: boolean | null;\n /** Indicatie NWWI aanvraag */\n nwwiAanvraag: boolean | null;\n /** Indicatie validatie verplicht */\n validatieVerplicht: boolean | null;\n /** Wel/geen Energie prestatie advies */\n energiePrestatieAdvies: boolean | null;\n /** Indicatie wel/geen bouwtechnische keuring */\n bouwtechnischeKeuring: boolean | null;\n /** Datum aanvraag */\n aanvraagdatum: string | null;\n /** Datum gereed */\n gereedDatum: string | null;\n /** Passeerdatum */\n passeerdatum: string | null;\n /** Inidicatie ja/nee voortaxatie gewenst */\n voortaxatieGewenst: boolean | null;\n /** Fax verstuurd */\n faxVerstuurd: boolean | null;\n /** Is recente verkoop */\n recenteVerkoop: boolean | null;\n /** Bemiddelings kosten */\n bemiddelingsKostenBedrag: number | null;\n /** Indicatie beinvloeding waarde */\n beinvloedingWaarde: boolean | null;\n /** Toelichting bij 'beinvloeding waarde' */\n toelichtingBeinvloedingWaarde: string | null;\n /** Indicatie of er een verbouwing plaats vindt */\n verbouwing: boolean | null;\n /** Verbouwingsbedrag uit financieringsopzet */\n readonly verbouwingBedrag: number | null;\n /** Lijst met specificaties van de verbouwing */\n verbouwingSpecificaties: TaxatieVerbouwingSpecificatie[] | null;\n /** Indicatie of de taxatie nodig is voor het verkrijgen van een lening */\n voorVerkrijgenLening: boolean | null;\n /** Betreft Aankoop */\n betreftAankoop: boolean | null;\n}\n\n/** Bevat (readonly) gegevens voor de kaart taxatie. */\nexport interface TaxatieAlgemeenReadOnly {\n /** De geldverstrekker */\n readonly geldverstrekker: string | null;\n /** Verbouwingsbedrag uit financieringsopzet */\n readonly verbouwingBedrag: number | null;\n /** Lijst met specificaties van de verbouwing */\n readonly verbouwingSpecificaties: TaxatieVerbouwingSpecificatie[] | null;\n}\n\n/** TaxatieBenodigdeKeuringOptions PlusKeuringMetNhgKeuring = 0, NhgKeuring = 1 */\nexport enum TaxatieBenodigdeKeuringOptions {\n PlusKeuringMetNhgKeuring = \"PlusKeuringMetNhgKeuring\",\n NhgKeuring = \"NhgKeuring\",\n}\n\n/** Bevat gegeven van 'Bouwkundige keuring'. */\nexport interface TaxatieBouwkundigeKeuring {\n /** Het bouwjaar */\n bouwjaar: number | null;\n inhoudwoning: TaxatieInhoudOptions | null;\n keuringTenBehoevenVan: TaxatieTenBehoevenVanOptions | null;\n /** De omschrijving voor keuze anders */\n keuringTenBehoevenVanAnders: string | null;\n benodigdeKeuring: TaxatieBenodigdeKeuringOptions | null;\n monument: TaxatieJaNeeOnbekendOptions | null;\n gestapeldeBouw: TaxatieGestapeldeBouwOptions | null;\n vve: TaxatieJaNeeOnbekendOptions | null;\n /** Inhoud */\n inhoud: number | null;\n /** Code van het soort woning conform de HDN keuzelijst CodeObjectType */\n soortWoning: number | null;\n /** Code van het gebruiksdoel van het betreffende object volgens de HDN keuzelijst ObjectSoortType */\n objectSoort: number | null;\n}\n\n/** TaxatieContactPersoonOptions Makelaar = 1, Eigenaar = 2, Opdrachtgever = 3, Anders = 4 */\nexport enum TaxatieContactPersoonOptions {\n Makelaar = \"Makelaar\",\n Eigenaar = \"Eigenaar\",\n Opdrachtgever = \"Opdrachtgever\",\n Anders = \"Anders\",\n}\n\n/** Contact persoon binnen de taxatie */\nexport interface TaxatieContactpersoon {\n typeContactpersoon: TaxatieContactPersoonOptions | null;\n /** Contactpersoon naam */\n naam: string | null;\n /** Naam makelaar */\n naamMakelaar: string | null;\n /** Telefoonnummer prive */\n telefoonPrive: string | null;\n /** Telefoonnummer werk */\n telefoonWerk: string | null;\n /** Telefoonnummer mobiel */\n telefoonMobiel: string | null;\n /** Woonplaats */\n woonplaats: string | null;\n /** Postcode */\n postcode: string | null;\n geslacht: GeslachtOpties | null;\n /** E-mailadres */\n email: string | null;\n}\n\n/** TaxatieDoelOptions HypothecaireFinancieringMetNhg = 1, HypothecaireFinancieringZonderNhg = 2, InzichtWaardeTenBehoeveBeslissing = 3, AanvraagHypothecaireGeldlening = 4, AankoopBeslissing = 5, AanvraagOverbruggingsfinanciering = 6, BijzonderBeheer = 7, BoedelSplitsing = 8, BrabantseVerkoopgarantie = 9, Hertaxatie = 10, MinnelijkeWaardering = 11, OntpandingVerzekeringspolis = 12, Uitwinning = 13, VerkoopBeslissing = 14, VerkrijgenFinanciering = 15, VerkrijgenFinancieringMetNhg = 16, VerkrijgenInzichtWaardeAankoopbeslissing = 17, VerkrijgenInzichtWaardeVerkoopbeslissing = 18, VerkrijgenInzichtTenBehoeveVanExecutorialeVerkoop = 20, WoningFinancieringMetValidatie = 21, WoningFinancieringNwwi = 22, BepalenPrijsBijVerkoop = 30, BepalenPrijsBijAankoop = 31, BepalenPrijsBijTerugkoop = 32, GedwongenVerkoop = 33, Anders = 99 */\nexport enum TaxatieDoelOptions {\n HypothecaireFinancieringMetNhg = \"HypothecaireFinancieringMetNhg\",\n HypothecaireFinancieringZonderNhg = \"HypothecaireFinancieringZonderNhg\",\n InzichtWaardeTenBehoeveBeslissing = \"InzichtWaardeTenBehoeveBeslissing\",\n AanvraagHypothecaireGeldlening = \"AanvraagHypothecaireGeldlening\",\n AankoopBeslissing = \"AankoopBeslissing\",\n AanvraagOverbruggingsfinanciering = \"AanvraagOverbruggingsfinanciering\",\n BijzonderBeheer = \"BijzonderBeheer\",\n BoedelSplitsing = \"BoedelSplitsing\",\n BrabantseVerkoopgarantie = \"BrabantseVerkoopgarantie\",\n Hertaxatie = \"Hertaxatie\",\n MinnelijkeWaardering = \"MinnelijkeWaardering\",\n OntpandingVerzekeringspolis = \"OntpandingVerzekeringspolis\",\n Uitwinning = \"Uitwinning\",\n VerkoopBeslissing = \"VerkoopBeslissing\",\n VerkrijgenFinanciering = \"VerkrijgenFinanciering\",\n VerkrijgenFinancieringMetNhg = \"VerkrijgenFinancieringMetNhg\",\n VerkrijgenInzichtWaardeAankoopbeslissing = \"VerkrijgenInzichtWaardeAankoopbeslissing\",\n VerkrijgenInzichtWaardeVerkoopbeslissing = \"VerkrijgenInzichtWaardeVerkoopbeslissing\",\n VerkrijgenInzichtTenBehoeveVanExecutorialeVerkoop = \"VerkrijgenInzichtTenBehoeveVanExecutorialeVerkoop\",\n WoningFinancieringMetValidatie = \"WoningFinancieringMetValidatie\",\n WoningFinancieringNwwi = \"WoningFinancieringNwwi\",\n BepalenPrijsBijVerkoop = \"BepalenPrijsBijVerkoop\",\n BepalenPrijsBijAankoop = \"BepalenPrijsBijAankoop\",\n BepalenPrijsBijTerugkoop = \"BepalenPrijsBijTerugkoop\",\n GedwongenVerkoop = \"GedwongenVerkoop\",\n Anders = \"Anders\",\n}\n\n/** TaxatieGebruikOptions Leegstaand = 7, VolledigBewoondDoorEigenaar = 8, DeelsBewoonDoorEigenaarAndereDeelDoorAnderen = 9, GeheelBewoondDoorAnderen = 10, GeheelVerhuurd = 11, PerKamerVerhuurd = 12, DeelsBewoondDeelsLeeg = 13, DeelsVerhuurdDeelsLeeg = 14, Onbekend = 15 */\nexport enum TaxatieGebruikOptions {\n Leegstaand = \"Leegstaand\",\n VolledigBewoondDoorEigenaar = \"VolledigBewoondDoorEigenaar\",\n DeelsBewoonDoorEigenaarAndereDeelDoorAnderen = \"DeelsBewoonDoorEigenaarAndereDeelDoorAnderen\",\n GeheelBewoondDoorAnderen = \"GeheelBewoondDoorAnderen\",\n GeheelVerhuurd = \"GeheelVerhuurd\",\n PerKamerVerhuurd = \"PerKamerVerhuurd\",\n DeelsBewoondDeelsLeeg = \"DeelsBewoondDeelsLeeg\",\n DeelsVerhuurdDeelsLeeg = \"DeelsVerhuurdDeelsLeeg\",\n Onbekend = \"Onbekend\",\n}\n\n/** TaxatieGestapeldeBouwOptions Anders = 0, Appartement = 4 */\nexport enum TaxatieGestapeldeBouwOptions {\n Anders = \"Anders\",\n Appartement = \"Appartement\",\n}\n\n/** TaxatieInhoudOptions Tot800 = 0, Groter800 = 1, Onbekend = 2 */\nexport enum TaxatieInhoudOptions {\n Tot800 = \"Tot800\",\n Groter800 = \"Groter800\",\n Onbekend = \"Onbekend\",\n}\n\n/** TaxatieJaNeeOnbekendOptions Ja = 0, Nee = 1, Onbekend = 2 */\nexport enum TaxatieJaNeeOnbekendOptions {\n Ja = \"Ja\",\n Nee = \"Nee\",\n Onbekend = \"Onbekend\",\n}\n\n/** Uitvoer voor een NWWI aanvraag */\nexport interface TaxatieNwwiAanvraagOutput {\n /** Gets rapportnummer behorende bij de aanvraag */\n readonly rapportNummer: string | null;\n /** Gets identificatie van de ingedeinde aanvraag */\n readonly aanvraagId: number | null;\n}\n\n/** Gegevens van de contactpersoon */\nexport interface TaxatieNwwiContactpersoon {\n /** Aanhef */\n aanhef: string | null;\n /** Achternaam */\n achternaam: string | null;\n /** Bedrijfsnaam */\n bedrijfsnaam: string | null;\n /** Volledige naam */\n contactpersoon: string | null;\n /** Titel */\n titel: string | null;\n /** Tussenvoegsels */\n tussenvoegsels: string | null;\n /** Voorletters */\n voorletters: string | null;\n}\n\n/** Gegevens van een geldverstrekker */\nexport interface TaxatieNwwiGeldverstrekkerOutput {\n contactpersoon: TaxatieNwwiContactpersoon | null;\n adres: AdresReadOnly | null;\n organisatie: TaxatieNwwiOrganisatie | null;\n bijzonderbeheeraanvragen: number | null;\n contractCode: any | null;\n contractId: number | null;\n contractType: string | null;\n eigenaar: string | null;\n opdrachtgeverAutomatischInvullen: number | null;\n relatieType: string | null;\n}\n\n/** Resultaat van de NWWI-opvraging Geldverstrekkers */\nexport interface TaxatieNwwiGeldverstrekkersOutput {\n /** De gevonden geldverstrekkers */\n readonly geldverstrekkers: TaxatieNwwiGeldverstrekkerOutput[] | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Gegevens van de organisatie */\nexport interface TaxatieNwwiOrganisatie {\n /** E-mailadres */\n readonly emailadres: string | null;\n /** Relatienummer */\n readonly relatienummer: number | null;\n /** Telefoonnummer */\n readonly telefoon: string | null;\n /** KVK-nummer */\n kvknummer: string | null;\n}\n\n/** Resultaat van een gevonden taxatiebureau */\nexport interface TaxatieNwwiTaxatiebureauOutput {\n /** Identificatie van het taxatiebedrijf */\n readonly taxatiebureauId: string | null;\n /** Naam van het taxatiebedrijf */\n readonly bedrijfsnaam: string | null;\n /** Straatnaam taxatiebedrijf */\n readonly straat: string | null;\n /** Huisnummer taxatiebedrijf */\n readonly huisnummer: number | null;\n /** Huisnummertoevoeging taxatiebedrijf */\n readonly toevoeging: string | null;\n /** Postcode taxatiebedrijf */\n readonly postcode: string | null;\n /** Vestigingsplaats taxatiebedrijf */\n readonly plaats: string | null;\n /** Telefoonnummer taxatiebedrijf */\n readonly telefoonnummer: string | null;\n /** Emailadres van het taxatiebedrijf */\n readonly emailadres: string | null;\n /** Branche van het taxatiebdrijf */\n readonly branche: string | null;\n /** Afstand in km tussen taxatiebedrijf en te taxeren object */\n readonly afstand: string | null;\n}\n\n/** Resultaat van de opvraging van taxatiebureaus */\nexport interface TaxatieNwwiTaxatiebureausOutput {\n /** De gevonden taxatiebureaus */\n readonly taxatiebureaus: TaxatieNwwiTaxatiebureauOutput[] | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat gegevens van Object. */\nexport interface TaxatieObject {\n adresPand: Adres;\n /** Aankoopprijs */\n aankoopprijsBedrag: number | null;\n /** Indicatie wel/geen nieuwbouw */\n nieuwbouw: boolean | null;\n /** Indentificatie bouwplan */\n bouwplan: string | null;\n /** Het bouwnummer */\n bouwnummer: string | null;\n gebruikMomenteel: TaxatieGebruikOptions | null;\n gebruikToekomst: TaxatieToekomstigGebruikOptions | null;\n /** Toelichting toekomstig gebruik van het pand bij keuze 'Anders' */\n gebruikToekomstAnders: string | null;\n /** Wel/Geen huurovereenkomst */\n huurovereenkomst: boolean | null;\n opdrachtgever: TaxatieOpdrachtgeverOptions | null;\n}\n\nexport interface TaxatieObjectReadOnly {\n readonly straat: string | null;\n readonly huisnummer: number | null;\n readonly toevoeging: string | null;\n readonly postcode: string | null;\n readonly plaats: string | null;\n readonly nieuwbouw: boolean | null;\n readonly bouwplan: string | null;\n readonly bouwnummer: string | null;\n readonly aankoopprijs: number | null;\n}\n\n/** TaxatieOpdrachtgeverOptions Nvt = 1, DeHuidigeEigenaar = 2, DeHuidigeEigenaarEnVerhuurderEnBewoner = 3, BewonerEnKoperVoorEigenBewoning = 4, KoperVoorEigenBewoning = 5, Anders = 6 */\nexport enum TaxatieOpdrachtgeverOptions {\n Nvt = \"Nvt\",\n DeHuidigeEigenaar = \"DeHuidigeEigenaar\",\n DeHuidigeEigenaarEnVerhuurderEnBewoner = \"DeHuidigeEigenaarEnVerhuurderEnBewoner\",\n BewonerEnKoperVoorEigenBewoning = \"BewonerEnKoperVoorEigenBewoning\",\n KoperVoorEigenBewoning = \"KoperVoorEigenBewoning\",\n Anders = \"Anders\",\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Aanvraag/Taxatie. */\nexport interface TaxatieOutput {\n /** Lijst met de inhoud van het Adviesbox-form Aanvraag/Taxatie per adviesdossier. */\n taxaties: { [key: string]: Taxatie; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Gegevens van een opdrachtgever of partner */\nexport interface TaxatiePersoon {\n /** Achternaam */\n achternaam: string | null;\n /** Voorvoegsel */\n voorvoegsel: string | null;\n /** Voorletters */\n voorletters: string | null;\n /** Roepnaam */\n roepnaam: string | null;\n geslacht: GeslachtOpties;\n /** Geboortedatum */\n geboortedatum: string | null;\n /** Telefoonnummer prive */\n telefoonPrive: string | null;\n /** E-mailadres */\n email: string | null;\n /** Geboorteland (code) */\n geboortelandCode: string | null;\n /** Telefoonnummer werk */\n telefoonWerk: string | null;\n /** Telefoonnummer mobiel */\n telefoonMobiel: string | null;\n /** Geboortevoornamen */\n voornamen: string | null;\n /** Iban rekeningnummer */\n iban: string | null;\n adres: Adres | null;\n}\n\n/** TaxatieSoortAanvraagOptions Oversluiting = 1, AanVerkoopBeslissing = 2, BouwkundigeKeuring = 3, Combinatie = 4, Anders = 5 */\nexport enum TaxatieSoortAanvraagOptions {\n Oversluiting = \"Oversluiting\",\n AanVerkoopBeslissing = \"AanVerkoopBeslissing\",\n BouwkundigeKeuring = \"BouwkundigeKeuring\",\n Combinatie = \"Combinatie\",\n Anders = \"Anders\",\n}\n\n/** Uitvoer voor een Taxatheek aanvraag */\nexport interface TaxatieTaxatheekAanvraagOutput {\n /** Opdrachtnummer behorende bij de aanvraag */\n readonly opdrachtNummer: string | null;\n}\n\n/** TaxatieTenBehoevenVanOptions Aankoop = 0, Verkoop = 1, NhgFinanciering = 2, Anders = 3 */\nexport enum TaxatieTenBehoevenVanOptions {\n Aankoop = \"Aankoop\",\n Verkoop = \"Verkoop\",\n NhgFinanciering = \"NhgFinanciering\",\n Anders = \"Anders\",\n}\n\n/** TaxatieToekomstigGebruikOptions BenEigenaarEnBlijfInWoning = 1, BenEigenaarEnBlijfWoningVerhuren = 2, BenEigenaarEnWilWoningVerhuren = 3, WoontInWoningEnWilWoningKopen = 4, WilWoningKopenVoorWonen = 5, WilWoningKopenVoorVerhuren = 6, Anders = 7 */\nexport enum TaxatieToekomstigGebruikOptions {\n BenEigenaarEnBlijfInWoning = \"BenEigenaarEnBlijfInWoning\",\n BenEigenaarEnBlijfWoningVerhuren = \"BenEigenaarEnBlijfWoningVerhuren\",\n BenEigenaarEnWilWoningVerhuren = \"BenEigenaarEnWilWoningVerhuren\",\n WoontInWoningEnWilWoningKopen = \"WoontInWoningEnWilWoningKopen\",\n WilWoningKopenVoorWonen = \"WilWoningKopenVoorWonen\",\n WilWoningKopenVoorVerhuren = \"WilWoningKopenVoorVerhuren\",\n Anders = \"Anders\",\n}\n\n/** Regel met verbouwing specs. */\nexport interface TaxatieVerbouwingSpecificatie {\n /** De unieke identificatie van de verbouwing */\n verbouwingId: string | null;\n /** Volgnummer van de verbouwing */\n volgnummer: number;\n /** Omschrijving werkzaamheid */\n werkzaamheid: string | null;\n /** Bedrag voor deze werkzaamheid */\n bedrag: number | null;\n /** Of de verbouwing wordt uitgevoerd in eigen beheer */\n eigenBeheer: boolean | null;\n verbouwingType: TaxatieVerbouwingTypeOptions | null;\n}\n\n/** TaxatieVerbouwingTypeOptions Nieuw = 1, Bouwkundig = 2 */\nexport enum TaxatieVerbouwingTypeOptions {\n Nieuw = \"Nieuw\",\n Bouwkundig = \"Bouwkundig\",\n}\n\n/** Bevat gegevens van het Taxatiebureau. */\nexport interface Taxatiebureau {\n /** De code van de maatschappij uit de Producten Web API */\n maatschappijCode: string | null;\n /** De productcode van het taxatieproduct uit de Producten Web API */\n productCode: number | null;\n /** De productnaam van het taxatieproduct uit de Producten Web API */\n readonly taxatieProductNaam: string | null;\n soortAanvraag: TaxatieSoortAanvraagOptions | null;\n /** Indien anders als soort aanvraag dan hier \"te weten\" invullen */\n andersTeWeten: string | null;\n /** Het agentnummer */\n agentnummer: string | null;\n}\n\n/** Gegevens van een te beeindigen leningdeel. */\nexport interface TeBeeindigenLeningdeel {\n /** Unieke identificatie van de boeterente die bij dit te beeindigen leningdeel betrokken is */\n boeterenteId: string;\n /** Unieke identificatie van het leningdeel in de huidige situatie waarop de boeterente betrekking heeft */\n leningdeelId: string;\n /** Omschrijving maatschappij */\n readonly maatschappijOmschrijving: string | null;\n aflossingsvorm: AflossingsVormType | null;\n boeterenteBerekeningswijze: BoeterenteBerekeningswijzeOpties | null;\n /** Bedrag van de oorspronkelijke hoofdsom van het leningdeel */\n readonly oorspronkelijkeHoofdsomBedrag: number | null;\n /** Het bedrag van het leningdeel dat nog resteert */\n readonly restantHoofdsomBedrag: number | null;\n /** Het aantal maanden looptijd dat nog resteert in dit leningdeel */\n readonly restantLooptijdInMaanden: number | null;\n /** Datum einde rentevastperiode */\n readonly rentevastperiodeEinddatum: string | null;\n /** Datum van de boeterente */\n boeterenteDatum: string | null;\n /** Resterende periode weergeven (true) of aanpasbaar maken (false) */\n resterendePeriodeWeergeven: boolean | null;\n /** Het aantal volledige jaren dat resteert */\n resterendePeriodeJaren: number | null;\n /** Het aantal maanden dat resteert in het laatste, niet volledige jaar */\n resterendePeriodeMaanden: number | null;\n /** Percentage boetevrij */\n boetevrijPercentage: number | null;\n /** Huidig rentepercentage */\n huidigRentePercentage: number | null;\n /** Nieuw rentepercentage. */\n nieuwRentePercentage: number | null;\n /** Boeterentebedrag */\n boeterentebedrag: number | null;\n /** Totaal opgebouwde waarde */\n opgebouwdeWaarde: number | null;\n}\n\n/** Bevat gegevens van de toetsinkomenVerklaring van de aanvrager (klant). */\nexport interface ToetsinkomenVerklaring {\n /** Inkomensverklaring van aanvrager */\n inkomensverklaring: string | null;\n /** Toetsinkomen van aanvrager */\n toetsInkomen: number | null;\n}\n\n/** ToetsrenteBerekeningOptions SpecificatieToetsrente = 0, GewensteRentevastperiode = 1 */\nexport enum ToetsrenteBerekeningOptions {\n SpecificatieToetsrente = \"SpecificatieToetsrente\",\n GewensteRentevastperiode = \"GewensteRentevastperiode\",\n}\n\nexport interface TweedeWoningNietMogelijkOutput {\n success: boolean | null;\n}\n\n/** Een uitbetaling gedurende de bouw */\nexport interface Uitbetaling {\n /** Maand van de uitbetaling */\n maand: number;\n /** Percentage van het bouwdepot-bedrag in de gegeven maand */\n percentage: number | null;\n}\n\nexport interface UitkerendeFase {\n belastingBox: BelastingBoxOptions | null;\n soortLijfrenteUitkering: SoortLijfrenteUitkeringOptions | null;\n duurUitkeringInMaanden: number | null;\n duurUitkeringHoogInMaanden: number | null;\n hooglaagVerhouding: number | null;\n lijfrenteTariefPercentage: number | null;\n overgangOp2eVerzekerde: boolean | null;\n overgangOp2eVerzekerdePercentage: number | null;\n lijfrenteUitkeringBedrag: number | null;\n termijn: BetalingsTermijnType | null;\n}\n\n/** UitkeringAoSoort Geen = 0, Volledig = 1, ProRata = 2 */\nexport enum UitkeringAoSoort {\n Geen = \"Geen\",\n Volledig = \"Volledig\",\n ProRata = \"ProRata\",\n}\n\n/** UitkeringBijOverlijdenSoort Geen = 0, MaandNaOverlijden = 1, JongsteKind18 = 2 */\nexport enum UitkeringBijOverlijdenSoort {\n Geen = \"Geen\",\n MaandNaOverlijden = \"MaandNaOverlijden\",\n JongsteKind18 = \"JongsteKind18\",\n}\n\n/** UitslagOptions Wit = 0, Groen = 1, Oranje = 2, Rood = 3 */\nexport enum UitslagOptions {\n Wit = \"Wit\",\n Groen = \"Groen\",\n Oranje = \"Oranje\",\n Rood = \"Rood\",\n}\n\n/** Gegevens van een uitsluiting */\nexport interface Uitsluiting {\n /** Unieke identificatie van een uitsluiting */\n uitsluitingId: string | null;\n /** Volgnummer van de uitsluiting binnen de uitsluitingen van een klant */\n volgnummer: number;\n /** Code veld. Maatschappij */\n maatschappijCode: string | null;\n /** Omschrijving maatschappij */\n maatschappijOmschrijving: string | null;\n /** Datum uitsluiting */\n uitsluitingsdatum: string | null;\n /** Omschrijving reden */\n reden: string | null;\n}\n\nexport interface ValidationResultModel {\n code: string | null;\n target: string | null;\n message: string | null;\n}\n\nexport interface ValidationResultsModel {\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** VerblijfsVergunningType Geen = 0, Onbekend = 1, OnbepaaldeTijd = 2, BepaaldeTijd = 3, BepaaldeTijdAsiel_DocumentIII_ = 4, OnbepaaldeTijdAsiel_DocumentIV_ = 5, BepaaldeTijdNietTijdelijkVerblijfsdoel = 6 */\nexport enum VerblijfsVergunningType {\n Geen = \"Geen\",\n Onbekend = \"Onbekend\",\n OnbepaaldeTijd = \"OnbepaaldeTijd\",\n BepaaldeTijd = \"BepaaldeTijd\",\n BepaaldeTijdAsiel_DocumentIII_ = \"BepaaldeTijdAsiel_DocumentIII_\",\n OnbepaaldeTijdAsiel_DocumentIV_ = \"OnbepaaldeTijdAsiel_DocumentIV_\",\n BepaaldeTijdNietTijdelijkVerblijfsdoel = \"BepaaldeTijdNietTijdelijkVerblijfsdoel\",\n}\n\n/** Bevat de gegevens van de vergoedingen t.b.v het Vergoedingenoverzicht. */\nexport interface Vergoedingen {\n /** Ingangsdatum (of: 'Passeerdatum' wanneer er een hypotheek geadviseerd wordt) */\n ingangsdatum: string;\n hypotheekNorm: TarievenNorm | null;\n /** Vaste kosten die de adviseur in rekening brengt voor het uitbrengen van het advies */\n advieskostenBedrag: number | null;\n /** Indicatie dat de advieskosten van de bijbehorende instelling moet worden overgenomen */\n advieskostenOvernemen: boolean | null;\n /** Aantal uur advieswerk dat voor het uitbrengen van het advies in rekening moet worden gebracht */\n advieskostenAantalUur: number | null;\n /** Vaste kosten die de adviseur in rekening brengt voor het bemiddelen van de geldlening */\n bemiddelingsvergoedingGeldleningBedrag: number | null;\n /** Indicatie dat de bemiddelingsvergoeding voor de geldlening van de bijbehorende instelling moet worden overgenomen */\n bemiddelingsvergoedingGeldleningOvernemen: boolean | null;\n /** Aantal uur dat in rekening moet worden gebracht voor bemiddelingsvergoeding voor de geldlening */\n bemiddelingsvergoedingGeldleningAantalUur: number | null;\n /** Overige vaste bemiddelingsvergoeding die de adviseur in rekening brengt voor het adviseren */\n overigeBemiddelingsvergoedingBedrag: number | null;\n /** Indicatie dat de overige bemiddelingsvergoeding van de bijbehorende instelling moet worden overgenomen */\n overigeBemiddelingsvergoedingOvernemen: boolean | null;\n /** Aantal uur advieswerk dat voor het overig advieswerk in rekening moet worden gebracht */\n overigeBemiddelingsvergoedingAantalUur: number | null;\n /** Vaste kosten die de adviseur in rekening brengt voor het beheer van het dossier t.b.v. de geldlening */\n dossiervergoedingBedrag: number | null;\n /** Indicatie dat de dossiervergoeding van de bijbehorende instelling moet worden overgenomen */\n dossiervergoedingOvernemen: boolean | null;\n}\n\n/** Bevat de inhoud van het Adviesbox-form Vergoedingenoverzicht. */\nexport interface Vergoedingenoverzicht {\n vergoedingen: Vergoedingen | null;\n /** Bevat de gegevens van de huidige producten */\n huidigeProducten: VergoedingenoverzichtProduct[] | null;\n /** Bevat de kenmerken van de huidige producten t.b.v. pop-up 'Huidige producten' van het Vergoedingenoverzicht */\n readonly huidigeProductenKenmerken: VergoedingenoverzichtProductKenmerken[] | null;\n financiering: FinancieringOptions | null;\n}\n\n/** Bevat de gegevens van een huidig product t.b.v het Vergoedingenoverzicht. */\nexport interface VergoedingenoverzichtProduct {\n /** Unieke identificatie van het product */\n productId: string;\n /** Productnaam */\n readonly productnaam: string | null;\n /** Naam van de maatschappij */\n readonly maatschappijNaam: string | null;\n /** Omschrijving */\n readonly omschrijving: string | null;\n productsoort: SoortProductOptions;\n /** Indicatie dat het product doorloopt in de nieuwe situatie */\n meenemen: boolean;\n /** Indicatie dat het product premievrij doorloopt in de nieuwe situatie */\n premievrijMaken: boolean | null;\n /** Indicatie dat 'PremievrijMaken' mogelijk is voor het product */\n premievrijMakenMogelijk: boolean;\n /** Indicatie dat de waarde van de dekking in de financiering ingebracht moet worden */\n inFinanciering: boolean | null;\n /** Indicatie dat het saldo van het krediet in de financiering ingebracht moet worden */\n uitFinanciering: boolean | null;\n /** Indien het product vanaf de (aanvangdatum + looptijd) voorbij de huidige datum is. */\n eindeLooptijdDatum: string | null;\n}\n\n/** Bevat de kenmerken van een huidig product t.b.v. pop-up 'Huidige producten' van het Vergoedingenoverzicht. */\nexport interface VergoedingenoverzichtProductKenmerken {\n /** Productnaam */\n productnaam: string | null;\n /** Indicatie dat het product door de adviseur zelf is bemiddeld */\n uwBemiddeling: boolean | null;\n /** Ingangsdatum van het product */\n ingangsdatum: string | null;\n /** Looptijd van het product in maanden */\n looptijdInMaanden: number | null;\n /** Hoofdsom van het product */\n hoofdsomBedrag: number | null;\n /** Opbouw van het product */\n opbouwBedrag: number | null;\n /** Dekking 1 */\n dekking1Bedrag: number | null;\n /** Dekking 2 */\n dekking2Bedrag: number | null;\n /** Premie */\n premieBedrag: number | null;\n betalingstermijn: BetalingsTermijnType | null;\n /** Rentebedrag (per maand) */\n renteBedrag: number | null;\n /** Rentepercentage */\n rentePercentage: number | null;\n /** Aantal maanden rentevastperiode */\n rentevastAantalMaanden: number | null;\n /** Aantal maanden rentebedenktijd */\n rentebedenktijdInMaanden: number | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Vergoedingenoverzicht. */\nexport interface VergoedingenoverzichtenOutput {\n /** Lijst met de inhoud van het scherm Vergoedingenoverzicht per voorstel (analyse). */\n vergoedingenoverzichten: { [key: string]: Vergoedingenoverzicht; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Verkoopstatus Geen = 0, BlijftInBezit = 1, IsVerkocht = 2, WordtVerkocht = 3 */\nexport enum Verkoopstatus {\n Geen = \"Geen\",\n BlijftInBezit = \"BlijftInBezit\",\n IsVerkocht = \"IsVerkocht\",\n WordtVerkocht = \"WordtVerkocht\",\n}\n\n/** Bevat de gegevens van Adviesbox Form Vermogen. */\nexport interface Vermogen {\n /** De producten op het scherm */\n producten: VermogenProduct[];\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n /** Mogelijke keuzes indien er sprake is van fiscale voorzetting */\n fiscaleVoortzettingKeuzes: FiscaleVoortzettingKeuze[] | null;\n /** De af te lossen leningdelen van het voorstel. */\n readonly leningdelen: VermogenLeningdeelReadOnly[] | null;\n /** De af te lossen kredieten van het voorstel. */\n readonly kredieten: KredietReadOnly[] | null;\n /** De naam van de geldverstrekker die in het Form Hypotheek geselecteerd is. */\n readonly geldverstrekkerNaam: string | null;\n /** Ingangsdatum van het voorstel (of: 'Passeerdatum' wanneer er een hypotheek geadviseerd wordt) */\n readonly ingangsdatumVoorstel: string | null;\n}\n\n/** Invoer voor een opnameberekening van de generieke vermogensrekening. */\nexport interface VermogenBerekeningInput {\n vermogenProduct: VermogenProduct;\n}\n\n/** Het resultaat van de vermogen-berekening */\nexport interface VermogenBerekeningOutput {\n resultaat: VermogenBerekeningResultaat | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de berekende resultaten */\nexport interface VermogenBerekeningResultaat {\n /** De berekende inleg van de vermogensrekening. */\n inleg: number | null;\n /** Het deel van de inleg dat nodig is om het garantiekapitaal op te bouwen. */\n inlegGarantiedeel: number | null;\n /** Waardeopbouw per jaar */\n readonly waardeopbouwJaren: WaardeopbouwInJaar[] | null;\n /** De berekende waardeopbouw per maand */\n readonly waardeopbouwMaanden: WaardeopbouwInMaand[] | null;\n}\n\n/** Gegevens van 'Depot'. */\nexport interface VermogenDepot {\n soortDepot: SoortDepotOptions;\n /** Bestedingsdoel */\n bestedingsdoel: string | null;\n /** Aankoopkosten */\n aankoopkostenPercentage: number | null;\n /** Verkoopkosten */\n verkoopkostenPercentage: number | null;\n /** Beheerkosten */\n beheerkostenPercentage: number | null;\n}\n\n/** De gegevens van 'Extra inleg' voor een bepaald jaar. */\nexport interface VermogenExtraInlegInJaar {\n jaar: number;\n bedrag: number;\n}\n\n/** De gegevens van 'Extra opname' voor een bepaald jaar. */\nexport interface VermogenExtraOpnameInJaar {\n /** Jaar van de extra opname */\n jaar: number;\n /** Opname */\n opnameBedrag: number;\n}\n\n/** Bevat gegevens van de fiscale regeling. */\nexport interface VermogenFiscaleRegeling {\n /** Polisnummer */\n polisnummer: string | null;\n /** Geeft aan of er sprake is van een lijfrenteclausule */\n lijfrenteclausule: boolean | null;\n kapitaalopbouw: KapitaalopbouwOptions | null;\n productId: string | null;\n fiscaleVoortzetting: FiscaleVoortzettingOptions | null;\n originelePolisnummer: string | null;\n externeMaatschappijCode: string | null;\n externeMaatschappijOmschrijving: string | null;\n lijfrenteclausuleOrigineel: boolean | null;\n fiscaleTypering: FiscaleTyperingOptions | null;\n garantieverzekering: boolean | null;\n fiscaalRegime: FiscaalRegimeOptions | null;\n oorspronkelijkeIngangsdatum: string | null;\n ingangsdatumBox1: string | null;\n einddatum: string | null;\n doelkapitaalBedrag: number | null;\n laagstePremieooitBedrag: number | null;\n hoogstePremieOoitBedrag: number | null;\n huidigeJaarPremieBedrag: number | null;\n premieLopendJaarBedrag: number | null;\n eerdereUitkeringenBedrag: number | null;\n ingebrachteWaardeBedrag: number | null;\n}\n\n/** Gegevens van 'Inleggegevens'. */\nexport interface VermogenInleggegevens {\n /** Het aantal maanden dat inleg betaald moet worden */\n duurInMaanden: number | null;\n /** Het aantal maanden dat inleg betaald moet worden in de hooglaag-constructie */\n duurHooglaagInMaanden: number | null;\n stortingstermijn: BetalingsTermijnType | null;\n /** PremieAftrekBaarBedrag */\n premieAftrekbaarBedrag: number | null;\n /** Bedrag voor de (lage) inleg */\n inlegBedrag: number | null;\n /** Bedrag voor de hoge inleg */\n hogeInlegBedrag: number | null;\n /** Bedrag voor de eerste inleg */\n eersteInlegBedrag: number | null;\n /** Extra inleg per jaar */\n extraInlegJaren: VermogenExtraInlegInJaar[] | null;\n}\n\n/** Gegevens van 'Kapitaalopbouw'. */\nexport interface VermogenKapitaalopbouw {\n soortRekening: SoortVermogensrekeningOptions | null;\n soortBerekening: SoortBerekeningOptions | null;\n beleggersprofiel: BeleggersprofielOptions | null;\n /** Doelkapitaal */\n doelkapitaalBedrag: number | null;\n /** Rendement doelkapitaal */\n doelrendementPercentage: number | null;\n /** Voorbeeldkapitaal */\n voorbeeldkapitaalBedrag: number | null;\n /** Rendement voorbeeldkapitaal */\n voorbeeldrendementPercentage: number | null;\n /** Garantiekapitaal / waarvan gegarandeerd */\n garantiekapitaalBedrag: number | null;\n /** Rendement garantiekapitaal / waarvan gegarandeerd */\n garantierendementPercentage: number | null;\n}\n\n/** De af te lossen leningdelen van het voorstel. */\nexport interface VermogenLeningdeelReadOnly {\n /** Doelkapitaal bedrag */\n readonly doelkapitaalBedrag: number | null;\n /** Percentage doelkapitaal */\n readonly doelkapitaalPercentage: number | null;\n leningdeelId: string;\n doorlopend: boolean;\n readonly productnaam: string | null;\n readonly maatschappijCode: string | null;\n productcode: number;\n aanvangsdatum: string;\n looptijdInMaanden: number;\n volgnummer: number;\n leningdeelBedrag: number | null;\n}\n\n/** Gegevens van 'Onttrekking(en)'. */\nexport interface VermogenOnttrekkingen {\n /** Begindatum */\n begindatum: string | null;\n /** Het aantal maanden dat onttrekking gedaan moet worden */\n duurInMaanden: number | null;\n onttrekkingstermijn: BetalingsTermijnType | null;\n /** Bedrag voor de periodieke onttrekking */\n onttrekkingBedrag: number | null;\n /** Extra opname per jaar */\n extraOpnameJaren: VermogenExtraOpnameInJaar[] | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Vermogen (zowel huidige situatie als voorstel). */\nexport interface VermogenOutput {\n /** Lijst met Vermogensproducten per adviesdossier (huidige situatie) of voorstel. */\n vermogens: { [key: string]: Vermogen; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Gegevens van een Vermogen-polis. */\nexport interface VermogenPolis {\n productnummer: string | null;\n maatschappijCode: string | null;\n maatschappijOmschrijving: string | null;\n maatschappijCodeHdn: string | null;\n productnaam: string | null;\n productcode: number;\n ingangsdatum: string;\n looptijdInMaanden: number | null;\n uwBemiddeling: boolean;\n}\n\n/** Bevat de gegevens van het Vermogen-product. */\nexport interface VermogenProduct {\n soortProduct: SoortVermogenProductOptions;\n /** Geeft aan of het om een doorlopend product gaat */\n readonly doorlopend: boolean | null;\n polis: VermogenPolis;\n /** Unieke identificaties van de klanten die als contractant geselecteerd zijn */\n contractantKlantIds: string[];\n depot: VermogenDepot | null;\n productwaarde: VermogenProductwaarde | null;\n inleggegevens: VermogenInleggegevens | null;\n kapitaalopbouw: VermogenKapitaalopbouw | null;\n onttrekkingen: VermogenOnttrekkingen | null;\n fiscaleRegeling: VermogenFiscaleRegeling | null;\n verpanding: VermogenVerpanding | null;\n /** Indicatie dat indien het doorlopende product gewijzigd is, deze opnieuw overgenomen moet worden naar de voorstellen */\n wijzigingenInDoorlopendeProductenOvernemen: boolean;\n productId: string | null;\n meenemen: boolean;\n}\n\n/** Gegevens van 'Productwaarde' of 'Depotwaarde'. */\nexport interface VermogenProductwaarde {\n /** Reeds opgebouwd */\n reedsOpgebouwdBedrag: number | null;\n /** Reeds opgebouwd per datum */\n reedsOpgebouwdDatum: string | null;\n /** Afkoopwaarde */\n afkoopwaardeBedrag: number | null;\n /** Afkoopwaarde per datum */\n afkoopwaardeDatum: string | null;\n /** Waardeopbouw (na x jaar) */\n readonly waardeopbouwBedrag: number | null;\n /** Waardeopbouw per jaar */\n readonly waardeopbouwJaren: WaardeopbouwInJaar[] | null;\n /** De berekende waardeopbouw per maand */\n waardeopbouwMaanden: WaardeopbouwInMaand[] | null;\n}\n\n/** De verpanding van een Vermogensproduct. */\nexport interface VermogenVerpanding {\n uitkerendeFase: UitkerendeFase | null;\n verpandAanGeldverstrekker: boolean | null;\n bedoeldVoorAflossing: boolean | null;\n aflosproducten: Aflosproduct[] | null;\n}\n\nexport interface Verpanding {\n verpandAanGeldverstrekker: boolean | null;\n bedoeldVoorAflossing: boolean | null;\n aflosproducten: Aflosproduct[] | null;\n}\n\nexport interface VersionInfo {\n naam: string | null;\n versie: string | null;\n auteur: string | null;\n copyright: string | null;\n opstartDatumTijd: string | null;\n}\n\n/** Verzekerd bedrag van een jaar */\nexport interface VerzekerdBedrag {\n /** Het jaar waarin het verzekerd bedrag van toepassing is */\n readonly jaar: number | null;\n /** Het jaartal waarin het verzekerd bedrag van toepassing is */\n readonly jaartal: number | null;\n /** Het bedrag dat verzekerd is gedurende het jaar */\n readonly bedrag: number | null;\n}\n\n/** Verzekeringsmotief Geen = 0, Hypotheek = 1, GerichteLijfrente = 2, NabestaandenVoorziening = 3, FinancieringOfKredietVerstrekking = 4, SuccessieAfdekking = 5, CompagnonVerzekering = 6, KeymanVerzekering = 7 */\nexport enum Verzekeringsmotief {\n Geen = \"Geen\",\n Hypotheek = \"Hypotheek\",\n GerichteLijfrente = \"GerichteLijfrente\",\n NabestaandenVoorziening = \"NabestaandenVoorziening\",\n FinancieringOfKredietVerstrekking = \"FinancieringOfKredietVerstrekking\",\n SuccessieAfdekking = \"SuccessieAfdekking\",\n CompagnonVerzekering = \"CompagnonVerzekering\",\n KeymanVerzekering = \"KeymanVerzekering\",\n}\n\n/** Model voor het bijwerken van de naam van een voorstel. */\nexport interface VoorstelNaam {\n /** De nieuwe naam van het voorstel */\n naam: string | null;\n}\n\nexport interface WaardeopbouwInJaar {\n jaar: number;\n beginwaardeBedrag: number;\n stortingenBedrag: number;\n onttrekkingenBedrag: number;\n eindwaardeBedrag: number;\n}\n\nexport interface WaardeopbouwInMaand {\n maand: number;\n eindwaardeBedrag: number;\n}\n\n/** Gegevens van een weigering */\nexport interface Weigering {\n /** Unieke identificatie van een weigering */\n weigeringId: string | null;\n /** Volgnummer van de weigering binnen de weigeringen van een klant */\n volgnummer: number;\n /** Code veld. Maatschappij */\n maatschappijCode: string | null;\n /** Omschrijving maatschappij */\n maatschappijOmschrijving: string | null;\n /** Datum weigering */\n weigeringDatum: string | null;\n /** Omschrijving reden weigering */\n reden: string | null;\n}\n\n/** Bevat de input voor het bepalen van de hypotheekvormen bij 'Wijzig geldverstrekker met behoud van leningdelen'. */\nexport interface WijzigGeldverstrekkerInput {\n /** Code van de nieuwe geldverstrekker. */\n geldverstrekkerCode: string | null;\n /** Code van het nieuwe hypotheeklabel binnen de geldverstrekker uit de Producten API */\n hypotheeklabelCode: number;\n /** Lijst met leningdelen */\n leningdelen: WijzigGeldverstrekkerInputLeningdeel[] | null;\n}\n\n/** Gegevens van een leningdeel. */\nexport interface WijzigGeldverstrekkerInputLeningdeel {\n /** Volgnummer van het leningdeel binnen de leningdelen van de hypotheek */\n volgnummer: number;\n aflossingsvorm: AflossingsVormType;\n}\n\n/** De uitvoer van 'Wijzig geldverstrekker met behoud van leningdelen'. */\nexport interface WijzigGeldverstrekkerOutput {\n resultaat: WijzigGeldverstrekkerResultaat | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat de inhoud van een gegenereerd leningdeel. */\nexport interface WijzigGeldverstrekkerOutputLeningdeel {\n /** Volgnummer van het leningdeel binnen de leningdelen van de hypotheek */\n volgnummer: number;\n hypotheekvorm: Hypotheekvorm | null;\n /** Bevat de hypotheekvormen van het gekozen hypotheeklabel die overeenkomen met de hypotheekvorm van het huidige leningdeel */\n readonly matchHypotheekvormen: Hypotheekvorm[] | null;\n /** Bevat de hypotheekvormen van het gekozen hypotheeklabel die bijna overeenkomen met de hypotheekvorm van het huidige leningdeel */\n readonly nearMatchHypotheekvormen: Hypotheekvorm[] | null;\n}\n\n/** Bevat het gegenereerde resultaat van 'Wijzig geldverstrekker met behoud van leningdelen'. */\nexport interface WijzigGeldverstrekkerResultaat {\n /** Lijst met gegenereerde leningdelen */\n readonly leningdelen: WijzigGeldverstrekkerOutputLeningdeel[] | null;\n}\n\n/** Bevat gegevens van het Adviesbox-form Woning. */\nexport interface Woning {\n financiering: FinancieringOptions | null;\n /** Geeft aan van welke huidige woning de hypotheek gewijzigd moet worden. */\n hypotheekOpWoning: string | null;\n /** Huidige woningen in eigendom (voor situaties waar geen sprake is van aankoop) */\n huidigeWoningen: HuidigeWoning[] | null;\n /** Bevat gegevens van te verkopen woningen */\n teVerkopenWoningen: WoningVerkoop[] | null;\n aanTeKopenWoning: WoningAankoop | null;\n}\n\n/** Bevat gegevens van een aan te kopen woning van het Adviesbox-form Woning. */\nexport interface WoningAankoop {\n pand: WoningPand | null;\n /** Indicatie dat het adres gelijk is het woonadres van de (1e) klant */\n gelijkAanWoonadres: boolean | null;\n adres: Adres | null;\n adresVan1eKlant: AdresReadOnly | null;\n}\n\n/** Extra gegevens van een woning in eigendom */\nexport interface WoningInEigendom {\n /** Eigendomsverhouding aanvrager 1 */\n eigendom1Percentage: number | null;\n /** Eigendomsverhouding aanvrager 2 */\n eigendom2Percentage: number | null;\n gebruikPand: GebruikPandSoort;\n /** Bedrag marktwaarde */\n marktwaardeBedrag: number | null;\n /** Bedrag WOZ-waarde */\n wozWaarde: number | null;\n /** Bedrag eigenwoningforfait */\n eigenWoningForfaitBedrag: number | null;\n /** Indicatie dat het eigenwoningforfait berekend is/moet worden */\n eigenWoningForfaitOvernemen: boolean | null;\n huidigPand: HuidigPand | null;\n /** Geeft aan of er een hypotheek op de woning rust */\n heeftHypotheekOpWoning: boolean | null;\n hypotheekOpWoning: HypotheekOpWoning | null;\n erfpachtOpWoning: ErfpachtOpWoning | null;\n}\n\n/** Gegevens van een pand */\nexport interface WoningPand {\n /** Referentie naar pand in de huidige situatie */\n huidigePandId: string | null;\n /** Indicatieveld. Eigen bewoning onderpand */\n eigenBewoning: boolean | null;\n /** Indicatieveld. Is er sprake van erfpacht? */\n erfpacht: boolean | null;\n /** Indicatieveld. Is de erfpacht afgekocht? */\n erfpachtAfgekocht: boolean | null;\n /** Indicatieveld. Is er sprake van eeuwigdurende erfpacht? */\n erfpachtEeuwigdurend: boolean | null;\n /** Datum einde erfpacht */\n erfpachtEinddatum: string | null;\n /** Bedrag jaarlijkse canon */\n erfpachtBedrag: number | null;\n /** Bouwjaar */\n bouwjaar: number | null;\n /** Indicatieveld. Is er sprake van appartementsrecht? */\n appartement: boolean | null;\n /** Servicekosten */\n servicekosten: number | null;\n /** Bedrag WOZ-waarde */\n wozWaarde: number | null;\n /** Bedrag eigenwoningforfait */\n eigenWoningForfaitBedrag: number | null;\n /** Bedrag getaxeerde marktwaarde */\n taxatieBedrag: number | null;\n /** Taxatiedatum */\n taxatiedatum: string | null;\n /** Indicatieveld. Is er sprake van zelfbouw? */\n zelfbouw: boolean | null;\n /** Bouwplan */\n bouwplan: string | null;\n /** Opleveringsdatum */\n opleverdatum: string | null;\n /** Bedrag marktwaarde na verbouw */\n marktwaardeNaVerbouwingBedrag: number | null;\n /** Indicatieveld. Is het pand bedoeld voor verhuur? */\n bedoeldVoorVerhuur: boolean | null;\n /** Indicatieveld. Is er sprake van een gedeeld perceel? */\n gedeeld: boolean | null;\n /** Bouwnummer */\n bouwnummer: string | null;\n /** Staat van onderhoud volgens de HDN keuzelijst OnderhoudsToestandType */\n staatOnderhoud: number | null;\n /** Aantal maanden duur van de bouw */\n duurBouwInMaanden: number | null;\n /** Eigendomsverhouding aanvrager 1 */\n eigendom1Percentage: number | null;\n /** Eigendomsverhouding aanvrager 2 */\n eigendom2Percentage: number | null;\n gebruikPand: GebruikPandSoort | null;\n /** Geeft aan dat op het object een voorwaarde bij verkoop van toepassing is */\n verkoopOnderVoorwaarden: boolean | null;\n /** Geeft aan welke voorwaarde bij verkoop van toepassing is (indien Zkn_In_VerkoopOnderVoorwaarden = True) */\n verkoopOnderVoorwaardenConstructie: number | null;\n /** Omschrijving constructie verkoop onder voorwaarden */\n verkoopOnderVoorwaardenConstructieOmschrijving: string | null;\n /** Wanneer de erfpacht- of kortingsconstructie nog niet is opgenomen in de waardelijst VerkoopOnderVoorwaardenConstructieType, kan hier \n worden aangegeven om wat voor type constructie het gaat, zodat er rekening mee gehouden kan worden in de volledigheidstoets van NHG. */\n soortConstructieAnders: number | null;\n /** Geeft de bouwaard van het object weer volgens de HDN keuzelijst BouwaardType */\n bouwaard: number | null;\n /** Geeft de energie (label) klasse in welke de woning valt volgens de HDN keuzelijst EnergieKlasseType */\n energieklasse: number | null;\n /** Bedrag marktwaarde */\n marktwaardeBedrag: number | null;\n /** Indicatie dat de marktwaarde automatisch bepaald is (True) of door de gebruiker overruled (False) */\n marktwaardeOvernemen: boolean | null;\n /** Afbouwgarantie */\n afbouwgarantie: boolean | null;\n /** Eigen foto uploaden (true) of Google foto gebruiken (false) */\n eigenFoto: boolean | null;\n /** Locatie van de foto van de woning op disk */\n locatieFoto: string | null;\n /** Taxatie aanwezig */\n taxatieAanwezig: boolean | null;\n verkoopstatus: Verkoopstatus | null;\n /** Bedrag verkoopopbrengst */\n verkoopopbrengstBedrag: number | null;\n /** Datum verkocht per */\n verkoopdatum: string | null;\n /** Bedrag verkoopkosten */\n verkoopkostenBedrag: number | null;\n /** Indicatieveld. Moeten de verkoopkosten worden berekend? */\n verkoopkostenOvernemen: boolean | null;\n /** Code veld. Type woning volgens de HDN keuzelijst CodeObjectType. */\n typePand: number | null;\n /** Code van het gebruiksdoel van het betreffende object volgens de HDN keuzelijst ObjectSoortType */\n objectSoort: number | null;\n /** Code van het bijzondere gebruiksdoel van het betreffende object volgens de HDN keuzelijst BijzObjectSoortType */\n bijzonderObjectSoort: number | null;\n /** Indicatie dat er een garage aanwezig is */\n heeftGarage: boolean | null;\n /** Indicatie dat het object wordt gebruikt voor recreatieve bewoning */\n recreatieveBewoning: boolean | null;\n /** Kadastrale sectie */\n kadasterSectie: string | null;\n /** Kadastraal nummer */\n kadasterNummer: string | null;\n /** Kadastrale gemeente */\n kadasterGemeente: string | null;\n /** Oppervlakte in vierkante meters van de grond waar het onderpand op staat */\n kavelGrootteInM2: number | null;\n /** Indicatie veld. Bestaat er een hypotheek op de woning */\n hypotheekOpPand: boolean | null;\n /** Oorspronkelijke hypotheek op het pand */\n oorspronkelijkHypotheekbedrag: number | null;\n /** Datum ontbindende voorwaarden */\n ontbindendeVoorwaardenDatum: string | null;\n /** Datum bankgarantie */\n bankgarantieDatum: string | null;\n /** Indicatie dat er sprake is van particuliere erfpacht */\n erfpachtParticulier: boolean | null;\n /** Geeft aan op welke datum de energie (label) klasse is afgegeven */\n energieklasseDatum: string | null;\n}\n\n/** Bevat gegevens van een te verkopen woning van het Adviesbox-form Woning. */\nexport interface WoningVerkoop {\n /** Unieke identificatie van het te verkopen pand */\n pandId: string;\n /** Volgnummer van de woning/het pand op het scherm */\n readonly volgnummer: number | null;\n gebruikPand: GebruikPandSoort | null;\n gebruikPandVoorstel: GebruikPandSoort | null;\n /** Bedrag marktwaarde */\n marktwaardeBedrag: number | null;\n verkoopstatus: Verkoopstatus | null;\n /** Datum verkocht per */\n verkoopdatum: string | null;\n /** Datum ontbindende voorwaarden */\n ontbindendeVoorwaardenDatum: string | null;\n /** Bedrag verkoopopbrengst */\n verkoopopbrengstBedrag: number | null;\n /** Bedrag verkoopkosten */\n verkoopkostenBedrag: number | null;\n /** Indicatie dat de verkoopkosten worden berekend */\n verkoopkostenOvernemen: boolean | null;\n /** Geeft aan dat op het object een voorwaarde bij verkoop van toepassing is */\n verkoopOnderVoorwaarden: boolean | null;\n /** Geeft aan welke voorwaarde bij verkoop van toepassing is */\n verkoopOnderVoorwaardenConstructie: number | null;\n /** Omschrijving constructie verkoop onder voorwaarden */\n verkoopOnderVoorwaardenConstructieOmschrijving: string | null;\n /** Wanneer de erfpacht- of kortingsconstructie nog niet is opgenomen in de waardelijst VerkoopOnderVoorwaardenConstructieType, kan hier \n worden aangegeven om wat voor type constructie het gaat, zodat er rekening mee gehouden kan worden in de volledigheidstoets van NHG. */\n soortConstructieAnders: number | null;\n adres: AdresReadOnly | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Woning. */\nexport interface WoningenOutput {\n /** Lijst met de inhoud van het scherm Woning per adviesdossier. */\n woningen: { [key: string]: Woning; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat gegevens van het Adviesbox-form Woonsituatie. */\nexport interface Woonsituatie {\n /** Bevat huidige woonsituaties */\n huidigeWoonsituaties: HuidigeWoonsituatie[] | null;\n /** Geeft aan of het advies met een mede-aanvrager betreft */\n adviesMetMedeaanvrager: boolean;\n adresVan1eKlant: AdresReadOnly | null;\n adresVan2eKlant: AdresReadOnly | null;\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n}\n\n/** Output voor het opvragen van de inhoud van het Adviesbox-form Woonsituatie. */\nexport interface WoonsituatieOutput {\n /** Lijst met de inhoud van het scherm Woonsituatie per adviesdossier. */\n woonsituaties: { [key: string]: Woonsituatie; } | null;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Bevat renteaftrek-gegevens t.b.v. het scherm Woonsituatie. */\nexport interface WoonsituatieRenteaftrek {\n /** Unieke identificatie van een renteaftrek */\n renteaftrekId: string | null;\n /** Volgnummer van een renteaftrek in het bovenliggende object */\n volgnummer: number;\n /** Bedrag */\n bedrag: number | null;\n /** Datum aanvang renteaftrek */\n aanvangsdatum: string | null;\n /** Datum einde renteaftrek */\n einddatum: string | null;\n}\n\n/** Woonsituatiesoort Geen = 0, Eigendom = 1, Huur = 2, Inwonend = 3 */\nexport enum Woonsituatiesoort {\n Geen = \"Geen\",\n Eigendom = \"Eigendom\",\n Huur = \"Huur\",\n Inwonend = \"Inwonend\",\n}\n\n/** Ww-dekking */\nexport interface WwDekkingBedragen {\n /** Het verzekerd maandbedrag */\n readonly verzekerdMaandBedrag: number | null;\n}\n\n/** Model voor het zoeken van advies- en bemiddelingdossiers */\nexport interface ZoekDossierInput {\n /** Input voor het zoeken op naam, achternaam en/of tussenvoegsel */\n zoekNaamInput: string | null;\n /** Specifieke vestiging waarop gezocht wordt Ć³f alle vestigingen als deze null is */\n zoekVestigingId: string | null;\n /** Pagina nummer dat getoond moet worden */\n paginaNummer: number;\n /** Aantal zoekresultaten dat getoond moet worden per pagina */\n aantalResultatenPerPagina: number;\n /** Waarde voor het filteren op geboortedatum */\n geboorteDatum: string | null;\n /** Waarde voor het filteren op postcode */\n postcode: string | null;\n /** Waarde voor het filteren op woonplaats */\n woonplaats: string | null;\n /** Als er enkel op de dossiers van de adviseur gezocht moet worden, dient deze gevuld te zijn */\n doorzoekAlleAdviezen: boolean;\n zoekResultaatSorteerOptions: ZoekResultaatSorteerOptions;\n /** Naamdelen van de zoekinput */\n readonly naamDelen: string[] | null;\n}\n\n/** ZoekResultaatSorteerOptions AchternaamOplopend = 0, AchternaamAflopend = 1, GeboorteDatumOplopend = 2, GeboorteDatumAflopend = 3, PostcodeOplopend = 4, PostcodeAflopend = 5, WoonplaatsOplopend = 6, WoonplaatsAflopend = 7 */\nexport enum ZoekResultaatSorteerOptions {\n AchternaamOplopend = \"AchternaamOplopend\",\n AchternaamAflopend = \"AchternaamAflopend\",\n GeboorteDatumOplopend = \"GeboorteDatumOplopend\",\n GeboorteDatumAflopend = \"GeboorteDatumAflopend\",\n PostcodeOplopend = \"PostcodeOplopend\",\n PostcodeAflopend = \"PostcodeAflopend\",\n WoonplaatsOplopend = \"WoonplaatsOplopend\",\n WoonplaatsAflopend = \"WoonplaatsAflopend\",\n}\n\n/** Een regel uit het resultaat van het zoeken naar adviesdossiers. */\nexport interface ZoekenAdviesdossier {\n /** Unieke identificatie van een gevonden adviesdossier. */\n adviesdossierId: string;\n /** Datum dat het adviesdossier voor het laatst bewerkt is. */\n readonly laatstBewerktDatum: string | null;\n /** Tijd dat het adviesdossier voor het laatst bewerkt is. */\n laatstBewerktTijd: string | null;\n aanleiding: FinancieringOptions | null;\n /** Korte omschrijving van het adviesdossier. */\n readonly omschrijving: string | null;\n status: Dossierstatus;\n /** De ids van de adviseurs gekoppeld aan dit adviesdossier */\n adviseurIds: string[] | null;\n}\n\n/** Een regel uit het resultaat van het zoeken naar adviesdossiers, inclusief gegevens van de aanvrager(s). */\nexport interface ZoekenAdviesdossierMetKlantInfo {\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n /** Unieke identificatie van een gevonden adviesdossier. */\n adviesdossierId: string;\n /** Datum dat het adviesdossier voor het laatst bewerkt is. */\n readonly laatstBewerktDatum: string | null;\n /** Tijd dat het adviesdossier voor het laatst bewerkt is. */\n laatstBewerktTijd: string | null;\n aanleiding: FinancieringOptions | null;\n /** Korte omschrijving van het adviesdossier. */\n readonly omschrijving: string | null;\n status: Dossierstatus;\n /** De ids van de adviseurs gekoppeld aan dit adviesdossier */\n adviseurIds: string[] | null;\n}\n\n/** Een regel uit het resultaat van een zoekopdracht. */\nexport interface Zoekresultaat {\n /** De unieke identificatie van het klantdossier waar dit zoekresultaat onder valt. */\n klantdossierId: string;\n /** Het recentste moment dat een adviedossier van deze klant(en) geopend is. */\n readonly laatstGeopendDatum: string | null;\n /** Tijd dat het adviesdossier voor het laatst geopend is. */\n readonly laatstGeopendTijd: string | null;\n /** De gebruikersnaam van de persoon die het adviesdossier het laatst geopend heeft. */\n readonly laatstGeopendDoor: string | null;\n aanvrager1: KlantnaamReadOnly | null;\n aanvrager2: KlantnaamReadOnly | null;\n adviseur: ZoekresultaatAdviseur | null;\n /** De naam van de vestiging waar de klant staat ingeschreven. */\n readonly naamVestiging: string | null;\n /** Het guid van de vestiging waar de klant staat ingeschreven. */\n vestigingId: string;\n /** De postcode van het woonadres van aanvrager 1 */\n readonly postcode: string | null;\n /** De woonplaats van aanvrager 1 */\n readonly woonplaats: string | null;\n /** De adviesdossiers van deze klanten. */\n readonly adviesdossiers: ZoekenAdviesdossier[] | null;\n}\n\n/** Gegevens van de adviseur, benodigd om weer te geven in het zoekresultaat. */\nexport interface ZoekresultaatAdviseur {\n /** Unieke identificatie van de Adviseur */\n adviseurId: string;\n /** Achternaam */\n readonly achternaam: string | null;\n /** Voorvoegsel */\n readonly voorvoegsel: string | null;\n /** Voorletters */\n readonly voorletters: string | null;\n /** Roepnaam */\n readonly voornamen: string | null;\n geslacht: GeslachtOpties;\n}\n\n/** Het resultaat van een zoekopdracht. */\nexport interface ZoekresultaatOutput {\n /** De gevonden resultaten. */\n readonly zoekresultaten: Zoekresultaat[] | null;\n /** Totaal aantal gevonden resultaten. */\n totalNumberOfResults: number;\n /** Totaal aantal gevonden resultaten. */\n totalNumberOfPages: number;\n isValid: boolean;\n message: string | null;\n validationResults: ValidationResultModel[] | null;\n}\n\n/** Onderdeel van het dashboard dat gewenst is */\nexport enum Onderdeel {\n HypotheekAcceptatie = \"HypotheekAcceptatie\",\n Snelinzicht = \"Snelinzicht\",\n Overlijden = \"Overlijden\",\n Arbeidsongeschiktheid = \"Arbeidsongeschiktheid\",\n Werkloosheid = \"Werkloosheid\",\n Pensioen = \"Pensioen\",\n VerantwoordeWoonlasten = \"VerantwoordeWoonlasten\",\n Aflossingsvorm = \"Aflossingsvorm\",\n Rentevastperiode = \"Rentevastperiode\",\n OpbouwDoelvermogen = \"OpbouwDoelvermogen\",\n}\n\n/** Onderdeel van het dashboard waarvan de gegevens opgeslagen moeten worden */\nexport enum Onderdeel2 {\n HypotheekAcceptatie = \"HypotheekAcceptatie\",\n Snelinzicht = \"Snelinzicht\",\n Overlijden = \"Overlijden\",\n Arbeidsongeschiktheid = \"Arbeidsongeschiktheid\",\n Werkloosheid = \"Werkloosheid\",\n Pensioen = \"Pensioen\",\n VerantwoordeWoonlasten = \"VerantwoordeWoonlasten\",\n Aflossingsvorm = \"Aflossingsvorm\",\n Rentevastperiode = \"Rentevastperiode\",\n OpbouwDoelvermogen = \"OpbouwDoelvermogen\",\n}\n\n/** Onderdeel van het dashboard dat gewenst is */\nexport enum Onderdeel3 {\n HypotheekAcceptatie = \"HypotheekAcceptatie\",\n Snelinzicht = \"Snelinzicht\",\n Overlijden = \"Overlijden\",\n Arbeidsongeschiktheid = \"Arbeidsongeschiktheid\",\n Werkloosheid = \"Werkloosheid\",\n Pensioen = \"Pensioen\",\n VerantwoordeWoonlasten = \"VerantwoordeWoonlasten\",\n Aflossingsvorm = \"Aflossingsvorm\",\n Rentevastperiode = \"Rentevastperiode\",\n OpbouwDoelvermogen = \"OpbouwDoelvermogen\",\n}\n\n/** InkomenPeriode Geen = 0, PerJaar = 1, PerMaand = 12, Per4Weken = 13, PerWeek = 52 */\nexport enum InkomenPeriodeCode {\n Geen = \"Geen\",\n PerJaar = \"PerJaar\",\n PerMaand = \"PerMaand\",\n Per4Weken = \"Per4Weken\",\n PerWeek = \"PerWeek\",\n}\n\n/** InkomenPeriode Geen = 0, PerJaar = 1, PerMaand = 12, Per4Weken = 13, PerWeek = 52 */\nexport enum InkomenPeriodeCode2 {\n Geen = \"Geen\",\n PerJaar = \"PerJaar\",\n PerMaand = \"PerMaand\",\n Per4Weken = \"Per4Weken\",\n PerWeek = \"PerWeek\",\n}\n\n/** Het klantprofiel-onderwerp */\nexport enum Onderwerp {\n AlgemeenDoelstelling = \"AlgemeenDoelstelling\",\n AlgemeenToekomstperspectief = \"AlgemeenToekomstperspectief\",\n AlgemeenRisicoEnKennis = \"AlgemeenRisicoEnKennis\",\n HypotheekAlgemeen = \"HypotheekAlgemeen\",\n HypotheekVerduurzaming = \"HypotheekVerduurzaming\",\n HypotheekVerantwoordeWoonlasten = \"HypotheekVerantwoordeWoonlasten\",\n HypotheekEigenGeld = \"HypotheekEigenGeld\",\n HypotheekDubbeleWoonlasten = \"HypotheekDubbeleWoonlasten\",\n HypotheekFiscaal = \"HypotheekFiscaal\",\n HypotheekHypotheekvorm = \"HypotheekHypotheekvorm\",\n HypotheekRentevastperiode = \"HypotheekRentevastperiode\",\n HypotheekGeldverstrekker = \"HypotheekGeldverstrekker\",\n RisicosOverlijden = \"RisicosOverlijden\",\n RisicosArbeidsongeschiktheid = \"RisicosArbeidsongeschiktheid\",\n RisicosWerkloosheid = \"RisicosWerkloosheid\",\n RisicosPensioen = \"RisicosPensioen\",\n VermogensopbouwOpbouwDoelvermogen = \"VermogensopbouwOpbouwDoelvermogen\",\n VermogensopbouwRisicoprofiel = \"VermogensopbouwRisicoprofiel\",\n}\n\n/** Het klantprofiel-onderwerp */\nexport enum Onderwerp2 {\n AlgemeenDoelstelling = \"AlgemeenDoelstelling\",\n AlgemeenToekomstperspectief = \"AlgemeenToekomstperspectief\",\n AlgemeenRisicoEnKennis = \"AlgemeenRisicoEnKennis\",\n HypotheekAlgemeen = \"HypotheekAlgemeen\",\n HypotheekVerduurzaming = \"HypotheekVerduurzaming\",\n HypotheekVerantwoordeWoonlasten = \"HypotheekVerantwoordeWoonlasten\",\n HypotheekEigenGeld = \"HypotheekEigenGeld\",\n HypotheekDubbeleWoonlasten = \"HypotheekDubbeleWoonlasten\",\n HypotheekFiscaal = \"HypotheekFiscaal\",\n HypotheekHypotheekvorm = \"HypotheekHypotheekvorm\",\n HypotheekRentevastperiode = \"HypotheekRentevastperiode\",\n HypotheekGeldverstrekker = \"HypotheekGeldverstrekker\",\n RisicosOverlijden = \"RisicosOverlijden\",\n RisicosArbeidsongeschiktheid = \"RisicosArbeidsongeschiktheid\",\n RisicosWerkloosheid = \"RisicosWerkloosheid\",\n RisicosPensioen = \"RisicosPensioen\",\n VermogensopbouwOpbouwDoelvermogen = \"VermogensopbouwOpbouwDoelvermogen\",\n VermogensopbouwRisicoprofiel = \"VermogensopbouwRisicoprofiel\",\n}\n\n/** Het soort onderwerp */\nexport enum Onderwerpsoort {\n Geen = \"Geen\",\n Algemeen = \"Algemeen\",\n Rentevastperiode = \"Rentevastperiode\",\n FiscaleAftrek = \"FiscaleAftrek\",\n InbrengEigenGeld = \"InbrengEigenGeld\",\n OversluitenHypotheek = \"OversluitenHypotheek\",\n VerantwoordeWoonlasten = \"VerantwoordeWoonlasten\",\n Box3Consumptief = \"Box3Consumptief\",\n AfdekkenOverlijdensrisico = \"AfdekkenOverlijdensrisico\",\n AfdekkenAOWW = \"AfdekkenAOWW\",\n Pensioenvoorziening = \"Pensioenvoorziening\",\n HoogteOpbouwDoelvermogen = \"HoogteOpbouwDoelvermogen\",\n WijzeOpbouwDoelvermogen = \"WijzeOpbouwDoelvermogen\",\n Beleggingsproduct = \"Beleggingsproduct\",\n Beleggingsprofiel = \"Beleggingsprofiel\",\n Fondskeuze = \"Fondskeuze\",\n OversluitenBeleggingspolis = \"OversluitenBeleggingspolis\",\n AfdekkenWW = \"AfdekkenWW\",\n Kredieten = \"Kredieten\",\n DubbeleWoonlasten = \"DubbeleWoonlasten\",\n EerderStoppen = \"EerderStoppen\",\n Geldverstrekker = \"Geldverstrekker\",\n HypotheekAflossen = \"HypotheekAflossen\",\n Schade = \"Schade\",\n Risicoprofiel = \"Risicoprofiel\",\n Nazorg = \"Nazorg\",\n Energie = \"Energie\",\n Telecom = \"Telecom\",\n Uitvaart = \"Uitvaart\",\n Verduurzaming = \"Verduurzaming\",\n Alles = \"Alles\",\n}\n\n/** Het soort onderwerp */\nexport enum Onderwerpsoort2 {\n Geen = \"Geen\",\n Algemeen = \"Algemeen\",\n Rentevastperiode = \"Rentevastperiode\",\n FiscaleAftrek = \"FiscaleAftrek\",\n InbrengEigenGeld = \"InbrengEigenGeld\",\n OversluitenHypotheek = \"OversluitenHypotheek\",\n VerantwoordeWoonlasten = \"VerantwoordeWoonlasten\",\n Box3Consumptief = \"Box3Consumptief\",\n AfdekkenOverlijdensrisico = \"AfdekkenOverlijdensrisico\",\n AfdekkenAOWW = \"AfdekkenAOWW\",\n Pensioenvoorziening = \"Pensioenvoorziening\",\n HoogteOpbouwDoelvermogen = \"HoogteOpbouwDoelvermogen\",\n WijzeOpbouwDoelvermogen = \"WijzeOpbouwDoelvermogen\",\n Beleggingsproduct = \"Beleggingsproduct\",\n Beleggingsprofiel = \"Beleggingsprofiel\",\n Fondskeuze = \"Fondskeuze\",\n OversluitenBeleggingspolis = \"OversluitenBeleggingspolis\",\n AfdekkenWW = \"AfdekkenWW\",\n Kredieten = \"Kredieten\",\n DubbeleWoonlasten = \"DubbeleWoonlasten\",\n EerderStoppen = \"EerderStoppen\",\n Geldverstrekker = \"Geldverstrekker\",\n HypotheekAflossen = \"HypotheekAflossen\",\n Schade = \"Schade\",\n Risicoprofiel = \"Risicoprofiel\",\n Nazorg = \"Nazorg\",\n Energie = \"Energie\",\n Telecom = \"Telecom\",\n Uitvaart = \"Uitvaart\",\n Verduurzaming = \"Verduurzaming\",\n Alles = \"Alles\",\n}\n\n/** Taxatiedoel (niet alle doelen zijn toegestaan bij NWWI) */\nexport enum Taxatiedoel {\n HypothecaireFinancieringMetNhg = \"HypothecaireFinancieringMetNhg\",\n HypothecaireFinancieringZonderNhg = \"HypothecaireFinancieringZonderNhg\",\n InzichtWaardeTenBehoeveBeslissing = \"InzichtWaardeTenBehoeveBeslissing\",\n AanvraagHypothecaireGeldlening = \"AanvraagHypothecaireGeldlening\",\n AankoopBeslissing = \"AankoopBeslissing\",\n AanvraagOverbruggingsfinanciering = \"AanvraagOverbruggingsfinanciering\",\n BijzonderBeheer = \"BijzonderBeheer\",\n BoedelSplitsing = \"BoedelSplitsing\",\n BrabantseVerkoopgarantie = \"BrabantseVerkoopgarantie\",\n Hertaxatie = \"Hertaxatie\",\n MinnelijkeWaardering = \"MinnelijkeWaardering\",\n OntpandingVerzekeringspolis = \"OntpandingVerzekeringspolis\",\n Uitwinning = \"Uitwinning\",\n VerkoopBeslissing = \"VerkoopBeslissing\",\n VerkrijgenFinanciering = \"VerkrijgenFinanciering\",\n VerkrijgenFinancieringMetNhg = \"VerkrijgenFinancieringMetNhg\",\n VerkrijgenInzichtWaardeAankoopbeslissing = \"VerkrijgenInzichtWaardeAankoopbeslissing\",\n VerkrijgenInzichtWaardeVerkoopbeslissing = \"VerkrijgenInzichtWaardeVerkoopbeslissing\",\n VerkrijgenInzichtTenBehoeveVanExecutorialeVerkoop = \"VerkrijgenInzichtTenBehoeveVanExecutorialeVerkoop\",\n WoningFinancieringMetValidatie = \"WoningFinancieringMetValidatie\",\n WoningFinancieringNwwi = \"WoningFinancieringNwwi\",\n BepalenPrijsBijVerkoop = \"BepalenPrijsBijVerkoop\",\n BepalenPrijsBijAankoop = \"BepalenPrijsBijAankoop\",\n BepalenPrijsBijTerugkoop = \"BepalenPrijsBijTerugkoop\",\n GedwongenVerkoop = \"GedwongenVerkoop\",\n Anders = \"Anders\",\n}\n\nexport interface FileParameter {\n data: any;\n fileName: string;\n}","import { GeslachtOpties } from \"./../../.generated/forms/formstypes\";\nimport { InferType } from \"yup\";\nimport * as Yup from \"yup\";\nimport { yupEnum } from \"../../shared/utils/yup-enum\";\n\nexport const contactpersoonSchema = Yup.object({\n achternaam: Yup.string().default(\"\"),\n voorvoegsel: Yup.string().default(\"\"),\n voorletters: Yup.string().default(\"\"),\n geslacht: yupEnum(GeslachtOpties).default(GeslachtOpties.Man)\n});\n\nexport type ContactpersoonType = InferType<typeof contactpersoonSchema>;\n\nexport const notarisAdresSchema = Yup.object({\n straat: Yup.string()\n .nullable()\n .default(\"\"),\n huisnummer: Yup.number()\n .nullable()\n .default(null),\n toevoeging: Yup.string()\n .nullable()\n .default(\"\"),\n postcode: Yup.string()\n .nullable()\n .default(\"\")\n .when(\"landCode\", {\n is: (val): boolean => val === \"NL\",\n then: Yup.string().matches(/^$|^[1-9][0-9]{3}[\\s]?[A-Za-z]{2}$/i, \"Ongeldige postcode.\")\n }),\n plaats: Yup.string()\n .nullable()\n .default(\"\"),\n landCode: Yup.string()\n .nullable()\n .default(\"NL\")\n});\nexport type NotarisAdresSchemaType = InferType<typeof notarisAdresSchema>;\n\nexport const partijSchema = Yup.object({\n notariskantoorId: Yup.string().default(\"\"),\n kantoornaam: Yup.string().default(\"\"),\n adres: notarisAdresSchema,\n contactpersoon: contactpersoonSchema,\n telefoonnummer: Yup.string().default(\"\")\n});\nexport type PartijType = InferType<typeof partijSchema>;\n\nexport const beschikbareNotarissenSchema = Yup.object({\n partijen: Yup.array(partijSchema).default([])\n});\n\nexport type BeschikbareNotarissenState = InferType<typeof beschikbareNotarissenSchema>;\nexport type BeschikbareNotarissenProps = InferType<typeof beschikbareNotarissenSchema>;\n","/* istanbul ignore file */\nimport { FieldMap, UiName } from \"../../shared/types\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\n\nimport {\n partijSchema,\n beschikbareNotarissenSchema,\n contactpersoonSchema,\n notarisAdresSchema,\n BeschikbareNotarissenState\n} from \"./notarissen-schema\";\nimport { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\nimport {\n NotarissenOutput,\n Notarissen,\n Notariskantoor,\n NotarisPersoon,\n Adres\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst mapContactpersoon = createMapToUi(contactpersoonSchema).from<NotarisPersoon>({\n achternaam: v => v.achternaam,\n geslacht: v => v.geslacht,\n voorvoegsel: v => v.voorvoegsel,\n voorletters: v => v.voorletters\n});\n\nconst mapAdres = createMapToUi(notarisAdresSchema).from<Adres>({\n huisnummer: v => v.huisnummer,\n plaats: v => v.plaats,\n postcode: v => {\n if (v.postcode && v.landCode === \"NL\") {\n const postcode = v.postcode.toUpperCase().replace(/\\s/g, \"\");\n const letters = postcode.slice(4, 6);\n const numbers = postcode.slice(0, 4);\n if (numbers.charAt(0) !== \"\") {\n return `${numbers} ${letters}`;\n }\n }\n return v.postcode;\n },\n straat: v => v.straat,\n toevoeging: v => v.toevoeging,\n landCode: v => v.landCode\n});\n\nconst mapPartij = createMapToUi(partijSchema).from<Notariskantoor>({\n adres: v => mapAdres(v.adres),\n contactpersoon: v => mapContactpersoon(v.contactpersoon),\n kantoornaam: v => v.kantoornaam,\n notariskantoorId: v => v.notariskantoorId,\n telefoonnummer: v => v.telefoonnummer\n});\n\nconst mapPartijen = createMapToUi(beschikbareNotarissenSchema).from<Notarissen>({\n partijen: v => (v.partijen ? v.partijen.map(partij => mapPartij(partij)) : [])\n});\n\nexport function mapNotarissenDlToUi(data: NotarissenOutput | null): BeschikbareNotarissenState | null {\n const notarissen = data && data.isValid && data.notarissen ? data.notarissen : null;\n\n if (notarissen) {\n return mapPartijen(data?.notarissen);\n }\n\n return null;\n}\n\nexport function mapDlTargetToNotarissenUiField(target: string): UiName | null {\n const map: FieldMap<any> = {};\n\n return target2field(map, target);\n}\n","import { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\nimport {\n partijSchema,\n beschikbareNotarissenSchema,\n contactpersoonSchema,\n notarisAdresSchema\n} from \"./notarissen-schema\";\nimport {\n Notarissen,\n Notariskantoor,\n NotarisPersoon,\n Adres\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst mapContactpersoon = createMapToDl(contactpersoonSchema).to<NotarisPersoon>({\n achternaam: v => v.achternaam,\n geslacht: v => v.geslacht,\n voorvoegsel: v => v.voorvoegsel,\n voorletters: v => v.voorletters\n});\n\nconst mapAdres = createMapToDl(notarisAdresSchema).to<Adres>({\n huisnummer: v => v.huisnummer,\n plaats: v => v.plaats,\n postcode: v => {\n if (v.postcode && v.landCode === \"NL\") {\n const postcode = v.postcode.toUpperCase().replace(/\\s/g, \"\");\n const letters = postcode.slice(4, 6);\n const numbers = postcode.slice(0, 4);\n if (numbers.charAt(0) !== \"\") {\n return `${numbers} ${letters}`;\n }\n }\n return v.postcode;\n },\n straat: v => v.straat,\n toevoeging: v => v.toevoeging,\n landCode: v => v.landCode\n});\n\nconst mapPartij = createMapToDl(partijSchema).to<Notariskantoor>({\n adres: v => mapAdres(v.adres),\n contactpersoon: v => mapContactpersoon(v.contactpersoon),\n kantoornaam: v => v.kantoornaam,\n notariskantoorId: v => v.notariskantoorId,\n telefoonnummer: v => v.telefoonnummer\n});\n\nexport const mapNotarissenUiToDl = createMapToDl(beschikbareNotarissenSchema).to<Notarissen>({\n partijen: v => v.partijen.map(partij => mapPartij(partij))\n});\n","import React, { ReactElement, InputHTMLAttributes } from \"react\";\nimport HdnKeuzelijst, { HdnKeuzelijstProps } from \"./HdnKeuzelijst\";\nimport classnames from \"classnames\";\nimport { LabelProps, Label } from \"adviesbox-shared\";\n\ntype LabeledHdnKeuzelijstProps = LabelProps & HdnKeuzelijstProps;\n\nconst LabeledHdnKeuzelijst = ({\n berichtSoortType,\n caption,\n keuzelijst,\n name,\n tooltip,\n appendChildren,\n readonly,\n visible,\n fieldSize,\n emptyValue,\n labelColSize = 7,\n onChange,\n useHdnData\n}: LabeledHdnKeuzelijstProps & InputHTMLAttributes<HTMLSelectElement>): ReactElement => {\n const inputColSize = labelColSize < 12 ? 12 - labelColSize : 12;\n\n return (\n <div\n className={classnames(\"form-group form-row\", {\n invisible: visible === false\n })}\n >\n <div className={`col-${labelColSize}`}>\n <Label caption={caption} name={name} tooltip={tooltip} />\n </div>\n <div className={`col-${inputColSize}`}>\n <HdnKeuzelijst\n berichtSoortType={berichtSoortType}\n keuzelijst={keuzelijst}\n name={name}\n appendChildren={appendChildren}\n readonly={readonly}\n fieldSize={fieldSize}\n emptyValue={emptyValue}\n onChange={onChange}\n useHdnData={useHdnData}\n />\n </div>\n </div>\n );\n};\n\nexport default LabeledHdnKeuzelijst;\n","import { PostcodeInfo, PostcodeInfoOutput } from \"../../../.generated/postcodes/postcodestypes\";\n\nimport { SettingsType } from \"adviesbox-shared\";\nimport { User } from \"oidc-client\";\n\nasync function getPostcodeInfo(\n user: User | null,\n settings: SettingsType,\n postcode: string,\n huisnummer: number\n): Promise<PostcodeInfo | null> {\n if (!user) {\n return null;\n }\n\n const url = `${settings.postcodeOrigin}/Postcodes/${postcode}/Huisnummers/${huisnummer}`;\n const rsp = await fetch(url, {\n headers: {\n \"Ocp-Apim-Subscription-Key\": `${settings.OcpApimSubscriptionKey}`\n }\n });\n\n if (rsp.ok) {\n const data: PostcodeInfoOutput = await rsp.json();\n\n if (data.isValid && data.postcodeInfo) {\n return data.postcodeInfo;\n }\n }\n\n return null;\n}\n\nexport default getPostcodeInfo;\n","import { AdresPresentation, AuthContext, SettingsContext } from \"adviesbox-shared\";\nimport { FormikContextType, connect, getIn } from \"formik\";\nimport React, { InputHTMLAttributes, ReactElement, useContext, useRef } from \"react\";\n\nimport { AdresType } from \"../../types\";\nimport LabeledHdnKeuzelijst from \"../hdn-keuzelijst/LabeledHdnKeuzelijst\";\nimport getPostcodeInfo from \"./get-postcode-info\";\n\nexport type AdresProps = {\n readonly?: boolean;\n name: string;\n plaatsCaption?: string;\n landCaption?: string;\n metLand?: boolean;\n} & InputHTMLAttributes<HTMLInputElement>;\n\nconst AdresInputComponent = ({\n readonly,\n name,\n formik,\n plaatsCaption,\n landCaption,\n metLand = true\n}: AdresProps & { formik: FormikContextType<{}> }): ReactElement => {\n const { user } = useContext(AuthContext);\n const settings = useContext(SettingsContext);\n const adres = getIn(formik.values, name) as AdresType;\n\n let postcode = \"\";\n let huisnummer: number | null = null;\n let landCode = \"\";\n\n if (adres !== undefined) {\n postcode = adres.postcode.toUpperCase().replace(/\\s/g, \"\");\n huisnummer = adres.huisnummer;\n landCode = adres.landCode;\n }\n\n const previousPostcodeHuisnummer = useRef({ postcode, huisnummer });\n\n async function postcodeHuisnummerChanged(): Promise<void> {\n const postcodeError = getIn(formik.errors, `${name}.postcode`) !== undefined;\n\n if (landCode === \"NL\" && adres.postcode && huisnummer && !postcodeError) {\n if (\n postcode === previousPostcodeHuisnummer.current.postcode &&\n huisnummer === previousPostcodeHuisnummer.current.huisnummer\n ) {\n return;\n }\n\n previousPostcodeHuisnummer.current = {\n postcode,\n huisnummer\n };\n\n const postcodeInfo = await getPostcodeInfo(user, settings, postcode, huisnummer);\n if (postcodeInfo) {\n if (postcodeInfo.postcode) {\n postcodeInfo.postcode = postcodeInfo.postcode.toUpperCase().replace(/\\s/g, \"\");\n }\n\n if (\n postcodeInfo.huisnummer === previousPostcodeHuisnummer.current.huisnummer &&\n postcodeInfo.postcode === previousPostcodeHuisnummer.current.postcode\n ) {\n const currVal = getIn(formik.values, name);\n formik.setFieldValue(`${name}`, {\n ...currVal,\n plaats: postcodeInfo.plaats,\n straat: postcodeInfo.straat\n });\n }\n }\n }\n }\n return (\n <>\n <AdresPresentation\n landCode={landCode}\n name={name}\n onBlur={postcodeHuisnummerChanged}\n readonly={readonly}\n plaatsCaption={plaatsCaption}\n />\n {metLand && (\n <LabeledHdnKeuzelijst\n caption={landCaption ? landCaption : \"Land\"}\n name={`${name}.landCode`}\n keuzelijst=\"LandType\"\n berichtSoortType=\"AX\"\n readonly={readonly}\n />\n )}\n </>\n );\n};\n\nexport const AdresInput = connect<AdresProps>(AdresInputComponent);\n","import React, { ReactElement } from \"react\";\nimport { FormikProps } from \"formik\";\n\nimport { GeslachtOpties } from \"../../.generated/forms/formstypes\";\nimport { AdviesBoxFormik, LabeledTextInput, LabeledRadioInput } from \"adviesbox-shared\";\nimport { AdresInput } from \"../../shared/components/adres/adres-input\";\nimport Modal from \"../../shared/components/modal/Modal\";\nimport { enum2options } from \"../../shared/utils/enum-to-options\";\nimport { PartijType, partijSchema } from \"../infra/notarissen-schema\";\n\nexport const NotariskantoorToevoegenModal = ({\n closeModal,\n onSave,\n data\n}: {\n data: PartijType;\n closeModal?: () => {};\n onSave?: (data: PartijType) => void;\n}): ReactElement => (\n <AdviesBoxFormik<PartijType>\n initialValues={{ ...data }}\n validationSchema={partijSchema}\n onSave={onSave}\n closeModal={closeModal}\n render={({ submitForm }: FormikProps<PartijType>): ReactElement => (\n <Modal\n title=\"Notaris toevoegen\"\n onSubmitClick={submitForm}\n onCancelClick={closeModal}\n body={\n <>\n <div>\n <LabeledTextInput name=\"kantoornaam\" caption=\"Kantoornaam\" />\n </div>\n <h2>Adres</h2>\n <div>\n <AdresInput name=\"adres\" plaatsCaption=\"Woonplaats\" metLand={false} fieldSize=\"l\" />\n </div>\n <h2>Contactpersoon</h2>\n <div>\n <LabeledRadioInput\n caption=\"Geslacht\"\n name=\"contactpersoon.geslacht\"\n options={enum2options(GeslachtOpties)}\n />\n <LabeledTextInput name=\"contactpersoon.voorletters\" caption=\"Voorletters\" />\n <LabeledTextInput name=\"contactpersoon.voorvoegsel\" caption=\"Tussenvoegsel\" />\n <LabeledTextInput name=\"contactpersoon.achternaam\" caption=\"Achternaam\" />\n <LabeledTextInput name=\"telefoonnummer\" caption=\"Telefoonnummer\" />\n </div>\n </>\n }\n />\n )}\n />\n);\n","/* istanbul ignore file */\nimport { LabelValuePairs, LabelValuePair } from \"../types\";\n\nexport const enum2options = (e: object): LabelValuePairs =>\n Object.values(e).map((value): LabelValuePair => ({ label: value || \"Selecteer een optie\", value }));\n","import React, { ReactElement } from \"react\";\nimport { FormikContextType } from \"formik\";\nimport { Column, CellInfo } from \"react-table-6\";\nimport { Icon } from \"adviesbox-shared\";\nimport { GeslachtOpties } from \"../../.generated/forms/formstypes\";\n\nimport { Modal as ModalBootstrap } from \"react-bootstrap\";\nimport { NotariskantoorToevoegenModal } from \"./notariskantoor-toevoegen-modal\";\nimport classes from \"./beschikbare-notarissen.module.scss\";\nimport ModalButton from \"../../shared/components/modal/ModalButton\";\nimport produce from \"immer\";\nimport { BeschikbareNotarissenState } from \"../infra/notarissen-schema\";\n\nconst titleMapper = {\n [GeslachtOpties.Geen]: \"\",\n [GeslachtOpties.Man]: \"Dhr.\",\n [GeslachtOpties.Vrouw]: \"Mevr.\"\n};\n\nexport const EmptyComponent = (): null => null;\n\nconst createSpanWithId = (name: string): ((c: CellInfo) => ReactElement) => (c): ReactElement => {\n return <span id={`${c.index}-row-${name}-notarissen`}>{c.original[name]}</span>;\n};\n\nexport const DeleteNotarisModal = ({\n closeModal,\n formik,\n index\n}: {\n formik: FormikContextType<BeschikbareNotarissenState>;\n index: number;\n closeModal?: () => void;\n}): ReactElement => {\n const { values, setFieldValue } = formik;\n\n const deleteNotaris = (): void => {\n setFieldValue(\n \"partijen\",\n produce(values.partijen, v => {\n v.splice(index, 1);\n })\n );\n setFieldValue(\"dirty\", true);\n };\n\n return (\n <>\n <ModalBootstrap.Header>\n <div className=\"d-flex w-100\">\n <ModalBootstrap.Title>\n Weet u zeker dat u {values.partijen[index].kantoornaam} wilt verwijderen?\n </ModalBootstrap.Title>\n <button type=\"button\" className={\"close ml-auto\"} onClick={closeModal} id={`btnClose-notaris-toevoegen`}>\n <span aria-hidden=\"true\">Ɨ</span>\n <span className=\"sr-only\">Close</span>\n </button>\n </div>\n </ModalBootstrap.Header>\n <ModalBootstrap.Body>\n <p className=\"px-2\">U raakt alle gegevens kwijt als u dit notariskantoor verwijderd.</p>\n </ModalBootstrap.Body>\n <ModalBootstrap.Footer className={classes.modal_footer}>\n <button type=\"button\" className=\"btn btn-link\" id=\"annuleer-verwijderen-notaris\" onClick={closeModal}>\n Annuleren\n </button>\n <button type=\"button\" className=\"btn btn-primary\" id=\"bevestig-verwijderen-notaris\" onClick={deleteNotaris}>\n Notariskantoor verwijderen\n </button>\n </ModalBootstrap.Footer>\n </>\n );\n};\n\nexport const DeleteModalButton = (formik: FormikContextType<BeschikbareNotarissenState>) => (\n c: CellInfo\n): ReactElement => {\n return (\n <ModalButton\n parent={`beschikbareNotarissen-delete-${c.index}`}\n content={<Icon name=\"prullenbak\" alt={\"prullenbak\"} />}\n >\n <DeleteNotarisModal formik={formik} index={c.index} />\n </ModalButton>\n );\n};\n\nexport const EditModalButton = (formik: FormikContextType<BeschikbareNotarissenState>) => (\n c: CellInfo\n): ReactElement => {\n return (\n <ModalButton parent={`beschikbareNotarissen-edit-${c.index}`} content={<Icon name=\"pencil\" alt={\"pencil\"} />}>\n <NotariskantoorToevoegenModal\n onSave={p =>\n formik.setValues(\n produce(formik.values, v => {\n v.partijen[c.index] = p;\n })\n )\n }\n data={formik.values.partijen[c.index]}\n />\n </ModalButton>\n );\n};\n\nexport const AdresComponent = (c: CellInfo): ReactElement => {\n const getAdres = (adres: {\n plaats: string;\n postcode: string;\n toevoeging: string;\n huisnummer: string;\n straat: string;\n }): string =>\n `${adres.plaats && adres.plaats + \",\\xa0\"}` +\n `${adres.postcode && adres.postcode.substring(0, 4) + \"\\xa0\" + adres.postcode.substring(4) + \",\\xa0\"}` +\n `${adres.straat && adres.straat + \"\\xa0\"}` +\n `${adres.huisnummer || \"\"}` +\n `${adres.toevoeging && \"\\xa0\" + adres.toevoeging}`;\n\n return <div id={`${c.index}-row-adres-notarissen`}>{getAdres(c.original.adres)}</div>;\n};\n\nexport const ContactPersonComponent = (c: CellInfo): ReactElement => {\n const getContactPerson = (person: {\n achternaam: string;\n voorvoegsel: string;\n voorletters: string;\n geslacht: string;\n }): string =>\n `${person.geslacht && titleMapper[person.geslacht as GeslachtOpties] + \"\\xa0\"}` +\n `${person.voorletters && person.voorletters + \"\\xa0\"}` +\n `${person.voorvoegsel ? person.voorvoegsel + \"\\xa0\" : \"\"}` +\n `${person.achternaam && person.achternaam}`;\n\n return <div id={`${c.index}-row-contact-persoon-notarissen`}>{getContactPerson(c.original.contactpersoon)}</div>;\n};\n\nexport const getColumns = (formik: FormikContextType<BeschikbareNotarissenState>): Column[] => [\n {\n Header: \"Notariskantoor\",\n minWidth: 210,\n Cell: createSpanWithId(\"kantoornaam\")\n },\n {\n Header: \"Woonplaats\",\n minWidth: 210,\n Cell: AdresComponent\n },\n {\n Header: \"Contactpersoon\",\n minWidth: 210,\n Cell: ContactPersonComponent\n },\n {\n Header: \"Telefoonnummer\",\n minWidth: 210,\n Cell: createSpanWithId(\"telefoonnummer\")\n },\n {\n Cell: EditModalButton(formik),\n maxWidth: 30\n },\n {\n Cell: DeleteModalButton(formik),\n maxWidth: 30\n }\n];\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType } from \"formik\";\nimport produce from \"immer\";\n\nimport { EmptyComponent, getColumns } from \"./notarissen-data-grid-components\";\nimport { NotariskantoorToevoegenModal } from \"./notariskantoor-toevoegen-modal\";\nimport ModalButton from \"../../shared/components/modal/ModalButton\";\nimport { DataGrid } from \"adviesbox-shared\";\nimport { partijSchema, BeschikbareNotarissenState } from \"../infra/notarissen-schema\";\n\nconst BeschikbareNotarissen = ({ formik }: { formik: FormikContextType<BeschikbareNotarissenState> }): ReactElement => {\n const { values } = formik;\n\n return (\n <>\n <DataGrid\n name=\"partijen\"\n resizable={false}\n sortable={false}\n filterable={false}\n NoDataComponent={EmptyComponent}\n minRows={values.partijen.length || 0}\n pageSize={values.partijen.length || 0}\n columns={getColumns(formik)}\n showPagination={false}\n />\n\n <div className={\"button-container\"}>\n <ModalButton\n className=\"btn btn-primary\"\n parent=\"beschikbareNotarissen-nieuw\"\n content={\n <div>\n <span id=\"notariskantoor-toevoeg-button\">Notariskantoor toevoegen</span>\n </div>\n }\n >\n <NotariskantoorToevoegenModal\n onSave={p =>\n formik.setValues(\n produce(formik.values, v => {\n v.partijen.push(p);\n })\n )\n }\n data={partijSchema.default()}\n />\n </ModalButton>\n </div>\n </>\n );\n};\n\nexport default connect<{}, BeschikbareNotarissenState>(BeschikbareNotarissen);\n","import React, { ReactElement, useContext } from \"react\";\nimport { Form, FormikProps } from \"formik\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { Card, CardWrapper, PlatformFoutenSamenvatting } from \"adviesbox-shared\";\nimport BeschikbareNotarissen from \"./beschikbare-notarissen/beschikbare-notarissen\";\nimport { AutorisatieNiveauManager } from \"../autorisatieniveau-manager/autorisatieniveau-manager\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport {\n BeschikbareNotarissenProps,\n BeschikbareNotarissenState,\n beschikbareNotarissenSchema\n} from \"./infra/notarissen-schema\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Notarissen = (\n props: FormikProps<BeschikbareNotarissenState> & WithSaveData<BeschikbareNotarissenState>\n): ReactElement => {\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n return (\n <Form>\n <PlatformFoutenSamenvatting />\n\n <fieldset disabled={!(isBeheerder || autorisatieNiveau.notarissenNiveau === InstellingNiveauOptions.Medewerker)}>\n <CardWrapper className=\"px-3\">\n <div className=\"text-container\">\n <div className={\"p-2\"}>\n <h2 className=\"p-0\">Notarissen </h2>\n <AutorisatieNiveauManager manageFor={autorisatieNiveau.notarissenNiveau} />\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n </div>\n </div>\n </CardWrapper>\n <CardWrapper className=\"px-3\">\n <Card title=\"Beschikbare notarissen\" className=\"w-100\">\n <div className=\"px-1\">\n <BeschikbareNotarissen />\n </div>\n </Card>\n </CardWrapper>\n </fieldset>\n\n {/* istanbul ignore next */\n process.env.NODE_ENV === \"development\" && <Debug />}\n </Form>\n );\n};\n\nNotarissen.displayName = \"Notarissen\";\n\nexport default withAdviesboxFormik<\n BeschikbareNotarissenProps & WithSaveData<BeschikbareNotarissenState>,\n BeschikbareNotarissenState\n>({\n mapPropsToValues: (e: BeschikbareNotarissenProps): BeschikbareNotarissenState => e,\n validationSchema: beschikbareNotarissenSchema\n})(Notarissen);\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { NotarissenOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport { mapDlTargetToNotarissenUiField, mapNotarissenDlToUi } from \"./infra/map-notarissen-dl-to-ui\";\nimport { mapNotarissenUiToDl } from \"./infra/map-notarissen-ui-to-dl\";\nimport Notarissen from \"./notarissen\";\n\nconst NotarissenAjax = (): ReactElement => {\n // TODO: replace useRequestInit/useAbortableFetch with useAdviesboxData\n\n const { settings, params, requestInit, user } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/BeheerPartijen/Notarissen`;\n const { loading, error, data } = useAbortableFetch<NotarissenOutput>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapNotarissenDlToUi(data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <Notarissen\n saveData={saveData(\n user,\n params.vestiging ?? \"\",\n url,\n settings.OcpApimSubscriptionKey,\n mapNotarissenUiToDl,\n mapDlTargetToNotarissenUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nNotarissenAjax.displayName = \"NotarissenAjax\";\n\nexport default withErrorBoundary(NotarissenAjax);\n","/* istanbul ignore file */\nimport { UiName, FieldMap } from \"../../shared/types\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\nimport { RapportageOutput } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\n\nexport function mapRapportageSamenstellenDlTargetToUiField(target: string): UiName | null {\n const map: FieldMap<RapportageOutput> = {};\n\n return target2field(map, target);\n}\n","import { RapportageElementType } from \"./rapportage-samenstellen-types\";\n\nexport enum RapportageElementSoort {\n Onderdeel = \"Onderdeel\",\n Hoofdstuk = \"Hoofdstuk\",\n Koptekst = \"Koptekst\",\n Tekstblok = \"Tekstblok\",\n Grafiek = \"Grafiek\",\n Tabel = \"Tabel\"\n}\n\nexport const defaultElementen: RapportageElementType[] = [\n {\n code: 1,\n naam: \"Voorblad\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: false,\n soortElement: RapportageElementSoort.Onderdeel,\n volgnummer: 1,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 2,\n naam: \"Inhoudsopgave\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Onderdeel,\n volgnummer: 2,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 3,\n naam: \"Hoofdstukken\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Onderdeel,\n volgnummer: 3,\n elementen: [\n {\n code: 301,\n naam: \"Inleiding\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 1,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 302,\n naam: \"Uw huidige situatie\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: false,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 1,\n elementen: [\n {\n code: 30201,\n naam: \"Belangrijke financiĆÆele gebeurtenissen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 1,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30202,\n naam: \"Uw gegevens\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 2,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30203,\n naam: \"Uw huidige lastenoverzicht\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 3,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30204,\n naam: \"Analyse van uw financiĆÆele risico's\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 4,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30205,\n naam: \"Uw huidige netto besteedbaar inkomen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 5,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30206,\n naam: \"Ontwikkeling van uw vermogen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 6,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n }\n ],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 303,\n naam: \"Uw wensen en doelstellingen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 1,\n elementen: [\n {\n code: 30301,\n naam: \"Aanleiding\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 1,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30302,\n naam: \"Dienstverlening\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 2,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n }\n ],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 304,\n naam: \"Uw benodigde financiering\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: false,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 1,\n elementen: [\n {\n code: 30401,\n naam: \"Financieringsopzet\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 1,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30402,\n naam: \"Overwaardespecificatie\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 2,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30403,\n naam: \"Restschuldspecificatie\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 3,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30404,\n naam: \"Verbouwingsspecificatie\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 4,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30405,\n naam: \"Fiscale aftrek van de financiering\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 5,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30406,\n naam: \"Oversluitenindicatie\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 6,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n }\n ],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 305,\n naam: \"Ons advies\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 1,\n elementen: [\n {\n code: 30501,\n naam: \"Belangrijke financiĆÆele gebeurtenissen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 1,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30502,\n naam: \"Adviessamenvatting\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 2,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30503,\n naam: \"Samenvatting van ons advies\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 3,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30504,\n naam: \"Uw financiĆÆele risico's\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 4,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30505,\n naam: \"Overzicht geadviseerde producten\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 5,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30506,\n naam: \"Geadviseerde producten\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 6,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30507,\n naam: \"Overzicht van uw nieuwe lasten\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 7,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30508,\n naam: \"Uw nieuwe netto besteedbaar inkomen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 8,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30509,\n naam: \"Ontwikkeling van uw vermogen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 9,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30510,\n naam: \"Overzicht vergeleken voorstellen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 10,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n }\n ],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 306,\n naam: \"Toelichting bij ons advies\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 1,\n elementen: [\n {\n code: 30601,\n naam: \"Algemeen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 1,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30602,\n naam: \"Uw hypotheek\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 2,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30603,\n naam: \"Wat gebeurt er bij overlijden?\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 3,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30604,\n naam: \"Wat gebeurt er bij arbeidsongeschiktheid?\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 4,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30605,\n naam: \"Wat gebeurt er bij werkloosheid?\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 5,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30606,\n naam: \"Hoe ziet uw pensioen eruit?\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 6,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30607,\n naam: \"Uw vermogensopbouw\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 7,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 30608,\n naam: \"Uw consumptieve kredieten\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 8,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n }\n ],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 307,\n naam: \"Akkoordverklaring\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 1,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n }\n ],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 4,\n naam: \"Bijlagen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: false,\n soortElement: RapportageElementSoort.Onderdeel,\n volgnummer: 4,\n elementen: [\n {\n code: 401,\n naam: \"Specificatie van uw inkomen en uitgaven \",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 1,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 402,\n naam: \"Specificatie van uw vermogen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 2,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 403,\n naam: \"Specificatie van uw belastbaar inkomen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 3,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 404,\n naam: \"Overzicht van de hypotheekvormen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 4,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 405,\n naam: \"Toelichting op pensioen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 5,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 406,\n naam: \"Toelichting op sociale voorzieningen\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 6,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 407,\n naam: \"De uitgereikte documenten\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 7,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 408,\n naam: \"Te ontvangen documenten\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 8,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 409,\n naam: \"Uw klantprofiel\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 9,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 410,\n naam: \"Wijzigingsverklaring\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 10,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n },\n {\n code: 411,\n naam: \"Disclaimer\",\n naamWeergevenAlsTitel: true,\n inhoudBeschikbaar: true,\n geselecteerd: true,\n soortElement: RapportageElementSoort.Hoofdstuk,\n volgnummer: 11,\n elementen: [],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n }\n ],\n inhoud: null,\n defaultInhoud: null,\n perAdviesAanpasbaar: null,\n kolommen: []\n }\n];\n","import * as Yup from \"yup\";\nimport { StandaardRapportOptions } from \"../../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { yupEnum } from \"../../utils/yup-enum\";\nimport { RapportageElementSoort } from \"./infra/rapportage-structuur-types\";\nimport { RapportageElementType, KolomDefinitieType } from \"./infra/rapportage-samenstellen-types\";\n\nexport const kolommenLastenSchema = Yup.object({\n brutoInkomen: Yup.boolean().default(false),\n somHypotheken: Yup.boolean().default(true),\n waardeopbouw: Yup.boolean().default(false),\n huur: Yup.boolean().default(false),\n rente: Yup.boolean().default(true),\n hypotheekAflossing: Yup.boolean().default(true),\n uitkeringKapitaalverzekering: Yup.boolean().default(true),\n verzekeringspremies: Yup.boolean().default(true),\n spaarBeleggingsdepots: Yup.boolean().default(true),\n opnameUitDepot: Yup.boolean().default(true),\n kredietLast: Yup.boolean().default(true),\n overigeUitgaven: Yup.boolean().default(true),\n brutoLast: Yup.boolean().default(true),\n fiscaalVoordeel: Yup.boolean().default(true),\n vrh: Yup.boolean().default(true),\n nettoLast: Yup.boolean().default(true)\n});\n\nexport const kolommenNbiSchema = Yup.object({\n hypotheek: Yup.boolean().default(true),\n verzekeringen: Yup.boolean().default(true),\n spaarBeleggingsdepots: Yup.boolean().default(true),\n kredietLast: Yup.boolean().default(true),\n overigeUitgaven: Yup.boolean().default(true),\n brutoLast: Yup.boolean().default(true),\n inkomstenbelasting: Yup.boolean().default(true),\n vrh: Yup.boolean().default(true),\n nettoInkomen: Yup.boolean().default(true),\n nbi: Yup.boolean().default(true)\n});\n\nexport const kolommenInstellenModalSchema = Yup.object({\n kolommenLasten: kolommenLastenSchema,\n kolommenNbi: kolommenNbiSchema\n});\n\nexport const kolomDefinitieSchema = Yup.object({\n kolomTitel: Yup.string(),\n kolomNaam: Yup.string(),\n selected: Yup.boolean()\n});\n\nexport const rapportageElementSchema = Yup.object({\n code: Yup.number(),\n naam: Yup.string(),\n naamWeergevenAlsTitel: Yup.boolean().default(true),\n inhoudBeschikbaar: Yup.boolean().default(true),\n geselecteerd: Yup.boolean(),\n soortElement: yupEnum(RapportageElementSoort),\n volgnummer: Yup.number(),\n elementen: Yup.array<any>().default([]),\n kolommen: Yup.array<KolomDefinitieType>().default([]),\n inhoud: Yup.string()\n .nullable()\n .default(null),\n defaultInhoud: Yup.string()\n .nullable()\n .default(null),\n perAdviesAanpasbaar: Yup.boolean()\n .nullable()\n .default(null)\n});\n\nexport const rapportageStructuurSchema = Yup.object({\n structuurId: Yup.string().nullable(),\n naam: Yup.string(),\n volgnummer: Yup.number(),\n standaardRapport: yupEnum(StandaardRapportOptions).default(StandaardRapportOptions.VolledigFinancieelPlan),\n kolomselectie: kolommenInstellenModalSchema,\n elementen: Yup.array<RapportageElementType>(rapportageElementSchema).default([]),\n isVerwijderbaar: Yup.boolean().default(true)\n});\n\nexport const rapportageSamenstellenSchema = Yup.object({\n structuren: Yup.array(rapportageStructuurSchema).default([]),\n defaultStructuur: rapportageStructuurSchema,\n movetoparent: Yup.string()\n .nullable()\n .default(null)\n});\n","import {\n Rapportage,\n RapportageElement,\n RapportageKolommenLasten,\n RapportageKolommenNbi,\n RapportageKolomselectie,\n RapportageOutput,\n RapportageStructuur,\n StandaardRapportOptions\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { RapportageSamenstellenState } from \"../../shared/components/rapportage/infra/rapportage-samenstellen-types\";\nimport { RapportageElementSoort } from \"../../shared/components/rapportage/infra/rapportage-structuur-types\";\nimport {\n kolommenInstellenModalSchema,\n kolommenLastenSchema,\n kolommenNbiSchema,\n rapportageElementSchema,\n rapportageSamenstellenSchema,\n rapportageStructuurSchema\n} from \"../../shared/components/rapportage/rapportage-samenstellen-schema\";\nimport { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\n\nconst findElement = (elements: RapportageElement[] | null, targetCode: number): RapportageElement | null => {\n if (!elements) return null;\n for (const element of elements) {\n if (element.code === targetCode) {\n return element;\n }\n\n // If not found, search in nested 'elementen' recursively\n const foundInSubElement = findElement(element.elementen, targetCode);\n if (foundInSubElement) {\n return foundInSubElement;\n }\n }\n\n return null; // Return null if the code is not found\n};\n\nconst mapRapportageElementenToUi: any = createMapToUi(rapportageElementSchema).from<\n RapportageElement,\n RapportageElement | undefined\n>({\n code: v => v.code,\n geselecteerd: v => v.geselecteerd,\n naam: (v, def) => (v.naamWeergevenAlsTitel ? v.naam : def?.naam ?? v.naam),\n naamWeergevenAlsTitel: v => v.naamWeergevenAlsTitel,\n soortElement: v => (v.soortElement as unknown) as RapportageElementSoort,\n volgnummer: v => v.volgnummer,\n elementen: (v, def) =>\n v.elementen?.map(c => mapRapportageElementenToUi(c, findElement(def ? def.elementen : null, c.code))),\n kolommen: (v, def) =>\n def\n ? def.kolommen?.map(x => {\n return {\n kolomTitel: x,\n kolomNaam: x.replace(/ /g, \"\"),\n selected: v.kolommen?.includes(x.replace(/ /g, \"\")) ?? false\n };\n })\n : v.kolommen?.map(x => {\n return {\n kolomTitel: x,\n kolomNaam: x.replace(/ /g, \"\"),\n selected: false\n }; // default structuur\n }),\n inhoud: v => v.inhoud || null,\n defaultInhoud: v => v.defaultInhoud || null,\n perAdviesAanpasbaar: v => v.inhoudWijzigbaar,\n inhoudBeschikbaar: v => v.inhoudBeschikbaar ?? true\n});\n\nconst mapKolommenLastenToUi = createMapToUi(kolommenLastenSchema).from<RapportageKolommenLasten>({\n brutoInkomen: v => v.brutoInkomen,\n brutoLast: v => v.brutoLast,\n fiscaalVoordeel: v => v.fiscaalVoordeel,\n huur: v => v.huur,\n hypotheekAflossing: v => v.hypotheekAflossing,\n kredietLast: v => v.kredietLast,\n nettoLast: v => v.nettoLast,\n opnameUitDepot: v => v.opnameUitDepot,\n overigeUitgaven: v => v.overigeUitgaven,\n rente: v => v.rente,\n somHypotheken: v => v.somHypotheken,\n spaarBeleggingsdepots: v => v.spaarBeleggingsdepots,\n uitkeringKapitaalverzekering: v => v.uitkeringKapitaalverzekering,\n verzekeringspremies: v => v.verzekeringspremies,\n vrh: v => v.vrh,\n waardeopbouw: v => v.waardeopbouw\n});\nconst mapKolommenNbiToUi = createMapToUi(kolommenNbiSchema).from<RapportageKolommenNbi>({\n brutoLast: v => v.brutoLast,\n hypotheek: v => v.hypotheek,\n inkomstenbelasting: v => v.inkomstenbelasting,\n kredietLast: v => v.kredietLast,\n nbi: v => v.nbi,\n nettoInkomen: v => v.nettoInkomen,\n overigeUitgaven: v => v.overigeUitgaven,\n spaarBeleggingsdepots: v => v.spaarBeleggingsdepots,\n verzekeringen: v => v.verzekeringen,\n vrh: v => v.vrh\n});\n\nconst mapRapportageKolomSelectieToUi = createMapToUi(kolommenInstellenModalSchema).from<RapportageKolomselectie>({\n kolommenLasten: v => mapKolommenLastenToUi(v.kolommenLasten),\n kolommenNbi: v => mapKolommenNbiToUi(v.kolommenNbi)\n});\n\nconst mapRapportageStructuurToUi = createMapToUi(rapportageStructuurSchema).from<\n RapportageStructuur,\n RapportageStructuur | undefined\n>({\n elementen: (v, z) => v.elementen.map(c => mapRapportageElementenToUi(c, findElement(z ? z.elementen : null, c.code))),\n kolomselectie: v => mapRapportageKolomSelectieToUi(v.kolomselectie),\n naam: v => v.naam,\n standaardRapport: v => v.standaardRapport,\n structuurId: v => v.structuurId,\n volgnummer: v => v.volgnummer,\n isVerwijderbaar: v => v.isVerwijderbaar\n});\n\nconst dl2ui = createMapToUi(rapportageSamenstellenSchema).from<Rapportage, RapportageStructuur | undefined>({\n structuren: (v, z) =>\n v.structuren\n .filter(x => x.standaardRapport !== StandaardRapportOptions.Standaardrapport)\n .map(c => mapRapportageStructuurToUi(c, z)),\n defaultStructuur: (_, z) => mapRapportageStructuurToUi(z, undefined),\n movetoparent: _ => null\n});\n\nexport function mapRapportageSamenstellenDlToUi(data: RapportageOutput | null): RapportageSamenstellenState | null {\n const rapporageSamenstellen = data && data.rapportage ? data.rapportage : null;\n\n if (!rapporageSamenstellen) return null;\n\n const defaultStructuur = rapporageSamenstellen.structuren.find(\n c => c.standaardRapport === StandaardRapportOptions.Standaardrapport\n );\n\n const res = dl2ui(rapporageSamenstellen, defaultStructuur);\n\n return res;\n}\n","import { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\n\nimport {\n kolommenInstellenModalSchema,\n kolommenLastenSchema,\n kolommenNbiSchema,\n rapportageElementSchema,\n rapportageSamenstellenSchema,\n rapportageStructuurSchema\n} from \"../../shared/components/rapportage/rapportage-samenstellen-schema\";\nimport {\n Rapportage,\n RapportageStructuur,\n RapportageElement,\n RapportageKolomselectie,\n RapportageKolommenNbi,\n RapportageKolommenLasten,\n SoortElementOptions as RapportageElementSoortInstellingen\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { RapportageElementSoort } from \"../../shared/components/rapportage/infra/rapportage-structuur-types\";\nimport { RapportageElementType } from \"../../shared/components/rapportage/infra/rapportage-samenstellen-types\";\n\nexport const mapSoortElement = (soortElement: RapportageElementSoort): RapportageElementSoortInstellingen => {\n switch (soortElement) {\n case RapportageElementSoort.Grafiek:\n return RapportageElementSoortInstellingen.Grafiek;\n case RapportageElementSoort.Hoofdstuk:\n return RapportageElementSoortInstellingen.Hoofdstuk;\n case RapportageElementSoort.Koptekst:\n return RapportageElementSoortInstellingen.Koptekst;\n case RapportageElementSoort.Onderdeel:\n return RapportageElementSoortInstellingen.Onderdeel;\n case RapportageElementSoort.Tabel:\n return RapportageElementSoortInstellingen.Tabel;\n case RapportageElementSoort.Tekstblok:\n return RapportageElementSoortInstellingen.Tekstblok;\n }\n};\n\nexport const mapRapportageElementToDl: any = createMapToDl(rapportageElementSchema).to<RapportageElement>({\n code: v => v.code,\n elementen: v => v.elementen.map((c: RapportageElementType) => mapRapportageElementToDl(c)),\n kolommen: v => v.kolommen.filter(x => x.selected).map(c => c.kolomNaam),\n geselecteerd: v => v.geselecteerd,\n naam: v => v.naam,\n soortElement: v => mapSoortElement(v.soortElement),\n volgnummer: v => v.volgnummer,\n inhoud: v => v.inhoud,\n defaultInhoud: v => v.defaultInhoud,\n inhoudWijzigbaar: v => v.perAdviesAanpasbaar,\n naamWeergevenAlsTitel: v => v.naamWeergevenAlsTitel,\n defaultGeselecteerdVoor: _ => null,\n inhoudBeschikbaar: v => v.inhoudBeschikbaar\n});\n\nexport const mapKolommenLastenToDl = createMapToDl(kolommenLastenSchema).to<RapportageKolommenLasten>({\n brutoInkomen: v => v.brutoInkomen,\n brutoLast: v => v.brutoLast,\n fiscaalVoordeel: v => v.fiscaalVoordeel,\n huur: v => v.huur,\n hypotheekAflossing: v => v.hypotheekAflossing,\n kredietLast: v => v.kredietLast,\n nettoLast: v => v.nettoLast,\n opnameUitDepot: v => v.opnameUitDepot,\n overigeUitgaven: v => v.overigeUitgaven,\n rente: v => v.rente,\n somHypotheken: v => v.somHypotheken,\n spaarBeleggingsdepots: v => v.spaarBeleggingsdepots,\n uitkeringKapitaalverzekering: v => v.uitkeringKapitaalverzekering,\n verzekeringspremies: v => v.verzekeringspremies,\n vrh: v => v.vrh,\n waardeopbouw: v => v.waardeopbouw\n});\n\nexport const mapKolommenNbiToDl = createMapToDl(kolommenNbiSchema).to<RapportageKolommenNbi>({\n brutoLast: v => v.brutoLast,\n hypotheek: v => v.hypotheek,\n inkomstenbelasting: v => v.inkomstenbelasting,\n kredietLast: v => v.kredietLast,\n nbi: v => v.nbi,\n nettoInkomen: v => v.nettoInkomen,\n overigeUitgaven: v => v.overigeUitgaven,\n spaarBeleggingsdepots: v => v.spaarBeleggingsdepots,\n verzekeringen: v => v.verzekeringen,\n vrh: v => v.vrh\n});\n\nexport const mapKolomSelectieToDl = createMapToDl(kolommenInstellenModalSchema).to<RapportageKolomselectie>({\n kolommenLasten: v => mapKolommenLastenToDl(v.kolommenLasten),\n kolommenNbi: v => mapKolommenNbiToDl(v.kolommenNbi)\n});\n\nexport const mapRapportageStructuurToDl = createMapToDl(rapportageStructuurSchema).to<RapportageStructuur>({\n elementen: v => v.elementen.map(c => mapRapportageElementToDl(c)),\n kolomselectie: v => mapKolomSelectieToDl(v.kolomselectie),\n naam: v => v.naam,\n standaardRapport: v => v.standaardRapport,\n structuurId: v => v.structuurId,\n volgnummer: v => v.volgnummer,\n isVerwijderbaar: v => v.isVerwijderbaar\n});\n\nexport const mapRapportageSamenstellenUiToDl = createMapToDl(rapportageSamenstellenSchema).to<Rapportage>({\n structuren: v => v.structuren.map(c => mapRapportageStructuurToDl(c))\n});\n","import {\n AdviesBoxFormik,\n LabeledSelectInput,\n LabeledText,\n LabeledTextInput,\n LabeledCheckBox,\n useFeature,\n CheckBox\n} from \"adviesbox-shared\";\nimport { FormikProps, getIn, setIn, useFormikContext } from \"formik\";\nimport React, { ReactElement, useMemo } from \"react\";\nimport { LabelValuePairs } from \"../../types\";\nimport Modal from \"../modal/Modal\";\nimport { RapportageSamenstellenState, RapportageElementType } from \"./infra/rapportage-samenstellen-types\";\nimport { rapportageSamenstellenSchema } from \"./rapportage-samenstellen-schema\";\nimport { Button } from \"react-bootstrap\";\nimport { RapportageElementSoort } from \"./infra/rapportage-structuur-types\";\n\ntype TitelAanpassen = {\n onSave?: (data: any) => void;\n closeModal?: () => void;\n parent: string;\n adoptionList?: LabelValuePairs;\n};\n\nconst findElement = (elements: RapportageElementType[], targetCode: number): RapportageElementType | null => {\n for (const element of elements) {\n if (element.code === targetCode) {\n return element;\n }\n\n // If not found, search in nested 'elementen' recursively\n const foundInSubElement = findElement(element.elementen, targetCode);\n if (foundInSubElement) {\n return foundInSubElement;\n }\n }\n\n return null; // Return null if the code is not found\n};\n\nexport const TitelAanpassenModal = ({ onSave, closeModal, parent, adoptionList }: TitelAanpassen): ReactElement => {\n const { values } = useFormikContext<RapportageSamenstellenState>();\n const featureRapport2 = useFeature(\"FeatureRapport2\");\n const elementData: RapportageElementType = getIn(values, parent);\n const defaultElement = useMemo(() => findElement(values.defaultStructuur.elementen, elementData.code), [\n values.defaultStructuur.elementen,\n elementData.code\n ]);\n\n const body = (\n setFieldValue: (field: string, value: any, shouldValidate?: boolean | undefined) => void\n ): ReactElement => {\n return (\n <>\n <LabeledText value={elementData.naam} caption={\"Huidige titel\"} />\n\n <LabeledCheckBox caption=\"Titel weergeven\" name={`${parent}.naamWeergevenAlsTitel`}></LabeledCheckBox>\n {elementData.naamWeergevenAlsTitel && (\n <LabeledTextInput name={`${parent}.naam`} caption={\"Nieuwe titel\"} fieldSize={\"xxl\"} />\n )}\n {adoptionList && elementData.soortElement !== RapportageElementSoort.Tekstblok && (\n <LabeledSelectInput caption={\"Dit element verplaatsen naar\"} name={\"movetoparent\"} options={adoptionList} />\n )}\n {elementData.soortElement === RapportageElementSoort.Tekstblok && (\n <>\n {elementData.inhoudBeschikbaar && (\n <>\n <LabeledTextInput\n name={`${parent}.inhoud`}\n value={elementData.inhoud ?? \"\"}\n caption={\"Inhoud\"}\n fieldSize={\"xxl\"}\n textarea={5}\n />\n <LabeledCheckBox\n caption=\"Per advies aanpasbaar\"\n name={`${parent}.perAdviesAanpasbaar`}\n ></LabeledCheckBox>\n </>\n )}\n\n <Button\n onClick={() => {\n if (featureRapport2) {\n const defaultInhoud = defaultElement?.inhoud ?? \"\";\n setFieldValue(`${parent}.inhoud`, defaultInhoud);\n } else {\n setFieldValue(`${parent}.inhoud`, elementData.defaultInhoud);\n }\n }}\n data-testid={`${parent}-testid`}\n >\n Terug naar ABO-default\n </Button>\n </>\n )}\n\n {elementData.soortElement === RapportageElementSoort.Tabel && (\n <>\n <h2>Kolommen</h2>\n {defaultElement?.kolommen.map((x, index) => (\n <CheckBox\n key={`${parent}.kolommen[${index}]`}\n caption={x.kolomTitel}\n name={`${parent}.kolommen[${index}].selected`}\n ></CheckBox>\n ))}\n </>\n )}\n\n {elementData.soortElement === RapportageElementSoort.Grafiek && (\n <>\n <h2>Legenda</h2>\n {defaultElement?.kolommen.map((x, index) => (\n <CheckBox\n key={`${parent}.kolommen[${index}]`}\n caption={x.kolomTitel}\n name={`${parent}.kolommen[${index}].selected`}\n ></CheckBox>\n ))}\n </>\n )}\n </>\n );\n };\n\n return (\n <AdviesBoxFormik<RapportageSamenstellenState>\n initialValues={{ ...values }}\n validationSchema={rapportageSamenstellenSchema}\n onSave={values => {\n let newValues = values;\n\n if (values.movetoparent) {\n const elementToMove = getIn(newValues, parent);\n const arrayToAddTo = getIn(newValues, values.movetoparent);\n\n const nameList = parent.split(\".\");\n\n nameList.pop();\n\n const parentListName = nameList.join(\".\");\n\n const parentList = getIn(newValues, parentListName).elementen;\n\n const filteredParentList = parentList\n .filter((c: any) => {\n return c !== elementToMove;\n })\n .map((c: any, i: number) => ({ ...c, volgnummer: i + 1 }));\n\n newValues = setIn(newValues, `${parentListName}.elementen`, filteredParentList);\n newValues = setIn(\n newValues,\n `${values.movetoparent}.elementen`,\n [...arrayToAddTo.elementen, elementToMove].map((c: any, i: number) => ({ ...c, volgnummer: i + 1 }))\n );\n }\n onSave && onSave(newValues);\n }}\n closeModal={closeModal}\n render={({ submitForm, setFieldValue, values }: FormikProps<RapportageSamenstellenState>): ReactElement => (\n <>\n <Modal\n title=\"Titel aanpassen\"\n body={body(setFieldValue)}\n onSubmitClick={submitForm}\n onCancelClick={closeModal}\n />\n </>\n )}\n />\n );\n};\n","import { Icon, ModalButton } from \"adviesbox-shared\";\nimport { LabelValuePairs } from \"adviesbox-shared/utils/types\";\nimport classNames from \"classnames\";\nimport { Field, getIn, useFormikContext } from \"formik\";\nimport React, { ReactElement, useCallback, useState } from \"react\";\nimport {\n DragDropContext,\n Draggable,\n DraggableProvided,\n DraggableProvidedDragHandleProps,\n DraggableStateSnapshot,\n Droppable,\n DropResult\n} from \"react-beautiful-dnd\";\nimport { Button, Collapse } from \"react-bootstrap\";\nimport {\n RapportageSamenstellenState,\n RapportageStructuurType,\n RapportageElementType\n} from \"./infra/rapportage-samenstellen-types\";\nimport { RapportageElementSoort } from \"./infra/rapportage-structuur-types\";\nimport classes from \"./rapportage-structuur.module.scss\";\nimport { TitelAanpassenModal } from \"./titel-aanpassen-modal\";\n\nexport type RapportageStructuurSamenstellenProps = {\n element: RapportageElementType;\n parentKey: number;\n parent: string;\n dragableProps?: any;\n dragHandleProps?: DraggableProvidedDragHandleProps;\n isDragging?: boolean;\n setForceCloseByParrent?: any;\n forceCloseByParrent?: boolean;\n adoptionList?: LabelValuePairs;\n};\n\nexport const RapportageStructuurElementen = ({\n element,\n parentKey,\n parent,\n dragableProps,\n dragHandleProps,\n isDragging,\n adoptionList\n}: RapportageStructuurSamenstellenProps): ReactElement => {\n const [open, setOpen] = useState(false);\n const { values, setFieldValue } = useFormikContext<RapportageSamenstellenState>();\n\n /* istanbul ignore next reason: Unable to test drag and drop functionality using @testing-library/react. An update for this should be on the roadmap of rtl */\n const handleOnDragEnd = useCallback(\n (result: DropResult): void => {\n const elementName = result.draggableId;\n const destructedElementName = elementName.split(\".\");\n\n destructedElementName.pop();\n\n const parentName = destructedElementName.join(\".\");\n const parentState = getIn(values, parentName);\n\n const elementen = parentState.elementen;\n\n const [reorderedItem] = elementen.splice(result.source.index, 1);\n elementen.splice(result.destination?.index, 0, reorderedItem);\n\n setFieldValue(`${parentName}.elementen`, elementen);\n },\n [values, setFieldValue]\n );\n\n const dragAndDropIconPrefab = (): ReactElement => {\n return (\n <span className={classes.drag_n_drop_wrapper} {...dragHandleProps}>\n {parentKey > 0 && <Icon name={\"drag\"} />}\n </span>\n );\n };\n\n const spacersPrefab = (): ReactElement[] => {\n return [...new Array(parentKey)].map((_v: undefined, index: number) => {\n return <div key={`${parent}[${index}]`} className={classes.spacer}></div>;\n });\n };\n\n /* istanbul ignore next */\n const setAllChildrenValuesBasedOnParentReference = (elem: RapportageElementType): void => {\n elem.elementen.forEach(e => {\n e.geselecteerd = elem.geselecteerd;\n if (e.elementen.length) {\n setAllChildrenValuesBasedOnParentReference(e);\n }\n });\n };\n\n /* istanbul ignore next */\n const setParentValueBasedOnChildReference = (\n elem: RapportageElementType | RapportageStructuurType,\n currentPath: string\n ): void => {\n if (!(\"geselecteerd\" in elem)) return;\n const pathArray = currentPath.split(\".\");\n pathArray.pop();\n const path = pathArray.join(\".\");\n const parentElem: RapportageElementType | RapportageStructuurType = getIn(values, path);\n if (\"geselecteerd\" in parentElem) {\n parentElem.geselecteerd = true;\n setFieldValue(`${path}.geselecteerd`, true);\n setParentValueBasedOnChildReference(parentElem, path);\n return;\n }\n };\n\n const checkboxPrefab = (): ReactElement => {\n return (\n <span className={classes.checkbox_wrapper}>\n <Field\n onChange={\n /* istanbul ignore next */ () => {\n const parentElementClone: RapportageElementType = {\n ...getIn(values, parent)\n };\n parentElementClone.geselecteerd = !parentElementClone.geselecteerd;\n setAllChildrenValuesBasedOnParentReference(parentElementClone);\n\n if (parentElementClone.geselecteerd) {\n setParentValueBasedOnChildReference(parentElementClone, parent);\n }\n\n setFieldValue(`${parent}`, parentElementClone);\n }\n }\n name={`${parent}.geselecteerd`}\n type={\"checkbox\"}\n />\n </span>\n );\n };\n\n const expandButtonPrefab = (): ReactElement => {\n return (\n <span className={classes.expand_wrapper}>\n {/* eslint-disable-next-line react/prop-types */}\n {element.elementen && element.elementen.length > 0 && (\n <Button\n onClick={() => setOpen(!open)}\n aria-expanded={open}\n aria-controls={`table_collapse_${parentKey}`}\n variant={\"light\"}\n className={classNames(classes.expand_btn, \"font-weight-bold\")}\n data-testid={`${parent}-expand-btn`}\n >\n {open ? \"-\" : \"+\"}\n </Button>\n )}\n </span>\n );\n };\n\n const editButtonPrefab = (): ReactElement | boolean => {\n return (\n !isDragging &&\n parentKey > 0 && (\n <div className={classes.edit_cell}>\n <ModalButton\n parent={`${parent}`}\n aria-label=\"Titel aanpassen\"\n size=\"lg\"\n content={<Icon name={\"pencil\"} />}\n data-testid={`${parent}.naam-aanpassen-btn`}\n >\n <TitelAanpassenModal\n parent={parent}\n onSave={(data: any) => {\n setFieldValue(\"structuren\", data.structuren);\n }}\n adoptionList={adoptionList}\n />\n </ModalButton>\n </div>\n )\n );\n };\n\n let elementName = element.naam;\n switch (element.soortElement) {\n case RapportageElementSoort.Tekstblok:\n elementName = `Tekstblok: ${elementName}`;\n break;\n case RapportageElementSoort.Tabel:\n elementName = `Tabel: ${elementName}`;\n break;\n case RapportageElementSoort.Grafiek:\n elementName = `Grafiek: ${elementName}`;\n break;\n }\n\n return (\n <>\n <div key={parent} style={{ position: \"relative\" }} {...dragableProps}>\n <div className={classes.main_cell}>\n {dragAndDropIconPrefab()}\n\n {spacersPrefab()}\n\n {expandButtonPrefab()}\n\n {checkboxPrefab()}\n\n <span className={classNames(classes.label_wrapper, \"name-span\")} data-testid={`${parent}.naam`}>\n {elementName}\n </span>\n </div>\n\n {element.elementen && element.elementen.length > 0 && (\n <Collapse in={open} key={`collapse_${parentKey}`}>\n <div id={`table_collapse_${parentKey}`}>\n <DragDropContext onDragEnd={handleOnDragEnd}>\n <Droppable droppableId={parent} type={parent} mode={\"standard\"}>\n {providedParrent => (\n <div\n {...providedParrent.droppableProps}\n ref={providedParrent.innerRef}\n onDragCapture={e => e.stopPropagation()}\n >\n {element.elementen.map((v: RapportageElementType, i: number) => {\n return (\n <Draggable\n key={`${parent}.elementen[${i}]`}\n draggableId={`${parent}.elementen[${i}]`}\n index={i}\n >\n {(providedChild, snapshot) => {\n const dragHandleProps = getDragHandleProp(providedChild, snapshot, parent, i);\n\n return (\n <div style={{ position: \"relative\" }}>\n <RapportageStructuurElementen\n element={v}\n key={`${parent}.elementen[${i}]`}\n parentKey={parentKey + 1}\n parent={`${parent}.elementen[${i}]`}\n dragableProps={dragHandleProps}\n dragHandleProps={providedChild.dragHandleProps}\n isDragging={snapshot.isDragging}\n adoptionList={adoptionList}\n />\n </div>\n );\n }}\n </Draggable>\n );\n })}\n {providedParrent.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n </div>\n </Collapse>\n )}\n\n {editButtonPrefab()}\n </div>\n </>\n );\n};\n\nfunction getDragHandleProp(\n providedChild: DraggableProvided,\n snapshot: DraggableStateSnapshot,\n parent: string,\n i: number\n): any {\n const style = {\n ...providedChild.draggableProps.style,\n borderTop: \"1px solid var(--darkest-grey)\",\n borderRight: \"1px solid var(--darkest-grey)\",\n backgroundColor: \"white\",\n paddingTop: \"-10px\",\n paddingBottom: \"10px\"\n };\n\n return {\n ref: providedChild.innerRef,\n ...providedChild.draggableProps,\n style: snapshot.isDragging ? style : providedChild.draggableProps.style,\n \"data-testid\": `${parent}.elementen[${i}].handle`\n };\n}\n","import { LabelValuePairs } from \"adviesbox-shared/utils/types\";\nimport React, { ReactElement, useCallback, useEffect } from \"react\";\nimport { RapportageElementSoort } from \"./infra/rapportage-structuur-types\";\nimport { RapportageStructuurElementen } from \"./rapportage-structuur-elementen\";\nimport classes from \"./rapportage-structuur.module.scss\";\nimport { RapportageElementType } from \"./infra/rapportage-samenstellen-types\";\n\nexport type RapportageStructuurProps = {\n elementen: RapportageElementType[];\n parentKey: number;\n parent: string;\n};\n\nexport const RapportageStructuur = ({ elementen, parent, parentKey }: RapportageStructuurProps): ReactElement => {\n const flattened: LabelValuePairs = [];\n\n const flattenElements = useCallback(\n (e: RapportageElementType[], parent, layer = 0): void => {\n e.forEach((el, i) => {\n if (\n el.soortElement === RapportageElementSoort.Onderdeel ||\n el.soortElement === RapportageElementSoort.Hoofdstuk\n ) {\n flattened.push({\n value: `${parent}.elementen[${i}]`,\n label: \"- \".repeat(layer) + el.naam\n });\n\n flattenElements(el.elementen, `${parent}.elementen[${i}]`, layer + 1);\n }\n });\n },\n [flattened]\n );\n\n useEffect(() => {\n flattenElements(elementen, parent);\n }, [flattenElements, elementen, parent]);\n\n return (\n <div className={classes.structuur_table}>\n {elementen.map((element: RapportageElementType, i: number) => {\n return (\n <RapportageStructuurElementen\n element={element}\n key={`${parent}.elementen[${i}]`}\n parentKey={parentKey}\n parent={`${parent}.elementen[${i}]`}\n adoptionList={flattened}\n />\n );\n })}\n </div>\n );\n};\n","import React, { ReactElement } from \"react\";\nimport { FormikProps } from \"formik\";\nimport { KolommenInstellenModalState } from \"../shared/components/rapportage/infra/rapportage-samenstellen-types\";\nimport { kolommenInstellenModalSchema } from \"../shared/components/rapportage/rapportage-samenstellen-schema\";\nimport Modal from \"../shared/components/modal/Modal\";\nimport { AdviesBoxFormik, CheckBox } from \"adviesbox-shared\";\n\nexport type KolommenInstellenModalProps = {\n saveModal: (data: KolommenInstellenModalState) => void;\n closeModal?: () => void;\n values: KolommenInstellenModalState;\n rapportNaam: string;\n};\nconst KolommenInstellenModal = ({\n closeModal,\n saveModal,\n values,\n rapportNaam\n}: KolommenInstellenModalProps): ReactElement => {\n const body = (): ReactElement => {\n return (\n <div className={\"p-3\"}>\n <p>\n In dit scherm kunt u aangeven welke kolommen in de lastenoverzichten en in het overzicht netto ā€˜besteedbaar\n inkomenā€™ moeten worden opgenomen. Het aantal kolommen dat op de pagina past is afhankelijk van de afdrukstand.\n Kolommen met alleen nulwaarden worden niet in de tabellen opgenomen.\n </p>\n <p>\n Let op! Bij de ā€˜staandeā€™ afdrukstand passen maximaal 9 kolommen op de pagina. In ā€˜liggendeā€™ afdrukstand passen\n maximaal 14 kolommen op de pagina.\n </p>\n <h2 className={\"px-0\"}>Kolommen in de lastenoverzichten</h2>\n <CheckBox name={\"kolommenLasten.brutoInkomen\"} caption={\"Bruto inkomen\"}></CheckBox>\n <CheckBox name={\"kolommenLasten.somHypotheken\"} caption={\"Som hypotheken\"}></CheckBox>\n <CheckBox name={\"kolommenLasten.waardeopbouw\"} caption={\"Waardeopbouw\"}></CheckBox>\n <CheckBox name={\"kolommenLasten.huur\"} caption={\"Huur\"}></CheckBox>\n <CheckBox name={\"kolommenLasten.rente\"} caption={\"Rente\"}></CheckBox>\n <CheckBox name={\"kolommenLasten.hypotheekAflossing\"} caption={\"Hypotheek aflossing\"}></CheckBox>\n <CheckBox\n name={\"kolommenLasten.uitkeringKapitaalverzekering\"}\n caption={\"Uitkering kapitaalverzekering\"}\n ></CheckBox>\n <CheckBox name={\"kolommenLasten.verzekeringspremies\"} caption={\"Verzekeringspremies\"}></CheckBox>\n <CheckBox name={\"kolommenLasten.spaarBeleggingsdepots\"} caption={\"Spaar- en beleggingsdepots\"}></CheckBox>\n <CheckBox name={\"kolommenLasten.opnameUitDepot\"} caption={\"Opname uit depot\"}></CheckBox>\n <CheckBox name={\"kolommenLasten.kredietLast\"} caption={\"Krediet last\"}></CheckBox>\n <CheckBox name={\"kolommenLasten.overigeUitgaven\"} caption={\"Overige uitgaven\"}></CheckBox>\n <CheckBox name={\"kolommenLasten.brutoLast\"} caption={\"Bruto last\"}></CheckBox>\n <CheckBox name={\"kolommenLasten.fiscaalVoordeel\"} caption={\"Fiscaal voordeel\"}></CheckBox>\n <CheckBox name={\"kolommenLasten.vrh\"} caption={\"VRH\"}></CheckBox>\n <CheckBox name={\"kolommenLasten.nettoLast\"} caption={\"Netto last\"}></CheckBox>\n <h2 className={\"px-0\"}>Kolommen in het netto besteedbaar inkomen overzicht</h2>\n <CheckBox name={\"kolommenNbi.hypotheek\"} caption={\"Hypotheek\"}></CheckBox>\n <CheckBox name={\"kolommenNbi.verzekeringen\"} caption={\"Verzekeringen\"}></CheckBox>\n <CheckBox name={\"kolommenNbi.spaarBeleggingsdepots\"} caption={\"Spaar- en beleggingsdepots\"}></CheckBox>\n <CheckBox name={\"kolommenNbi.kredietLast\"} caption={\"Krediet last\"}></CheckBox>\n <CheckBox name={\"kolommenNbi.overigeUitgaven\"} caption={\"Overige uitgaven\"}></CheckBox>\n <CheckBox name={\"kolommenNbi.brutoLast\"} caption={\"Bruto last\"}></CheckBox>\n <CheckBox name={\"kolommenNbi.inkomstenbelasting\"} caption={\"Inkomstenbelasting\"}></CheckBox>\n <CheckBox name={\"kolommenNbi.vrh\"} caption={\"VRH\"}></CheckBox>\n <CheckBox name={\"kolommenNbi.nettoInkomen\"} caption={\"Netto inkomen\"}></CheckBox>\n <CheckBox name={\"kolommenNbi.nbi\"} caption={\"Netto besteedbaar inkomen\"}></CheckBox>\n </div>\n );\n };\n\n return (\n <AdviesBoxFormik<KolommenInstellenModalState>\n initialValues={values}\n validationSchema={kolommenInstellenModalSchema}\n onSave={saveModal}\n closeModal={closeModal}\n render={({ values, submitForm }: FormikProps<KolommenInstellenModalState>): ReactElement => {\n return (\n <>\n <Modal\n title={`Kolomselectie overzichten in ${rapportNaam}`}\n body={body()}\n onSubmitClick={submitForm}\n onCancelClick={closeModal}\n />\n </>\n );\n }}\n />\n );\n};\n\nKolommenInstellenModal.displayName = \"KolommenInstellenModal\";\n\nexport default KolommenInstellenModal;\n","import {\n Card,\n CardWrapper,\n DataGrid,\n FormFirstFocus,\n Icon,\n Label,\n LabeledTextInput,\n ModalButton,\n PlatformFoutenSamenvatting,\n useFeature\n} from \"adviesbox-shared\";\nimport { Form, FormikProps, useFormikContext, FormikContextType } from \"formik\";\nimport React, { ReactElement, useContext, useState } from \"react\";\nimport { Column, CellInfo } from \"react-table-6\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport {\n KolommenInstellenModalState,\n RapportageSamenstellenProps,\n RapportageSamenstellenState,\n RapportageStructuurType\n} from \"../shared/components/rapportage/infra/rapportage-samenstellen-types\";\nimport { defaultElementen } from \"../shared/components/rapportage/infra/rapportage-structuur-types\";\nimport {\n rapportageSamenstellenSchema,\n rapportageStructuurSchema\n} from \"../shared/components/rapportage/rapportage-samenstellen-schema\";\nimport { RapportageStructuur } from \"../shared/components/rapportage/rapportage-structuur\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport KolommenInstellenModal from \"./kolommen-instellen-modal\";\nimport { StandaardRapportOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nexport const getNewRapportageStructuurFactory = (\n nextVolgnummer: number,\n defaultStructuur: RapportageStructuurType\n): RapportageStructuurType => {\n const newRapportageStructuur = {\n ...defaultStructuur,\n structuurId: null,\n isVerwijderbaar: true,\n standaardRapport: StandaardRapportOptions.VolledigFinancieelPlan\n };\n newRapportageStructuur.naam = \"Volledig Financieel Plan\";\n newRapportageStructuur.volgnummer = nextVolgnummer;\n\n return newRapportageStructuur;\n};\n\n// Toon alleen een delete button als isVerwijderbaar true is\nconst DeleteButton = ({\n row,\n formik\n}: {\n row: CellInfo;\n formik: FormikContextType<RapportageSamenstellenState>;\n}): ReactElement => {\n const { setFieldValue, values } = formik;\n const onClick = (): void => {\n const curr = values.structuren;\n curr?.splice(row.index, 1);\n setFieldValue(\"structuren\", curr);\n setFieldValue(\"dirty\", true);\n };\n\n return (\n <>\n {row.original.isVerwijderbaar && (\n <div data-testid={`delete-rapportage-${row.index}`} id={`delete-rapportage-${row.index}`} onClick={onClick}>\n <Icon name=\"prullenbak\" alt=\"prullenbak\" />\n </div>\n )}\n </>\n );\n};\n\nconst RapportageSamenstellenComponent = (\n props: FormikProps<RapportageSamenstellenState> &\n RapportageSamenstellenProps &\n WithSaveData<RapportageSamenstellenState>\n): ReactElement => {\n const { values, setFieldValue } = useFormikContext<RapportageSamenstellenState>();\n const selectedState = useState(0);\n const [selected] = selectedState;\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n const featureRapport2 = useFeature(\"FeatureRapport2\");\n\n // TODO: re-enable when platform issues are all fixed\n\n // const [filesLength, setFilesLength] = useState<number>(0);\n // const filesRef = useRef<FileWithName[]>([]);\n\n // const { params, user } = useRequestInit();\n\n // const extraHeaders = useMemo((): UseRequestInitOptions => {\n // return {\n // method: \"GET\",\n // extraHeaders: {\n // \"content-type\": \"application/json\"\n // }\n // };\n // }, []);\n\n //const { settings } = useRequestInit(extraHeaders);\n\n // const rapportageImportUrl = `${settings.instellingenFormsOrigin}/Rapportage/Import`;\n\n // if (!user) {\n // return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n // }\n\n const rapportageSamenstellenMasterDetailDataGrid: Column[] = [\n {\n Header: \"Naam rapportstructuur\",\n accessor: \"naam\"\n },\n // {\n // id: \"downloadRapportage\",\n // /* eslint-disable react/display-name */\n // Cell: (c): ReactElement => (\n // <Button\n // size={\"sm\"}\n // variant={\"seconday\"}\n // onMouseUp={async () => {\n // await downloadRapportageFile(settings, requestInit, c.index);\n // }}\n // data-testid={`download-rapportage-${c.index}`}\n // >\n // <Icon name={\"download\"} key={c.index} />\n // </Button>\n // ),\n // width: 40\n // },\n {\n Cell: c => DeleteButton({ formik: props, row: c }),\n maxWidth: 30\n }\n ];\n\n return (\n <FormFirstFocus>\n <Form className={\"px-3\"}>\n <PlatformFoutenSamenvatting />\n <fieldset disabled={!isBeheerder}>\n <CardWrapper>\n <div className=\"text-container\">\n <h2>Rapportage samenstellen</h2>\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n {/* <SaveButton\n context={{\n ...props,\n saveData: saveDataWithFiles(\n user,\n params.vestiging ?? \"\",\n rapportageImportUrl,\n settings.OcpApimSubscriptionKey,\n filesRef.current,\n mapRapportageImporterenDlTargerToUiField\n )\n }}\n btnTekst={`${filesLength === 1 ? \"bestand\" : filesLength + \" bestanden\"} opslaan`}\n /> */}\n </div>\n </CardWrapper>\n <CardWrapper className=\"master-detail-card flex-grow-1\" maxRowCount={4}>\n <Card className=\"w-xl-100 w-lg-100 w-md-50 w-50 master-detail-card\">\n <DataGrid\n masterDetail\n rowSelected={selectedState}\n columns={rapportageSamenstellenMasterDetailDataGrid}\n name=\"structuren\"\n showButtonDelete\n showButtonAddRow\n validationSchema={rapportageStructuurSchema}\n // additionalButton={\n // <ModalButton\n // parent=\"rapportagestructuur-importeren\"\n // size=\"lg\"\n // content={\"Rapportstructuur importeren\"}\n // className={\"ml-3 btn-primary\"}\n // >\n // <RapportageImporterenModal\n // saveModal={(files: File[]) => {\n // setFilesLength(files.length);\n // setFieldValue(\"newFileAdded\", true);\n // filesRef.current = files.map(file => ({ ...file, name: \"rapportStructuurImportBestand\" }));\n // return files;\n // }}\n // />\n // </ModalButton>\n // }\n getNewRowValues={() => {\n const volgnummers = values.structuren.map(c => c.volgnummer);\n const nextVolgnummer =\n volgnummers.length > 0 ? /* istanbul ignore next */ Math.max(...volgnummers) + 1 : 1;\n return featureRapport2\n ? getNewRapportageStructuurFactory(nextVolgnummer, values.defaultStructuur)\n : getNewRapportageStructuurFactory(nextVolgnummer, {\n ...rapportageStructuurSchema.default(),\n elementen: defaultElementen\n });\n }}\n />\n </Card>\n {values.structuren[selected] && (\n <Card title=\"Algemene instellingen\" className=\"w-xl-100 w-lg-100 w-md-50 w-50\">\n <div className={\"w-50\"}>\n <LabeledTextInput name={`structuren[${selected}].naam`} caption={\"Naam rapportstructuur\"} />\n\n <div className={\"row px-1\"}>\n <div className={\"col-6\"}>\n <Label caption={\"Kolommen instellen\"} />\n </div>\n <div className={\"col-6 pl-1\"}>\n <ModalButton parent={`structuren[${selected}].kolomselectie`} content={<Icon name={\"copy\"} />}>\n <KolommenInstellenModal\n saveModal={\n /* istanbul ignore next */ (data: KolommenInstellenModalState) => {\n setFieldValue(`structuren[${selected}].kolomselectie`, data);\n }\n }\n values={values.structuren[selected].kolomselectie as any}\n rapportNaam={values.structuren[selected].naam}\n />\n </ModalButton>\n </div>\n </div>\n </div>\n <br />\n <h2>Structuur</h2>\n <RapportageStructuur\n elementen={values.structuren[selected].elementen}\n parent={`structuren[${selected}]`}\n parentKey={0}\n />\n </Card>\n )}\n </CardWrapper>\n </fieldset>\n <Debug />\n </Form>\n </FormFirstFocus>\n );\n};\n\nexport const RapportageSamenstellen = withAdviesboxFormik<\n RapportageSamenstellenProps & WithSaveData<RapportageSamenstellenState>,\n RapportageSamenstellenState\n>({\n // Transform outer props into form values\n mapPropsToValues: (e: RapportageSamenstellenProps): RapportageSamenstellenState => e,\n validationSchema: rapportageSamenstellenSchema\n})(RapportageSamenstellenComponent);\n/* istanbul ignore else */ if (process.env.NODE_ENV !== \"production\")\n RapportageSamenstellen.displayName = \"RapportageSamenstellen\";\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { RapportageOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport { mapRapportageSamenstellenDlTargetToUiField } from \"./infra/map-rapportage-samenstellen-dl-target-to-ui-field\";\nimport { mapRapportageSamenstellenDlToUi } from \"./infra/map-rapportage-samenstellen-dl-to-ui\";\nimport { mapRapportageSamenstellenUiToDl } from \"./infra/map-rapportage-samenstellen-ui-to-dl\";\nimport { RapportageSamenstellen } from \"./rapportage-samenstellen\";\n\nconst RapportageSamenstellenAjaxComponent = (): ReactElement => {\n const { settings, user, params, requestInit } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/Rapportage`;\n const { loading, error, data } = useAbortableFetch<RapportageOutput>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapRapportageSamenstellenDlToUi(data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <RapportageSamenstellen\n saveData={saveData(\n user,\n params.vestiging ?? \"\",\n url,\n settings.OcpApimSubscriptionKey,\n mapRapportageSamenstellenUiToDl,\n mapRapportageSamenstellenDlTargetToUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nexport const RapportageSamenstellenAjax = withErrorBoundary(RapportageSamenstellenAjaxComponent);\n/* istanbul ignore else */ if (process.env.NODE_ENV !== \"production\")\n RapportageSamenstellenAjax.displayName = \"RapportageSamenstellenAjax\";\n","import { InferType } from \"yup\";\nimport * as Yup from \"yup\";\n\nexport const beschikbareServiceprovidersSchema = Yup.object({\n partijen: Yup.array(\n Yup.object({\n serviceproviderId: Yup.string().nullable(),\n wijzigbaar: Yup.boolean(),\n naam: Yup.string(),\n actief: Yup.boolean(),\n hdnNummer: Yup.string().nullable()\n })\n ).default([])\n});\n\nexport const serviceprovidersSchema = Yup.object({\n beschikbareServiceproviders: beschikbareServiceprovidersSchema\n});\n\nexport type ServiceprovidersState = InferType<typeof serviceprovidersSchema>;\nexport type ServiceprovidersProps = InferType<typeof serviceprovidersSchema>;\n\nexport type BeschikbareServiceprovidersType = InferType<typeof beschikbareServiceprovidersSchema>;\n","import { FieldMap, UiName } from \"../../shared/types\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\nimport { serviceprovidersSchema, ServiceprovidersState } from \"./serviceproviders-schema\";\n\nfunction dl2ui(values: any): ServiceprovidersState {\n const serviceproviders = {\n ...serviceprovidersSchema.default(),\n beschikbareServiceproviders: {\n ...serviceprovidersSchema.default().beschikbareServiceproviders,\n partijen: values.partijen\n ? values.partijen.sort((a: any, b: any): number => {\n return new Intl.Collator([\"NL\"]).compare(a.naam, b.naam);\n })\n : []\n }\n };\n\n return serviceprovidersSchema.cast(serviceproviders);\n}\n\nexport function mapServiceprovidersDlToUi(ServiceprovidersId: string, data: any): ServiceprovidersState | null {\n const serviceproviders = data ? data[ServiceprovidersId] : null;\n\n if (!serviceproviders) {\n return null;\n }\n\n return dl2ui(serviceproviders);\n}\n\nexport function mapServiceprovidersUiToDl(serviceproviders: ServiceprovidersState): any {\n return {\n partijen: (serviceproviders.beschikbareServiceproviders.partijen || []).map(p => ({\n serviceproviderId: p.serviceproviderId,\n naam: p.naam,\n actief: p.actief,\n hdnNummer: p.hdnNummer\n }))\n };\n}\n\nexport function mapDlTargetToServiceprovidersUiField(target: string): UiName | null {\n const map: FieldMap<any> = {};\n\n return target2field(map, target);\n}\n","import React, { ReactElement, ChangeEvent, useRef, RefObject } from \"react\";\nimport { FormikContextType } from \"formik\";\nimport { Column, CellInfo } from \"react-table-6\";\nimport { CheckBox, Icon } from \"adviesbox-shared\";\nimport classes from \"./beschikbare-serviceproviders.module.scss\";\nimport { ServiceprovidersState } from \"../infra\";\nimport classnames from \"classnames\";\n\nexport const EmptyComponent = (): null => null;\n\nexport const DeleteButton = (formik: FormikContextType<ServiceprovidersState>) => (c: CellInfo): ReactElement => {\n const { values, setFieldValue } = formik;\n\n const onClick = (): void => {\n const curr = values.beschikbareServiceproviders.partijen;\n curr.splice(c.index, 1);\n setFieldValue(\"beschikbareServiceproviders.partijen\", curr);\n setFieldValue(\"dirty\", true);\n };\n\n if (!values.beschikbareServiceproviders.partijen[c.index].wijzigbaar) {\n return <div />;\n }\n\n return (\n <div data-testid={`delete-serviceprovider-${c.index}`} id={`delete-serviceprovider-${c.index}`} onClick={onClick}>\n <Icon name=\"prullenbak\" alt=\"prullenbak\" />\n </div>\n );\n};\n\nexport const createActiveCheckboxCell = (c: CellInfo): ReactElement => {\n return (\n <div className={classes.clickable_label_fix}>\n <CheckBox name={`beschikbareServiceproviders.partijen[${c.index}].actief`} caption=\"\" disabled={false} />\n </div>\n );\n};\n\nexport const createTextInputServiceProviderNaamCell = (\n formik: FormikContextType<ServiceprovidersState>\n): ((c: CellInfo) => ReactElement) => (c: CellInfo): ReactElement => {\n const { values, setFieldValue } = formik;\n const inputElement: RefObject<HTMLInputElement> | null = useRef(null);\n\n const onMouseUp = (): void => {\n inputElement.current?.focus();\n };\n\n const onBlur = (e: ChangeEvent<HTMLInputElement>): void => {\n setFieldValue(`beschikbareServiceproviders.partijen[${c.index}].naam`, e.target.value);\n };\n\n return (\n <div\n className={classnames(\n !values.beschikbareServiceproviders.partijen[c.index].wijzigbaar ? \"not-underlined\" : \"\",\n \"input-group\"\n )}\n >\n <input\n readOnly={!values.beschikbareServiceproviders.partijen[c.index].wijzigbaar}\n disabled={!values.beschikbareServiceproviders.partijen[c.index].wijzigbaar}\n data-testid={`serviceprovidernaam-input-${c.index}`}\n id={`serviceprovidernaam-input-${c.index}`}\n type=\"text\"\n // ../../shared/components/tekst-input/TextInput.module.scss: input_control\n className={classnames(\n \"input_control\",\n \"grid-cell\",\n !values.beschikbareServiceproviders.partijen[c.index].wijzigbaar ? \"not-underlined\" : \"\"\n )}\n defaultValue={values.beschikbareServiceproviders.partijen[c.index].naam}\n onBlur={onBlur}\n ref={inputElement}\n onMouseUp={onMouseUp}\n />\n </div>\n );\n};\n\nexport const createTextInputHdnNummerCell = (\n formik: FormikContextType<ServiceprovidersState>\n): ((c: CellInfo) => ReactElement) => (c: CellInfo): ReactElement => {\n const { values, setFieldValue } = formik;\n const inputElement: RefObject<HTMLInputElement> | null = useRef(null);\n\n const onMouseUp = (): void => {\n inputElement.current?.focus();\n };\n\n const onBlur = (e: ChangeEvent<HTMLInputElement>): void => {\n setFieldValue(`beschikbareServiceproviders.partijen[${c.index}].hdnNummer`, e.target.value);\n };\n\n return (\n <div\n className={classnames(\n !values.beschikbareServiceproviders.partijen[c.index].wijzigbaar ? \"not-underlined\" : \"\",\n \"input-group\"\n )}\n >\n <input\n readOnly={!values.beschikbareServiceproviders.partijen[c.index].wijzigbaar}\n disabled={!values.beschikbareServiceproviders.partijen[c.index].wijzigbaar}\n data-testid={`hdnNummer-input-${c.index}`}\n id={`hdnNummer-input-${c.index}`}\n type=\"text\"\n // ../../shared/components/tekst-input/TextInput.module.scss: input_control\n className={classnames(\"input_control\", \"grid-cell\")}\n defaultValue={values.beschikbareServiceproviders.partijen[c.index].hdnNummer || \"\"}\n onBlur={onBlur}\n ref={inputElement}\n onMouseUp={onMouseUp}\n />\n </div>\n );\n};\n\nexport const getColumns = (formik: FormikContextType<ServiceprovidersState>): Column[] => {\n return [\n {\n Header: \"Serviceprovider\",\n Cell: createTextInputServiceProviderNaamCell(formik)\n },\n {\n Header: \"Actief\",\n Cell: createActiveCheckboxCell,\n maxWidth: 100\n },\n {\n Header: \"HDN Nummer\",\n Cell: createTextInputHdnNummerCell(formik)\n },\n {\n Cell: DeleteButton(formik),\n maxWidth: 30\n }\n ];\n};\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType } from \"formik\";\nimport { ServiceprovidersState } from \"../infra\";\nimport { getColumns, EmptyComponent } from \"./serviceproviders-data-grid-components\";\nimport { DataGrid } from \"adviesbox-shared\";\n\nconst BeschikbareServiceproviders = ({\n formik\n}: {\n formik: FormikContextType<ServiceprovidersState>;\n}): ReactElement => {\n const { values, setFieldValue } = formik;\n\n const addServiceProvider = (): void => {\n const curr = values.beschikbareServiceproviders.partijen;\n curr.push({\n serviceproviderId: \"\",\n actief: true,\n hdnNummer: null,\n naam: \"\",\n wijzigbaar: true\n });\n\n setFieldValue(\"beschikbareServiceproviders.partijen\", curr);\n };\n\n return (\n <>\n <DataGrid\n name=\"beschikbareServiceproviders.partijen\"\n editable={true}\n resizable={false}\n sortable={false}\n filterable={false}\n columns={getColumns(formik)}\n minRows={values.beschikbareServiceproviders.partijen.length || 0}\n pageSize={values.beschikbareServiceproviders.partijen.length || 0}\n showPagination={false}\n NoDataComponent={EmptyComponent}\n />\n\n <div className=\"button-container\">\n <button id=\"add-serviceprovider-button\" className=\"btn btn-primary\" type=\"button\" onClick={addServiceProvider}>\n + Serviceprovider toevoegen\n </button>\n </div>\n </>\n );\n};\n\nexport default connect<{}, ServiceprovidersState>(BeschikbareServiceproviders);\n","import React, { ReactElement, useContext } from \"react\";\nimport { Form, FormikProps } from \"formik\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { Card, CardWrapper, PlatformFoutenSamenvatting } from \"adviesbox-shared\";\n\nimport { ServiceprovidersState, ServiceprovidersProps, serviceprovidersSchema } from \"./infra\";\n\nimport BeschikbareServiceproviders from \"./beschikbare-serviceproviders/beschikbare-serviceproviders\";\nimport { AutorisatieNiveauManager } from \"../autorisatieniveau-manager/autorisatieniveau-manager\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport classnames from \"classnames\";\nimport classes from \"./beschikbare-serviceproviders/beschikbare-serviceproviders.module.scss\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Serviceproviders = (\n props: FormikProps<ServiceprovidersState> & WithSaveData<ServiceprovidersState>\n): ReactElement => {\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n return (\n <Form>\n <PlatformFoutenSamenvatting />\n\n <fieldset\n disabled={!(isBeheerder || autorisatieNiveau.serviceprovidersNiveau === InstellingNiveauOptions.Medewerker)}\n >\n <CardWrapper className=\"px-3\">\n <div className={classnames(classes.text_container, \"text-container\")}>\n <div className={\"p-2\"}>\n <h2 className=\"p-0\">Serviceproviders </h2>\n <AutorisatieNiveauManager manageFor={autorisatieNiveau.serviceprovidersNiveau} />\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n </div>\n </div>\n </CardWrapper>\n <CardWrapper className=\"px-3\">\n <Card title=\"Beschikbare serviceproviders\" className=\"w-100\">\n <div className=\"px-1\">\n <BeschikbareServiceproviders />\n </div>\n </Card>\n </CardWrapper>\n </fieldset>\n\n {/* istanbul ignore next */\n process.env.NODE_ENV === \"development\" && <Debug />}\n </Form>\n );\n};\n\nServiceproviders.displayName = \"Serviceproviders\";\n\nexport default withAdviesboxFormik<ServiceprovidersProps & WithSaveData<ServiceprovidersState>, ServiceprovidersState>({\n // Transform outer props into form values\n mapPropsToValues: (e: ServiceprovidersProps): ServiceprovidersState => e,\n validationSchema: serviceprovidersSchema\n})(Serviceproviders);\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { ServiceprovidersOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport { mapDlTargetToServiceprovidersUiField, mapServiceprovidersDlToUi, mapServiceprovidersUiToDl } from \"./infra\";\nimport Serviceproviders from \"./serviceproviders\";\n\nconst ServiceprovidersAjax = (): ReactElement => {\n // TODO: replace useRequestInit/useAbortableFetch with useAdviesboxData\n const { requestInit, settings, user, params } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/BeheerPartijen/Serviceproviders`;\n const { loading, error, data } = useAbortableFetch<ServiceprovidersOutput>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapServiceprovidersDlToUi(\"serviceproviders\", data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <Serviceproviders\n saveData={saveData(\n user,\n params.vestiging ?? \"\",\n url,\n settings.OcpApimSubscriptionKey,\n mapServiceprovidersUiToDl,\n mapDlTargetToServiceprovidersUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nServiceprovidersAjax.displayName = \"ServiceprovidersAjax\";\n\nexport default withErrorBoundary(ServiceprovidersAjax);\n","import { createContext } from \"react\";\n\nexport type RouteParams = {\n vestiging: string;\n voorstel?: string;\n adviesdossier: string;\n};\n\nconst defaultMatch: RouteParams = {\n vestiging: \"\",\n voorstel: \"\",\n adviesdossier: \"\"\n};\n\nconst ParamRouteContext = createContext(defaultMatch);\n\nexport default ParamRouteContext;\n","import React, { ReactElement, ReactNode } from \"react\";\nimport RouteContext, { RouteParams } from \"./paramrouting-context\";\n\nconst ParamRouteProvider = ({ route, children }: { children: ReactNode; route: RouteParams }): ReactElement => {\n return <RouteContext.Provider value={route}>{children}</RouteContext.Provider>;\n};\n\nexport default ParamRouteProvider;\n","/* istanbul ignore file*/\nimport { StandaardTeksten as StandaardTekstenDlEntry } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { UiName, FieldMap } from \"../../shared/types\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\n\nexport function mapDlTargetToDStandaardTekstenUiField(target: string): UiName | null {\n const map: FieldMap<StandaardTekstenDlEntry> = {};\n\n return target2field(map, target);\n}\n","import * as Yup from \"yup\";\nimport { yupEnum } from \"../../shared/utils/yup-enum\";\nimport { StandaardtekstVoorOptions } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\n\nexport const tekstSchema = Yup.object({\n tekstVoor: yupEnum(StandaardtekstVoorOptions),\n korteOmschrijving: Yup.string().nullable(),\n standaardTekst: Yup.string().nullable()\n});\n\nexport const standaardTekstenSchema = Yup.object({\n teksten: Yup.array(tekstSchema).default([])\n});\n\nexport const standaardTekstenImporterenExporterenSchema = Yup.object({\n overschrijven: Yup.bool().default(false),\n newFileAdded: Yup.bool()\n});\n","/* istanbul ignore file */\nimport { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\n\nimport {\n StandaardTeksten as StandaardTekstDlEntry,\n StandaardTekstenOutput as StandaardTekstDlOutput\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\n\nimport { standaardTekstenSchema } from \"./standaard-teksten-schema\";\nimport { StandaardTekstenState, StandaardTekstType } from \"./standaard-teksten-types\";\n\nconst mapStandaardTeksten = createMapToUi(standaardTekstenSchema).from<StandaardTekstDlEntry>({\n teksten: v =>\n v.standaardTekstenMotiveringOnderwerp.map(\n (c): StandaardTekstType => {\n return {\n korteOmschrijving: c.korteOmschrijving,\n standaardTekst: c.tekst,\n tekstVoor: c.standaardtekstVoor\n };\n }\n )\n});\n\nexport function mapStandaardTekstenDlToUi(data: StandaardTekstDlOutput): StandaardTekstenState | null {\n const standaardteksten =\n data && data.isValid && data.standaardTeksten && data.standaardTeksten.standaardTekstenMotiveringOnderwerp\n ? data.standaardTeksten\n : null;\n\n if (standaardteksten) {\n return mapStandaardTeksten(standaardteksten);\n }\n\n return null;\n}\n","import { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\nimport { StandaardTeksten as StandaardTekstDlEntry } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { standaardTekstenSchema } from \"./standaard-teksten-schema\";\n\nexport const mapStandaardTekstenUiToDl = createMapToDl(standaardTekstenSchema).to<StandaardTekstDlEntry>({\n standaardTekstenMotiveringOnderwerp: v =>\n v.teksten.map(c => {\n return {\n standaardtekstVoor: c.tekstVoor,\n korteOmschrijving: c.korteOmschrijving,\n tekst: c.standaardTekst\n };\n })\n});\n","import { LabeledRadioInput, LabeledTextInput } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport { StandaardtekstVoorOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\ntype StandaardTekstDetailsProps = { selected: number };\n\nexport const StandaardTekstDetails = (props: StandaardTekstDetailsProps): ReactElement => {\n const { selected } = props;\n return (\n <>\n <LabeledRadioInput\n caption={\"Standaardtekst voor\"}\n name={`teksten[${selected}].tekstVoor`}\n options={[\n { label: \"Ons advies\", value: StandaardtekstVoorOptions.OnsAdvies },\n { label: \"Afwijkende keuze\", value: StandaardtekstVoorOptions.AfwijkendeKeuze }\n ]}\n />\n\n <LabeledTextInput caption=\"Korte omschrijving\" name={`teksten[${selected}].korteOmschrijving`} />\n\n <LabeledTextInput caption=\"Standaardtekst\" name={`teksten[${selected}].standaardTekst`} textarea={3} />\n </>\n );\n};\n","import {\n Card,\n CardWrapper,\n createSpanWithId,\n DataGrid,\n FormFirstFocus,\n PlatformFoutenSamenvatting\n} from \"adviesbox-shared\";\nimport { Form, FormikProps } from \"formik\";\nimport React, { ReactElement, useContext, useState } from \"react\";\nimport { Column } from \"react-table-6\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { StandaardtekstVoorOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { standaardTekstenSchema } from \"./infra/standaard-teksten-schema\";\nimport { StandaardTekstenProps, StandaardTekstenState, StandaardTekstType } from \"./infra/standaard-teksten-types\";\nimport { StandaardteksenOnderwerpen } from \"./standaard-teksten-ajax\";\nimport { StandaardTekstDetails } from \"./standaard-teksten-details\";\n\nconst newStandaardTextFactory = (): StandaardTekstType => {\n return { korteOmschrijving: \"\", standaardTekst: \"\", tekstVoor: StandaardtekstVoorOptions.OnsAdvies };\n};\n\nconst StandaardTekstenComponent = (props: FormikProps<StandaardTekstenState> & StandaardTekstenProps): ReactElement => {\n const selectedState = useState(0);\n const [selected] = selectedState;\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n\n const getVoorTekst = (voor: StandaardtekstVoorOptions): string => {\n switch (voor) {\n case StandaardtekstVoorOptions.AfwijkendeKeuze:\n return \"Afwijkende keuze\";\n case StandaardtekstVoorOptions.OnsAdvies:\n return \"Ons advies\";\n }\n };\n\n const standaardTekstColumns: Column[] = [\n {\n Header: \"Standaardtekst voor\",\n id: \"Standaardtekst voor\",\n Cell: (c): ReactElement => createSpanWithId(c.index, 1, getVoorTekst(c.original.tekstVoor), c.original.tekstVoor)\n },\n {\n Header: \"Korte omschrijving\",\n id: \"Korte omschrijving\",\n Cell: (c): ReactElement =>\n createSpanWithId(c.index, 1, c.original.korteOmschrijving, c.original.korteOmschrijving)\n },\n {\n Cell: \"DeleteButton\",\n maxWidth: 30\n }\n ];\n\n return (\n <FormFirstFocus>\n <Form className={\"px-3\"}>\n <PlatformFoutenSamenvatting />\n\n <fieldset\n disabled={!(isBeheerder || autorisatieNiveau.standaardTekstenNiveau === InstellingNiveauOptions.Medewerker)}\n >\n <CardWrapper className=\"px-3\">\n <div className=\"text-container\">\n <h2>Standaard teksten {mapOnderwerpToTitle(props.onderwerp)}</h2>\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n </div>\n </CardWrapper>\n\n <CardWrapper>\n <Card className=\"w-xl-100 w-lg-100 w-md-50 w-50\">\n <DataGrid\n masterDetail\n rowCaption=\"Standaard tekst\"\n columns={standaardTekstColumns}\n rowSelected={selectedState}\n name=\"teksten\"\n showButtonDelete\n showButtonAddRow\n getNewRowValues={() => newStandaardTextFactory()}\n />\n </Card>\n {props.values.teksten[selected] && (\n <Card title=\"\">\n <StandaardTekstDetails selected={selected} />\n </Card>\n )}\n </CardWrapper>\n </fieldset>\n <Debug />\n </Form>\n </FormFirstFocus>\n );\n};\n\nexport const StandaardTeksten = withAdviesboxFormik<\n StandaardTekstenProps & WithSaveData<StandaardTekstenState>,\n StandaardTekstenState\n>({\n // Transform outer props into form values\n mapPropsToValues: (e: StandaardTekstenProps): StandaardTekstenState => e,\n validationSchema: standaardTekstenSchema\n})(StandaardTekstenComponent);\n/* istanbul ignore else */ if (process.env.NODE_ENV !== \"production\") StandaardTeksten.displayName = \"StandaardTeksten\";\n\nexport function mapOnderwerpToTitle(onderwerp: StandaardteksenOnderwerpen): string {\n switch (onderwerp) {\n case StandaardteksenOnderwerpen[\"dubbelewoonlasten\"]:\n return \"dubbele woonlasten\";\n case StandaardteksenOnderwerpen[\"energie\"]:\n return \"verduurzaming\";\n case StandaardteksenOnderwerpen[\"inbrengeigengeld\"]:\n return \"eigen geld\";\n case StandaardteksenOnderwerpen[\"wijzeopbouwdoelvermogen\"]:\n return \"opbouw doelvermogen\";\n case StandaardteksenOnderwerpen[\"verantwoordewoonlasten\"]:\n return \"verantwoorde woonlasten\";\n case StandaardteksenOnderwerpen[\"fiscaleaftrek\"]:\n return \"fiscaal\";\n case StandaardteksenOnderwerpen[\"hypotheekaflossen\"]:\n return \"hypotheekvorm\";\n case StandaardteksenOnderwerpen[\"afdekkenoverlijdensrisico\"]:\n return \"overlijden\";\n case StandaardteksenOnderwerpen[\"afdekkenaoww\"]:\n return \"arbeidsongeschiktheid\";\n case StandaardteksenOnderwerpen[\"afdekkenww\"]:\n return \"werkloosheid\";\n case StandaardteksenOnderwerpen[\"pensioenvoorziening\"]:\n return \"pensioen\";\n\n default:\n return onderwerp.toString();\n }\n}\n","/* istanbul ignore file*/\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { StandaardTekstenOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { RouteParams } from \"../shared/paramrouting/paramrouting-context\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport { mapDlTargetToDStandaardTekstenUiField } from \"./infra/map-standaard-teksten-dl-target-to-ui-field\";\nimport { mapStandaardTekstenDlToUi } from \"./infra/map-standaard-teksten-dl-to-ui\";\nimport { mapStandaardTekstenUiToDl } from \"./infra/map-standaard-teksten-ui-to-dl\";\nimport { StandaardTeksten } from \"./standaard-teksten\";\n\nexport enum StandaardteksenOnderwerpen {\n \"algemeen\" = \"algemeen\",\n \"energie\" = \"energie\",\n \"verantwoordewoonlasten\" = \"verantwoordewoonlasten\",\n \"inbrengeigengeld\" = \"inbrengeigengeld\",\n \"dubbelewoonlasten\" = \"dubbelewoonlasten\",\n \"fiscaleaftrek\" = \"fiscaleaftrek\",\n \"hypotheekaflossen\" = \"hypotheekaflossen\",\n \"rentevastperiode\" = \"rentevastperiode\",\n \"geldverstrekker\" = \"geldverstrekker\",\n \"pensioenvoorziening\" = \"pensioenvoorziening\",\n \"afdekkenoverlijdensrisico\" = \"afdekkenoverlijdensrisico\",\n \"afdekkenaoww\" = \"afdekkenaoww\",\n \"afdekkenww\" = \"afdekkenww\",\n \"wijzeopbouwdoelvermogen\" = \"wijzeopbouwdoelvermogen\",\n \"risicoprofiel\" = \"risicoprofiel\"\n}\n\ntype RouteParamsWithOnderwerp = RouteParams & { onderwerp: StandaardteksenOnderwerpen };\n\nconst StandaardTekstenAjaxComponent = (): ReactElement => {\n const { onderwerp } = useParams<RouteParamsWithOnderwerp>();\n\n const { settings, user, params, requestInit } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/StandaardTeksten?onderwerpsoort=${onderwerp}`;\n\n const { loading, error, data } = useAbortableFetch<StandaardTekstenOutput>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapStandaardTekstenDlToUi(data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <StandaardTeksten\n saveData={saveData(\n user,\n params.vestiging ?? \"\",\n url,\n settings.OcpApimSubscriptionKey,\n mapStandaardTekstenUiToDl,\n mapDlTargetToDStandaardTekstenUiField\n )}\n onderwerp={(onderwerp as unknown) as StandaardteksenOnderwerpen}\n {...mappedProps}\n />\n );\n};\n\nexport const StandaardTekstenAjax = withErrorBoundary(StandaardTekstenAjaxComponent);\n/* istanbul ignore else */ if (process.env.NODE_ENV !== \"production\")\n StandaardTekstenAjax.displayName = \"StandaardTekstenAjax\";\n\n// function mapOnderwerpToOnderwerpSoort(onderwerp: StandaardteksenOnderwerpen): Onderwerpsoort {\n// switch (onderwerp) {\n// case StandaardteksenOnderwerpen.algemeen:\n// return Onderwerpsoort.Algemeen;\n// case StandaardteksenOnderwerpen.arbeidsongeschiktheid:\n// return Onderwerpsoort.AfdekkenAOWW;\n// case StandaardteksenOnderwerpen[\"dubbele-woonlasten\"]:\n// return Onderwerpsoort.DubbeleWoonlasten;\n// case StandaardteksenOnderwerpen[\"eigen-geld\"]:\n// return Onderwerpsoort.InbrengEigenGeld;\n// case StandaardteksenOnderwerpen.fiscaal:\n// return Onderwerpsoort.FiscaleAftrek;\n// case StandaardteksenOnderwerpen.geldverstrekker:\n// return Onderwerpsoort.Geldverstrekker;\n// case StandaardteksenOnderwerpen.hypotheekvorm:\n// return Onderwerpsoort.HypotheekAflossen;\n// case StandaardteksenOnderwerpen[\"opbouw-doelvermogen\"]:\n// return Onderwerpsoort.WijzeOpbouwDoelvermogen;\n// case StandaardteksenOnderwerpen.overlijden:\n// return Onderwerpsoort.AfdekkenOverlijdensrisico;\n// case StandaardteksenOnderwerpen.pensioen:\n// return Onderwerpsoort.Pensioenvoorziening;\n// case StandaardteksenOnderwerpen.rentevastperiode:\n// return Onderwerpsoort.Rentevastperiode;\n// case StandaardteksenOnderwerpen.risicoprofiel:\n// return Onderwerpsoort.Risicoprofiel;\n// case StandaardteksenOnderwerpen[\"verantwoorde-woonlasten\"]:\n// return Onderwerpsoort.VerantwoordeWoonlasten;\n// case StandaardteksenOnderwerpen.verduurzaming:\n// return Onderwerpsoort.Energie;\n// case StandaardteksenOnderwerpen.werkloosheid:\n// return Onderwerpsoort.AfdekkenWW;\n// default:\n// return Onderwerpsoort.Geen;\n// }\n// }\n","/* istanbul ignore file */\nimport { UiName, FieldMap } from \"../shared/types\";\nimport { target2field } from \"../shared/utils/target-to-field\";\nimport { StandaardTekstenImporterenExporterenState } from \"./infra/standaard-teksten-types\";\n\nexport function mapStandaardTekstenImporterenExporterenDlTargetToUiField(target: string): UiName | null {\n const map: FieldMap<StandaardTekstenImporterenExporterenState> = {};\n\n return target2field(map, target);\n}\n","import { FileUpload } from \"adviesbox-shared\";\nimport React, { ReactElement, useRef } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport Modal from \"../shared/components/modal/Modal\";\n\nexport type StandaardTekstenExporterenModalProps = {\n closeModal?: () => void;\n saveModal: (files: File[], overschrijven: boolean) => void;\n};\n\nexport const StandaardTekstenImporterenModal = (props: StandaardTekstenExporterenModalProps): ReactElement => {\n const filesRef = useRef<File[]>([]);\n\n const saveAction = (overschrijven: boolean): void => {\n props.saveModal(filesRef.current, overschrijven);\n props.closeModal && props.closeModal();\n };\n\n return (\n <Modal\n title=\"Standaardteksen importeren\"\n saveButtonTekst={\"Teksten overschrijven\"}\n onCancelClick={props.closeModal}\n appendToFooter={\n <Button\n id=\"btntoevoegen\"\n data-testid=\"btntoevoegen\"\n onClick={() => {\n saveAction(false);\n }}\n >\n Teksten toevoegen\n </Button>\n }\n onSubmitClick={() => {\n saveAction(true);\n }}\n body={\n <>\n <FileUpload\n name=\"standaardtekstImporteren\"\n variant={\"Standaardteksten\"}\n updateRef={\n /* istanbul ignore next */ files => {\n filesRef.current = files;\n }\n }\n title={\n <span>\n Sleep het json bestand hierheen om te uploaden\n <br />\n of\n <br />\n </span>\n }\n buttonText={\"Klik hier om een bestand te kiezen\"}\n hideFormats\n hideIcon\n filesref={filesRef}\n ></FileUpload>\n <div className=\"form-group form-row\">\n <div className={`col-12`}>\n <p className=\"px-2\">\n <br />\n Wilt u de te importeren teksten toevoegen aan de huidige teksten of de huidige teksten overschrijven?\n </p>\n </div>\n </div>\n </>\n }\n />\n );\n};\n","import {\n Card,\n CardWrapper,\n ErrorPage,\n FormFirstFocus,\n ModalButton,\n uInt8ArrayToDownload,\n useRequestInit,\n PlatformFoutenSamenvatting\n} from \"adviesbox-shared\";\nimport { Form, FormikProps, useFormikContext } from \"formik\";\nimport React, { ReactElement, useContext, useRef, useState } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { saveDataWithFiles } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { standaardTekstenImporterenExporterenSchema } from \"./infra/standaard-teksten-schema\";\nimport { StandaardTekstenImporterenExporterenState } from \"./infra/standaard-teksten-types\";\nimport { mapStandaardTekstenImporterenExporterenDlTargetToUiField } from \"./map-standaard-teksten-importeren-exporteren-dl-target-to-ui\";\nimport { StandaardTekstenImporterenModal } from \"./standaard-teksten-importeren-modal\";\n\nexport type StandaardTekstenImporterenExporterenProps = StandaardTekstenImporterenExporterenState;\n\nconst StandaardTekstenImporterenExporterenComponent = (\n props: FormikProps<StandaardTekstenImporterenExporterenState> & StandaardTekstenImporterenExporterenProps\n): ReactElement => {\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n const filesRef = useRef<File[]>([]);\n const [filesLength, setFilesLength] = useState<number>(0);\n\n const { params, user, settings, requestInit } = useRequestInit();\n\n const url = `${settings.instellingenFormsOrigin}/StandaardTeksten/Import`;\n const formik = useFormikContext<StandaardTekstenImporterenExporterenState>();\n const { setFieldValue } = formik;\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n return (\n <FormFirstFocus>\n <Form>\n <fieldset disabled={!isBeheerder}>\n <CardWrapper className=\"px-3\">\n <div className=\"text-container\">\n <h2>Standaardteksten importeren en exporteren</h2>\n <SaveButton\n callBack={() => {\n formik.resetForm({ values: standaardTekstenImporterenExporterenSchema.default() });\n }}\n context={{\n ...props,\n\n saveData: saveDataWithFiles(\n user,\n params.vestiging ?? \"\",\n url + `?overschrijven=${formik.values.overschrijven ? \"true\" : \"false\"}`,\n settings.OcpApimSubscriptionKey,\n filesRef.current,\n mapStandaardTekstenImporterenExporterenDlTargetToUiField,\n \"standaardTekstenImportBestand\"\n )\n }}\n btnTekst={`${filesLength === 1 ? \"bestand\" : filesLength + \" bestanden\"} opslaan`}\n />\n </div>\n </CardWrapper>\n <PlatformFoutenSamenvatting />\n\n <div className={\"px-3 w-75\"}>\n <Card>\n <p className=\"p-3\">\n Op deze pagina kan je standaardteksten importeren en exporteren. Let op, bij importeren en exporteren\n worden alle teksten die aanwezig zijn in het standaard teksten onderdeel meegenomen. Bij importeren\n krijg je een vervolgkeuze om de teksten te overschrijven of toe te voegen.\n </p>\n <div className={\"text-center\"}>\n <ModalButton\n parent=\"standaardteksten-importeren\"\n size=\"lg\"\n content={\"Standaardteksten importeren\"}\n className={\"btn-light mr-3\"}\n >\n <StandaardTekstenImporterenModal\n saveModal={(files: File[], overschrijven) => {\n setFilesLength(files.length);\n setFieldValue(\"newFileAdded\", true);\n setFieldValue(\"overschrijven\", overschrijven);\n\n filesRef.current = files;\n }}\n />\n </ModalButton>\n <Button\n variant={\"light\"}\n id={\"export-btn\"}\n data-testid={\"export-btn\"}\n onClick={async () => {\n const exportUrl = `${settings.instellingenFormsOrigin}/StandaardTeksten/Export`;\n const rsp: Response = await fetch(exportUrl, requestInit);\n try {\n const data = new TextEncoder().encode(await rsp.text());\n await uInt8ArrayToDownload(\n data,\n rsp.headers.get(\"Content-Disposition\")?.split(\"filename=\")[1] || \"StandaardtekstExport.json\"\n );\n } catch (e) {\n /* istanbul ignore next */\n /* eslint-disable no-console */\n if (process.env.NODE_ENV === \"development\" || process.env.NODE_ENV === \"test\") console.warn(e);\n }\n }}\n >\n Standaardteksten exporteren\n </Button>\n </div>\n </Card>\n </div>\n </fieldset>\n <Debug />\n </Form>\n </FormFirstFocus>\n );\n};\n\nexport const StandaardTekstenImporterenExporteren = withAdviesboxFormik<\n StandaardTekstenImporterenExporterenProps,\n StandaardTekstenImporterenExporterenState\n>({\n // Transform outer props into form values\n mapPropsToValues: (e: StandaardTekstenImporterenExporterenProps): StandaardTekstenImporterenExporterenState =>\n standaardTekstenImporterenExporterenSchema.default(),\n validationSchema: standaardTekstenImporterenExporterenSchema\n})(StandaardTekstenImporterenExporterenComponent);\n/* istanbul ignore else */ if (process.env.NODE_ENV !== \"production\")\n StandaardTekstenImporterenExporteren.displayName = \"StandaardTeksten\";\n","import * as Yup from \"yup\";\nimport { InferType } from \"yup\";\nimport {\n VastBedragBedragPerUurOptions,\n VastBedragOptions,\n VastBedragPercentageOptions\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { yupEnum } from \"../../shared/utils/yup-enum\";\n\nexport const financieringsopzetSchema = Yup.object({\n leveringsAkte: Yup.mixed<VastBedragOptions | VastBedragBedragPerUurOptions | VastBedragPercentageOptions>().default(\n VastBedragOptions.VastBedrag\n ),\n bedragLeveringsAkte: Yup.number()\n .nullable()\n .default(null),\n hypotheekAkte: Yup.mixed<VastBedragOptions | VastBedragBedragPerUurOptions | VastBedragPercentageOptions>().default(\n VastBedragOptions.VastBedrag\n ),\n bedragHypotheekAkte: Yup.number()\n .nullable()\n .default(null),\n taxatieKosten: Yup.mixed<VastBedragOptions | VastBedragBedragPerUurOptions | VastBedragPercentageOptions>().default(\n VastBedragOptions.VastBedrag\n ),\n bedragTaxatieKosten: Yup.number()\n .nullable()\n .default(null),\n hypothecaireInschrijving: Yup.mixed<\n VastBedragOptions | VastBedragBedragPerUurOptions | VastBedragPercentageOptions\n >().default(VastBedragPercentageOptions.IndicatieveWaarde),\n bedragHypothecaireInschrijving: Yup.number()\n .nullable()\n .default(null),\n percentageHypothecaireInschrijving: Yup.number()\n .nullable()\n .default(null)\n});\n\nexport const advieskostenZonderHypotheekSchema = Yup.object({\n adviesKosten: yupEnum(VastBedragBedragPerUurOptions).default(VastBedragBedragPerUurOptions.VastBedrag),\n bedragAdviesKosten: Yup.number()\n .nullable()\n .default(null),\n bemiddelingsVergoeding: yupEnum(VastBedragBedragPerUurOptions).default(VastBedragBedragPerUurOptions.VastBedrag),\n bedragBemiddelingsVergoeding: Yup.number()\n .nullable()\n .default(null)\n});\n\nexport const advieskostenMetHypotheekSchema = Yup.object({\n adviesKosten: yupEnum(VastBedragBedragPerUurOptions).default(VastBedragBedragPerUurOptions.VastBedrag),\n bedragAdviesKosten: Yup.number()\n .nullable()\n .default(null),\n bemiddelingsVergoeding: yupEnum(VastBedragBedragPerUurOptions).default(VastBedragBedragPerUurOptions.VastBedrag),\n bedragBemiddelingsVergoeding: Yup.number()\n .nullable()\n .default(null),\n overigeBemiddelingsVergoeding: yupEnum(VastBedragBedragPerUurOptions).default(\n VastBedragBedragPerUurOptions.VastBedrag\n ),\n bedragOverigeBemiddelingsVergoeding: Yup.number()\n .nullable()\n .default(null),\n dossierVergoeding: Yup.number()\n .nullable()\n .default(null)\n});\n\nexport const tarievenSchema = Yup.object({\n financieringsopzet: financieringsopzetSchema,\n advieskostenMetHypotheek: advieskostenMetHypotheekSchema,\n advieskostenZonderHypotheek: advieskostenZonderHypotheekSchema\n});\n\nexport type TarievenState = InferType<typeof tarievenSchema>;\nexport type TarievenProps = InferType<typeof tarievenSchema>;\n\nexport type FinancieringsopzetType = InferType<typeof financieringsopzetSchema>;\n\nexport type AdvieskostenMetHypotheekType = InferType<typeof advieskostenMetHypotheekSchema>;\n\nexport type AdvieskostenZonderHypotheekType = InferType<typeof advieskostenZonderHypotheekSchema>;\n","import { FieldMap, UiName } from \"../../shared/types\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\nimport {\n tarievenSchema,\n TarievenState,\n advieskostenMetHypotheekSchema,\n advieskostenZonderHypotheekSchema,\n financieringsopzetSchema\n} from \"./tarieven-schema\";\nimport {\n TarievenOutput,\n Tarieven,\n VastBedragPercentageOptions,\n VastBedragBedragPerUurOptions,\n VastBedragOptions\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\nimport { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\n\nfunction mapKostenDl2Ui(kostenVorm: string | null, vast: number | null, perUur: number | null): number | null {\n return kostenVorm === \"VastBedrag\" ? vast : kostenVorm === \"BedragPerUur\" ? perUur : null;\n}\n\nconst mapFinancieringsopzetDl2Ui = createMapToUi(financieringsopzetSchema).from<Tarieven>({\n leveringsAkte: v => v.leveringsakteVaststellingWaarde,\n bedragLeveringsAkte: v => v.leveringsakteVastBedrag,\n hypotheekAkte: v => v.hypotheekakteVaststellingWaarde,\n bedragHypotheekAkte: v => v.hypotheekakteVastBedrag,\n taxatieKosten: v => v.taxatiekostenVaststellingWaarde,\n bedragTaxatieKosten: v => v.taxatiekostenVastBedrag,\n hypothecaireInschrijving: v => v.hypothecaireInschrijvingVaststellingWaarde,\n bedragHypothecaireInschrijving: v => v.hypothecaireInschrijvingVastBedrag,\n percentageHypothecaireInschrijving: v => v.hypothecaireInschrijvingPercentage\n});\n\nconst mapAdvieskostenMetHypotheekDl2Ui = createMapToUi(advieskostenMetHypotheekSchema).from<Tarieven>({\n adviesKosten: v => v.hypotheekAdvieskostenVaststellingWaarde,\n bedragAdviesKosten: v =>\n mapKostenDl2Ui(\n v.hypotheekAdvieskostenVaststellingWaarde,\n v.hypotheekAdvieskostenVastBedrag,\n v.hypotheekAdvieskostenBedragPerUur\n ),\n bemiddelingsVergoeding: v => v.bemiddelingsvergoedingGeldleningVaststellingWaarde,\n bedragBemiddelingsVergoeding: v =>\n mapKostenDl2Ui(\n v.bemiddelingsvergoedingGeldleningVaststellingWaarde,\n v.bemiddelingsvergoedingGeldleningVastBedrag,\n v.bemiddelingsvergoedingGeldleningBedragPerUur\n ),\n overigeBemiddelingsVergoeding: v => v.overigeBemiddelingsvergoedingVaststellingWaarde,\n bedragOverigeBemiddelingsVergoeding: v =>\n mapKostenDl2Ui(\n v.overigeBemiddelingsvergoedingVaststellingWaarde,\n v.overigeBemiddelingsvergoedingVastBedrag,\n v.overigeBemiddelingsvergoedingBedragPerUur\n ),\n dossierVergoeding: v => v.dossiervergoedingVastBedrag\n});\n\nconst mapAdvieskostenZondeHypotheekDl2Ui = createMapToUi(advieskostenZonderHypotheekSchema).from<Tarieven>({\n adviesKosten: v => v.advieskostenVaststellingWaarde,\n bedragAdviesKosten: v =>\n mapKostenDl2Ui(v.advieskostenVaststellingWaarde, v.advieskostenVastBedrag, v.advieskostenBedragPerUur),\n bemiddelingsVergoeding: v => v.bemiddelingsvergoedingVaststellingWaarde,\n bedragBemiddelingsVergoeding: v =>\n mapKostenDl2Ui(\n v.bemiddelingsvergoedingVaststellingWaarde,\n v.bemiddelingsvergoedingVastBedrag,\n v.bemiddelingsvergoedingBedragPerUur\n )\n});\n\nconst dl2ui = createMapToUi(tarievenSchema).from<Tarieven>({\n financieringsopzet: v => mapFinancieringsopzetDl2Ui(v),\n advieskostenMetHypotheek: v => mapAdvieskostenMetHypotheekDl2Ui(v),\n advieskostenZonderHypotheek: v => mapAdvieskostenZondeHypotheekDl2Ui(v)\n});\n\nexport function mapTarievenDlToUi(data: TarievenOutput): TarievenState | null {\n const tarieven = data && data.tarieven ? data.tarieven : null;\n\n if (!tarieven) {\n return null;\n }\n\n return dl2ui(tarieven);\n}\n\nconst mapVastBedrag = (kostenVorm: string | null, bedrag: number | null): number | null => {\n return kostenVorm === \"VastBedrag\" ? bedrag : null;\n};\n\nexport const mapTarievenUiToDl = createMapToDl(tarievenSchema).to<Tarieven>({\n leveringsakteVaststellingWaarde: v => v.financieringsopzet.leveringsAkte as VastBedragOptions,\n leveringsakteVastBedrag: v =>\n mapVastBedrag(v.financieringsopzet.leveringsAkte, v.financieringsopzet.bedragLeveringsAkte),\n hypotheekakteVaststellingWaarde: v => v.financieringsopzet.hypotheekAkte as VastBedragOptions,\n hypotheekakteVastBedrag: v =>\n mapVastBedrag(v.financieringsopzet.hypotheekAkte, v.financieringsopzet.bedragHypotheekAkte),\n taxatiekostenVaststellingWaarde: v => v.financieringsopzet.taxatieKosten as VastBedragOptions,\n taxatiekostenVastBedrag: v =>\n mapVastBedrag(v.financieringsopzet.taxatieKosten, v.financieringsopzet.bedragTaxatieKosten),\n hypothecaireInschrijvingVaststellingWaarde: v =>\n v.financieringsopzet.hypothecaireInschrijving as VastBedragPercentageOptions,\n hypothecaireInschrijvingVastBedrag: v =>\n mapVastBedrag(v.financieringsopzet.hypothecaireInschrijving, v.financieringsopzet.bedragHypothecaireInschrijving),\n hypothecaireInschrijvingPercentage: v =>\n v.financieringsopzet.hypothecaireInschrijving === VastBedragPercentageOptions.Percentage\n ? v.financieringsopzet.percentageHypothecaireInschrijving\n : null,\n hypotheekAdvieskostenVaststellingWaarde: v => v.advieskostenMetHypotheek.adviesKosten,\n hypotheekAdvieskostenVastBedrag: v =>\n mapVastBedrag(v.advieskostenMetHypotheek.adviesKosten, v.advieskostenMetHypotheek.bedragAdviesKosten),\n hypotheekAdvieskostenBedragPerUur: v =>\n v.advieskostenMetHypotheek.adviesKosten === VastBedragBedragPerUurOptions.BedragPerUur\n ? v.advieskostenMetHypotheek.bedragAdviesKosten\n : null,\n bemiddelingsvergoedingGeldleningVaststellingWaarde: v => v.advieskostenMetHypotheek.bemiddelingsVergoeding,\n bemiddelingsvergoedingGeldleningVastBedrag: v =>\n mapVastBedrag(\n v.advieskostenMetHypotheek.bemiddelingsVergoeding,\n v.advieskostenMetHypotheek.bedragBemiddelingsVergoeding\n ),\n bemiddelingsvergoedingGeldleningBedragPerUur: v =>\n v.advieskostenMetHypotheek.bemiddelingsVergoeding === VastBedragBedragPerUurOptions.BedragPerUur\n ? v.advieskostenMetHypotheek.bedragBemiddelingsVergoeding\n : null,\n overigeBemiddelingsvergoedingVaststellingWaarde: v => v.advieskostenMetHypotheek.overigeBemiddelingsVergoeding,\n overigeBemiddelingsvergoedingVastBedrag: v =>\n mapVastBedrag(\n v.advieskostenMetHypotheek.overigeBemiddelingsVergoeding,\n v.advieskostenMetHypotheek.bedragOverigeBemiddelingsVergoeding\n ),\n overigeBemiddelingsvergoedingBedragPerUur: v =>\n v.advieskostenMetHypotheek.overigeBemiddelingsVergoeding === VastBedragBedragPerUurOptions.BedragPerUur\n ? v.advieskostenMetHypotheek.bedragOverigeBemiddelingsVergoeding\n : null,\n dossiervergoedingVastBedrag: v => v.advieskostenMetHypotheek.dossierVergoeding,\n advieskostenVaststellingWaarde: v => v.advieskostenZonderHypotheek.adviesKosten,\n advieskostenVastBedrag: v =>\n mapVastBedrag(v.advieskostenZonderHypotheek.adviesKosten, v.advieskostenZonderHypotheek.bedragAdviesKosten),\n advieskostenBedragPerUur: v =>\n v.advieskostenZonderHypotheek.adviesKosten === VastBedragBedragPerUurOptions.BedragPerUur\n ? v.advieskostenZonderHypotheek.bedragAdviesKosten\n : null,\n bemiddelingsvergoedingVaststellingWaarde: v => v.advieskostenZonderHypotheek.bemiddelingsVergoeding,\n bemiddelingsvergoedingVastBedrag: v =>\n mapVastBedrag(\n v.advieskostenZonderHypotheek.bemiddelingsVergoeding,\n v.advieskostenZonderHypotheek.bedragBemiddelingsVergoeding\n ),\n bemiddelingsvergoedingBedragPerUur: v =>\n v.advieskostenZonderHypotheek.bemiddelingsVergoeding === VastBedragBedragPerUurOptions.BedragPerUur\n ? v.advieskostenZonderHypotheek.bedragBemiddelingsVergoeding\n : null\n});\n\nexport function mapDlTargetToTarievenUiField(target: string): UiName | null {\n const map: FieldMap<any> = {};\n\n return target2field(map, target);\n}\n","import React, { ReactElement } from \"react\";\nimport { connect } from \"formik\";\nimport { TarievenState } from \"../infra\";\n\nconst Uitleg = (): ReactElement => {\n return (\n <div className={\"p-3\"}>\n <span>\n Hier kunnen standaard waarden ingesteld worden die in een nieuw voorstel worden opgenomen. In het voorstel\n kunnen deze waarden nog aangepast worden.\n </span>\n </div>\n );\n};\n\nexport default connect<{}, TarievenState>(Uitleg);\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType } from \"formik\";\nimport { LabeledRadioInput, LabeledCurrencyInput, LabeledPercentageInput } from \"adviesbox-shared\";\nimport { TarievenState } from \"../infra\";\nimport {\n VastBedragBedragPerUurOptions,\n VastBedragOptions,\n VastBedragPercentageOptions\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Financieringsopzet = ({\n formik: {\n setFieldValue,\n values: { financieringsopzet }\n }\n}: {\n formik: FormikContextType<TarievenState>;\n}): ReactElement => {\n return (\n <div>\n <LabeledRadioInput\n caption=\"Leveringsakte\"\n name=\"financieringsopzet.leveringsAkte\"\n options={[\n {\n label: \"Indicatieve waarde\",\n value: VastBedragPercentageOptions.IndicatieveWaarde\n },\n {\n label: \"Vast bedrag\",\n value: VastBedragPercentageOptions.VastBedrag\n }\n ]}\n />\n {financieringsopzet.leveringsAkte === VastBedragOptions.VastBedrag && (\n <LabeledCurrencyInput caption=\"Bedrag leveringsakte\" name=\"financieringsopzet.bedragLeveringsAkte\" />\n )}\n <LabeledRadioInput\n caption=\"Hypotheekakte\"\n name=\"financieringsopzet.hypotheekAkte\"\n options={[\n {\n label: \"Indicatieve waarde\",\n value: VastBedragOptions.IndicatieveWaarde\n },\n {\n label: \"Vast bedrag\",\n value: VastBedragOptions.VastBedrag\n }\n ]}\n />\n {financieringsopzet.hypotheekAkte === VastBedragOptions.VastBedrag && (\n <LabeledCurrencyInput caption=\"Bedrag hypotheekakte\" name=\"financieringsopzet.bedragHypotheekAkte\" />\n )}\n <LabeledRadioInput\n caption=\"Taxatiekosten\"\n name=\"financieringsopzet.taxatieKosten\"\n options={[\n {\n label: \"Indicatieve waarde\",\n value: VastBedragOptions.IndicatieveWaarde\n },\n {\n label: \"Vast bedrag\",\n value: VastBedragOptions.VastBedrag\n }\n ]}\n />\n {financieringsopzet.taxatieKosten === VastBedragOptions.VastBedrag && (\n <LabeledCurrencyInput caption=\"Bedrag taxatiekosten\" name=\"financieringsopzet.bedragTaxatieKosten\" />\n )}\n <LabeledRadioInput\n caption=\"Hypothecaire inschrijving\"\n name=\"financieringsopzet.hypothecaireInschrijving\"\n options={[\n {\n label: \"Gelijk aan gewenste hypotheek\",\n value: VastBedragBedragPerUurOptions.IndicatieveWaarde\n },\n {\n label: \"Percentage opslag op de hypotheek\",\n value: VastBedragPercentageOptions.Percentage\n },\n {\n label: \"Vast bedrag boven gewenste hypotheek\",\n value: VastBedragBedragPerUurOptions.VastBedrag\n }\n ]}\n />\n\n {financieringsopzet.hypothecaireInschrijving === VastBedragPercentageOptions.VastBedrag && (\n <LabeledCurrencyInput caption=\"Bedrag\" name=\"financieringsopzet.bedragHypothecaireInschrijving\" />\n )}\n {financieringsopzet.hypothecaireInschrijving === VastBedragPercentageOptions.Percentage && (\n <LabeledPercentageInput\n caption=\"Percentage\"\n name=\"financieringsopzet.percentageHypothecaireInschrijving\"\n decimalen={2}\n />\n )}\n </div>\n );\n};\n\nexport default connect<{}, TarievenState>(Financieringsopzet);\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType } from \"formik\";\nimport { LabeledRadioInput, LabeledCurrencyInput } from \"adviesbox-shared\";\nimport { TarievenState } from \"../infra\";\nimport {\n VastBedragBedragPerUurOptions,\n VastBedragOptions\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst AdvieskostenMetHypotheek = ({\n formik: {\n values: { advieskostenMetHypotheek }\n }\n}: {\n formik: FormikContextType<TarievenState>;\n}): ReactElement => {\n return (\n <div>\n <LabeledRadioInput\n caption=\"Advieskosten\"\n name=\"advieskostenMetHypotheek.adviesKosten\"\n options={[\n {\n label: \"Vast bedrag\",\n value: VastBedragOptions.VastBedrag\n },\n {\n label: \"Per uur\",\n value: VastBedragBedragPerUurOptions.BedragPerUur\n }\n ]}\n />\n <LabeledCurrencyInput\n caption=\"Bedrag advieskosten\"\n name=\"advieskostenMetHypotheek.bedragAdviesKosten\"\n appendChildren={\n advieskostenMetHypotheek.adviesKosten === VastBedragBedragPerUurOptions.BedragPerUur ? (\n <div className=\"d-flex align-items-center h-100 ml-2\">\n <span>Per uur</span>\n </div>\n ) : null\n }\n />\n <LabeledRadioInput\n caption=\"Bemiddelingsvergoeding geldlening\"\n name=\"advieskostenMetHypotheek.bemiddelingsVergoeding\"\n options={[\n {\n label: \"Vast bedrag\",\n value: VastBedragBedragPerUurOptions.VastBedrag\n },\n {\n label: \"Per uur\",\n value: VastBedragBedragPerUurOptions.BedragPerUur\n }\n ]}\n />\n <LabeledCurrencyInput\n caption=\"Bedrag bemiddelingsvergoeding\"\n name=\"advieskostenMetHypotheek.bedragBemiddelingsVergoeding\"\n appendChildren={\n advieskostenMetHypotheek.bemiddelingsVergoeding === VastBedragBedragPerUurOptions.BedragPerUur ? (\n <div className=\"d-flex align-items-center h-100 ml-2\">\n <span>Per uur</span>\n </div>\n ) : null\n }\n />\n <LabeledRadioInput\n caption=\"Overige bemiddelingsvergoeding\"\n name=\"advieskostenMetHypotheek.overigeBemiddelingsVergoeding\"\n options={[\n {\n label: \"Vast bedrag\",\n value: VastBedragBedragPerUurOptions.VastBedrag\n },\n {\n label: \"Per uur\",\n value: VastBedragBedragPerUurOptions.BedragPerUur\n }\n ]}\n />\n <LabeledCurrencyInput\n caption=\"Bedrag overige bemiddelingsvergoeding\"\n name=\"advieskostenMetHypotheek.bedragOverigeBemiddelingsVergoeding\"\n appendChildren={\n advieskostenMetHypotheek.overigeBemiddelingsVergoeding === VastBedragBedragPerUurOptions.BedragPerUur ? (\n <div className=\"d-flex align-items-center h-100 ml-2\">\n <span>Per uur</span>\n </div>\n ) : null\n }\n />\n <LabeledCurrencyInput\n caption=\"Dossiervergoeding\"\n name=\"advieskostenMetHypotheek.dossierVergoeding\"\n />\n </div>\n );\n};\n\nexport default connect<{}, TarievenState>(AdvieskostenMetHypotheek);\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType } from \"formik\";\nimport { LabeledRadioInput, LabeledCurrencyInput } from \"adviesbox-shared\";\nimport { TarievenState } from \"../infra\";\nimport {\n VastBedragBedragPerUurOptions\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst AdvieskostenZonderHypotheek = ({\n formik: {\n setFieldValue,\n values: { advieskostenZonderHypotheek }\n }\n}: {\n formik: FormikContextType<TarievenState>;\n}): ReactElement => {\n return (\n <div>\n <LabeledRadioInput\n caption=\"Advieskosten\"\n name=\"advieskostenZonderHypotheek.adviesKosten\"\n options={[\n {\n label: \"Vast bedrag\",\n value: VastBedragBedragPerUurOptions.VastBedrag\n },\n {\n label: \"Per uur\",\n value: VastBedragBedragPerUurOptions.BedragPerUur\n }\n ]}\n />\n <LabeledCurrencyInput\n caption=\"Bedrag Advieskosten\"\n name=\"advieskostenZonderHypotheek.bedragAdviesKosten\"\n appendChildren={\n advieskostenZonderHypotheek.adviesKosten === VastBedragBedragPerUurOptions.BedragPerUur ? (\n <div className=\"d-flex align-items-center h-100 ml-2\">\n <span>Per uur</span>\n </div>\n ) : null\n }\n />\n <LabeledRadioInput\n caption=\"Bemiddelingsvergoeding\"\n name=\"advieskostenZonderHypotheek.bemiddelingsVergoeding\"\n options={[\n {\n label: \"Vast bedrag\",\n value: VastBedragBedragPerUurOptions.VastBedrag\n },\n {\n label: \"Per uur\",\n value: VastBedragBedragPerUurOptions.BedragPerUur\n }\n ]}\n />\n <LabeledCurrencyInput\n caption=\"Bedrag Bemiddelingsvergoeding\"\n name=\"advieskostenZonderHypotheek.bedragBemiddelingsVergoeding\"\n appendChildren={\n advieskostenZonderHypotheek.bemiddelingsVergoeding ===\n VastBedragBedragPerUurOptions.BedragPerUur ? (\n <div className=\"d-flex align-items-center h-100 ml-2\">\n <span>Per uur</span>\n </div>\n ) : null\n }\n />\n </div>\n );\n};\n\nexport default connect<{}, TarievenState>(AdvieskostenZonderHypotheek);\n","import React, { ReactElement, useContext } from \"react\";\nimport { FormikProps, Form } from \"formik\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { Card, CardWrapper, PlatformFoutenSamenvatting } from \"adviesbox-shared\";\n\nimport { TarievenState, TarievenProps, tarievenSchema } from \"./infra\";\nimport Uitleg from \"./uitleg/uitleg\";\nimport Financieringsopzet from \"./financieringsopzet/financieringsopzet\";\nimport AdvieskostenMetHypotheek from \"./advieskosten-met-hypotheek/advieskosten-met-hypotheek\";\nimport AdvieskostenZonderHypotheek from \"./advieskosten-zonder-hypotheek/advieskosten-zonder-hypotheek\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { AutorisatieNiveauManager } from \"../autorisatieniveau-manager/autorisatieniveau-manager\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Tarieven = (props: FormikProps<TarievenState> & WithSaveData<TarievenState>): ReactElement => {\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n return (\n <Form>\n <PlatformFoutenSamenvatting />\n\n <fieldset disabled={!(isBeheerder || autorisatieNiveau.tarievenNiveau === InstellingNiveauOptions.Medewerker)}>\n <CardWrapper className=\"px-3\">\n <div className=\"text-container\">\n <div className={\"p-2\"}>\n <h2 className={\"p-0\"}>Tarieven </h2>\n\n <AutorisatieNiveauManager manageFor={autorisatieNiveau.tarievenNiveau} />\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n </div>\n </div>\n </CardWrapper>\n <CardWrapper maxRowCount={1} className=\"px-3\">\n <Card title=\"Uitleg tarieven\">\n <Uitleg />\n </Card>\n </CardWrapper>\n <CardWrapper className=\"px-3\">\n <Card title=\"Financieringsopzet\">\n <Financieringsopzet />\n </Card>\n <Card title=\"Advieskosten met hypotheekadvies\">\n <AdvieskostenMetHypotheek />\n </Card>\n <Card title=\"Advieskosten zonder hypotheek\">\n <AdvieskostenZonderHypotheek />\n </Card>\n </CardWrapper>\n </fieldset>\n\n <Debug />\n </Form>\n );\n};\n\nTarieven.displayName = \"Tarieven\";\n\nexport default withAdviesboxFormik<TarievenProps & WithSaveData<TarievenState>, TarievenState>({\n // Transform outer props into form values\n mapPropsToValues: (e: TarievenProps): TarievenState => e,\n validationSchema: tarievenSchema\n})(Tarieven);\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { TarievenOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport { mapDlTargetToTarievenUiField, mapTarievenDlToUi, mapTarievenUiToDl } from \"./infra\";\nimport Tarieven from \"./tarieven\";\n\nconst TarievenAjax = (): ReactElement => {\n // TODO: replace useRequestInit/useAbortableFetch with useAdviesboxData\n const { settings, user, requestInit, params } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/Tarieven`;\n const { loading, error, data } = useAbortableFetch<TarievenOutput>(url, requestInit);\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapTarievenDlToUi(data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <Tarieven\n saveData={saveData(\n user,\n params.vestiging ?? \"\",\n url,\n settings.OcpApimSubscriptionKey,\n mapTarievenUiToDl,\n mapDlTargetToTarievenUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nTarievenAjax.displayName = \"TarievenAjax\";\n\nexport default withErrorBoundary(TarievenAjax);\n","import * as Yup from \"yup\";\nimport { InferType } from \"yup\";\n\nexport const beschikbareTaxatiebureausSchema = Yup.object({\n partijen: Yup.array(\n Yup.object({\n code: Yup.string().nullable(),\n partijnaam: Yup.string(),\n actief: Yup.boolean(),\n agentnummer: Yup.string().nullable()\n })\n ).default([])\n});\n\nexport const taxatiebureausSchema = Yup.object({\n beschikbareTaxatiebureaus: beschikbareTaxatiebureausSchema\n});\n\nexport type TaxatiebureausState = InferType<typeof taxatiebureausSchema>;\nexport type TaxatiebureausProps = InferType<typeof taxatiebureausSchema>;\n\nexport type BeschikbareTaxatiebureausType = InferType<typeof beschikbareTaxatiebureausSchema>;\n","import { beschikbareTaxatieProducten } from \"adviesbox-shared\";\nimport { Taxatiebureaus, TaxatiebureausOutput } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { ProductBasis } from \"../../.generated/producten/productentypes\";\nimport { FieldMap, UiName } from \"../../shared/types\";\nimport { partijFilter } from \"../../shared/utils/partij-filter\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\nimport { BeschikbareTaxatiebureausType, taxatiebureausSchema, TaxatiebureausState } from \"./taxatiebureaus-schema\";\n\nfunction dl2ui(values: Taxatiebureaus): TaxatiebureausState {\n const taxatiebureaus = {\n ...taxatiebureausSchema.default(),\n beschikbareTaxatiebureaus: {\n ...taxatiebureausSchema.default().beschikbareTaxatiebureaus,\n partijen: values.partijen?.filter(c =>\n partijFilter({ maatschappijCode: c.code } as ProductBasis, beschikbareTaxatieProducten, true)\n )\n }\n };\n\n return taxatiebureausSchema.cast(taxatiebureaus);\n}\n\nexport function mapTaxatiebureausDlToUi(\n taxatiebureausId: string,\n data: TaxatiebureausOutput | null\n): TaxatiebureausState | null {\n const taxatiebureaus = data ? data.taxatiebureaus : null;\n\n if (!taxatiebureaus) {\n return null;\n }\n\n return dl2ui(taxatiebureaus);\n}\n\nexport function mapTaxatiebureausUiToDl(taxatiebureaus: TaxatiebureausState): BeschikbareTaxatiebureausType {\n return {\n partijen: taxatiebureaus.beschikbareTaxatiebureaus.partijen\n };\n}\n\nexport function mapDlTargetToTaxatiebureausUiField(target: string): UiName | null {\n const map: FieldMap<any> = {};\n\n return target2field(map, target);\n}\n","import React, { ReactElement, ChangeEvent, useRef, RefObject } from \"react\";\nimport { FormikContextType } from \"formik\";\nimport { Column, CellInfo } from \"react-table-6\";\nimport { CheckBox } from \"adviesbox-shared\";\nimport classes from \"./beschikbare-taxatiebureaus.module.scss\";\nimport { TaxatiebureausState } from \"../infra\";\nimport classnames from \"classnames\";\n\nexport const EmptyComponent = (): null => null;\n\nconst createSpanWithId = (c: CellInfo): ReactElement => {\n return <span id={`${c.index}-row-partijnaam-taxatiebureaus`}>{c.original.partijnaam}</span>;\n};\n\nexport const createActiveCheckboxCell = (c: CellInfo): ReactElement => {\n return (\n <div className={classes.clickable_label_fix}>\n <CheckBox\n name={`beschikbareTaxatiebureaus.partijen[${c.index}].actief`}\n caption=\"\"\n disabled={c.original.code === \"XX\"}\n />\n </div>\n );\n};\n\nexport const createTextInputAgentNummerCell = (\n formik: FormikContextType<TaxatiebureausState>\n): ((c: CellInfo) => ReactElement) => (c: CellInfo): ReactElement => {\n const { values, setFieldValue } = formik;\n const inputElement: RefObject<HTMLInputElement> | null = useRef(null);\n\n const onMouseUp = (): void => {\n inputElement.current?.focus();\n };\n\n const onBlur = (e: ChangeEvent<HTMLInputElement>): void => {\n setFieldValue(`beschikbareTaxatiebureaus.partijen[${c.index}].agentnummer`, e.target.value);\n };\n\n return (\n <div className=\"input-group\">\n <input\n data-testid={`agentnummer-input-${c.index}`}\n id={`agentnummer-input-${c.index}`}\n type=\"text\"\n // ../../shared/components/tekst-input/TextInput.module.scss: input_control\n className={classnames(\"input_control\", \"grid-cell\")}\n defaultValue={values.beschikbareTaxatiebureaus.partijen[c.index].agentnummer || \"\"}\n onBlur={onBlur}\n ref={inputElement}\n onMouseUp={onMouseUp}\n />\n </div>\n );\n};\n\nexport const getColumns = (formik: FormikContextType<TaxatiebureausState>): Column[] => {\n return [\n {\n Header: \"Partijnaam\",\n Cell: createSpanWithId\n },\n {\n Header: \"Actief\",\n Cell: createActiveCheckboxCell,\n maxWidth: 100\n },\n {\n Header: \"Agentnummer\",\n Cell: createTextInputAgentNummerCell(formik)\n }\n ];\n};\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType } from \"formik\";\nimport { TaxatiebureausState } from \"../infra\";\nimport { getColumns, EmptyComponent } from \"./taxatiebureaus-data-grid-components\";\nimport { DataGrid } from \"adviesbox-shared\";\n\nconst BeschikbareTaxatiebureaus = ({ formik }: { formik: FormikContextType<TaxatiebureausState> }): ReactElement => {\n const { values } = formik;\n\n return (\n <DataGrid\n name=\"beschikbareTaxatiebureaus.partijen\"\n editable={true}\n resizable={false}\n sortable={false}\n filterable={false}\n columns={getColumns(formik)}\n minRows={values.beschikbareTaxatiebureaus.partijen.length || 0}\n pageSize={values.beschikbareTaxatiebureaus.partijen.length || 0}\n showPagination={false}\n NoDataComponent={EmptyComponent}\n />\n );\n};\n\nexport default connect<{}, TaxatiebureausState>(BeschikbareTaxatiebureaus);\n","import React, { ReactElement, useContext } from \"react\";\nimport { Form, FormikProps } from \"formik\";\nimport { Card, CardWrapper, FormFirstFocus, PlatformFoutenSamenvatting } from \"adviesbox-shared\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { Debug } from \"../shared/components/formik/Debug\";\n\nimport { TaxatiebureausState, TaxatiebureausProps, taxatiebureausSchema } from \"./infra\";\n\nimport BeschikbareTaxatiebureaus from \"./beschikbare-taxatiebureaus/beschikbare-taxatiebureaus\";\nimport { AutorisatieNiveauManager } from \"../autorisatieniveau-manager/autorisatieniveau-manager\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport classnames from \"classnames\";\nimport classes from \"./beschikbare-taxatiebureaus/beschikbare-taxatiebureaus.module.scss\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Taxatiebureaus = (props: FormikProps<TaxatiebureausState> & WithSaveData<TaxatiebureausState>): ReactElement => {\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n return (\n <FormFirstFocus>\n <Form>\n <PlatformFoutenSamenvatting />\n\n <fieldset\n disabled={!(isBeheerder || autorisatieNiveau.taxatiebureausNiveau === InstellingNiveauOptions.Medewerker)}\n >\n <CardWrapper className=\"px-3\">\n <div className={classnames(classes.text_container, \"text-container\")}>\n <div className={\"p-2\"}>\n <h2>Taxatiebureaus </h2>\n <AutorisatieNiveauManager manageFor={autorisatieNiveau.taxatiebureausNiveau} />\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n </div>\n </div>\n </CardWrapper>\n <CardWrapper className=\"px-3\">\n <Card title=\"Beschikbare taxatiebureaus\" className=\"w-100\">\n <div className=\"px-1\">\n <BeschikbareTaxatiebureaus />\n </div>\n </Card>\n </CardWrapper>\n </fieldset>\n\n {/* istanbul ignore next */\n process.env.NODE_ENV === \"development\" && <Debug />}\n </Form>\n </FormFirstFocus>\n );\n};\n\nTaxatiebureaus.displayName = \"Taxatiebureaus\";\n\nexport default withAdviesboxFormik<TaxatiebureausProps & WithSaveData<TaxatiebureausState>, TaxatiebureausState>({\n // Transform outer props into form values\n mapPropsToValues: (e: TaxatiebureausProps): TaxatiebureausState => e,\n validationSchema: taxatiebureausSchema\n})(Taxatiebureaus);\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { TaxatiebureausOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport { mapDlTargetToTaxatiebureausUiField, mapTaxatiebureausDlToUi, mapTaxatiebureausUiToDl } from \"./infra\";\nimport Taxatiebureaus from \"./taxatiebureaus\";\n\nconst TaxatiebureausAjax = (): ReactElement => {\n // TODO: replace useRequestInit/useAbortableFetch with useAdviesboxData\n const { requestInit, settings, user, params } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/BeheerPartijen/Taxatiebureaus`;\n const { loading, error, data } = useAbortableFetch<TaxatiebureausOutput>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapTaxatiebureausDlToUi(\"taxatiebureaus\", data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <Taxatiebureaus\n saveData={saveData(\n user,\n params.vestiging ?? \"\",\n url,\n settings.OcpApimSubscriptionKey,\n mapTaxatiebureausUiToDl,\n mapDlTargetToTaxatiebureausUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nTaxatiebureausAjax.displayName = \"TaxatiebureausAjax\";\n\nexport default withErrorBoundary(TaxatiebureausAjax);\n","import { AdviseurMenu, AuthContext, ErrorPage, FeatureComponent, InvalidAdviesboxResultErrorPage, NavigationBar, Notificaties2Menu, NotificatiesMenu, PageLoading, SupportMenu, SupportRemoteAssistanceModal, SupportTicketModalAjax, useRequestInit } from \"adviesbox-shared\";\nimport React, { ReactElement, useContext, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { OrganisatiesOutput, VestigingenOutput } from \"../.generated/licenties/licentiestypes\";\nimport UserDetailsContext from \"../user-details/user-details-context\";\nimport classes from \"./TopNavbar.module.scss\";\nimport \"./TopNavbar.scss\"\nimport { AppDataContext } from \"../navigation/appdata-context\";\n\nconst TopNavbar = (): ReactElement => {\n const { user } = useContext(AuthContext);\n const { activePage } = useContext(AppDataContext);\n const { userDetails } = useContext(UserDetailsContext);\n const { params, settings, requestInit } = useRequestInit();\n const { vestiging: vestigingId } = useParams<{ vestiging: string }>();\n const [showMeldingmaken, setShowMeldingMaken] = useState(false);\n const [showRemoteAssistance, setShowRemoteAssistance] = useState(false);\n const [showInvalidAdviesboxResultErrorPage, setShowInvalidAdviesboxResultErrorPage] = useState(false);\n\n const vestiging = useAbortableFetch<VestigingenOutput>(\n `${settings.licentiesOrigin}/Vestigingen/${vestigingId}`,\n requestInit\n );\n\n const organisatieId = userDetails.organisatieId ? userDetails.organisatieId : null;\n const organisatieUrl = organisatieId ? `${settings.licentiesOrigin}/Organisaties/${organisatieId}` : null;\n const organisatie = useAbortableFetch<OrganisatiesOutput>(organisatieUrl, requestInit);\n\n\n if (vestiging.error) {\n return <ErrorPage error={vestiging.error} />;\n }\n\n if (organisatie.error) {\n return <ErrorPage error={organisatie.error} />;\n }\n\n if (vestiging.loading || !vestiging.data || organisatie.loading || !organisatie.data) {\n return <PageLoading />;\n }\n\n const vestigingNaam =\n vestiging.data && typeof vestiging.data !== \"string\" && vestiging.data.isValid && params.vestiging\n ? vestiging.data.vestigingen?.[params.vestiging].naam\n : \"\";\n const organisatieNaam =\n organisatie.data && typeof organisatie.data !== \"string\" && organisatieId\n ? organisatie.data.organisaties?.[organisatieId].naam\n : \"\";\n\n if (showInvalidAdviesboxResultErrorPage) {\n return <InvalidAdviesboxResultErrorPage />;\n }\n\n if (!user) {\n return <ErrorPage error={new Error(\"user not logged in\")} />;\n }\n\n return (\n <>\n <NavigationBar title={activePage}>\n <SupportMenu\n showMeldingMaken={() => setShowMeldingMaken(true)}\n showRemoteAssistance={() => setShowRemoteAssistance(true)}\n classes={{\n iconblack: classes.iconblack,\n iconpadding: classes.iconpadding\n }}\n />\n <FeatureComponent feature=\"FeatureNotificaties2\">\n <Notificaties2Menu />\n </FeatureComponent>\n <FeatureComponent feature=\"FeatureNotificaties2\" isDisabled>\n <NotificatiesMenu />\n </FeatureComponent>\n <AdviseurMenu vestigingNaam={vestigingNaam} organisatieNaam={organisatieNaam} />\n </NavigationBar>\n {/* istanbul ignore next */ showMeldingmaken && user && (\n <SupportTicketModalAjax\n adviesdossierId={params.adviesdossier ?? null}\n user={user}\n closeModal={() => setShowMeldingMaken(false)}\n showInvalidResultErrorPage={() => setShowInvalidAdviesboxResultErrorPage(true)}\n vestigingId={params.vestiging}\n />\n )}\n {/* istanbul ignore next */ showRemoteAssistance && (\n <SupportRemoteAssistanceModal closeModal={() => setShowRemoteAssistance(false)} />\n )}\n </>\n );\n};\n\nTopNavbar.displayName = \"TopNavbar\";\n\nexport default TopNavbar;\n","import { jaarMaandInputSchema, mapPeriodeInMaandenDl2Ui } from \"adviesbox-shared\";\nimport * as Yup from \"yup\";\nimport { InferType } from \"yup\";\nimport {\n AoScenarioOptions,\n ControleGewenstNbiOptions,\n ControleGewenstInkomenOptions,\n ControleMaandlastOptions,\n DuurOverzichtOptions\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { yupEnum } from \"../../shared/utils/yup-enum\";\n\nexport const controleHypotheeknormSchema = Yup.object({\n controleMaandlast: Yup.boolean().default(true),\n controleMaandlastEnumWaarde: yupEnum(ControleMaandlastOptions).default(ControleMaandlastOptions.BenodigdInkomen),\n controleerMaximaleHypotheek: Yup.boolean().default(true)\n});\n\nexport const controleGewenstInkomenSchema = Yup.object({\n controleOpGewenstInkomen: yupEnum(ControleGewenstInkomenOptions).default(\n ControleGewenstInkomenOptions.NettoBesteedbaarInkomen\n ),\n controleGewenstNbi: yupEnum(ControleGewenstNbiOptions).default(ControleGewenstNbiOptions.BehoudenHuidigNbi),\n margeOndergrensPercentage: Yup.number()\n .nullable()\n .default(null),\n margeBovengrensPercentage: Yup.number()\n .nullable()\n .default(null),\n vastBedrag: Yup.number()\n .nullable()\n .default(null),\n huidigNbiPercentage: Yup.number()\n .nullable()\n .default(null),\n gewijzigdeJarenTonen: Yup.boolean()\n .nullable()\n .default(true),\n benodigdKapitaalTonen: Yup.boolean()\n .nullable()\n .default(true)\n});\n\nexport const uitgangspuntenToetsingSchema = Yup.object({\n controleHypotheeknorm: controleHypotheeknormSchema,\n controleGewenstInkomen: controleGewenstInkomenSchema\n});\n\nexport const werkloosheidSchema = Yup.object({\n controleHypotheeknorm: controleHypotheeknormSchema,\n controleGewenstInkomen: controleGewenstInkomenSchema\n});\n\nexport const pensioenSchema = Yup.object({\n controleHypotheeknorm: controleHypotheeknormSchema,\n controleGewenstInkomen: controleGewenstInkomenSchema\n});\n\nexport const overlijdenSchema = Yup.object({\n duurOverzicht: yupEnum(DuurOverzichtOptions).default(DuurOverzichtOptions.Levenslang),\n overzichtDuurInJaren: Yup.number()\n .nullable()\n .default(10),\n overzichtTotLeeftijdInMaanden: jaarMaandInputSchema.default(mapPeriodeInMaandenDl2Ui(67 * 12)),\n controleHypotheeknorm: controleHypotheeknormSchema,\n controleGewenstInkomen: controleGewenstInkomenSchema\n});\n\nexport const arbeidsongeschiktheidScenarioSchema = Yup.object({\n scenario: yupEnum(AoScenarioOptions).default(AoScenarioOptions.Standaard),\n aoPercentage: Yup.number().default(50),\n duurzaamAo: Yup.boolean()\n .nullable()\n .default(false),\n verdiencapaciteitPercentage: Yup.number().default(50)\n});\n\nexport const arbeidsongeschiktheidSchema = Yup.object({\n toetsjaarTekort: Yup.number().default(7),\n scenarios: Yup.array(arbeidsongeschiktheidScenarioSchema).default([\n {\n scenario: AoScenarioOptions.Standaard,\n aoPercentage: 50,\n duurzaamAo: null,\n verdiencapaciteitPercentage: 50\n }\n ]),\n controleHypotheeknorm: controleHypotheeknormSchema,\n controleGewenstInkomen: controleGewenstInkomenSchema\n});\n\nexport const uitgangspuntenSchema = Yup.object({\n werkloosheid: werkloosheidSchema,\n pensioen: pensioenSchema,\n overlijden: overlijdenSchema,\n arbeidsongeschiktheid: arbeidsongeschiktheidSchema\n});\n\nexport type UitgangspuntenState = InferType<typeof uitgangspuntenSchema>;\nexport type UitgangspuntenProps = InferType<typeof uitgangspuntenSchema>;\nexport type ArbeidsongeschiktheidType = InferType<typeof arbeidsongeschiktheidSchema>;\nexport type UitgangspuntenToetsingType = InferType<typeof uitgangspuntenToetsingSchema>;\nexport type OverlijdenType = InferType<typeof overlijdenSchema>;\nexport type PensioenType = InferType<typeof pensioenSchema>;\nexport type WerkloosheidType = InferType<typeof werkloosheidSchema>;\nexport type ControleHypotheeknormType = InferType<typeof controleHypotheeknormSchema>;\nexport type ControleGewenstInkomenType = InferType<typeof controleGewenstInkomenSchema>;\n","import { FieldMap, UiName } from \"../../shared/types\";\n\nimport {\n uitgangspuntenSchema,\n UitgangspuntenState,\n werkloosheidSchema,\n pensioenSchema,\n overlijdenSchema,\n arbeidsongeschiktheidSchema,\n ControleHypotheeknormType,\n ControleGewenstInkomenType,\n arbeidsongeschiktheidScenarioSchema,\n controleHypotheeknormSchema,\n controleGewenstInkomenSchema\n} from \"./uitgangspunten-schema\";\nimport {\n ControleMaandlastOptions,\n ControleGewenstNbiOptions,\n UitgangspuntenAdvies,\n UitgangspuntenAdviesOutput,\n UitgangspuntenAdviesControleHypotheeknorm,\n UitgangspuntenAdviesControleGewenstInkomen,\n UitgangspuntenAdviesOverlijden,\n UitgangspuntenAdviesWerkloosheid,\n UitgangspuntenAdviesPensioen,\n UitgangspuntenAdviesArbeidongeschiktheid,\n DuurOverzichtOptions,\n UitgangspuntenAdviesAoScenario\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { jaarMaandInMaanden, mapPeriodeInMaandenDl2Ui } from \"adviesbox-shared\";\nimport { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\nimport { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\n\nconst mapControleHypotheekNorm = (val: UitgangspuntenAdviesControleHypotheeknorm): ControleHypotheeknormType => ({\n controleMaandlast: !!val.controleMaandlast,\n controleMaandlastEnumWaarde: val.controleMaandlast ?? ControleMaandlastOptions.BenodigdInkomen,\n controleerMaximaleHypotheek: val.controleerMaximaleHypotheek\n});\n\nconst mapControleGewenstInkomen = (val: UitgangspuntenAdviesControleGewenstInkomen): ControleGewenstInkomenType => ({\n controleOpGewenstInkomen: val.controleOpGewenstInkomen,\n controleGewenstNbi: val.controleGewenstNbi ?? ControleGewenstNbiOptions.BehoudenHuidigNbi,\n margeOndergrensPercentage: val.margeOndergrensPercentage,\n margeBovengrensPercentage: val.margeBovengrensPercentage,\n vastBedrag: val.vastBedrag,\n huidigNbiPercentage: val.huidigNbiPercentage,\n gewijzigdeJarenTonen: val.gewijzigdeJarenTonen,\n benodigdKapitaalTonen: val.benodigdKapitaalTonen\n});\n\nconst mapWerkloosheid = createMapToUi(werkloosheidSchema).from<UitgangspuntenAdvies>({\n controleHypotheeknorm: v => mapControleHypotheekNorm(v.werkloosheid.controleHypotheeknorm),\n controleGewenstInkomen: v => mapControleGewenstInkomen(v.werkloosheid.controleGewenstInkomen)\n});\nconst mapPensioen = createMapToUi(pensioenSchema).from<UitgangspuntenAdvies>({\n controleHypotheeknorm: v => mapControleHypotheekNorm(v.pensioen.controleHypotheeknorm),\n controleGewenstInkomen: v => mapControleGewenstInkomen(v.pensioen.controleGewenstInkomen)\n});\nconst mapOverlijden = createMapToUi(overlijdenSchema).from<UitgangspuntenAdvies>({\n duurOverzicht: v => v.overlijden.duurOverzicht,\n overzichtDuurInJaren: v => v.overlijden.overzichtDuurInJaren,\n overzichtTotLeeftijdInMaanden: v => mapPeriodeInMaandenDl2Ui(v.overlijden.overzichtTotLeeftijdInMaanden ?? 67 * 12),\n controleHypotheeknorm: v => mapControleHypotheekNorm(v.overlijden.controleHypotheeknorm),\n controleGewenstInkomen: v => mapControleGewenstInkomen(v.overlijden.controleGewenstInkomen)\n});\nconst mapArbeidsongeschikt = createMapToUi(arbeidsongeschiktheidSchema).from<UitgangspuntenAdvies>({\n toetsjaarTekort: v => v.arbeidongeschiktheid.toetsjaarTekort,\n scenarios: v => v.arbeidongeschiktheid.scenarios,\n controleHypotheeknorm: v => mapControleHypotheekNorm(v.arbeidongeschiktheid.controleHypotheeknorm),\n controleGewenstInkomen: v => mapControleGewenstInkomen(v.arbeidongeschiktheid.controleGewenstInkomen)\n});\n\nfunction dl2ui(values: UitgangspuntenAdvies): UitgangspuntenState {\n const uitgangspuntenAdvies = {\n werkloosheid: mapWerkloosheid(values),\n pensioen: mapPensioen(values),\n overlijden: mapOverlijden(values),\n arbeidsongeschiktheid: mapArbeidsongeschikt(values)\n };\n\n return uitgangspuntenSchema.cast(uitgangspuntenAdvies);\n}\n\nexport function mapDlTargetToUitgangspuntenUiField(target: string): UiName | null {\n const map: FieldMap<UitgangspuntenAdvies> = {};\n\n return target2field(map, target);\n}\n\nexport function mapUitgangspuntenDlToUi(data: UitgangspuntenAdviesOutput): UitgangspuntenState | null {\n const uitgangspunten = data?.uitgangspuntenAdvies ?? null;\n\n if (!uitgangspunten) {\n return null;\n }\n\n return dl2ui(uitgangspunten);\n}\n\nconst mapUitgangspuntenControleHypotheeknorm = createMapToDl(controleHypotheeknormSchema).to<\n UitgangspuntenAdviesControleHypotheeknorm\n>({\n controleMaandlast: v => v.controleMaandlastEnumWaarde,\n controleerMaximaleHypotheek: v => v.controleerMaximaleHypotheek\n});\n\nconst mapUitgangspuntenControleGewenstInkomen = createMapToDl(controleGewenstInkomenSchema).to<\n UitgangspuntenAdviesControleGewenstInkomen\n>({\n controleOpGewenstInkomen: v => v.controleOpGewenstInkomen,\n controleGewenstNbi: v => v.controleGewenstNbi,\n margeOndergrensPercentage: v => v.margeOndergrensPercentage ?? null,\n margeBovengrensPercentage: v => v.margeBovengrensPercentage ?? null,\n vastBedrag: v => v.vastBedrag ?? null,\n huidigNbiPercentage: v => v.huidigNbiPercentage ?? null,\n gewijzigdeJarenTonen: v => v.gewijzigdeJarenTonen,\n benodigdKapitaalTonen: v => v.benodigdKapitaalTonen\n});\n\nconst mapUitgangspuntenWerkloosheid = createMapToDl(werkloosheidSchema).to<UitgangspuntenAdviesWerkloosheid>({\n controleHypotheeknorm: v => mapUitgangspuntenControleHypotheeknorm(v.controleHypotheeknorm),\n controleGewenstInkomen: v => mapUitgangspuntenControleGewenstInkomen(v.controleGewenstInkomen)\n});\n\nconst mapUitgangspuntenPensioen = createMapToDl(pensioenSchema).to<UitgangspuntenAdviesPensioen>({\n controleHypotheeknorm: v => mapUitgangspuntenControleHypotheeknorm(v.controleHypotheeknorm),\n controleGewenstInkomen: v => mapUitgangspuntenControleGewenstInkomen(v.controleGewenstInkomen)\n});\n\nconst mapUitgangspuntenOverlijden = createMapToDl(overlijdenSchema).to<UitgangspuntenAdviesOverlijden>({\n duurOverzicht: v => v.duurOverzicht,\n overzichtDuurInJaren: v =>\n v.duurOverzicht === DuurOverzichtOptions.VasteDuurInJaren ? v.overzichtDuurInJaren : null,\n overzichtTotLeeftijdInMaanden: v =>\n v.duurOverzicht === DuurOverzichtOptions.TotLeeftijd ? jaarMaandInMaanden(v.overzichtTotLeeftijdInMaanden) : null,\n controleHypotheeknorm: v => mapUitgangspuntenControleHypotheeknorm(v.controleHypotheeknorm),\n controleGewenstInkomen: v => mapUitgangspuntenControleGewenstInkomen(v.controleGewenstInkomen)\n});\n\nconst mapArbeidsongeschiktheidScenario = createMapToDl(arbeidsongeschiktheidScenarioSchema).to<\n UitgangspuntenAdviesAoScenario\n>({\n aoPercentage: v => v.aoPercentage,\n duurzaamAo: v => (v.aoPercentage && v.aoPercentage >= 80 ? v.duurzaamAo : null),\n verdiencapaciteitPercentage: v => v.verdiencapaciteitPercentage,\n scenario: v => v.scenario\n});\n\nconst mapUitgangspuntenArbeidsongeschiktheid = createMapToDl(arbeidsongeschiktheidSchema).to<\n UitgangspuntenAdviesArbeidongeschiktheid\n>({\n toetsjaarTekort: v => v.toetsjaarTekort,\n scenarios: v => v.scenarios.map(mapArbeidsongeschiktheidScenario),\n controleHypotheeknorm: v => mapUitgangspuntenControleHypotheeknorm(v.controleHypotheeknorm),\n controleGewenstInkomen: v => mapUitgangspuntenControleGewenstInkomen(v.controleGewenstInkomen)\n});\n\nexport const mapUitgangspuntenUiToDl = createMapToDl(uitgangspuntenSchema).to<UitgangspuntenAdvies>({\n instellingenScherm: v => true,\n werkloosheid: v => mapUitgangspuntenWerkloosheid(v.werkloosheid),\n pensioen: v => mapUitgangspuntenPensioen(v.pensioen),\n overlijden: v => mapUitgangspuntenOverlijden(v.overlijden),\n arbeidongeschiktheid: v => mapUitgangspuntenArbeidsongeschiktheid(v.arbeidsongeschiktheid)\n});\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType } from \"formik\";\nimport { UitgangspuntenState } from \"../infra\";\n\nconst Uitleg = ({ formik }: { formik: FormikContextType<UitgangspuntenState> }): ReactElement => {\n // const { setFieldValue } = useFormikContext<UitgangspuntenState>();\n\n return (\n <div className={\"p-3\"}>\n <span>Onderstaande instellingen worden overgenomen voor alle gebruikers.</span>\n </div>\n );\n};\n\nexport default connect<{}, UitgangspuntenState>(Uitleg);\n","import {\n CheckBox,\n Label,\n LabeledPercentageInput,\n LabeledRadioInput,\n LabeledSelectInput,\n RadioInputGroup\n} from \"adviesbox-shared\";\nimport { FormikContextType } from \"formik\";\nimport React, { ReactElement } from \"react\";\nimport {\n ControleGewenstNbiOptions,\n ControleGewenstInkomenOptions,\n ControleMaandlastOptions\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { UitgangspuntenState } from \"../infra\";\n\ntype NamePrefix = \"werkloosheid\" | \"pensioen\" | \"overlijden\" | \"arbeidsongeschiktheid\";\ntype ControleNormEnGewenstInkomenProps = {\n namePrefix: NamePrefix;\n formik: FormikContextType<UitgangspuntenState>;\n};\n\nconst ControleNormEnGewenstInkomen = ({\n namePrefix,\n formik: { values }\n}: ControleNormEnGewenstInkomenProps): ReactElement => {\n const controleNormTooltip =\n \"Hier kan in het scenario de hypotheek- of kredietsom meegenomen worden. Dit is afhankelijk van de gekozen aanleiding en gewenst advies. De hypotheeknorm wordt berekend op basis van de wet Tijdelijke regeling hypothecair krediet.\";\n\n const UitgangspuntenControleMaandlastEnumOptions = [\n {\n label: \"Benodigd inkomen voor hypotheek\",\n value: ControleMaandlastOptions.BenodigdInkomen\n },\n {\n label: \"Werkelijke last toets\",\n value: ControleMaandlastOptions.WerkelijkeLast\n }\n ];\n\n const UitgangspuntenControleHypotheeknormOptions = [\n {\n label: \"Netto besteedbaar inkomen\",\n value: ControleGewenstInkomenOptions.NettoBesteedbaarInkomen\n },\n {\n label: \"Bruto inkomenswens\",\n value: ControleGewenstInkomenOptions.BrutoInkomenswens\n },\n {\n label: \"Geen\",\n value: ControleGewenstInkomenOptions.Geen\n }\n ];\n\n const UitgangspuntenControleGewenstInkomenOptions = [\n {\n label: \"Behouden van huidige NBI\",\n value: ControleGewenstNbiOptions.BehoudenHuidigNbi\n },\n {\n label: \"Acceptabele marge op huidige NBI\",\n value: ControleGewenstNbiOptions.MargeHuidigNbi\n },\n {\n label: \"Overhouden van vast bedrag NBI\",\n value: ControleGewenstNbiOptions.VastBedrag\n },\n {\n label: \"Percentage van huidig NBI\",\n value: ControleGewenstNbiOptions.PercentageHuidigNbi\n }\n ];\n\n const tonenConfig =\n values[namePrefix].controleGewenstInkomen.controleOpGewenstInkomen !== ControleGewenstInkomenOptions.Geen &&\n values[namePrefix].controleGewenstInkomen.controleOpGewenstInkomen !==\n ControleGewenstInkomenOptions.BrutoInkomenswens;\n\n return (\n <div>\n <Label name={namePrefix} caption={<h2>Controle op norm</h2>} tooltip={controleNormTooltip} />\n <div className=\"px-2\">\n <CheckBox caption=\"Controle maandlast\" name={`${namePrefix}.controleHypotheeknorm.controleMaandlast`} />\n\n {values[namePrefix].controleHypotheeknorm.controleMaandlast === true && (\n <div className=\"ml-3\">\n <RadioInputGroup\n name={`${namePrefix}.controleHypotheeknorm.controleMaandlastEnumWaarde`}\n options={UitgangspuntenControleMaandlastEnumOptions}\n />\n </div>\n )}\n <CheckBox\n caption=\"Maximale hypotheeksom\"\n name={`${namePrefix}.controleHypotheeknorm.controleerMaximaleHypotheek`}\n />\n </div>\n <div>\n <h2 className=\"ml-3\">Controle op gewenst inkomen</h2>\n <LabeledRadioInput\n caption=\"Controle op gewenst inkomen\"\n name={`${namePrefix}.controleGewenstInkomen.controleOpGewenstInkomen`}\n options={UitgangspuntenControleHypotheeknormOptions}\n />\n {values[namePrefix].controleGewenstInkomen.controleOpGewenstInkomen ===\n ControleGewenstInkomenOptions[ControleGewenstInkomenOptions.NettoBesteedbaarInkomen] && (\n <LabeledSelectInput\n caption=\"Gewenst netto besteedbaar inkomen\"\n name={`${namePrefix}.controleGewenstInkomen.controleGewenstNbi`}\n options={UitgangspuntenControleGewenstInkomenOptions}\n />\n )}\n\n {tonenConfig &&\n values[namePrefix].controleGewenstInkomen.controleGewenstNbi ===\n ControleGewenstNbiOptions[ControleGewenstNbiOptions.MargeHuidigNbi] && (\n <>\n <LabeledPercentageInput\n caption=\"Acceptabele marge op huidig NBI\"\n name={`${namePrefix}.controleGewenstInkomen.margeBovengrensPercentage`}\n decimalen={0}\n appendChildren={\n <div className=\"d-flex align-items-center ml-2\">\n <span>Bovengrens</span>\n </div>\n }\n />\n <LabeledPercentageInput\n caption=\"\"\n name={`${namePrefix}.controleGewenstInkomen.margeOndergrensPercentage`}\n decimalen={0}\n appendChildren={\n <div className=\"d-flex align-items-center ml-2\">\n <span>Ondergrens</span>\n </div>\n }\n />\n </>\n )}\n\n {values[namePrefix].controleGewenstInkomen.controleOpGewenstInkomen ===\n ControleGewenstInkomenOptions[ControleGewenstInkomenOptions.NettoBesteedbaarInkomen] && (\n <div className=\"form-group form-row\">\n <div className={\"col-7\"}>\n <Label caption=\"Selecteer de gewenste tabellen voor het toelichten van het netto besteedbaar inkomen.\" />\n </div>\n <div className={\"col-5\"}>\n <CheckBox caption=\"Gewijzigde jaren\" name={`${namePrefix}.controleGewenstInkomen.gewijzigdeJarenTonen`} />\n <CheckBox\n caption=\"Benodigd kapitaal\"\n name={`${namePrefix}.controleGewenstInkomen.benodigdKapitaalTonen`}\n />\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default ControleNormEnGewenstInkomen;\n","import { ControleGewenstInkomenOptions } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { createISWSideEffect } from \"../../shared/components/isw-side-effects/create-isw-helpers\";\nimport { UitgangspuntenToetsingType } from \"./uitgangspunten-schema\";\n\nexport const syncScenarioMinimaalUitgangspuntSideEffects = createISWSideEffect<UitgangspuntenToetsingType>(\n (bag): void => {\n const { has, draft } = bag;\n\n if (has.controleGewenstInkomen.controleOpGewenstInkomen.changed) {\n if (draft.controleGewenstInkomen.controleOpGewenstInkomen === ControleGewenstInkomenOptions.NettoBesteedbaarInkomen) {\n draft.controleGewenstInkomen.gewijzigdeJarenTonen = true;\n draft.controleGewenstInkomen.benodigdKapitaalTonen = false;\n } else if (\n draft.controleGewenstInkomen.controleOpGewenstInkomen === ControleGewenstInkomenOptions.Geen ||\n draft.controleGewenstInkomen.controleOpGewenstInkomen === ControleGewenstInkomenOptions.BrutoInkomenswens\n ) {\n draft.controleGewenstInkomen.gewijzigdeJarenTonen = null;\n draft.controleGewenstInkomen.benodigdKapitaalTonen = null;\n }\n }\n\n if (\n has.controleHypotheeknorm.controleMaandlast.changed ||\n has.controleHypotheeknorm.controleerMaximaleHypotheek.changed ||\n has.controleGewenstInkomen.controleOpGewenstInkomen.changed\n ) {\n /* istanbul ignore next */\n if (\n !draft.controleHypotheeknorm?.controleMaandlast &&\n !draft.controleHypotheeknorm?.controleerMaximaleHypotheek &&\n draft.controleGewenstInkomen?.controleOpGewenstInkomen === \"Geen\"\n ) {\n draft.controleGewenstInkomen.controleOpGewenstInkomen = ControleGewenstInkomenOptions.NettoBesteedbaarInkomen;\n }\n }\n\n if (draft.controleGewenstInkomen.controleOpGewenstInkomen === ControleGewenstInkomenOptions.NettoBesteedbaarInkomen &&\n (has.controleGewenstInkomen.gewijzigdeJarenTonen.changed || has.controleGewenstInkomen.benodigdKapitaalTonen.changed) && draft.controleGewenstInkomen.gewijzigdeJarenTonen === false && draft.controleGewenstInkomen.benodigdKapitaalTonen === false) {\n draft.controleGewenstInkomen.gewijzigdeJarenTonen = true;\n draft.controleGewenstInkomen.benodigdKapitaalTonen = false;\n }\n }\n);\n","import { connect, FormikContextType } from \"formik\";\nimport React, { ReactElement } from \"react\";\nimport { initISWSideEffect } from \"../../shared/components/isw-side-effects/create-isw-helpers\";\nimport { ISWSideEffects } from \"../../shared/components/isw-side-effects/isw-side-effects\";\nimport { UitgangspuntenState } from \"../infra\";\nimport ControleNormEnGewenstInkomen from \"../infra/controle-norm-gewenst-inkomen\";\nimport { syncScenarioMinimaalUitgangspuntSideEffects } from \"../infra/determine-sync-inkomensuitgangspunt\";\n\nconst Werkloosheid = ({ formik }: { formik: FormikContextType<UitgangspuntenState> }): ReactElement => {\n return (\n <>\n <ISWSideEffects\n sync={initISWSideEffect<UitgangspuntenState>(\n /* istanbul ignore next */ ({ subset }) => {\n syncScenarioMinimaalUitgangspuntSideEffects(subset.werkloosheid.create());\n }\n )()}\n />\n <ControleNormEnGewenstInkomen formik={formik} namePrefix=\"werkloosheid\" />\n </>\n );\n};\n\nexport default connect<{ namePrefix: string }, UitgangspuntenState>(Werkloosheid);\n","import { connect, FormikContextType } from \"formik\";\nimport React, { ReactElement } from \"react\";\nimport { initISWSideEffect } from \"../../shared/components/isw-side-effects/create-isw-helpers\";\nimport { ISWSideEffects } from \"../../shared/components/isw-side-effects/isw-side-effects\";\nimport { UitgangspuntenState } from \"../infra\";\nimport ControleNormEnGewenstInkomen from \"../infra/controle-norm-gewenst-inkomen\";\nimport { syncScenarioMinimaalUitgangspuntSideEffects } from \"../infra/determine-sync-inkomensuitgangspunt\";\n\nconst Pensioen = ({ formik }: { formik: FormikContextType<UitgangspuntenState> }): ReactElement => {\n return (\n <>\n <ISWSideEffects\n sync={initISWSideEffect<UitgangspuntenState>(\n /* istanbul ignore next */ ({ subset }) => {\n syncScenarioMinimaalUitgangspuntSideEffects(subset.pensioen.create());\n }\n )()}\n />\n <ControleNormEnGewenstInkomen formik={formik} namePrefix=\"pensioen\" />\n </>\n );\n};\n\nexport default connect<{ namePrefix: string }, UitgangspuntenState>(Pensioen);\n","import { LabeledJaarMaandInput, LabeledNumberInput, LabeledSelectInput } from \"adviesbox-shared\";\nimport { connect, FormikContextType } from \"formik\";\nimport React, { ReactElement } from \"react\";\nimport {\n ControleGewenstInkomenOptions,\n DuurOverzichtOptions\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { initISWSideEffect } from \"../../shared/components/isw-side-effects/create-isw-helpers\";\nimport { ISWSideEffects } from \"../../shared/components/isw-side-effects/isw-side-effects\";\nimport { UitgangspuntenState } from \"../infra\";\nimport ControleNormEnGewenstInkomen from \"../infra/controle-norm-gewenst-inkomen\";\nimport { syncScenarioMinimaalUitgangspuntSideEffects } from \"../infra/determine-sync-inkomensuitgangspunt\";\n\nconst Overlijden = ({ formik }: { formik: FormikContextType<UitgangspuntenState> }): ReactElement => {\n const overlijden = formik.values.overlijden;\n\n const UitgangspuntenOverlijdenGewensteDuurOverzichtOptions = [\n {\n label: \"Tot leeftijd\",\n value: DuurOverzichtOptions.TotLeeftijd\n },\n {\n label: \"Vaste duur in jaren\",\n value: DuurOverzichtOptions.VasteDuurInJaren\n },\n {\n label: \"Levenslang\",\n value: DuurOverzichtOptions.Levenslang\n }\n ];\n\n const tonenConfig =\n overlijden.controleGewenstInkomen.controleOpGewenstInkomen !== ControleGewenstInkomenOptions.Geen &&\n overlijden.controleGewenstInkomen.controleOpGewenstInkomen !== ControleGewenstInkomenOptions.BrutoInkomenswens;\n\n return (\n <>\n <ISWSideEffects\n sync={initISWSideEffect<UitgangspuntenState>(\n /* istanbul ignore next */ ({ subset }) => {\n syncScenarioMinimaalUitgangspuntSideEffects(subset.overlijden.create());\n }\n )()}\n />\n\n <ControleNormEnGewenstInkomen formik={formik} namePrefix=\"overlijden\" />\n\n {overlijden.controleGewenstInkomen.controleOpGewenstInkomen ===\n ControleGewenstInkomenOptions[ControleGewenstInkomenOptions.NettoBesteedbaarInkomen] && (\n <LabeledSelectInput\n caption=\"Gewenste duur overzicht\"\n name=\"overlijden.duurOverzicht\"\n options={UitgangspuntenOverlijdenGewensteDuurOverzichtOptions}\n />\n )}\n {tonenConfig && overlijden.duurOverzicht === DuurOverzichtOptions[DuurOverzichtOptions.TotLeeftijd] && (\n <>\n <LabeledJaarMaandInput caption=\"Leeftijd\" name=\"overlijden.overzichtTotLeeftijdInMaanden\" />\n </>\n )}\n {tonenConfig && overlijden.duurOverzicht === DuurOverzichtOptions[DuurOverzichtOptions.VasteDuurInJaren] && (\n <>\n <LabeledNumberInput\n caption=\"Aantal jaar\"\n name=\"overlijden.overzichtDuurInJaren\"\n appendChildren={<span>Jaar</span>}\n />\n </>\n )}\n </>\n );\n};\n\nexport default connect<{ namePrefix: string }, UitgangspuntenState>(Overlijden);\n","import React, { ReactElement } from \"react\";\nimport { FormikContextType } from \"formik\";\nimport { CellInfo } from \"react-table-6\";\nimport { UitgangspuntenState } from \"../infra\";\nimport classes from \"./arbeidsongeschiktheid.module.scss\";\nimport { Icon, CheckBox, AdviesBoxColumn } from \"adviesbox-shared\";\n\nexport const EmptyComponent = (): null => null;\n\nconst createSpanWithId = (c: CellInfo): ReactElement => {\n return <span id={`${c.index}-row-scenario-arbeidsongeschiktheid`}>{c.original.scenario}</span>;\n};\n\nexport const DeleteButton = (formik: FormikContextType<UitgangspuntenState>): ((c: CellInfo) => ReactElement) => (\n c: CellInfo\n): ReactElement => {\n const arbeidsongeschiktheid = formik.values.arbeidsongeschiktheid;\n const { setFieldValue } = formik;\n\n const onClick = (): void => {\n const curr = arbeidsongeschiktheid.scenarios;\n\n curr?.splice(c.index, 1);\n setFieldValue(\"arbeidsongeschiktheid.scenarios\", curr);\n setFieldValue(\"dirty\", true);\n };\n\n return c.index === 0 ? (\n <></>\n ) : (\n <div\n data-testid={`delete-arbeidsongeschiktheid-${c.index}`}\n id={`delete-arbeidsongeschiktheid-${c.index}`}\n onClick={onClick}\n >\n <Icon name=\"prullenbak\" alt=\"prullenbak\" />\n </div>\n );\n};\n\nexport const createActiveCheckboxCell = (\n formik: FormikContextType<UitgangspuntenState>\n): ((c: CellInfo) => ReactElement) => {\n const activeCheckboxCell = (c: CellInfo): ReactElement => {\n const arbeidsongeschiktheid = formik.values.arbeidsongeschiktheid;\n const aoPercentage = arbeidsongeschiktheid.scenarios[c.index]?.aoPercentage || 50;\n const minimumAoPercentage = aoPercentage >= 80 ? false : true;\n return (\n <div className={classes.clickable_label_fix}>\n <CheckBox\n value=\"\"\n name={`arbeidsongeschiktheid.scenarios[${c.index}].duurzaamAo`}\n caption=\"\"\n disabled={minimumAoPercentage}\n />\n </div>\n );\n };\n activeCheckboxCell.displayName = \"activeCheckboxCell\";\n\n return activeCheckboxCell;\n};\n\nexport const getColumns = (formik: FormikContextType<UitgangspuntenState>): AdviesBoxColumn[] => {\n return [\n {\n Header: \"Scenario\",\n Cell: createSpanWithId\n },\n {\n Header: \"AO percentage\",\n accessor: \"aoPercentage\",\n Cell: \"PercentageInput\",\n config: { readonly: false, decimalen: 2 }\n },\n {\n Header: \"Duurzaam AO\",\n Cell: createActiveCheckboxCell(formik)\n },\n {\n Header: \"Benuttiging verdiencapaciteit\",\n accessor: \"verdiencapaciteitPercentage\",\n Cell: \"PercentageInput\",\n config: { readonly: false, decimalen: 2 }\n },\n {\n Cell: DeleteButton(formik),\n maxWidth: 30\n }\n ];\n};\n","import { DataGrid, LabeledNumberInput } from \"adviesbox-shared\";\nimport { connect, FormikContextType } from \"formik\";\nimport React, { ReactElement } from \"react\";\nimport { AoScenarioOptions } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { initISWSideEffect } from \"../../shared/components/isw-side-effects/create-isw-helpers\";\nimport { ISWSideEffects } from \"../../shared/components/isw-side-effects/isw-side-effects\";\nimport { UitgangspuntenState } from \"../infra\";\nimport ControleNormEnGewenstInkomen from \"../infra/controle-norm-gewenst-inkomen\";\nimport { syncScenarioMinimaalUitgangspuntSideEffects } from \"../infra/determine-sync-inkomensuitgangspunt\";\nimport { EmptyComponent, getColumns } from \"./arbeidsongeschiktheid-data-grid-components\";\n\nconst Arbeidsongeschiktheid = ({ formik }: { formik: FormikContextType<UitgangspuntenState> }): ReactElement => {\n const { values, setFieldValue } = formik;\n const arbeidsongeschiktheid = values.arbeidsongeschiktheid;\n\n const addScenario = (index: number): void => {\n const curr = arbeidsongeschiktheid.scenarios;\n if (index === 1) {\n curr?.push({\n scenario: AoScenarioOptions.Extra1,\n aoPercentage: 50,\n duurzaamAo: false,\n verdiencapaciteitPercentage: 50\n });\n }\n if (index === 2) {\n curr?.push({\n scenario: AoScenarioOptions.Extra2,\n aoPercentage: 50,\n duurzaamAo: false,\n verdiencapaciteitPercentage: 50\n });\n }\n setFieldValue(\"arbeidsongeschiktheid.scenarios\", curr);\n };\n\n return (\n <>\n <ISWSideEffects\n sync={initISWSideEffect<UitgangspuntenState>(\n /* istanbul ignore next */ ({ subset }) => {\n syncScenarioMinimaalUitgangspuntSideEffects(subset.arbeidsongeschiktheid.create());\n }\n )()}\n />\n <ControleNormEnGewenstInkomen formik={formik} namePrefix=\"arbeidsongeschiktheid\" />\n <LabeledNumberInput\n caption=\"Toetsjaar tekort\"\n tooltip={\n \"Het toetsjaar is het jaar vanaf passeer(ingangs)datum, waarbij het jaar van passeren(ingaan) meetelt als jaar 1.\"\n }\n name=\"arbeidsongeschiktheid.toetsjaarTekort\"\n ></LabeledNumberInput>\n\n <DataGrid\n name=\"arbeidsongeschiktheid.scenarios\"\n editable={true}\n resizable={false}\n sortable={false}\n filterable={false}\n columns={getColumns(formik)}\n showPagination={false}\n minRows={1}\n NoDataComponent={EmptyComponent}\n />\n {arbeidsongeschiktheid.scenarios.length <= 2 && (\n <div className=\"button-container\">\n <button\n id=\"add-scenario-button\"\n className=\"btn btn-primary\"\n type=\"button\"\n onClick={() => {\n addScenario(arbeidsongeschiktheid.scenarios.length);\n }}\n >\n Scenario toevoegen\n </button>\n </div>\n )}\n </>\n );\n};\n\nexport default connect<{ namePrefix: string }, UitgangspuntenState>(Arbeidsongeschiktheid);\n","import React, { ReactElement, useContext } from \"react\";\nimport { FormikProps, Form } from \"formik\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { UitgangspuntenState, UitgangspuntenProps, uitgangspuntenSchema } from \"./infra\";\nimport Uitleg from \"./uitleg/uitleg\";\nimport Werkloosheid from \"./werkloosheid/werkloosheid\";\nimport Pensioen from \"./pensioen/pensioen\";\nimport Overlijden from \"./overlijden/overlijden\";\nimport Arbeidsongeschiktheid from \"./arbeidsongeschiktheid/arbeidsongeschiktheid\";\nimport { AutorisatieNiveauManager } from \"../autorisatieniveau-manager/autorisatieniveau-manager\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { CardWrapper, Card, PlatformFoutenSamenvatting } from \"adviesbox-shared\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Uitgangspunten = (props: FormikProps<UitgangspuntenState> & WithSaveData<UitgangspuntenState>): ReactElement => {\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n return (\n <Form>\n <PlatformFoutenSamenvatting />\n\n <fieldset\n disabled={!(isBeheerder || autorisatieNiveau.uitgangspuntenAdviesNiveau === InstellingNiveauOptions.Medewerker)}\n >\n <CardWrapper className=\"px-3\">\n <div className=\"text-container\">\n <div className=\"p-2\">\n <h2 className=\"p-0\">Uitgangspunten Advies </h2>\n <AutorisatieNiveauManager manageFor={autorisatieNiveau.uitgangspuntenAdviesNiveau} />\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n </div>\n </div>\n </CardWrapper>\n <CardWrapper maxRowCount={1} className=\"px-3\">\n <Card title=\"Let op\">\n <Uitleg />\n </Card>\n </CardWrapper>\n <CardWrapper className=\"px-3\" maxRowCount={7}>\n <Card title=\"Werkloosheid\">\n <Werkloosheid namePrefix=\"werkloosheid\" />\n </Card>\n <Card title=\"Pensioen\">\n <Pensioen namePrefix=\"pensioen\" />\n </Card>\n <Card title=\"Overlijden\">\n <Overlijden namePrefix=\"overlijden\" />\n </Card>\n <Card title=\"Arbeidsongeschiktheid\">\n <Arbeidsongeschiktheid namePrefix=\"arbeidsongeschiktheid\" />\n </Card>\n </CardWrapper>\n </fieldset>\n\n {/* istanbul ignore next */\n process.env.NODE_ENV === \"development\" && <Debug />}\n </Form>\n );\n};\n\nUitgangspunten.displayName = \"Uitgangspunten\";\n\nexport default withAdviesboxFormik<UitgangspuntenProps & WithSaveData<UitgangspuntenState>, UitgangspuntenState>({\n mapPropsToValues: (e: UitgangspuntenProps): UitgangspuntenState => e,\n validationSchema: uitgangspuntenSchema\n})(Uitgangspunten);\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { UitgangspuntenAdviesOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport { mapDlTargetToUitgangspuntenUiField, mapUitgangspuntenDlToUi, mapUitgangspuntenUiToDl } from \"./infra\";\nimport Uitgangspunten from \"./uitgangspunten\";\n\nconst UitgangspuntenAjax = (): ReactElement => {\n // TODO: replace useRequestInit/useAbortableFetch with useAdviesboxData\n const { user, requestInit, settings, params } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/UitgangspuntenAdvies`;\n\n const { loading, error, data } = useAbortableFetch<UitgangspuntenAdviesOutput>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapUitgangspuntenDlToUi(data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <Uitgangspunten\n saveData={saveData(\n user,\n params.vestiging ?? \"\",\n url,\n settings.OcpApimSubscriptionKey,\n mapUitgangspuntenUiToDl,\n mapDlTargetToUitgangspuntenUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nUitgangspuntenAjax.displayName = \"UitgangspuntenAjax\";\n\nexport default withErrorBoundary(UitgangspuntenAjax);\n","import { InferType } from \"yup\";\nimport * as Yup from \"yup\";\n\nexport const beschikbarebeheerdersSchema = Yup.object({\n partijen: Yup.array(\n Yup.object({\n code: Yup.string(),\n partijnaam: Yup.string(),\n actief: Yup.boolean(),\n agentnummer: Yup.string().nullable()\n })\n ).default([])\n});\n\nexport const vermogensbeheerdersSchema = Yup.object({\n beschikbarebeheerders: beschikbarebeheerdersSchema\n});\n\nexport type VermogensbeheerdersState = InferType<typeof vermogensbeheerdersSchema>;\nexport type VermogensbeheerdersProps = InferType<typeof vermogensbeheerdersSchema>;\nexport type BeschikbarebeheerdersType = InferType<typeof beschikbarebeheerdersSchema>;\n","import { FieldMap, UiName } from \"../../shared/types\";\nimport { vermogensbeheerdersSchema, VermogensbeheerdersState } from \"./vermogensbeheerders-schema\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\n\nfunction dl2ui(values: any): VermogensbeheerdersState {\n const vermogensbeheerders = {\n ...vermogensbeheerdersSchema.default(),\n beschikbarebeheerders: {\n ...vermogensbeheerdersSchema.default().beschikbarebeheerders,\n partijen: values.partijen\n }\n };\n\n return vermogensbeheerdersSchema.cast(vermogensbeheerders);\n}\n\nexport function mapVermogensbeheerdersDlToUi(\n vermogensbeheerdersId: string,\n data: any\n): VermogensbeheerdersState | null {\n const vermogensbeheerders = data ? data[vermogensbeheerdersId] : null;\n\n if (!vermogensbeheerders) {\n return null;\n }\n\n return dl2ui(vermogensbeheerders);\n}\n\nexport function mapVermogensbeheerdersUiToDl(vermogensbeheerders: VermogensbeheerdersState): any {\n return {\n partijen: vermogensbeheerders.beschikbarebeheerders.partijen\n };\n}\n\nexport function mapDlTargetToVermogensbeheerdersUiField(target: string): UiName | null {\n const map: FieldMap<any> = {};\n\n return target2field(map, target);\n}\n","import React, { ReactElement, ChangeEvent, RefObject, useRef } from \"react\";\nimport { FormikContextType } from \"formik\";\nimport { Column, CellInfo } from \"react-table-6\";\nimport { VermogensbeheerdersState } from \"../infra\";\nimport { CheckBox } from \"adviesbox-shared\";\nimport classes from \"./beschikbarebeheerders.module.scss\";\nimport classnames from \"classnames\";\n\nexport const EmptyComponent = (): null => null;\n\nconst createSpanWithId = (c: CellInfo): ReactElement => {\n return <span id={`${c.index}-row-partijnaam-bank-vermogensbeheerders`}>{c.original.partijnaam}</span>;\n};\n\nexport const createActiveCheckboxCell = (c: CellInfo): ReactElement => {\n return (\n <div className={classes.clickable_label_fix}>\n <CheckBox\n name={`beschikbarebeheerders.partijen[${c.index}].actief`}\n caption=\"\"\n disabled={c.original.code === \"XX\"}\n />\n </div>\n );\n};\n\nexport const createTextInputAgentNummerCell = (\n formik: FormikContextType<VermogensbeheerdersState>\n): ((c: CellInfo) => ReactElement) => (c: CellInfo): ReactElement => {\n const { values, setFieldValue } = formik;\n const inputElement: RefObject<HTMLInputElement> | null = useRef(null);\n\n const onMouseUp = (): void => {\n inputElement.current?.focus();\n };\n\n const onBlur = (e: ChangeEvent<HTMLInputElement>): void => {\n setFieldValue(`beschikbarebeheerders.partijen[${c.index}].agentnummer`, e.target.value);\n };\n\n return (\n <div className=\"input-group\">\n <input\n data-testid={`agentnummer-input-${c.index}`}\n id={`agentnummer-input-${c.index}`}\n type=\"text\"\n // ../../shared/components/tekst-input/TextInput.module.scss: input_control\n className={classnames(\"input_control\", \"grid-cell\")}\n defaultValue={values.beschikbarebeheerders.partijen[c.index].agentnummer || \"\"}\n onBlur={onBlur}\n ref={inputElement}\n onMouseUp={onMouseUp}\n />\n </div>\n );\n};\n\nexport const getColumns = (formik: FormikContextType<VermogensbeheerdersState>): Column[] => {\n return [\n {\n Header: \"Partijnaam\",\n Cell: createSpanWithId\n },\n {\n Header: \"Actief\",\n Cell: createActiveCheckboxCell,\n maxWidth: 100\n },\n {\n Header: \"Agentnummer\",\n Cell: createTextInputAgentNummerCell(formik)\n }\n ];\n};\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType } from \"formik\";\nimport { VermogensbeheerdersState } from \"../infra\";\nimport { getColumns, EmptyComponent } from \"./beheerders-data-grid-components\";\nimport { DataGrid } from \"adviesbox-shared\";\n\nconst Beschikbarebeheerders = ({ formik }: { formik: FormikContextType<VermogensbeheerdersState> }): ReactElement => {\n const { values } = formik;\n\n return (\n <>\n <DataGrid\n name=\"beschikbarebeheerders.partijen\"\n editable={true}\n resizable={false}\n sortable={false}\n filterable={false}\n columns={getColumns(formik)}\n minRows={values.beschikbarebeheerders.partijen.length || 0}\n pageSize={values.beschikbarebeheerders.partijen.length || 0}\n showPagination={false}\n NoDataComponent={EmptyComponent}\n />\n </>\n );\n};\n\nexport default connect<{}, VermogensbeheerdersState>(Beschikbarebeheerders);\n","import React, { ReactElement, useContext } from \"react\";\nimport { Form, FormikProps } from \"formik\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { Card, CardWrapper, PlatformFoutenSamenvatting } from \"adviesbox-shared\";\n\nimport { VermogensbeheerdersState, VermogensbeheerdersProps, vermogensbeheerdersSchema } from \"./infra\";\n\nimport Beschikbarebeheerders from \"./beschikbarebeheerders/beschikbarebeheerders\";\nimport { AutorisatieNiveauManager } from \"../autorisatieniveau-manager/autorisatieniveau-manager\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\n\nconst Vermogensbeheerders = (\n props: FormikProps<VermogensbeheerdersState> & WithSaveData<VermogensbeheerdersState>\n): ReactElement => {\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n return (\n <Form>\n <PlatformFoutenSamenvatting />\n\n <fieldset\n disabled={!(isBeheerder || autorisatieNiveau.vermogensbeheerdersNiveau === InstellingNiveauOptions.Medewerker)}\n >\n <CardWrapper className=\"px-3\">\n <div className=\"text-container\">\n <div className={\"p-2\"}>\n <h2 className={\"p-0\"}>Vermogensbeheerders </h2>\n <AutorisatieNiveauManager manageFor={autorisatieNiveau.vermogensbeheerdersNiveau} />\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n </div>\n </div>\n </CardWrapper>\n <CardWrapper className=\"px-3\">\n <Card title=\"Beschikbare Vermogensbeheerders\" className=\"w-100\">\n <div className=\"px-1\">\n <Beschikbarebeheerders />\n </div>\n </Card>\n </CardWrapper>\n </fieldset>\n\n {/* istanbul ignore next */\n process.env.NODE_ENV === \"development\" && <Debug />}\n </Form>\n );\n};\n\nVermogensbeheerders.displayName = \"Vermogensbeheerders\";\n\nexport default withAdviesboxFormik<\n VermogensbeheerdersProps & WithSaveData<VermogensbeheerdersState>,\n VermogensbeheerdersState\n>({\n // Transform outer props into form values\n mapPropsToValues: (e: VermogensbeheerdersProps): VermogensbeheerdersState => e,\n validationSchema: vermogensbeheerdersSchema\n})(Vermogensbeheerders);\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { VermogensbeheerdersOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport {\n mapDlTargetToVermogensbeheerdersUiField,\n mapVermogensbeheerdersDlToUi,\n mapVermogensbeheerdersUiToDl\n} from \"./infra\";\nimport Vermogensbeheerders from \"./vermogensbeheerders\";\n\nconst VermogensbeheerdersAjax = (): ReactElement => {\n // TODO: replace useRequestInit/useAbortableFetch with useAdviesboxData\n const { user, requestInit, params, settings } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/BeheerPartijen/Vermogensbeheerders`;\n\n const { loading, error, data } = useAbortableFetch<VermogensbeheerdersOutput>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapVermogensbeheerdersDlToUi(\"vermogensbeheerders\", data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <Vermogensbeheerders\n saveData={saveData(\n user,\n params.vestiging ?? \"\",\n url,\n settings.OcpApimSubscriptionKey,\n mapVermogensbeheerdersUiToDl,\n mapDlTargetToVermogensbeheerdersUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nVermogensbeheerdersAjax.displayName = \"VermogensbeheerdersAjax\";\n\nexport default withErrorBoundary(VermogensbeheerdersAjax);\n","import * as Yup from \"yup\";\nimport { InferType } from \"yup\";\n\nexport const beschikbareVerzekeraarsPartijen = Yup.object({\n serviceproviderId: Yup.string().nullable(),\n softwareKoppelingId: Yup.string().nullable(),\n aanvraagNaar: Yup.string()\n .default(\"\")\n .nullable(),\n code: Yup.string(),\n partijnaam: Yup.string(),\n actief: Yup.boolean(),\n agentnummer: Yup.string().nullable()\n});\n\nexport const beschikbareVerzekeraarsServiceProviders = Yup.object({\n serviceproviderId: Yup.string(),\n naam: Yup.string().nullable(),\n hdnNummer: Yup.string().nullable()\n});\n\nexport const beschikbareVerzekeraarsSoftwareKoppelingen = Yup.object({\n softwareKoppelingId: Yup.string().default(\"\"),\n naam: Yup.string().nullable()\n});\n\nexport const beschikbareVerzekeraarsSchema = Yup.object({\n partijen: Yup.array(beschikbareVerzekeraarsPartijen).default([]),\n serviceProviders: Yup.array(beschikbareVerzekeraarsServiceProviders).default([]),\n softwareKoppelingen: Yup.array(beschikbareVerzekeraarsSoftwareKoppelingen).default([])\n});\n\nexport const verzekeraarsSchema = Yup.object({\n beschikbareVerzekeraars: beschikbareVerzekeraarsSchema\n});\n\nexport type VerzekeraarsState = InferType<typeof verzekeraarsSchema>;\nexport type VerzekeraarsProps = InferType<typeof verzekeraarsSchema>;\n\nexport type BeschikbareVerzekeraarsType = InferType<typeof beschikbareVerzekeraarsSchema>;\n","import {\n VerzekeraarPartij,\n ServiceproviderReadOnly,\n SoftwareKoppelingReadOnly,\n Verzekeraars,\n VerzekeraarsOutput\n} from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { createMapToUi } from \"../../shared/utils/create-map-to-ui\";\nimport {\n beschikbareVerzekeraarsPartijen,\n beschikbareVerzekeraarsServiceProviders,\n beschikbareVerzekeraarsSoftwareKoppelingen,\n VerzekeraarsState\n} from \".\";\nimport { UiName } from \"adviesbox-shared/utils/types\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\nimport { FieldMap } from \"../../shared/types\";\n\nconst getAanvraagNaar = (verzekeraarPartij: VerzekeraarPartij): string | null => {\n if (verzekeraarPartij.serviceproviderId) return `Serviceprovider**${verzekeraarPartij.serviceproviderId}`;\n else if (verzekeraarPartij.softwareKoppelingId) return `SoftwareKoppeling**${verzekeraarPartij.softwareKoppelingId}`;\n return null;\n};\n\nconst mapPartijen = createMapToUi(beschikbareVerzekeraarsPartijen).from<VerzekeraarPartij>({\n actief: v => v.actief,\n agentnummer: v => v.agentnummer,\n code: v => v.code,\n partijnaam: v => v.partijnaam,\n serviceproviderId: v => v.serviceproviderId,\n softwareKoppelingId: v => v.softwareKoppelingId,\n aanvraagNaar: v => getAanvraagNaar(v)\n});\n\nconst mapServiceProvider = createMapToUi(beschikbareVerzekeraarsServiceProviders).from<ServiceproviderReadOnly>({\n naam: v => v.naam,\n serviceproviderId: v => v.serviceproviderId,\n hdnNummer: v => v.hdnNummer\n});\n\nconst mapSoftwareKoppeling = createMapToUi(beschikbareVerzekeraarsSoftwareKoppelingen).from<SoftwareKoppelingReadOnly>({\n naam: v => v.naam,\n softwareKoppelingId: v => v.softwareKoppelingId\n});\n\nfunction dl2ui(values: Verzekeraars): VerzekeraarsState {\n const verzekeraars = {\n beschikbareVerzekeraars: {\n partijen: values.partijen?.map(c => mapPartijen(c)) || [],\n serviceProviders:\n values.serviceproviders\n ?.map(c => mapServiceProvider(c))\n .sort((a: any, b: any): number => {\n return new Intl.Collator([\"NL\"]).compare(a.naam || \"\", b.naam || \"\");\n }) || [],\n softwareKoppelingen:\n values.softwareKoppelingen\n ?.map(c => mapSoftwareKoppeling(c))\n .sort((a: any, b: any): number => {\n return new Intl.Collator([\"NL\"]).compare(a.naam || \"\", b.naam || \"\");\n }) || []\n }\n };\n return verzekeraars;\n}\n\nexport function mapverzekeraarsDlToUi(data: VerzekeraarsOutput): VerzekeraarsState | null {\n const verzekeraars = data && data.verzekeraars ? data.verzekeraars : /* istanbul ignore next*/ null;\n\n if (!verzekeraars) {\n return null;\n }\n return dl2ui(verzekeraars);\n}\n\nexport function mapDlTargetToverzekeraarsUiField(target: string): UiName | null {\n const map: FieldMap<any> = {};\n\n return target2field(map, target);\n}\n","import { Verzekeraars, VerzekeraarPartij } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { beschikbareVerzekeraarsPartijen, verzekeraarsSchema } from \"./verzekeraars-schema\";\nimport { createMapToDl } from \"../../shared/utils/create-map-to-dl\";\n\nconst mapPartijen = createMapToDl(beschikbareVerzekeraarsPartijen).to<VerzekeraarPartij>({\n actief: v => v.actief,\n agentnummer: v => v.agentnummer,\n code: v => v.code,\n partijnaam: v => v.partijnaam,\n serviceproviderId: v => v.serviceproviderId,\n softwareKoppelingId: v => v.softwareKoppelingId\n});\n\nexport const mapverzekeraarsUiToDl = createMapToDl(verzekeraarsSchema).to<Verzekeraars>({\n partijen: v => v.beschikbareVerzekeraars.partijen.map(c => mapPartijen(c)),\n serviceproviders: v => v.beschikbareVerzekeraars.serviceProviders,\n softwareKoppelingen: v => v.beschikbareVerzekeraars.softwareKoppelingen\n});\n","import { CheckBox } from \"adviesbox-shared\";\nimport classnames from \"classnames\";\nimport { FormikContextType } from \"formik\";\nimport React, { ChangeEvent, ReactElement, RefObject, useRef } from \"react\";\nimport { CellInfo, Column } from \"react-table-6\";\nimport { VerzekeraarsState } from \"../infra\";\nimport classes from \"./beschikbare-verzekeraars.module.scss\";\nimport { AanvraagType } from \"../../geldverstrekkers/infra\";\nimport { LabelValuePairs } from \"adviesbox-shared/utils/types\";\n\nexport const EmptyComponent = (): null => null;\n\nconst createSpanWithId = (c: CellInfo): ReactElement => {\n return <span id={`${c.index}-row-partijnaam-verzekeraars`}>{c.original.partijnaam}</span>;\n};\n\nconst getAanvraagNaarOptions = (values: VerzekeraarsState): LabelValuePairs => {\n const aanvraagNaarOptions: LabelValuePairs = [];\n values.beschikbareVerzekeraars.serviceProviders.forEach(serviceprovider => {\n aanvraagNaarOptions.push({\n label: `${serviceprovider.naam}`,\n value: `${AanvraagType.Serviceprovider}**${serviceprovider.serviceproviderId}`\n });\n });\n values.beschikbareVerzekeraars.softwareKoppelingen.forEach(softwareKoppeling => {\n aanvraagNaarOptions.push({\n label: `${softwareKoppeling.naam}`,\n value: `${AanvraagType.SoftwareKoppeling}**${softwareKoppeling.softwareKoppelingId}`\n });\n });\n\n aanvraagNaarOptions.sort((a, b) => (a.label > b.label ? 1 : -1));\n return aanvraagNaarOptions;\n};\n\nexport const createAanvraagNaarSelectInput = (\n formik: FormikContextType<VerzekeraarsState>\n): ((c: CellInfo) => ReactElement) => (c: CellInfo): ReactElement => {\n const { setFieldValue, values } = formik;\n const setAanvraagNaar = (event: ChangeEvent<HTMLSelectElement>): void => {\n const val = event.target.value === \"null\" ? null : event.target.value;\n const [aanvraagType, aanvraagId] = event.target.value.split(\"**\");\n const isServiceprovider = aanvraagType === AanvraagType.Serviceprovider;\n setFieldValue(`beschikbareVerzekeraars.partijen[${c.index}].aanvraagNaar`, val);\n\n if (isServiceprovider) {\n setFieldValue(`beschikbareVerzekeraars.partijen[${c.index}].serviceproviderId`, aanvraagId);\n setFieldValue(`beschikbareVerzekeraars.partijen[${c.index}].softwareKoppelingId`, null);\n } else {\n setFieldValue(`beschikbareVerzekeraars.partijen[${c.index}].serviceproviderId`, null);\n setFieldValue(`beschikbareVerzekeraars.partijen[${c.index}].softwareKoppelingId`, aanvraagId);\n }\n };\n\n const aanvraagNaarOptions = getAanvraagNaarOptions(values);\n\n return (\n <div className=\"input-group\">\n <select\n id={`aanvraag-naar-select-${c.index}`}\n data-testid={`aanvraag-naar-select-${c.index}`}\n onChange={setAanvraagNaar}\n defaultValue={c.original.aanvraagNaar}\n // ../../shared/components/select-input/SelectInput.module.scss: input_control\n className={classnames(\"input_control\", \"grid-cell\")}\n >\n <option value={\"null\"}>Geen</option>\n {aanvraagNaarOptions.map(option => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n );\n};\n\nexport const createTextInputAgentNummerCell = (\n formik: FormikContextType<VerzekeraarsState>\n): ((c: CellInfo) => ReactElement) => (c: CellInfo): ReactElement => {\n const { values, setFieldValue } = formik;\n const inputElement: RefObject<HTMLInputElement> | null = useRef(null);\n\n const onMouseUp = (): void => {\n inputElement.current?.focus();\n };\n\n const onBlur = (e: ChangeEvent<HTMLInputElement>): void => {\n setFieldValue(`beschikbareVerzekeraars.partijen[${c.index}].agentnummer`, e.target.value);\n };\n\n return (\n <div className=\"input-group\">\n <input\n data-testid={`agentnummer-input-${c.index}`}\n id={`agentnummer-input-${c.index}`}\n // ../../shared/components/tekst-input/TextInput.module.scss: input_control\n className={classnames(\"input_control\", \"grid-cell\")}\n type=\"text\"\n defaultValue={values.beschikbareVerzekeraars.partijen[c.index].agentnummer || \"\"}\n onBlur={onBlur}\n ref={inputElement}\n onMouseUp={onMouseUp}\n />\n </div>\n );\n};\n\nexport const createActiveCheckboxCell = (c: CellInfo): ReactElement => {\n return (\n <div className={classes.clickable_label_fix}>\n <CheckBox\n name={`beschikbareVerzekeraars.partijen[${c.index}].actief`}\n caption=\"\"\n disabled={c.original.code === \"XX\"}\n />\n </div>\n );\n};\n\nexport const getColumns = (formik: FormikContextType<VerzekeraarsState>): Column[] => {\n return [\n {\n minWidth: 200,\n Header: \"Partijnaam\",\n Cell: createSpanWithId\n },\n {\n width: 100,\n Header: \"Actief\",\n id: \"active\",\n Cell: createActiveCheckboxCell\n },\n {\n width: 100,\n Header: \"Agentnummer\",\n id: \"agentNumber\",\n Cell: createTextInputAgentNummerCell(formik)\n },\n {\n minWidth: 200,\n Header: \"Productaanvraag naar\",\n id: \"provider\",\n Cell: createAanvraagNaarSelectInput(formik)\n }\n ];\n};\n","import { DataGrid } from \"adviesbox-shared\";\nimport { connect, FormikContextType } from \"formik\";\nimport React, { ReactElement } from \"react\";\nimport { VerzekeraarsState } from \"../infra\";\nimport { EmptyComponent, getColumns } from \"./verzekeraars-data-grid-components\";\n\nconst BeschikbareVerzekeraars = ({ formik }: { formik: FormikContextType<VerzekeraarsState> }): ReactElement => {\n const { values } = formik;\n\n return (\n <DataGrid\n name=\"beschikbareVerzekeraars.partijen\"\n editable={true}\n sortable={false}\n filterable={false}\n resizable={false}\n columns={getColumns(formik)}\n minRows={values.beschikbareVerzekeraars.partijen.length || 0}\n pageSize={values.beschikbareVerzekeraars.partijen.length || 0}\n showPagination={false}\n NoDataComponent={EmptyComponent}\n />\n );\n};\n\nexport default connect<{}, VerzekeraarsState>(BeschikbareVerzekeraars);\n","import { Card, CardWrapper, PlatformFoutenSamenvatting } from \"adviesbox-shared\";\nimport { Form, FormikProps } from \"formik\";\nimport React, { ReactElement, useContext } from \"react\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport { AutorisatieNiveauManager } from \"../autorisatieniveau-manager/autorisatieniveau-manager\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport BeschikbareVerzekeraars from \"./beschikbare-verzekeraars/beschikbare-verzekeraars\";\nimport { VerzekeraarsProps, verzekeraarsSchema, VerzekeraarsState } from \"./infra\";\n\nconst Verzekeraars = (props: FormikProps<VerzekeraarsState> & WithSaveData<VerzekeraarsState>): ReactElement => {\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n return (\n <Form>\n <PlatformFoutenSamenvatting />\n <fieldset\n disabled={!(isBeheerder || autorisatieNiveau.verzekeraarsNiveau === InstellingNiveauOptions.Medewerker)}\n >\n <CardWrapper className=\"px-3\">\n <div className=\"text-container\">\n <div className={\"p-2\"}>\n <h2 className={\"p-0\"}>Verzekeraars </h2>\n <AutorisatieNiveauManager manageFor={autorisatieNiveau.verzekeraarsNiveau} />\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n </div>\n </div>\n </CardWrapper>\n <CardWrapper className=\"px-3\">\n <Card title=\"Beschikbare verzekeraars\" className=\"w-100\">\n <div className=\"px-1\">\n <BeschikbareVerzekeraars />\n </div>\n </Card>\n </CardWrapper>\n </fieldset>\n\n {/* istanbul ignore next */\n process.env.NODE_ENV === \"development\" && <Debug />}\n </Form>\n );\n};\n\nVerzekeraars.displayName = \"verzekeraars\";\n\nexport default withAdviesboxFormik<VerzekeraarsProps & WithSaveData<VerzekeraarsState>, VerzekeraarsState>({\n // Transform outer props into form values\n mapPropsToValues: (e: VerzekeraarsProps): VerzekeraarsState => e,\n validationSchema: verzekeraarsSchema\n})(Verzekeraars);\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { VerzekeraarsOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport { mapDlTargetToverzekeraarsUiField, mapverzekeraarsDlToUi, mapverzekeraarsUiToDl } from \"./infra\";\nimport Verzekeraars from \"./verzekeraars\";\n\nconst VerzekeraarsAjax = (): ReactElement => {\n const { settings, requestInit, user, params } = useRequestInit<{ vestiging: string }>();\n const url = `${settings.instellingenFormsOrigin}/BeheerPartijen/Verzekeraars`;\n const { loading, error, data } = useAbortableFetch<VerzekeraarsOutput>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapverzekeraarsDlToUi(data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <Verzekeraars\n saveData={saveData(\n user,\n params.vestiging,\n url,\n settings.OcpApimSubscriptionKey,\n mapverzekeraarsUiToDl,\n mapDlTargetToverzekeraarsUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nVerzekeraarsAjax.displayName = \"verzekeraarsAjax\";\n\nexport default withErrorBoundary(VerzekeraarsAjax);\n","import * as Yup from \"yup\";\n\nexport const NationaleWaarborgSchema = Yup.object({\n emailaddress: Yup.string().default(\"\"),\n password: Yup.string().default(\"\"),\n apifoutNwb: Yup.number().nullable(),\n platformApiFouten: Yup.array(\n Yup.object({\n error: Yup.string(),\n field: Yup.string(),\n label: Yup.string()\n })\n ).nullable(),\n token: Yup.string()\n .nullable()\n .default(\"\"),\n reedsActief: Yup.bool().nullable()\n});\n\nexport type NationaleWaarborgState = Yup.InferType<typeof NationaleWaarborgSchema>;\nexport type NationaleWaarborgProps = Yup.InferType<typeof NationaleWaarborgSchema>;\n","import { AuthContext, LabeledTextInput, SettingsContext } from \"adviesbox-shared\";\nimport { useFormikContext } from \"formik\";\nimport React, { ReactElement, useContext } from \"react\";\nimport { useParams } from \"react-router\";\nimport Modal from \"../../shared/components/modal/Modal\";\nimport { NationaleWaarborgProps, NationaleWaarborgState } from \"../infra/nationale-waarborg-types\";\n\nexport const NationaleWaarborgModal = ({\n closeModal\n}: NationaleWaarborgProps & { closeModal?: () => void }): ReactElement => {\n const { values, setFieldValue } = useFormikContext<NationaleWaarborgState>();\n const settings = useContext(SettingsContext);\n const { user } = useContext(AuthContext);\n const params = useParams<{ vestiging?: string }>();\n\n return (\n <div className=\"d-inline-block\">\n <Modal\n title={\"Inloggen Nationale Waarborg\"}\n body={\n <div className={\"px-2\"}>\n <div>\n <p>\n Wij gebruiken onderstaande gegevens om eenmalig in te loggen bij Nationale Waarborg en een zogeheten\n identificatietoken op te halen. Wij slaan de ingevoerde inloggegevens nooit op.\n </p>\n <LabeledTextInput caption=\"E-mailadres\" name={\"emailaddress\"} />\n <LabeledTextInput caption=\"Wachtwoord\" name={\"password\"} type={\"password\"} />\n <br />\n <br />\n {values.apifoutNwb && values.apifoutNwb === 401 && (\n <p className=\"input-rood\">E-mailadres of wachtwoord is ongeldig</p>\n )}\n {values.apifoutNwb && values.apifoutNwb !== 401 && (\n <p className=\"input-rood\">Er kan geen token opgehaald worden vanuit Nationale Waarborg</p>\n )}\n </div>\n </div>\n }\n onCancelClick={closeModal}\n saveButtonTekst={\"Inloggen\"}\n onSubmitClick={async () => {\n try {\n /* istanbul ignore next*/\n if (!values.emailaddress || !values.password) return;\n\n // ophalen token bij NWB\n const responseNwb = await fetch(settings.nationaleWaarborgApiOrigin, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json;charset=UTF-8\"\n },\n body: JSON.stringify({\n uid: values.emailaddress,\n pwd: values.password\n })\n });\n\n if (responseNwb.ok) {\n const token = (await responseNwb.json()) as string;\n setFieldValue(\"token\", token);\n // opslaan van token in instellingen-forms\n /* istanbul ignore else */\n if (token) {\n const responseOpslaan = await fetch(\n `${settings.instellingenFormsOrigin}/ExterneKoppelingen/NationaleWaarborg`,\n {\n headers: {\n authorization: `${user?.token_type} ${user?.access_token}`,\n \"Ocp-Apim-Subscription-Key\": settings.OcpApimSubscriptionKey,\n \"Content-Type\": \"application/json;charset=UTF-8\",\n vestigingId: params.vestiging || \"\"\n },\n method: \"PUT\",\n body: JSON.stringify({ token: token })\n }\n );\n\n if (!responseOpslaan.ok) {\n setFieldValue(\"apifout\", 0);\n } else {\n setFieldValue(\"apifout\", null);\n setFieldValue(\"reedsActief\", true);\n closeModal && closeModal();\n }\n }\n }\n\n if (!responseNwb.ok) {\n setFieldValue(\"apifoutNwb\", responseNwb.status);\n }\n } catch (error) {\n // fout tonen\n setFieldValue(\"apifoutNwb\", 9999);\n }\n }}\n />\n </div>\n );\n};\n","import { Card, CardWrapper, ModalButton } from \"adviesbox-shared\";\nimport { useFormikContext } from \"formik\";\nimport React, { ReactElement } from \"react\";\nimport withAdviesboxFormik from \"../../shared/utils/with-adviesbox-formik\";\nimport {\n NationaleWaarborgProps,\n NationaleWaarborgSchema,\n NationaleWaarborgState\n} from \"../infra/nationale-waarborg-types\";\nimport { NationaleWaarborgModal } from \"./nationalewaarborg-modal\";\n\nconst NationaleWaarborg = (props: NationaleWaarborgProps): ReactElement => {\n const { values } = useFormikContext<NationaleWaarborgState>();\n return (\n <CardWrapper className=\"px-2\">\n <Card title=\"Koppeling Nationale Waarborg\">\n <div className=\"d-flex justify-content-center\">\n <p className=\"text-center\">\n {values.reedsActief && <>Uw koppeling is reeds geactiveerd</>}\n {!values.reedsActief && <>Koppeling niet actief, klik op onderstaande knop om de koppeling te activeren</>}\n <br />\n <br />\n <ModalButton\n parent={`dummy`}\n key={\"nwb-modal\"}\n content={<div>Koppeling {values.reedsActief ? \"opnieuw activeren\" : \"activeren\"}</div>}\n className={\"btn-primary\"}\n >\n <NationaleWaarborgModal {...NationaleWaarborgSchema.default()} />\n </ModalButton>\n </p>\n </div>\n </Card>\n </CardWrapper>\n );\n};\n\nexport default withAdviesboxFormik<NationaleWaarborgProps, NationaleWaarborgState>({\n // Transform outer props into form values\n mapPropsToValues: (e: NationaleWaarborgProps): any => e,\n validationSchema: NationaleWaarborgSchema\n})(NationaleWaarborg);\n","/* istanbul ignore file */\nimport { PageLoading, useRequestInit } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { NationaleWaarborgSchema } from \"../infra/nationale-waarborg-types\";\nimport NationaleWaarborg from \"./nationalewaarborg\";\n\nconst NationaleWaarborgAjax = (): ReactElement => {\n const { user, settings, requestInit } = useRequestInit();\n const medewerkerUrl =\n user && user.profile ? `${settings.instellingenFormsOrigin}/ExterneKoppelingen/NationaleWaarborg/Actief` : null;\n const { data, loading, error } = useAbortableFetch<{ isActief: boolean; isValid: boolean }>(\n medewerkerUrl,\n requestInit\n );\n\n if (loading) {\n return <PageLoading />;\n }\n\n if (data && typeof data !== \"string\" && data.isValid)\n return <NationaleWaarborg {...NationaleWaarborgSchema.default()} reedsActief={data.isActief} />;\n\n if (error || typeof data === \"string\") throw Error(\"Onbekende fout bij laden gegevens NationaleWaarborg-Ajax\");\n\n return <></>;\n};\n\nNationaleWaarborgAjax.displayName = \"NationaleWaarborgAjax\";\n\nexport default NationaleWaarborgAjax;\n","import { InferType } from \"yup\";\nimport * as Yup from \"yup\";\nimport { validate as isValidUUID } from \"uuid\";\n\nexport const softwareKoppelingSchema = Yup.object({\n softwareKoppelingId: Yup.string().nullable(),\n wijzigbaar: Yup.boolean(),\n naam: Yup.string(),\n actief: Yup.boolean(),\n hdnNummer: Yup.string()\n .nullable()\n .default(null),\n});\n\nexport const softwareKoppelingenSchema = Yup.object({\n partijen: Yup.array(softwareKoppelingSchema).default([]),\n});\n\nexport const elementsInstellingenSchema = Yup.object({\n locatiePortaalUrl: Yup.string()\n .nullable()\n .default(\"\"),\n organisatienummer: Yup.string()\n .nullable()\n .default(\"\"),\n gebruikersnaamApi: Yup.string()\n .nullable()\n .default(\"\"),\n wachtwoordApi: Yup.string()\n .nullable()\n .default(\"\"),\n});\n\nexport const importkoppelingInstellingenSchema = Yup.object({\n koppelingKey: Yup.string()\n .nullable()\n .default(null)\n .test({\n message: \"Ongeldige GUID\",\n test: (value: string | null) => value === null || isValidUUID(value),\n }),\n koppelingNaam: Yup.string()\n .nullable()\n .default(\"\"),\n});\n\nexport type SoftwareKoppelingenType = InferType<\n typeof softwareKoppelingenSchema\n>;\nexport type SoftwareKoppelingType = InferType<typeof softwareKoppelingSchema>;\nexport type ElementsInstellingenType = InferType<\n typeof elementsInstellingenSchema\n>;\nexport type ImportkoppelingInstellingenType = InferType<\n typeof importkoppelingInstellingenSchema\n>;\n","import { FieldMap, UiName } from \"../../shared/types\";\nimport { target2field } from \"../../shared/utils/target-to-field\";\nimport { SoftwareKoppelingenType, softwareKoppelingenSchema } from \"./software-koppelingen-schema\";\n\nfunction dl2ui(values: any): SoftwareKoppelingenType {\n const softwareKoppelingen = {\n ...softwareKoppelingenSchema.default(),\n partijen: values.partijen\n ? values.partijen.sort((a: any, b: any): number => {\n return new Intl.Collator([\"NL\"]).compare(a.naam, b.naam);\n })\n : []\n };\n\n return softwareKoppelingenSchema.cast(softwareKoppelingen);\n}\n\nexport function mapSoftwareKoppelingenDlToUi(softwareKoppelingId: string, data: any): SoftwareKoppelingenType | null {\n const softwareKoppelingen = data ? data[softwareKoppelingId] : null;\n\n if (!softwareKoppelingen) {\n return null;\n }\n\n return dl2ui(softwareKoppelingen);\n}\n\nexport function mapSoftwareKoppelingenUiToDl(softwareKoppelingen: SoftwareKoppelingenType): any {\n return {\n partijen: (softwareKoppelingen.partijen || []).map(p => ({\n softwareKoppelingId: p.softwareKoppelingId,\n naam: p.naam,\n actief: p.actief,\n hdnNummer: p.hdnNummer\n }))\n };\n}\n\nexport function mapDlTargetToSoftwareKoppelingenUiField(target: string): UiName | null {\n const map: FieldMap<any> = {};\n\n return target2field(map, target);\n}\n","import { SettingsType } from \"adviesbox-shared\";\nimport { User } from \"oidc-client\";\nimport { ElementsInstellingenType } from \"../infra\";\n\nexport const softwareKoppelingWijzigenModalApi = async (\n settings: SettingsType,\n user: User | null,\n vestigingId: string,\n elementsInstellingen: ElementsInstellingenType,\n): Promise<boolean> => {\n const url = `${settings.instellingenFormsOrigin}/ExterneKoppelingen/Elements`;\n const body = { ...elementsInstellingen, wachtwoordApi: elementsInstellingen.wachtwoordApi || null };\n const rsp = await fetch(url, {\n method: \"PUT\",\n headers: {\n authorization: `${user?.token_type} ${user?.access_token}`,\n \"Ocp-Apim-Subscription-Key\": settings.OcpApimSubscriptionKey,\n \"Content-Type\": \"application/json;charset=UTF-8\",\n vestigingId,\n },\n body: JSON.stringify(body)\n });\n\n if (!rsp.ok) {\n throw Error(`Fout bij aanroep van web-api '${url}'.`);\n }\n\n return true;\n};\n","import React, { ReactElement, useState } from \"react\";\nimport {\n LabeledTextInput,\n FormFirstFocus,\n PlatformFoutenSamenvatting,\n useRequestInit,\n ErrorPage,\n PageLoading,\n AdviesBoxFormik\n} from \"adviesbox-shared\";\nimport Modal from \"../../shared/components/modal/Modal\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { ElementsOutput } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { FormikProps } from \"formik\";\nimport { ElementsInstellingenType, elementsInstellingenSchema } from \"../infra\";\nimport { softwareKoppelingWijzigenModalApi } from \"./elements-instellingen-modal-api\";\n\nexport const ElementsInstellingenModal = ({\n onSave,\n closeModal\n}: {\n onSave?: () => void;\n closeModal?: () => void;\n}): ReactElement => {\n const { settings, user, params } = useRequestInit<{ vestiging: string }>();\n const [submitDisabled, setSubmitDisabled] = useState(false);\n const { requestInit } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/ExterneKoppelingen/Elements`;\n const { data, loading, error } = useAbortableFetch<ElementsOutput>(url, requestInit);\n\n /* istanbul ignore next */\n if (error || typeof data === \"string\") {\n const errorMessage = error\n ? error\n : { message: \"Ophalen van software koppeling instellingen mislukt\", status: 500, name: \"elements koppeling\" };\n return <ErrorPage error={errorMessage} />;\n }\n\n /* istanbul ignore next */\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const elementsInstellingen = { ...data.elements, wachtwoordApi: \"\" } as ElementsInstellingenType;\n\n const body = (\n <>\n <PlatformFoutenSamenvatting />\n <FormFirstFocus>\n <LabeledTextInput\n caption=\"Locatie portaal\"\n tooltip=\"Ga naar het inlogscherm van de Elements omgeving en kopieer de link uit je browser in dit veld\"\n name=\"locatiePortaalUrl\"\n fieldSize={\"xxl\"}\n />\n <LabeledTextInput\n caption=\"Organisatienummer\"\n tooltip=\"Vraag deze op bij de Elements supportdesk\"\n name=\"organisatienummer\"\n fieldSize={\"xxl\"}\n />\n <LabeledTextInput\n caption=\"Gebruikersnaam API\"\n tooltip=\"Vraag deze op bij de Elements supportdesk\"\n name=\"gebruikersnaamApi\"\n fieldSize={\"xxl\"}\n />\n <LabeledTextInput\n placeholder=\"********\"\n tooltip=\"Vraag deze op bij de Elements supportdesk\"\n caption=\"Wachtwoord API\"\n name=\"wachtwoordApi\"\n type=\"password\"\n fieldSize={\"xxl\"}\n />\n </FormFirstFocus>\n </>\n );\n\n return (\n <>\n <AdviesBoxFormik<ElementsInstellingenType>\n initialValues={{ ...elementsInstellingen }}\n validationSchema={elementsInstellingenSchema}\n onSave={onSave}\n closeModal={closeModal}\n render={({ submitForm, dirty, values }: FormikProps<ElementsInstellingenType>): ReactElement => (\n <>\n <Modal\n onCancelClick={closeModal}\n title=\"Instellingen wijzigen\"\n body={body}\n onSubmitClick={async () => {\n setSubmitDisabled(true);\n await softwareKoppelingWijzigenModalApi(settings, user, params.vestiging, values);\n setSubmitDisabled(false);\n await submitForm();\n }}\n submitDisabled={submitDisabled || !dirty}\n />\n </>\n )}\n />\n </>\n );\n};\n","import React, { ReactElement } from \"react\";\nimport { LabeledTextInput, FormFirstFocus, AdviesBoxFormik } from \"adviesbox-shared\";\nimport { softwareKoppelingSchema, SoftwareKoppelingType } from \"../infra\";\nimport { FormikProps } from \"formik\";\nimport Modal from \"../../shared/components/modal/Modal\";\n\nexport const HdnInstellingenModal = ({\n data,\n onSave,\n closeModal\n}: {\n data: SoftwareKoppelingType | any;\n onSave?: (data: SoftwareKoppelingType) => void;\n closeModal?: () => void\n}): ReactElement => { \n const body = (\n <>\n <FormFirstFocus>\n <LabeledTextInput caption=\"HDN nummer ontvanger\" name=\"hdnNummer\" />\n </FormFirstFocus>\n </>\n );\n\n return (\n <>\n <AdviesBoxFormik<SoftwareKoppelingType>\n initialValues={{...data}}\n validationSchema={softwareKoppelingSchema}\n onSave={onSave}\n closeModal={closeModal}\n render={({ submitForm, dirty }: FormikProps<SoftwareKoppelingType>): ReactElement => (\n <>\n <Modal\n onCancelClick={closeModal}\n title=\"Instellingen wijzigen\"\n body={body}\n onSubmitClick={submitForm}\n submitDisabled={!dirty}\n />\n </>\n )}\n />\n </>\n );\n};","import { SettingsType } from \"adviesbox-shared\";\nimport { User } from \"oidc-client\";\nimport { ImportkoppelingInstellingenType } from \"../infra\";\n\nexport const importkoppelingInstellingenModalApi = async (\n settings: SettingsType,\n user: User | null,\n vestigingId: string,\n importkoppelingId: string,\n importkoppelingInstellingen: ImportkoppelingInstellingenType\n): Promise<boolean> => {\n const url = `${settings.instellingenFormsOrigin}/ExterneKoppelingen/Importkoppelingen/${importkoppelingId}`;\n const body = { koppelingKey: importkoppelingInstellingen.koppelingKey };\n const rsp = await fetch(url, {\n method: \"PUT\",\n headers: {\n authorization: `${user?.token_type} ${user?.access_token}`,\n \"Ocp-Apim-Subscription-Key\": settings.OcpApimSubscriptionKey,\n \"Content-Type\": \"application/json;charset=UTF-8\",\n vestigingId,\n },\n body: JSON.stringify(body),\n });\n\n if (!rsp.ok) {\n throw Error(`Fout bij aanroep van web-api '${url}'.`);\n }\n\n return true;\n};\n","import React, { ReactElement, useState } from \"react\";\nimport {\n LabeledTextInput,\n FormFirstFocus,\n PlatformFoutenSamenvatting,\n useRequestInit,\n ErrorPage,\n PageLoading,\n AdviesBoxFormik,\n Icon,\n} from \"adviesbox-shared\";\nimport Modal from \"../../shared/components/modal/Modal\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { ImportkoppelingOutput } from \"../../.generated/instellingen-forms/instellingen-formstypes\";\nimport { FormikProps } from \"formik\";\nimport {\n ImportkoppelingInstellingenType,\n importkoppelingInstellingenSchema,\n} from \"../infra\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { importkoppelingInstellingenModalApi } from \"./importkoppeling-instellingen-modal-api\";\nimport { Button } from \"react-bootstrap\";\n\ninterface ImportkoppelingInstellingenModalProps {\n onSave?: () => void;\n closeModal?: () => void;\n importkoppelingId: string;\n}\n\nexport const ImportkoppelingInstellingenModal = ({\n onSave,\n closeModal,\n importkoppelingId,\n}: ImportkoppelingInstellingenModalProps): ReactElement => {\n const { settings, user, params } = useRequestInit<{\n vestiging: string;\n }>();\n const [submitDisabled, setSubmitDisabled] = useState(false);\n const { requestInit } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/ExterneKoppelingen/Importkoppelingen/${importkoppelingId}`;\n\n const { data, loading, error } = useAbortableFetch<ImportkoppelingOutput>(\n url,\n requestInit\n );\n\n /* istanbul ignore next */\n if (error || typeof data === \"string\") {\n const errorMessage = error\n ? error\n : new Error(\"Het ophalen van de importkoppelingsinstellingen is mislukt\");\n return <ErrorPage error={errorMessage} />;\n }\n\n /* istanbul ignore next */\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const importkoppelingInstellingen = data.importkoppeling as ImportkoppelingInstellingenType;\n\n const handleGenerateGUID = (\n setFieldValue: (field: string, value: any) => void\n ): void => {\n setFieldValue(\"koppelingKey\", uuidv4());\n };\n\n const renderForm = ({\n setFieldValue,\n values,\n }: FormikProps<ImportkoppelingInstellingenType>): ReactElement => (\n <>\n <PlatformFoutenSamenvatting />\n <FormFirstFocus>\n <LabeledTextInput\n caption=\"Koppeling GUID\"\n tooltip=\"Unieke identificatie voor de importkoppeling\"\n name=\"koppelingKey\"\n fieldSize={\"xxl\"}\n labelColSize={5}\n appendChildren={\n <>\n <Button\n variant=\"outline-secondary\"\n data-testid=\"copyClipboard\"\n onClick={() =>\n navigator.clipboard.writeText(values.koppelingKey ?? \"\")\n }\n >\n <Icon name=\"copy\" alt=\"KopiĆ«er naar klembord\" />\n </Button>\n <Button\n data-testid=\"guid-genereren\"\n onClick={() => handleGenerateGUID(setFieldValue)}\n >\n GUID genereren\n </Button>\n </>\n }\n />\n </FormFirstFocus>\n </>\n );\n\n const handleSubmit = async (\n values: ImportkoppelingInstellingenType\n ): Promise<void> => {\n setSubmitDisabled(true);\n await importkoppelingInstellingenModalApi(\n settings,\n user,\n params.vestiging,\n importkoppelingId,\n values\n );\n setSubmitDisabled(false);\n };\n\n return (\n <AdviesBoxFormik<ImportkoppelingInstellingenType>\n initialValues={importkoppelingInstellingen}\n validationSchema={importkoppelingInstellingenSchema}\n onSave={onSave}\n closeModal={closeModal}\n render={(formikProps: FormikProps<ImportkoppelingInstellingenType>) => (\n <Modal\n onCancelClick={closeModal}\n title=\"Instellingen wijzigen\"\n body={renderForm(formikProps)}\n onSubmitClick={async () => {\n await handleSubmit(formikProps.values);\n await formikProps.submitForm();\n }}\n submitDisabled={\n submitDisabled || !formikProps.dirty || !formikProps.isValid\n }\n />\n )}\n />\n );\n};\n","import React, {\n ReactElement,\n useRef,\n RefObject,\n ChangeEvent,\n useContext,\n} from \"react\";\nimport { FormikContextType } from \"formik\";\nimport { Column, CellInfo } from \"react-table-6\";\nimport { CheckBox, Icon, ModalButton } from \"adviesbox-shared\";\nimport classes from \"./beschikbare-software-koppelingen.module.scss\";\nimport { SoftwareKoppelingenType, SoftwareKoppelingType } from \"../infra\";\nimport classnames from \"classnames\";\nimport { ElementsInstellingenModal } from \"../elements-instellingen-modal/elements-instellingen-modal\";\nimport { HdnInstellingenModal } from \"../hdn-instellingen-modal/hdn-instellingen-modal\";\nimport { SaveFormContext } from \"../../shared/save-form/save-form-contex\";\nimport { ImportkoppelingInstellingenModal } from \"../importkoppeling-instellingen-modal/importkoppeling-instellingen-modal\";\n\n/* istanbul ignore next */\nexport const EmptyComponent = (): null => null;\n\nexport const DeleteButton = (\n formik: FormikContextType<SoftwareKoppelingenType>\n) => (c: CellInfo): ReactElement => {\n const { values, setFieldValue } = formik;\n\n const onClick = (): void => {\n const curr = values.partijen;\n curr.splice(c.index, 1);\n setFieldValue(\"partijen\", curr);\n setFieldValue(\"dirty\", true);\n };\n\n if (!values.partijen[c.index].wijzigbaar) {\n return <div />;\n }\n\n return (\n <div\n data-testid={`delete-software-koppeling-${c.index}`}\n id={`delete-software-koppeling-${c.index}`}\n onClick={onClick}\n >\n <Icon name=\"prullenbak\" alt=\"prullenbak\" />\n </div>\n );\n};\n\nexport const createActiveCheckboxCell = (c: CellInfo): ReactElement => {\n return (\n <div className={classes.clickable_label_fix}>\n <CheckBox\n name={`partijen[${c.index}].actief`}\n caption=\"\"\n disabled={false}\n />\n </div>\n );\n};\n\nexport const createTextInputSoftwareKoppelingNaamCell = (\n formik: FormikContextType<SoftwareKoppelingenType>\n): ((c: CellInfo) => ReactElement) => (c: CellInfo): ReactElement => {\n const { values, setFieldValue } = formik;\n const inputElement: RefObject<HTMLInputElement> | null = useRef(null);\n\n const onMouseUp = (): void => {\n inputElement.current?.focus();\n };\n\n const onBlur = (e: ChangeEvent<HTMLInputElement>): void => {\n setFieldValue(`partijen[${c.index}].naam`, e.target.value);\n };\n\n return (\n <div\n className={classnames(\n !values.partijen[c.index].wijzigbaar ? \"not-underlined\" : \"\",\n \"input-group\"\n )}\n >\n <input\n readOnly={!values.partijen[c.index].wijzigbaar}\n disabled={!values.partijen[c.index].wijzigbaar}\n data-testid={`software-koppeling-naam-input-${c.index}`}\n id={`software-koppeling-naam-input-${c.index}`}\n type=\"text\"\n className={classnames(\n \"input_control\",\n \"grid-cell\",\n !values.partijen[c.index].wijzigbaar ? \"not-underlined\" : \"\"\n )}\n defaultValue={values.partijen[c.index].naam}\n onBlur={onBlur}\n ref={inputElement}\n onMouseUp={onMouseUp}\n />\n </div>\n );\n};\n\nexport const softwareKoppelingInstellingenCell = (\n formik: FormikContextType<SoftwareKoppelingenType>\n): ((c: CellInfo) => ReactElement) => (c: CellInfo): ReactElement => {\n const { values, setFieldValue } = formik;\n const { saveData } = useContext(SaveFormContext);\n\n const softwareKoppeling = values.partijen[c.index];\n const naam = softwareKoppeling.naam;\n const isImportKoppeling = softwareKoppeling.isImportkoppeling;\n\n const getModalContent = (): ReactElement => {\n switch (true) {\n case isImportKoppeling:\n return (\n <ImportkoppelingInstellingenModal\n importkoppelingId={softwareKoppeling.softwareKoppelingId}\n onSave={() => {}}\n />\n );\n case naam === \"Elements\":\n return <ElementsInstellingenModal onSave={() => {}} />;\n default:\n return (\n <HdnInstellingenModal\n data={softwareKoppeling}\n onSave={(data: SoftwareKoppelingType) => {\n setFieldValue(\n `partijen[${c.index}].hdnNummer`,\n data.hdnNummer || null\n );\n saveData();\n }}\n />\n );\n }\n };\n\n const modalContent = getModalContent();\n\n return (\n <ModalButton\n parent={`software-koppeling-${c.index}`}\n aria-label=\"Instellingen software koppeling button\"\n content={\n <Icon name=\"specificatie\" alt=\"Instellingen software koppeling\" />\n }\n size=\"lg\"\n >\n {modalContent}\n </ModalButton>\n );\n};\n\nexport const getColumns = (\n formik: FormikContextType<SoftwareKoppelingenType>\n): Column[] => {\n return [\n {\n Header: \"Software koppeling\",\n Cell: createTextInputSoftwareKoppelingNaamCell(formik),\n },\n {\n Header: \"Actief\",\n Cell: createActiveCheckboxCell,\n maxWidth: 100,\n },\n {\n Header: \"Instellingen\",\n Cell: softwareKoppelingInstellingenCell(formik),\n },\n {\n Cell: DeleteButton(formik),\n maxWidth: 30,\n },\n ];\n};\n","import React, { ReactElement } from \"react\";\nimport { connect, FormikContextType } from \"formik\";\nimport { DataGrid } from \"adviesbox-shared\";\nimport { SoftwareKoppelingenType } from \"../infra/software-koppelingen-schema\";\nimport { getColumns, EmptyComponent } from \"./software-koppelingen-data-grid-components\";\n\nconst BeschikbareSoftwareKoppelingen = ({\n formik\n}: {\n formik: FormikContextType<SoftwareKoppelingenType>;\n}): ReactElement => {\n const { values, setFieldValue } = formik;\n\n const addSoftwareKoppeling = (): void => {\n const curr = values.partijen;\n curr.push({\n softwareKoppelingId: \"\",\n actief: true,\n hdnNummer: null,\n naam: \"\",\n wijzigbaar: true\n });\n\n setFieldValue(\"partijen\", curr);\n };\n\n return (\n <>\n <DataGrid\n name=\"partijen\"\n editable={true}\n resizable={false}\n sortable={false}\n filterable={false}\n columns={getColumns(formik)}\n minRows={values.partijen.length || 0}\n pageSize={values.partijen.length || 0}\n showPagination={false}\n NoDataComponent={EmptyComponent}\n />\n\n <div className=\"button-container\">\n <button\n id=\"add-software-koppeling-button\"\n className=\"btn btn-primary\"\n type=\"button\"\n onClick={addSoftwareKoppeling}\n >\n + Software koppeling toevoegen\n </button>\n </div>\n </>\n );\n};\n\nexport default connect<{}, SoftwareKoppelingenType>(BeschikbareSoftwareKoppelingen);\n","import React, { ReactElement, useContext } from \"react\";\nimport { Form, FormikProps } from \"formik\";\nimport { WithSaveData } from \"../shared/utils/save-data\";\nimport withAdviesboxFormik from \"../shared/utils/with-adviesbox-formik\";\nimport { Debug } from \"../shared/components/formik/Debug\";\nimport {\n Card,\n CardWrapper,\n PlatformFoutenSamenvatting,\n} from \"adviesbox-shared\";\nimport { AutorisatieNiveauManager } from \"../autorisatieniveau-manager/autorisatieniveau-manager\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\nimport classnames from \"classnames\";\nimport classes from \"./beschikbare-software-koppelingen/beschikbare-software-koppelingen.module.scss\";\nimport { SaveButton } from \"../save-button/save-button\";\nimport { InstellingNiveauOptions } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport {\n SoftwareKoppelingenType,\n softwareKoppelingenSchema,\n} from \"./infra/software-koppelingen-schema\";\nimport BeschikbareSoftwareKoppelingen from \"./beschikbare-software-koppelingen/beschikbare-software-koppelingen\";\n\nconst SoftwareKoppelingen = (\n props: FormikProps<SoftwareKoppelingenType> &\n WithSaveData<SoftwareKoppelingenType>\n): ReactElement => {\n const { autorisatieNiveau } = useContext(AutorisatieNiveauContext);\n const { isBeheerder } = useContext(AutorisatieNiveauContext);\n\n return (\n <Form>\n <PlatformFoutenSamenvatting />\n\n <fieldset\n disabled={\n !(\n isBeheerder ||\n autorisatieNiveau.serviceprovidersNiveau ===\n InstellingNiveauOptions.Medewerker\n )\n }\n >\n <CardWrapper className=\"px-3\">\n <div className={classnames(classes.text_container, \"text-container\")}>\n <div className={\"p-2\"}>\n <h2 className=\"p-0\">Software koppelingen </h2>\n <AutorisatieNiveauManager\n manageFor={autorisatieNiveau.softwareKoppelingenNiveau}\n />\n <div className=\"save-btn-position\">\n <SaveButton context={props} />\n </div>\n </div>\n </div>\n </CardWrapper>\n <CardWrapper className=\"px-3\">\n <Card title=\"Beschikbare software koppelingen\" className=\"w-100\">\n <div className=\"px-1\">\n <BeschikbareSoftwareKoppelingen />\n </div>\n </Card>\n </CardWrapper>\n </fieldset>\n\n {/* istanbul ignore next */\n process.env.NODE_ENV === \"development\" && <Debug />}\n </Form>\n );\n};\n\nSoftwareKoppelingen.displayName = \"SoftwareKoppelingen\";\n\nexport default withAdviesboxFormik<\n SoftwareKoppelingenType & WithSaveData<SoftwareKoppelingenType>,\n SoftwareKoppelingenType\n>({\n // Transform outer props into form values\n mapPropsToValues: (e: SoftwareKoppelingenType): SoftwareKoppelingenType => e,\n validationSchema: softwareKoppelingenSchema,\n})(SoftwareKoppelingen);\n","/* istanbul ignore file */\n\nimport { ErrorPage, PageLoading, useRequestInit, withErrorBoundary } from \"adviesbox-shared\";\nimport React, { ReactElement } from \"react\";\nimport useAbortableFetch from \"use-abortable-fetch\";\nimport { SoftwareKoppelingenOutput } from \"../.generated/instellingen-forms/instellingen-formstypes\";\nimport { saveData } from \"../shared/utils/save-data\";\nimport { mapDlTargetToSoftwareKoppelingenUiField, mapSoftwareKoppelingenUiToDl } from \"./infra\";\nimport { mapSoftwareKoppelingenDlToUi } from \"./infra/map-software-koppelingen\";\nimport SoftwareKoppelingen from \"./software-koppelingen\";\n\nconst SoftwareKoppelingenAjax = (): ReactElement => {\n const { requestInit, settings, user, params } = useRequestInit();\n const url = `${settings.instellingenFormsOrigin}/BeheerPartijen/SoftwareKoppelingen`;\n const { loading, error, data } = useAbortableFetch<SoftwareKoppelingenOutput>(url, requestInit);\n\n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n if (error) {\n return <ErrorPage error={error} data={data} />;\n }\n\n if (typeof data === \"string\") {\n return <ErrorPage error={new Error(\"Invalid data\")} data={data} />;\n }\n\n if (loading || !data) {\n return <PageLoading />;\n }\n\n const mappedProps = mapSoftwareKoppelingenDlToUi(\"softwareKoppelingen\", data);\n if (!mappedProps) {\n return <PageLoading />;\n }\n\n return (\n <SoftwareKoppelingen\n saveData={saveData(\n user,\n params.vestiging ?? \"\",\n url,\n settings.OcpApimSubscriptionKey,\n mapSoftwareKoppelingenUiToDl,\n mapDlTargetToSoftwareKoppelingenUiField\n )}\n {...mappedProps}\n />\n );\n};\n\nSoftwareKoppelingenAjax.displayName = \"SoftwareKoppelingenAjax\";\n\nexport default withErrorBoundary(SoftwareKoppelingenAjax);\n","/* eslint-disable @typescript-eslint/camelcase */\n\nimport React, { ReactElement } from \"react\";\nimport { User } from \"oidc-client\";\nimport { Button } from \"react-bootstrap\";\n\nexport const AccessTokenDownload = ({ user, document }: { user: User; document: Document }): ReactElement => {\n const handleDownload = ():void => {\n // Create a JSON object with the access token\n const jsonContent = {\n access_token: user.access_token,\n expires_at: user.expires_at,\n user_name: user.profile.name,\n };\n\n // Convert the JSON object to a string\n const jsonString = JSON.stringify(jsonContent, null, 2);\n\n // Create a Blob with the JSON string\n const blob = new Blob([jsonString], { type: \"application/json\" });\n\n // Create a link element\n const link = document.createElement(\"a\");\n link.href = URL.createObjectURL(blob);\n\n // Set the filename for the downloaded file\n link.download = \"koppeling-adviesbox.json\";\n\n // Append the link to the document\n document.body.appendChild(link);\n\n // Trigger the click event to start the download\n link.click();\n\n // Remove the link from the document\n document.body.removeChild(link);\n };\n\n return <Button className={\"primary\"} onClick={handleDownload}>Download bestand</Button>;\n};\n","import React, { useContext, ReactElement } from \"react\";\nimport { AuthContext, withErrorBoundary, CardWrapper, ErrorPage, Card } from \"adviesbox-shared\";\nimport { AccessTokenDownload } from \"./acces-token-download\";\nimport AutorisatieNiveauContext from \"../autorisatie-niveau-context/autorisatie-niveau-context\";\n\nconst AbcKoppeling = (): ReactElement => {\n const { user } = useContext(AuthContext);\n const authresult = useContext(AutorisatieNiveauContext);\n const {isBeheerder} = authresult;\n \n if (!user) {\n return <ErrorPage error={new Error(\"Missing AuthContext\")} />;\n }\n\n return (\n <CardWrapper className=\"px-3\">\n <Card title=\"Download koppeling\">\n <div className=\"text-container px-3\">\n {isBeheerder ? (\n <>\n <p>\n Download hier het koppelingsbestand om de lokale versie van Adviesbox te kunnen verbinden met Adviesbox Online.\n </p>\n <AccessTokenDownload user={user} document={document} />\n </>\n ) : (\n <p>\n U heeft geen toegang tot deze instellingen. Om het koppeling-bestand te downloaden heeft u 'beheerder'\n rechten nodig.\n </p>\n )}\n </div>\n </Card>\n </CardWrapper>\n );\n};\n\nAbcKoppeling.displayName = \"AutorisatieNiveauAjax\";\n\nexport default withErrorBoundary(AbcKoppeling);\n","import {\n AuthContext,\n getAppLocation,\n getCookie,\n getNaamAdviseur,\n getOTAP,\n getPathname,\n HttpErrorPage,\n NotificatiesProvider,\n SettingsContext,\n useUpscope,\n Footer,\n FeatureComponent,\n Notificaties2Provider\n} from \"adviesbox-shared\";\nimport React, { ReactElement, useContext } from \"react\";\nimport { Redirect, Route, RouteComponentProps, Switch, useRouteMatch } from \"react-router-dom\";\nimport adviesonderwerpenAjax from \"../adviesonderwerpen/adviesonderwerpen-ajax\";\nimport autorisatieNiveauAjax from \"../autorisatie-niveau/autorisatie-niveau-ajax\";\nimport bankgarantieinstellingenAjax from \"../bankgarantieinstellingen/bankgarantieinstellingen-ajax\";\nimport berekeningenAjax from \"../berekeningen/berekeningen-ajax\";\nimport { DocumentenAjax } from \"../documenten/documenten-ajax\";\nimport Drawer from \"../drawer/Drawer\";\nimport geldverstrekkersAjax from \"../geldverstrekkers/geldverstrekkers-ajax\";\nimport klantprofielMotiveringAjax from \"../klantprofiel-motivering/klantprofiel-motivering-ajax\";\nimport koppelingschermAjax from \"../koppeling-adviseur-bemiddelaar/koppelingscherm-ajax\";\nimport lastenoverzichtAjax from \"../lastenoverzicht/lastenoverzicht-ajax\";\nimport notarissenAjax from \"../notarissen/notarissen-ajax\";\nimport { RapportageSamenstellenAjax } from \"../rapportage/rapportage-samenstellen-ajax\";\nimport serviceprovidersAjax from \"../serviceproviders/serviceproviders-ajax\";\nimport { Title } from \"../shared/components/title/title\";\nimport { RouteParams } from \"../shared/paramrouting/paramrouting-context\";\nimport ParamRouteProvider from \"../shared/paramrouting/paramrouting-provider\";\nimport { StandaardTekstenAjax } from \"../standaard-teksten/standaard-teksten-ajax\";\nimport { StandaardTekstenImporterenExporteren } from \"../standaard-teksten/standaard-teksten-importeren-exporteren\";\nimport tarievenAjax from \"../tarieven/tarieven-ajax\";\nimport taxatiebureausAjax from \"../taxatiebureaus/taxatiebureaus-ajax\";\nimport TopNavbar from \"../topnav-dossier/TopNavbar\";\nimport uitgangspuntenAjax from \"../uitgangspunten/uitgangspunten-ajax\";\nimport UserDetailsContext from \"../user-details/user-details-context\";\nimport vermogensbeheerdersAjax from \"../vermogensbeheerders/vermogensbeheerders-ajax\";\nimport verzekeraarsAjax from \"../verzekeraars/verzekeraars-ajax\";\nimport NationaleWaarborgAjax from \"../externe-koppelingen/nationale-waarborg/nationalewaarborg-ajax\";\nimport \"./AuthenticatedInstellingenApp.scss\";\nimport softwareKoppelingenAjax from \"../software-koppelingen/software-koppelingen-ajax\";\nimport AbcKoppeling from \"../abc-koppeling/abc-koppeling\";\n\nconst InnerAuthenticatedInstellingenApp = ({params, userDetails}: any): ReactElement => {\n const settingsContext = useContext(SettingsContext);\n const linkToPortal = getAppLocation(window.location.origin, \"INS\", \"POR\", settingsContext.baseUrls);\n const { user } = useContext(AuthContext);\n useUpscope(user?.profile.name, [getNaamAdviseur(userDetails)]);\n const vestigingIdCookie = getCookie(`${getOTAP(window.location.hostname)}_vestigingid`);\n\n return (<div data-testid=\"authenticated-app\">\n <Drawer>\n <Title appName=\"Instellingen\" />\n <TopNavbar />\n <fieldset>\n <div className=\"authenticated-schermen\">\n <Switch>\n {/* Start page route redirect */}\n <Route path=\"/vestiging/:vestiging/koppeling\" component={AbcKoppeling} exact/>\n <Route\n exact\n path={\"/vestiging/:vestiging/\"}\n render={() => {\n return <Redirect to={`/vestiging/${params.vestiging}/autorisatieniveau`} />;\n }}\n />\n <Route path={\"/vestiging/:vestiging/autorisatieniveau\"} component={autorisatieNiveauAjax} />\n <Route\n path=\"/vestiging/:vestiging/vaste-koppeling-advies-en-bemiddeling\"\n component={koppelingschermAjax}\n />\n <Route path=\"/vestiging/:vestiging/tarieven\" component={tarievenAjax} />\n <Route path=\"/vestiging/:vestiging/documenten\" component={DocumentenAjax} />\n <Route\n path=\"/vestiging/:vestiging/standaardteksten/importeren-en-exporteren\"\n component={StandaardTekstenImporterenExporteren}\n />\n <Route path=\"/vestiging/:vestiging/standaardteksten/:soort/:onderwerp\">\n <StandaardTekstenAjax />\n </Route>\n <Route path=\"/vestiging/:vestiging/standaardteksten/algemeen\" component={StandaardTekstenAjax} />\n <Route path=\"/vestiging/:vestiging/rapportage-samenstellen\" component={RapportageSamenstellenAjax} />\n <Route path=\"/vestiging/:vestiging/adviesonderwerpen\" component={adviesonderwerpenAjax} />\n <Route path=\"/vestiging/:vestiging/verzekeraars\" component={verzekeraarsAjax} />\n <Route\n path=\"/vestiging/:vestiging/bankgarantie-instellingen\"\n component={bankgarantieinstellingenAjax}\n />\n <Route path=\"/vestiging/:vestiging/vermogensbeheerders\" component={vermogensbeheerdersAjax} />\n <Route path=\"/vestiging/:vestiging/notarissen\" component={notarissenAjax} />\n <Route path=\"/vestiging/:vestiging/geldverstrekkers\" component={geldverstrekkersAjax} />\n <Route path=\"/vestiging/:vestiging/taxatiebureaus\" component={taxatiebureausAjax} />\n <Route path=\"/vestiging/:vestiging/serviceproviders\" component={serviceprovidersAjax} />\n <Route path=\"/vestiging/:vestiging/software-koppelingen\" component={softwareKoppelingenAjax} />\n <Route path=\"/vestiging/:vestiging/klantprofiel-en-motivering\" component={klantprofielMotiveringAjax} />\n <Route path=\"/vestiging/:vestiging/berekeningen\" component={berekeningenAjax} />\n <Route path=\"/vestiging/:vestiging/lastenoverzicht\" component={lastenoverzichtAjax} />\n <Route path=\"/vestiging/:vestiging/uitgangspunten-Advies\" component={uitgangspuntenAjax} />\n <Route path=\"/vestiging/:vestiging/extern/nationale-waarborg\" component={NationaleWaarborgAjax} />\n\n <Route\n exact\n path={\"/vestiging/:vestiging\"}\n render={\n /* istanbul ignore next */ ({ history }: RouteComponentProps<RouteParams>) => {\n const base = getPathname().charAt(getPathname().length - 1);\n if (base === \"/\") {\n history.push(`${getPathname()}autorisatieniveau`);\n return <></>;\n }\n history.push(`${getPathname()}/autorisatieniveau`);\n return <></>;\n }\n }\n />\n <Route\n exact\n path={\"/\"}\n render={\n /* istanbul ignore next */ ({ history }: RouteComponentProps) => {\n if (!vestigingIdCookie) {\n window.location.assign(linkToPortal);\n return <></>;\n }\n\n history.push(`/vestiging/${vestigingIdCookie}/autorisatieniveau`);\n return <></>;\n }\n }\n />\n <Route>\n <HttpErrorPage status={404} returnUrl={linkToPortal} />\n </Route>\n </Switch>\n </div>\n </fieldset>\n <Footer lastMutationDate={null} />\n </Drawer>\n </div>)\n}\n\nexport const AuthenticatedInstellingenApp = (): ReactElement => {\n const { params } = useRouteMatch<RouteParams>();\n const { userDetails } = useContext(UserDetailsContext);\n\n return (\n <ParamRouteProvider route={params}>\n <FeatureComponent feature=\"FeatureNotificaties2\">\n <Notificaties2Provider vestigingId={params.vestiging} sourceApp={\"INS\"}>\n <InnerAuthenticatedInstellingenApp params={params} userDetails={userDetails} />\n </Notificaties2Provider>\n </FeatureComponent>\n <FeatureComponent feature=\"FeatureNotificaties2\" isDisabled>\n <NotificatiesProvider reloadTimeInSeconds={60} medewerkerId={userDetails.medewerkerId} vestigingId={params.vestiging} sourceApp={\"INS\"}>\n <InnerAuthenticatedInstellingenApp params={params} userDetails={userDetails} />\n </NotificatiesProvider>\n </FeatureComponent>\n </ParamRouteProvider>\n );\n};\n","import {\n getAppLocation,\n getCookie,\n getOTAP,\n getPathname,\n LoginPage,\n SettingsContext,\n SigninOidc\n} from \"adviesbox-shared\";\nimport React, { ReactElement, useContext } from \"react\";\nimport { Route, RouteComponentProps } from \"react-router-dom\";\nimport { RouteParams } from \"../shared/paramrouting/paramrouting-context\";\nimport logo from \"../assets/new-brand-logo.svg\";\n\nconst UnauthenticatedInstellingenApp = (): ReactElement => {\n const { baseUrls } = useContext(SettingsContext);\n const linkToPortal = getAppLocation(window.location.origin, \"INS\", \"POR\", baseUrls);\n const vestigingIdCookie = getCookie(`${getOTAP(window.location.hostname)}_vestigingid`);\n\n return (\n <>\n <Route\n exact\n path={\"/vestiging/:vestiging\"}\n render={({ history }: RouteComponentProps<RouteParams>) => {\n const base = getPathname().charAt(getPathname().length - 1);\n if (base === \"/\") {\n history.push(`${getPathname()}autorisatieniveau`);\n return <></>;\n }\n history.push(`${getPathname()}/autorisatieniveau`);\n return <></>;\n }}\n />\n <Route\n exact\n path={\"/\"}\n render={({ history }: RouteComponentProps) => {\n if (!vestigingIdCookie) {\n window.location.assign(linkToPortal);\n return <></>;\n }\n\n history.push(`/vestiging/${vestigingIdCookie}/autorisatieniveau`);\n return <></>;\n }}\n />\n <Route path=\"/signin-oidc\" component={SigninOidc} />\n <LoginPage appLogo={logo} />\n </>\n );\n};\n\nUnauthenticatedInstellingenApp.displayName = \"InstellingenApp\";\n\nexport default UnauthenticatedInstellingenApp;\n","import { useContext, useEffect } from 'react';\nimport { \n getCookie, \n getOTAP, \n setCookie,\n useRequestInit,\n SettingsContext \n} from 'adviesbox-shared';\nimport useAbortableFetch from 'use-abortable-fetch';\nimport { \n VestigingenOutput, \n MedewerkerOrganisatieOutput \n} from './.generated/licenties/licentiestypes';\n\ninterface UseVestigingFallbackResult {\n loading: boolean;\n error: Error | null;\n vestigingId: string | null;\n}\n\nconst getHoofdvestigingId = (data: VestigingenOutput | null | string): string | null => {\n if (!data || typeof data === 'string' || !data.isValid || !data.vestigingen) {\n return null;\n }\n\n const hoofdvestigingEntry = Object.entries(data.vestigingen)\n .find(([_, vestiging]) => vestiging.isHoofdvestiging === true);\n\n return hoofdvestigingEntry ? hoofdvestigingEntry[0] : null;\n};\n\nexport const useCurrentVestiging = (): UseVestigingFallbackResult => {\n const settings = useContext(SettingsContext);\n const { requestInit, user } = useRequestInit();\n const vestigingIdCookie = getCookie(`${getOTAP(window.location.hostname)}_vestigingid`);\n\n const medewerkerUrl = user ? `${settings.licentiesOrigin}/Medewerkers/current` : null;\n const { \n data: medewerkerData, \n loading: medewerkerLoading, \n error: medewerkerError \n } = useAbortableFetch<MedewerkerOrganisatieOutput>(medewerkerUrl, requestInit);\n\n const medewerkerId = medewerkerData && typeof medewerkerData !== 'string' \n ? medewerkerData.medewerkerId \n : null;\n\n const vestigingenUrl = medewerkerId \n ? `${settings.licentiesOrigin}/Medewerkers/${medewerkerId}/Vestigingen` \n : null;\n\n const { \n data: vestigingenData, \n loading: vestigingenLoading, \n error: vestigingenError \n } = useAbortableFetch<VestigingenOutput>(vestigingenUrl, requestInit);\n\n useEffect(() => {\n // als de cookie al bestaat, early return geen cookie overschrijven\n if (vestigingenLoading || vestigingenError || vestigingIdCookie) return;\n\n const hoofdvestigingId = getHoofdvestigingId(vestigingenData);\n if (!hoofdvestigingId) {\n /* eslint-disable no-console */\n console.warn('No hoofdvestiging found');\n return;\n }\n\n const cookieDomain = window.location.hostname.includes('localhost') \n ? window.location.hostname \n : 'adviesbox.nl';\n\n const cookieName = `${getOTAP(window.location.hostname)}_vestigingid`;\n /* eslint-disable no-console */\n console.log('Setting fallback hoofdvestigingId cookie:', hoofdvestigingId);\n setCookie(cookieName, hoofdvestigingId, cookieDomain);\n }, [vestigingenData, vestigingenLoading, vestigingenError, vestigingIdCookie]);\n\n return {\n loading: medewerkerLoading || vestigingenLoading,\n error: medewerkerError || vestigingenError,\n vestigingId: vestigingIdCookie && typeof vestigingIdCookie === \"string\"\n ? vestigingIdCookie \n : getHoofdvestigingId(vestigingenData),\n };\n};","import { AuthContext, PageLoading } from \"adviesbox-shared\";\nimport React, { ReactElement, useContext, useEffect } from \"react\";\nimport { Route, Switch, useHistory, useLocation } from \"react-router-dom\";\nimport { AuthenticatedInstellingenApp } from \"./AuthenticatedInstellingenApp\";\nimport UnauthenticatedInstellingenApp from \"./UnauthenticatedInstellingenApp\";\nimport { useCurrentVestiging } from \"../use-current-vestiging\";\n\nconst InstellingenApp = (): ReactElement => {\n const { user } = useContext(AuthContext);\n const history = useHistory();\n const location = useLocation();\n const { loading, vestigingId } = useCurrentVestiging();\n \n /* istanbul ignore next */\n useEffect(() => {\n if (loading) {\n return;\n } \n // bij openen '/koppeling' direct doorsturen naar '/vestiging/:vestiging/koppeling'\n if (location.pathname === '/koppeling' && vestigingId) {\n history.push(`/vestiging/${vestigingId}/koppeling`);\n }\n }, [location.pathname, vestigingId, history, loading]);\n\n /* istanbul ignore next */\n if (loading) {\n return <PageLoading />;\n } \n\n if (user) {\n return (\n <div data-testid=\"authenticated-routes\">\n <Switch>\n <Route path=\"/vestiging/:vestiging\" component={AuthenticatedInstellingenApp} />\n </Switch>\n </div>\n );\n }\n\n return <UnauthenticatedInstellingenApp />;\n};\n\nInstellingenApp.displayName = \"InstellingenApp\";\n\nexport default InstellingenApp;","/* istanbul ignore file */\nimport React, { ReactElement } from \"react\";\nimport { Button, Modal } from \"react-bootstrap\";\nimport { SubmitResultTypes } from \"../../utils/save-validation\";\n\ntype ValidatiePopupProps = {\n infotekst: SubmitResultTypes | \"browserInfo\" | \"navigatieInfo\";\n show: boolean;\n onHide: () => void;\n onSubmit?: () => void;\n navigatiepopup?: boolean;\n};\nconst ValidatiePopup = ({ ...props }: ValidatiePopupProps): ReactElement => {\n return (\n <Modal show={props.show} aria-labelledby=\"contained-modal-title-vcenter\" centered>\n <Modal.Header>\n <Modal.Title id=\"contained-modal-title-vcenter\">\n {props.infotekst === \"browserInfo\" && \"Er zijn niet opgeslagen gegevens op deze pagina\"}\n {props.infotekst !== \"browserInfo\" && \"Er zijn niet gevalideerde gegevens op deze pagina\"}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body className=\"px-modal\">\n <>\n {props.infotekst === \"navigatieInfo\" && (\n <p>\n Er zijn niet gevalideerde gegevens op deze pagina. Als je toch van pagina wisselt dan wordt alle door jou\n gewijzigde data niet opgeslagen. De niet gevalideerde onderdelen zijn met rood gemarkeerd.\n </p>\n )}\n {(props.infotekst === \"clientError\" || props.infotekst === \"platformError\") && (\n <p>\n De rode velden op de pagina kunnen niet gevalideerd worden. Zorg ervoor dat er geen rode velden meer op de\n pagina staan en probeer dan nogmaals op te slaan.\n </p>\n )}\n {props.infotekst === \"browserInfo\" && (\n <>\n <p>\n Er zijn niet opgeslagen gegevens op deze pagina. Als je toch van pagina wisselt dan wordt alle door jou\n gewijzigde data niet opgeslagen.\n </p>\n </>\n )}\n </>\n </Modal.Body>\n <Modal.Footer>\n <>\n {props.navigatiepopup ? (\n <>\n <Button id=\"btnannuleren\" data-testid=\"btnannuleren\" variant=\"link\" onClick={props.onHide}>\n Annuleren\n </Button>\n <Button id=\"btnopslaan\" data-testid=\"btnopslaan\" variant=\"danger\" onClick={props.onSubmit}>\n Verwijder mijn aanpassingen en navigeer\n </Button>\n </>\n ) : (\n <Button id=\"btnopslaan\" data-testid=\"btnopslaan\" variant=\"primary\" onClick={props.onHide}>\n Sluiten\n </Button>\n )}\n </>\n </Modal.Footer>\n </Modal>\n );\n};\n\nexport default ValidatiePopup;\n","import React, { ReactElement, ReactNode, useState } from \"react\";\nimport UserDetailsContext, { defaultUserDetails, Medewerker } from \"./user-details-context\";\nimport { Geslacht } from \"../.generated/licenties/licentiestypes\";\n\nconst setUserDetailsProviderValue = (\n setUserDetails: (userDetails: Medewerker) => void,\n userDetails: Medewerker\n): typeof defaultUserDetails => ({\n userDetails,\n setUserDetails\n});\n\nconst UserDetailsProvider = ({ children }: { children: ReactNode }): ReactElement => {\n const [userDetails, setUserDetails] = useState({\n voornaam: \"\",\n tussenvoegsels: \"\",\n achternaam: \"\",\n roepnaam: null,\n voorletters: \"\",\n telefoon: null,\n geslacht: Geslacht.Man,\n telefoonWerk: null,\n telefoonMobiel: null,\n email: \"\",\n functie: null,\n platformId: null,\n klantId: null,\n isActief: true,\n klantdossierRechtenVestigingen: null,\n klantdossierRechtenOrganisatie: null,\n medewerkerId: \"\",\n organisatieId: \"\"\n } as Medewerker);\n\n const val = setUserDetailsProviderValue(setUserDetails, userDetails);\n return <UserDetailsContext.Provider value={val}>{children}</UserDetailsContext.Provider>;\n};\n\nexport default UserDetailsProvider;\n","import React, { ReactElement, ReactNode, useState } from \"react\";\nimport VestigingenContext, { VestigingenContextType, vestiging } from \"./vestigingen-context\";\n\nimport { withErrorBoundary } from \"adviesbox-shared\";\n\nconst setContext = (\n vestigingen: vestiging[],\n setVestigingen: (vestigingen: vestiging[]) => void\n): VestigingenContextType => ({\n vestigingen,\n setVestigingen\n});\n\nconst VestigingenProvider = ({ children }: { children: ReactNode }): ReactElement => {\n const [vestigingen, setVestigingen] = useState([] as vestiging[]);\n\n return (\n <VestigingenContext.Provider value={setContext(vestigingen, setVestigingen)}>\n {children}\n </VestigingenContext.Provider>\n );\n};\n\nexport default withErrorBoundary(VestigingenProvider);\n","/* istanbul ignore file */\n\nimport {\n AuthProvider,\n ErrorBoundaryContextProvider,\n SettingsProvider,\n SigninSilentOidc,\n withErrorBoundary,\n RouteEvents,\n FeatureProvider\n} from \"adviesbox-shared\";\nimport React, { ReactElement, useRef, useState } from \"react\";\nimport { BrowserRouter, Route, Switch } from \"react-router-dom\";\nimport AutorisatieNiveauProvider from \"./autorisatie-niveau-context/autorisatie-niveau-provider\";\nimport InstellingenApp from \"./instellingen-app/InstellingenApp\";\nimport ValidatiePopup from \"./shared/components/validatie-popup/validatie-popup\";\nimport UserDetailsProvider from \"./user-details/user-details-provider\";\nimport VestigingenProvider from \"./vestigingen-context/vestigingen-provider\";\nimport logo from \"./assets/new-brand-logo.svg\";\nimport \"./styles/style.scss\";\n\nconst App: React.FC = () => {\n const [modalShow, setModalShow] = useState(false);\n const continueRef = useRef<any>(null);\n\n return (\n <div className=\"wrapper\">\n <ValidatiePopup\n infotekst=\"browserInfo\"\n show={modalShow}\n onHide={(): void => {\n setModalShow(false);\n continueRef.current(false);\n }}\n onSubmit={(): void => {\n setModalShow(false);\n if (continueRef.current) {\n continueRef.current(true);\n }\n }}\n navigatiepopup\n />\n <ErrorBoundaryContextProvider>\n <BrowserRouter\n getUserConfirmation={(_message: string, callback: (ok: boolean) => void): void => {\n continueRef.current = callback;\n\n setModalShow(true);\n }}\n >\n <SettingsProvider loadingLogo={logo}>\n <Switch>\n <Route path=\"/silent-redirect\" component={withErrorBoundary(SigninSilentOidc)} />\n\n <Route\n render={(): ReactElement => (\n <AuthProvider>\n <FeatureProvider>\n <RouteEvents>\n <AutorisatieNiveauProvider>\n <VestigingenProvider>\n <UserDetailsProvider>\n <InstellingenApp />\n </UserDetailsProvider>\n </VestigingenProvider>\n </AutorisatieNiveauProvider>\n </RouteEvents>\n </FeatureProvider>\n </AuthProvider>\n )}\n />\n </Switch>\n </SettingsProvider>\n </BrowserRouter>\n </ErrorBoundaryContextProvider>\n </div>\n );\n};\n\nexport default withErrorBoundary(App);\n","/* istanbul ignore file */\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"adviesbox-shared/adviesbox-shared.modern.css\";\nimport \"./index.css\";\nimport App from \"./App\";\n\nReactDOM.render(<App />, document.getElementById(\"root\"));\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"rapportage_structuur_wrapper\":\"rapportage-structuur_rapportage_structuur_wrapper__2CtNw\",\"bordered\":\"rapportage-structuur_bordered__ptHoK\",\"structuur_table\":\"rapportage-structuur_structuur_table__h1TIT\",\"drag_n_drop_wrapper\":\"rapportage-structuur_drag_n_drop_wrapper__3kvSm\",\"checkbox_wrapper\":\"rapportage-structuur_checkbox_wrapper__1KKoc\",\"label_wrapper\":\"rapportage-structuur_label_wrapper__NDYLI\",\"expand_wrapper\":\"rapportage-structuur_expand_wrapper__1sKNx\",\"spacer\":\"rapportage-structuur_spacer__3LyvM\",\"expand_btn\":\"rapportage-structuur_expand_btn__eP7Kl\",\"main_cell\":\"rapportage-structuur_main_cell__3u_3z\",\"edit_cell\":\"rapportage-structuur_edit_cell__3KPiD\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"clickable_label_fix\":\"beschikbare-geldverstrekkers_clickable_label_fix__1Z06b\",\"hypotheek_opties_button\":\"beschikbare-geldverstrekkers_hypotheek_opties_button__1X_wE\",\"modal_footer\":\"beschikbare-geldverstrekkers_modal_footer__27cKf\",\"align_center\":\"beschikbare-geldverstrekkers_align_center__2-fYa\",\"text_container\":\"beschikbare-geldverstrekkers_text_container__3Mb_b\"};","module.exports = __webpack_public_path__ + \"static/media/new-brand-logo.dd86cbd2.svg\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"default\":\"SaveButton_default__3uDO-\",\"busy\":\"SaveButton_busy__2d49a\",\"failed\":\"SaveButton_failed__2mdv5\",\"no_save\":\"SaveButton_no_save___jOSr\",\"spin\":\"SaveButton_spin__2KWlo\",\"saved\":\"SaveButton_saved__3yivM\",\"fadeOut\":\"SaveButton_fadeOut__1oRGT\",\"btn_danger\":\"SaveButton_btn_danger__1UHv5\"};"],"sourceRoot":""}