{"version":3,"sources":["webpack:///./src/types/forms/formGroups/referenceFormGroup.ts","webpack:///./src/services/percentage.ts","webpack:///./src/services/form/utilities/application/plantPerformance.ts","webpack:///./src/services/form/appConfiguration.ts","webpack:///./node_modules/core-js/internals/string-repeat.js","webpack:///./node_modules/vuelidate/lib/validators/integer.js","webpack:///./node_modules/vuelidate/lib/validators/maxLength.js","webpack:///./src/types/forms/fields/formFieldWithOptions.ts","webpack:///./src/validators/minNumber.ts","webpack:///./src/validators/maxNumber.ts","webpack:///./src/types/forms/fields/countField.ts","webpack:///./src/services/floatComparison.ts","webpack:///./node_modules/vuelidate/lib/validators/and.js","webpack:///./node_modules/vuelidate/lib/validators/alphaNum.js","webpack:///./src/validators/number.ts","webpack:///./node_modules/core-js/internals/this-number-value.js","webpack:///./node_modules/vuelidate/lib/validators/numeric.js","webpack:///./node_modules/vuelidate/lib/validators/maxValue.js","webpack:///./src/validators/alwaysFalse.ts","webpack:///./node_modules/core-js/modules/es.regexp.constructor.js","webpack:///./src/services/form/rules/application/common.ts","webpack:///./node_modules/vuelidate/lib/validators/email.js","webpack:///./node_modules/vuelidate/lib/validators/minLength.js","webpack:///./src/services/form/modelService.ts","webpack:///./node_modules/vuelidate/lib/validators/alpha.js","webpack:///./node_modules/vuelidate/lib/validators/not.js","webpack:///./src/validators/float.ts","webpack:///./src/types/forms/fields/selectField.ts","webpack:///./src/types/forms/fields/checkboxField.ts","webpack:///./src/types/forms/formOption.ts","webpack:///./node_modules/vuelidate/lib/validators/url.js","webpack:///./node_modules/vuelidate/lib/validators/common.js","webpack:///./src/types/forms/fields/checkboxesField.ts","webpack:///./node_modules/vuelidate/lib/withParams.js","webpack:///./node_modules/vuelidate/lib/validators/macAddress.js","webpack:///./src/validators/positive.ts","webpack:///./src/types/forms/formSteps/plantPerformanceFormStep.ts","webpack:///./src/types/forms/formGroups/plantPerformance/photovoltaic/photovoltaicModuleFormGroup.ts","webpack:///./src/types/forms/formGroups/plantPerformance/photovoltaic/quantityAndNominalPowerFormGroup.ts","webpack:///./src/types/forms/formGroups/plantPerformance/photovoltaic/photovoltaicFormGroup.ts","webpack:///./src/services/form/config/application/plantPerformance/boundaryValues.ts","webpack:///./src/validators/maxNominalPowerPlugInGeneratingPlant.ts","webpack:///./src/services/form/config/application/plantPerformance/photovoltaic.ts","webpack:///./src/types/forms/formGroups/plantPerformance/storage/storageModuleFormGroup.ts","webpack:///./src/types/forms/formGroups/plantPerformance/storage/storageFormGroup.ts","webpack:///./src/types/forms/formGroups/plantPerformance/storage/manufacturerAndStorageTypeFormGroup.ts","webpack:///./src/types/forms/formGroups/plantPerformance/storage/dischargePowerAndStorageCapacityFormGroup.ts","webpack:///./src/services/form/config/application/plantPerformance/storage.ts","webpack:///./src/types/forms/formGroups/plantPerformance/activePowerAndApparentPowerFormGroup.ts","webpack:///./src/types/forms/formGroups/plantPerformance/generator/generatorFormGroup.ts","webpack:///./src/types/forms/formGroups/plantPerformance/generator/generatorModuleFormGroup.ts","webpack:///./src/types/forms/formGroups/plantPerformance/quantityAndGeneratorTypeFormGroup.ts","webpack:///./src/types/forms/formGroups/plantPerformance/manufacturerAndModuleTypeFormGroup.ts","webpack:///./src/validators/maxApparentPowerPlugInGeneratingPlant.ts","webpack:///./src/services/form/config/application/plantPerformance/generator.ts","webpack:///./src/types/forms/formGroups/plantPerformance/inverter/inverterFormGroup.ts","webpack:///./src/types/forms/formGroups/plantPerformance/inverter/inverterModuleFormGroup.ts","webpack:///./src/validators/apparentPowerMustBeBiggerThanActualPower.ts","webpack:///./src/services/form/config/application/plantPerformance/inverter.ts","webpack:///./src/services/form/config/application/plantPerformance.ts","webpack:///./src/services/form/utilities/application/powerConnection.ts","webpack:///./src/services/form/validations.ts","webpack:///./src/validators/addressRequiredIfNoCadastral.ts","webpack:///./src/types/forms/enumerableGetterAttribute.ts","webpack:///./src/services/form/applicationType.ts","webpack:///./src/types/forms/specific/applicationForm.ts","webpack:///./src/utilities/germanFormats.ts","webpack:///./node_modules/vuelidate/lib/validators/requiredIf.js","webpack:///./src/validators/checked.ts","webpack:///./src/validators/houseNumber.ts","webpack:///./src/validators/util.ts","webpack:///./src/validators/lt.ts","webpack:///./src/validators/requiredIfAny.ts","webpack:///./src/validators/geoCoordinates.ts","webpack:///./src/types/forms/fields/geoCoordinatesFormGroup.ts","webpack:///./src/types/forms/formSteps/locationFormStep.ts","webpack:///./src/types/forms/formGroups/zipAndCityFormGroup.ts","webpack:///./src/types/forms/formGroups/streetAndHousenumberFormGroup.ts","webpack:///./src/types/forms/formGroups/meadowAndLotFormGroup.ts","webpack:///./src/types/forms/formGroups/electricityUnavailableAtAddressFormGroup.ts","webpack:///./src/validators/length.ts","webpack:///./src/services/form/config/application/location.ts","webpack:///./src/validators/maxDate.ts","webpack:///./src/validators/requiredDate.ts","webpack:///./src/types/forms/fields/dateField.ts","webpack:///./src/types/forms/formSteps/generationTypeFormStep.ts","webpack:///./src/types/forms/fields/radioButtonsField.ts","webpack:///./src/services/form/config/application/generationType.ts","webpack:///./src/types/forms/formSteps/powerConnectionFormStep.ts","webpack:///./src/validators/positiveInteger.ts","webpack:///./src/validators/mustBeLowerThanToExistingPlantsTotalPower.ts","webpack:///./src/validators/mustBeLowerThanFeedInPowerRecommendation.ts","webpack:///./src/services/form/config/application/powerConnection.ts","webpack:///./src/types/forms/formGroups/firstAndLastNameFormGroup.ts","webpack:///./src/types/forms/formGroups/operatorFormGroup.ts","webpack:///./src/types/forms/formSteps/plantOperatorFormStep.ts","webpack:///./src/validators/maxDateNow.ts","webpack:///./src/validators/name.ts","webpack:///./src/validators/zip.ts","webpack:///./src/validators/emailRepeatMustBeIdentical.ts","webpack:///./node_modules/ibantools/jsnext/ibantools.js","webpack:///./src/services/form/config/application/plantOperator.ts","webpack:///./src/types/forms/formSteps/plantBuilderFormStep.ts","webpack:///./src/services/form/config/application/plantBuilder.ts","webpack:///./src/types/forms/formSteps/plantDataFormStep.ts","webpack:///./src/validators/iban.ts","webpack:///./src/types/forms/formGroups/plantData/infeedManagement/infeedManagementFormGroup.ts","webpack:///./src/services/form/config/application/plantData/infeedManagement.ts","webpack:///./src/services/form/config/application/plantData.ts","webpack:///./src/types/forms/formGroups/ownerFormGroup.ts","webpack:///./src/types/forms/formSteps/propertyOwnerFormStep.ts","webpack:///./src/services/form/config/application/propertyOwner.ts","webpack:///./src/types/forms/formSteps/measuringConceptsFormStep.ts","webpack:///./src/validators/mustBeLowerThanOrEqualToSelfGenerationQuantity.ts","webpack:///./src/validators/mustBeNoMoreThan20PercentAboveSuggestion.ts","webpack:///./src/services/form/config/application/measuringConcepts.ts","webpack:///./src/types/forms/formSteps/controllableConsumptionDevicesFormStep.ts","webpack:///./src/validators/registeredConsumptionDeviceIdentificationNumber.ts","webpack:///./src/validators/registeredConsumptionDeviceIdentificationNumbers.ts","webpack:///./src/services/form/config/application/controllableConsumptionDevices.ts","webpack:///./src/types/forms/formSteps/billingFormStep.ts","webpack:///./src/validators/minDate.ts","webpack:///./src/validators/minDateNow.ts","webpack:///./src/validators/maxDate3Months.ts","webpack:///./src/services/form/config/application/billing.ts","webpack:///./src/types/forms/formSteps/checkAndSendFormStep.ts","webpack:///./src/services/form/config/application/checkAndSend.ts","webpack:///./src/types/forms/fields/uploadField.ts","webpack:///./src/types/forms/formSteps/documentsFormStep.ts","webpack:///./src/validators/fileType.ts","webpack:///./src/validators/maxFileSize.ts","webpack:///./src/services/form/config/application/documents.ts","webpack:///./src/services/form/config/application.ts","webpack:///./src/types/forms/dummy/kitchenSinkForm.ts","webpack:///./src/validators/inDateRange.ts","webpack:///./src/types/forms/dummy/kitchensinkFormStep1.ts","webpack:///./src/services/form/config/kitchenSink/step1.ts","webpack:///./src/types/forms/dummy/kitchensinkFormStep2.ts","webpack:///./src/services/form/config/kitchenSink/step2.ts","webpack:///./src/types/forms/dummy/kitchensinkFormStep3.ts","webpack:///./src/services/form/config/kitchenSink/step3.ts","webpack:///./src/types/forms/dummy/kitchensinkFormStep4.ts","webpack:///./src/types/forms/dummy/formGroups/kitchenSinkPlantFormGroup.ts","webpack:///./src/types/forms/dummy/formGroups/kitchenSinkUserFormGroup.ts","webpack:///./src/services/form/config/kitchenSink/step4.ts","webpack:///./src/services/form/config/kitchenSink.ts","webpack:///./src/services/form/config.ts","webpack:///./node_modules/vuelidate/lib/validators/index.js","webpack:///./node_modules/core-js/modules/es.number.to-fixed.js","webpack:///./node_modules/vuelidate/lib/validators/sameAs.js","webpack:///./src/types/forms/fields/dateRangeField.ts","webpack:///./node_modules/vuelidate/lib/validators/decimal.js","webpack:///./node_modules/vuelidate/lib/validators/ipAddress.js","webpack:///./node_modules/vuelidate/lib/withParamsBrowser.js","webpack:///./node_modules/vuelidate/lib/validators/or.js","webpack:///./node_modules/vuelidate/lib/validators/required.js","webpack:///./src/services/form/rules/kitchenSink.ts","webpack:///./src/services/form/rules/application/general.ts","webpack:///./src/utilities/addRequiredValidator.ts","webpack:///./src/utilities/removeRequiredValidator.ts","webpack:///./src/utilities/toggleRequiredValidator.ts","webpack:///./src/services/form/rules/application/location.ts","webpack:///./src/services/form/rules/application/generationType.ts","webpack:///./src/utilities/findFirstValidKey.ts","webpack:///./src/utilities/stringParsingUtils.ts","webpack:///./src/services/form/rules/application/powerConnection.ts","webpack:///./src/services/form/rules/application/plantOperator.ts","webpack:///./src/services/form/rules/application/plantBuilder.ts","webpack:///./src/services/form/rules/application/plantData/infeedManagement.ts","webpack:///./src/services/form/rules/application/plantData.ts","webpack:///./src/services/form/rules/application/propertyOwner.ts","webpack:///./src/services/form/rules/application/plantPerformance/photovoltaic.ts","webpack:///./src/services/form/rules/application/plantPerformance/storage.ts","webpack:///./src/services/form/rules/application/plantPerformance/generator.ts","webpack:///./src/services/form/rules/application/plantPerformance/inverter.ts","webpack:///./src/services/form/rules/application/plantPerformance.ts","webpack:///./src/services/form/rules/application/measuringConcepts.ts","webpack:///./src/services/form/rules/application/controllableConsumptionDevices.ts","webpack:///./src/services/form/rules/application/billing.ts","webpack:///./src/services/form/rules/application/documents.ts","webpack:///./src/services/form/rules/application/checkAndSend.ts","webpack:///./src/services/form/rules/application/confirmation.ts","webpack:///./src/services/form/rules/application.ts","webpack:///./src/services/form/rules.ts","webpack:///./src/validators/date.ts","webpack:///./node_modules/vuelidate/lib/validators/requiredUnless.js","webpack:///./node_modules/vuelidate/lib/validators/minValue.js","webpack:///./node_modules/vuelidate/lib/validators/between.js"],"names":["config","id","value","getPercentageChange","previousValue","Error","isOverallActivePowerWarningEnabled","referenceValue","percentageChange","limit","getOverallNominalPower","plantPerformanceModel","photovoltaic","disabled","pvOverallNominalPower","storage","storageOverallDischargePower","generator","generatorOverallActivePower","getOverallActivePower","applicationType","inverter","inverterOverallActivePower","getOverallApparentPower","inverterOverallApparentPower","generatorOverallApparentPower","calculateSelfGenerationQuantity","formModel","editModel","PV_OVERALLNOMINALPOWER_TO_SELFGENERATIONQUANTITY_FACTOR","modelSelfGenerationQuantity","plantPerformance","editSelfGenerationQuantity","parsedSelfGenerationQuantity","measuringConcepts","selfGenerationQuantity","finalSelfGenerationQuantity","decimals","thousandsSeparator","appConfiguration","observable","fileUploadConfigurations","toInteger","requireObjectCoercible","module","exports","repeat","count","str","String","this","result","n","Infinity","RangeError","Object","defineProperty","default","_common","_default","regex","length","withParams","type","max","req","len","formFieldWithOptionsDefaultConfig","options","hasServiceDrivenOptions","resolvedConfig","valueIsArrayType","getJsonSchema","optionEnum","Array","from","map","o","items","enum","min","number","countFieldDefaultConfig","formField","step","validators","minNumber","maxNumber","epsilon","defaultEpsilon","eq","value1","value2","Math","abs","gt","lt","gte","lte","_len","arguments","_key","_this","_len2","args","_key2","reduce","valid","fn","apply","isFinite","classof","TypeError","test","Date","alwaysFalse","DESCRIPTORS","global","isForced","inheritIfRequired","f","getOwnPropertyNames","isRegExp","getFlags","stickyHelpers","redefine","fails","setInternalState","set","setSpecies","wellKnownSymbol","MATCH","NativeRegExp","RegExp","RegExpPrototype","prototype","re1","re2","CORRECT_NEW","UNSUPPORTED_Y","FORCED","RegExpWrapper","pattern","flags","sticky","thisIsRegExp","patternIsRegExp","flagsAreUndefined","undefined","constructor","source","call","indexOf","replace","proxy","key","configurable","get","it","keys","index","isApplicationType","isPv","isPluginGeneratingPlant","isPluginGeneratingPlantGenerationTypeModel","generationType","model","plugInGeneratingPlant","isPluginGeneratingPlantSimplified","pv","plantType","plugin","proceed","proceedWithFullRegistrationForEEGCompensation","isPowerHeatCoupling","isStorage","isPvAndStorageLte30","isDea","isUnknown","isLowVoltage","powerConnection","isMediumVoltage","whichVoltageLevel","isNominalPowerAboveTippingPoint","tippingPoint","isNominalPowerBelowOrEqualTippingPoint","isActivePowerAboveTippingPoint","isActivePowerBelowOrEqualTippingPoint","isDischargePowerAboveTippingPoint","isDischargePowerBelowOrEqualTippingPoint","isStorageCouplingAcCoupled","plantData","storageCoupling","isStorageCouplingDcCoupled","isStorageConnectionConceptWithoutPowerGeneration","storageConnectionConcept","isStorageConnectionConceptWithoutPowerGenerationAndWithConsumptionPlant","isStorageConnectionConceptWithPowerGeneration","isStorageConnectionConceptStorageInGenerationPath","isStorageConnectionConceptStorageInConsumerPath","isStorageChargeFromPublicGrid","storageCharge","isStorageDischargeCustomersGridAndPublicGrid","storageDischarge","isStorageDischargeIntoPublicGrid","isNonHighEfficiencyChpPlant","powerHeatCouplingPlantType","isHighEfficiencyChpPlant","isRequestWithPlanning","applicationForm","requestType","isRequestWithoutPlanning","isTotalPlantPerformanceBelow300","totalPlantPerformance","isTotalPlantPerformanceAbove300","lawParagraph14aConditionsMet","emailRegex","formCustomizer","objValue","srcValue","isArray","forEach","item","createItem","_model","createModel","_validations","getModelClone","createClone","resetModel","formReference","loadFormIntoModel","dto","path","obj","migrateApplicationFormData","serverSideMigration","version","currentStep","removeDataAfterCurrentStep","stepId","formKey","currentForm","currentConfig","currentStepIndex","steps","currentStepId","resetStateAfterCurrentStep","currentFormsConfig","currentValidations","modelService","validations","application","initialValidations","currentStepIdFormKey","currentStepIdApplicationRulesKey","modelOption","matchingConfigOption","find","configOption","currentValidationStep","initialValidationStep","currentVal","initialVal","currentValKeys","initialValKeys","diff","diffKey","stepRules","cloneSource","ModelService","validator","vm","float","selectFieldDefaultConfig","preselectExactlyOneOption","select","optionKey","option","optionToPreselect","checkboxFieldDefaultConfig","formOptionDefaultConfig","urlRegex","enumerable","_withParams","ref","_interopRequireDefault","__esModule","_typeof","Symbol","iterator","isNaN","getTime","_","reference","parentVm","expr","BUILD","separator","parts","split","match","every","hexValid","hex","toLowerCase","positive","numericValue","inverterStorage","certificateHint","overallNominalPowerNotMatchingTotalPlantPerformanceValueTypeWarning","storageHasSeparateInverter","pvQuantityAndNominalPower","pvTotalNominalPower","quantity","nominalPower","pvHeadline","pvModules","pvTotalPower30","restrictedApparentPower","restrictedNominalPower","parsedValue","photovoltaicFormGroup","initializeItems","minItemCount","maxItemCount","required","maxNominalPowerPlugInGeneratingPlant","storageManufacturerAndStorageType","storageMemoryExpansion","storageQuantity","storageDischargePowerAndStorageCapacity","storageTotalDischargePower","storageTotalStorageCapacity","storageHeadline","storageModules","storageOverallStorageCapacity","storageTotalPower30","manufacturer","storageType","dischargePower","storageCapacity","storageFormGroup","activePower","apparentPower","generatorHeadline","generatorModules","generatorManufacturerAndModuleType","generatorQuantityAndGeneratorType","generatorContributionSymmetricalShortCircuitCurrent","generatorVoltageSymmetricalShortCircuitCurrent","generatorContributionSustainedShortCircuitCurrent","generatorVoltageSustainedShortCircuitCurrent","generatorActivePowerAndApparentPower","generatorTotalActivePowerIsGreaterThanTotalApparentPowerWarning","generatorTotalActivePower","generatorTotalApparentPower","generatorType","moduleType","generatorFormGroup","maxApparentPowerPlugInGeneratingPlant","inverterHeadline","inverterModules","inverterOverallActivePowerWarning","inverterManufacturerAndModuleType","inverterQuantity","inverterContributionSymmetricalShortCircuitCurrent","inverterVoltageSymmetricalShortCircuitCurrent","inverterContributionSustainedShortCircuitCurrent","inverterVoltageSustainedShortCircuitCurrent","inverterActivePowerAndApparentPower","inverterTotalActivePower","inverterTotalApparentPower","inverterFormGroup","apparentPowerMustBeBiggerThanActualPower","minOverallApparentPowerValidator","proofOfConformityValidator","plantPerformanceFormStep","checked","calculateFeedInPower","powerConnectionFormStep","feedInPowerShallBeLimitedByAController","overallActivePower","existingPlantsTotalPower","repoweringTotalPower","feedInPower","getOverallActivePowerWithPreExisting","getFormGroupAndElementValidations","formGroup","ret","prop","hasOwnProperty","getFormValidations","form","formProp","getValidations","forms","getFormGroupAndElementValues","formGroupProp","getFormElementValues","getFormListValues","formList","formElement","getFormValues","getValues","createValidations","extendedValidationComponent","extend","data","modelValidations","computed","formValidations","values","watch","Promise","$nextTick","$v","$reset","handler","newValue","deep","immediate","validationComponent","createFormValidations","use","addressRequiredIfNoCadastral","locationVueContainer","proceedWithCadastral","availabilityResult","enumerableGetterAttribute","target","propertyKey","getter","getApplicationType","applicationTypeFunction","assign","applicationId","location","plantOperator","plantBuilder","propertyOwner","controllableConsumptionDevices","billing","documents","checkAndSend","formDtoAttribute","jsonSchema","germanDateFormat","commaSeparator","parseGermanFloat","parseFloat","NaN","formatGermanNumber","fixedValue","toFixed","integerString","decimalString","separatedIntegerString","houseNumber","getComparableNumber","comparedValue","comparableValue","comparableComparedValue","requiredIfAny","getDegreesValidators","orientation","GeoOrientation","latitude","integer","minValue","maxValue","getMinutesValidators","getSecondsValidators","null","degrees","minutes","seconds","stepIntro","zipAndCity","streetAndHousenumber","subdistrict","meadowAndLot","addressCheckFeedback","building","geographicMap","mapHeadline","mapHint","mapConsentHeadline","mapConsentText","mapConsentHint","geographicLatCoordinates","geographicLngCoordinates","zip","city","street","housenumber","meadow","lot","addressCheckFeedbackCheckingHeadline","addressCheckFeedbackAvailableHeadline","addressCheckFeedbackEnterAddressHeadline","addressCheckFeedbackUnavailableHeadline","addressCheckFeedbackUnavailableInfoText","valueWithLength","locationFormStep","maxLength","longitude","maxDate","validateValue","end","date","isSameOrBefore","start","dateFieldDefaultConfig","availableStart","availableEnd","energyType","plantStructureType","requestWithPlanningInfo","requestWithoutPlanningInfo","emergencyGeneratorOperatingMode","specifiedEmergencyGeneratorOperatingMode","simplifiedRegistrationProcessNotice","simplifiedProcedureHint","bidirectionalMeter","bidirectionalMeterInfo","consumption","infeed","readingDate","plugInGeneratingPlantInfo","generationTypeFormStep","toDate","requiredDate","format","doesConnectionExist","orderNumber","onlyInverterCapacityOfExistingGenerationPlant","hasExistingPlants","repoweringPlanned","plannedReferencePower","ofWhichOwnUseGeneratingPlant","ownUseExceedsPlannedPowerWarning","noConnectionAvailable","reactivePowerCompensationSystemExists","unitCapacity","unitIsPrototype","buildingPowerDemand","requiredPower","fromWhen","positiveInteger","val","recommendation","mustBeLowerThanToExistingPlantsTotalPower","mustBeLowerThanFeedInPowerRecommendation","firstName","lastName","salutation","companyName","title","operatorName","contactPersonName","birthday","separatePropertyOwner","operators","country","usePlantLocation","email","emailRepeat","phoneNumber1","phoneNumber2","maxDateNow","modelCountryPath","localModelCountryPath","normalizedValue","matches","exec","subPath","listElementName","listElements","listElementIndex","listElement","listElementZip","ValidationErrorsIBAN","ValidationErrorsBIC","emailRepeatMustBeIdentical","plantOperatorFormStep","name","phoneNumber","builderName","plantBuilderFormStep","newOrExistingApplication","applicationNumber","newOrExistingPlant","powerHeatCouplingPaymentsBasedOnLawHint","bafaApprovalWillBeSubmittedLater","plantWasAlreadyCommissioned","initialCommissioningDate","plantBuildingType","plantBuildingTypeForTenantElectricitySurcharge","plantPosition","pvInstallationType","pvInstallationTypeForAgriculturalLandOrParkingLots","storageConnection","electricityTaxExemptionHint","tenantElectricitySurcharge","requirementTenantElectricitySurchargeHint","minimumRequirementLivingSpace","noResidentialExemptions","electricityConsumptionWithinThisBuilding","noAdditionalNetworkForEndConsumer","federalNetworkAgencyHint","proofOfRegistrationPhotovoltaic","proofOfAllocationOfTenantElectricitySurcharge","declarationEnwgHint","plantOperatorKnowsEnwgSpecifications","storagePublicDischargeWarning","storageBalancingEnergyMarketParticipation","storageBalancingEnergyMarketParticipationType","infeedManagement","isValidIBAN","iban","reg","spec","countrySpecs","slice","bban_regexp","chars","checkFormatBBAN","isValidIBANChecksum","bban","bformat","providedChecksum","parseInt","temp","validationString","c","charCodeAt","toString","part","rest","AD","IBANRegistry","SEPA","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XK","YE","YT","ZA","ZM","ZW","imHeadline","imPowerReductionType","imAudioFrequencyControlReceiverContract","imProvisionThrough","imTechnicalSpecificationsNote","imBilling","imDirectDebitMandate","imIban","imCreditInstitutionName","imAccountHolderName","imBillingDate","toneFrequencyReceiverToPlantOperatorOrBuilder","infeedManagementFormGroup","plantDataFormStep","ownerName","propertyOwnerAgreement","owners","propertyOwnerFormStep","operatingMode","operatingModeStorage","fullInfeedBonusHeadline","fullInfeedBonus","measuringPointOperatorInfo","measuringPointOperation","meterNumber","measuringPointOperator","priceSheetMeasuringPointOperation","measuringPointOperationInfoEwe","measuringPointOperationFollowingConditionsAndGtacEwe","measuringPointOperationInfoOther","selfSupplyQuantity","remainingElectricityInfo","selfGenerationQuantitySuggestion","measuringConceptsFormStep","alphaNum","mustBeNoMoreThan20PercentAboveSuggestion","mustBeLowerThanOrEqualToSelfGenerationQuantity","controllableConsumptionDevicesInfo","gridControlConditionsAccepted","gridControlImplementationPreference","identificationNumbersOfRegisteredConsumptionDevices","controllableConsumptionFacilitiesRequirementInfo","registeredConsumptionDeviceIdentificationNumber","registeredConsumptionDeviceIdentificationNumbers","numbers","controllableConsumptionDevicesFormStep","paymentRequirements","plantSalesMethodAssignment","noEegRemuneration","reasonNoEegRemuneration","noEegRemunerationHint","explanationNoEegRemuneration","taxNumberWillFollow","taxNumber","smallPVTaxAdvisorHint","matchingTaxIDHint","tax","noFinancialDistress","noPendingEURecoveryClaims","directDebitMandate","nameAndDomicileCreditInstitution","accountOwnerName","minDate","isSameOrAfter","minDateNow","maxDate3Months","add","billingFormStep","checkNotice","comments","summaryDocument","privacyInformation","generalTermsConsent","marketingConsent","correctnessNotice","checkAndSendFormStep","uploadFieldDefaultConfig","properties","size","url","generatorTechnicalDataSheet","generatorConformityConfirmationOrUnitCertificate","generatorProofOfConformity","generatorUnitOrPrototypeConfirmation","generatorComponentCertificate","inverterConformityConfirmationOrUnitCertificate","inverterTechnicalDataSheet","inverterProofOfConformity","inverterUnitCertificate","storageManufacturerDataSheet","meterPicture","bafaApproval","gridAndPlantProtectionProofOfConformity","performanceMonitoringCertificate","sitePlanWithLotNumber","electricalSystemCircuitDiagram","proofOfReadyForPlanning","inverterStorageModules","scId","allowedTypes","fileTypes","pop","some","maxSize","maxFileSize","fileType","documentsFormStep","step1","step2","step3","step4","validateValueMin","validateValueMax","isBetween","textBlock","requiredField","multiLineField","numberField","wideField","innerLabelField","geoCoordinatesField","checkboxField1","checkboxField2","selectField","selectFieldSingleOption","selectFieldSearch","selectFieldMsb","fileUpload","datePickerField","datePickerRangeField","countField","documentDownload","formButton","kitchenSinkFormStep1","inDateRange","selected","selectedTiles","kitchenSinkFormStep2","option3RightAnswer","everybodyIsInterestedInNetzanschluessen","checkedOptions1","checkedOptions2","dropdownCheckedOptions","kitchenSinkFormStep3","radioIsForbidden","includes","primary","secondary","users","plants","checkbox","kitchenSinkFormStep4","kitchenSinkForm","formsConfig","kitchenSink","_alpha","_alphaNum","_numeric","_between","_email","_ipAddress","_macAddress","_maxLength","_minLength","_required","_requiredIf","_requiredUnless","_sameAs","_url","_or","_and","_not","_minValue","_maxValue","_integer","_decimal","helpers","_interopRequireWildcard","newObj","desc","getOwnPropertyDescriptor","$","thisNumberValue","nativeToFixed","floor","pow","x","acc","log","x2","proto","forced","fractionDigits","e","z","j","k","fractDigits","sign","multiply","c2","divide","dataToString","s","t","equalTo","nibbles","nibbleValid","nibble","numeric","root","window","fakeWithParams","paramsOrClosure","maybeValidator","vuelidate","trim","kitchenSinkRules","nextTick","addRequiredValidator","removeRequiredValidator","delete","toggleRequiredValidator","addOrRemove","formStep","isPvButNoPluginGeneratingPlant","PLANT_TYPE_RULES","energyStorage","sun","sunAndEnergyStorageLte30","wind","water","biogas","biowaste","biodiesel","slurry","plantOil","woodGas","mineGas","sewageGas","landfillGas","geothermics","naturalGas","liquidGas","dieselOil","isEnergyStorageOrSunOrWind","optionRules","pluginSimplified","findFirstValidKey","ruleset","isHigherThanOrEqual","valueToCompareTo","parsedValueToCompareTo","hasLowVoltage","isOther","requestWithoutPlanning","existingPlantsTotalPowerConditionInfo","pvInfo","storageInfo","otherInfo","conditionalInfoKey","isLvStorageBelow30","userChangeable","requestTypeIsWithPlanningOrDisabled","doesConnectionExistIsOrderedOrNo","doesConnectionExistIsOrderedOrNoWithRequestTypePlanning","operator","isStreetAndHouseNumberAvailable","setPowerReductionTypeOptions","powerReductionRules","isPvNominalPowerInRange","isPhcActivePowerInRange","isDeaUnknownMiddleRangeActivePower","isPlugin","infeedManagementConditionInfo","isAudioFrequencyControlReceiver","noPowerReduction","audioFrequencyControlReceiverInternal","audioFrequencyControlReceiverExternal","isAudioFrequencyControlReceiverInternal","isAudioFrequencyControlReceiverExternal","isSepa","hasStorage","isStorageHasSeparateInverterEnabled","storageChargeFromPublicGrid","storageDischargeIntoPublicGrid","owner","hasTotalPlantPerformanceAbove300","hasTotalPlantPerformanceBelow300","concat","isInverterEnabled","isStorageInverterEnabled","isGeneratorEnabled","overallNominalPower","zeroInfeed","commercialTransfer","storageOperatingMode","isLowVoltageWithExistingConnection","noPvOrDeaWithNominalPowerLte100AndNotMv","noEegRenumerationIsChecked","isphotovoltaicAndStorageLte30","hasMediumVoltage","hasUnknownVoltage","newAndExistingActivePower","hasLvApparentBelowOrEqual30","hasLvApparentAbove30","hasMvAbove135","hasUnBelowOrEqual300","hasUnAbove300","hasLvWithPreExistingAbove30","hasMvWithPreExistingAbove30","hasMvWithPreExistingAbove270","requestWithPlanning","field","moduleField","syncArray","isNotStorageOrNotPowerGenerationPlantWithStorageFacilityInTheGenerationPathAndConsumptionPlant","destination","sourceIds","Set","filter","i","has","sudoRemoveAt","sourceItem","destItem","applicationRules","general","confirmation","rules"],"mappings":"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","file":"js/Application~DummyApplicationFormSchema~DummyKitchenSink.5c893839.js","sourcesContent":["import { v4 as uuidv4 } from 'uuid';\r\nimport { FormField } from '../fields/formField';\r\nimport { FormGroup } from '../formGroup';\r\nimport { WithOptional } from '../utility';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class ReferenceFormGroup extends FormGroup {\r\n public id?: FormField;\r\n\r\n public constructor(\r\n config: ConfigProps,\r\n id: string | undefined = undefined,\r\n ) {\r\n super(config);\r\n\r\n this.id = new FormField({ value: id ?? uuidv4() });\r\n }\r\n}\r\n","/**\r\n *\r\n * @param value current value\r\n * @param previousValue previous value\r\n * @returns difference as floating-type number (e.g. \"0.5\" for a 50% increase)\r\n */\r\nexport function getPercentageChange(\r\n value: number,\r\n previousValue: number,\r\n): number {\r\n if (!previousValue) {\r\n throw new Error(\r\n 'Can not determine percentage change, if the previous value is 0.',\r\n );\r\n }\r\n\r\n return value / previousValue - 1;\r\n}\r\n\r\nexport function getPercentageDifference(\r\n value1: number,\r\n value2: number,\r\n): number {\r\n const sum = value1 + value2;\r\n\r\n if (!sum) {\r\n throw new Error(\r\n 'Can not determine percentage difference, if the value sum is 0.',\r\n );\r\n }\r\n\r\n return Math.abs(value1 - value2) / Math.abs(sum / 2);\r\n}\r\n","import { gt, lt } from '@/services/floatComparison';\r\nimport { getPercentageChange } from '@/services/percentage';\r\nimport { PlantPerformanceFormStep } from '@/types/forms/formSteps/plantPerformanceFormStep';\r\nimport {\r\n ApplicationForm,\r\n ApplicationType,\r\n} from '@/types/forms/specific/applicationForm';\r\nimport {\r\n formatGermanNumber,\r\n parseGermanFloat,\r\n} from '@/utilities/germanFormats';\r\n\r\nexport function isOverallActivePowerWarningEnabled(\r\n value: number | null,\r\n referenceValue: number | null,\r\n): boolean {\r\n if (!value || !referenceValue) {\r\n return false;\r\n }\r\n\r\n const percentageChange = getPercentageChange(value, referenceValue);\r\n const limit = 0.1;\r\n\r\n return gt(percentageChange, limit) || lt(percentageChange, -limit);\r\n}\r\n\r\nexport function getOverallNominalPower(\r\n plantPerformanceModel: PlantPerformanceFormStep,\r\n): number | null {\r\n if (!plantPerformanceModel) {\r\n return null;\r\n }\r\n\r\n if (\r\n !plantPerformanceModel.photovoltaic.disabled &&\r\n !plantPerformanceModel.photovoltaic.pvOverallNominalPower.disabled\r\n ) {\r\n return plantPerformanceModel.photovoltaic.pvOverallNominalPower\r\n .value !== null\r\n ? plantPerformanceModel.photovoltaic.pvOverallNominalPower.value\r\n : null;\r\n }\r\n\r\n if (\r\n !plantPerformanceModel.storage.disabled &&\r\n !plantPerformanceModel.storage.storageOverallDischargePower.disabled\r\n ) {\r\n return plantPerformanceModel.storage.storageOverallDischargePower\r\n .value !== null\r\n ? plantPerformanceModel.storage.storageOverallDischargePower.value\r\n : null;\r\n }\r\n\r\n if (\r\n !plantPerformanceModel.generator.disabled &&\r\n !plantPerformanceModel.generator.generatorOverallActivePower.disabled\r\n ) {\r\n return plantPerformanceModel.generator.generatorOverallActivePower\r\n .value;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getOverallActivePower(\r\n applicationType: ApplicationType | undefined,\r\n plantPerformanceModel: PlantPerformanceFormStep,\r\n): number | null {\r\n if (!plantPerformanceModel) {\r\n return null;\r\n }\r\n\r\n if (\r\n applicationType == 'photovoltaic' ||\r\n applicationType == 'photovoltaicAndStorageLte30' ||\r\n applicationType == 'storage'\r\n ) {\r\n if (\r\n !plantPerformanceModel.inverter.disabled &&\r\n !plantPerformanceModel.inverter.inverterOverallActivePower.disabled\r\n ) {\r\n return plantPerformanceModel.inverter.inverterOverallActivePower\r\n .value;\r\n }\r\n } else {\r\n if (\r\n !plantPerformanceModel.generator.disabled &&\r\n !plantPerformanceModel.generator.generatorOverallActivePower\r\n .disabled\r\n ) {\r\n return plantPerformanceModel.generator.generatorOverallActivePower\r\n .value;\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getOverallApparentPower(\r\n applicationType: ApplicationType | undefined,\r\n plantPerformanceModel: PlantPerformanceFormStep,\r\n): number | null {\r\n if (!plantPerformanceModel) {\r\n return null;\r\n }\r\n\r\n if (\r\n applicationType == 'photovoltaic' ||\r\n applicationType == 'photovoltaicAndStorageLte30' ||\r\n applicationType == 'storage'\r\n ) {\r\n if (\r\n !plantPerformanceModel.inverter.disabled &&\r\n !plantPerformanceModel.inverter.inverterOverallApparentPower\r\n .disabled\r\n ) {\r\n return plantPerformanceModel.inverter.inverterOverallApparentPower\r\n .value;\r\n }\r\n } else {\r\n if (\r\n !plantPerformanceModel.generator.disabled &&\r\n !plantPerformanceModel.generator.generatorOverallApparentPower\r\n .disabled\r\n ) {\r\n return plantPerformanceModel.generator.generatorOverallApparentPower\r\n .value;\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function calculateSelfGenerationQuantity(\r\n formModel: ApplicationForm,\r\n editModel: ApplicationForm | null = null,\r\n): string | null {\r\n const PV_OVERALLNOMINALPOWER_TO_SELFGENERATIONQUANTITY_FACTOR = 850;\r\n\r\n const modelSelfGenerationQuantity =\r\n (formModel.plantPerformance.photovoltaic.pvOverallNominalPower.value ??\r\n 0) * PV_OVERALLNOMINALPOWER_TO_SELFGENERATIONQUANTITY_FACTOR;\r\n const editSelfGenerationQuantity = editModel\r\n ? (editModel.plantPerformance.photovoltaic.pvOverallNominalPower\r\n .value ?? 0) *\r\n PV_OVERALLNOMINALPOWER_TO_SELFGENERATIONQUANTITY_FACTOR\r\n : modelSelfGenerationQuantity;\r\n\r\n const parsedSelfGenerationQuantity = parseGermanFloat(\r\n formModel.measuringConcepts.selfGenerationQuantity.value ?? '',\r\n );\r\n\r\n const finalSelfGenerationQuantity =\r\n parsedSelfGenerationQuantity === 0 ||\r\n modelSelfGenerationQuantity === parsedSelfGenerationQuantity\r\n ? formatGermanNumber(editSelfGenerationQuantity, {\r\n decimals: 2,\r\n thousandsSeparator: true,\r\n })\r\n : formModel.measuringConcepts.selfGenerationQuantity.value;\r\n\r\n return finalSelfGenerationQuantity;\r\n}\r\n","import { FileUploadValidationsConfiguration } from '@/api/interfaces/configuration/form/base/fielUploadValidationsConfiguration';\r\nimport Vue from 'vue';\r\n\r\nexport const appConfiguration = Vue.observable({\r\n fileUploadConfigurations: {} as {\r\n [key: string]: FileUploadValidationsConfiguration;\r\n },\r\n});\r\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.github.io/ecma262/#sec-string.prototype.repeat\nmodule.exports = ''.repeat || function repeat(count) {\n var str = String(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = (0, _common.regex)('integer', /(^[0-9]*$)|(^-[0-9]+$)/);\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(length) {\n return (0, _common.withParams)({\n type: 'maxLength',\n max: length\n }, function (value) {\n return !(0, _common.req)(value) || (0, _common.len)(value) <= length;\n });\n};\n\nexports.default = _default;","import { JSONSchema7Array, JSONSchema7Definition } from 'json-schema';\r\nimport { defaults as _defaults } from 'lodash';\r\nimport { FormOption } from '../formOption';\r\nimport {\r\n FormField,\r\n FormFieldConfig,\r\n formFieldDefaultConfig,\r\n} from './formField';\r\n\r\nexport interface FormFieldWithOptionsConfig\r\n extends FormFieldConfig {\r\n options?: FormOption[];\r\n hasServiceDrivenOptions?: boolean;\r\n}\r\n\r\nexport const formFieldWithOptionsDefaultConfig = {\r\n ...formFieldDefaultConfig,\r\n options: [],\r\n hasServiceDrivenOptions: false,\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/comma-dangle\r\nexport class FormFieldWithOptions<\r\n TValue,\r\n TOptionKey\r\n> extends FormField {\r\n protected valueIsArrayType: boolean;\r\n public options: FormOption[];\r\n public hasServiceDrivenOptions: boolean;\r\n\r\n public constructor(config: FormFieldWithOptionsConfig) {\r\n const resolvedConfig = _defaults(\r\n config || ({} as FormFieldWithOptionsConfig),\r\n formFieldWithOptionsDefaultConfig,\r\n );\r\n super(resolvedConfig);\r\n\r\n this.valueIsArrayType = false;\r\n this.options = resolvedConfig.options;\r\n this.hasServiceDrivenOptions =\r\n resolvedConfig.hasServiceDrivenOptions || false;\r\n }\r\n\r\n public getJsonSchema(): JSONSchema7Definition {\r\n if (!this.options.length || this.hasServiceDrivenOptions) {\r\n return {\r\n type: 'string',\r\n };\r\n }\r\n\r\n const optionEnum = (Array.from(\r\n this.options.map((o) => o.key) ?? [],\r\n ) as unknown) as JSONSchema7Array;\r\n\r\n if (this.valueIsArrayType) {\r\n return {\r\n type: 'array',\r\n items: {\r\n enum: optionEnum,\r\n },\r\n };\r\n }\r\n\r\n return {\r\n enum: optionEnum,\r\n };\r\n }\r\n}\r\n","import { helpers, ValidationRule } from 'vuelidate/lib/validators';\r\nimport { number } from './number';\r\n\r\nexport const minNumber = (min: number): ValidationRule => {\r\n return helpers.withParams({ type: 'minNumber', min }, (value: unknown) => {\r\n return (\r\n !helpers.req(value) || !number(value) || (value as number) >= min\r\n );\r\n });\r\n};\r\n","import { helpers, ValidationRule } from 'vuelidate/lib/validators';\r\nimport { number } from './number';\r\n\r\nexport const maxNumber = (max: number): ValidationRule => {\r\n return helpers.withParams({ type: 'maxNumber', max }, (value: unknown) => {\r\n return (\r\n !helpers.req(value) || !number(value) || (value as number) <= max\r\n );\r\n });\r\n};\r\n","import { JSONSchema7Definition } from 'json-schema';\r\nimport { defaults as _defaults } from 'lodash';\r\nimport {\r\n FormFieldConfig,\r\n formFieldDefaultConfig,\r\n FormField,\r\n} from './formField';\r\nimport { number } from '@/validators/number';\r\nimport { minNumber } from '@/validators/minNumber';\r\nimport { maxNumber } from '@/validators/maxNumber';\r\n\r\nexport interface CountFieldConfig extends FormFieldConfig {\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n}\r\n\r\nexport const countFieldDefaultConfig = {\r\n ...formFieldDefaultConfig,\r\n min: 1,\r\n max: 99999999,\r\n step: 1,\r\n};\r\n\r\nexport class CountField extends FormField {\r\n public readonly min: number;\r\n public readonly max: number;\r\n public readonly step: number;\r\n\r\n public constructor(config?: CountFieldConfig) {\r\n const resolvedConfig = _defaults(\r\n config || ({} as CountFieldConfig),\r\n countFieldDefaultConfig,\r\n ) as Required;\r\n\r\n resolvedConfig.validators = {\r\n ...resolvedConfig.validators,\r\n number,\r\n minNumber: minNumber(resolvedConfig.min),\r\n maxNumber: maxNumber(resolvedConfig.max),\r\n };\r\n\r\n super(resolvedConfig);\r\n\r\n this.min = resolvedConfig.min;\r\n this.max = resolvedConfig.max;\r\n this.step = resolvedConfig.step;\r\n }\r\n\r\n public getJsonSchema(): JSONSchema7Definition {\r\n return {\r\n type: 'number',\r\n };\r\n }\r\n}\r\n","export const epsilon = 0.000000001;\r\nconst defaultEpsilon = epsilon;\r\n\r\nexport const eq = (\r\n value1: number,\r\n value2: number,\r\n epsilon = defaultEpsilon,\r\n): boolean => {\r\n return Math.abs(value1 - value2) < epsilon;\r\n};\r\n\r\nexport const gt = (\r\n value1: number,\r\n value2: number,\r\n epsilon = defaultEpsilon,\r\n): boolean => {\r\n return value1 - value2 > epsilon;\r\n};\r\n\r\nexport const lt = (\r\n value1: number,\r\n value2: number,\r\n epsilon = defaultEpsilon,\r\n): boolean => {\r\n return gt(value2, value1, epsilon);\r\n};\r\n\r\nexport const gte = (\r\n value1: number,\r\n value2: number,\r\n epsilon = defaultEpsilon,\r\n): boolean => {\r\n return gt(value1, value2, epsilon) || eq(value1, value2, epsilon);\r\n};\r\n\r\nexport const lte = (\r\n value1: number,\r\n value2: number,\r\n epsilon = defaultEpsilon,\r\n): boolean => {\r\n return gte(value2, value1, epsilon);\r\n};\r\n\r\nexport const clamp = (\r\n value: number,\r\n min: number,\r\n max: number,\r\n epsilon = defaultEpsilon,\r\n): number => {\r\n return lt(value, min, epsilon)\r\n ? min\r\n : gt(value, max, epsilon)\r\n ? max\r\n : value;\r\n};\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default() {\n for (var _len = arguments.length, validators = new Array(_len), _key = 0; _key < _len; _key++) {\n validators[_key] = arguments[_key];\n }\n\n return (0, _common.withParams)({\n type: 'and'\n }, function () {\n var _this = this;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return validators.length > 0 && validators.reduce(function (valid, fn) {\n return valid && fn.apply(_this, args);\n }, true);\n });\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = (0, _common.regex)('alphaNum', /^[a-zA-Z0-9]*$/);\n\nexports.default = _default;","import { helpers } from 'vuelidate/lib/validators';\r\n\r\nexport const number = (value: unknown): boolean => {\r\n return (\r\n !helpers.req(value) || (typeof value === 'number' && isFinite(value))\r\n );\r\n};\r\n","var classof = require('../internals/classof-raw');\n\n// `thisNumberValue` abstract operation\n// https://tc39.github.io/ecma262/#sec-thisnumbervalue\nmodule.exports = function (value) {\n if (typeof value != 'number' && classof(value) != 'Number') {\n throw TypeError('Incorrect invocation');\n }\n return +value;\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = (0, _common.regex)('numeric', /^[0-9]*$/);\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(max) {\n return (0, _common.withParams)({\n type: 'maxValue',\n max: max\n }, function (value) {\n return !(0, _common.req)(value) || (!/\\s/.test(value) || value instanceof Date) && +value <= +max;\n });\n};\n\nexports.default = _default;","export const alwaysFalse = (): boolean => false;\r\n","var DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isRegExp = require('../internals/is-regexp');\nvar getFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar setInternalState = require('../internals/internal-state').set;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = global.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar FORCED = DESCRIPTORS && isForced('RegExp', (!CORRECT_NEW || UNSUPPORTED_Y || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';\n})));\n\n// `RegExp` constructor\n// https://tc39.github.io/ecma262/#sec-regexp-constructor\nif (FORCED) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = this instanceof RegExpWrapper;\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var sticky;\n\n if (!thisIsRegExp && patternIsRegExp && pattern.constructor === RegExpWrapper && flagsAreUndefined) {\n return pattern;\n }\n\n if (CORRECT_NEW) {\n if (patternIsRegExp && !flagsAreUndefined) pattern = pattern.source;\n } else if (pattern instanceof RegExpWrapper) {\n if (flagsAreUndefined) flags = getFlags.call(pattern);\n pattern = pattern.source;\n }\n\n if (UNSUPPORTED_Y) {\n sticky = !!flags && flags.indexOf('y') > -1;\n if (sticky) flags = flags.replace(/y/g, '');\n }\n\n var result = inheritIfRequired(\n CORRECT_NEW ? new NativeRegExp(pattern, flags) : NativeRegExp(pattern, flags),\n thisIsRegExp ? this : RegExpPrototype,\n RegExpWrapper\n );\n\n if (UNSUPPORTED_Y && sticky) setInternalState(result, { sticky: sticky });\n\n return result;\n };\n var proxy = function (key) {\n key in RegExpWrapper || defineProperty(RegExpWrapper, key, {\n configurable: true,\n get: function () { return NativeRegExp[key]; },\n set: function (it) { NativeRegExp[key] = it; }\n });\n };\n var keys = getOwnPropertyNames(NativeRegExp);\n var index = 0;\n while (keys.length > index) proxy(keys[index++]);\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n redefine(global, 'RegExp', RegExpWrapper);\n}\n\n// https://tc39.github.io/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n","import { gt, lte } from '@/services/floatComparison';\r\nimport { GenerationTypeFormStep } from '@/types/forms/formSteps/generationTypeFormStep';\r\nimport { MeasuringConceptsFormStep } from '@/types/forms/formSteps/measuringConceptsFormStep';\r\nimport { PlantDataFormStep } from '@/types/forms/formSteps/plantDataFormStep';\r\nimport { PlantPerformanceFormStep } from '@/types/forms/formSteps/plantPerformanceFormStep';\r\nimport { PowerConnectionFormStep } from '@/types/forms/formSteps/powerConnectionFormStep';\r\nimport { WhichVoltageLevelType } from '@/types/forms/shared/whichVoltageLevelType';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport { parseGermanFloat } from '@/utilities/germanFormats';\r\n\r\n/**\r\n * Returns true if the application type matches the given type\r\n * @param formModel ApplicationForm\r\n * @param applicationType string\r\n */\r\nconst isApplicationType = (\r\n formModel: ApplicationForm,\r\n applicationType: string,\r\n) => formModel.applicationType === applicationType;\r\n\r\n/**\r\n * PV\r\n * @param formModel ApplicationForm\r\n */\r\nexport function isPv(formModel: ApplicationForm): boolean {\r\n return (\r\n isApplicationType(formModel, 'photovoltaic') ||\r\n isApplicationType(formModel, 'photovoltaicAndStorageLte30')\r\n );\r\n}\r\n\r\n/**\r\n * PluginGeneratingPlant\r\n * @param formModel ApplicationForm\r\n */\r\nexport function isPluginGeneratingPlant(formModel: ApplicationForm): boolean {\r\n return isPluginGeneratingPlantGenerationTypeModel(formModel.generationType);\r\n}\r\n\r\n/**\r\n * PluginGeneratingPlant\r\n * @param model GenerationTypeFormStep\r\n */\r\nexport function isPluginGeneratingPlantGenerationTypeModel(\r\n model: GenerationTypeFormStep,\r\n): boolean {\r\n return (\r\n !model.plugInGeneratingPlant.disabled &&\r\n !!model.plugInGeneratingPlant.value\r\n );\r\n}\r\n\r\n/**\r\n * PV & PluginGeneratingPlant & Simplified process\r\n * @param model GenerationTypeFormStep\r\n */\r\nexport function isPluginGeneratingPlantSimplified(\r\n model: GenerationTypeFormStep,\r\n): boolean {\r\n const pv =\r\n model.plantType.value === null ||\r\n model.plantType.value === 'photovoltaicPowerPlant';\r\n const plugin = isPluginGeneratingPlantGenerationTypeModel(model);\r\n const proceed =\r\n model.proceedWithFullRegistrationForEEGCompensation.disabled ||\r\n !!model.proceedWithFullRegistrationForEEGCompensation.value;\r\n return pv && plugin && !proceed;\r\n}\r\n\r\n/**\r\n * KWK\r\n * @param formModel ApplicationForm\r\n */\r\nexport function isPowerHeatCoupling(formModel: ApplicationForm): boolean {\r\n return isApplicationType(formModel, 'powerHeatCoupling');\r\n}\r\n\r\n/**\r\n * Speicher\r\n * @param formModel ApplicationForm\r\n */\r\nexport function isStorage(formModel: ApplicationForm): boolean {\r\n return (\r\n isApplicationType(formModel, 'storage') ||\r\n isApplicationType(formModel, 'photovoltaicAndStorageLte30')\r\n );\r\n}\r\n\r\n/**\r\n * Solaranlage + Speicher bis 30 kW\r\n * @param formModel ApplicationForm\r\n */\r\nexport function isPvAndStorageLte30(formModel: ApplicationForm): boolean {\r\n return isApplicationType(formModel, 'photovoltaicAndStorageLte30');\r\n}\r\n\r\n/**\r\n * DEA\r\n * @param formModel ApplicationForm\r\n */\r\nexport function isDea(formModel: ApplicationForm): boolean {\r\n return isApplicationType(formModel, 'dea');\r\n}\r\n\r\n/**\r\n * Unbekannt\r\n * @param formModel ApplicationForm\r\n */\r\nexport function isUnknown(formModel: ApplicationForm): boolean {\r\n return isApplicationType(formModel, 'unknown');\r\n}\r\n\r\n/**\r\n * Whether the user selected the power connection to be low voltage\r\n * @param powerConnection\r\n * @returns\r\n * @deprecated with {@link isMediumVoltage} not handling all other cases of {@link WhichVoltageLevelType}, this method doesn't actually do exactly what it is supposed to do. That said, changing the current logic might have unforeseen consequences\r\n */\r\nexport function isLowVoltage(\r\n powerConnection: PowerConnectionFormStep,\r\n): boolean {\r\n return !isMediumVoltage(powerConnection);\r\n}\r\n\r\nexport function isMediumVoltage(\r\n powerConnection: PowerConnectionFormStep,\r\n): boolean {\r\n return powerConnection.whichVoltageLevel.value === 'mediumVoltage';\r\n}\r\n\r\nexport function isFullInfeed(\r\n measuringConcepts: MeasuringConceptsFormStep,\r\n): boolean {\r\n return (\r\n !measuringConcepts.operatingMode.disabled &&\r\n measuringConcepts.operatingMode.value === 'fullInfeed'\r\n );\r\n}\r\n\r\nexport function isSurplusInfeed(\r\n measuringConcepts: MeasuringConceptsFormStep,\r\n): boolean {\r\n return (\r\n !measuringConcepts.operatingMode.disabled &&\r\n measuringConcepts.operatingMode.value === 'surplusInfeed'\r\n );\r\n}\r\n\r\nexport function isZeroInfeed(\r\n measuringConcepts: MeasuringConceptsFormStep,\r\n): boolean {\r\n return (\r\n !measuringConcepts.operatingMode.disabled &&\r\n measuringConcepts.operatingMode.value === 'zeroInfeed'\r\n );\r\n}\r\n\r\nexport function isNominalPowerAboveTippingPoint(\r\n plantPerformance: PlantPerformanceFormStep,\r\n tippingPoint: number,\r\n): boolean {\r\n return (\r\n !plantPerformance.photovoltaic.disabled &&\r\n !plantPerformance.photovoltaic.pvOverallNominalPower.disabled &&\r\n plantPerformance.photovoltaic.pvOverallNominalPower.value !== null &&\r\n gt(\r\n plantPerformance.photovoltaic.pvOverallNominalPower.value,\r\n tippingPoint,\r\n )\r\n );\r\n}\r\n\r\nexport function isNominalPowerBelowOrEqualTippingPoint(\r\n plantPerformance: PlantPerformanceFormStep,\r\n tippingPoint: number,\r\n): boolean {\r\n return (\r\n !plantPerformance.photovoltaic.disabled &&\r\n !plantPerformance.photovoltaic.pvOverallNominalPower.disabled &&\r\n plantPerformance.photovoltaic.pvOverallNominalPower.value !== null &&\r\n lte(\r\n plantPerformance.photovoltaic.pvOverallNominalPower.value,\r\n tippingPoint,\r\n )\r\n );\r\n}\r\n\r\nexport function isSelfSupplyQuantityAboveTippingPoint(\r\n measuringConcept: MeasuringConceptsFormStep,\r\n tippingPoint: number,\r\n): boolean {\r\n return (\r\n !measuringConcept.selfSupplyQuantity.disabled &&\r\n !!measuringConcept.selfSupplyQuantity.value &&\r\n gt(\r\n parseGermanFloat(measuringConcept.selfSupplyQuantity.value),\r\n tippingPoint,\r\n )\r\n );\r\n}\r\n\r\nexport function isSelfSupplyQuantityBelowOrEqualTippingPoint(\r\n measuringConcept: MeasuringConceptsFormStep,\r\n tippingPoint: number,\r\n): boolean {\r\n return (\r\n !measuringConcept.selfSupplyQuantity.disabled &&\r\n !!measuringConcept.selfSupplyQuantity.value &&\r\n lte(\r\n parseGermanFloat(measuringConcept.selfSupplyQuantity.value),\r\n tippingPoint,\r\n )\r\n );\r\n}\r\n\r\nexport function isActivePowerAboveTippingPoint(\r\n plantPerformance: PlantPerformanceFormStep,\r\n tippingPoint: number,\r\n): boolean {\r\n return (\r\n !plantPerformance.generator.disabled &&\r\n !plantPerformance.generator.generatorOverallActivePower.disabled &&\r\n gt(\r\n plantPerformance.generator.generatorOverallActivePower.value ??\r\n Math.min(),\r\n tippingPoint,\r\n )\r\n );\r\n}\r\n\r\nexport function isActivePowerBelowOrEqualTippingPoint(\r\n plantPerformance: PlantPerformanceFormStep,\r\n tippingPoint: number,\r\n): boolean {\r\n return (\r\n !plantPerformance.generator.disabled &&\r\n !plantPerformance.generator.generatorOverallActivePower.disabled &&\r\n lte(\r\n plantPerformance.generator.generatorOverallActivePower.value ??\r\n Math.max(),\r\n tippingPoint,\r\n )\r\n );\r\n}\r\n\r\nexport function isDischargePowerAboveTippingPoint(\r\n plantPerformance: PlantPerformanceFormStep,\r\n tippingPoint: number,\r\n): boolean {\r\n return (\r\n !plantPerformance.storage.disabled &&\r\n !plantPerformance.storage.storageOverallDischargePower.disabled &&\r\n plantPerformance.storage.storageOverallDischargePower.value !== null &&\r\n gt(\r\n plantPerformance.storage.storageOverallDischargePower.value,\r\n tippingPoint,\r\n )\r\n );\r\n}\r\n\r\nexport function isDischargePowerBelowOrEqualTippingPoint(\r\n plantPerformance: PlantPerformanceFormStep,\r\n tippingPoint: number,\r\n): boolean {\r\n return (\r\n !plantPerformance.storage.disabled &&\r\n !plantPerformance.storage.storageOverallDischargePower.disabled &&\r\n plantPerformance.storage.storageOverallDischargePower.value !== null &&\r\n lte(\r\n plantPerformance.storage.storageOverallDischargePower.value,\r\n tippingPoint,\r\n )\r\n );\r\n}\r\n\r\n/**\r\n * AC-gekoppelt: Anschluss im Verbraucherpfad. Be- und Entladung über seperaten WR.\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageCouplingAcCoupled(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageCoupling.disabled &&\r\n plantData.storageCoupling.value === 'acCoupled'\r\n );\r\n}\r\n\r\n/**\r\n * DC-gekoppelt: Anschluss im Erzeugungspfad. Beladung DC-seitig. Entladung über gemeinsamen WR.\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageCouplingDcCoupled(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageCoupling.disabled &&\r\n plantData.storageCoupling.value === 'dcCoupled'\r\n );\r\n}\r\n\r\n/**\r\n * Speicher ohne Stromerzeugungsanlage und ohne Verbrauchsanlage\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageConnectionConceptWithoutPowerGeneration(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageConnectionConcept.disabled &&\r\n plantData.storageConnectionConcept.value ===\r\n 'storageWithoutPowerGenerationPlantAndWithoutConsumptionPlant'\r\n );\r\n}\r\n/**\r\n * Speicher ohne Stromerzeugungsanlage und ohne Verbrauchsanlage\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageConnectionConceptWithoutPowerGenerationAndWithConsumptionPlant(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageConnectionConcept.disabled &&\r\n plantData.storageConnectionConcept.value ===\r\n 'storageWithoutPowerGenerationPlantAndWithConsumptionPlant'\r\n );\r\n}\r\n\r\n/**\r\n * Speicher mit Stromerzeugungsanlage und ohne Verbrauchsanlage\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageConnectionConceptWithPowerGeneration(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageConnectionConcept.disabled &&\r\n plantData.storageConnectionConcept.value ===\r\n 'storageFacilityWithPowerGenerationPlantAndWithoutConsumptionPlant'\r\n );\r\n}\r\n\r\n/**\r\n * Stromerzeugungsanlage mit Speicher im Erzeugungspfad und Verbrauchsanlage\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageConnectionConceptStorageInGenerationPath(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageConnectionConcept.disabled &&\r\n plantData.storageConnectionConcept.value ===\r\n 'powerGenerationPlantWithStorageFacilityInTheGenerationPathAndConsumptionPlant'\r\n );\r\n}\r\n\r\n/**\r\n * Stromerzeugungsanlage mit Speicher im Verbrauchspfad und Verbrauchsanlage\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageConnectionConceptStorageInConsumerPath(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageConnectionConcept.disabled &&\r\n plantData.storageConnectionConcept.value ===\r\n 'powerGenerationPlantWithStorageInTheConsumerPathAndConsumptionPlant'\r\n );\r\n}\r\n\r\n/**\r\n * nur aus der EEG - Anlage\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageChargeOnlyFromEeg(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageCharge.disabled &&\r\n plantData.storageCharge.value === 'onlyFromEeg'\r\n );\r\n}\r\n/**\r\n * nur aus der KWKG - Anlage\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageChargeOnlyFromKwkg(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageCharge.disabled &&\r\n plantData.storageCharge.value === 'onlyFromKwkg'\r\n );\r\n}\r\n\r\n/**\r\n * aus der EEG - und KWKG - Anlage\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageChargeFromEegAndKwkg(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageCharge.disabled &&\r\n plantData.storageCharge.value === 'fromEegAndKwkg'\r\n );\r\n}\r\n\r\n/**\r\n * aus dem öffentlichen Netz und EEG - Anlage\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageChargeFromPublicGridAndEeg(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageCharge.disabled &&\r\n plantData.storageCharge.value === 'fromPublicGridAndEeg'\r\n );\r\n}\r\n\r\n/**\r\n * aus dem öffentlichen Netz und KWKG - Anlage\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageChargeFromPublicGridAndKwkg(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageCharge.disabled &&\r\n plantData.storageCharge.value === 'fromPublicGridAndKwkg'\r\n );\r\n}\r\n\r\n/**\r\n * aus dem öffentlichen Netz, KWKG und EEG - Anlagen\r\n * @param form ApplicationForm\r\n */\r\nexport function isStorageChargeFromPublicGridEegAndKwkg(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageCharge.disabled &&\r\n plantData.storageCharge.value === 'fromPublicGridAndEegAndKwkg'\r\n );\r\n}\r\n\r\n/**\r\n * nur aus dem öffentlichen Netz\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageChargeOnlyFromPublicGrid(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageCharge.disabled &&\r\n plantData.storageCharge.value === 'onlyFromPublicGrid'\r\n );\r\n}\r\n\r\n/**\r\n * nur aus dem öffentlichen Netz,\r\n * aus dem öffentlichen Netz und EEG - Anlage,\r\n * aus dem öffentlichen Netz und KWKG - Anlage,\r\n * aus dem öffentlichen Netz, KWKG und EEG - Anlagen,\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageChargeFromPublicGrid(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageCharge.disabled &&\r\n (plantData.storageCharge.value === 'onlyFromPublicGrid' ||\r\n plantData.storageCharge.value === 'fromPublicGridAndEeg' ||\r\n plantData.storageCharge.value === 'fromPublicGridAndKwkg' ||\r\n plantData.storageCharge.value === 'fromPublicGridAndEegAndKwkg')\r\n );\r\n}\r\n\r\n/**\r\n * kundeneigenes Netz - Eigenversorgung\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageDischargeOnlySelfSupply(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageDischarge.disabled &&\r\n plantData.storageDischarge.value === 'onlyIntoCustomersGridSelfSupply'\r\n );\r\n}\r\n\r\n/**\r\n * öffentliches Netz - Netzeinspeisung\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageDischargeOnlyPublicGridFeedIn(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageDischarge.disabled &&\r\n plantData.storageDischarge.value === 'onlyIntoPublicGridGridFeedIn'\r\n );\r\n}\r\n\r\n/**\r\n * kundeneigenes und öffentliches Netz (bivalent)\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageDischargeCustomersGridAndPublicGrid(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageDischarge.disabled &&\r\n plantData.storageDischarge.value ===\r\n 'intoCustomersGridAndPublicGridBivalent'\r\n );\r\n}\r\n\r\n/**\r\n * öffentliches Netz - Netzeinspeisung,\r\n * kundeneigenes und öffentliches Netz (bivalent)\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isStorageDischargeIntoPublicGrid(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.storageDischarge.disabled &&\r\n (plantData.storageDischarge.value === 'onlyIntoPublicGridGridFeedIn' ||\r\n plantData.storageDischarge.value ===\r\n 'intoCustomersGridAndPublicGridBivalent')\r\n );\r\n}\r\n\r\n/**\r\n * Nicht hocheffiziente KWK-Anlage oder konventionelle Erzeugungsanlage\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isNonHighEfficiencyChpPlant(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.powerHeatCouplingPlantType.disabled &&\r\n plantData.powerHeatCouplingPlantType.value ===\r\n 'nonHighEfficiencyChpPlant'\r\n );\r\n}\r\n\r\n/**\r\n * Hocheffiziente KWK-Anlage\r\n * @param plantData PlantDataFormStep\r\n */\r\nexport function isHighEfficiencyChpPlant(\r\n plantData: PlantDataFormStep,\r\n): boolean {\r\n return (\r\n !plantData.powerHeatCouplingPlantType.disabled &&\r\n plantData.powerHeatCouplingPlantType.value === 'highEfficiencyChpPlant'\r\n );\r\n}\r\n\r\nexport function isRequestWithPlanning(\r\n applicationForm: ApplicationForm,\r\n): boolean {\r\n return (\r\n !applicationForm.generationType.requestType.disabled &&\r\n applicationForm.generationType.requestType.value ==\r\n 'requestWithPlanning'\r\n );\r\n}\r\n\r\nexport function isRequestWithoutPlanning(\r\n applicationForm: ApplicationForm,\r\n): boolean {\r\n return (\r\n !applicationForm.generationType.requestType.disabled &&\r\n applicationForm.generationType.requestType.value ==\r\n 'requestWithoutPlanning'\r\n );\r\n}\r\n\r\nexport function isTotalPlantPerformanceBelow300(\r\n applicationForm: ApplicationForm,\r\n): boolean {\r\n return (\r\n !applicationForm.generationType.totalPlantPerformance.disabled &&\r\n applicationForm.generationType.totalPlantPerformance.value == 'below300'\r\n );\r\n}\r\n\r\nexport function isTotalPlantPerformanceAbove300(\r\n applicationForm: ApplicationForm,\r\n): boolean {\r\n return (\r\n !applicationForm.generationType.totalPlantPerformance.disabled &&\r\n applicationForm.generationType.totalPlantPerformance.value == 'above300'\r\n );\r\n}\r\n\r\n/**\r\n * Determines whether conditions for §14a are met,\r\n * which then affects/dictates some behaviour of the form\r\n * @param applicationForm\r\n * @returns {boolean}\r\n */\r\nexport function lawParagraph14aConditionsMet(\r\n applicationForm: ApplicationForm,\r\n): boolean {\r\n return (\r\n isStorage(applicationForm) &&\r\n (applicationForm.generationType.totalPlantPerformance.disabled ||\r\n applicationForm.generationType.totalPlantPerformance.value ===\r\n 'below300') &&\r\n (applicationForm.powerConnection.whichVoltageLevel.disabled ||\r\n applicationForm.powerConnection.whichVoltageLevel.value ===\r\n 'lowVoltage' ||\r\n applicationForm.powerConnection.whichVoltageLevel.value ===\r\n 'unknown') &&\r\n isDischargePowerAboveTippingPoint(applicationForm.plantPerformance, 4.2)\r\n );\r\n}\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar emailRegex = /^(?:[A-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9]{2,}(?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/;\n\nvar _default = (0, _common.regex)('email', emailRegex);\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(length) {\n return (0, _common.withParams)({\n type: 'minLength',\n min: length\n }, function (value) {\n return !(0, _common.req)(value) || (0, _common.len)(value) >= length;\n });\n};\n\nexports.default = _default;","import Vue from 'vue';\r\nimport {\r\n cloneDeep as _cloneDeep,\r\n mergeWith as _mergeWith,\r\n difference as _difference,\r\n keys as _keys,\r\n get as _get,\r\n set as _set,\r\n} from 'lodash';\r\nimport { formsConfig } from './config';\r\nimport { Forms } from '@/types/forms/forms';\r\nimport { FormDto } from './dto';\r\nimport { FormField } from '@/types/forms/fields/formField';\r\nimport { FormList } from '@/types/forms/fields/formList';\r\nimport { Form } from '@/types/forms/form';\r\nimport { ValidationGroups, ValidationProperties } from 'vue/types/vue';\r\nimport { Validation } from 'vuelidate';\r\nimport { createFormValidations } from './validations';\r\nimport { FormFieldWithOptions } from '@/types/forms/fields/formFieldWithOptions';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { rules } from './rules';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport { FormStep } from '@/types/forms/formStep';\r\nimport { applicationRules } from '@/services/form/rules/application';\r\n\r\n/**\r\n * Customizes value setting during a lodash mergeWith\r\n */\r\nfunction formCustomizer(objValue: unknown, srcValue: unknown) {\r\n if (objValue instanceof FormList) {\r\n if (!Array.isArray(srcValue)) {\r\n throw 'SrcValue is not an array';\r\n }\r\n\r\n srcValue.forEach((item, index) => {\r\n if (!objValue.items[index]) {\r\n objValue.createItem();\r\n }\r\n\r\n typeof item === 'string'\r\n ? (objValue.items[index].value = srcValue[index])\r\n : _mergeWith(objValue.items[index], item, formCustomizer);\r\n });\r\n\r\n return objValue;\r\n } else if (objValue instanceof FormField) {\r\n objValue.value = srcValue;\r\n return objValue;\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Handles instantiation of the model by creating writable copies of the form config\r\n */\r\nclass ModelService {\r\n private _model: Forms;\r\n private _validations: ValidationProperties &\r\n ValidationGroups &\r\n Validation;\r\n\r\n constructor() {\r\n this._model = this.createModel();\r\n this._validations = createFormValidations(this._model);\r\n }\r\n\r\n /**\r\n * Creates a deep clone of the model\r\n */\r\n public getModelClone(): Forms {\r\n return this.createClone(this._model);\r\n }\r\n\r\n /**\r\n * Repopulates the model and validations to reset model state\r\n */\r\n public resetModel(formReference?: Vue) {\r\n this._model = this.createModel();\r\n this._validations = createFormValidations(this._model, formReference);\r\n }\r\n\r\n /**\r\n * The main form state object. Writable copy of config.ts and source for dto.ts and validations.ts.\r\n */\r\n get model(): Forms {\r\n return this._model;\r\n }\r\n\r\n /**\r\n * The generated validations for the current model state\r\n */\r\n get validations(): ValidationProperties &\r\n ValidationGroups &\r\n Validation {\r\n return this._validations;\r\n }\r\n\r\n /**\r\n * Main method for loading data from a dto into the model.\r\n * @param dto See dto.ts\r\n * @param path The property name of the form to use on the model. Can also be a path to reach subproperties.\r\n */\r\n public loadFormIntoModel(dto: FormDto, path: string): void {\r\n const obj = _get(this._model, path);\r\n _mergeWith(obj, dto, formCustomizer);\r\n _set(this._model, path, obj);\r\n }\r\n\r\n /**\r\n * Perform migrations on raw form data before loading it into the model.\r\n * Specific to ApplicationForm model. Create new methods for other forms.\r\n * You also need to add new migrations to the backend: ApplicationRepository.ApplyDataMigrations()\r\n * To add a new migration, you also need to change the main data version in src\\services\\form\\config\\application.ts\r\n * @param dto See dto.ts\r\n */\r\n public migrateApplicationFormData(dto: FormDto): FormDto {\r\n if (dto.serverSideMigration) {\r\n // Server-side migration happened. So the data is already migrated, but maybe we need to reset the current step or something else.\r\n const version = dto.version as number;\r\n switch (true) {\r\n case version >= 1 && version <= 9: // 1-9\r\n dto.currentStep = null;\r\n break;\r\n }\r\n }\r\n\r\n return dto;\r\n }\r\n\r\n /**\r\n * Removes any data that may exist in the model passed the current step\r\n * @param stepId The current step as an index of the steps array\r\n * @param formKey The property name of the form to use on the model\r\n */\r\n public removeDataAfterCurrentStep(\r\n stepId: string,\r\n formKey: keyof Forms,\r\n ): void {\r\n const currentForm = this._model[formKey];\r\n const currentConfig = this.createModel()[formKey];\r\n const currentStepIndex = currentForm.steps.indexOf(stepId);\r\n\r\n for (let index = 0; index < currentForm.steps.length; index++) {\r\n const currentStepId = currentForm.steps[index];\r\n if (index > currentStepIndex) {\r\n _mergeWith(\r\n currentForm[currentStepId as keyof Form],\r\n currentConfig[currentStepId as keyof Form],\r\n );\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Resets disabled state in the model passed the current step\r\n * @param stepId The current step as an index of the steps array\r\n * @param formKey The property name of the form to use on the model\r\n */\r\n public resetStateAfterCurrentStep(\r\n stepId: string,\r\n formKey: keyof Forms,\r\n formReference?: Vue,\r\n ): void {\r\n const currentForm = this._model[formKey];\r\n const currentFormsConfig = this.createModel();\r\n const currentConfig = currentFormsConfig[formKey];\r\n const currentStepIndex = currentForm.steps.indexOf(stepId);\r\n const currentValidations = modelService.validations.application;\r\n const initialValidations = createFormValidations(\r\n currentFormsConfig,\r\n formReference,\r\n ).application;\r\n\r\n if (currentForm instanceof ApplicationForm) {\r\n // Only for application form. Not needed for kitchen sink. For future other forms we have to adjust the logic.\r\n\r\n for (let index = 0; index < currentForm.steps.length; index++) {\r\n const currentStepId = currentForm.steps[index];\r\n const currentStepIdFormKey = currentStepId as keyof Form;\r\n const currentStepIdApplicationRulesKey = currentStepId as keyof typeof applicationRules;\r\n\r\n // if step comes after edited step\r\n if (index > currentStepIndex) {\r\n _mergeWith(\r\n currentForm[currentStepIdFormKey],\r\n currentConfig[currentStepIdFormKey],\r\n (model, config) => {\r\n // reset disabled for all field groups ...\r\n if (\r\n model instanceof FormElement &&\r\n config instanceof FormElement\r\n ) {\r\n model.disabled = config.disabled;\r\n }\r\n\r\n // ... and fields\r\n if (\r\n model instanceof FormFieldWithOptions &&\r\n config instanceof FormFieldWithOptions\r\n ) {\r\n model.options.forEach((modelOption) => {\r\n const matchingConfigOption = config.options.find(\r\n (configOption) =>\r\n configOption.key ===\r\n modelOption.key,\r\n );\r\n if (matchingConfigOption) {\r\n modelOption.disabled =\r\n matchingConfigOption.disabled;\r\n }\r\n });\r\n }\r\n\r\n return model;\r\n },\r\n );\r\n\r\n const currentFormStepModel =\r\n currentForm[currentStepIdFormKey];\r\n\r\n if (!(currentFormStepModel instanceof FormStep)) {\r\n return; // ApplicationForm contains applicationId etc. so we need to tell TypeScript that we only use FormStep types.\r\n }\r\n\r\n // loop validation keys, check if any keys were removed and delete them\r\n for (const key of _keys(\r\n currentValidations[currentStepIdFormKey],\r\n )) {\r\n const currentValidationStep =\r\n currentValidations[currentStepIdFormKey];\r\n const initialValidationStep =\r\n initialValidations[currentStepIdFormKey];\r\n\r\n if (!currentValidationStep || !initialValidationStep) {\r\n continue;\r\n }\r\n\r\n const currentVal = currentValidationStep[key];\r\n const initialVal = initialValidationStep[key];\r\n const currentValKeys = _keys(currentVal);\r\n const initialValKeys = _keys(initialVal);\r\n const diff = _difference(\r\n currentValKeys,\r\n initialValKeys,\r\n );\r\n\r\n for (const diffKey of diff) {\r\n delete currentVal[diffKey];\r\n // TODO: check if diff works in both directions. What if prop exists in initialVal but was removed in currentVal?\r\n }\r\n\r\n _mergeWith(currentVal, initialVal);\r\n }\r\n\r\n const stepRules = rules.application[\r\n currentStepIdApplicationRulesKey\r\n ] as (formStep: {\r\n model: typeof currentFormStepModel;\r\n formModel: ApplicationForm;\r\n }) => void;\r\n\r\n // run step rules\r\n stepRules({\r\n model: currentFormStepModel,\r\n formModel: currentForm,\r\n });\r\n\r\n _mergeWith(\r\n currentForm[currentStepIdFormKey],\r\n currentConfig[currentStepIdFormKey],\r\n (model, config) => {\r\n // set value to default value for disabled fields\r\n if (\r\n model instanceof FormFieldWithOptions &&\r\n config instanceof FormFieldWithOptions &&\r\n model.disabled\r\n ) {\r\n model.value = config.value;\r\n }\r\n\r\n return model;\r\n },\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private createModel() {\r\n return this.createClone(formsConfig);\r\n }\r\n\r\n private createClone(cloneSource: Forms): Forms {\r\n return Vue.observable(_cloneDeep(cloneSource));\r\n }\r\n}\r\n\r\nexport const modelService = new ModelService();\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = (0, _common.regex)('alpha', /^[a-zA-Z]*$/);\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(validator) {\n return (0, _common.withParams)({\n type: 'not'\n }, function (value, vm) {\n return !(0, _common.req)(value) || !validator.call(this, value, vm);\n });\n};\n\nexports.default = _default;","import { ValidationRule, helpers } from 'vuelidate/lib/validators';\r\n\r\nexport const float = ((value: string | number): boolean => {\r\n return (\r\n !helpers.req(value) ||\r\n typeof value === 'number' ||\r\n /^-?\\d{1,3}(?:\\.\\d{3})*(?:,\\d{0,2})?$/.test(value)\r\n );\r\n}) as ValidationRule;\r\n","import { defaults as _defaults } from 'lodash';\r\nimport {\r\n FormFieldWithOptions,\r\n FormFieldWithOptionsConfig,\r\n formFieldWithOptionsDefaultConfig,\r\n} from './formFieldWithOptions';\r\n\r\nexport const selectFieldDefaultConfig = {\r\n ...formFieldWithOptionsDefaultConfig,\r\n};\r\n\r\nexport class SelectField extends FormFieldWithOptions<\r\n TOptionKey,\r\n TOptionKey\r\n> {\r\n public constructor(\r\n config: FormFieldWithOptionsConfig,\r\n ) {\r\n const resolvedConfig = _defaults(\r\n config ||\r\n ({} as FormFieldWithOptionsConfig),\r\n selectFieldDefaultConfig,\r\n );\r\n\r\n super(resolvedConfig);\r\n }\r\n\r\n public static preselectExactlyOneOption(\r\n select: SelectField,\r\n optionKey: TOptionKey,\r\n ): void {\r\n for (const option of select.options) {\r\n option.disabled = true;\r\n }\r\n const optionToPreselect = select.options.find(\r\n (option) => option.key === optionKey,\r\n );\r\n if (optionToPreselect) {\r\n optionToPreselect.disabled = false;\r\n }\r\n select.value = optionKey;\r\n }\r\n}\r\n","import { JSONSchema7Definition } from 'json-schema';\r\nimport { defaults as _defaults } from 'lodash';\r\nimport {\r\n FormFieldConfig,\r\n formFieldDefaultConfig,\r\n FormField,\r\n} from './formField';\r\n\r\nexport interface CheckboxFieldConfig extends FormFieldConfig {\r\n value?: boolean;\r\n}\r\n\r\nexport const checkboxFieldDefaultConfig = {\r\n ...formFieldDefaultConfig,\r\n};\r\n\r\nexport class CheckboxField extends FormField {\r\n public constructor(config?: CheckboxFieldConfig) {\r\n const resolvedConfig = _defaults(\r\n config || ({} as CheckboxFieldConfig),\r\n checkboxFieldDefaultConfig,\r\n );\r\n\r\n super(resolvedConfig);\r\n }\r\n\r\n public getJsonSchema(): JSONSchema7Definition {\r\n return {\r\n type: 'boolean',\r\n };\r\n }\r\n}\r\n","import { defaults as _defaults } from 'lodash';\r\n\r\nexport interface FormOptionConfig {\r\n disabled?: boolean;\r\n key: TKey;\r\n}\r\n\r\nexport const formOptionDefaultConfig = {\r\n disabled: false,\r\n};\r\n\r\nexport class FormOption {\r\n public disabled: boolean;\r\n public key: TKey;\r\n\r\n public constructor(config: FormOptionConfig) {\r\n const resolvedConfig = _defaults(\r\n config || ({} as FormOptionConfig),\r\n formOptionDefaultConfig,\r\n );\r\n this.disabled = resolvedConfig.disabled;\r\n this.key = resolvedConfig.key;\r\n }\r\n}\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar urlRegex = /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i;\n\nvar _default = (0, _common.regex)('url', urlRegex);\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"withParams\", {\n enumerable: true,\n get: function get() {\n return _withParams.default;\n }\n});\nexports.regex = exports.ref = exports.len = exports.req = void 0;\n\nvar _withParams = _interopRequireDefault(require(\"../withParams\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar req = function req(value) {\n if (Array.isArray(value)) return !!value.length;\n\n if (value === undefined || value === null) {\n return false;\n }\n\n if (value === false) {\n return true;\n }\n\n if (value instanceof Date) {\n return !isNaN(value.getTime());\n }\n\n if (_typeof(value) === 'object') {\n for (var _ in value) {\n return true;\n }\n\n return false;\n }\n\n return !!String(value).length;\n};\n\nexports.req = req;\n\nvar len = function len(value) {\n if (Array.isArray(value)) return value.length;\n\n if (_typeof(value) === 'object') {\n return Object.keys(value).length;\n }\n\n return String(value).length;\n};\n\nexports.len = len;\n\nvar ref = function ref(reference, vm, parentVm) {\n return typeof reference === 'function' ? reference.call(vm, parentVm) : parentVm[reference];\n};\n\nexports.ref = ref;\n\nvar regex = function regex(type, expr) {\n return (0, _withParams.default)({\n type: type\n }, function (value) {\n return !req(value) || expr.test(value);\n });\n};\n\nexports.regex = regex;","import {\r\n FormFieldWithOptions,\r\n FormFieldWithOptionsConfig,\r\n} from './formFieldWithOptions';\r\n\r\nexport class CheckboxesField extends FormFieldWithOptions<\r\n TOptionKey[],\r\n TOptionKey\r\n> {\r\n constructor(config: FormFieldWithOptionsConfig) {\r\n super(config);\r\n\r\n this.valueIsArrayType = true;\r\n }\r\n}\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar withParams = process.env.BUILD === 'web' ? require('./withParamsBrowser').withParams : require('./params').withParams;\nvar _default = withParams;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default() {\n var separator = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ':';\n return (0, _common.withParams)({\n type: 'macAddress'\n }, function (value) {\n if (!(0, _common.req)(value)) {\n return true;\n }\n\n if (typeof value !== 'string') {\n return false;\n }\n\n var parts = typeof separator === 'string' && separator !== '' ? value.split(separator) : value.length === 12 || value.length === 16 ? value.match(/.{2}/g) : null;\n return parts !== null && (parts.length === 6 || parts.length === 8) && parts.every(hexValid);\n });\n};\n\nexports.default = _default;\n\nvar hexValid = function hexValid(hex) {\n return hex.toLowerCase().match(/^[0-9a-f]{2}$/);\n};","import { parseGermanFloat } from '@/utilities/germanFormats';\r\nimport { helpers, ValidationRule } from 'vuelidate/lib/validators';\r\nimport { float } from './float';\r\n\r\nexport const positive = ((value: string | number | Date): boolean => {\r\n if (!helpers.req(value) || !float(value)) {\r\n return true;\r\n }\r\n\r\n const numericValue =\r\n typeof value === 'string' ? parseGermanFloat(value) : +value;\r\n\r\n return numericValue >= 0;\r\n}) as ValidationRule;\r\n","import { PhotovoltaicFormGroup } from '../formGroups/plantPerformance/photovoltaic/photovoltaicFormGroup';\r\nimport { StorageFormGroup } from '../formGroups/plantPerformance/storage/storageFormGroup';\r\nimport { FormStep } from '../formStep';\r\nimport { WithOptional } from '../utility';\r\nimport { GeneratorFormGroup } from '../formGroups/plantPerformance/generator/generatorFormGroup';\r\nimport { CheckboxField } from '../fields/checkboxField';\r\nimport { InverterFormGroup } from '../formGroups/plantPerformance/inverter/inverterFormGroup';\r\nimport { FormElement } from '../formElement';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport type PhasePosition = 'l1' | 'l2' | 'l3';\r\n\r\nexport class PlantPerformanceFormStep extends FormStep {\r\n public readonly photovoltaic: PhotovoltaicFormGroup;\r\n public readonly inverter: InverterFormGroup;\r\n public readonly inverterStorage: InverterFormGroup;\r\n public readonly storage: StorageFormGroup;\r\n public readonly generator: GeneratorFormGroup;\r\n public readonly certificateHint: CheckboxField;\r\n public readonly overallNominalPowerNotMatchingTotalPlantPerformanceValueTypeWarning: FormElement;\r\n public readonly storageHasSeparateInverter: CheckboxField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.photovoltaic = config.photovoltaic;\r\n this.inverter = config.inverter;\r\n this.inverterStorage = config.inverterStorage;\r\n this.storage = config.storage;\r\n this.generator = config.generator;\r\n this.certificateHint = config.certificateHint;\r\n this.overallNominalPowerNotMatchingTotalPlantPerformanceValueTypeWarning =\r\n config.overallNominalPowerNotMatchingTotalPlantPerformanceValueTypeWarning;\r\n this.storageHasSeparateInverter = config.storageHasSeparateInverter;\r\n }\r\n}\r\n","import { FormField } from '../../../fields/formField';\r\nimport { FormElementConfig } from '../../../formElement';\r\nimport { FormGroup } from '../../../formGroup';\r\nimport { QuantityAndNominalPowerFormGroup } from './quantityAndNominalPowerFormGroup';\r\nimport { ReferenceFormGroup } from '../../referenceFormGroup';\r\n\r\nexport type PhotovoltaicModuleFormGroupConfig = FormElementConfig &\r\n Omit;\r\n\r\nexport class PhotovoltaicModuleFormGroup extends ReferenceFormGroup {\r\n public readonly pvQuantityAndNominalPower: QuantityAndNominalPowerFormGroup;\r\n public readonly pvTotalNominalPower: FormField;\r\n\r\n public constructor(config: PhotovoltaicModuleFormGroupConfig) {\r\n super(config);\r\n\r\n this.pvQuantityAndNominalPower = config.pvQuantityAndNominalPower;\r\n this.pvTotalNominalPower = config.pvTotalNominalPower;\r\n }\r\n}\r\n","import { CountField } from '../../../fields/countField';\r\nimport { TextField } from '../../../fields/textField';\r\nimport { FormGroup } from '../../../formGroup';\r\nimport { WithOptional } from '../../../utility';\r\n\r\ntype ConfigProps = WithOptional<\r\n QuantityAndNominalPowerFormGroup,\r\n keyof FormGroup\r\n>;\r\n\r\nexport class QuantityAndNominalPowerFormGroup extends FormGroup {\r\n public readonly quantity: CountField;\r\n public readonly nominalPower: TextField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.quantity = config.quantity;\r\n this.nominalPower = config.nominalPower;\r\n }\r\n}\r\n","import { PhotovoltaicModuleFormList } from './photovoltaicModuleFormList';\r\nimport { FormGroup } from '../../../formGroup';\r\nimport { FormField } from '../../../fields/formField';\r\nimport { FormElement } from '../../../formElement';\r\nimport { WithOptional } from '../../../utility';\r\nimport { alwaysInDtoAttribute } from '@/types/forms/alwaysinDtoAttribute';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class PhotovoltaicFormGroup extends FormGroup {\r\n public readonly pvHeadline: FormElement;\r\n public readonly pvModules: PhotovoltaicModuleFormList;\r\n @alwaysInDtoAttribute()\r\n public readonly pvOverallNominalPower: FormField;\r\n public readonly pvTotalPower30: FormElement;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.pvHeadline = config.pvHeadline;\r\n this.pvModules = config.pvModules;\r\n this.pvOverallNominalPower = config.pvOverallNominalPower;\r\n this.pvTotalPower30 = config.pvTotalPower30;\r\n }\r\n}\r\n","export const restrictedApparentPower = 0.8;\r\nexport const restrictedNominalPower = 2.0;\r\n","import { lte } from '@/services/floatComparison';\r\nimport { modelService } from '@/services/form/modelService';\r\nimport {\r\n isPluginGeneratingPlant,\r\n isPv,\r\n} from '@/services/form/rules/application/common';\r\nimport {\r\n formatGermanNumber,\r\n parseGermanFloat,\r\n} from '@/utilities/germanFormats';\r\nimport { helpers, ValidationRule } from 'vuelidate/lib/validators';\r\n\r\nexport const maxNominalPowerPlugInGeneratingPlant = (\r\n max: number,\r\n): ValidationRule => {\r\n return helpers.withParams(\r\n {\r\n type: 'maxNominalPowerPlugInGeneratingPlant',\r\n max: formatGermanNumber(max, { decimals: 2 }),\r\n },\r\n (value: string) => {\r\n const application = modelService.model.application;\r\n const parsedValue =\r\n (typeof value == 'number' ? value : parseGermanFloat(value)) /\r\n 1000;\r\n return (\r\n !isPluginGeneratingPlant(application) ||\r\n !isPv(application) ||\r\n lte(parsedValue, max)\r\n );\r\n },\r\n );\r\n};\r\n","import { CountField } from '@/types/forms/fields/countField';\r\nimport { FormList } from '@/types/forms/fields/formList';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { PhotovoltaicModuleFormGroup } from '@/types/forms/formGroups/plantPerformance/photovoltaic/photovoltaicModuleFormGroup';\r\nimport { QuantityAndNominalPowerFormGroup } from '@/types/forms/formGroups/plantPerformance/photovoltaic/quantityAndNominalPowerFormGroup';\r\nimport { required } from 'vuelidate/lib/validators';\r\nimport { float } from '@/validators/float';\r\nimport { positive } from '@/validators/positive';\r\nimport { FormField } from '@/types/forms/fields/formField';\r\nimport { PhotovoltaicFormGroup } from '@/types/forms/formGroups/plantPerformance/photovoltaic/photovoltaicFormGroup';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { restrictedNominalPower } from './boundaryValues';\r\nimport { maxNominalPowerPlugInGeneratingPlant } from '@/validators/maxNominalPowerPlugInGeneratingPlant';\r\nimport { alwaysFalse } from '@/validators/alwaysFalse';\r\n\r\nexport const photovoltaicFormGroup = new PhotovoltaicFormGroup({\r\n pvHeadline: new FormElement(),\r\n pvModules: new FormList(PhotovoltaicModuleFormGroup, {\r\n initializeItems: 1,\r\n minItemCount: 1,\r\n maxItemCount: 2,\r\n id: new FormField(),\r\n pvQuantityAndNominalPower: new QuantityAndNominalPowerFormGroup({\r\n quantity: new CountField({\r\n value: 1,\r\n min: 1,\r\n validators: {\r\n required,\r\n },\r\n }),\r\n nominalPower: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n }),\r\n pvTotalNominalPower: new FormField({\r\n value: 0,\r\n validators: {\r\n maxNominalPowerPlugInGeneratingPlant: maxNominalPowerPlugInGeneratingPlant(\r\n restrictedNominalPower,\r\n ),\r\n },\r\n }),\r\n }),\r\n pvOverallNominalPower: new FormField({\r\n value: 0,\r\n }),\r\n pvTotalPower30: new FormElement({\r\n validators: {\r\n alwaysFalse,\r\n },\r\n }),\r\n});\r\n","import { CountField } from '../../../fields/countField';\r\nimport { FormField } from '../../../fields/formField';\r\nimport { FormElement, FormElementConfig } from '../../../formElement';\r\nimport { FormGroup } from '../../../formGroup';\r\nimport { ManufacturerAndStorageTypeFormGroup } from './manufacturerAndStorageTypeFormGroup';\r\nimport { DischargePowerAndStorageCapacityFormGroup } from './dischargePowerAndStorageCapacityFormGroup';\r\nimport { ReferenceFormGroup } from '../../referenceFormGroup';\r\n\r\nexport type StorageModuleFormGroupConfig = FormElementConfig &\r\n Omit;\r\n\r\nexport class StorageModuleFormGroup extends ReferenceFormGroup {\r\n public readonly storageManufacturerAndStorageType: ManufacturerAndStorageTypeFormGroup;\r\n public readonly storageQuantity: CountField;\r\n public readonly storageMemoryExpansion: FormElement;\r\n public readonly storageDischargePowerAndStorageCapacity: DischargePowerAndStorageCapacityFormGroup;\r\n public readonly storageTotalDischargePower: FormField;\r\n public readonly storageTotalStorageCapacity: FormField;\r\n\r\n public constructor(config: StorageModuleFormGroupConfig) {\r\n super(config);\r\n\r\n this.storageManufacturerAndStorageType =\r\n config.storageManufacturerAndStorageType;\r\n this.storageMemoryExpansion = config.storageMemoryExpansion;\r\n this.storageQuantity = config.storageQuantity;\r\n this.storageDischargePowerAndStorageCapacity =\r\n config.storageDischargePowerAndStorageCapacity;\r\n this.storageTotalDischargePower = config.storageTotalDischargePower;\r\n this.storageTotalStorageCapacity = config.storageTotalStorageCapacity;\r\n }\r\n}\r\n","import { alwaysInDtoAttribute } from '@/types/forms/alwaysinDtoAttribute';\r\nimport { FormField } from '../../../fields/formField';\r\nimport { FormElement } from '../../../formElement';\r\nimport { FormGroup } from '../../../formGroup';\r\nimport { WithOptional } from '../../../utility';\r\nimport { StorageModuleFormList } from './storageModuleFormList';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class StorageFormGroup extends FormGroup {\r\n public readonly storageHeadline: FormElement;\r\n public readonly storageModules: StorageModuleFormList;\r\n @alwaysInDtoAttribute()\r\n public readonly storageOverallDischargePower: FormField;\r\n @alwaysInDtoAttribute()\r\n public readonly storageOverallStorageCapacity: FormField;\r\n public readonly storageTotalPower30: FormElement;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.storageHeadline = config.storageHeadline;\r\n this.storageModules = config.storageModules;\r\n this.storageOverallDischargePower = config.storageOverallDischargePower;\r\n this.storageOverallStorageCapacity =\r\n config.storageOverallStorageCapacity;\r\n this.storageTotalPower30 = config.storageTotalPower30;\r\n }\r\n}\r\n","import { TextField } from '../../../fields/textField';\r\nimport { FormGroup } from '../../../formGroup';\r\nimport { WithOptional } from '../../../utility';\r\n\r\ntype ConfigProps = WithOptional<\r\n ManufacturerAndStorageTypeFormGroup,\r\n keyof FormGroup\r\n>;\r\n\r\nexport class ManufacturerAndStorageTypeFormGroup extends FormGroup {\r\n public readonly manufacturer: TextField;\r\n public readonly storageType: TextField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.manufacturer = config.manufacturer;\r\n this.storageType = config.storageType;\r\n }\r\n}\r\n","import { TextField } from '../../../fields/textField';\r\nimport { FormGroup } from '../../../formGroup';\r\nimport { WithOptional } from '../../../utility';\r\n\r\ntype ConfigProps = WithOptional<\r\n DischargePowerAndStorageCapacityFormGroup,\r\n keyof FormGroup\r\n>;\r\n\r\nexport class DischargePowerAndStorageCapacityFormGroup extends FormGroup {\r\n public readonly dischargePower: TextField;\r\n public readonly storageCapacity: TextField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.dischargePower = config.dischargePower;\r\n this.storageCapacity = config.storageCapacity;\r\n }\r\n}\r\n","import { CountField } from '@/types/forms/fields/countField';\r\nimport { FormList } from '@/types/forms/fields/formList';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { required } from 'vuelidate/lib/validators';\r\nimport { float } from '@/validators/float';\r\nimport { positive } from '@/validators/positive';\r\nimport { FormField } from '@/types/forms/fields/formField';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { StorageModuleFormGroup } from '@/types/forms/formGroups/plantPerformance/storage/storageModuleFormGroup';\r\nimport { StorageFormGroup } from '@/types/forms/formGroups/plantPerformance/storage/storageFormGroup';\r\nimport { ManufacturerAndStorageTypeFormGroup } from '@/types/forms/formGroups/plantPerformance/storage/manufacturerAndStorageTypeFormGroup';\r\nimport { DischargePowerAndStorageCapacityFormGroup } from '@/types/forms/formGroups/plantPerformance/storage/dischargePowerAndStorageCapacityFormGroup';\r\nimport { alwaysFalse } from '@/validators/alwaysFalse';\r\n\r\nexport const storageFormGroup = new StorageFormGroup({\r\n storageHeadline: new FormElement(),\r\n storageModules: new FormList(StorageModuleFormGroup, {\r\n initializeItems: 1,\r\n minItemCount: 1,\r\n maxItemCount: 5,\r\n id: new FormField(),\r\n storageManufacturerAndStorageType: new ManufacturerAndStorageTypeFormGroup(\r\n {\r\n manufacturer: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n storageType: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n },\r\n ),\r\n storageQuantity: new CountField({\r\n value: 1,\r\n min: 1,\r\n validators: {\r\n required,\r\n },\r\n }),\r\n storageMemoryExpansion: new FormElement(),\r\n storageDischargePowerAndStorageCapacity: new DischargePowerAndStorageCapacityFormGroup(\r\n {\r\n dischargePower: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n storageCapacity: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n },\r\n ),\r\n storageTotalDischargePower: new FormField({\r\n value: 0,\r\n }),\r\n storageTotalStorageCapacity: new FormField({\r\n value: 0,\r\n }),\r\n }),\r\n storageOverallDischargePower: new FormField({\r\n value: 0,\r\n }),\r\n storageOverallStorageCapacity: new FormField({\r\n value: 0,\r\n }),\r\n storageTotalPower30: new FormElement({\r\n validators: {\r\n alwaysFalse,\r\n },\r\n }),\r\n});\r\n","import { TextField } from '../../fields/textField';\r\nimport { FormGroup } from '../../formGroup';\r\nimport { WithOptional } from '../../utility';\r\n\r\ntype ConfigProps = WithOptional<\r\n ActivePowerAndApparentPowerFormGroup,\r\n keyof FormGroup\r\n>;\r\n\r\nexport class ActivePowerAndApparentPowerFormGroup extends FormGroup {\r\n public readonly activePower: TextField;\r\n public readonly apparentPower: TextField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.activePower = config.activePower;\r\n this.apparentPower = config.apparentPower;\r\n }\r\n}\r\n","import { FormField } from '@/types/forms/fields/formField';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { FormGroup } from '@/types/forms/formGroup';\r\nimport { WithOptional } from '@/types/forms/utility';\r\nimport { GeneratorModuleFormList } from './generatorModuleFormList';\r\nimport { alwaysInDtoAttribute } from '@/types/forms/alwaysinDtoAttribute';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class GeneratorFormGroup extends FormGroup {\r\n public readonly generatorHeadline: FormElement;\r\n public readonly generatorModules: GeneratorModuleFormList;\r\n @alwaysInDtoAttribute()\r\n public readonly generatorOverallActivePower: FormField;\r\n @alwaysInDtoAttribute()\r\n public readonly generatorOverallApparentPower: FormField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.generatorHeadline = config.generatorHeadline;\r\n this.generatorModules = config.generatorModules;\r\n this.generatorOverallActivePower = config.generatorOverallActivePower;\r\n this.generatorOverallApparentPower =\r\n config.generatorOverallApparentPower;\r\n }\r\n}\r\n","import { FormField } from '@/types/forms/fields/formField';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { FormElement, FormElementConfig } from '@/types/forms/formElement';\r\nimport { FormGroup } from '@/types/forms/formGroup';\r\nimport { ActivePowerAndApparentPowerFormGroup } from '../activePowerAndApparentPowerFormGroup';\r\nimport { ManufacturerAndModuleTypeFormGroup } from '../manufacturerAndModuleTypeFormGroup';\r\nimport { QuantityAndGeneratorTypeFormGroup } from '../quantityAndGeneratorTypeFormGroup';\r\nimport { ReferenceFormGroup } from '../../referenceFormGroup';\r\n\r\nexport type GeneratorModuleFormGroupConfig = FormElementConfig &\r\n Omit;\r\n\r\nexport class GeneratorModuleFormGroup extends ReferenceFormGroup {\r\n public readonly generatorManufacturerAndModuleType: ManufacturerAndModuleTypeFormGroup;\r\n public readonly generatorQuantityAndGeneratorType: QuantityAndGeneratorTypeFormGroup;\r\n public readonly generatorContributionSymmetricalShortCircuitCurrent: TextField;\r\n public readonly generatorVoltageSymmetricalShortCircuitCurrent: TextField;\r\n public readonly generatorContributionSustainedShortCircuitCurrent: TextField;\r\n public readonly generatorVoltageSustainedShortCircuitCurrent: TextField;\r\n public readonly generatorActivePowerAndApparentPower: ActivePowerAndApparentPowerFormGroup;\r\n public readonly generatorTotalActivePowerIsGreaterThanTotalApparentPowerWarning: FormElement;\r\n public readonly generatorTotalActivePower: FormField;\r\n public readonly generatorTotalApparentPower: FormField;\r\n\r\n constructor(config: GeneratorModuleFormGroupConfig) {\r\n super(config);\r\n\r\n this.generatorManufacturerAndModuleType =\r\n config.generatorManufacturerAndModuleType;\r\n this.generatorQuantityAndGeneratorType =\r\n config.generatorQuantityAndGeneratorType;\r\n this.generatorContributionSymmetricalShortCircuitCurrent =\r\n config.generatorContributionSymmetricalShortCircuitCurrent;\r\n this.generatorVoltageSymmetricalShortCircuitCurrent =\r\n config.generatorVoltageSymmetricalShortCircuitCurrent;\r\n this.generatorContributionSustainedShortCircuitCurrent =\r\n config.generatorContributionSustainedShortCircuitCurrent;\r\n this.generatorVoltageSustainedShortCircuitCurrent =\r\n config.generatorVoltageSustainedShortCircuitCurrent;\r\n this.generatorActivePowerAndApparentPower =\r\n config.generatorActivePowerAndApparentPower;\r\n this.generatorTotalActivePowerIsGreaterThanTotalApparentPowerWarning =\r\n config.generatorTotalActivePowerIsGreaterThanTotalApparentPowerWarning;\r\n this.generatorTotalActivePower = config.generatorTotalActivePower;\r\n this.generatorTotalApparentPower = config.generatorTotalApparentPower;\r\n }\r\n}\r\n","import { CountField } from '@/types/forms/fields/countField';\r\nimport { SelectField } from '@/types/forms/fields/selectField';\r\nimport { FormGroup } from '@/types/forms/formGroup';\r\nimport { GeneratorTypeFieldType } from '@/types/forms/shared/generatorTypeFieldType';\r\nimport { WithOptional } from '@/types/forms/utility';\r\n\r\ntype ConfigProps = WithOptional<\r\n QuantityAndGeneratorTypeFormGroup,\r\n keyof FormGroup\r\n>;\r\n\r\nexport class QuantityAndGeneratorTypeFormGroup extends FormGroup {\r\n public readonly quantity: CountField;\r\n public readonly generatorType: SelectField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.quantity = config.quantity;\r\n this.generatorType = config.generatorType;\r\n }\r\n}\r\n","import { TextField } from '../../fields/textField';\r\nimport { FormGroup } from '../../formGroup';\r\nimport { WithOptional } from '../../utility';\r\n\r\ntype ConfigProps = WithOptional<\r\n ManufacturerAndModuleTypeFormGroup,\r\n keyof FormGroup\r\n>;\r\n\r\nexport class ManufacturerAndModuleTypeFormGroup extends FormGroup {\r\n public readonly manufacturer: TextField;\r\n public readonly moduleType: TextField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.manufacturer = config.manufacturer;\r\n this.moduleType = config.moduleType;\r\n }\r\n}\r\n","import { lte } from '@/services/floatComparison';\r\nimport { modelService } from '@/services/form/modelService';\r\nimport { isPluginGeneratingPlant } from '@/services/form/rules/application/common';\r\nimport {\r\n formatGermanNumber,\r\n parseGermanFloat,\r\n} from '@/utilities/germanFormats';\r\nimport { helpers, ValidationRule } from 'vuelidate/lib/validators';\r\n\r\nexport const maxApparentPowerPlugInGeneratingPlant = (\r\n max: number,\r\n): ValidationRule => {\r\n return helpers.withParams(\r\n {\r\n type: 'maxApparentPowerPlugInGeneratingPlant',\r\n max: formatGermanNumber(max, { decimals: 2 }),\r\n },\r\n (value: string) => {\r\n const application = modelService.model.application;\r\n const parsedValue =\r\n typeof value == 'number' ? value : parseGermanFloat(value);\r\n return (\r\n !isPluginGeneratingPlant(application) || lte(parsedValue, max)\r\n );\r\n },\r\n );\r\n};\r\n","import { CountField } from '@/types/forms/fields/countField';\r\nimport { FormField } from '@/types/forms/fields/formField';\r\nimport { FormList } from '@/types/forms/fields/formList';\r\nimport { SelectField } from '@/types/forms/fields/selectField';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { ActivePowerAndApparentPowerFormGroup } from '@/types/forms/formGroups/plantPerformance/activePowerAndApparentPowerFormGroup';\r\nimport { GeneratorFormGroup } from '@/types/forms/formGroups/plantPerformance/generator/generatorFormGroup';\r\nimport { GeneratorModuleFormGroup } from '@/types/forms/formGroups/plantPerformance/generator/generatorModuleFormGroup';\r\nimport { QuantityAndGeneratorTypeFormGroup } from '@/types/forms/formGroups/plantPerformance/quantityAndGeneratorTypeFormGroup';\r\nimport { ManufacturerAndModuleTypeFormGroup } from '@/types/forms/formGroups/plantPerformance/manufacturerAndModuleTypeFormGroup';\r\nimport { FormOption } from '@/types/forms/formOption';\r\nimport { float } from '@/validators/float';\r\nimport { maxApparentPowerPlugInGeneratingPlant } from '@/validators/maxApparentPowerPlugInGeneratingPlant';\r\nimport { positive } from '@/validators/positive';\r\nimport { required } from 'vuelidate/lib/validators';\r\nimport { restrictedApparentPower } from './boundaryValues';\r\nimport { alwaysFalse } from '@/validators/alwaysFalse';\r\n\r\nexport const generatorFormGroup = new GeneratorFormGroup({\r\n generatorHeadline: new FormElement(),\r\n generatorModules: new FormList(GeneratorModuleFormGroup, {\r\n initializeItems: 1,\r\n minItemCount: 1,\r\n maxItemCount: 5,\r\n id: new FormField(),\r\n generatorManufacturerAndModuleType: new ManufacturerAndModuleTypeFormGroup(\r\n {\r\n manufacturer: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n moduleType: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n },\r\n ),\r\n generatorQuantityAndGeneratorType: new QuantityAndGeneratorTypeFormGroup(\r\n {\r\n quantity: new CountField({\r\n value: 1,\r\n min: 1,\r\n validators: {\r\n required,\r\n },\r\n }),\r\n generatorType: new SelectField({\r\n options: [\r\n new FormOption({ key: 'type1' }),\r\n new FormOption({ key: 'type2' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n },\r\n ),\r\n generatorContributionSymmetricalShortCircuitCurrent: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n generatorVoltageSymmetricalShortCircuitCurrent: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n generatorContributionSustainedShortCircuitCurrent: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n generatorVoltageSustainedShortCircuitCurrent: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n generatorActivePowerAndApparentPower: new ActivePowerAndApparentPowerFormGroup(\r\n {\r\n activePower: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n apparentPower: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n maxApparentPowerPlugInGeneratingPlant: maxApparentPowerPlugInGeneratingPlant(\r\n restrictedApparentPower,\r\n ),\r\n },\r\n }),\r\n },\r\n ),\r\n generatorTotalActivePowerIsGreaterThanTotalApparentPowerWarning: new FormElement(\r\n {\r\n validators: {\r\n alwaysFalse,\r\n },\r\n },\r\n ),\r\n generatorTotalActivePower: new FormField({\r\n value: 0,\r\n }),\r\n generatorTotalApparentPower: new FormField({\r\n value: 0,\r\n }),\r\n }),\r\n generatorOverallActivePower: new FormField({\r\n value: 0,\r\n }),\r\n generatorOverallApparentPower: new FormField({\r\n value: 0,\r\n }),\r\n});\r\n","import { InverterModuleFormList } from './inverterModuleFormList';\r\nimport { FormGroup } from '../../../formGroup';\r\nimport { FormField } from '../../../fields/formField';\r\nimport { FormElement } from '../../../formElement';\r\nimport { WithOptional } from '../../../utility';\r\nimport { alwaysInDtoAttribute } from '@/types/forms/alwaysinDtoAttribute';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class InverterFormGroup extends FormGroup {\r\n public readonly inverterHeadline: FormElement;\r\n public readonly inverterModules: InverterModuleFormList;\r\n @alwaysInDtoAttribute()\r\n public readonly inverterOverallActivePower: FormField;\r\n public readonly inverterOverallActivePowerWarning: FormElement;\r\n @alwaysInDtoAttribute()\r\n public readonly inverterOverallApparentPower: FormField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.inverterHeadline = config.inverterHeadline;\r\n this.inverterModules = config.inverterModules;\r\n this.inverterOverallActivePower = config.inverterOverallActivePower;\r\n this.inverterOverallActivePowerWarning =\r\n config.inverterOverallActivePowerWarning;\r\n this.inverterOverallApparentPower = config.inverterOverallApparentPower;\r\n }\r\n}\r\n","import { CountField } from '../../../fields/countField';\r\nimport { FormField } from '../../../fields/formField';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { FormElementConfig } from '../../../formElement';\r\nimport { FormGroup } from '../../../formGroup';\r\nimport { ManufacturerAndModuleTypeFormGroup } from '../manufacturerAndModuleTypeFormGroup';\r\nimport { ActivePowerAndApparentPowerFormGroup } from '../activePowerAndApparentPowerFormGroup';\r\nimport { ReferenceFormGroup } from '../../referenceFormGroup';\r\n\r\nexport type InverterModuleFormGroupConfig = FormElementConfig &\r\n Omit;\r\n\r\nexport class InverterModuleFormGroup extends ReferenceFormGroup {\r\n public readonly inverterManufacturerAndModuleType: ManufacturerAndModuleTypeFormGroup;\r\n public readonly inverterQuantity: CountField;\r\n public readonly inverterContributionSymmetricalShortCircuitCurrent: TextField;\r\n public readonly inverterVoltageSymmetricalShortCircuitCurrent: TextField;\r\n public readonly inverterContributionSustainedShortCircuitCurrent: TextField;\r\n public readonly inverterVoltageSustainedShortCircuitCurrent: TextField;\r\n public readonly inverterActivePowerAndApparentPower: ActivePowerAndApparentPowerFormGroup;\r\n public readonly inverterTotalActivePower: FormField;\r\n public readonly inverterTotalApparentPower: FormField;\r\n\r\n public constructor(config: InverterModuleFormGroupConfig) {\r\n super(config);\r\n\r\n this.inverterManufacturerAndModuleType =\r\n config.inverterManufacturerAndModuleType;\r\n this.inverterQuantity = config.inverterQuantity;\r\n this.inverterContributionSymmetricalShortCircuitCurrent =\r\n config.inverterContributionSymmetricalShortCircuitCurrent;\r\n this.inverterVoltageSymmetricalShortCircuitCurrent =\r\n config.inverterVoltageSymmetricalShortCircuitCurrent;\r\n this.inverterContributionSustainedShortCircuitCurrent =\r\n config.inverterContributionSustainedShortCircuitCurrent;\r\n this.inverterVoltageSustainedShortCircuitCurrent =\r\n config.inverterVoltageSustainedShortCircuitCurrent;\r\n this.inverterActivePowerAndApparentPower =\r\n config.inverterActivePowerAndApparentPower;\r\n this.inverterTotalActivePower = config.inverterTotalActivePower;\r\n this.inverterTotalApparentPower = config.inverterTotalApparentPower;\r\n }\r\n}\r\n","import { parseGermanFloat } from '@/utilities/germanFormats';\r\nimport { ValidationRule } from 'vuelidate/lib/validators';\r\n\r\ninterface PowerValue {\r\n apparentPower: string;\r\n}\r\n\r\nexport const apparentPowerMustBeBiggerThanActualPower = ((\r\n value: string,\r\n vm: PowerValue,\r\n): boolean => {\r\n return (\r\n parseGermanFloat(value || '0') <=\r\n parseGermanFloat(vm.apparentPower || '0')\r\n );\r\n}) as ValidationRule;\r\n","import { CountField } from '@/types/forms/fields/countField';\r\nimport { FormList } from '@/types/forms/fields/formList';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { ManufacturerAndModuleTypeFormGroup } from '@/types/forms/formGroups/plantPerformance/manufacturerAndModuleTypeFormGroup';\r\nimport { required } from 'vuelidate/lib/validators';\r\nimport { float } from '@/validators/float';\r\nimport { positive } from '@/validators/positive';\r\nimport { FormField } from '@/types/forms/fields/formField';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { InverterFormGroup } from '@/types/forms/formGroups/plantPerformance/inverter/inverterFormGroup';\r\nimport { InverterModuleFormGroup } from '@/types/forms/formGroups/plantPerformance/inverter/inverterModuleFormGroup';\r\nimport { ActivePowerAndApparentPowerFormGroup } from '@/types/forms/formGroups/plantPerformance/activePowerAndApparentPowerFormGroup';\r\nimport { apparentPowerMustBeBiggerThanActualPower } from '@/validators/apparentPowerMustBeBiggerThanActualPower';\r\nimport { maxApparentPowerPlugInGeneratingPlant } from '@/validators/maxApparentPowerPlugInGeneratingPlant';\r\nimport { restrictedApparentPower } from './boundaryValues';\r\n\r\nexport const inverterFormGroup = new InverterFormGroup({\r\n inverterHeadline: new FormElement(),\r\n inverterModules: new FormList(InverterModuleFormGroup, {\r\n initializeItems: 1,\r\n minItemCount: 1,\r\n maxItemCount: 5,\r\n id: new FormField(),\r\n inverterManufacturerAndModuleType: new ManufacturerAndModuleTypeFormGroup(\r\n {\r\n manufacturer: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n moduleType: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n },\r\n ),\r\n inverterQuantity: new CountField({\r\n value: 1,\r\n min: 1,\r\n validators: {\r\n required,\r\n },\r\n }),\r\n inverterContributionSymmetricalShortCircuitCurrent: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n inverterVoltageSymmetricalShortCircuitCurrent: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n inverterContributionSustainedShortCircuitCurrent: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n inverterVoltageSustainedShortCircuitCurrent: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n inverterActivePowerAndApparentPower: new ActivePowerAndApparentPowerFormGroup(\r\n {\r\n activePower: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n apparentPowerMustBeBiggerThanActualPower,\r\n },\r\n }),\r\n apparentPower: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n },\r\n ),\r\n inverterTotalActivePower: new FormField({\r\n value: 0,\r\n }),\r\n inverterTotalApparentPower: new FormField({\r\n value: 0,\r\n validators: {\r\n maxApparentPowerPlugInGeneratingPlant: maxApparentPowerPlugInGeneratingPlant(\r\n restrictedApparentPower,\r\n ),\r\n },\r\n }),\r\n }),\r\n inverterOverallActivePower: new FormField({\r\n value: 0,\r\n }),\r\n inverterOverallActivePowerWarning: new FormElement(),\r\n inverterOverallApparentPower: new FormField({\r\n value: 0,\r\n }),\r\n});\r\n","import { PlantPerformanceFormStep } from '@/types/forms/formSteps/plantPerformanceFormStep';\r\nimport { photovoltaicFormGroup } from './plantPerformance/photovoltaic';\r\nimport { storageFormGroup } from './plantPerformance/storage';\r\nimport { generatorFormGroup } from './plantPerformance/generator';\r\nimport { CheckboxField } from '@/types/forms/fields/checkboxField';\r\nimport { checked } from '@/validators/checked';\r\nimport { inverterFormGroup } from './plantPerformance/inverter';\r\nimport { alwaysFalse } from '@/validators/alwaysFalse';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { cloneDeep as _cloneDeep } from 'lodash';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { FormField } from '@/types/forms/fields/formField';\r\n\r\nconst minOverallApparentPowerValidator = (\r\n model: PlantPerformanceFormStep,\r\n min: number,\r\n) => {\r\n return (\r\n (typeof model.inverter.inverterOverallApparentPower === 'number' &&\r\n model.inverter.inverterOverallApparentPower > min) ||\r\n (typeof model.generator.generatorOverallApparentPower === 'number' &&\r\n model.generator.generatorOverallApparentPower > min)\r\n );\r\n};\r\n\r\nexport const proofOfConformityValidator = (\r\n model: PlantPerformanceFormStep,\r\n): boolean => minOverallApparentPowerValidator(model, 30);\r\n\r\nconst inverterStorage = _cloneDeep(inverterFormGroup);\r\ninverterStorage.inverterModules.items.forEach((module) => {\r\n module.id = new FormField({ value: String(uuidv4()) });\r\n});\r\n\r\nexport const plantPerformanceFormStep = new PlantPerformanceFormStep({\r\n photovoltaic: photovoltaicFormGroup,\r\n inverter: inverterFormGroup,\r\n inverterStorage,\r\n storage: storageFormGroup,\r\n generator: generatorFormGroup,\r\n certificateHint: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n overallNominalPowerNotMatchingTotalPlantPerformanceValueTypeWarning: new FormElement(\r\n {\r\n validators: {\r\n alwaysFalse,\r\n },\r\n },\r\n ),\r\n storageHasSeparateInverter: new CheckboxField(),\r\n});\r\n","import { PlantPerformanceFormStep } from '@/types/forms/formSteps/plantPerformanceFormStep';\r\nimport { PowerConnectionFormStep } from '@/types/forms/formSteps/powerConnectionFormStep';\r\nimport {\r\n formatGermanNumber,\r\n parseGermanFloat,\r\n} from '@/utilities/germanFormats';\r\nimport { getOverallActivePower } from './plantPerformance';\r\nimport { ApplicationType } from '@/types/forms/specific/applicationForm';\r\n\r\n/**\r\n * Calculates and sets {@link PlantPerformanceFormStep.feedInPower.value}, if applicable\r\n * @param applicationType\r\n * @param plantPerformanceModel\r\n * @param powerConnectionFormStep\r\n */\r\nexport function calculateFeedInPower(\r\n applicationType: ApplicationType | undefined,\r\n plantPerformanceModel: PlantPerformanceFormStep,\r\n powerConnectionFormStep: PowerConnectionFormStep,\r\n): void {\r\n if (\r\n !powerConnectionFormStep.feedInPowerShallBeLimitedByAController\r\n .disabled &&\r\n !powerConnectionFormStep.feedInPowerShallBeLimitedByAController.value\r\n ) {\r\n const overallActivePower =\r\n getOverallActivePower(applicationType, plantPerformanceModel) ?? 0;\r\n\r\n const existingPlantsTotalPower = parseGermanFloat(\r\n !powerConnectionFormStep.existingPlantsTotalPower.disabled\r\n ? powerConnectionFormStep.existingPlantsTotalPower.value ?? '0'\r\n : '0',\r\n );\r\n const repoweringTotalPower = parseGermanFloat(\r\n !powerConnectionFormStep.repoweringTotalPower.disabled\r\n ? powerConnectionFormStep.repoweringTotalPower.value ?? '0'\r\n : '0',\r\n );\r\n powerConnectionFormStep.feedInPower.value = formatGermanNumber(\r\n overallActivePower +\r\n existingPlantsTotalPower -\r\n repoweringTotalPower,\r\n {\r\n decimals: 2,\r\n thousandsSeparator: true,\r\n },\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Retrieves combined active power of new and pre existing plants\r\n * @param applicationType\r\n * @param plantPerformanceModel step containing value(s) for new plant(s)\r\n * @param powerConnectionFormStep step containing value for pre-existing plant(s)\r\n * @returns\r\n */\r\nexport function getOverallActivePowerWithPreExisting(\r\n applicationType: ApplicationType | undefined,\r\n plantPerformanceModel: PlantPerformanceFormStep,\r\n powerConnectionFormStep: PowerConnectionFormStep,\r\n): number {\r\n const overallActivePower =\r\n getOverallActivePower(applicationType, plantPerformanceModel) ?? 0;\r\n\r\n const existingPlantsTotalPower = parseGermanFloat(\r\n !powerConnectionFormStep.existingPlantsTotalPower.disabled\r\n ? powerConnectionFormStep.existingPlantsTotalPower.value ?? '0'\r\n : '0',\r\n );\r\n const repoweringTotalPower = parseGermanFloat(\r\n !powerConnectionFormStep.repoweringTotalPower.disabled\r\n ? powerConnectionFormStep.repoweringTotalPower.value ?? '0'\r\n : '0',\r\n );\r\n\r\n return overallActivePower + existingPlantsTotalPower - repoweringTotalPower;\r\n}\r\n","import Vue from 'vue';\r\nimport Vuelidate from 'vuelidate';\r\nimport { Validation } from 'vuelidate';\r\nimport { RuleDecl } from 'vue/types/options';\r\nimport { ValidationGroups, ValidationProperties } from 'vue/types/vue';\r\nimport { mapValues as _mapValues } from 'lodash';\r\nimport { Form } from '@/types/forms/form';\r\nimport { FormGroup } from '@/types/forms/formGroup';\r\nimport { FormElement, FormElementConfig } from '@/types/forms/formElement';\r\nimport { FormField } from '@/types/forms/fields/formField';\r\nimport { Forms } from '@/types/forms/forms';\r\nimport { FormStep } from '@/types/forms/formStep';\r\nimport { cloneDeep as _cloneDeep } from 'lodash';\r\nimport { FormList } from '@/types/forms/fields/formList';\r\n\r\ntype Validations = { [identifier: string]: Validations | RuleDecl };\r\n\r\n/**\r\n * Walks through FormGroups of this FormStep / FormGroup and returns the validators from the FormElements.\r\n * Recursively calls itself to handle sub-FormGroups.\r\n * @param disabled Needed to recursively disable FormGroups.\r\n */\r\nfunction getFormGroupAndElementValidations(\r\n formGroup: FormGroup,\r\n disabled = false,\r\n): Validations {\r\n const ret = {} as Validations;\r\n for (const prop in formGroup) {\r\n if (Object.prototype.hasOwnProperty.call(formGroup, prop)) {\r\n const formGroupProp = formGroup[prop as keyof FormGroup];\r\n if (formGroupProp instanceof FormList) {\r\n ret[prop] = {};\r\n formGroupProp.items.forEach((item, index) => {\r\n // don't use $each here so items can have different validators\r\n ret[prop][index] = {\r\n ...formGroupProp.validators,\r\n ...getFormGroupAndElementValidations(\r\n item,\r\n disabled || formGroupProp.disabled,\r\n ),\r\n };\r\n });\r\n } else if (formGroupProp instanceof FormGroup) {\r\n ret[prop] = {\r\n ...formGroupProp.validators,\r\n ...getFormGroupAndElementValidations(\r\n formGroupProp,\r\n disabled || formGroupProp.disabled,\r\n ),\r\n };\r\n } else if (formGroupProp instanceof FormElement) {\r\n if (disabled || formGroupProp.disabled) {\r\n ret[prop] = {};\r\n } else {\r\n ret[prop] = formGroupProp.validators;\r\n }\r\n }\r\n }\r\n }\r\n return ret;\r\n}\r\n\r\n/**\r\n * Walks through the form, calls \"getFormGroupAndElementValidations\" for each FormStep to get the validators from the FormElements.\r\n */\r\nfunction getFormValidations(form: Form): Validations {\r\n const ret = {} as Validations;\r\n for (const prop in form) {\r\n if (Object.prototype.hasOwnProperty.call(form, prop)) {\r\n const formProp = form[prop as keyof Form] as unknown;\r\n if (formProp instanceof FormStep) {\r\n ret[prop] = getFormGroupAndElementValidations(\r\n formProp,\r\n formProp.disabled,\r\n );\r\n }\r\n }\r\n }\r\n return ret;\r\n}\r\n\r\n/**\r\n * Main method to get the vuelidate validators for a formsConfig-like object.\r\n */\r\nfunction getValidations(forms: Forms): Validations {\r\n return _mapValues(forms, getFormValidations);\r\n}\r\n\r\ntype Values = { [identifier: string]: Values | unknown };\r\n\r\n/**\r\n * Walks through FormGroups of this FormStep / FormGroup and returns the values from the FormFields.\r\n * Recursively calls itself to handle sub-FormGroups.\r\n */\r\nfunction getFormGroupAndElementValues(formGroup: FormGroup): Values {\r\n const ret = {} as Values;\r\n for (const prop in formGroup) {\r\n if (Object.prototype.hasOwnProperty.call(formGroup, prop)) {\r\n const formGroupProp = formGroup[prop as keyof FormGroup];\r\n\r\n if (formGroupProp instanceof FormElement) {\r\n ret[prop] = getFormElementValues(formGroupProp);\r\n }\r\n }\r\n }\r\n return ret;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/comma-dangle\r\nfunction getFormListValues<\r\n T extends FormElement,\r\n ItemConfig extends FormElementConfig\r\n>(formList: FormList): (Values | unknown)[] {\r\n return formList.items.map((item) => getFormElementValues(item));\r\n}\r\n\r\nfunction getFormElementValues(\r\n formElement: FormElement,\r\n): Values | unknown | (Values | unknown)[] {\r\n if (formElement instanceof FormList) {\r\n return getFormListValues(formElement);\r\n } else if (formElement instanceof FormGroup) {\r\n return getFormGroupAndElementValues(formElement);\r\n } else if (formElement instanceof FormField) {\r\n return formElement.value;\r\n }\r\n}\r\n\r\n/**\r\n * Walks through the form, calls \"getFormGroupAndElementValues\" for each FormStep to get the values from the FormFields.\r\n */\r\nfunction getFormValues(form: Form): Values {\r\n const ret = {} as Values;\r\n for (const prop in form) {\r\n if (Object.prototype.hasOwnProperty.call(form, prop)) {\r\n const formProp = form[prop as keyof Form] as unknown;\r\n if (formProp instanceof FormStep) {\r\n ret[prop] = getFormGroupAndElementValues(formProp);\r\n }\r\n }\r\n }\r\n\r\n return ret;\r\n}\r\n\r\n/**\r\n * Main method to get the vuelidate values for a formsConfig-like object.\r\n */\r\nfunction getValues(forms: Forms): Values {\r\n return _mapValues(forms, getFormValues);\r\n}\r\n\r\nVue.use(Vuelidate);\r\n\r\nexport function getValidationsClone(\r\n cloneSource: Forms,\r\n formReference?: Vue,\r\n): ValidationProperties & ValidationGroups & Validation {\r\n return createFormValidations(_cloneDeep(cloneSource), formReference);\r\n}\r\n\r\nfunction createValidations(\r\n model: TModel,\r\n getValidations: (model: TModel) => Validations,\r\n getValues: (model: TModel) => Values,\r\n formReference?: Vue,\r\n): ValidationProperties & ValidationGroups & Validation {\r\n const extendedValidationComponent = Vue.extend({\r\n data() {\r\n return {\r\n model,\r\n modelValidations: {} as Validations,\r\n };\r\n },\r\n computed: {\r\n formValidations(): Validations {\r\n return getValidations(this.model);\r\n },\r\n values(): Values {\r\n return getValues(this.model);\r\n },\r\n formReference(): Vue | undefined {\r\n return formReference;\r\n },\r\n },\r\n watch: {\r\n async formValidations(): Promise {\r\n await this.$nextTick;\r\n this.$v.$reset();\r\n },\r\n model: {\r\n // watch model instead of use computed property\r\n // so we can react on changes on array properties\r\n handler(newValue: TModel) {\r\n if (newValue != null) {\r\n this.modelValidations = getValidations(newValue);\r\n }\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n },\r\n validations(): RuleDecl {\r\n return {\r\n values: this.modelValidations,\r\n };\r\n },\r\n });\r\n const validationComponent = new extendedValidationComponent();\r\n return validationComponent.$v.values as ValidationProperties &\r\n ValidationGroups &\r\n Validation;\r\n}\r\n\r\nexport function createFormValidations(\r\n model: Forms,\r\n formReference?: Vue,\r\n): ValidationProperties & ValidationGroups & Validation {\r\n return createValidations(model, getValidations, getValues, formReference);\r\n}\r\n\r\nexport function createFormGroupValidations(\r\n model: FormGroup,\r\n): ValidationProperties & ValidationGroups & Validation {\r\n return createValidations(\r\n model,\r\n getFormGroupAndElementValidations,\r\n getFormGroupAndElementValues,\r\n );\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type ValidationsValueType = Validation & ValidationProperties;\r\n\r\nexport type ValidationsCommonType = Validation &\r\n ValidationGroups &\r\n ValidationProperties;\r\n","import { get as _get } from 'lodash';\r\nimport { LocationFormStep } from '@/types/forms/formSteps/locationFormStep';\r\nimport { AddressesApiAvailabilityResult } from '@/types/forms/shared/addressesApi/addressesApiAvailabilityResult';\r\n\r\ninterface LocationVueContainer {\r\n availabilityResult: AddressesApiAvailabilityResult | null;\r\n model: LocationFormStep;\r\n}\r\n\r\n/**\r\n * If there was no issue with availability api and the address isn't available,\r\n * then the user can't proceed unless they switch to cadastral\r\n */\r\nexport function addressRequiredIfNoCadastral(this: Vue): boolean {\r\n const locationVueContainer: LocationVueContainer | undefined | null =\r\n _get(this, '$options.name') == 'LocationForm'\r\n ? this\r\n : _get(\r\n this,\r\n 'formReference.$refs.applicationFormTemplate.$refs.location[0]',\r\n );\r\n\r\n // Container not found, so we prefer to allow the user to pass,\r\n // as the issue lies with the form, not the user\r\n if (!locationVueContainer) {\r\n return true;\r\n }\r\n // User switched to cadastral, ignore availability result\r\n if (\r\n !locationVueContainer.model.proceedWithCadastral.disabled &&\r\n locationVueContainer.model.proceedWithCadastral.value === true\r\n ) {\r\n return true;\r\n }\r\n\r\n // The api returned that the address is unavailable, but user hasn't switched to cadastral.\r\n if (locationVueContainer.model.availabilityResult.value === 'unavailable') {\r\n return false;\r\n }\r\n\r\n // The api wasn't called at all, which isn't allowed\r\n if (locationVueContainer.model.availabilityResult.value === null) {\r\n return false;\r\n }\r\n\r\n // At this point we have one of these cases left:\r\n // - The api returned a bad response, which generally allows the user to just pass,\r\n // as the issue lies with the form, not the user\r\n // - The api returned that the address is available\r\n // - There could have been some other technical problem, in which case we don't block the form.\r\n return true;\r\n}\r\n","import { Form } from './form';\r\n\r\n/**\r\n * Adds iterable getter-only property.\r\n * @param fn getter function\r\n */\r\nexport function enumerableGetterAttribute(fn: (target: T) => unknown) {\r\n return (target: T, propertyKey: keyof T): void => {\r\n function getter(this: T) {\r\n return fn(this);\r\n }\r\n\r\n Object.defineProperty(Form.prototype, propertyKey, {\r\n get: getter,\r\n // for...in iterates only over enumerable properties\r\n enumerable: true,\r\n });\r\n };\r\n}\r\n","import { PlantTypeFieldTypeForGenerationTypeFormStep } from '@/types/forms/shared/plantTypeFieldType';\r\nimport type { ApplicationType } from '@/types/forms/specific/applicationForm';\r\n\r\nexport function getApplicationType(\r\n plantType:\r\n | PlantTypeFieldTypeForGenerationTypeFormStep\r\n | ''\r\n | null\r\n | undefined,\r\n): ApplicationType | undefined {\r\n switch (plantType) {\r\n case null:\r\n case undefined:\r\n case '':\r\n return undefined;\r\n case 'photovoltaicPowerPlant':\r\n return 'photovoltaic';\r\n case 'storage':\r\n return 'storage';\r\n case 'photovoltaicPowerPlantAndStorageLte30':\r\n return 'photovoltaicAndStorageLte30';\r\n case 'windPowerPlant':\r\n case 'hydroPowerPlant':\r\n case 'thermalPowerPlantDea':\r\n return 'dea';\r\n case 'thermalPowerPlantKwk':\r\n case 'fuelCell':\r\n case 'orcPowerPlant':\r\n case 'stirlingEngine':\r\n return 'powerHeatCoupling';\r\n\r\n default:\r\n return 'unknown';\r\n }\r\n}\r\n","import { Form } from '../form';\r\nimport { formDtoAttribute } from '../formDtoAttribute';\r\nimport { enumerableGetterAttribute } from '../enumerableGetterAttribute';\r\nimport { LocationFormStep } from '../formSteps/locationFormStep';\r\nimport { GenerationTypeFormStep } from '../formSteps/generationTypeFormStep';\r\nimport { PowerConnectionFormStep } from '../formSteps/powerConnectionFormStep';\r\nimport { PlantBuilderFormStep } from '../formSteps/plantBuilderFormStep';\r\nimport { PlantOperatorFormStep } from '../formSteps/plantOperatorFormStep';\r\nimport { PropertyOwnerFormStep } from '../formSteps/propertyOwnerFormStep';\r\nimport { getApplicationType } from '@/services/form/applicationType';\r\nimport { PlantDataFormStep } from '../formSteps/plantDataFormStep';\r\nimport { PlantPerformanceFormStep } from '../formSteps/plantPerformanceFormStep';\r\nimport { MeasuringConceptsFormStep } from '../formSteps/measuringConceptsFormStep';\r\nimport { BillingFormStep } from '../formSteps/billingFormStep';\r\nimport { CheckAndSendFormStep } from '../formSteps/checkAndSendFormStep';\r\nimport { WithOptional } from '../utility';\r\nimport { DocumentsFormStep } from '../formSteps/documentsFormStep';\r\nimport { ControllableConsumptionDevicesFormStep } from '../formSteps/controllableConsumptionDevicesFormStep';\r\n\r\ntype ConfigProps = WithOptional<\r\n ApplicationForm,\r\n keyof Form | 'applicationType'\r\n>;\r\n\r\nexport type ApplicationType =\r\n | 'photovoltaic'\r\n | 'storage'\r\n | 'photovoltaicAndStorageLte30'\r\n | 'dea'\r\n | 'powerHeatCoupling'\r\n | 'unknown';\r\n\r\nfunction applicationTypeFunction(target: ApplicationForm) {\r\n return getApplicationType(\r\n target.generationType?.plantType?.value || undefined,\r\n );\r\n}\r\n\r\nexport class ApplicationForm extends Form {\r\n @formDtoAttribute({\r\n jsonSchema: {\r\n type: 'string',\r\n },\r\n })\r\n public applicationId: string | null;\r\n\r\n @formDtoAttribute({\r\n jsonSchema: {\r\n type: 'string',\r\n },\r\n })\r\n @enumerableGetterAttribute(applicationTypeFunction)\r\n public readonly applicationType?: ApplicationType;\r\n\r\n public readonly location: LocationFormStep;\r\n public readonly generationType: GenerationTypeFormStep;\r\n public readonly powerConnection: PowerConnectionFormStep;\r\n public readonly plantOperator: PlantOperatorFormStep;\r\n public readonly plantBuilder: PlantBuilderFormStep;\r\n public readonly plantData: PlantDataFormStep;\r\n public readonly propertyOwner: PropertyOwnerFormStep;\r\n public readonly plantPerformance: PlantPerformanceFormStep;\r\n public readonly measuringConcepts: MeasuringConceptsFormStep;\r\n public readonly controllableConsumptionDevices: ControllableConsumptionDevicesFormStep;\r\n public readonly billing: BillingFormStep;\r\n public readonly documents: DocumentsFormStep;\r\n public readonly checkAndSend: CheckAndSendFormStep;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(Object.assign(config) as Form);\r\n\r\n this.applicationId = config.applicationId;\r\n this.location = config.location;\r\n this.generationType = config.generationType;\r\n this.powerConnection = config.powerConnection;\r\n this.plantOperator = config.plantOperator;\r\n this.plantBuilder = config.plantBuilder;\r\n this.plantData = config.plantData;\r\n this.propertyOwner = config.propertyOwner;\r\n this.plantPerformance = config.plantPerformance;\r\n this.measuringConcepts = config.measuringConcepts;\r\n this.controllableConsumptionDevices =\r\n config.controllableConsumptionDevices;\r\n this.billing = config.billing;\r\n this.documents = config.documents;\r\n this.checkAndSend = config.checkAndSend;\r\n }\r\n}\r\n","export const germanDateFormat = 'DD.MM.YYYY';\r\nexport const commaSeparator = ',';\r\nexport const thousandsSeparator = '.';\r\n\r\nexport function parseGermanFloat(value: string): number {\r\n return value ? parseFloat(value.replace(/\\./g, '').replace(',', '.')) : NaN;\r\n}\r\n\r\nexport function formatGermanNumber(\r\n value: number,\r\n options: {\r\n decimals?: number;\r\n thousandsSeparator?: boolean;\r\n } = {},\r\n): string {\r\n // Intl.NumberFormat is not being used, because it runs on top of the browser\r\n // and won't work when unit testing\r\n const fixedValue =\r\n options.decimals !== null && options.decimals !== undefined\r\n ? value.toFixed(options.decimals)\r\n : value;\r\n\r\n // split number into integer and decimal parts\r\n const [integerString, decimalString] = `${fixedValue}`.split('.');\r\n\r\n // add thousands separators\r\n const separatedIntegerString = options.thousandsSeparator\r\n ? integerString.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandsSeparator)\r\n : integerString;\r\n\r\n return decimalString\r\n ? `${separatedIntegerString}${commaSeparator}${decimalString}`\r\n : decimalString;\r\n}\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(prop) {\n return (0, _common.withParams)({\n type: 'requiredIf',\n prop: prop\n }, function (value, parentVm) {\n return (0, _common.ref)(prop, this, parentVm) ? (0, _common.req)(value) : true;\n });\n};\n\nexports.default = _default;","import { ValidationRule } from 'vuelidate/lib/validators';\r\n\r\nexport const checked = ((value: boolean): boolean => !!value) as ValidationRule;\r\n","import { helpers } from 'vuelidate/lib/validators';\r\n\r\nexport const houseNumber = helpers.regex(\r\n 'houseNumber',\r\n /^[^!\"'§$%&=?{}[\\]*#.:,;_<>^°]*$/u,\r\n);\r\n","import { float } from './float';\r\n\r\nexport function getComparableNumber(\r\n value: number | string | Date,\r\n): number | null {\r\n if (value instanceof Date || typeof value === 'number') {\r\n return +value;\r\n }\r\n\r\n if (!float(value)) {\r\n return null;\r\n }\r\n\r\n const parsedValue = parseFloat(value.replace(',', '.'));\r\n\r\n return isNaN(parsedValue) ? null : parsedValue;\r\n}\r\n","import { helpers, ValidationRule } from 'vuelidate/lib/validators';\r\nimport { getComparableNumber } from './util';\r\n\r\nexport function lt(comparedValue: number | string | Date): ValidationRule {\r\n return helpers.withParams(\r\n { type: 'lt', comparedValue },\r\n (value: number | string | Date) => {\r\n if (!helpers.req(value)) {\r\n return true;\r\n }\r\n\r\n const comparableValue = getComparableNumber(value);\r\n const comparableComparedValue = getComparableNumber(comparedValue);\r\n\r\n if (comparableValue === null || comparableComparedValue === null) {\r\n return true;\r\n }\r\n\r\n return comparableValue < comparableComparedValue;\r\n },\r\n );\r\n}\r\n","import { helpers } from 'vuelidate/lib/validators';\r\n\r\nexport const requiredIfAny = helpers.withParams(\r\n { type: 'requiredIf' },\r\n function (this: unknown, value: unknown, parentVm: Vue) {\r\n for (const prop in parentVm) {\r\n if (helpers.ref(prop, this, parentVm)) {\r\n return helpers.req(value);\r\n }\r\n }\r\n return true;\r\n },\r\n);\r\n","import {\r\n integer,\r\n minValue,\r\n maxValue,\r\n ValidationRule,\r\n} from 'vuelidate/lib/validators';\r\nimport { lt } from './lt';\r\nimport { float } from './float';\r\nimport { positive } from './positive';\r\nimport { requiredIfAny } from './requiredIfAny';\r\nimport { GeoOrientation } from '@/types/forms/fields/geoCoordinatesFormGroup';\r\n\r\nexport function getDegreesValidators(\r\n orientation: GeoOrientation,\r\n): Record ValidationRule)> {\r\n const limit = orientation === GeoOrientation.latitude ? 90 : 180;\r\n return {\r\n requiredIfAny,\r\n integer,\r\n minValue: minValue(-1 * limit),\r\n maxValue: maxValue(limit),\r\n };\r\n}\r\n\r\nexport function getMinutesValidators(): Record<\r\n string,\r\n ValidationRule | (() => ValidationRule)\r\n> {\r\n return {\r\n requiredIfAny,\r\n integer,\r\n positive,\r\n lt: lt(60),\r\n };\r\n}\r\n\r\nexport function getSecondsValidators(): Record<\r\n string,\r\n ValidationRule | (() => ValidationRule)\r\n> {\r\n return {\r\n requiredIfAny,\r\n float,\r\n positive,\r\n lt: lt(60),\r\n };\r\n}\r\n","import {\r\n getDegreesValidators,\r\n getMinutesValidators,\r\n getSecondsValidators,\r\n} from '@/validators/geoCoordinates';\r\nimport { FormGroup } from '../formGroup';\r\nimport { WithOptional } from '../utility';\r\nimport { TextField } from './textField';\r\n\r\nexport enum GeoOrientation {\r\n null = 'null',\r\n longitude = 'longitude',\r\n latitude = 'latitude',\r\n}\r\n\r\ntype OptionalProps = 'degrees' | 'minutes' | 'seconds';\r\n\r\nexport type GeoOrientationConfig = WithOptional<\r\n GeoCoordinatesFormGroup,\r\n keyof FormGroup | OptionalProps\r\n>;\r\n\r\nexport class GeoCoordinatesFormGroup extends FormGroup {\r\n public readonly orientation: GeoOrientation;\r\n public readonly degrees: TextField;\r\n public readonly minutes: TextField;\r\n public readonly seconds: TextField;\r\n\r\n public constructor(config: GeoOrientationConfig) {\r\n super(config);\r\n\r\n this.orientation = GeoOrientation.null;\r\n this.degrees =\r\n config.degrees ??\r\n new TextField({\r\n validators: getDegreesValidators(this.orientation),\r\n });\r\n this.minutes =\r\n config.minutes ??\r\n new TextField({\r\n validators: getMinutesValidators(),\r\n });\r\n this.seconds =\r\n config.seconds ??\r\n new TextField({\r\n validators: getSecondsValidators(),\r\n });\r\n }\r\n}\r\n","import { FormElement } from '../formElement';\r\nimport { FormStep } from '../formStep';\r\nimport { TextField } from '../fields/textField';\r\nimport { ZipAndCityFormGroup } from '../formGroups/zipAndCityFormGroup';\r\nimport { StreetAndHousenumberFormGroup } from '../formGroups/streetAndHousenumberFormGroup';\r\nimport { GeoCoordinatesFormGroup } from '../fields/geoCoordinatesFormGroup';\r\nimport { MeadowAndLotFormGroup } from '../formGroups/meadowAndLotFormGroup';\r\nimport { CheckboxField } from '../fields/checkboxField';\r\nimport { WithOptional } from '../utility';\r\nimport { AddressCheckFeedbackFormGroup } from '../formGroups/electricityUnavailableAtAddressFormGroup';\r\nimport { FormField } from '../fields/formField';\r\nimport { AddressesApiAvailabilityResult } from '../shared/addressesApi/addressesApiAvailabilityResult';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class LocationFormStep extends FormStep {\r\n public readonly stepIntro: FormElement;\r\n public readonly zipAndCity: ZipAndCityFormGroup;\r\n public readonly streetAndHousenumber: StreetAndHousenumberFormGroup;\r\n public readonly subdistrict: TextField;\r\n public readonly meadowAndLot: MeadowAndLotFormGroup;\r\n public readonly availabilityResult: FormField<\r\n AddressesApiAvailabilityResult\r\n >;\r\n public readonly addressCheckFeedback: AddressCheckFeedbackFormGroup;\r\n public readonly proceedWithCadastral: CheckboxField;\r\n public readonly building: TextField;\r\n public readonly geographicMap: FormElement;\r\n public readonly mapHeadline: FormElement;\r\n public readonly mapHint: FormElement;\r\n public readonly mapConsentHeadline: FormElement;\r\n public readonly mapConsentText: FormElement;\r\n public readonly mapConsentHint: FormElement;\r\n public readonly geographicLatCoordinates: GeoCoordinatesFormGroup;\r\n public readonly geographicLngCoordinates: GeoCoordinatesFormGroup;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.stepIntro = config.stepIntro;\r\n this.zipAndCity = config.zipAndCity;\r\n this.streetAndHousenumber = config.streetAndHousenumber;\r\n this.subdistrict = config.subdistrict;\r\n this.meadowAndLot = config.meadowAndLot;\r\n this.availabilityResult = config.availabilityResult;\r\n this.addressCheckFeedback = config.addressCheckFeedback;\r\n this.proceedWithCadastral = config.proceedWithCadastral;\r\n this.building = config.building;\r\n this.geographicMap = config.geographicMap;\r\n this.mapHeadline = config.mapHeadline;\r\n this.mapHint = config.mapHint;\r\n this.mapConsentHeadline = config.mapConsentHeadline;\r\n this.mapConsentText = config.mapConsentText;\r\n this.mapConsentHint = config.mapConsentHint;\r\n this.geographicLatCoordinates = config.geographicLatCoordinates;\r\n this.geographicLngCoordinates = config.geographicLngCoordinates;\r\n }\r\n}\r\n","import { TextField } from '../fields/textField';\r\nimport { FormGroup } from '../formGroup';\r\nimport { WithOptional } from '../utility';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class ZipAndCityFormGroup extends FormGroup {\r\n public readonly zip: TextField;\r\n public readonly city: TextField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.zip = config.zip;\r\n this.city = config.city;\r\n }\r\n}\r\n","import { TextField } from '../fields/textField';\r\nimport { FormGroup } from '../formGroup';\r\nimport { WithOptional } from '../utility';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class StreetAndHousenumberFormGroup extends FormGroup {\r\n public readonly street: TextField;\r\n public readonly housenumber: TextField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.street = config.street;\r\n this.housenumber = config.housenumber;\r\n }\r\n}\r\n","import { TextField } from '../fields/textField';\r\nimport { FormGroup } from '../formGroup';\r\nimport { WithOptional } from '../utility';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class MeadowAndLotFormGroup extends FormGroup {\r\n public readonly meadow: TextField;\r\n public readonly lot: TextField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.meadow = config.meadow;\r\n this.lot = config.lot;\r\n }\r\n}\r\n","import { FormElement } from '../formElement';\r\nimport { FormGroup } from '../formGroup';\r\nimport { WithOptional } from '../utility';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class AddressCheckFeedbackFormGroup extends FormGroup {\r\n public readonly addressCheckFeedbackCheckingHeadline: FormElement;\r\n public readonly addressCheckFeedbackAvailableHeadline: FormElement;\r\n public readonly addressCheckFeedbackEnterAddressHeadline: FormElement;\r\n public readonly addressCheckFeedbackUnavailableHeadline: FormElement;\r\n public readonly addressCheckFeedbackUnavailableInfoText: FormElement;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.addressCheckFeedbackCheckingHeadline =\r\n config.addressCheckFeedbackCheckingHeadline;\r\n this.addressCheckFeedbackAvailableHeadline =\r\n config.addressCheckFeedbackAvailableHeadline;\r\n this.addressCheckFeedbackEnterAddressHeadline =\r\n config.addressCheckFeedbackEnterAddressHeadline;\r\n this.addressCheckFeedbackUnavailableHeadline =\r\n config.addressCheckFeedbackUnavailableHeadline;\r\n this.addressCheckFeedbackUnavailableInfoText =\r\n config.addressCheckFeedbackUnavailableInfoText;\r\n }\r\n}\r\n","import { isArray as _isArray } from 'lodash';\r\nimport { helpers, ValidationRule } from 'vuelidate/lib/validators';\r\n\r\nexport function length(length: number): ValidationRule {\r\n return helpers.withParams(\r\n { type: 'length', length },\r\n (value: number | string | unknown[]) => {\r\n if (!helpers.req(value)) {\r\n return true;\r\n }\r\n\r\n const valueWithLength = _isArray(value) ? value : `${value}`;\r\n return valueWithLength.length === length;\r\n },\r\n );\r\n}\r\n","import { required, integer, maxLength } from 'vuelidate/lib/validators';\r\nimport { positive } from '@/validators/positive';\r\nimport { houseNumber } from '@/validators/houseNumber';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { CheckboxField } from '@/types/forms/fields/checkboxField';\r\nimport {\r\n GeoCoordinatesFormGroup,\r\n GeoOrientation,\r\n} from '@/types/forms/fields/geoCoordinatesFormGroup';\r\nimport { LocationFormStep } from '@/types/forms/formSteps/locationFormStep';\r\nimport { ZipAndCityFormGroup } from '@/types/forms/formGroups/zipAndCityFormGroup';\r\nimport { StreetAndHousenumberFormGroup } from '@/types/forms/formGroups/streetAndHousenumberFormGroup';\r\nimport { MeadowAndLotFormGroup } from '@/types/forms/formGroups/meadowAndLotFormGroup';\r\nimport { addressRequiredIfNoCadastral } from '@/validators/addressRequiredIfNoCadastral';\r\nimport { AddressCheckFeedbackFormGroup } from '@/types/forms/formGroups/electricityUnavailableAtAddressFormGroup';\r\nimport { FormField } from '@/types/forms/fields/formField';\r\nimport { AddressesApiAvailabilityResult } from '@/types/forms/shared/addressesApi/addressesApiAvailabilityResult';\r\nimport { length } from '@/validators/length';\r\n\r\nexport const locationFormStep = new LocationFormStep({\r\n stepIntro: new FormElement(),\r\n zipAndCity: new ZipAndCityFormGroup({\r\n zip: new TextField({\r\n validators: {\r\n required,\r\n integer,\r\n positive,\r\n length: length(5),\r\n },\r\n }),\r\n city: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n }),\r\n streetAndHousenumber: new StreetAndHousenumberFormGroup({\r\n street: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n housenumber: new TextField({\r\n validators: {\r\n required,\r\n houseNumber,\r\n maxLength: maxLength(8),\r\n },\r\n }),\r\n }),\r\n availabilityResult: new FormField({\r\n validators: {\r\n addressRequiredIfNoCadastral,\r\n },\r\n }),\r\n addressCheckFeedback: new AddressCheckFeedbackFormGroup({\r\n addressCheckFeedbackCheckingHeadline: new FormElement(),\r\n addressCheckFeedbackAvailableHeadline: new FormElement(),\r\n addressCheckFeedbackEnterAddressHeadline: new FormElement(),\r\n addressCheckFeedbackUnavailableHeadline: new FormElement(),\r\n addressCheckFeedbackUnavailableInfoText: new FormElement(),\r\n }),\r\n proceedWithCadastral: new CheckboxField(),\r\n subdistrict: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n meadowAndLot: new MeadowAndLotFormGroup({\r\n meadow: new TextField({\r\n validators: {\r\n required,\r\n integer,\r\n positive,\r\n },\r\n }),\r\n lot: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n }),\r\n building: new TextField(),\r\n geographicMap: new FormElement(),\r\n mapHeadline: new FormElement(),\r\n mapHint: new FormElement(),\r\n mapConsentHeadline: new FormElement(),\r\n mapConsentText: new FormElement(),\r\n mapConsentHint: new FormElement(),\r\n geographicLatCoordinates: new GeoCoordinatesFormGroup({\r\n orientation: GeoOrientation.latitude,\r\n }),\r\n geographicLngCoordinates: new GeoCoordinatesFormGroup({\r\n orientation: GeoOrientation.longitude,\r\n }),\r\n});\r\n","import { helpers, ValidationRule } from 'vuelidate/lib/validators';\r\nimport moment from 'moment';\r\nimport { germanDateFormat } from '@/utilities/germanFormats';\r\nimport { date } from './date';\r\nimport { DateRange } from '@/types/forms/shared/dateRange';\r\n\r\n/*\r\n * Determines whether the given value is less than the given maxDate. Moment js is used\r\n here to parse the string in German format. The moment() function accepts the string and format and\r\n will internally create a Date object. The chained isSameOrBefore function performs the comparison.\r\n https://momentjs.com/docs/#/use-it/\r\n*/\r\n\r\nexport const maxDate = (maxDate: string): ValidationRule => {\r\n return helpers.withParams(\r\n { type: 'maxDate', maxDate },\r\n (value: string | null | DateRange) => {\r\n const validateValue =\r\n typeof value === 'string' || value == null ? value : value.end;\r\n return (\r\n !!maxDate &&\r\n (!helpers.req(validateValue) ||\r\n !date(validateValue) ||\r\n moment(\r\n validateValue,\r\n germanDateFormat,\r\n true,\r\n ).isSameOrBefore(moment(maxDate, germanDateFormat, true)))\r\n );\r\n },\r\n );\r\n};\r\n","import { DateRange } from '@/types/forms/shared/dateRange';\r\nimport { helpers } from 'vuelidate/lib/validators';\r\n\r\nexport const requiredDate = (value: string | null | DateRange): boolean => {\r\n if (typeof value === 'string' || value === null) {\r\n return helpers.req(value);\r\n } else {\r\n return helpers.req(value.start) && helpers.req(value.end);\r\n }\r\n};\r\n","import { JSONSchema7Definition } from 'json-schema';\r\nimport { defaults as _defaults } from 'lodash';\r\nimport { date } from '@/validators/date';\r\nimport {\r\n FormFieldConfig,\r\n formFieldDefaultConfig,\r\n FormField,\r\n} from './formField';\r\n\r\nexport interface DateFieldConfig extends FormFieldConfig {\r\n value?: string;\r\n availableStart?: Date;\r\n availableEnd?: Date;\r\n}\r\n\r\nexport const dateFieldDefaultConfig = {\r\n ...formFieldDefaultConfig,\r\n};\r\n\r\nexport class DateField extends FormField {\r\n public readonly availableStart: Date | undefined;\r\n public readonly availableEnd: Date | undefined;\r\n\r\n public constructor(config?: DateFieldConfig) {\r\n const resolvedConfig = _defaults(\r\n config || ({} as DateFieldConfig),\r\n dateFieldDefaultConfig,\r\n ) as DateFieldConfig;\r\n\r\n resolvedConfig.validators = {\r\n date,\r\n ...resolvedConfig.validators,\r\n };\r\n\r\n super(resolvedConfig);\r\n\r\n this.availableStart = config?.availableStart;\r\n this.availableEnd = config?.availableEnd;\r\n }\r\n\r\n public getJsonSchema(): JSONSchema7Definition {\r\n return {\r\n type: 'string',\r\n };\r\n }\r\n}\r\n","import { FormElement } from '../formElement';\r\nimport { FormStep } from '../formStep';\r\nimport { SelectField } from '../fields/selectField';\r\nimport { CheckboxesField } from '../fields/checkboxesField';\r\nimport { TextField } from '../fields/textField';\r\nimport { CheckboxField } from '../fields/checkboxField';\r\nimport { DateField } from '../fields/dateField';\r\nimport { PlantTypeFieldTypeForGenerationTypeFormStep } from '../shared/plantTypeFieldType';\r\nimport { WithOptional } from '../utility';\r\nimport { EnergyTypeFieldType } from '../shared/energyTypeFieldType';\r\nimport { EmergencyGeneratorOperatingModeType } from '../shared/emergencyGeneratorOperatingModeType';\r\nimport { RadioButtonsField } from '../fields/radioButtonsField';\r\nimport { PlantStructureTypeValueType } from '../shared/plantStructureTypeValueType';\r\nimport { TotalPlantPerformanceValueType } from '../shared/totalPlantPerformanceValueType';\r\nimport { RequestType } from '../shared/requestType';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class GenerationTypeFormStep extends FormStep {\r\n public readonly stepIntro: FormElement;\r\n public readonly energyType: SelectField;\r\n public readonly plantType: SelectField<\r\n PlantTypeFieldTypeForGenerationTypeFormStep | ''\r\n >;\r\n public readonly plantStructureType: RadioButtonsField<\r\n PlantStructureTypeValueType\r\n >;\r\n public readonly totalPlantPerformance: RadioButtonsField<\r\n TotalPlantPerformanceValueType\r\n >;\r\n public readonly requestType: RadioButtonsField;\r\n public readonly requestWithPlanningInfo: FormElement;\r\n public readonly requestWithoutPlanningInfo: FormElement;\r\n public readonly emergencyGeneratorOperatingMode: CheckboxesField<\r\n EmergencyGeneratorOperatingModeType\r\n >;\r\n public readonly specifiedEmergencyGeneratorOperatingMode: TextField;\r\n public readonly plugInGeneratingPlant: CheckboxField;\r\n public readonly simplifiedRegistrationProcessNotice: FormElement;\r\n public readonly proceedWithFullRegistrationForEEGCompensation: CheckboxField;\r\n public readonly simplifiedProcedureHint: FormElement;\r\n public readonly bidirectionalMeter: CheckboxField;\r\n public readonly bidirectionalMeterInfo: FormElement;\r\n public readonly consumption: TextField;\r\n public readonly infeed: TextField;\r\n public readonly readingDate: DateField;\r\n public readonly plugInGeneratingPlantInfo: FormElement;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.stepIntro = config.stepIntro;\r\n this.plugInGeneratingPlant = config.plugInGeneratingPlant;\r\n this.energyType = config.energyType;\r\n this.plantType = config.plantType;\r\n this.plantStructureType = config.plantStructureType;\r\n this.totalPlantPerformance = config.totalPlantPerformance;\r\n this.requestType = config.requestType;\r\n this.requestWithPlanningInfo = config.requestWithPlanningInfo;\r\n this.requestWithoutPlanningInfo = config.requestWithoutPlanningInfo;\r\n this.emergencyGeneratorOperatingMode =\r\n config.emergencyGeneratorOperatingMode;\r\n this.specifiedEmergencyGeneratorOperatingMode =\r\n config.specifiedEmergencyGeneratorOperatingMode;\r\n this.simplifiedRegistrationProcessNotice =\r\n config.simplifiedRegistrationProcessNotice;\r\n this.proceedWithFullRegistrationForEEGCompensation =\r\n config.proceedWithFullRegistrationForEEGCompensation;\r\n this.simplifiedProcedureHint = config.simplifiedProcedureHint;\r\n this.bidirectionalMeter = config.bidirectionalMeter;\r\n this.bidirectionalMeterInfo = config.bidirectionalMeterInfo;\r\n this.consumption = config.consumption;\r\n this.infeed = config.infeed;\r\n this.readingDate = config.readingDate;\r\n this.plugInGeneratingPlantInfo = config.plugInGeneratingPlantInfo;\r\n }\r\n}\r\n","import { FormFieldWithOptions } from './formFieldWithOptions';\r\n\r\nexport class RadioButtonsField extends FormFieldWithOptions<\r\n TOptionKey,\r\n TOptionKey\r\n> {}\r\n","import moment from 'moment';\r\nimport { required, integer } from 'vuelidate/lib/validators';\r\nimport { positive } from '@/validators/positive';\r\nimport { maxDate } from '@/validators/maxDate';\r\nimport { requiredDate } from '@/validators/requiredDate';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { FormOption } from '@/types/forms/formOption';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { CheckboxField } from '@/types/forms/fields/checkboxField';\r\nimport { CheckboxesField } from '@/types/forms/fields/checkboxesField';\r\nimport { SelectField } from '@/types/forms/fields/selectField';\r\nimport { DateField } from '@/types/forms/fields/dateField';\r\nimport { GenerationTypeFormStep } from '@/types/forms/formSteps/generationTypeFormStep';\r\nimport { RadioButtonsField } from '@/types/forms/fields/radioButtonsField';\r\nimport { checked } from '@/validators/checked';\r\n\r\nexport const generationTypeFormStep = new GenerationTypeFormStep({\r\n stepIntro: new FormElement(),\r\n energyType: new SelectField({\r\n options: [\r\n new FormOption({ key: 'energyStorage' }), // Energiespeicher\r\n new FormOption({ key: 'sun' }), // Sonne\r\n new FormOption({ key: 'sunAndEnergyStorageLte30' }), // Sonne + Energiespeicher bis 30 kW\r\n new FormOption({ key: 'wind' }), // Wind\r\n new FormOption({ key: 'water' }), // Wasser\r\n new FormOption({ key: 'biogas' }), // Biogas\r\n new FormOption({ key: 'biowaste' }), // Bioabfälle\r\n new FormOption({ key: 'biodiesel' }), // Biodiesel\r\n new FormOption({ key: 'slurry' }), // Gülle\r\n new FormOption({ key: 'plantOil' }), // Pflanzenöl\r\n new FormOption({ key: 'woodGas' }), // Holzgas\r\n new FormOption({ key: 'mineGas' }), // Grubengas\r\n new FormOption({ key: 'sewageGas' }), // Klärgas\r\n new FormOption({ key: 'landfillGas' }), // Deponiegas\r\n new FormOption({ key: 'geothermics' }), // Geothermie\r\n new FormOption({ key: 'naturalGas' }), // Erdgas\r\n new FormOption({ key: 'liquidGas' }), // Flüssiggas\r\n new FormOption({ key: 'dieselOil' }), // Dieselöl\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n plantType: new SelectField({\r\n options: [\r\n new FormOption({ key: 'photovoltaicPowerPlant' }), // Solaranlage\r\n new FormOption({ key: 'photovoltaicPowerPlantAndStorageLte30' }), // Solaranlage + Speicher bis 30 kW\r\n new FormOption({ key: 'windPowerPlant' }), // Windenergieanlage\r\n new FormOption({ key: 'hydroPowerPlant' }), // Wasserkraftanlage\r\n new FormOption({ key: 'steamTurbine' }), // Wasserdampfturbine\r\n new FormOption({ key: 'thermalPowerPlantDea' }), // Blockheizkraftwerk DEA\r\n new FormOption({ key: 'thermalPowerPlantKwk' }), // Blockheizkraftwerk KWK\r\n new FormOption({ key: 'gasTurbine' }), // Gasturbine\r\n new FormOption({ key: 'fuelCell' }), // Brennstoffzelle\r\n new FormOption({ key: 'orcPowerPlant' }), // ORC-Anlage\r\n new FormOption({ key: 'emergencyGenerator' }), // Notstromaggregat > 100 ms\r\n new FormOption({ key: 'storage' }), // Speicher\r\n new FormOption({ key: 'stirlingEngine' }), // Stirling-Motor\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n plantStructureType: new RadioButtonsField({\r\n value: 'building',\r\n options: [\r\n new FormOption({ key: 'building' }),\r\n new FormOption({ key: 'noiseBarrier' }),\r\n new FormOption({ key: 'openSpacePlant' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n totalPlantPerformance: new RadioButtonsField({\r\n value: 'below300',\r\n options: [\r\n new FormOption({ key: 'below300' }),\r\n new FormOption({ key: 'above300' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n requestType: new RadioButtonsField({\r\n value: 'requestWithoutPlanning',\r\n options: [\r\n new FormOption({ key: 'requestWithoutPlanning' }),\r\n new FormOption({ key: 'requestWithPlanning' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n requestWithPlanningInfo: new FormElement(),\r\n requestWithoutPlanningInfo: new FormElement(),\r\n emergencyGeneratorOperatingMode: new CheckboxesField({\r\n options: [\r\n new FormOption({ key: 'testOperation' }), // Probebetrieb\r\n new FormOption({ key: 'referenceTipCover' }), // Bezugsspitzenabdeckung\r\n new FormOption({ key: 'controlEnergyMarket' }), // Regelenergiemarkt\r\n new FormOption({ key: 'other' }), // Sonstiges\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n specifiedEmergencyGeneratorOperatingMode: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n plugInGeneratingPlant: new CheckboxField(),\r\n simplifiedRegistrationProcessNotice: new FormElement(),\r\n proceedWithFullRegistrationForEEGCompensation: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n simplifiedProcedureHint: new FormElement(),\r\n bidirectionalMeter: new CheckboxField(),\r\n bidirectionalMeterInfo: new FormElement(),\r\n consumption: new TextField({\r\n validators: {\r\n required,\r\n integer,\r\n positive,\r\n },\r\n }),\r\n infeed: new TextField({\r\n validators: {\r\n required,\r\n integer,\r\n positive,\r\n },\r\n }),\r\n readingDate: new DateField({\r\n availableEnd: moment().toDate(),\r\n validators: {\r\n requiredDate,\r\n maxDate: maxDate(moment().format('DD.MM.YYYY')),\r\n },\r\n }),\r\n plugInGeneratingPlantInfo: new FormElement(),\r\n});\r\n","import { FormStep } from '../formStep';\r\nimport { RadioButtonsField } from '../fields/radioButtonsField';\r\nimport { FormElement } from '../formElement';\r\nimport { CheckboxField } from '../fields/checkboxField';\r\nimport { TextField } from '../fields/textField';\r\nimport { DateField } from '../fields/dateField';\r\nimport { WithOptional } from '../utility';\r\nimport { DoesConnectionExistType } from '../shared/doesConnectionExistType';\r\nimport { InfoIconContent } from '@/api/interfaces/content/form/base/infoIconContent';\r\nimport { WhichVoltageLevelType } from '../shared/whichVoltageLevelType';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class PowerConnectionFormStep extends FormStep {\r\n public readonly doesConnectionExist: RadioButtonsField<\r\n DoesConnectionExistType\r\n >;\r\n public readonly orderNumber: TextField;\r\n public readonly whichVoltageLevel: RadioButtonsField;\r\n public readonly hasExistingPlants: CheckboxField;\r\n public readonly existingPlantsTotalPower: TextField & InfoIconContent;\r\n public readonly onlyInverterCapacityOfExistingGenerationPlant: TextField;\r\n public readonly repoweringPlanned: CheckboxField;\r\n public readonly repoweringTotalPower: TextField & InfoIconContent;\r\n public readonly feedInPowerShallBeLimitedByAController: CheckboxField;\r\n public readonly feedInPower: TextField & InfoIconContent;\r\n public readonly plannedReferencePower: TextField & InfoIconContent;\r\n public readonly ofWhichOwnUseGeneratingPlant: TextField & InfoIconContent;\r\n public readonly ownUseExceedsPlannedPowerWarning: FormElement;\r\n public readonly noConnectionAvailable: FormElement;\r\n public readonly reactivePowerCompensationSystemExists: CheckboxField;\r\n public readonly unitCapacity: TextField;\r\n public readonly unitIsPrototype: CheckboxField;\r\n public readonly buildingPowerDemand: CheckboxField;\r\n public readonly requiredPower: TextField;\r\n public readonly fromWhen: DateField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.doesConnectionExist = config.doesConnectionExist;\r\n this.orderNumber = config.orderNumber;\r\n this.whichVoltageLevel = config.whichVoltageLevel;\r\n this.onlyInverterCapacityOfExistingGenerationPlant =\r\n config.onlyInverterCapacityOfExistingGenerationPlant;\r\n this.hasExistingPlants = config.hasExistingPlants;\r\n this.existingPlantsTotalPower = config.existingPlantsTotalPower;\r\n this.repoweringPlanned = config.repoweringPlanned;\r\n this.repoweringTotalPower = config.repoweringTotalPower;\r\n this.feedInPowerShallBeLimitedByAController =\r\n config.feedInPowerShallBeLimitedByAController;\r\n this.feedInPower = config.feedInPower;\r\n this.plannedReferencePower = config.plannedReferencePower;\r\n this.ofWhichOwnUseGeneratingPlant = config.ofWhichOwnUseGeneratingPlant;\r\n this.ownUseExceedsPlannedPowerWarning =\r\n config.ownUseExceedsPlannedPowerWarning;\r\n this.noConnectionAvailable = config.noConnectionAvailable;\r\n this.reactivePowerCompensationSystemExists =\r\n config.reactivePowerCompensationSystemExists;\r\n this.unitCapacity = config.unitCapacity;\r\n this.unitIsPrototype = config.unitIsPrototype;\r\n this.buildingPowerDemand = config.buildingPowerDemand;\r\n this.requiredPower = config.requiredPower;\r\n this.fromWhen = config.fromWhen;\r\n }\r\n}\r\n","import { helpers } from 'vuelidate/lib/validators';\r\n\r\nexport const positiveInteger = helpers.regex('positiveInteger', /^\\d*$/);\r\n","import { parseGermanFloat } from '@/utilities/germanFormats';\r\nimport { ValidationRule } from 'vuelidate/lib/validators';\r\n\r\ninterface ExistingPlantsTotalPowerPartialVm {\r\n existingPlantsTotalPower: string;\r\n}\r\n\r\nexport const mustBeLowerThanToExistingPlantsTotalPower = function (\r\n value: string,\r\n vm: ExistingPlantsTotalPowerPartialVm,\r\n) {\r\n const existingPlantsTotalPower = parseGermanFloat(\r\n vm.existingPlantsTotalPower || '0',\r\n );\r\n const val = parseGermanFloat(value || '0');\r\n return val <= existingPlantsTotalPower;\r\n} as ValidationRule;\r\n","import { getOverallActivePower } from '@/services/form/utilities/application/plantPerformance';\r\nimport { Forms } from '@/types/forms/forms';\r\nimport { parseGermanFloat } from '@/utilities/germanFormats';\r\nimport { roundToDecimals } from '@/utilities/math';\r\nimport { CombinedVueInstance } from 'vue/types/vue';\r\nimport { ValidationRule } from 'vuelidate/lib/validators';\r\n\r\n// eslint-disable-next-line @typescript-eslint/comma-dangle\r\nexport const mustBeLowerThanFeedInPowerRecommendation = function <\r\n Instance extends Vue\r\n>(\r\n this: CombinedVueInstance<\r\n Instance,\r\n { model: Forms },\r\n unknown,\r\n unknown,\r\n unknown\r\n >,\r\n value: string,\r\n) {\r\n const plantPerformanceModel = this.model.application.plantPerformance;\r\n\r\n const overallActivePower =\r\n getOverallActivePower(\r\n this.model.application.applicationType,\r\n plantPerformanceModel,\r\n ) ?? 0;\r\n\r\n const existingPlantsTotalPower = parseGermanFloat(\r\n !this.model.application.powerConnection.existingPlantsTotalPower\r\n .disabled\r\n ? this.model.application.powerConnection.existingPlantsTotalPower\r\n .value ?? '0'\r\n : '0',\r\n );\r\n const repoweringTotalPower = parseGermanFloat(\r\n !this.model.application.powerConnection.repoweringTotalPower.disabled\r\n ? this.model.application.powerConnection.repoweringTotalPower\r\n .value ?? '0'\r\n : '0',\r\n );\r\n const recommendation = roundToDecimals(\r\n overallActivePower + existingPlantsTotalPower - repoweringTotalPower,\r\n );\r\n\r\n return parseGermanFloat(value) <= recommendation;\r\n} as ValidationRule;\r\n","import { maxLength, required } from 'vuelidate/lib/validators';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { FormOption } from '@/types/forms/formOption';\r\nimport { CheckboxField } from '@/types/forms/fields/checkboxField';\r\nimport { RadioButtonsField } from '@/types/forms/fields/radioButtonsField';\r\nimport { DateField } from '@/types/forms/fields/dateField';\r\nimport { PowerConnectionFormStep } from '@/types/forms/formSteps/powerConnectionFormStep';\r\nimport { float } from '@/validators/float';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { positiveInteger } from '@/validators/positiveInteger';\r\nimport { positive } from '@/validators/positive';\r\nimport { requiredDate } from '@/validators/requiredDate';\r\nimport { mustBeLowerThanToExistingPlantsTotalPower } from '@/validators/mustBeLowerThanToExistingPlantsTotalPower';\r\nimport { mustBeLowerThanFeedInPowerRecommendation } from '@/validators/mustBeLowerThanFeedInPowerRecommendation';\r\nimport { alwaysFalse } from '@/validators/alwaysFalse';\r\n\r\nexport const powerConnectionFormStep = new PowerConnectionFormStep({\r\n doesConnectionExist: new RadioButtonsField({\r\n value: 'yes',\r\n options: [\r\n new FormOption({ key: 'yes' }),\r\n new FormOption({ key: 'ordered' }),\r\n new FormOption({ key: 'no' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n onlyInverterCapacityOfExistingGenerationPlant: new TextField,\r\n orderNumber: new TextField({\r\n validators: {\r\n required,\r\n orderNumber: positiveInteger,\r\n maxLength: maxLength(8),\r\n },\r\n }),\r\n whichVoltageLevel: new RadioButtonsField({\r\n value: 'lowVoltage',\r\n options: [\r\n new FormOption({ key: 'lowVoltage' }),\r\n new FormOption({ key: 'mediumVoltage' }),\r\n new FormOption({ key: 'unknown' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n hasExistingPlants: new CheckboxField(),\r\n existingPlantsTotalPower: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n repoweringPlanned: new CheckboxField(),\r\n repoweringTotalPower: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n mustBeLowerThanToExistingPlantsTotalPower,\r\n },\r\n }),\r\n feedInPowerShallBeLimitedByAController: new CheckboxField(),\r\n feedInPower: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n mustBeLowerThanFeedInPowerRecommendation,\r\n },\r\n }),\r\n plannedReferencePower: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n ofWhichOwnUseGeneratingPlant: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n },\r\n }),\r\n ownUseExceedsPlannedPowerWarning: new FormElement({\r\n validators: {\r\n alwaysFalse,\r\n },\r\n }),\r\n noConnectionAvailable: new FormElement(),\r\n reactivePowerCompensationSystemExists: new CheckboxField(),\r\n unitCapacity: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n },\r\n }),\r\n unitIsPrototype: new CheckboxField(),\r\n buildingPowerDemand: new CheckboxField(),\r\n requiredPower: new TextField({\r\n validators: {\r\n required,\r\n float,\r\n },\r\n }),\r\n fromWhen: new DateField({\r\n validators: {\r\n requiredDate,\r\n },\r\n }),\r\n});\r\n","import { TextField } from '../fields/textField';\r\nimport { FormGroup } from '../formGroup';\r\nimport { WithOptional } from '../utility';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class FirstAndLastNameFormGroup extends FormGroup {\r\n public readonly firstName: TextField;\r\n public readonly lastName: TextField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.firstName = config.firstName;\r\n this.lastName = config.lastName;\r\n }\r\n}\r\n","import { DateField } from '../fields/dateField';\r\nimport { RadioButtonsField } from '../fields/radioButtonsField';\r\nimport { SelectField } from '../fields/selectField';\r\nimport { TextField } from '../fields/textField';\r\nimport { FormElementConfig } from '../formElement';\r\nimport { FormGroup } from '../formGroup';\r\nimport type { SalutationValueType } from '../shared/salutationValueType';\r\nimport type { TitleValueType } from '../shared/titleValueType';\r\nimport { FirstAndLastNameFormGroup } from './firstAndLastNameFormGroup';\r\n\r\nexport type OperatorFormGroupConfig = FormElementConfig &\r\n Omit;\r\n\r\nexport class OperatorFormGroup extends FormGroup {\r\n public readonly salutation: RadioButtonsField;\r\n public readonly companyName: TextField;\r\n public readonly title: SelectField;\r\n public readonly operatorName: FirstAndLastNameFormGroup;\r\n public readonly contactPersonName: FirstAndLastNameFormGroup;\r\n public readonly birthday: DateField;\r\n\r\n public constructor(config: OperatorFormGroupConfig) {\r\n super(config);\r\n\r\n this.salutation = config.salutation;\r\n this.companyName = config.companyName;\r\n this.title = config.title;\r\n this.operatorName = config.operatorName;\r\n this.contactPersonName = config.contactPersonName;\r\n this.birthday = config.birthday;\r\n }\r\n}\r\n","import { CheckboxField } from '../fields/checkboxField';\r\nimport { RadioButtonsField } from '../fields/radioButtonsField';\r\nimport { SelectField } from '../fields/selectField';\r\nimport { TextField } from '../fields/textField';\r\nimport { OperatorFormListType } from '../formGroups/operatorFormList';\r\nimport { StreetAndHousenumberFormGroup } from '../formGroups/streetAndHousenumberFormGroup';\r\nimport { ZipAndCityFormGroup } from '../formGroups/zipAndCityFormGroup';\r\nimport { FormStep } from '../formStep';\r\nimport type { CountryValueType } from '../shared/countryValueType';\r\nimport { PlantBuilderValueType } from '../shared/plantBuilderValueType';\r\nimport { YesNoValueType } from '../shared/yesNoValueType';\r\nimport { WithOptional } from '../utility';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class PlantOperatorFormStep extends FormStep {\r\n public readonly separatePropertyOwner: RadioButtonsField;\r\n public readonly plantBuilder: RadioButtonsField;\r\n public readonly operators: OperatorFormListType;\r\n public readonly country: SelectField;\r\n public readonly usePlantLocation: CheckboxField;\r\n public readonly zipAndCity: ZipAndCityFormGroup;\r\n public readonly streetAndHousenumber: StreetAndHousenumberFormGroup;\r\n public readonly email: TextField;\r\n public readonly emailRepeat: TextField;\r\n public readonly phoneNumber1: TextField;\r\n public readonly phoneNumber2: TextField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.separatePropertyOwner = config.separatePropertyOwner;\r\n this.plantBuilder = config.plantBuilder;\r\n this.operators = config.operators;\r\n this.country = config.country;\r\n this.usePlantLocation = config.usePlantLocation;\r\n this.zipAndCity = config.zipAndCity;\r\n this.streetAndHousenumber = config.streetAndHousenumber;\r\n this.email = config.email;\r\n this.emailRepeat = config.emailRepeat;\r\n this.phoneNumber1 = config.phoneNumber1;\r\n this.phoneNumber2 = config.phoneNumber2;\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport { maxDate } from './maxDate';\r\nimport { germanDateFormat } from '@/utilities/germanFormats';\r\n\r\n/*\r\n * Determines whether the given value is a date, which is the current date or a past date. Moment js is\r\n used here to parse the string in German format. The moment() function accepts the string and format and\r\n will internally create a Date object. The chained isSameOrBefore function performs the comparison.\r\n https://momentjs.com/docs/#/use-it/\r\n*/\r\n\r\nexport const maxDateNow = maxDate(moment().format(germanDateFormat));\r\n","import { helpers } from 'vuelidate/lib/validators';\r\n\r\nexport const name = helpers.regex(\r\n 'name',\r\n /^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+$/u,\r\n);\r\n","import { helpers, ValidationRule } from 'vuelidate/lib/validators';\r\nimport { get as _get } from 'lodash';\r\nimport { SelectField } from '@/types/forms/fields/selectField';\r\nimport { CountryValueType } from '@/types/forms/shared/countryValueType';\r\nimport { Forms } from '@/types/forms/forms';\r\n\r\ninterface MockFormModel {\r\n model: Forms;\r\n}\r\n\r\nexport function zip(modelCountryPath: string): ValidationRule {\r\n return helpers.withParams({ type: 'modelCountryPath' }, function (\r\n this: MockFormModel,\r\n value: number | string,\r\n ): boolean {\r\n let localModelCountryPath = modelCountryPath;\r\n if (!helpers.req(value)) {\r\n return true;\r\n }\r\n\r\n const normalizedValue = `${value}`;\r\n\r\n if (localModelCountryPath.indexOf('[*]') >= 0) {\r\n // Path contains index. That means we have a form list, probably the propertyOwner case.\r\n // So now we have to determine the correct index, by matching the zip:\r\n const matches = /(.+\\.(.+))\\[\\*\\]\\..+/g.exec(localModelCountryPath);\r\n if (matches?.length == 3) {\r\n // const fullPath = matches[0];\r\n const subPath = matches[1];\r\n const listElementName = matches[2];\r\n const listElements = _get(this.model, subPath);\r\n if (listElements) {\r\n for (const listElementIndex in listElements) {\r\n const listElement = listElements[listElementIndex];\r\n const listElementZip =\r\n listElement?.zipAndCity?.zip?.value;\r\n if (listElementZip == normalizedValue) {\r\n // Found the correct index\r\n // (There is an edge-case, where zips in both owners are identical, but country differs.\r\n // There is no solution for that. Shouldn't be an actual issue, though.)\r\n localModelCountryPath = localModelCountryPath.replace(\r\n `${listElementName}[*]`,\r\n `${listElementName}[${listElementIndex}]`,\r\n );\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const country = (_get(this.model, localModelCountryPath) as SelectField<\r\n CountryValueType\r\n >)?.value;\r\n let regex = /.*/g;\r\n\r\n switch (country) {\r\n case 'deu' /* Deutschland */:\r\n case 'fra' /* Frankreich */:\r\n regex = /^(\\d{5})$/g;\r\n break;\r\n case 'aut' /* Österreich */:\r\n case 'dnk' /* Dänemark */:\r\n case 'che' /* Schweiz */:\r\n regex = /^(\\d{4})$/g;\r\n break;\r\n case 'nld' /* Niederlande */:\r\n regex = /^(\\d{4}\\s?[a-zA-Z]{2})$/g;\r\n break;\r\n case 'pol' /* Polen */:\r\n regex = /^(\\d{2}-\\d{3})$/g;\r\n break;\r\n }\r\n\r\n const result = new RegExp(regex).test(normalizedValue);\r\n return result;\r\n });\r\n}\r\n","import { ValidationRule } from 'vuelidate/lib/validators';\r\n\r\ninterface EmailValue {\r\n email: string;\r\n}\r\n\r\nexport const emailRepeatMustBeIdentical = ((\r\n value: string,\r\n vm: EmailValue,\r\n): boolean => {\r\n return value === vm.email;\r\n}) as ValidationRule;\r\n","/*!\n * @license\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n/**\n * Validation, extraction and creation of IBAN, BBAN, BIC/SWIFT numbers plus some other helpful stuff\n * @packageDocumentation\n * @author Saša Jovanić\n * @module ibantools\n * @version 3.3.1\n * @license MPL-2.0\n * @preferred\n */\n'use strict';\n/**\n * Validate IBAN\n * ```\n * // returns true\n * ibantools.isValidIBAN(\"NL91ABNA0517164300\");\n * ```\n * ```\n * // returns false\n * ibantools.isValidIBAN(\"NL92ABNA0517164300\");\n * ```\nv */\nexport function isValidIBAN(iban) {\n if (iban !== undefined && iban !== null) {\n var reg = new RegExp('^[0-9]{2}$', '');\n var spec = countrySpecs[iban.slice(0, 2)];\n if (spec !== undefined &&\n spec.bban_regexp &&\n spec.bban_regexp !== null &&\n spec.chars &&\n spec.chars === iban.length &&\n reg.test(iban.slice(2, 4)) &&\n checkFormatBBAN(iban.slice(4), spec.bban_regexp) &&\n isValidIBANChecksum(iban)) {\n return true;\n }\n }\n return false;\n}\n/**\n * IBAM validation errors\n */\nexport var ValidationErrorsIBAN;\n(function (ValidationErrorsIBAN) {\n ValidationErrorsIBAN[ValidationErrorsIBAN[\"NoIBANProvided\"] = 0] = \"NoIBANProvided\";\n ValidationErrorsIBAN[ValidationErrorsIBAN[\"NoIBANCountry\"] = 1] = \"NoIBANCountry\";\n ValidationErrorsIBAN[ValidationErrorsIBAN[\"WrongBBANLength\"] = 2] = \"WrongBBANLength\";\n ValidationErrorsIBAN[ValidationErrorsIBAN[\"WrongBBANFormat\"] = 3] = \"WrongBBANFormat\";\n ValidationErrorsIBAN[ValidationErrorsIBAN[\"ChecksumNotNumber\"] = 4] = \"ChecksumNotNumber\";\n ValidationErrorsIBAN[ValidationErrorsIBAN[\"WrongIBANChecksum\"] = 5] = \"WrongIBANChecksum\";\n})(ValidationErrorsIBAN || (ValidationErrorsIBAN = {}));\n/**\n * validateIBAN\n * ```\n * // returns {errorCodes: [], valid: true}\n * ibantools.validateIBAN(\"NL91 ABNA 0417 1643 00\");\n * ```\n */\nexport function validateIBAN(iban) {\n var result = { errorCodes: [], valid: true };\n if (iban !== undefined && iban !== null && iban !== '') {\n var spec = countrySpecs[iban.slice(0, 2)];\n if (!spec || !(spec.bban_regexp || spec.chars)) {\n result.valid = false;\n result.errorCodes.push(ValidationErrorsIBAN.NoIBANCountry);\n }\n if (spec && spec.chars && spec.chars !== iban.length) {\n result.valid = false;\n result.errorCodes.push(ValidationErrorsIBAN.WrongBBANLength);\n }\n if (spec && spec.bban_regexp && !checkFormatBBAN(iban.slice(4), spec.bban_regexp)) {\n result.valid = false;\n result.errorCodes.push(ValidationErrorsIBAN.WrongBBANFormat);\n }\n var reg = new RegExp('^[0-9]{2}$', '');\n if (!reg.test(iban.slice(2, 4))) {\n result.valid = false;\n result.errorCodes.push(ValidationErrorsIBAN.ChecksumNotNumber);\n }\n if (!isValidIBANChecksum(iban)) {\n result.valid = false;\n result.errorCodes.push(ValidationErrorsIBAN.WrongIBANChecksum);\n }\n }\n else {\n result.valid = false;\n result.errorCodes.push(ValidationErrorsIBAN.NoIBANProvided);\n }\n return result;\n}\n/**\n * Validate BBAN\n *\n * ```\n * // returns true\n * ibantools.isValidBBAN(\"ABNA0517164300\", \"NL\");\n * ```\n * ```\n * // returns false\n * ibantools.isValidBBAN(\"A7NA0517164300\", \"NL\");\n * ```\n */\nexport function isValidBBAN(bban, countryCode) {\n if (bban !== undefined && bban !== null && countryCode !== undefined && countryCode !== null) {\n var spec = countrySpecs[countryCode];\n if (spec !== undefined &&\n spec !== null &&\n spec.bban_regexp &&\n spec.bban_regexp !== null &&\n spec.chars &&\n spec.chars !== null &&\n spec.chars - 4 === bban.length &&\n checkFormatBBAN(bban, spec.bban_regexp)) {\n return true;\n }\n }\n return false;\n}\n/**\n * Validate if country code is from a SEPA country\n * ```\n * // returns true\n * ibantools.isSEPACountry(\"NL\");\n * ```\n * ```\n * // returns false\n * ibantools.isSEPACountry(\"PK\");\n * ```\n */\nexport function isSEPACountry(countryCode) {\n if (countryCode !== undefined && countryCode !== null) {\n var spec = countrySpecs[countryCode];\n if (spec !== undefined) {\n return spec.SEPA ? spec.SEPA : false;\n }\n }\n return false;\n}\n/**\n * composeIBAN\n *\n * ```\n * // returns NL91ABNA0417164300\n * ibantools.composeIBAN({ countryCode: \"NL\", bban: \"ABNA0417164300\" });\n * ```\n */\nexport function composeIBAN(params) {\n var formated_bban = electronicFormatIBAN(params.bban) || '';\n if (params.countryCode === null || params.countryCode === undefined) {\n return null;\n }\n var spec = countrySpecs[params.countryCode];\n if (formated_bban !== '' &&\n spec !== undefined &&\n spec.chars &&\n spec.chars !== null &&\n spec.chars === formated_bban.length + 4 &&\n spec.bban_regexp &&\n spec.bban_regexp !== null &&\n checkFormatBBAN(formated_bban, spec.bban_regexp)) {\n var checksom = mod9710(params.countryCode + '00' + formated_bban);\n return params.countryCode + ('0' + (98 - checksom)).slice(-2) + formated_bban;\n }\n return null;\n}\n/**\n * extractIBAN\n * ```\n * // returns {iban: \"NL91ABNA0417164300\", bban: \"ABNA0417164300\", countryCode: \"NL\", valid: true}\n * ibantools.extractIBAN(\"NL91 ABNA 0417 1643 00\");\n * ```\n */\nexport function extractIBAN(iban) {\n var result = {};\n result.iban = iban;\n if (isValidIBAN(iban)) {\n result.bban = iban.slice(4);\n result.countryCode = iban.slice(0, 2);\n result.valid = true;\n }\n else {\n result.valid = false;\n }\n return result;\n}\n/**\n * Check BBAN format\n *\n * @ignore\n */\nfunction checkFormatBBAN(bban, bformat) {\n var reg = new RegExp(bformat, '');\n return reg.test(bban);\n}\n/**\n * Get IBAN in electronic format (no spaces)\n * IBAN validation is not performed.\n * When non-string value for IBAN is provided, returns null.\n * ```\n * // returns \"NL91ABNA0417164300\"\n * ibantools.electronicFormatIBAN(\"NL91 ABNA 0417 1643 00\");\n * ```\n */\nexport function electronicFormatIBAN(iban) {\n if (typeof iban !== 'string') {\n return null;\n }\n return iban.replace(/[-\\ ]/g, '').toUpperCase();\n}\n/**\n * Get IBAN in friendly format (separated after every 4 characters)\n * IBAN validation is not performed.\n * When non-string value for IBAN is provided, returns null.\n * ```\n * // returns \"NL91 ABNA 0417 1643 00\"\n * ibantools.friendlyFormatIBAN(\"NL91ABNA0417164300\");\n * ```\n * ```\n * // returns \"NL91-ABNA-0417-1643-00\"\n * ibantools.friendlyFormatIBAN(\"NL91ABNA0417164300\",\"-\");\n * ```\n */\nexport function friendlyFormatIBAN(iban, separator) {\n if (typeof iban !== 'string') {\n return null;\n }\n if (separator === undefined || separator === null) {\n separator = ' ';\n }\n var electronic_iban = electronicFormatIBAN(iban);\n /* istanbul ignore if */\n if (electronic_iban === null) {\n return null;\n }\n return electronic_iban.replace(/(.{4})(?!$)/g, '$1' + separator);\n}\n/**\n * Calculate checksum of IBAN and compares it with checksum provided in IBAN Registry\n *\n * @ignore\n */\nfunction isValidIBANChecksum(iban) {\n var providedChecksum = parseInt(iban.slice(2, 4), 10);\n var temp = iban.slice(3) + iban.slice(0, 2) + '00';\n var validationString = '';\n for (var n = 1; n < temp.length; n++) {\n var c = temp.charCodeAt(n);\n if (c >= 65) {\n validationString += (c - 55).toString();\n }\n else {\n validationString += temp[n];\n }\n }\n while (validationString.length > 2) {\n var part = validationString.slice(0, 6);\n validationString = (parseInt(part, 10) % 97).toString() + validationString.slice(part.length);\n }\n var rest = parseInt(validationString, 10) % 97;\n return 98 - rest === providedChecksum;\n}\n/**\n * MOD-97-10\n *\n * @ignore\n */\nfunction mod9710(iban) {\n iban = iban.slice(3) + iban.slice(0, 4);\n var validationString = '';\n for (var n = 1; n < iban.length; n++) {\n var c = iban.charCodeAt(n);\n if (c >= 65) {\n validationString += (c - 55).toString();\n }\n else {\n validationString += iban[n];\n }\n }\n while (validationString.length > 2) {\n var part = validationString.slice(0, 6);\n validationString = (parseInt(part, 10) % 97).toString() + validationString.slice(part.length);\n }\n return parseInt(validationString, 10) % 97;\n}\n/**\n * Returns specifications for all countries, even those who are not\n * members of IBAN registry. `IBANRegistry` field indicates if country\n * is member of not.\n *\n * ```\n * // Validating IBAN form field after user selects his country\n * // \n * $(\"#countries\").select(function() {\n * // Find country\n * let country = ibantools.getCountrySpecifications()[$(this).val()];\n * // Add country code letters to IBAN form field\n * $(\"input#iban\").value($(this).val());\n * // Add New value to \"pattern\" attribute to #iban input text field\n * $(\"input#iban\").attr(\"pattern\", $(this).val() + \"[0-9]{2}\" + country.bban_regexp.slice(1).replace(\"$\",\"\"));\n * });\n * ```\n */\nexport function getCountrySpecifications() {\n var countyMap = {};\n for (var countyCode in countrySpecs) {\n var county = countrySpecs[countyCode];\n countyMap[countyCode] = {\n chars: county.chars ? county.chars : null,\n bban_regexp: county.bban_regexp ? county.bban_regexp : null,\n IBANRegistry: county.IBANRegistry ? county.IBANRegistry : false,\n SEPA: county.SEPA ? county.SEPA : false,\n };\n }\n return countyMap;\n}\n/**\n * Validate BIC/SWIFT\n *\n * ```\n * // returns true\n * ibantools.isValidBIC(\"ABNANL2A\");\n *\n * // returns true\n * ibantools.isValidBIC(\"NEDSZAJJXXX\");\n *\n * // returns false\n * ibantools.isValidBIC(\"ABN4NL2A\");\n *\n * // returns false\n * ibantools.isValidBIC(\"ABNA NL 2A\");\n * ```\n */\nexport function isValidBIC(bic) {\n if (!bic) {\n return false;\n }\n var reg = new RegExp('^[a-zA-Z]{6}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?$', '');\n var spec = countrySpecs[bic.toUpperCase().slice(4, 6)];\n return reg.test(bic) && spec !== undefined;\n}\n/**\n * BIC validation errors\n */\nexport var ValidationErrorsBIC;\n(function (ValidationErrorsBIC) {\n ValidationErrorsBIC[ValidationErrorsBIC[\"NoBICProvided\"] = 0] = \"NoBICProvided\";\n ValidationErrorsBIC[ValidationErrorsBIC[\"NoBICCountry\"] = 1] = \"NoBICCountry\";\n ValidationErrorsBIC[ValidationErrorsBIC[\"WrongBICFormat\"] = 2] = \"WrongBICFormat\";\n})(ValidationErrorsBIC || (ValidationErrorsBIC = {}));\n/**\n * validateBIC\n * ```\n * // returns {errorCodes: [], valid: true}\n * ibantools.validateBIC(\"NEDSZAJJXXX\");\n * ```\n */\nexport function validateBIC(bic) {\n var result = { errorCodes: [], valid: true };\n if (bic !== undefined && bic !== null && bic !== '') {\n var spec = countrySpecs[bic.toUpperCase().slice(4, 6)];\n if (spec === undefined) {\n result.valid = false;\n result.errorCodes.push(ValidationErrorsBIC.NoBICCountry);\n }\n else {\n var reg = new RegExp('^[a-zA-Z]{6}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?$', '');\n if (!reg.test(bic)) {\n result.valid = false;\n result.errorCodes.push(ValidationErrorsBIC.WrongBICFormat);\n }\n }\n }\n else {\n result.valid = false;\n result.errorCodes.push(ValidationErrorsBIC.NoBICProvided);\n }\n return result;\n}\n/**\n * extractBIC\n * ```\n * // returns {bankCode: \"ABNA\", countryCode: \"NL\", locationCode: \"2A\", branchCode: null, testBIC: flase, valid: true}\n * ibantools.extractBIC(\"ABNANL2A\");\n * ```\n */\nexport function extractBIC(inputBic) {\n var result = {};\n var bic = inputBic.toUpperCase();\n if (isValidBIC(bic)) {\n result.bankCode = bic.slice(0, 4);\n result.countryCode = bic.slice(4, 6);\n result.locationCode = bic.slice(6, 8);\n result.testBIC = result.locationCode[1] === '0' ? true : false;\n result.branchCode = bic.length > 8 ? bic.slice(8) : '619';\n result.valid = true;\n }\n else {\n result.valid = false;\n }\n return result;\n}\n/**\n * Country specifications\n */\nexport var countrySpecs = {\n AD: {\n chars: 24,\n bban_regexp: '^[0-9]{8}[A-Z0-9]{12}$',\n IBANRegistry: true,\n SEPA: true,\n },\n AE: {\n chars: 23,\n bban_regexp: '^[0-9]{3}[0-9]{16}$',\n IBANRegistry: true,\n },\n AF: {},\n AG: {},\n AI: {},\n AL: {\n chars: 28,\n bban_regexp: '^[0-9]{8}[A-Z0-9]{16}$',\n IBANRegistry: true,\n },\n AM: {},\n AO: {\n chars: 25,\n bban_regexp: '^[0-9]{21}$',\n },\n AQ: {},\n AR: {},\n AS: {},\n AT: { chars: 20, bban_regexp: '^[0-9]{16}$', IBANRegistry: true, SEPA: true },\n AU: {},\n AW: {},\n AX: {\n chars: 18,\n bban_regexp: '^[0-9]{14}$',\n IBANRegistry: true,\n },\n AZ: {\n chars: 28,\n bban_regexp: '^[A-Z]{4}[A-Z0-9]{20}$',\n IBANRegistry: true,\n },\n BA: {\n chars: 20,\n bban_regexp: '^[0-9]{16}$',\n IBANRegistry: true,\n },\n BB: {},\n BD: {},\n BE: { chars: 16, bban_regexp: '^[0-9]{12}$', IBANRegistry: true, SEPA: true },\n BF: {\n chars: 28,\n bban_regexp: '^[A-Z0-9]{2}[0-9]{22}$',\n },\n BG: {\n chars: 22,\n bban_regexp: '^[A-Z]{4}[0-9]{6}[A-Z0-9]{8}$',\n IBANRegistry: true,\n SEPA: true,\n },\n BH: {\n chars: 22,\n bban_regexp: '^[A-Z]{4}[A-Z0-9]{14}$',\n IBANRegistry: true,\n },\n BI: {\n chars: 16,\n bban_regexp: '^[0-9]{12}$',\n },\n BJ: {\n chars: 28,\n bban_regexp: '^[A-Z0-9]{2}[0-9]{22}$',\n },\n BL: {\n chars: 27,\n bban_regexp: '^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$',\n IBANRegistry: true,\n },\n BM: {},\n BN: {},\n BO: {},\n BQ: {},\n BR: {\n chars: 29,\n bban_regexp: '^[0-9]{23}[A-Z]{1}[A-Z0-9]{1}$',\n IBANRegistry: true,\n },\n BS: {},\n BT: {},\n BV: {},\n BW: {},\n BY: {\n chars: 28,\n bban_regexp: '^[A-Z]{4}[0-9]{4}[A-Z0-9]{16}$',\n IBANRegistry: true,\n },\n BZ: {},\n CA: {},\n CC: {},\n CD: {},\n CF: {\n chars: 27,\n bban_regexp: '^[0-9]{23}$',\n },\n CG: {\n chars: 27,\n bban_regexp: '^[0-9]{23}$',\n },\n CH: {\n chars: 21,\n bban_regexp: '^[0-9]{5}[A-Z0-9]{12}$',\n IBANRegistry: true,\n SEPA: true,\n },\n CI: {\n chars: 28,\n bban_regexp: '^[A-Z]{1}[0-9]{23}$',\n },\n CK: {},\n CL: {},\n CM: {\n chars: 27,\n bban_regexp: '^[0-9]{23}$',\n },\n CN: {},\n CO: {},\n CR: {\n chars: 22,\n bban_regexp: '^[0-9]{18}$',\n IBANRegistry: true,\n },\n CU: {},\n CV: { chars: 25, bban_regexp: '^[0-9]{21}$' },\n CW: {},\n CX: {},\n CY: {\n chars: 28,\n bban_regexp: '^[0-9]{8}[A-Z0-9]{16}$',\n IBANRegistry: true,\n SEPA: true,\n },\n CZ: { chars: 24, bban_regexp: '^[0-9]{20}$', IBANRegistry: true, SEPA: true },\n DE: { chars: 22, bban_regexp: '^[0-9]{18}$', IBANRegistry: true, SEPA: true },\n DJ: {\n chars: 27,\n bban_regexp: '^[0-9]{23}$',\n },\n DK: { chars: 18, bban_regexp: '^[0-9]{14}$', IBANRegistry: true, SEPA: true },\n DM: {},\n DO: {\n chars: 28,\n bban_regexp: '^[A-Z]{4}[0-9]{20}$',\n IBANRegistry: true,\n },\n DZ: {\n chars: 26,\n bban_regexp: '^[0-9]{22}$',\n },\n EC: {},\n EE: { chars: 20, bban_regexp: '^[0-9]{16}$', IBANRegistry: true, SEPA: true },\n EG: { chars: 29, bban_regexp: '^[0-9]{25}', IBANRegistry: true },\n EH: {},\n ER: {},\n ES: { chars: 24, bban_regexp: '^[0-9]{20}$', IBANRegistry: true, SEPA: true },\n ET: {},\n FI: { chars: 18, bban_regexp: '^[0-9]{14}$', IBANRegistry: true, SEPA: true },\n FJ: {},\n FK: {},\n FM: {},\n FO: { chars: 18, bban_regexp: '^[0-9]{14}$', IBANRegistry: true },\n FR: {\n chars: 27,\n bban_regexp: '^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$',\n IBANRegistry: true,\n SEPA: true,\n },\n GA: {\n chars: 27,\n bban_regexp: '^[0-9]{23}$',\n },\n GB: {\n chars: 22,\n bban_regexp: '^[A-Z]{4}[0-9]{14}$',\n IBANRegistry: true,\n SEPA: true,\n },\n GD: {},\n GE: {\n chars: 22,\n bban_regexp: '^[A-Z0-9]{2}[0-9]{16}$',\n IBANRegistry: true,\n },\n GF: {\n chars: 27,\n bban_regexp: '^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$',\n IBANRegistry: true,\n },\n GG: {},\n GH: {},\n GI: {\n chars: 23,\n bban_regexp: '^[A-Z]{4}[A-Z0-9]{15}$',\n IBANRegistry: true,\n SEPA: true,\n },\n GL: { chars: 18, bban_regexp: '^[0-9]{14}$', IBANRegistry: true },\n GM: {},\n GN: {},\n GP: {\n chars: 27,\n bban_regexp: '^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$',\n IBANRegistry: true,\n },\n GQ: {\n chars: 27,\n bban_regexp: '^[0-9]{23}$',\n },\n GR: {\n chars: 27,\n bban_regexp: '^[0-9]{7}[A-Z0-9]{16}$',\n IBANRegistry: true,\n SEPA: true,\n },\n GS: {},\n GT: {\n chars: 28,\n bban_regexp: '^[A-Z0-9]{24}$',\n IBANRegistry: true,\n },\n GU: {},\n GW: {\n chars: 25,\n bban_regexp: '^[A-Z]{2}[0-9]{19}$',\n },\n GY: {},\n HK: {},\n HM: {},\n HN: {\n chars: 28,\n bban_regexp: '^[A-Z]{4}[0-9]{20}$',\n },\n HR: { chars: 21, bban_regexp: '^[0-9]{17}$', IBANRegistry: true, SEPA: true },\n HT: {},\n HU: { chars: 28, bban_regexp: '^[0-9]{24}$', IBANRegistry: true, SEPA: true },\n ID: {},\n IE: {\n chars: 22,\n bban_regexp: '^[A-Z0-9]{4}[0-9]{14}$',\n IBANRegistry: true,\n SEPA: true,\n },\n IL: {\n chars: 23,\n bban_regexp: '^[0-9]{19}$',\n IBANRegistry: true,\n },\n IM: {},\n IN: {},\n IO: {},\n IQ: {\n chars: 23,\n bban_regexp: '^[A-Z]{4}[0-9]{15}$',\n IBANRegistry: true,\n },\n IR: {\n chars: 26,\n bban_regexp: '^[0-9]{22}$',\n },\n IS: { chars: 26, bban_regexp: '^[0-9]{22}$', IBANRegistry: true, SEPA: true },\n IT: {\n chars: 27,\n bban_regexp: '^[A-Z]{1}[0-9]{10}[A-Z0-9]{12}$',\n IBANRegistry: true,\n SEPA: true,\n },\n JE: {},\n JM: {},\n JO: {\n chars: 30,\n bban_regexp: '^[A-Z]{4}[0-9]{4}[A-Z0-9]{18}$',\n IBANRegistry: true,\n },\n JP: {},\n KE: {},\n KG: {},\n KH: {},\n KI: {},\n KM: {\n chars: 27,\n bban_regexp: '^[0-9]{23}$',\n },\n KN: {},\n KP: {},\n KR: {},\n KW: {\n chars: 30,\n bban_regexp: '^[A-Z]{4}[A-Z0-9]{22}$',\n IBANRegistry: true,\n },\n KY: {},\n KZ: {\n chars: 20,\n bban_regexp: '^[0-9]{3}[A-Z0-9]{13}$',\n IBANRegistry: true,\n },\n LA: {},\n LB: {\n chars: 28,\n bban_regexp: '^[0-9]{4}[A-Z0-9]{20}$',\n IBANRegistry: true,\n },\n LC: {\n chars: 32,\n bban_regexp: '^[A-Z]{4}[A-Z0-9]{24}$',\n IBANRegistry: true,\n },\n LI: {\n chars: 21,\n bban_regexp: '^[0-9]{5}[A-Z0-9]{12}$',\n IBANRegistry: true,\n SEPA: true,\n },\n LK: {},\n LR: {},\n LS: {},\n LT: { chars: 20, bban_regexp: '^[0-9]{16}$', IBANRegistry: true, SEPA: true },\n LU: {\n chars: 20,\n bban_regexp: '^[0-9]{3}[A-Z0-9]{13}$',\n IBANRegistry: true,\n SEPA: true,\n },\n LV: {\n chars: 21,\n bban_regexp: '^[A-Z]{4}[A-Z0-9]{13}$',\n IBANRegistry: true,\n SEPA: true,\n },\n LY: {\n chars: 25,\n bban_regexp: '^[0-9]{21}$',\n IBANRegistry: true,\n },\n MA: {\n chars: 28,\n bban_regexp: '^[0-9]{24}$',\n },\n MC: {\n chars: 27,\n bban_regexp: '^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$',\n IBANRegistry: true,\n SEPA: true,\n },\n MD: {\n chars: 24,\n bban_regexp: '^[A-Z0-9]{2}[A-Z0-9]{18}$',\n IBANRegistry: true,\n },\n ME: {\n chars: 22,\n bban_regexp: '^[0-9]{18}$',\n IBANRegistry: true,\n },\n MF: {\n chars: 27,\n bban_regexp: '^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$',\n IBANRegistry: true,\n },\n MG: {\n chars: 27,\n bban_regexp: '^[0-9]{23}$',\n },\n MH: {},\n MK: {\n chars: 19,\n bban_regexp: '^[0-9]{3}[A-Z0-9]{10}[0-9]{2}$',\n IBANRegistry: true,\n },\n ML: {\n chars: 28,\n bban_regexp: '^[A-Z0-9]{2}[0-9]{22}$',\n },\n MM: {},\n MN: {},\n MO: {},\n MP: {},\n MQ: {\n chars: 27,\n bban_regexp: '^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$',\n IBANRegistry: true,\n },\n MR: {\n chars: 27,\n bban_regexp: '^[0-9]{23}$',\n IBANRegistry: true,\n },\n MS: {},\n MT: {\n chars: 31,\n bban_regexp: '^[A-Z]{4}[0-9]{5}[A-Z0-9]{18}$',\n IBANRegistry: true,\n SEPA: true,\n },\n MU: {\n chars: 30,\n bban_regexp: '^[A-Z]{4}[0-9]{19}[A-Z]{3}$',\n IBANRegistry: true,\n },\n MV: {},\n MW: {},\n MX: {},\n MY: {},\n MZ: {\n chars: 25,\n bban_regexp: '^[0-9]{21}$',\n },\n NA: {},\n NC: {\n chars: 27,\n bban_regexp: '^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$',\n IBANRegistry: true,\n },\n NE: {\n chars: 28,\n bban_regexp: '^[A-Z]{2}[0-9]{22}$',\n },\n NF: {},\n NG: {},\n NI: {\n chars: 32,\n bban_regexp: '^[A-Z]{4}[0-9]{24}$',\n },\n NL: {\n chars: 18,\n bban_regexp: '^[A-Z]{4}[0-9]{10}$',\n IBANRegistry: true,\n SEPA: true,\n },\n NO: { chars: 15, bban_regexp: '^[0-9]{11}$', IBANRegistry: true, SEPA: true },\n NP: {},\n NR: {},\n NU: {},\n NZ: {},\n OM: {},\n PA: {},\n PE: {},\n PF: {\n chars: 27,\n bban_regexp: '^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$',\n IBANRegistry: true,\n },\n PG: {},\n PH: {},\n PK: {\n chars: 24,\n bban_regexp: '^[A-Z0-9]{4}[0-9]{16}$',\n IBANRegistry: true,\n },\n PL: { chars: 28, bban_regexp: '^[0-9]{24}$', IBANRegistry: true, SEPA: true },\n PM: {\n chars: 27,\n bban_regexp: '^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$',\n IBANRegistry: true,\n },\n PN: {},\n PR: {},\n PS: {\n chars: 29,\n bban_regexp: '^[A-Z0-9]{4}[0-9]{21}$',\n IBANRegistry: true,\n },\n PT: { chars: 25, bban_regexp: '^[0-9]{21}$', IBANRegistry: true, SEPA: true },\n PW: {},\n PY: {},\n QA: {\n chars: 29,\n bban_regexp: '^[A-Z]{4}[A-Z0-9]{21}$',\n IBANRegistry: true,\n },\n RE: {\n chars: 27,\n bban_regexp: '^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$',\n IBANRegistry: true,\n },\n RO: {\n chars: 24,\n bban_regexp: '^[A-Z]{4}[A-Z0-9]{16}$',\n IBANRegistry: true,\n SEPA: true,\n },\n RS: {\n chars: 22,\n bban_regexp: '^[0-9]{18}$',\n IBANRegistry: true,\n },\n RU: {},\n RW: {},\n SA: {\n chars: 24,\n bban_regexp: '^[0-9]{2}[A-Z0-9]{18}$',\n IBANRegistry: true,\n },\n SB: {},\n SC: {\n chars: 31,\n bban_regexp: '^[A-Z]{4}[0-9]{20}[A-Z]{3}$',\n IBANRegistry: true,\n },\n SD: {},\n SE: { chars: 24, bban_regexp: '^[0-9]{20}$', IBANRegistry: true, SEPA: true },\n SG: {},\n SH: {},\n SI: { chars: 19, bban_regexp: '^[0-9]{15}$', IBANRegistry: true, SEPA: true },\n SJ: {},\n SK: { chars: 24, bban_regexp: '^[0-9]{20}$', IBANRegistry: true, SEPA: true },\n SL: {},\n SM: {\n chars: 27,\n bban_regexp: '^[A-Z]{1}[0-9]{10}[A-Z0-9]{12}$',\n IBANRegistry: true,\n SEPA: true,\n },\n SN: {\n chars: 28,\n bban_regexp: '^[A-Z]{1}[0-9]{23}$',\n },\n SO: {},\n SR: {},\n SS: {},\n ST: {\n chars: 25,\n bban_regexp: '^[0-9]{21}$',\n IBANRegistry: true,\n },\n SV: {\n chars: 28,\n bban_regexp: '^[A-Z]{4}[0-9]{20}$',\n IBANRegistry: true,\n },\n SX: {},\n SY: {},\n SZ: {},\n TC: {},\n TD: {\n chars: 27,\n bban_regexp: '^[0-9]{23}$',\n },\n TF: {\n chars: 27,\n bban_regexp: '^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$',\n IBANRegistry: true,\n },\n TG: {\n chars: 28,\n bban_regexp: '^[A-Z]{2}[0-9]{22}$',\n },\n TH: {},\n TJ: {},\n TK: {},\n TL: {\n chars: 23,\n bban_regexp: '^[0-9]{19}$',\n IBANRegistry: true,\n },\n TM: {},\n TN: {\n chars: 24,\n bban_regexp: '^[0-9]{20}$',\n IBANRegistry: true,\n },\n TO: {},\n TR: {\n chars: 26,\n bban_regexp: '^[0-9]{5}[A-Z0-9]{17}$',\n IBANRegistry: true,\n },\n TT: {},\n TV: {},\n TW: {},\n TZ: {},\n UA: {\n chars: 29,\n bban_regexp: '^[0-9]{6}[A-Z0-9]{19}$',\n IBANRegistry: true,\n },\n UG: {},\n UM: {},\n US: {},\n UY: {},\n UZ: {},\n VA: { chars: 22, bban_regexp: '^[0-9]{18}', IBANRegistry: true },\n VC: {},\n VE: {},\n VG: {\n chars: 24,\n bban_regexp: '^[A-Z0-9]{4}[0-9]{16}$',\n IBANRegistry: true,\n },\n VI: {},\n VN: {},\n VU: {},\n WF: {\n chars: 27,\n bban_regexp: '^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$',\n IBANRegistry: true,\n },\n WS: {},\n XK: {\n chars: 20,\n bban_regexp: '^[0-9]{16}$',\n IBANRegistry: true,\n },\n YE: {},\n YT: {\n chars: 27,\n bban_regexp: '^[0-9]{10}[A-Z0-9]{11}[0-9]{2}$',\n IBANRegistry: true,\n },\n ZA: {},\n ZM: {},\n ZW: {},\n};\n","import { DateField } from '@/types/forms/fields/dateField';\r\nimport { FormList } from '@/types/forms/fields/formList';\r\nimport { RadioButtonsField } from '@/types/forms/fields/radioButtonsField';\r\nimport { SelectField } from '@/types/forms/fields/selectField';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { FirstAndLastNameFormGroup } from '@/types/forms/formGroups/firstAndLastNameFormGroup';\r\nimport { OperatorFormGroup } from '@/types/forms/formGroups/operatorFormGroup';\r\nimport { StreetAndHousenumberFormGroup } from '@/types/forms/formGroups/streetAndHousenumberFormGroup';\r\nimport { ZipAndCityFormGroup } from '@/types/forms/formGroups/zipAndCityFormGroup';\r\nimport { FormOption } from '@/types/forms/formOption';\r\nimport { PlantOperatorFormStep } from '@/types/forms/formSteps/plantOperatorFormStep';\r\nimport { maxDateNow } from '@/validators/maxDateNow';\r\nimport { name } from '@/validators/name';\r\nimport { houseNumber } from '@/validators/houseNumber';\r\nimport { positiveInteger } from '@/validators/positiveInteger';\r\nimport { email, maxLength, required } from 'vuelidate/lib/validators';\r\nimport { requiredDate } from '@/validators/requiredDate';\r\nimport { CheckboxField } from '@/types/forms/fields/checkboxField';\r\nimport { zip } from '@/validators/zip';\r\nimport { emailRepeatMustBeIdentical } from '@/validators/emailRepeatMustBeIdentical';\r\n\r\nexport const plantOperatorFormStep = new PlantOperatorFormStep({\r\n separatePropertyOwner: new RadioButtonsField({\r\n value: 'no',\r\n options: [\r\n new FormOption({ key: 'no' }),\r\n new FormOption({ key: 'yes' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n plantBuilder: new RadioButtonsField({\r\n value: 'operator',\r\n options: [\r\n new FormOption({ key: 'operator' }),\r\n new FormOption({ key: 'contractor' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n operators: new FormList(OperatorFormGroup, {\r\n initializeItems: 1,\r\n minItemCount: 1,\r\n maxItemCount: 2,\r\n salutation: new RadioButtonsField({\r\n value: 'mr',\r\n options: [\r\n new FormOption({ key: 'mr' }),\r\n new FormOption({ key: 'mrs' }),\r\n new FormOption({ key: 'company' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n companyName: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n title: new SelectField({\r\n value: 'untitled',\r\n options: [\r\n new FormOption({ key: 'untitled' }),\r\n new FormOption({ key: 'dr' }),\r\n new FormOption({ key: 'prof' }),\r\n new FormOption({ key: 'profDr' }),\r\n ],\r\n }),\r\n operatorName: new FirstAndLastNameFormGroup({\r\n firstName: new TextField({\r\n validators: {\r\n required,\r\n name,\r\n },\r\n }),\r\n lastName: new TextField({\r\n validators: {\r\n required,\r\n name,\r\n },\r\n }),\r\n }),\r\n contactPersonName: new FirstAndLastNameFormGroup({\r\n firstName: new TextField({\r\n validators: {\r\n required,\r\n name,\r\n },\r\n }),\r\n lastName: new TextField({\r\n validators: {\r\n required,\r\n name,\r\n },\r\n }),\r\n }),\r\n birthday: new DateField({\r\n validators: {\r\n requiredDate,\r\n maxDateNow,\r\n },\r\n }),\r\n }),\r\n country: new SelectField({\r\n value: 'deu',\r\n options: [\r\n new FormOption({ key: 'deu' }),\r\n new FormOption({ key: 'aut' }),\r\n new FormOption({ key: 'dnk' }),\r\n new FormOption({ key: 'fra' }),\r\n new FormOption({ key: 'nld' }),\r\n new FormOption({ key: 'pol' }),\r\n new FormOption({ key: 'che' }),\r\n ],\r\n }),\r\n usePlantLocation: new CheckboxField(),\r\n zipAndCity: new ZipAndCityFormGroup({\r\n zip: new TextField({\r\n validators: {\r\n required,\r\n zip: zip('application.plantOperator.country'),\r\n },\r\n }),\r\n city: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n }),\r\n streetAndHousenumber: new StreetAndHousenumberFormGroup({\r\n street: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n housenumber: new TextField({\r\n validators: {\r\n required,\r\n houseNumber,\r\n maxLength: maxLength(8),\r\n },\r\n }),\r\n }),\r\n email: new TextField({\r\n validators: {\r\n required,\r\n email,\r\n },\r\n }),\r\n emailRepeat: new TextField({\r\n validators: {\r\n required,\r\n email,\r\n emailRepeatMustBeIdentical,\r\n },\r\n }),\r\n phoneNumber1: new TextField({\r\n validators: {\r\n required,\r\n phoneNumber: positiveInteger,\r\n },\r\n }),\r\n phoneNumber2: new TextField({\r\n validators: {\r\n phoneNumber: positiveInteger,\r\n },\r\n }),\r\n});\r\n","import { FormStep } from '../formStep';\r\nimport { TextField } from '../fields/textField';\r\nimport { SelectField } from '../fields/selectField';\r\nimport { FirstAndLastNameFormGroup } from '../formGroups/firstAndLastNameFormGroup';\r\nimport { ZipAndCityFormGroup } from '../formGroups/zipAndCityFormGroup';\r\nimport { StreetAndHousenumberFormGroup } from '../formGroups/streetAndHousenumberFormGroup';\r\nimport type { CountryValueType } from '../shared/countryValueType';\r\nimport { WithOptional } from '../utility';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class PlantBuilderFormStep extends FormStep {\r\n public readonly companyName: TextField;\r\n public readonly builderName: FirstAndLastNameFormGroup;\r\n public readonly country: SelectField;\r\n public readonly zipAndCity: ZipAndCityFormGroup;\r\n public readonly streetAndHousenumber: StreetAndHousenumberFormGroup;\r\n public readonly email: TextField;\r\n public readonly phoneNumber1: TextField;\r\n public readonly phoneNumber2: TextField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.companyName = config.companyName;\r\n this.builderName = config.builderName;\r\n this.country = config.country;\r\n this.zipAndCity = config.zipAndCity;\r\n this.streetAndHousenumber = config.streetAndHousenumber;\r\n this.email = config.email;\r\n this.phoneNumber1 = config.phoneNumber1;\r\n this.phoneNumber2 = config.phoneNumber2;\r\n }\r\n}\r\n","import { required, email, maxLength } from 'vuelidate/lib/validators';\r\nimport { name } from '@/validators/name';\r\nimport { houseNumber } from '@/validators/houseNumber';\r\nimport { FormOption } from '@/types/forms/formOption';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { SelectField } from '@/types/forms/fields/selectField';\r\nimport { ZipAndCityFormGroup } from '@/types/forms/formGroups/zipAndCityFormGroup';\r\nimport { StreetAndHousenumberFormGroup } from '@/types/forms/formGroups/streetAndHousenumberFormGroup';\r\nimport { PlantBuilderFormStep } from '@/types/forms/formSteps/plantBuilderFormStep';\r\nimport { FirstAndLastNameFormGroup } from '@/types/forms/formGroups/firstAndLastNameFormGroup';\r\nimport { positiveInteger } from '@/validators/positiveInteger';\r\nimport { zip } from '@/validators/zip';\r\n\r\nexport const plantBuilderFormStep = new PlantBuilderFormStep({\r\n companyName: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n builderName: new FirstAndLastNameFormGroup({\r\n firstName: new TextField({\r\n validators: {\r\n name,\r\n },\r\n }),\r\n lastName: new TextField({\r\n validators: {\r\n name,\r\n },\r\n }),\r\n }),\r\n country: new SelectField({\r\n value: 'deu',\r\n options: [\r\n new FormOption({ key: 'deu' }),\r\n new FormOption({ key: 'aut' }),\r\n new FormOption({ key: 'dnk' }),\r\n new FormOption({ key: 'fra' }),\r\n new FormOption({ key: 'nld' }),\r\n new FormOption({ key: 'pol' }),\r\n new FormOption({ key: 'che' }),\r\n ],\r\n }),\r\n zipAndCity: new ZipAndCityFormGroup({\r\n zip: new TextField({\r\n validators: {\r\n required,\r\n zip: zip('application.plantBuilder.country'),\r\n },\r\n }),\r\n city: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n }),\r\n streetAndHousenumber: new StreetAndHousenumberFormGroup({\r\n street: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n housenumber: new TextField({\r\n validators: {\r\n required,\r\n houseNumber,\r\n maxLength: maxLength(8),\r\n },\r\n }),\r\n }),\r\n email: new TextField({\r\n validators: {\r\n required,\r\n email,\r\n },\r\n }),\r\n phoneNumber1: new TextField({\r\n validators: {\r\n required,\r\n phoneNumber: positiveInteger,\r\n },\r\n }),\r\n phoneNumber2: new TextField({\r\n validators: {\r\n phoneNumber: positiveInteger,\r\n },\r\n }),\r\n});\r\n","import { CheckboxField } from '../fields/checkboxField';\r\nimport { DateField } from '../fields/dateField';\r\nimport { RadioButtonsField } from '../fields/radioButtonsField';\r\nimport { SelectField } from '../fields/selectField';\r\nimport { TextField } from '../fields/textField';\r\nimport { FormElement } from '../formElement';\r\nimport { FormStep } from '../formStep';\r\nimport { NewOrExistingApplicationValueType } from '../shared/newOrExistingApplicationValueType';\r\nimport { NewOrExistingPlantValueType } from '../shared/newOrExistingPlantValueType';\r\nimport { PlantBuildingTypeValueType } from '../shared/plantBuildingTypeValueType';\r\nimport { PlantPositionValueType } from '../shared/plantPositionValueType';\r\nimport { PowerHeatCouplingPlantTypeValueType } from '../shared/powerHeatCouplingPlantTypeValueType';\r\nimport { PvInstallationTypeValueType } from '../shared/pvInstallationTypeValueType';\r\nimport { PvInstallationTypeForAgriculturalLandOrParkingLotsValueType } from '../shared/pvInstallationTypeForAgriculturalLandOrParkingLotsValueType';\r\nimport { StorageBalancingEnergyMarketParticipationTypeValueType } from '../shared/storageBalancingEnergyMarketParticipationTypeValueType';\r\nimport { StorageChargeValueType } from '../shared/storageChargeValueType';\r\nimport { StorageConnectionConceptValueType } from '../shared/storageConnectionConceptValueType';\r\nimport { StorageCouplingValueType } from '../shared/storageCouplingValueType';\r\nimport { StorageDischargeValueType } from '../shared/storageDischargeValueType';\r\nimport { WithOptional } from '../utility';\r\nimport { InfeedManagementFormGroup } from '../formGroups/plantData/infeedManagement/infeedManagementFormGroup';\r\nimport { PlantBuildingTypeForTenantElectricitySurchargeValueType } from '../shared/plantBuildingTypeForTenantElectricitySurchargeValueType';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class PlantDataFormStep extends FormStep {\r\n public readonly newOrExistingApplication: RadioButtonsField<\r\n NewOrExistingApplicationValueType\r\n >;\r\n public readonly applicationNumber: TextField;\r\n public readonly newOrExistingPlant: RadioButtonsField<\r\n NewOrExistingPlantValueType\r\n >;\r\n public readonly powerHeatCouplingPlantType: RadioButtonsField<\r\n PowerHeatCouplingPlantTypeValueType\r\n >;\r\n public readonly powerHeatCouplingPaymentsBasedOnLawHint: FormElement;\r\n public readonly bafaApprovalWillBeSubmittedLater: CheckboxField;\r\n public readonly plantWasAlreadyCommissioned: CheckboxField;\r\n public readonly initialCommissioningDate: DateField;\r\n\r\n public readonly plantBuildingType: RadioButtonsField<\r\n PlantBuildingTypeValueType\r\n >;\r\n public readonly plantBuildingTypeForTenantElectricitySurcharge: RadioButtonsField<\r\n PlantBuildingTypeForTenantElectricitySurchargeValueType\r\n >;\r\n public readonly plantPosition: RadioButtonsField;\r\n public readonly pvInstallationType: RadioButtonsField<\r\n PvInstallationTypeValueType\r\n >;\r\n public readonly pvInstallationTypeForAgriculturalLandOrParkingLots: RadioButtonsField<\r\n PvInstallationTypeForAgriculturalLandOrParkingLotsValueType\r\n >;\r\n public readonly storageConnection: FormElement;\r\n public readonly storageCoupling: SelectField;\r\n public readonly storageConnectionConcept: RadioButtonsField<\r\n StorageConnectionConceptValueType\r\n >;\r\n public readonly electricityTaxExemptionHint: FormElement;\r\n public readonly tenantElectricitySurcharge: CheckboxField;\r\n public readonly requirementTenantElectricitySurchargeHint: FormElement;\r\n public readonly minimumRequirementLivingSpace: CheckboxField;\r\n public readonly noResidentialExemptions: CheckboxField;\r\n public readonly electricityConsumptionWithinThisBuilding: CheckboxField;\r\n public readonly noAdditionalNetworkForEndConsumer: CheckboxField;\r\n public readonly federalNetworkAgencyHint: FormElement;\r\n public readonly proofOfRegistrationPhotovoltaic: CheckboxField;\r\n public readonly proofOfAllocationOfTenantElectricitySurcharge: CheckboxField;\r\n public readonly declarationEnwgHint: FormElement;\r\n public readonly plantOperatorKnowsEnwgSpecifications: CheckboxField;\r\n public readonly storageCharge: SelectField;\r\n public readonly storageDischarge: SelectField;\r\n public readonly storagePublicDischargeWarning: FormElement;\r\n public readonly storageBalancingEnergyMarketParticipation: CheckboxField;\r\n public readonly storageBalancingEnergyMarketParticipationType: RadioButtonsField<\r\n StorageBalancingEnergyMarketParticipationTypeValueType\r\n >;\r\n public readonly infeedManagement: InfeedManagementFormGroup;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.newOrExistingApplication = config.newOrExistingApplication;\r\n this.applicationNumber = config.applicationNumber;\r\n this.newOrExistingPlant = config.newOrExistingPlant;\r\n this.powerHeatCouplingPlantType = config.powerHeatCouplingPlantType;\r\n this.powerHeatCouplingPaymentsBasedOnLawHint =\r\n config.powerHeatCouplingPaymentsBasedOnLawHint;\r\n this.bafaApprovalWillBeSubmittedLater =\r\n config.bafaApprovalWillBeSubmittedLater;\r\n this.plantWasAlreadyCommissioned = config.plantWasAlreadyCommissioned;\r\n this.initialCommissioningDate = config.initialCommissioningDate;\r\n this.plantBuildingType = config.plantBuildingType;\r\n this.plantBuildingTypeForTenantElectricitySurcharge =\r\n config.plantBuildingTypeForTenantElectricitySurcharge;\r\n this.plantPosition = config.plantPosition;\r\n this.pvInstallationType = config.pvInstallationType;\r\n this.pvInstallationTypeForAgriculturalLandOrParkingLots =\r\n config.pvInstallationTypeForAgriculturalLandOrParkingLots;\r\n this.storageConnection = config.storageConnection;\r\n this.storageCoupling = config.storageCoupling;\r\n this.storageConnectionConcept = config.storageConnectionConcept;\r\n this.electricityTaxExemptionHint = config.electricityTaxExemptionHint;\r\n this.tenantElectricitySurcharge = config.tenantElectricitySurcharge;\r\n this.requirementTenantElectricitySurchargeHint =\r\n config.requirementTenantElectricitySurchargeHint;\r\n this.minimumRequirementLivingSpace =\r\n config.minimumRequirementLivingSpace;\r\n this.noResidentialExemptions = config.noResidentialExemptions;\r\n this.electricityConsumptionWithinThisBuilding =\r\n config.electricityConsumptionWithinThisBuilding;\r\n this.noAdditionalNetworkForEndConsumer =\r\n config.noAdditionalNetworkForEndConsumer;\r\n this.federalNetworkAgencyHint = config.federalNetworkAgencyHint;\r\n this.proofOfRegistrationPhotovoltaic =\r\n config.proofOfRegistrationPhotovoltaic;\r\n this.proofOfAllocationOfTenantElectricitySurcharge =\r\n config.proofOfAllocationOfTenantElectricitySurcharge;\r\n this.declarationEnwgHint = config.declarationEnwgHint;\r\n this.plantOperatorKnowsEnwgSpecifications =\r\n config.plantOperatorKnowsEnwgSpecifications;\r\n this.storageCharge = config.storageCharge;\r\n this.storageDischarge = config.storageDischarge;\r\n this.storagePublicDischargeWarning =\r\n config.storagePublicDischargeWarning;\r\n this.storageBalancingEnergyMarketParticipation =\r\n config.storageBalancingEnergyMarketParticipation;\r\n this.storageBalancingEnergyMarketParticipationType =\r\n config.storageBalancingEnergyMarketParticipationType;\r\n this.infeedManagement = config.infeedManagement;\r\n }\r\n}\r\n","import { ValidationRule, helpers } from 'vuelidate/lib/validators';\r\nimport { isValidIBAN } from 'ibantools';\r\n\r\nexport const iban = ((value: string): boolean => {\r\n return !helpers.req(value) || isValidIBAN(value);\r\n}) as ValidationRule;\r\n","import { DateField } from '@/types/forms/fields/dateField';\r\nimport { RadioButtonsField } from '@/types/forms/fields/radioButtonsField';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { FormGroup } from '@/types/forms/formGroup';\r\nimport { BillingValueType } from '@/types/forms/shared/billingValueType';\r\nimport { PowerReductionValueType } from '@/types/forms/shared/powerReductionValueType';\r\nimport { WithOptional } from '@/types/forms/utility';\r\nimport { toneFrequencyReceiverToPlantOperatorOrBuilderValueType } from '@/types/forms/shared/toneFrequencyReceiverToPlantOperatorOrBuilderValueType';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class InfeedManagementFormGroup extends FormGroup {\r\n public readonly imHeadline: FormElement;\r\n public readonly imPowerReductionType: RadioButtonsField<\r\n PowerReductionValueType\r\n >;\r\n public readonly toneFrequencyReceiverToPlantOperatorOrBuilder: RadioButtonsField<\r\n toneFrequencyReceiverToPlantOperatorOrBuilderValueType\r\n >;\r\n public readonly imAudioFrequencyControlReceiverContract: FormElement;\r\n public readonly imProvisionThrough: TextField;\r\n public readonly imTechnicalSpecificationsNote: FormElement;\r\n\r\n public readonly imBilling: RadioButtonsField;\r\n public readonly imDirectDebitMandate: FormElement;\r\n public readonly imIban: TextField;\r\n public readonly imCreditInstitutionName: TextField;\r\n public readonly imAccountHolderName: TextField;\r\n public readonly imBillingDate: DateField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.imHeadline = config.imHeadline;\r\n this.imPowerReductionType = config.imPowerReductionType;\r\n this.imAudioFrequencyControlReceiverContract =\r\n config.imAudioFrequencyControlReceiverContract;\r\n this.imProvisionThrough = config.imProvisionThrough;\r\n this.imTechnicalSpecificationsNote =\r\n config.imTechnicalSpecificationsNote;\r\n this.imBilling = config.imBilling;\r\n this.imDirectDebitMandate = config.imDirectDebitMandate;\r\n this.imIban = config.imIban;\r\n this.imCreditInstitutionName = config.imCreditInstitutionName;\r\n this.imAccountHolderName = config.imAccountHolderName;\r\n this.imBillingDate = config.imBillingDate;\r\n this.toneFrequencyReceiverToPlantOperatorOrBuilder =\r\n config.toneFrequencyReceiverToPlantOperatorOrBuilder;\r\n }\r\n}\r\n","import { FormElement } from '@/types/forms/formElement';\r\nimport { FormOption } from '@/types/forms/formOption';\r\nimport { required } from 'vuelidate/lib/validators';\r\nimport { iban } from '@/validators/iban';\r\nimport { requiredDate } from '@/validators/requiredDate';\r\nimport { InfeedManagementFormGroup } from '@/types/forms/formGroups/plantData/infeedManagement/infeedManagementFormGroup';\r\nimport { RadioButtonsField } from '@/types/forms/fields/radioButtonsField';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { DateField } from '@/types/forms/fields/dateField';\r\n\r\nexport const infeedManagementFormGroup = new InfeedManagementFormGroup({\r\n imHeadline: new FormElement(),\r\n imPowerReductionType: new RadioButtonsField({\r\n value: 'noPowerReduction',\r\n options: [\r\n new FormOption({ key: 'noPowerReduction' }),\r\n new FormOption({ key: 'audioFrequencyControlReceiverInternal' }),\r\n new FormOption({ key: 'audioFrequencyControlReceiverExternal' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n toneFrequencyReceiverToPlantOperatorOrBuilder: new RadioButtonsField({\r\n options: [\r\n new FormOption({ key: 'plantBuilder' }),\r\n new FormOption({ key: 'plantOperator' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n imAudioFrequencyControlReceiverContract: new FormElement(),\r\n imProvisionThrough: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n imTechnicalSpecificationsNote: new FormElement(),\r\n imBilling: new RadioButtonsField({\r\n value: 'invoice',\r\n options: [\r\n new FormOption({ key: 'invoice' }),\r\n new FormOption({ key: 'sepa' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n imDirectDebitMandate: new FormElement(),\r\n imIban: new TextField({\r\n validators: {\r\n required,\r\n iban,\r\n },\r\n }),\r\n imCreditInstitutionName: new TextField(),\r\n imAccountHolderName: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n imBillingDate: new DateField({\r\n validators: {\r\n requiredDate,\r\n },\r\n }),\r\n});\r\n","import { required } from 'vuelidate/lib/validators';\r\nimport { checked } from '@/validators/checked';\r\nimport { RadioButtonsField } from '@/types/forms/fields/radioButtonsField';\r\nimport { FormOption } from '@/types/forms/formOption';\r\nimport { PlantDataFormStep } from '@/types/forms/formSteps/plantDataFormStep';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { SelectField } from '@/types/forms/fields/selectField';\r\nimport { CheckboxField } from '@/types/forms/fields/checkboxField';\r\nimport { maxDateNow } from '@/validators/maxDateNow';\r\nimport { DateField } from '@/types/forms/fields/dateField';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { infeedManagementFormGroup } from './plantData/infeedManagement';\r\n\r\nexport const plantDataFormStep = new PlantDataFormStep({\r\n newOrExistingApplication: new RadioButtonsField({\r\n value: 'new',\r\n options: [\r\n new FormOption({ key: 'new' }),\r\n new FormOption({ key: 'change' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n applicationNumber: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n newOrExistingPlant: new RadioButtonsField({\r\n value: 'first',\r\n options: [\r\n new FormOption({ key: 'first' }),\r\n new FormOption({ key: 'additional' }),\r\n new FormOption({ key: 'performanceIncrease' }),\r\n new FormOption({ key: 'capacityIncrease' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n powerHeatCouplingPlantType: new RadioButtonsField({\r\n value: 'nonHighEfficiencyChpPlant',\r\n options: [\r\n new FormOption({ key: 'nonHighEfficiencyChpPlant' }),\r\n new FormOption({ key: 'highEfficiencyChpPlant' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n powerHeatCouplingPaymentsBasedOnLawHint: new FormElement(),\r\n bafaApprovalWillBeSubmittedLater: new CheckboxField(),\r\n plantWasAlreadyCommissioned: new CheckboxField(),\r\n initialCommissioningDate: new DateField({\r\n validators: {\r\n maxDateNow,\r\n },\r\n }),\r\n plantBuildingType: new RadioButtonsField({\r\n value: 'residentialBuilding',\r\n options: [\r\n new FormOption({ key: 'residentialBuilding' }),\r\n new FormOption({ key: 'noResidentialBuilding' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n plantBuildingTypeForTenantElectricitySurcharge: new RadioButtonsField({\r\n value: 'residentialBuilding',\r\n options: [\r\n new FormOption({ key: 'residentialBuilding' }),\r\n new FormOption({ key: 'noResidentialBuilding' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n plantPosition: new RadioButtonsField({\r\n value: 'indoor',\r\n options: [\r\n new FormOption({ key: 'indoor' }),\r\n new FormOption({ key: 'outdoor' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n pvInstallationType: new RadioButtonsField({\r\n value: 'residentialOrSimilarBuilding',\r\n options: [\r\n new FormOption({ key: 'residentialOrSimilarBuilding' }),\r\n new FormOption({ key: 'outsideNonResidentialBuilding' }),\r\n new FormOption({ key: 'outsideNonResidentialBuildingEEG48Abs1' }),\r\n new FormOption({ key: 'structuralFacility' }),\r\n new FormOption({ key: 'nextToResidentialBuilding' }),\r\n new FormOption({ key: 'publicWasteDisposalFacilities' }),\r\n new FormOption({ key: 'approvedDevelopmentPlan' }),\r\n new FormOption({ key: 'agriculturalLandOrParkingLots' }),\r\n new FormOption({ key: 'artificialWaterBody' }),\r\n new FormOption({ key: 'drainedPeatland' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n pvInstallationTypeForAgriculturalLandOrParkingLots: new RadioButtonsField({\r\n value: 'agriculturalLand',\r\n options: [\r\n new FormOption({ key: 'agriculturalLand' }),\r\n new FormOption({ key: 'permanentCrops' }),\r\n new FormOption({ key: 'grassLand' }),\r\n new FormOption({ key: 'parkingLots' }),\r\n new FormOption({ key: 'peatSoils' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n storageCoupling: new SelectField({\r\n options: [\r\n new FormOption({\r\n key: 'acCoupled',\r\n }),\r\n new FormOption({\r\n key: 'dcCoupled',\r\n }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n storageConnectionConcept: new RadioButtonsField({\r\n value:\r\n 'powerGenerationPlantWithStorageInTheConsumerPathAndConsumptionPlant',\r\n options: [\r\n new FormOption({\r\n key:\r\n 'powerGenerationPlantWithStorageInTheConsumerPathAndConsumptionPlant',\r\n }),\r\n new FormOption({\r\n key:\r\n 'storageWithoutPowerGenerationPlantAndWithoutConsumptionPlant',\r\n }),\r\n new FormOption({\r\n key:\r\n 'storageWithoutPowerGenerationPlantAndWithConsumptionPlant',\r\n }),\r\n new FormOption({\r\n key:\r\n 'storageFacilityWithPowerGenerationPlantAndWithoutConsumptionPlant',\r\n }),\r\n new FormOption({\r\n key:\r\n 'powerGenerationPlantWithStorageFacilityInTheGenerationPathAndConsumptionPlant',\r\n }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n electricityTaxExemptionHint: new FormElement(),\r\n tenantElectricitySurcharge: new CheckboxField(),\r\n requirementTenantElectricitySurchargeHint: new FormElement(),\r\n minimumRequirementLivingSpace: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n noResidentialExemptions: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n electricityConsumptionWithinThisBuilding: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n noAdditionalNetworkForEndConsumer: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n federalNetworkAgencyHint: new FormElement(),\r\n proofOfRegistrationPhotovoltaic: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n proofOfAllocationOfTenantElectricitySurcharge: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n declarationEnwgHint: new FormElement(),\r\n plantOperatorKnowsEnwgSpecifications: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n storageConnection: new FormElement(),\r\n storageCharge: new SelectField({\r\n options: [\r\n new FormOption({ key: 'onlyFromEeg' }),\r\n new FormOption({ key: 'onlyFromKwkg' }),\r\n new FormOption({ key: 'fromEegAndKwkg' }),\r\n new FormOption({ key: 'onlyFromPublicGrid' }),\r\n new FormOption({ key: 'fromPublicGridAndEeg' }),\r\n new FormOption({ key: 'fromPublicGridAndKwkg' }),\r\n new FormOption({ key: 'fromPublicGridAndEegAndKwkg' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n storageDischarge: new SelectField({\r\n options: [\r\n new FormOption({ key: 'onlyIntoCustomersGridSelfSupply' }),\r\n new FormOption({ key: 'onlyIntoPublicGridGridFeedIn' }),\r\n new FormOption({ key: 'intoCustomersGridAndPublicGridBivalent' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n storagePublicDischargeWarning: new FormElement(),\r\n storageBalancingEnergyMarketParticipation: new CheckboxField(),\r\n storageBalancingEnergyMarketParticipationType: new RadioButtonsField({\r\n value: 'positiveAndNegative',\r\n options: [\r\n new FormOption({ key: 'positiveAndNegative' }),\r\n new FormOption({ key: 'onlyPositive' }),\r\n new FormOption({ key: 'onlyNegative' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n infeedManagement: infeedManagementFormGroup,\r\n});\r\n","import { DateField } from '../fields/dateField';\r\nimport { RadioButtonsField } from '../fields/radioButtonsField';\r\nimport { SelectField } from '../fields/selectField';\r\nimport { TextField } from '../fields/textField';\r\nimport { StreetAndHousenumberFormGroup } from '../formGroups/streetAndHousenumberFormGroup';\r\nimport { ZipAndCityFormGroup } from '../formGroups/zipAndCityFormGroup';\r\nimport type { CountryValueType } from '../shared/countryValueType';\r\nimport { FormElementConfig } from '../formElement';\r\nimport { FormGroup } from '../formGroup';\r\nimport type { SalutationValueType } from '../shared/salutationValueType';\r\nimport type { TitleValueType } from '../shared/titleValueType';\r\nimport { FirstAndLastNameFormGroup } from './firstAndLastNameFormGroup';\r\n\r\nexport type OwnerFormGroupConfig = FormElementConfig &\r\n Omit;\r\n\r\nexport class OwnerFormGroup extends FormGroup {\r\n public readonly salutation: RadioButtonsField;\r\n public readonly companyName: TextField;\r\n public readonly title: SelectField;\r\n public readonly ownerName: FirstAndLastNameFormGroup;\r\n public readonly contactPersonName: FirstAndLastNameFormGroup;\r\n public readonly birthday: DateField;\r\n public readonly country: SelectField;\r\n public readonly zipAndCity: ZipAndCityFormGroup;\r\n public readonly streetAndHousenumber: StreetAndHousenumberFormGroup;\r\n public readonly email: TextField;\r\n public readonly phoneNumber1: TextField;\r\n public readonly phoneNumber2: TextField;\r\n\r\n public constructor(config: OwnerFormGroupConfig) {\r\n super(config);\r\n\r\n this.salutation = config.salutation;\r\n this.companyName = config.companyName;\r\n this.title = config.title;\r\n this.ownerName = config.ownerName;\r\n this.contactPersonName = config.contactPersonName;\r\n this.birthday = config.birthday;\r\n this.country = config.country;\r\n this.zipAndCity = config.zipAndCity;\r\n this.streetAndHousenumber = config.streetAndHousenumber;\r\n this.email = config.email;\r\n this.phoneNumber1 = config.phoneNumber1;\r\n this.phoneNumber2 = config.phoneNumber2;\r\n }\r\n}\r\n","import { CheckboxField } from '../fields/checkboxField';\r\nimport { OwnerFormListType } from '../formGroups/ownerFormList';\r\nimport { FormStep } from '../formStep';\r\nimport { WithOptional } from '../utility';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class PropertyOwnerFormStep extends FormStep {\r\n public readonly propertyOwnerAgreement: CheckboxField;\r\n public readonly owners: OwnerFormListType;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.propertyOwnerAgreement = config.propertyOwnerAgreement;\r\n this.owners = config.owners;\r\n }\r\n}\r\n","import { CheckboxField } from '@/types/forms/fields/checkboxField';\r\nimport { checked } from '@/validators/checked';\r\nimport { DateField } from '@/types/forms/fields/dateField';\r\nimport { FormList } from '@/types/forms/fields/formList';\r\nimport { RadioButtonsField } from '@/types/forms/fields/radioButtonsField';\r\nimport { SelectField } from '@/types/forms/fields/selectField';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { FirstAndLastNameFormGroup } from '@/types/forms/formGroups/firstAndLastNameFormGroup';\r\nimport { OwnerFormGroup } from '@/types/forms/formGroups/ownerFormGroup';\r\nimport { StreetAndHousenumberFormGroup } from '@/types/forms/formGroups/streetAndHousenumberFormGroup';\r\nimport { ZipAndCityFormGroup } from '@/types/forms/formGroups/zipAndCityFormGroup';\r\nimport { FormOption } from '@/types/forms/formOption';\r\nimport { PropertyOwnerFormStep } from '@/types/forms/formSteps/propertyOwnerFormStep';\r\nimport { maxDateNow } from '@/validators/maxDateNow';\r\nimport { name } from '@/validators/name';\r\nimport { houseNumber } from '@/validators/houseNumber';\r\nimport { positiveInteger } from '@/validators/positiveInteger';\r\nimport { email, maxLength, required } from 'vuelidate/lib/validators';\r\nimport { zip } from '@/validators/zip';\r\n\r\nexport const propertyOwnerFormStep = new PropertyOwnerFormStep({\r\n propertyOwnerAgreement: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n owners: new FormList(OwnerFormGroup, {\r\n initializeItems: 1,\r\n minItemCount: 1,\r\n maxItemCount: 3,\r\n salutation: new RadioButtonsField({\r\n value: 'mr',\r\n options: [\r\n new FormOption({ key: 'mr' }),\r\n new FormOption({ key: 'mrs' }),\r\n new FormOption({ key: 'company' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n companyName: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n title: new SelectField({\r\n value: 'untitled',\r\n options: [\r\n new FormOption({ key: 'untitled' }),\r\n new FormOption({ key: 'dr' }),\r\n new FormOption({ key: 'prof' }),\r\n new FormOption({ key: 'profDr' }),\r\n ],\r\n }),\r\n ownerName: new FirstAndLastNameFormGroup({\r\n firstName: new TextField({\r\n validators: {\r\n required,\r\n name,\r\n },\r\n }),\r\n lastName: new TextField({\r\n validators: {\r\n required,\r\n name,\r\n },\r\n }),\r\n }),\r\n contactPersonName: new FirstAndLastNameFormGroup({\r\n firstName: new TextField({\r\n validators: {\r\n required,\r\n name,\r\n },\r\n }),\r\n lastName: new TextField({\r\n validators: {\r\n required,\r\n name,\r\n },\r\n }),\r\n }),\r\n birthday: new DateField({\r\n validators: {\r\n maxDateNow,\r\n },\r\n }),\r\n country: new SelectField({\r\n value: 'deu',\r\n options: [\r\n new FormOption({ key: 'deu' }),\r\n new FormOption({ key: 'aut' }),\r\n new FormOption({ key: 'dnk' }),\r\n new FormOption({ key: 'fra' }),\r\n new FormOption({ key: 'nld' }),\r\n new FormOption({ key: 'pol' }),\r\n new FormOption({ key: 'che' }),\r\n ],\r\n }),\r\n zipAndCity: new ZipAndCityFormGroup({\r\n zip: new TextField({\r\n validators: {\r\n required,\r\n zip: zip(\r\n 'application.propertyOwner.owners.items[*].country',\r\n ),\r\n },\r\n }),\r\n city: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n }),\r\n streetAndHousenumber: new StreetAndHousenumberFormGroup({\r\n street: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n housenumber: new TextField({\r\n validators: {\r\n required,\r\n houseNumber,\r\n maxLength: maxLength(8),\r\n },\r\n }),\r\n }),\r\n email: new TextField({\r\n validators: {\r\n email,\r\n },\r\n }),\r\n phoneNumber1: new TextField({\r\n validators: {\r\n required,\r\n phoneNumber: positiveInteger,\r\n },\r\n }),\r\n phoneNumber2: new TextField({\r\n validators: {\r\n phoneNumber: positiveInteger,\r\n },\r\n }),\r\n }),\r\n});\r\n","import { CheckboxField } from '../fields/checkboxField';\r\nimport { RadioButtonsField } from '../fields/radioButtonsField';\r\nimport { SelectField } from '../fields/selectField';\r\nimport { TextField } from '../fields/textField';\r\nimport { FormElement } from '../formElement';\r\nimport { FormStep } from '../formStep';\r\nimport { MeasuringConceptOperatingModeType } from '../shared/measuringConceptsOperatingModeType';\r\nimport { MeasuringPointOperationType } from '../shared/measuringPointOperationType';\r\nimport { WithOptional } from '../utility';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class MeasuringConceptsFormStep extends FormStep {\r\n public readonly operatingMode: SelectField<\r\n MeasuringConceptOperatingModeType\r\n >;\r\n public readonly operatingModeStorage: SelectField<\r\n MeasuringConceptOperatingModeType\r\n >;\r\n public readonly fullInfeedBonusHeadline: FormElement;\r\n public readonly fullInfeedBonus: CheckboxField;\r\n public readonly measuringPointOperatorInfo: FormElement;\r\n public readonly measuringPointOperation: RadioButtonsField<\r\n MeasuringPointOperationType\r\n >;\r\n public readonly meterNumber: TextField;\r\n public readonly measuringPointOperator: SelectField;\r\n public readonly priceSheetMeasuringPointOperation: FormElement;\r\n public readonly measuringPointOperationInfoEwe: FormElement;\r\n public readonly measuringPointOperationFollowingConditionsAndGtacEwe: CheckboxField;\r\n public readonly measuringPointOperationInfoOther: FormElement;\r\n public readonly selfGenerationQuantity: TextField;\r\n public readonly selfSupplyQuantity: TextField;\r\n public readonly remainingElectricityInfo: FormElement;\r\n public readonly storageHeadline: FormElement;\r\n\r\n constructor(config: ConfigProps) {\r\n super(config);\r\n this.operatingMode = config.operatingMode;\r\n this.operatingModeStorage = config.operatingModeStorage;\r\n this.fullInfeedBonusHeadline = config.fullInfeedBonusHeadline;\r\n this.fullInfeedBonus = config.fullInfeedBonus;\r\n this.measuringPointOperatorInfo = config.measuringPointOperatorInfo;\r\n this.measuringPointOperation = config.measuringPointOperation;\r\n this.meterNumber = config.meterNumber;\r\n this.measuringPointOperator = config.measuringPointOperator;\r\n this.priceSheetMeasuringPointOperation =\r\n config.priceSheetMeasuringPointOperation;\r\n this.measuringPointOperationInfoEwe =\r\n config.measuringPointOperationInfoEwe;\r\n this.measuringPointOperationFollowingConditionsAndGtacEwe =\r\n config.measuringPointOperationFollowingConditionsAndGtacEwe;\r\n this.measuringPointOperationInfoOther =\r\n config.measuringPointOperationInfoOther;\r\n this.selfGenerationQuantity = config.selfGenerationQuantity;\r\n this.selfSupplyQuantity = config.selfSupplyQuantity;\r\n this.remainingElectricityInfo = config.remainingElectricityInfo;\r\n this.storageHeadline = config.storageHeadline;\r\n }\r\n}\r\n","import { parseGermanFloat } from '@/utilities/germanFormats';\r\nimport { ValidationRule } from 'vuelidate/lib/validators';\r\n\r\ninterface SelfGenerationQuantityPartialVm {\r\n selfGenerationQuantity: string;\r\n}\r\n\r\nexport const mustBeLowerThanOrEqualToSelfGenerationQuantity = ((\r\n value: string,\r\n vm: SelfGenerationQuantityPartialVm,\r\n) => {\r\n const selfGenerationQuantity = parseGermanFloat(\r\n vm.selfGenerationQuantity || '0',\r\n );\r\n const val = parseGermanFloat(value || '0');\r\n return val <= selfGenerationQuantity;\r\n}) as ValidationRule;\r\n","import { isPv } from '@/services/form/rules/application/common';\r\nimport { Forms } from '@/types/forms/forms';\r\nimport { parseGermanFloat } from '@/utilities/germanFormats';\r\nimport { CombinedVueInstance } from 'vue/types/vue';\r\nimport { ValidationRule } from 'vuelidate/lib/validators';\r\n\r\n// eslint-disable-next-line @typescript-eslint/comma-dangle\r\nexport const mustBeNoMoreThan20PercentAboveSuggestion = function <\r\n Instance extends Vue\r\n>(\r\n this: CombinedVueInstance<\r\n Instance,\r\n { model: Forms },\r\n unknown,\r\n unknown,\r\n unknown\r\n >,\r\n value: string,\r\n) {\r\n const pv = isPv(this.model.application);\r\n if (!pv) {\r\n return true;\r\n }\r\n const PV_OVERALLNOMINALPOWER_TO_SELFGENERATIONQUANTITY_FACTOR = 850;\r\n const selfGenerationQuantitySuggestion =\r\n (this.model.application.plantPerformance.photovoltaic\r\n .pvOverallNominalPower.value ?? 0) *\r\n PV_OVERALLNOMINALPOWER_TO_SELFGENERATIONQUANTITY_FACTOR;\r\n\r\n const val = parseGermanFloat(value || '0');\r\n return val <= selfGenerationQuantitySuggestion * 1.2;\r\n} as ValidationRule;\r\n","import { CheckboxField } from '@/types/forms/fields/checkboxField';\r\nimport { RadioButtonsField } from '@/types/forms/fields/radioButtonsField';\r\nimport { SelectField } from '@/types/forms/fields/selectField';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { FormOption } from '@/types/forms/formOption';\r\nimport { MeasuringConceptsFormStep } from '@/types/forms/formSteps/measuringConceptsFormStep';\r\nimport { checked } from '@/validators/checked';\r\nimport { float } from '@/validators/float';\r\nimport { mustBeLowerThanOrEqualToSelfGenerationQuantity } from '@/validators/mustBeLowerThanOrEqualToSelfGenerationQuantity';\r\nimport { mustBeNoMoreThan20PercentAboveSuggestion } from '@/validators/mustBeNoMoreThan20PercentAboveSuggestion';\r\nimport { positive } from '@/validators/positive';\r\nimport { alphaNum, maxLength, required } from 'vuelidate/lib/validators';\r\nimport { cloneDeep as _cloneDeep } from 'lodash';\r\nimport { MeasuringConceptOperatingModeType } from '@/types/forms/shared/measuringConceptsOperatingModeType';\r\n\r\nconst operatingMode = new SelectField({\r\n options: [\r\n new FormOption({ key: 'fullInfeed' }),\r\n new FormOption({ key: 'surplusInfeed' }),\r\n new FormOption({ key: 'zeroInfeed' }),\r\n new FormOption({ key: 'commercialTransfer' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n});\r\n\r\nconst operatingModeStorage = _cloneDeep(operatingMode);\r\n\r\nexport const measuringConceptsFormStep = new MeasuringConceptsFormStep({\r\n operatingMode,\r\n operatingModeStorage,\r\n fullInfeedBonusHeadline: new FormElement(),\r\n fullInfeedBonus: new CheckboxField(),\r\n measuringPointOperatorInfo: new FormElement(),\r\n meterNumber: new TextField({\r\n validators: {\r\n required,\r\n alphaNum,\r\n maxLength: maxLength(14),\r\n },\r\n }),\r\n measuringPointOperation: new RadioButtonsField({\r\n value: 'ewe',\r\n options: [\r\n new FormOption({ key: 'ewe' }),\r\n new FormOption({ key: 'other' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n measuringPointOperator: new SelectField({\r\n hasServiceDrivenOptions: true,\r\n validators: {\r\n required,\r\n },\r\n }),\r\n priceSheetMeasuringPointOperation: new FormElement(),\r\n measuringPointOperationInfoEwe: new FormElement(),\r\n measuringPointOperationFollowingConditionsAndGtacEwe: new CheckboxField({\r\n value: false,\r\n validators: { checked },\r\n }),\r\n measuringPointOperationInfoOther: new FormElement(),\r\n selfGenerationQuantity: new TextField({\r\n value: '0,00',\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n mustBeNoMoreThan20PercentAboveSuggestion,\r\n },\r\n }),\r\n selfSupplyQuantity: new TextField({\r\n value: '0,00',\r\n validators: {\r\n required,\r\n float,\r\n positive,\r\n mustBeLowerThanOrEqualToSelfGenerationQuantity,\r\n },\r\n }),\r\n remainingElectricityInfo: new FormElement(),\r\n storageHeadline: new FormElement(),\r\n});\r\n","import { CheckboxField } from '../fields/checkboxField';\r\nimport { FormList } from '../fields/formList';\r\nimport { RadioButtonsField } from '../fields/radioButtonsField';\r\nimport { TextField } from '../fields/textField';\r\nimport { FormElement, FormElementConfig } from '../formElement';\r\nimport { FormStep } from '../formStep';\r\nimport { GridControlImplementationPreferenceType } from '../shared/gridControlImplementationPreferenceType';\r\nimport { WithOptional } from '../utility';\r\n\r\ntype ConfigProps = WithOptional<\r\n ControllableConsumptionDevicesFormStep,\r\n keyof FormStep\r\n>;\r\n\r\nexport class ControllableConsumptionDevicesFormStep extends FormStep {\r\n public readonly controllableConsumptionDevicesInfo: FormElement;\r\n public readonly gridControlConditionsAccepted: CheckboxField;\r\n public readonly gridControlImplementationPreference: RadioButtonsField<\r\n GridControlImplementationPreferenceType\r\n >;\r\n public readonly identificationNumbersOfRegisteredConsumptionDevices: FormList<\r\n TextField,\r\n FormElementConfig\r\n >;\r\n public readonly controllableConsumptionFacilitiesRequirementInfo: FormElement;\r\n\r\n constructor(config: ConfigProps) {\r\n super(config);\r\n this.controllableConsumptionDevicesInfo =\r\n config.controllableConsumptionDevicesInfo;\r\n this.gridControlConditionsAccepted =\r\n config.gridControlConditionsAccepted;\r\n this.gridControlImplementationPreference =\r\n config.gridControlImplementationPreference;\r\n this.identificationNumbersOfRegisteredConsumptionDevices =\r\n config.identificationNumbersOfRegisteredConsumptionDevices;\r\n this.controllableConsumptionFacilitiesRequirementInfo =\r\n config.controllableConsumptionFacilitiesRequirementInfo;\r\n }\r\n}\r\n","import { helpers } from 'vuelidate/lib/validators';\r\n\r\n/**\r\n * All rcdin's must follow a certain pattern (One uppercase letter, followed by 10 digits)\r\n */\r\nexport const registeredConsumptionDeviceIdentificationNumber = helpers.regex(\r\n 'registeredConsumptionDeviceIdentificationNumber',\r\n /^[A-Z]\\d{10}$/,\r\n);\r\n","import { Forms } from '@/types/forms/forms';\r\nimport { CombinedVueInstance } from 'vue/types/vue';\r\nimport { ValidationRule } from 'vuelidate/lib/validators';\r\n\r\n/**\r\n * Validates that the form list of rcdin's doesn't end up having additional but empty fields,\r\n * though the field is inherintly optional, as long as no information is provided at all\r\n */\r\nexport const registeredConsumptionDeviceIdentificationNumbers = function <\r\n Instance extends Vue\r\n>(\r\n this: CombinedVueInstance<\r\n Instance,\r\n { model: Forms },\r\n unknown,\r\n unknown,\r\n unknown\r\n >,\r\n) {\r\n const numbers = this.model.application.controllableConsumptionDevices.identificationNumbersOfRegisteredConsumptionDevices.items.map(\r\n (item) => item.value,\r\n );\r\n\r\n if (!numbers || !Array.isArray(numbers) || numbers.length <= 1) {\r\n return true;\r\n }\r\n\r\n return numbers.every(\r\n (val) =>\r\n val !== undefined &&\r\n val !== null &&\r\n (typeof val !== 'string' || val !== ''),\r\n );\r\n} as ValidationRule;\r\n","import { CheckboxField } from '@/types/forms/fields/checkboxField';\r\nimport { FormList } from '@/types/forms/fields/formList';\r\nimport { RadioButtonsField } from '@/types/forms/fields/radioButtonsField';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { FormOption } from '@/types/forms/formOption';\r\nimport { ControllableConsumptionDevicesFormStep } from '@/types/forms/formSteps/controllableConsumptionDevicesFormStep';\r\nimport { checked } from '@/validators/checked';\r\nimport { registeredConsumptionDeviceIdentificationNumber } from '@/validators/registeredConsumptionDeviceIdentificationNumber';\r\nimport { registeredConsumptionDeviceIdentificationNumbers } from '@/validators/registeredConsumptionDeviceIdentificationNumbers';\r\nimport { required } from 'vuelidate/lib/validators';\r\n\r\nexport const controllableConsumptionDevicesFormStep = new ControllableConsumptionDevicesFormStep(\r\n {\r\n controllableConsumptionDevicesInfo: new FormElement(),\r\n gridControlConditionsAccepted: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n gridControlImplementationPreference: new RadioButtonsField({\r\n value: 'directControl',\r\n options: [\r\n new FormOption({ key: 'directControl' }),\r\n new FormOption({ key: 'emsControl' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n identificationNumbersOfRegisteredConsumptionDevices: new FormList(\r\n TextField,\r\n {\r\n initializeItems: 1,\r\n minItemCount: 0,\r\n maxItemCount: 8,\r\n validators: {\r\n registeredConsumptionDeviceIdentificationNumber,\r\n registeredConsumptionDeviceIdentificationNumbers,\r\n },\r\n },\r\n ),\r\n controllableConsumptionFacilitiesRequirementInfo: new FormElement(),\r\n },\r\n);\r\n","import { TextField } from '../fields/textField';\r\nimport { FormElement } from '../formElement';\r\nimport { RadioButtonsField } from '../fields/radioButtonsField';\r\nimport { DateField } from '../fields/dateField';\r\nimport { FormStep } from '../formStep';\r\nimport { WithOptional } from '../utility';\r\nimport { TaxValueType } from '../shared/taxValueType';\r\nimport { CheckboxField } from '../fields/checkboxField';\r\nimport { ReasonNoEegRemunerationType } from '../shared/reasonNoEegRemunerationType';\r\nimport { PlantSalesMethodAssignmentType } from '../shared/plantSalesMethodAssignmentType';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class BillingFormStep extends FormStep {\r\n public readonly paymentRequirements: FormElement;\r\n public readonly plantSalesMethodAssignment: RadioButtonsField<\r\n PlantSalesMethodAssignmentType\r\n >;\r\n public readonly noEegRemuneration: CheckboxField;\r\n public readonly reasonNoEegRemuneration: RadioButtonsField<\r\n ReasonNoEegRemunerationType\r\n >;\r\n public readonly noEegRemunerationHint: FormElement;\r\n public readonly explanationNoEegRemuneration: TextField;\r\n public readonly taxNumberWillFollow: CheckboxField;\r\n public readonly taxNumber: TextField;\r\n public readonly smallPVTaxAdvisorHint: FormElement;\r\n public readonly matchingTaxIDHint: FormElement;\r\n public readonly tax: RadioButtonsField;\r\n public readonly noFinancialDistress: CheckboxField;\r\n public readonly noPendingEURecoveryClaims: CheckboxField;\r\n public readonly directDebitMandate: FormElement;\r\n public readonly iban: TextField;\r\n public readonly nameAndDomicileCreditInstitution: TextField;\r\n public readonly date: DateField;\r\n public readonly accountOwnerName: TextField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.paymentRequirements = config.paymentRequirements;\r\n this.plantSalesMethodAssignment = config.plantSalesMethodAssignment;\r\n this.noEegRemuneration = config.noEegRemuneration;\r\n this.reasonNoEegRemuneration = config.reasonNoEegRemuneration;\r\n this.noEegRemunerationHint = config.noEegRemunerationHint;\r\n this.explanationNoEegRemuneration = config.explanationNoEegRemuneration;\r\n this.taxNumberWillFollow = config.taxNumberWillFollow;\r\n this.taxNumber = config.taxNumber;\r\n this.smallPVTaxAdvisorHint = config.smallPVTaxAdvisorHint;\r\n this.matchingTaxIDHint = config.matchingTaxIDHint;\r\n this.tax = config.tax;\r\n this.noFinancialDistress = config.noFinancialDistress;\r\n this.noPendingEURecoveryClaims = config.noPendingEURecoveryClaims;\r\n this.directDebitMandate = config.directDebitMandate;\r\n this.iban = config.iban;\r\n this.nameAndDomicileCreditInstitution =\r\n config.nameAndDomicileCreditInstitution;\r\n this.date = config.date;\r\n this.accountOwnerName = config.accountOwnerName;\r\n }\r\n}\r\n","import { helpers, ValidationRule } from 'vuelidate/lib/validators';\r\nimport moment from 'moment';\r\nimport { germanDateFormat } from '@/utilities/germanFormats';\r\nimport { date } from './date';\r\nimport { DateRange } from '@/types/forms/shared/dateRange';\r\n\r\n/*\r\n * Determines whether the given value is greater than the given minDate. Moment js is used\r\n here to parse the string in German format. The moment() function accepts the string and format and\r\n will internally create a Date object. The chained isSameOrAfter function performs the comparison.\r\n https://momentjs.com/docs/#/use-it/\r\n*/\r\n\r\nexport const minDate = (minDate: string): ValidationRule => {\r\n return helpers.withParams(\r\n { type: 'minDate', minDate },\r\n (value: string | null | DateRange) => {\r\n const validateValue =\r\n typeof value === 'string' || value == null\r\n ? value\r\n : value.start;\r\n return (\r\n !!minDate &&\r\n (!helpers.req(validateValue) ||\r\n !date(validateValue) ||\r\n moment(validateValue, germanDateFormat, true).isSameOrAfter(\r\n moment(minDate, germanDateFormat, true),\r\n ))\r\n );\r\n },\r\n );\r\n};\r\n","import moment from 'moment';\r\nimport { minDate } from './minDate';\r\nimport { germanDateFormat } from '@/utilities/germanFormats';\r\n\r\nexport const minDateNow = minDate(moment().format(germanDateFormat));\r\n","import moment from 'moment';\r\nimport { maxDate } from './maxDate';\r\nimport { germanDateFormat } from '@/utilities/germanFormats';\r\n\r\nexport const maxDate3Months = maxDate(\r\n moment().add(3, 'months').format(germanDateFormat),\r\n);\r\n","import { required } from 'vuelidate/lib/validators';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { FormOption } from '@/types/forms/formOption';\r\nimport { DateField } from '@/types/forms/fields/dateField';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { RadioButtonsField } from '@/types/forms/fields/radioButtonsField';\r\nimport { iban } from '@/validators/iban';\r\nimport { BillingFormStep } from '@/types/forms/formSteps/billingFormStep';\r\nimport { CheckboxField } from '@/types/forms/fields/checkboxField';\r\nimport { requiredDate } from '@/validators/requiredDate';\r\nimport { minDateNow } from '@/validators/minDateNow';\r\nimport { maxDate3Months } from '@/validators/maxDate3Months';\r\nimport { checked } from '@/validators/checked';\r\n\r\nexport const billingFormStep = new BillingFormStep({\r\n paymentRequirements: new FormElement(),\r\n plantSalesMethodAssignment: new RadioButtonsField({\r\n value: 'statutoryCompensation',\r\n options: [\r\n new FormOption({ key: 'statutoryCompensation' }),\r\n new FormOption({ key: 'directMarketingMarketPremium' }),\r\n new FormOption({ key: 'otherDirectMarketing' }),\r\n new FormOption({ key: 'freeAcceptance' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n noEegRemuneration: new CheckboxField(),\r\n reasonNoEegRemuneration: new RadioButtonsField({\r\n value: 'economicDisadvantages',\r\n options: [\r\n new FormOption({ key: 'economicDisadvantages' }),\r\n new FormOption({ key: 'other' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n explanationNoEegRemuneration: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n noEegRemunerationHint: new FormElement(),\r\n taxNumberWillFollow: new CheckboxField(),\r\n taxNumber: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n smallPVTaxAdvisorHint: new FormElement(),\r\n matchingTaxIDHint: new FormElement(),\r\n tax: new RadioButtonsField({\r\n value: 'noSalesTax',\r\n options: [\r\n new FormOption({ key: 'noSalesTax' }),\r\n new FormOption({ key: 'salesTax' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n noFinancialDistress: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n noPendingEURecoveryClaims: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n directDebitMandate: new FormElement(),\r\n iban: new TextField({\r\n validators: {\r\n required,\r\n iban,\r\n },\r\n }),\r\n nameAndDomicileCreditInstitution: new TextField(),\r\n date: new DateField({\r\n validators: {\r\n requiredDate,\r\n minDateNow,\r\n maxDate3Months,\r\n },\r\n }),\r\n accountOwnerName: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n});\r\n","import { CheckboxField } from '../fields/checkboxField';\r\nimport { TextField } from '../fields/textField';\r\nimport { FormElement } from '../formElement';\r\nimport { FormStep } from '../formStep';\r\nimport { WithOptional } from '../utility';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class CheckAndSendFormStep extends FormStep {\r\n public readonly checkNotice: FormElement;\r\n public readonly comments: TextField;\r\n public readonly summaryDocument: FormElement;\r\n public readonly privacyInformation: CheckboxField;\r\n public readonly generalTermsConsent: CheckboxField;\r\n public readonly marketingConsent: CheckboxField;\r\n public readonly correctnessNotice: FormElement;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.checkNotice = config.checkNotice;\r\n this.comments = config.comments;\r\n this.summaryDocument = config.summaryDocument;\r\n this.privacyInformation = config.privacyInformation;\r\n this.generalTermsConsent = config.generalTermsConsent;\r\n this.marketingConsent = config.marketingConsent;\r\n this.correctnessNotice = config.correctnessNotice;\r\n }\r\n}\r\n","import { CheckboxField } from '@/types/forms/fields/checkboxField';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { CheckAndSendFormStep } from '@/types/forms/formSteps/checkAndSendFormStep';\r\nimport { checked } from '@/validators/checked';\r\n\r\nexport const checkAndSendFormStep = new CheckAndSendFormStep({\r\n checkNotice: new FormElement(),\r\n comments: new TextField(),\r\n summaryDocument: new FormElement(),\r\n privacyInformation: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n generalTermsConsent: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n marketingConsent: new CheckboxField(),\r\n correctnessNotice: new FormElement(),\r\n});\r\n","import { UploadedFileInfo } from '@/api/interfaces/file/uploadedFileInfo';\r\nimport { JSONSchema7Definition } from 'json-schema';\r\nimport { defaults as _defaults } from 'lodash';\r\nimport {\r\n FormFieldConfig,\r\n formFieldDefaultConfig,\r\n FormField,\r\n} from './formField';\r\n\r\nexport interface UploadFieldConfig extends FormFieldConfig {\r\n value?: UploadedFileInfo;\r\n}\r\n\r\nexport const uploadFieldDefaultConfig = {\r\n ...formFieldDefaultConfig,\r\n};\r\n\r\nexport class UploadField extends FormField {\r\n public constructor(config?: UploadFieldConfig) {\r\n const resolvedConfig = _defaults(\r\n config || ({} as UploadFieldConfig),\r\n uploadFieldDefaultConfig,\r\n );\r\n\r\n super(resolvedConfig);\r\n }\r\n\r\n public getJsonSchema(): JSONSchema7Definition {\r\n return {\r\n type: 'object',\r\n properties: {\r\n id: {\r\n type: 'string',\r\n },\r\n name: {\r\n type: 'string',\r\n },\r\n size: {\r\n type: 'number',\r\n },\r\n url: {\r\n type: 'string',\r\n },\r\n },\r\n };\r\n }\r\n}\r\n","import { FormStep } from '../formStep';\r\nimport { WithOptional } from '../utility';\r\nimport { UploadField } from '../fields/uploadField';\r\nimport { FormGroup } from '../formGroup';\r\nimport { FormList } from '../fields/formList';\r\nimport { FormElementConfig } from '../formElement';\r\nimport { ReferenceFormGroup } from '../formGroups/referenceFormGroup';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\ntype GeneratorModuleFormGroupConfig = FormElementConfig &\r\n Omit;\r\n\r\nexport class GeneratorModuleFormGroup extends ReferenceFormGroup {\r\n public readonly generatorTechnicalDataSheet: UploadField;\r\n public readonly generatorConformityConfirmationOrUnitCertificate: UploadField;\r\n public readonly generatorProofOfConformity: UploadField;\r\n public readonly generatorUnitOrPrototypeConfirmation: UploadField;\r\n public readonly generatorComponentCertificate: UploadField;\r\n\r\n constructor(\r\n config: GeneratorModuleFormGroupConfig,\r\n id: string | undefined = undefined,\r\n ) {\r\n super(config, id);\r\n\r\n this.generatorTechnicalDataSheet = config.generatorTechnicalDataSheet;\r\n this.generatorConformityConfirmationOrUnitCertificate =\r\n config.generatorConformityConfirmationOrUnitCertificate;\r\n this.generatorProofOfConformity = config.generatorProofOfConformity;\r\n this.generatorUnitOrPrototypeConfirmation =\r\n config.generatorUnitOrPrototypeConfirmation;\r\n this.generatorComponentCertificate =\r\n config.generatorComponentCertificate;\r\n }\r\n}\r\n\r\nexport type GeneratorModuleFormList = FormList<\r\n GeneratorModuleFormGroup,\r\n GeneratorModuleFormGroupConfig\r\n>;\r\n\r\nexport type InverterModuleFormGroupConfig = FormElementConfig &\r\n Omit;\r\n\r\nexport class InverterModuleFormGroup extends ReferenceFormGroup {\r\n public readonly inverterConformityConfirmationOrUnitCertificate: UploadField;\r\n public readonly inverterTechnicalDataSheet: UploadField;\r\n public readonly inverterProofOfConformity: UploadField;\r\n public readonly inverterUnitCertificate: UploadField;\r\n\r\n public constructor(\r\n config: InverterModuleFormGroupConfig,\r\n id: string | undefined = undefined,\r\n ) {\r\n super(config, id);\r\n\r\n this.inverterConformityConfirmationOrUnitCertificate =\r\n config.inverterConformityConfirmationOrUnitCertificate;\r\n this.inverterTechnicalDataSheet = config.inverterTechnicalDataSheet;\r\n this.inverterProofOfConformity = config.inverterProofOfConformity;\r\n this.inverterUnitCertificate = config.inverterUnitCertificate;\r\n }\r\n}\r\n\r\nexport type InverterModuleFormList = FormList<\r\n InverterModuleFormGroup,\r\n InverterModuleFormGroupConfig\r\n>;\r\n\r\nexport type StorageModuleFormGroupConfig = FormElementConfig &\r\n Omit;\r\n\r\nexport class StorageModuleFormGroup extends ReferenceFormGroup {\r\n public readonly storageManufacturerDataSheet: UploadField;\r\n\r\n public constructor(\r\n config: StorageModuleFormGroupConfig,\r\n id: string | undefined = undefined,\r\n ) {\r\n super(config, id);\r\n\r\n this.storageManufacturerDataSheet = config.storageManufacturerDataSheet;\r\n }\r\n}\r\n\r\nexport type StorageModuleFormList = FormList<\r\n StorageModuleFormGroup,\r\n StorageModuleFormGroupConfig\r\n>;\r\n\r\nexport class DocumentsFormStep extends FormStep {\r\n public readonly meterPicture: UploadField;\r\n public readonly bafaApproval: UploadField;\r\n\r\n public readonly gridAndPlantProtectionProofOfConformity: UploadField;\r\n\r\n public readonly performanceMonitoringCertificate: UploadField;\r\n public readonly sitePlanWithLotNumber: UploadField;\r\n public readonly electricalSystemCircuitDiagram: UploadField;\r\n\r\n public readonly proofOfReadyForPlanning: UploadField;\r\n\r\n public readonly generatorModules: GeneratorModuleFormList;\r\n public readonly inverterModules: InverterModuleFormList;\r\n public readonly inverterStorageModules: InverterModuleFormList;\r\n public readonly storageModules: StorageModuleFormList;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n this.meterPicture = config.meterPicture;\r\n this.bafaApproval = config.bafaApproval;\r\n\r\n this.gridAndPlantProtectionProofOfConformity =\r\n config.gridAndPlantProtectionProofOfConformity;\r\n\r\n this.performanceMonitoringCertificate =\r\n config.performanceMonitoringCertificate;\r\n this.sitePlanWithLotNumber = config.sitePlanWithLotNumber;\r\n this.electricalSystemCircuitDiagram =\r\n config.electricalSystemCircuitDiagram;\r\n\r\n this.proofOfReadyForPlanning = config.proofOfReadyForPlanning;\r\n\r\n this.generatorModules = config.generatorModules;\r\n this.inverterModules = config.inverterModules;\r\n this.inverterStorageModules = config.inverterStorageModules;\r\n this.storageModules = config.storageModules;\r\n }\r\n}\r\n","import { UploadedFileInfo } from '@/api/interfaces/file/uploadedFileInfo';\r\nimport { helpers } from 'vuelidate/lib/validators';\r\nimport { appConfiguration } from '@/services/form/appConfiguration';\r\n\r\n// file types as array of extensions without the dot. e.g. ['pdf', 'jpg']\r\nexport const fileType = (value: UploadedFileInfo): boolean => {\r\n if (value?.scId) {\r\n const allowedTypes =\r\n appConfiguration?.fileUploadConfigurations[value.scId]?.fileTypes;\r\n const lowercaseExtension = value?.name?.split('.').pop()?.toLowerCase();\r\n return (\r\n !helpers.req(value) ||\r\n allowedTypes.some((key) => key.toLowerCase() === lowercaseExtension)\r\n );\r\n }\r\n return true;\r\n};\r\n","import { UploadedFileInfo } from '@/api/interfaces/file/uploadedFileInfo';\r\nimport { appConfiguration } from '@/services/form/appConfiguration';\r\nimport { helpers } from 'vuelidate/lib/validators';\r\n\r\n// maximum file size in bytes\r\nexport const maxFileSize = (value: UploadedFileInfo): boolean => {\r\n if (value?.scId) {\r\n const maxSize =\r\n appConfiguration?.fileUploadConfigurations[value.scId]?.maxFileSize;\r\n return !helpers.req(value) || maxSize >= value.size;\r\n }\r\n return true;\r\n};\r\n","import { UploadField } from '@/types/forms/fields/uploadField';\r\nimport {\r\n DocumentsFormStep,\r\n GeneratorModuleFormGroup,\r\n InverterModuleFormGroup,\r\n StorageModuleFormGroup,\r\n} from '@/types/forms/formSteps/documentsFormStep';\r\nimport { fileType } from '@/validators/fileType';\r\nimport { maxFileSize } from '@/validators/maxFileSize';\r\nimport { required } from 'vuelidate/lib/validators';\r\nimport { FormList } from '@/types/forms/fields/formList';\r\nimport { cloneDeep as _cloneDeep } from 'lodash';\r\n\r\nconst inverterModules = new FormList(InverterModuleFormGroup, {\r\n initializeItems: 1,\r\n minItemCount: 1,\r\n maxItemCount: 5,\r\n inverterConformityConfirmationOrUnitCertificate: new UploadField({\r\n validators: {\r\n required,\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n inverterTechnicalDataSheet: new UploadField({\r\n validators: {\r\n required,\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n inverterProofOfConformity: new UploadField({\r\n validators: {\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n inverterUnitCertificate: new UploadField({\r\n validators: {\r\n required,\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n});\r\n\r\nexport const documentsFormStep = new DocumentsFormStep({\r\n meterPicture: new UploadField({\r\n validators: {\r\n required,\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n bafaApproval: new UploadField({\r\n validators: {\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n gridAndPlantProtectionProofOfConformity: new UploadField({\r\n validators: {\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n performanceMonitoringCertificate: new UploadField({\r\n validators: {\r\n required,\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n sitePlanWithLotNumber: new UploadField({\r\n validators: {\r\n required,\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n electricalSystemCircuitDiagram: new UploadField({\r\n validators: {\r\n required,\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n proofOfReadyForPlanning: new UploadField({\r\n validators: {\r\n required,\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n generatorModules: new FormList(GeneratorModuleFormGroup, {\r\n initializeItems: 1,\r\n minItemCount: 1,\r\n maxItemCount: 5,\r\n generatorConformityConfirmationOrUnitCertificate: new UploadField({\r\n validators: {\r\n required,\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n generatorTechnicalDataSheet: new UploadField({\r\n validators: {\r\n required,\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n generatorProofOfConformity: new UploadField({\r\n validators: {\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n generatorUnitOrPrototypeConfirmation: new UploadField({\r\n validators: {\r\n required,\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n generatorComponentCertificate: new UploadField({\r\n validators: {\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n }),\r\n inverterModules,\r\n inverterStorageModules: _cloneDeep(inverterModules),\r\n storageModules: new FormList(StorageModuleFormGroup, {\r\n initializeItems: 1,\r\n minItemCount: 1,\r\n maxItemCount: 5,\r\n storageManufacturerDataSheet: new UploadField({\r\n validators: {\r\n required,\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n }),\r\n});\r\n","import { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport { locationFormStep } from './application/location';\r\nimport { generationTypeFormStep } from './application/generationType';\r\nimport { powerConnectionFormStep } from './application/powerConnection';\r\nimport { plantOperatorFormStep } from './application/plantOperator';\r\nimport { plantBuilderFormStep } from './application/plantBuilder';\r\nimport { plantDataFormStep } from './application/plantData';\r\nimport { propertyOwnerFormStep } from './application/propertyOwner';\r\nimport { plantPerformanceFormStep } from './application/plantPerformance';\r\nimport { measuringConceptsFormStep } from './application/measuringConcepts';\r\nimport { controllableConsumptionDevicesFormStep } from './application/controllableConsumptionDevices';\r\nimport { billingFormStep } from './application/billing';\r\nimport { checkAndSendFormStep } from './application/checkAndSend';\r\nimport { documentsFormStep } from './application/documents';\r\n\r\nexport const applicationForm = new ApplicationForm({\r\n steps: [\r\n '_init_',\r\n 'generationType',\r\n 'location',\r\n 'plantPerformance',\r\n 'powerConnection',\r\n 'plantData',\r\n 'measuringConcepts',\r\n 'controllableConsumptionDevices',\r\n 'plantOperator',\r\n 'plantBuilder',\r\n 'propertyOwner',\r\n 'billing',\r\n 'documents',\r\n 'checkAndSend',\r\n ],\r\n applicationId: null,\r\n generationType: generationTypeFormStep,\r\n location: locationFormStep,\r\n plantPerformance: plantPerformanceFormStep,\r\n powerConnection: powerConnectionFormStep,\r\n plantOperator: plantOperatorFormStep,\r\n plantBuilder: plantBuilderFormStep,\r\n plantData: plantDataFormStep,\r\n propertyOwner: propertyOwnerFormStep,\r\n measuringConcepts: measuringConceptsFormStep,\r\n controllableConsumptionDevices: controllableConsumptionDevicesFormStep,\r\n billing: billingFormStep,\r\n documents: documentsFormStep,\r\n checkAndSend: checkAndSendFormStep,\r\n /**\r\n * If you change the version, you also have to modify src\\services\\form\\modelService.ts -> migrateApplicationFormData() accordingly\r\n */\r\n version: 9,\r\n serverSideMigration: false,\r\n});\r\n","import { Form } from '../form';\r\nimport { WithOptional } from '../utility';\r\nimport { KitchenSinkFormStep1 } from './kitchensinkFormStep1';\r\nimport { KitchenSinkFormStep2 } from './kitchensinkFormStep2';\r\nimport { KitchenSinkFormStep3 } from './kitchensinkFormStep3';\r\nimport { KitchenSinkFormStep4 } from './kitchensinkFormStep4';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class KitchenSinkForm extends Form {\r\n public readonly applicationId: string;\r\n public readonly step1: KitchenSinkFormStep1;\r\n public readonly step2: KitchenSinkFormStep2;\r\n public readonly step3: KitchenSinkFormStep3;\r\n public readonly step4: KitchenSinkFormStep4;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(Object.assign(config) as Form);\r\n\r\n this.applicationId = config.applicationId;\r\n this.step1 = config.step1;\r\n this.step2 = config.step2;\r\n this.step3 = config.step3;\r\n this.step4 = config.step4;\r\n }\r\n}\r\n","import { helpers, ValidationRule } from 'vuelidate/lib/validators';\r\nimport moment from 'moment';\r\nimport { germanDateFormat } from '@/utilities/germanFormats';\r\nimport { date } from './date';\r\nimport { DateRange } from '@/types/forms/shared/dateRange';\r\n\r\n/*\r\n * Determines whether the given value is between the specified minDate and maxDate. Moment js is used\r\n here to parse the string in German format. The moment() function accepts the string and format and\r\n will internally create a Date object. The chained isBetween function performs the comparison. The last\r\n parameter sets inclusivity for the start and end dates.\r\n https://momentjs.com/docs/#/use-it/\r\n*/\r\n\r\nexport const inDateRange = (\r\n minDate: string,\r\n maxDate: string,\r\n): ValidationRule => {\r\n return helpers.withParams(\r\n { type: 'inDateRange', minDate, maxDate },\r\n (value: string | null | DateRange) => {\r\n const validateValueMin =\r\n typeof value === 'string' || value == null\r\n ? value\r\n : value.start;\r\n const validateValueMax =\r\n typeof value === 'string' || value == null ? value : value.end;\r\n return (\r\n !!minDate &&\r\n !!maxDate &&\r\n (!helpers.req(validateValueMin) ||\r\n !date(validateValueMin) ||\r\n moment(validateValueMin, germanDateFormat, true).isBetween(\r\n moment(minDate, germanDateFormat, true),\r\n moment(maxDate, germanDateFormat, true),\r\n undefined,\r\n '[]',\r\n )) &&\r\n !!minDate &&\r\n !!maxDate &&\r\n (!helpers.req(validateValueMax) ||\r\n !date(validateValueMax) ||\r\n moment(validateValueMax, germanDateFormat, true).isBetween(\r\n moment(minDate, germanDateFormat, true),\r\n moment(maxDate, germanDateFormat, true),\r\n undefined,\r\n '[]',\r\n ))\r\n );\r\n },\r\n );\r\n};\r\n","import { FormElement } from '../formElement';\r\nimport { FormStep } from '../formStep';\r\nimport { TextField } from '../fields/textField';\r\nimport { GeoCoordinatesFormGroup } from '../fields/geoCoordinatesFormGroup';\r\nimport { CheckboxField } from '../fields/checkboxField';\r\nimport { SelectField } from '../fields/selectField';\r\nimport { UploadField } from '../fields/uploadField';\r\nimport { DateField } from '../fields/dateField';\r\nimport { CountField } from '../fields/countField';\r\nimport { WithOptional } from '../utility';\r\nimport { DateRangeField } from '../fields/dateRangeField';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class KitchenSinkFormStep1 extends FormStep {\r\n public readonly textBlock: FormElement;\r\n public readonly requiredField: TextField;\r\n public readonly multiLineField: TextField;\r\n public readonly numberField: TextField;\r\n public readonly wideField: TextField;\r\n public readonly innerLabelField: TextField;\r\n public readonly geoCoordinatesField: GeoCoordinatesFormGroup;\r\n public readonly checkboxField1: CheckboxField;\r\n public readonly checkboxField2: CheckboxField;\r\n public readonly selectField: SelectField;\r\n public readonly selectFieldSingleOption: SelectField;\r\n public readonly selectFieldSearch: SelectField;\r\n public readonly selectFieldMsb: SelectField;\r\n public readonly fileUpload: UploadField;\r\n public readonly datePickerField: DateField;\r\n public readonly datePickerRangeField: DateRangeField;\r\n public readonly countField: CountField;\r\n public readonly documentDownload: FormElement;\r\n public readonly formButton: FormElement;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.textBlock = config.textBlock;\r\n this.requiredField = config.requiredField;\r\n this.multiLineField = config.multiLineField;\r\n this.numberField = config.numberField;\r\n this.wideField = config.wideField;\r\n this.innerLabelField = config.innerLabelField;\r\n this.geoCoordinatesField = config.geoCoordinatesField;\r\n this.checkboxField1 = config.checkboxField1;\r\n this.checkboxField2 = config.checkboxField2;\r\n this.selectField = config.selectField;\r\n this.selectFieldSingleOption = config.selectFieldSingleOption;\r\n this.selectFieldSearch = config.selectFieldSearch;\r\n this.selectFieldMsb = config.selectFieldMsb;\r\n this.fileUpload = config.fileUpload;\r\n this.datePickerField = config.datePickerField;\r\n this.datePickerRangeField = config.datePickerRangeField;\r\n this.countField = config.countField;\r\n this.documentDownload = config.documentDownload;\r\n this.formButton = config.formButton;\r\n }\r\n}\r\n","import { required, integer } from 'vuelidate/lib/validators';\r\nimport { checked } from '@/validators/checked';\r\nimport { positive } from '@/validators/positive';\r\nimport { minDate } from '@/validators/minDate';\r\nimport { maxDate } from '@/validators/maxDate';\r\nimport { inDateRange } from '@/validators/inDateRange';\r\nimport { fileType } from '@/validators/fileType';\r\nimport { requiredDate } from '@/validators/requiredDate';\r\nimport { maxFileSize } from '@/validators/maxFileSize';\r\nimport { FormElement } from '@/types/forms/formElement';\r\nimport { FormOption } from '@/types/forms/formOption';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { CheckboxField } from '@/types/forms/fields/checkboxField';\r\nimport {\r\n GeoCoordinatesFormGroup,\r\n GeoOrientation,\r\n} from '@/types/forms/fields/geoCoordinatesFormGroup';\r\nimport { SelectField } from '@/types/forms/fields/selectField';\r\nimport { UploadField } from '@/types/forms/fields/uploadField';\r\nimport { DateField } from '@/types/forms/fields/dateField';\r\nimport { KitchenSinkFormStep1 } from '@/types/forms/dummy/kitchensinkFormStep1';\r\nimport { CountField } from '@/types/forms/fields/countField';\r\nimport { DateRangeField } from '@/types/forms/fields/dateRangeField';\r\n\r\nexport const kitchenSinkFormStep1 = new KitchenSinkFormStep1({\r\n textBlock: new FormElement(),\r\n requiredField: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n multiLineField: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n numberField: new TextField({\r\n validators: {\r\n required,\r\n integer,\r\n positive,\r\n },\r\n }),\r\n wideField: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n innerLabelField: new TextField(),\r\n geoCoordinatesField: new GeoCoordinatesFormGroup({\r\n orientation: GeoOrientation.longitude,\r\n }),\r\n checkboxField1: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n checkboxField2: new CheckboxField({\r\n validators: {\r\n checked,\r\n },\r\n }),\r\n selectField: new SelectField({\r\n options: [\r\n new FormOption({ key: 'opt1' }),\r\n new FormOption({ key: 'opt2' }),\r\n new FormOption({ key: 'opt3' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n selectFieldSingleOption: new SelectField({\r\n options: [new FormOption({ key: 'opt1' })],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n selectFieldSearch: new SelectField({\r\n options: [\r\n new FormOption({ key: 'opt1' }),\r\n new FormOption({ key: 'opt2' }),\r\n new FormOption({ key: 'opt3' }),\r\n new FormOption({ key: 'opt4' }),\r\n new FormOption({ key: 'opt5' }),\r\n new FormOption({ key: 'opt6' }),\r\n new FormOption({ key: 'opt7' }),\r\n new FormOption({ key: 'opt8' }),\r\n new FormOption({ key: 'opt9' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n selectFieldMsb: new SelectField({\r\n options: [],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n fileUpload: new UploadField({\r\n validators: {\r\n required,\r\n fileType,\r\n maxFileSize,\r\n },\r\n }),\r\n datePickerField: new DateField({\r\n // value: '12.12.2020',\r\n availableStart: new Date(2020, 11, 1),\r\n availableEnd: new Date(2020, 11, 31),\r\n validators: {\r\n requiredDate,\r\n minDate: minDate('01.12.2020'),\r\n maxDate: maxDate('31.12.2020'),\r\n inDateRange: inDateRange('01.12.2020', '31.12.2020'),\r\n },\r\n }),\r\n datePickerRangeField: new DateRangeField({\r\n // value: {\r\n // start: '06.04.2024',\r\n // end: '10.04.2024',\r\n // },\r\n validators: {\r\n requiredDate,\r\n minDate: minDate('01.12.2020'),\r\n maxDate: maxDate('31.12.2020'),\r\n inDateRange: inDateRange('01.12.2020', '31.12.2020'),\r\n },\r\n }),\r\n countField: new CountField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n documentDownload: new FormElement(),\r\n formButton: new FormElement(),\r\n});\r\n","import { FormStep } from '../formStep';\r\nimport { RadioButtonsField } from '../fields/radioButtonsField';\r\nimport { WithOptional } from '../utility';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class KitchenSinkFormStep2 extends FormStep {\r\n public readonly selected: RadioButtonsField;\r\n public readonly selectedTiles: RadioButtonsField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.selected = config.selected;\r\n this.selectedTiles = config.selectedTiles;\r\n }\r\n}\r\n","import { FormOption } from '@/types/forms/formOption';\r\nimport { RadioButtonsField } from '@/types/forms/fields/radioButtonsField';\r\nimport { KitchenSinkFormStep2 } from '@/types/forms/dummy/kitchensinkFormStep2';\r\n\r\nexport const kitchenSinkFormStep2 = new KitchenSinkFormStep2({\r\n selected: new RadioButtonsField({\r\n value: 'opt1',\r\n options: [\r\n new FormOption({ key: 'opt1' }),\r\n new FormOption({ key: 'opt2' }),\r\n new FormOption({ key: 'opt3' }),\r\n ],\r\n validators: {\r\n option3RightAnswer: (value: string): boolean => value === 'opt3',\r\n },\r\n }),\r\n selectedTiles: new RadioButtonsField({\r\n value: 'netzanschluss',\r\n options: [\r\n new FormOption({ key: 'netzanschluss' }),\r\n new FormOption({ key: 'einspeiseleistung' }),\r\n new FormOption({ key: 'verguetungen' }),\r\n ],\r\n validators: {\r\n everybodyIsInterestedInNetzanschluessen: (value: string): boolean =>\r\n value === 'netzanschluss',\r\n },\r\n }),\r\n});\r\n","import { FormStep } from '../formStep';\r\nimport { CheckboxesField } from '../fields/checkboxesField';\r\nimport { WithOptional } from '../utility';\r\n\r\ntype ConfigProps = WithOptional;\r\n\r\nexport class KitchenSinkFormStep3 extends FormStep {\r\n public readonly checkedOptions1: CheckboxesField;\r\n public readonly checkedOptions2: CheckboxesField;\r\n public readonly dropdownCheckedOptions: CheckboxesField;\r\n\r\n public constructor(config: ConfigProps) {\r\n super(config);\r\n\r\n this.checkedOptions1 = config.checkedOptions1;\r\n this.checkedOptions2 = config.checkedOptions2;\r\n this.dropdownCheckedOptions = config.dropdownCheckedOptions;\r\n }\r\n}\r\n","import { required, helpers } from 'vuelidate/lib/validators';\r\nimport { FormOption } from '@/types/forms/formOption';\r\nimport { CheckboxesField } from '@/types/forms/fields/checkboxesField';\r\nimport { KitchenSinkFormStep3 } from '@/types/forms/dummy/kitchensinkFormStep3';\r\n\r\nexport const kitchenSinkFormStep3 = new KitchenSinkFormStep3({\r\n checkedOptions1: new CheckboxesField({\r\n value: ['opt1', 'opt2'],\r\n options: [\r\n new FormOption({ key: 'opt1' }),\r\n new FormOption({ key: 'opt2' }),\r\n new FormOption({ key: 'opt3' }),\r\n ],\r\n validators: {\r\n required,\r\n },\r\n }),\r\n checkedOptions2: new CheckboxesField({\r\n options: [\r\n new FormOption({ key: 'friends' }),\r\n new FormOption({ key: 'internet' }),\r\n new FormOption({ key: 'television' }),\r\n new FormOption({ key: 'radio' }),\r\n ],\r\n validators: {\r\n radioIsForbidden: (value: string[]): boolean =>\r\n !helpers.req(value) || !value.includes('radio'),\r\n },\r\n }),\r\n dropdownCheckedOptions: new CheckboxesField({\r\n options: [\r\n new FormOption({ key: 'friends' }),\r\n new FormOption({ key: 'internet' }),\r\n new FormOption({ key: 'television' }),\r\n new FormOption({ key: 'radio' }),\r\n ],\r\n }),\r\n});\r\n","import { FormStep } from '../formStep';\r\nimport { TextField } from '../fields/textField';\r\nimport { KitchenSinkUserListType } from './formGroups/kitchenSinkUserList';\r\nimport { KitchenSinkPlantListType } from './formGroups/kitchenSinkPlantList';\r\nimport { WithOptional } from '../utility';\r\n\r\nexport type KitchenSinkFormStep4Config = WithOptional<\r\n KitchenSinkFormStep4,\r\n keyof FormStep\r\n>;\r\n\r\nexport class KitchenSinkFormStep4 extends FormStep {\r\n public readonly primary: TextField;\r\n public readonly secondary: TextField;\r\n\r\n public readonly users: KitchenSinkUserListType;\r\n public readonly plants: KitchenSinkPlantListType;\r\n\r\n public constructor(config: KitchenSinkFormStep4Config) {\r\n super(config);\r\n\r\n this.primary = config.primary;\r\n this.secondary = config.secondary;\r\n\r\n this.users = config.users;\r\n this.plants = config.plants;\r\n }\r\n}\r\n","import { FormElementConfig } from '../../formElement';\r\nimport { CheckboxField } from '../../fields/checkboxField';\r\nimport { FormGroup } from '../../formGroup';\r\nimport { TextField } from '../../fields/textField';\r\n\r\nexport type KitchenSinkPlantFormGroupConfig = FormElementConfig &\r\n Omit;\r\n\r\nexport class KitchenSinkPlantFormGroup extends FormGroup {\r\n public readonly number: TextField;\r\n public readonly checkbox: CheckboxField;\r\n\r\n public constructor(config: KitchenSinkPlantFormGroupConfig) {\r\n super(config);\r\n\r\n this.number = config.number;\r\n this.checkbox = config.checkbox;\r\n }\r\n}\r\n","import { FormElementConfig } from '../../formElement';\r\nimport { FormGroup } from '../../formGroup';\r\nimport { TextField } from '../../fields/textField';\r\n\r\nexport type KitchenSinkUserFormGroupConfig = FormElementConfig &\r\n Omit;\r\n\r\nexport class KitchenSinkUserFormGroup extends FormGroup {\r\n public readonly firstName: TextField;\r\n public readonly lastName: TextField;\r\n\r\n public constructor(config: KitchenSinkUserFormGroupConfig) {\r\n super(config);\r\n\r\n this.firstName = config.firstName;\r\n this.lastName = config.lastName;\r\n }\r\n}\r\n","import { CheckboxField } from '@/types/forms/fields/checkboxField';\r\nimport { KitchenSinkFormStep4 } from '@/types/forms/dummy/kitchensinkFormStep4';\r\nimport { KitchenSinkPlantFormGroup } from '@/types/forms/dummy/formGroups/kitchenSinkPlantFormGroup';\r\nimport { KitchenSinkUserFormGroup } from '@/types/forms/dummy/formGroups/kitchenSinkUserFormGroup';\r\nimport { FormList } from '@/types/forms/fields/formList';\r\nimport { TextField } from '@/types/forms/fields/textField';\r\nimport { required } from 'vuelidate/lib/validators';\r\n\r\nexport const kitchenSinkFormStep4 = new KitchenSinkFormStep4({\r\n primary: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n secondary: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n users: new FormList(KitchenSinkUserFormGroup, {\r\n initializeItems: 1,\r\n firstName: new TextField(),\r\n lastName: new TextField({\r\n validators: { required },\r\n }),\r\n }),\r\n plants: new FormList(KitchenSinkPlantFormGroup, {\r\n maxItemCount: 5,\r\n number: new TextField({\r\n validators: {\r\n required,\r\n },\r\n }),\r\n checkbox: new CheckboxField(),\r\n }),\r\n});\r\n","import { KitchenSinkForm } from '@/types/forms/dummy/kitchenSinkForm';\r\nimport { kitchenSinkFormStep1 } from './kitchenSink/step1';\r\nimport { kitchenSinkFormStep2 } from './kitchenSink/step2';\r\nimport { kitchenSinkFormStep3 } from './kitchenSink/step3';\r\nimport { kitchenSinkFormStep4 } from './kitchenSink/step4';\r\n\r\nexport const kitchenSinkForm = new KitchenSinkForm({\r\n applicationId: 'kitchenSink',\r\n step1: kitchenSinkFormStep1,\r\n step2: kitchenSinkFormStep2,\r\n step3: kitchenSinkFormStep3,\r\n step4: kitchenSinkFormStep4,\r\n});\r\n","import Vue from 'vue';\r\nimport { Forms } from '@/types/forms/forms';\r\nimport { applicationForm } from './config/application';\r\nimport { kitchenSinkForm } from './config/kitchenSink';\r\n\r\n/**\r\n * The main forms config object. Should be used as static readonly config, not as form state. See model.ts for that.\r\n */\r\nexport const formsConfig = Vue.observable(\r\n new Forms({\r\n kitchenSink: kitchenSinkForm,\r\n application: applicationForm,\r\n }),\r\n);\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"alpha\", {\n enumerable: true,\n get: function get() {\n return _alpha.default;\n }\n});\nObject.defineProperty(exports, \"alphaNum\", {\n enumerable: true,\n get: function get() {\n return _alphaNum.default;\n }\n});\nObject.defineProperty(exports, \"numeric\", {\n enumerable: true,\n get: function get() {\n return _numeric.default;\n }\n});\nObject.defineProperty(exports, \"between\", {\n enumerable: true,\n get: function get() {\n return _between.default;\n }\n});\nObject.defineProperty(exports, \"email\", {\n enumerable: true,\n get: function get() {\n return _email.default;\n }\n});\nObject.defineProperty(exports, \"ipAddress\", {\n enumerable: true,\n get: function get() {\n return _ipAddress.default;\n }\n});\nObject.defineProperty(exports, \"macAddress\", {\n enumerable: true,\n get: function get() {\n return _macAddress.default;\n }\n});\nObject.defineProperty(exports, \"maxLength\", {\n enumerable: true,\n get: function get() {\n return _maxLength.default;\n }\n});\nObject.defineProperty(exports, \"minLength\", {\n enumerable: true,\n get: function get() {\n return _minLength.default;\n }\n});\nObject.defineProperty(exports, \"required\", {\n enumerable: true,\n get: function get() {\n return _required.default;\n }\n});\nObject.defineProperty(exports, \"requiredIf\", {\n enumerable: true,\n get: function get() {\n return _requiredIf.default;\n }\n});\nObject.defineProperty(exports, \"requiredUnless\", {\n enumerable: true,\n get: function get() {\n return _requiredUnless.default;\n }\n});\nObject.defineProperty(exports, \"sameAs\", {\n enumerable: true,\n get: function get() {\n return _sameAs.default;\n }\n});\nObject.defineProperty(exports, \"url\", {\n enumerable: true,\n get: function get() {\n return _url.default;\n }\n});\nObject.defineProperty(exports, \"or\", {\n enumerable: true,\n get: function get() {\n return _or.default;\n }\n});\nObject.defineProperty(exports, \"and\", {\n enumerable: true,\n get: function get() {\n return _and.default;\n }\n});\nObject.defineProperty(exports, \"not\", {\n enumerable: true,\n get: function get() {\n return _not.default;\n }\n});\nObject.defineProperty(exports, \"minValue\", {\n enumerable: true,\n get: function get() {\n return _minValue.default;\n }\n});\nObject.defineProperty(exports, \"maxValue\", {\n enumerable: true,\n get: function get() {\n return _maxValue.default;\n }\n});\nObject.defineProperty(exports, \"integer\", {\n enumerable: true,\n get: function get() {\n return _integer.default;\n }\n});\nObject.defineProperty(exports, \"decimal\", {\n enumerable: true,\n get: function get() {\n return _decimal.default;\n }\n});\nexports.helpers = void 0;\n\nvar _alpha = _interopRequireDefault(require(\"./alpha\"));\n\nvar _alphaNum = _interopRequireDefault(require(\"./alphaNum\"));\n\nvar _numeric = _interopRequireDefault(require(\"./numeric\"));\n\nvar _between = _interopRequireDefault(require(\"./between\"));\n\nvar _email = _interopRequireDefault(require(\"./email\"));\n\nvar _ipAddress = _interopRequireDefault(require(\"./ipAddress\"));\n\nvar _macAddress = _interopRequireDefault(require(\"./macAddress\"));\n\nvar _maxLength = _interopRequireDefault(require(\"./maxLength\"));\n\nvar _minLength = _interopRequireDefault(require(\"./minLength\"));\n\nvar _required = _interopRequireDefault(require(\"./required\"));\n\nvar _requiredIf = _interopRequireDefault(require(\"./requiredIf\"));\n\nvar _requiredUnless = _interopRequireDefault(require(\"./requiredUnless\"));\n\nvar _sameAs = _interopRequireDefault(require(\"./sameAs\"));\n\nvar _url = _interopRequireDefault(require(\"./url\"));\n\nvar _or = _interopRequireDefault(require(\"./or\"));\n\nvar _and = _interopRequireDefault(require(\"./and\"));\n\nvar _not = _interopRequireDefault(require(\"./not\"));\n\nvar _minValue = _interopRequireDefault(require(\"./minValue\"));\n\nvar _maxValue = _interopRequireDefault(require(\"./maxValue\"));\n\nvar _integer = _interopRequireDefault(require(\"./integer\"));\n\nvar _decimal = _interopRequireDefault(require(\"./decimal\"));\n\nvar helpers = _interopRequireWildcard(require(\"./common\"));\n\nexports.helpers = helpers;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","'use strict';\nvar $ = require('../internals/export');\nvar toInteger = require('../internals/to-integer');\nvar thisNumberValue = require('../internals/this-number-value');\nvar repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar nativeToFixed = 1.0.toFixed;\nvar floor = Math.floor;\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar FORCED = nativeToFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !fails(function () {\n // V8 ~ Android 4.3-\n nativeToFixed.call({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.github.io/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n // eslint-disable-next-line max-statements\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toInteger(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n var multiply = function (n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n };\n\n var divide = function (n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n };\n\n var dataToString = function () {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = String(data[index]);\n s = s === '' ? t : s + repeat.call('0', 7 - t.length) + t;\n }\n } return s;\n };\n\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare\n if (number != number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n result = dataToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n result = dataToString() + repeat.call('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat.call('0', fractDigits - k) + result\n : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(equalTo) {\n return (0, _common.withParams)({\n type: 'sameAs',\n eq: equalTo\n }, function (value, parentVm) {\n return value === (0, _common.ref)(equalTo, this, parentVm);\n });\n};\n\nexports.default = _default;","import { JSONSchema7Definition } from 'json-schema';\r\nimport { defaults as _defaults } from 'lodash';\r\nimport { date } from '@/validators/date';\r\nimport {\r\n FormFieldConfig,\r\n formFieldDefaultConfig,\r\n FormField,\r\n} from './formField';\r\nimport { DateRange } from '../shared/dateRange';\r\n\r\nexport interface DateRangeFieldConfig extends FormFieldConfig {\r\n value?: DateRange;\r\n}\r\n\r\nexport const dateFieldDefaultConfig = {\r\n ...formFieldDefaultConfig,\r\n value: {\r\n start: '',\r\n end: '',\r\n },\r\n};\r\n\r\nexport class DateRangeField extends FormField {\r\n public constructor(config?: DateRangeFieldConfig) {\r\n const resolvedConfig = _defaults(\r\n config || ({} as DateRangeFieldConfig),\r\n dateFieldDefaultConfig,\r\n ) as DateRangeFieldConfig;\r\n\r\n resolvedConfig.validators = {\r\n date,\r\n ...resolvedConfig.validators,\r\n };\r\n\r\n super(resolvedConfig);\r\n }\r\n\r\n public getJsonSchema(): JSONSchema7Definition {\r\n return {\r\n type: 'string',\r\n };\r\n }\r\n}\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = (0, _common.regex)('decimal', /^[-]?\\d*(\\.\\d+)?$/);\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = (0, _common.withParams)({\n type: 'ipAddress'\n}, function (value) {\n if (!(0, _common.req)(value)) {\n return true;\n }\n\n if (typeof value !== 'string') {\n return false;\n }\n\n var nibbles = value.split('.');\n return nibbles.length === 4 && nibbles.every(nibbleValid);\n});\n\nexports.default = _default;\n\nvar nibbleValid = function nibbleValid(nibble) {\n if (nibble.length > 3 || nibble.length === 0) {\n return false;\n }\n\n if (nibble[0] === '0' && nibble !== '0') {\n return false;\n }\n\n if (!nibble.match(/^\\d+$/)) {\n return false;\n }\n\n var numeric = +nibble | 0;\n return numeric >= 0 && numeric <= 255;\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.withParams = void 0;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar root = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {};\n\nvar fakeWithParams = function fakeWithParams(paramsOrClosure, maybeValidator) {\n if (_typeof(paramsOrClosure) === 'object' && maybeValidator !== undefined) {\n return maybeValidator;\n }\n\n return paramsOrClosure(function () {});\n};\n\nvar withParams = root.vuelidate ? root.vuelidate.withParams : fakeWithParams;\nexports.withParams = withParams;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default() {\n for (var _len = arguments.length, validators = new Array(_len), _key = 0; _key < _len; _key++) {\n validators[_key] = arguments[_key];\n }\n\n return (0, _common.withParams)({\n type: 'or'\n }, function () {\n var _this = this;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return validators.length > 0 && validators.reduce(function (valid, fn) {\n return valid || fn.apply(_this, args);\n }, false);\n });\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = (0, _common.withParams)({\n type: 'required'\n}, function (value) {\n if (typeof value === 'string') {\n return (0, _common.req)(value.trim());\n }\n\n return (0, _common.req)(value);\n});\n\nexports.default = _default;","export const kitchenSinkRules = (): void => {\r\n // todo\r\n};\r\n","import { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport {\r\n isDischargePowerAboveTippingPoint,\r\n lawParagraph14aConditionsMet,\r\n isPluginGeneratingPlant,\r\n isPv,\r\n isRequestWithoutPlanning,\r\n isStorage,\r\n} from './common';\r\nimport Vue from 'vue';\r\n\r\nexport const generalRules = async (\r\n application: ApplicationForm,\r\n): Promise => {\r\n await Vue.nextTick();\r\n\r\n application.powerConnection.disabled = isPluginGeneratingPlant(application);\r\n\r\n application.plantBuilder.disabled =\r\n (!application.plantOperator.plantBuilder.disabled &&\r\n application.plantOperator.plantBuilder.value === 'operator') ||\r\n isRequestWithoutPlanning(application);\r\n\r\n application.propertyOwner.disabled =\r\n application.plantOperator.separatePropertyOwner.disabled ||\r\n application.plantOperator.separatePropertyOwner.value === 'no';\r\n\r\n application.billing.disabled =\r\n application.generationType.plantType.value === 'storage' ||\r\n application.powerConnection.doesConnectionExist.value === 'no' ||\r\n application.powerConnection.whichVoltageLevel.value ===\r\n 'mediumVoltage' ||\r\n application.powerConnection.whichVoltageLevel.value === 'unknown' ||\r\n isRequestWithoutPlanning(application) ||\r\n (isPv(application) &&\r\n (application.plantPerformance.photovoltaic.pvOverallNominalPower\r\n .value ?? 0) > 100);\r\n\r\n application.measuringConcepts.disabled = isRequestWithoutPlanning(\r\n application,\r\n );\r\n\r\n application.controllableConsumptionDevices.disabled = !lawParagraph14aConditionsMet(\r\n application,\r\n );\r\n application.plantData.disabled =\r\n isRequestWithoutPlanning(application) &&\r\n application.generationType.plantType.value !== 'storage';\r\n};\r\n","import { required } from 'vuelidate/lib/validators';\r\nimport { FormField } from '@/types/forms/fields/formField';\r\nimport { UploadedFileInfo } from '@/api/interfaces/file/uploadedFileInfo';\r\n\r\nexport function addRequiredValidator(\r\n formField: FormField,\r\n): void {\r\n if (\r\n !Object.prototype.hasOwnProperty.call(formField.validators, 'required')\r\n ) {\r\n formField.validators = {\r\n ...formField.validators,\r\n required,\r\n };\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport { FormField } from '@/types/forms/fields/formField';\r\n\r\nexport function removeRequiredValidator(formField: FormField): void {\r\n if (\r\n Object.prototype.hasOwnProperty.call(formField.validators, 'required')\r\n ) {\r\n Vue.delete(formField.validators, 'required');\r\n }\r\n}\r\n","import { FormField } from '@/types/forms/fields/formField';\r\nimport { addRequiredValidator } from './addRequiredValidator';\r\nimport { removeRequiredValidator } from './removeRequiredValidator';\r\n\r\nexport function toggleRequiredValidator(\r\n formField: FormField,\r\n addOrRemove: boolean,\r\n): void {\r\n removeRequiredValidator(formField);\r\n if (addOrRemove) {\r\n addRequiredValidator(formField);\r\n }\r\n}\r\n","import { LocationFormStep } from '@/types/forms/formSteps/locationFormStep';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport { isPv, isPluginGeneratingPlant } from './common';\r\nimport { toggleRequiredValidator } from '@/utilities/toggleRequiredValidator';\r\nimport Vue from 'vue';\r\n\r\nexport const locationRules = async (\r\n formStep: {\r\n model: LocationFormStep;\r\n formModel: ApplicationForm;\r\n } & Vue,\r\n): Promise => {\r\n const isPvButNoPluginGeneratingPlant =\r\n !isPluginGeneratingPlant(formStep.formModel) &&\r\n isPv(formStep.formModel);\r\n\r\n // we have to wait one additional tick for the component watchers\r\n // to set the overall sums to the underlying models\r\n await Vue.nextTick();\r\n\r\n formStep.model.proceedWithCadastral.disabled = isPluginGeneratingPlant(\r\n formStep.formModel,\r\n );\r\n\r\n const proceedWithCadastral: boolean =\r\n !formStep.model.proceedWithCadastral.disabled &&\r\n formStep.model.proceedWithCadastral.value === true; // can also be null, that's why to check against true specifically\r\n\r\n toggleRequiredValidator(\r\n formStep.model.streetAndHousenumber.street,\r\n !proceedWithCadastral,\r\n );\r\n toggleRequiredValidator(\r\n formStep.model.streetAndHousenumber.housenumber,\r\n !proceedWithCadastral,\r\n );\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565594/Formular+Standort#FormularStandort-subdistrict\r\n formStep.model.subdistrict.disabled = !proceedWithCadastral;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565594/Formular+Standort#FormularStandort-meadow\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565594/Formular+Standort#FormularStandort-lot\r\n formStep.model.meadowAndLot.disabled = !proceedWithCadastral;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565594/Formular+Standort#FormularStandort-building\r\n formStep.model.building.disabled = isPluginGeneratingPlant(\r\n formStep.formModel,\r\n );\r\n\r\n formStep.model.geographicMap.disabled = isPluginGeneratingPlant(\r\n formStep.formModel,\r\n );\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565594/Formular+Standort#FormularStandort-geographicLatCoordinates\r\n formStep.model.geographicLatCoordinates.disabled = isPluginGeneratingPlant(\r\n formStep.formModel,\r\n );\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565594/Formular+Standort#FormularStandort-geographicLngCoordinates\r\n formStep.model.geographicLngCoordinates.disabled = isPluginGeneratingPlant(\r\n formStep.formModel,\r\n );\r\n\r\n toggleRequiredValidator(\r\n formStep.model.geographicLatCoordinates.seconds,\r\n isPvButNoPluginGeneratingPlant,\r\n );\r\n toggleRequiredValidator(\r\n formStep.model.geographicLatCoordinates.degrees,\r\n isPvButNoPluginGeneratingPlant,\r\n );\r\n toggleRequiredValidator(\r\n formStep.model.geographicLatCoordinates.minutes,\r\n isPvButNoPluginGeneratingPlant,\r\n );\r\n\r\n toggleRequiredValidator(\r\n formStep.model.geographicLngCoordinates.seconds,\r\n isPvButNoPluginGeneratingPlant,\r\n );\r\n toggleRequiredValidator(\r\n formStep.model.geographicLngCoordinates.degrees,\r\n isPvButNoPluginGeneratingPlant,\r\n );\r\n toggleRequiredValidator(\r\n formStep.model.geographicLngCoordinates.minutes,\r\n isPvButNoPluginGeneratingPlant,\r\n );\r\n};\r\n","import { GenerationTypeFormStep } from '@/types/forms/formSteps/generationTypeFormStep';\r\nimport { EnergyTypeFieldType } from '@/types/forms/shared/energyTypeFieldType';\r\nimport { PlantTypeFieldTypeForGenerationTypeFormStep } from '@/types/forms/shared/plantTypeFieldType';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport { isPluginGeneratingPlantSimplified } from './common';\r\n\r\nconst PLANT_TYPE_RULES: Record<\r\n EnergyTypeFieldType,\r\n PlantTypeFieldTypeForGenerationTypeFormStep[]\r\n> = {\r\n energyStorage: ['storage'],\r\n sun: ['photovoltaicPowerPlant'],\r\n sunAndEnergyStorageLte30: ['photovoltaicPowerPlantAndStorageLte30'],\r\n wind: ['windPowerPlant'],\r\n water: ['hydroPowerPlant', 'steamTurbine'],\r\n biogas: ['thermalPowerPlantDea', 'gasTurbine', 'orcPowerPlant'],\r\n biowaste: ['thermalPowerPlantDea', 'gasTurbine', 'orcPowerPlant'],\r\n biodiesel: ['thermalPowerPlantDea', 'gasTurbine', 'orcPowerPlant'],\r\n slurry: ['thermalPowerPlantDea', 'gasTurbine', 'orcPowerPlant'],\r\n plantOil: ['thermalPowerPlantDea', 'gasTurbine', 'orcPowerPlant'],\r\n woodGas: ['thermalPowerPlantDea', 'gasTurbine', 'orcPowerPlant'],\r\n mineGas: ['thermalPowerPlantDea', 'gasTurbine', 'orcPowerPlant'],\r\n sewageGas: ['thermalPowerPlantDea', 'gasTurbine', 'orcPowerPlant'],\r\n landfillGas: ['thermalPowerPlantDea', 'gasTurbine', 'orcPowerPlant'],\r\n geothermics: ['thermalPowerPlantDea', 'gasTurbine', 'orcPowerPlant'],\r\n naturalGas: [\r\n 'thermalPowerPlantKwk',\r\n 'gasTurbine',\r\n 'fuelCell',\r\n 'orcPowerPlant',\r\n 'emergencyGenerator',\r\n 'stirlingEngine',\r\n ],\r\n liquidGas: ['thermalPowerPlantKwk', 'gasTurbine', 'orcPowerPlant'],\r\n dieselOil: [\r\n 'thermalPowerPlantKwk',\r\n 'gasTurbine',\r\n 'orcPowerPlant',\r\n 'emergencyGenerator',\r\n ],\r\n};\r\n\r\nexport const generationTypeRules = async (\r\n formStep: {\r\n model: GenerationTypeFormStep;\r\n formModel: ApplicationForm;\r\n } & Vue,\r\n): Promise => {\r\n formStep.model.energyType.options.forEach((option) => {\r\n if (!formStep.model.plugInGeneratingPlant.value) {\r\n option.disabled = false;\r\n return;\r\n }\r\n\r\n const isEnergyStorageOrSunOrWind =\r\n option.key === 'energyStorage' ||\r\n option.key === 'sun' ||\r\n option.key === 'wind';\r\n\r\n option.disabled = !isEnergyStorageOrSunOrWind;\r\n });\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565587/Energieart+Anlagenart\r\n formStep.model.plantType.options.forEach((option) => {\r\n if (\r\n formStep.model.energyType.value == null ||\r\n formStep.model.energyType.value === '' ||\r\n option.key === ''\r\n ) {\r\n option.disabled = false;\r\n return;\r\n }\r\n\r\n const optionRules = PLANT_TYPE_RULES[formStep.model.energyType.value];\r\n option.disabled = !optionRules.includes(option.key);\r\n });\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565613/Formular+Erzeugungsart#FormularErzeugungsart-plantType\r\n formStep.model.plantType.disabled = !formStep.model.energyType.value;\r\n\r\n formStep.model.proceedWithFullRegistrationForEEGCompensation.disabled =\r\n formStep.model.plantType.value !== 'photovoltaicPowerPlant' ||\r\n formStep.model.plugInGeneratingPlant.disabled ||\r\n !formStep.model.plugInGeneratingPlant.value;\r\n\r\n //\r\n // Hide everything for plugin generating plants when proceedWithFullRegistrationForEEGCompensation not checked.\r\n //\r\n const pluginSimplified = isPluginGeneratingPlantSimplified(formStep.model);\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-plantStructureType\r\n formStep.model.plantStructureType.disabled =\r\n pluginSimplified ||\r\n (formStep.model.plantType.value !== 'photovoltaicPowerPlant' &&\r\n formStep.model.plantType.value !==\r\n 'photovoltaicPowerPlantAndStorageLte30');\r\n\r\n formStep.model.totalPlantPerformance.disabled =\r\n (!formStep.model.plugInGeneratingPlant.disabled &&\r\n !!formStep.model.plugInGeneratingPlant.value) ||\r\n formStep.model.plantType.value ===\r\n 'photovoltaicPowerPlantAndStorageLte30';\r\n\r\n formStep.model.requestType.disabled =\r\n (!formStep.model.plantStructureType.disabled &&\r\n formStep.model.plantStructureType.value == 'building') ||\r\n formStep.model.totalPlantPerformance.disabled ||\r\n formStep.model.totalPlantPerformance.value == 'below300' ||\r\n (!formStep.model.plantType.disabled &&\r\n formStep.model.plantType.value == 'emergencyGenerator');\r\n\r\n if (formStep.model.plantType.value === 'emergencyGenerator') {\r\n formStep.model.requestType.value = 'requestWithPlanning';\r\n }\r\n formStep.model.requestWithPlanningInfo.disabled =\r\n formStep.model.requestType.disabled ||\r\n formStep.model.requestType.value == 'requestWithoutPlanning';\r\n\r\n formStep.model.requestWithoutPlanningInfo.disabled =\r\n formStep.model.requestType.disabled ||\r\n formStep.model.requestType.value == 'requestWithPlanning';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565613/Formular+Erzeugungsart#FormularErzeugungsart-emergencyGeneratorOperatingMode\r\n formStep.model.emergencyGeneratorOperatingMode.disabled =\r\n formStep.model.plantType.disabled ||\r\n !(formStep.model.plantType.value === 'emergencyGenerator');\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565613/Formular+Erzeugungsart#FormularErzeugungsart-specifiedEmergencyGeneratorOperatingMode\r\n formStep.model.specifiedEmergencyGeneratorOperatingMode.disabled =\r\n formStep.model.emergencyGeneratorOperatingMode.disabled ||\r\n !formStep.model.emergencyGeneratorOperatingMode.value?.includes(\r\n 'other',\r\n );\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565613/Formular+Erzeugungsart#FormularErzeugungsart-bidirectionalMeter\r\n formStep.model.bidirectionalMeter.disabled = true; // Disabled temporarily, as per customer requirement.\r\n // formStep.model.plugInGeneratingPlant.disabled ||\r\n // !formStep.model.plugInGeneratingPlant.value ||\r\n // pluginSimplified;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565613/Formular+Erzeugungsart#FormularErzeugungsart-bidirectionalMeterInfo\r\n formStep.model.bidirectionalMeterInfo.disabled = true; // Disabled temporarily, as per customer requirement.\r\n // formStep.model.bidirectionalMeter.disabled ||\r\n // !!formStep.model.bidirectionalMeter.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565613/Formular+Erzeugungsart#FormularErzeugungsart-consumption\r\n formStep.model.consumption.disabled = true; // Disabled temporarily, as per customer requirement.\r\n // formStep.model.bidirectionalMeter.disabled ||\r\n // !formStep.model.bidirectionalMeter.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565613/Formular+Erzeugungsart#FormularErzeugungsart-infeed\r\n formStep.model.infeed.disabled = true; // Disabled temporarily, as per customer requirement.\r\n // formStep.model.bidirectionalMeter.disabled ||\r\n // !formStep.model.bidirectionalMeter.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565613/Formular+Erzeugungsart#FormularErzeugungsart-readingDate\r\n formStep.model.readingDate.disabled = true; // Disabled temporarily, as per customer requirement.\r\n // formStep.model.bidirectionalMeter.disabled ||\r\n // !formStep.model.bidirectionalMeter.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565613/Formular+Erzeugungsart#FormularErzeugungsart-plugInGeneratingPlantInfo\r\n formStep.model.plugInGeneratingPlantInfo.disabled = true; // Disabled temporarily, as per customer requirement.\r\n // formStep.model.plugInGeneratingPlant.disabled ||\r\n // !formStep.model.plugInGeneratingPlant.value ||\r\n // pluginSimplified;\r\n\r\n formStep.model.simplifiedProcedureHint.disabled =\r\n formStep.model.plugInGeneratingPlant.disabled ||\r\n !formStep.model.plugInGeneratingPlant.value ||\r\n pluginSimplified;\r\n\r\n formStep.model.simplifiedRegistrationProcessNotice.disabled =\r\n !pluginSimplified ||\r\n formStep.model.plantType.value !== 'photovoltaicPowerPlant' ||\r\n formStep.model.plugInGeneratingPlant.disabled ||\r\n !formStep.model.plugInGeneratingPlant.value;\r\n};\r\n","export const findFirstValidKey = function (\r\n ruleset: Record,\r\n): string {\r\n return Object.keys(ruleset).find((key) => ruleset[key]) ?? '';\r\n};\r\n","import { parseGermanFloat } from './germanFormats';\r\n\r\n// As there are fields of type string, that actually contain something else,\r\n// this group of utils intends to provide parsing certain checks\r\n// that also take care of the parsing necessary\r\n\r\n/**\r\n * Compares two number strings, whether one is higher than or equal to the other\r\n * @param value the value that should be higher or equal\r\n * @param valueToCompareTo the value that should be lower or equal\r\n * @returns {boolean} whether `value` is higher than or equal to `valueToCompareTo`\r\n */\r\nexport function isHigherThanOrEqual(\r\n value: string | null,\r\n valueToCompareTo: string | null,\r\n): boolean {\r\n const parsedValue = parseGermanFloat(value || '0');\r\n const parsedValueToCompareTo = parseGermanFloat(valueToCompareTo || '0');\r\n\r\n return parsedValue >= parsedValueToCompareTo;\r\n}\r\n","import { PowerConnectionFormStep } from '@/types/forms/formSteps/powerConnectionFormStep';\r\nimport {\r\n isDea,\r\n isDischargePowerBelowOrEqualTippingPoint,\r\n isLowVoltage,\r\n isPluginGeneratingPlant,\r\n isPowerHeatCoupling,\r\n isPv,\r\n isPvAndStorageLte30,\r\n isRequestWithoutPlanning,\r\n isStorage,\r\n isUnknown,\r\n} from './common';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport { findFirstValidKey } from '@/utilities/findFirstValidKey';\r\nimport { isHigherThanOrEqual } from '@/utilities/stringParsingUtils';\r\n\r\nexport const powerConnectionRules = async (\r\n formStep: {\r\n model: PowerConnectionFormStep;\r\n formModel: ApplicationForm;\r\n } & Vue,\r\n): Promise => {\r\n const hasLowVoltage = isLowVoltage(formStep.model);\r\n\r\n const isOther = (formModel: ApplicationForm) =>\r\n isDea(formModel) ||\r\n isPowerHeatCoupling(formModel) ||\r\n isUnknown(formModel);\r\n\r\n const requestWithoutPlanning = isRequestWithoutPlanning(formStep.formModel);\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-orderNumber\r\n formStep.model.orderNumber.disabled =\r\n formStep.model.doesConnectionExist.disabled ||\r\n formStep.model.doesConnectionExist.value !== 'ordered';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-hasExistingPlants\r\n formStep.model.hasExistingPlants.disabled =\r\n isPluginGeneratingPlant(formStep.formModel) ||\r\n (!formStep.model.doesConnectionExist.disabled &&\r\n formStep.model.doesConnectionExist.value !== 'yes') ||\r\n (isStorage(formStep.formModel) &&\r\n !isPvAndStorageLte30(formStep.formModel));\r\n\r\n formStep.model.onlyInverterCapacityOfExistingGenerationPlant.disabled =\r\n formStep.model.hasExistingPlants.disabled ||\r\n !formStep.model.hasExistingPlants.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-existingPlantsTotalPower\r\n formStep.model.existingPlantsTotalPower.disabled =\r\n formStep.model.hasExistingPlants.disabled ||\r\n !formStep.model.hasExistingPlants.value;\r\n\r\n type ExistingPlantsTotalPowerConditionalInfoKey =\r\n | 'pvInfo'\r\n | 'storageInfo'\r\n | 'otherInfo';\r\n\r\n //In-Feed Management Conditional Info\r\n const existingPlantsTotalPowerConditionInfo = {\r\n pvInfo: isPv(formStep.formModel),\r\n storageInfo: isStorage(formStep.formModel),\r\n otherInfo: isOther(formStep.formModel),\r\n } as Record;\r\n\r\n formStep.model.existingPlantsTotalPower.conditionalInfoKey = findFirstValidKey(\r\n existingPlantsTotalPowerConditionInfo,\r\n );\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-hasExistingPlants\r\n formStep.model.repoweringPlanned.disabled =\r\n formStep.model.hasExistingPlants.disabled ||\r\n !formStep.model.hasExistingPlants.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-existingPlantsTotalPower\r\n formStep.model.repoweringTotalPower.disabled =\r\n formStep.model.repoweringPlanned.disabled ||\r\n !formStep.model.repoweringPlanned.value;\r\n\r\n const isLvStorageBelow30 =\r\n isStorage(formStep.formModel) &&\r\n isLowVoltage(formStep.model) &&\r\n isDischargePowerBelowOrEqualTippingPoint(\r\n formStep.formModel.plantPerformance,\r\n 30,\r\n );\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-feedInPowerShallBeLimitedByAController\r\n formStep.model.feedInPowerShallBeLimitedByAController.disabled =\r\n isPluginGeneratingPlant(formStep.formModel) ||\r\n (isLvStorageBelow30 && !isPvAndStorageLte30(formStep.formModel));\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-feedInPower\r\n formStep.model.feedInPower.disabled =\r\n isPluginGeneratingPlant(formStep.formModel) ||\r\n (isLvStorageBelow30 && !isPvAndStorageLte30(formStep.formModel));\r\n formStep.model.feedInPower.userChangeable =\r\n !formStep.model.feedInPowerShallBeLimitedByAController.disabled &&\r\n (formStep.model.feedInPowerShallBeLimitedByAController.value ?? false);\r\n\r\n const requestTypeIsWithPlanningOrDisabled =\r\n formStep.formModel.generationType.requestType.disabled ||\r\n (!formStep.formModel.generationType.requestType.disabled &&\r\n formStep.formModel.generationType.requestType.value ===\r\n 'requestWithPlanning');\r\n const doesConnectionExistIsOrderedOrNo =\r\n !formStep.model.doesConnectionExist.disabled &&\r\n (formStep.model.doesConnectionExist.value === 'ordered' ||\r\n formStep.model.doesConnectionExist.value === 'no');\r\n const doesConnectionExistIsOrderedOrNoWithRequestTypePlanning =\r\n requestTypeIsWithPlanningOrDisabled && doesConnectionExistIsOrderedOrNo;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-plannedReferencePower\r\n formStep.model.plannedReferencePower.disabled = !doesConnectionExistIsOrderedOrNoWithRequestTypePlanning;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-ofWhichOwnUseGeneratingPlant\r\n formStep.model.ofWhichOwnUseGeneratingPlant.disabled = !doesConnectionExistIsOrderedOrNoWithRequestTypePlanning;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-noConnectionAvailable\r\n formStep.model.noConnectionAvailable.disabled =\r\n formStep.model.doesConnectionExist.disabled ||\r\n formStep.model.doesConnectionExist.value !== 'no';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-reactivePowerCompensationSystemExists\r\n formStep.model.reactivePowerCompensationSystemExists.disabled = hasLowVoltage;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-unitCapacity\r\n formStep.model.unitCapacity.disabled =\r\n formStep.model.reactivePowerCompensationSystemExists.disabled ||\r\n !formStep.model.reactivePowerCompensationSystemExists.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-unitIsPrototype\r\n formStep.model.unitIsPrototype.disabled = hasLowVoltage;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-buildingPowerDemand\r\n formStep.model.buildingPowerDemand.disabled =\r\n hasLowVoltage || requestWithoutPlanning;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-requiredPower\r\n formStep.model.requiredPower.disabled =\r\n formStep.model.buildingPowerDemand.disabled ||\r\n !formStep.model.buildingPowerDemand.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-fromWhen\r\n formStep.model.fromWhen.disabled =\r\n formStep.model.buildingPowerDemand.disabled ||\r\n !formStep.model.buildingPowerDemand.value;\r\n\r\n // https://netzkern.atlassian.net/browse/ED-597\r\n formStep.model.ownUseExceedsPlannedPowerWarning.disabled =\r\n formStep.model.plannedReferencePower.disabled ||\r\n formStep.model.ofWhichOwnUseGeneratingPlant.disabled ||\r\n isHigherThanOrEqual(\r\n formStep.model.plannedReferencePower.value,\r\n formStep.model.ofWhichOwnUseGeneratingPlant.value,\r\n );\r\n};\r\n","import { PlantOperatorFormStep } from '@/types/forms/formSteps/plantOperatorFormStep';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport { isPluginGeneratingPlant } from './common';\r\n\r\nexport const plantOperatorRules = async (\r\n formStep: {\r\n model: PlantOperatorFormStep;\r\n formModel: ApplicationForm;\r\n } & Vue,\r\n): Promise => {\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854570380/Formular+Anlagenbetreiber#FormularAnlagenbetreiber-plantBuilder\r\n formStep.model.plantBuilder.disabled = !isPluginGeneratingPlant(\r\n formStep.formModel,\r\n );\r\n\r\n formStep.model.separatePropertyOwner.disabled = isPluginGeneratingPlant(\r\n formStep.formModel,\r\n );\r\n\r\n formStep.model.operators.items.forEach((operator) => {\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854570380/Formular+Anlagenbetreiber#FormularAnlagenbetreiber-companyName\r\n operator.companyName.disabled = operator.salutation.value !== 'company';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854570380/Formular+Anlagenbetreiber#FormularAnlagenbetreiber-operatorName.firstName\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854570380/Formular+Anlagenbetreiber#FormularAnlagenbetreiber-operatorName.lastName\r\n operator.operatorName.disabled =\r\n operator.salutation.value === 'company';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854570380/Formular+Anlagenbetreiber#FormularAnlagenbetreiber-contactPersonName.firstName\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854570380/Formular+Anlagenbetreiber#FormularAnlagenbetreiber-contactPersonName.lastName\r\n operator.contactPersonName.disabled =\r\n operator.salutation.value !== 'company';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854570380/Formular+Anlagenbetreiber#FormularAnlagenbetreiber-birthday\r\n operator.birthday.disabled = operator.salutation.value === 'company';\r\n });\r\n\r\n const usePlantLocation =\r\n (!formStep.model.usePlantLocation.disabled &&\r\n formStep.model.usePlantLocation.value) ??\r\n false;\r\n formStep.model.zipAndCity.disabled = usePlantLocation;\r\n formStep.model.streetAndHousenumber.disabled = usePlantLocation;\r\n\r\n const isStreetAndHouseNumberAvailable =\r\n !!formStep.formModel.location.streetAndHousenumber.street.value &&\r\n !!formStep.formModel.location.streetAndHousenumber.housenumber.value;\r\n\r\n formStep.model.usePlantLocation.disabled =\r\n formStep.formModel.location.streetAndHousenumber.disabled ||\r\n !isStreetAndHouseNumberAvailable;\r\n};\r\n","export const plantBuilderRules = async (): Promise => {\r\n // no rules at the moment\r\n};\r\n","import { PlantPerformanceFormStep } from '@/types/forms/formSteps/plantPerformanceFormStep';\r\nimport { PowerReductionValueType } from '@/types/forms/shared/powerReductionValueType';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport {\r\n isPv,\r\n isPowerHeatCoupling,\r\n isDea,\r\n isUnknown,\r\n isNominalPowerBelowOrEqualTippingPoint,\r\n isActivePowerAboveTippingPoint,\r\n isActivePowerBelowOrEqualTippingPoint,\r\n isNonHighEfficiencyChpPlant,\r\n isHighEfficiencyChpPlant,\r\n isPluginGeneratingPlant,\r\n isNominalPowerAboveTippingPoint,\r\n} from '../common';\r\nimport { findFirstValidKey } from '@/utilities/findFirstValidKey';\r\nimport { PlantDataFormStep } from '@/types/forms/formSteps/plantDataFormStep';\r\n\r\nconst isOther = (formModel: ApplicationForm) =>\r\n isDea(formModel) || isPowerHeatCoupling(formModel) || isUnknown(formModel);\r\n\r\n//https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573319/Formular+Anlagenleistung#FormularAnlagenleistung-isPvNominalPowerInRange\r\nconst isPvNominalPowerInRangeRule = function (\r\n model: PlantPerformanceFormStep,\r\n formModel: ApplicationForm,\r\n): boolean {\r\n return (\r\n isPv(formModel) &&\r\n isNominalPowerAboveTippingPoint(model, 25) &&\r\n isNominalPowerBelowOrEqualTippingPoint(model, 100)\r\n );\r\n};\r\n\r\n//https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573319/Formular+Anlagenleistung#FormularAnlagenleistung-isPhcActivePowerInRange\r\nconst isPhcActivePowerInRangeRule = function (\r\n model: PlantPerformanceFormStep,\r\n formModel: ApplicationForm,\r\n): boolean {\r\n return (\r\n isPowerHeatCoupling(formModel) &&\r\n ((isNonHighEfficiencyChpPlant(formModel.plantData) &&\r\n isActivePowerBelowOrEqualTippingPoint(model, 100)) ||\r\n (isHighEfficiencyChpPlant(formModel.plantData) &&\r\n isActivePowerAboveTippingPoint(model, 25) &&\r\n isActivePowerBelowOrEqualTippingPoint(model, 100)))\r\n );\r\n};\r\n\r\n//https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573319/Formular+Anlagenleistung#FormularAnlagenleistung-isDeaUnknownMiddleRangeActivePower\r\nconst isDeaUnknownMiddleRangeActivePowerRule = function (\r\n model: PlantPerformanceFormStep,\r\n formModel: ApplicationForm,\r\n): boolean {\r\n return (\r\n (isDea(formModel) || isUnknown(formModel)) &&\r\n isActivePowerAboveTippingPoint(model, 25) &&\r\n isActivePowerBelowOrEqualTippingPoint(model, 100)\r\n );\r\n};\r\n\r\n/**\r\n * Disables any invalid options in the Power Reduction Type Radio Group based on the supplied powerReductionRules\r\n */\r\nconst setPowerReductionTypeOptions = function (\r\n model: PlantDataFormStep,\r\n powerReductionRules: Record,\r\n): void {\r\n model.infeedManagement.imPowerReductionType.options.forEach((o) => {\r\n o.disabled = !powerReductionRules[o.key];\r\n });\r\n};\r\n\r\ntype InfeedManagementConditionalInfoKey = 'pvInfo' | 'otherInfo';\r\n\r\nexport const plantDataInfeedManagementRules = async (\r\n formStep: {\r\n model: PlantDataFormStep;\r\n formModel: ApplicationForm;\r\n } & Vue,\r\n): Promise => {\r\n //Execute Rules\r\n const isPvNominalPowerInRange = isPvNominalPowerInRangeRule(\r\n formStep.formModel.plantPerformance,\r\n formStep.formModel,\r\n );\r\n\r\n const isPhcActivePowerInRange = isPhcActivePowerInRangeRule(\r\n formStep.formModel.plantPerformance,\r\n formStep.formModel,\r\n );\r\n\r\n const isDeaUnknownMiddleRangeActivePower = isDeaUnknownMiddleRangeActivePowerRule(\r\n formStep.formModel.plantPerformance,\r\n formStep.formModel,\r\n );\r\n\r\n const isPlugin = isPluginGeneratingPlant(formStep.formModel);\r\n\r\n //set overall visibility of the infeed management section\r\n formStep.model.infeedManagement.disabled =\r\n isPlugin ||\r\n formStep.formModel.applicationType === 'storage' ||\r\n (!isPvNominalPowerInRange &&\r\n !isPhcActivePowerInRange &&\r\n !isDeaUnknownMiddleRangeActivePower);\r\n\r\n //In-Feed Management Conditional Info\r\n const infeedManagementConditionInfo = {\r\n pvInfo: isPv(formStep.formModel),\r\n otherInfo: isOther(formStep.formModel),\r\n } as Record;\r\n\r\n formStep.model.infeedManagement.imHeadline.conditionalInfoKey = findFirstValidKey(\r\n infeedManagementConditionInfo,\r\n );\r\n\r\n //Power Reduction Items Display Logic\r\n const isAudioFrequencyControlReceiver =\r\n isPvNominalPowerInRange ||\r\n isPhcActivePowerInRange ||\r\n isDeaUnknownMiddleRangeActivePower;\r\n\r\n const noPowerReduction =\r\n isPluginGeneratingPlant(formStep.formModel) &&\r\n (isPvNominalPowerInRange || isDeaUnknownMiddleRangeActivePower);\r\n\r\n const powerReductionRules: Record = {\r\n noPowerReduction: noPowerReduction,\r\n audioFrequencyControlReceiverInternal: isAudioFrequencyControlReceiver,\r\n audioFrequencyControlReceiverExternal: isAudioFrequencyControlReceiver,\r\n };\r\n\r\n setPowerReductionTypeOptions(formStep.model, powerReductionRules);\r\n\r\n //Billing and Contracting Rules\r\n const isAudioFrequencyControlReceiverInternal =\r\n !formStep.model.infeedManagement.imPowerReductionType.disabled &&\r\n formStep.model.infeedManagement.imPowerReductionType.value ===\r\n 'audioFrequencyControlReceiverInternal';\r\n\r\n const isAudioFrequencyControlReceiverExternal =\r\n !formStep.model.infeedManagement.imPowerReductionType.disabled &&\r\n formStep.model.infeedManagement.imPowerReductionType.value ===\r\n 'audioFrequencyControlReceiverExternal';\r\n\r\n formStep.formModel.plantData.infeedManagement.toneFrequencyReceiverToPlantOperatorOrBuilder.disabled = !isAudioFrequencyControlReceiverInternal;\r\n\r\n formStep.model.infeedManagement.imAudioFrequencyControlReceiverContract.disabled = !isAudioFrequencyControlReceiverInternal;\r\n\r\n formStep.model.infeedManagement.imProvisionThrough.disabled = !isAudioFrequencyControlReceiverExternal;\r\n\r\n //Billing Rules\r\n const isSepa =\r\n !formStep.model.infeedManagement.imBilling.disabled &&\r\n formStep.model.infeedManagement.imBilling.value === 'sepa';\r\n formStep.model.infeedManagement.imBilling.disabled = !isAudioFrequencyControlReceiverInternal;\r\n formStep.model.infeedManagement.imDirectDebitMandate.disabled = !isSepa;\r\n formStep.model.infeedManagement.imIban.disabled = !isSepa;\r\n formStep.model.infeedManagement.imCreditInstitutionName.disabled = !isSepa;\r\n formStep.model.infeedManagement.imAccountHolderName.disabled = !isSepa;\r\n formStep.model.infeedManagement.imBillingDate.disabled = !isSepa;\r\n\r\n formStep.model.infeedManagement.imTechnicalSpecificationsNote.disabled =\r\n !formStep.formModel.billing.noEegRemuneration.disabled &&\r\n !!formStep.formModel.billing.noEegRemuneration.value;\r\n};\r\n","import { PlantDataFormStep } from '@/types/forms/formSteps/plantDataFormStep';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport {\r\n isStorageCouplingAcCoupled,\r\n isStorageCouplingDcCoupled,\r\n isStorageConnectionConceptWithoutPowerGeneration,\r\n isStorageConnectionConceptWithoutPowerGenerationAndWithConsumptionPlant,\r\n isStorageConnectionConceptWithPowerGeneration,\r\n isStorageConnectionConceptStorageInGenerationPath,\r\n isStorageConnectionConceptStorageInConsumerPath,\r\n isStorageChargeFromPublicGrid,\r\n isStorageDischargeIntoPublicGrid,\r\n isPluginGeneratingPlant,\r\n isPv,\r\n isMediumVoltage,\r\n isStorage,\r\n isStorageDischargeCustomersGridAndPublicGrid,\r\n isRequestWithoutPlanning,\r\n isPvAndStorageLte30,\r\n} from './common';\r\nimport { plantDataInfeedManagementRules } from './plantData/infeedManagement';\r\n\r\nexport const plantDataRules = async (\r\n formStep: { model: PlantDataFormStep; formModel: ApplicationForm } & Vue,\r\n): Promise => {\r\n const applicationType = formStep.formModel.applicationType;\r\n const hasStorage = isStorage(formStep.formModel);\r\n formStep.model.newOrExistingApplication.disabled =\r\n applicationType == 'photovoltaicAndStorageLte30' ||\r\n (applicationType === 'storage' &&\r\n isRequestWithoutPlanning(formStep.formModel));\r\n formStep.model.plantWasAlreadyCommissioned.disabled =\r\n applicationType === 'storage' &&\r\n isRequestWithoutPlanning(formStep.formModel);\r\n\r\n formStep.model.applicationNumber.disabled =\r\n formStep.model.newOrExistingApplication.disabled ||\r\n formStep.model.newOrExistingApplication.value !== 'change';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-newOrExistingPlant\r\n {\r\n if (\r\n formStep.formModel.applicationType == 'photovoltaicAndStorageLte30'\r\n ) {\r\n formStep.model.newOrExistingPlant.value = 'first';\r\n }\r\n\r\n formStep.model.newOrExistingPlant.disabled =\r\n applicationType === 'photovoltaic' ||\r\n applicationType == 'photovoltaicAndStorageLte30' ||\r\n (applicationType === 'storage' &&\r\n isRequestWithoutPlanning(formStep.formModel));\r\n\r\n for (const option of formStep.model.newOrExistingPlant.options) {\r\n switch (option.key) {\r\n case 'performanceIncrease':\r\n option.disabled = hasStorage;\r\n break;\r\n case 'capacityIncrease':\r\n option.disabled = !hasStorage;\r\n }\r\n }\r\n }\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-powerHeatCouplingPlantType\r\n formStep.model.powerHeatCouplingPlantType.disabled =\r\n applicationType !== 'powerHeatCoupling';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-powerHeatCouplingPaymentsBasedOnLawHint\r\n formStep.model.powerHeatCouplingPaymentsBasedOnLawHint.disabled =\r\n formStep.model.powerHeatCouplingPlantType.disabled ||\r\n formStep.model.powerHeatCouplingPlantType.value !==\r\n 'highEfficiencyChpPlant';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-bafaApprovalWillBeSubmittedLater\r\n formStep.model.bafaApprovalWillBeSubmittedLater.disabled =\r\n formStep.model.powerHeatCouplingPlantType.disabled ||\r\n formStep.model.powerHeatCouplingPlantType.value !==\r\n 'highEfficiencyChpPlant';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-initialCommissioningDate\r\n formStep.model.initialCommissioningDate.disabled =\r\n formStep.model.plantWasAlreadyCommissioned.value !== true;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-plantBuildingType\r\n {\r\n formStep.model.plantBuildingType.disabled =\r\n formStep.formModel.generationType.plantStructureType.disabled ||\r\n formStep.formModel.generationType.plantStructureType.value !==\r\n 'building' ||\r\n (isPv(formStep.formModel) &&\r\n (formStep.formModel.plantPerformance.photovoltaic\r\n .pvOverallNominalPower.value ?? 0) > 100) ||\r\n isMediumVoltage(formStep.formModel.powerConnection);\r\n }\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-plantPosition\r\n formStep.model.plantPosition.disabled =\r\n formStep.model.plantBuildingType.disabled ||\r\n formStep.model.plantBuildingType.value !== 'noResidentialBuilding';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-pvInstallationType\r\n {\r\n formStep.model.pvInstallationType.disabled =\r\n (applicationType !== 'photovoltaic' &&\r\n applicationType !== 'photovoltaicAndStorageLte30') ||\r\n (formStep.formModel.plantPerformance.photovoltaic\r\n .pvOverallNominalPower.value ?? 0) > 100 ||\r\n isMediumVoltage(formStep.formModel.powerConnection);\r\n\r\n for (const option of formStep.model.pvInstallationType.options) {\r\n switch (option.key) {\r\n case 'residentialOrSimilarBuilding':\r\n option.disabled =\r\n (formStep.formModel.generationType.plantStructureType\r\n .disabled ||\r\n formStep.formModel.generationType.plantStructureType\r\n .value !== 'noiseBarrier') &&\r\n (formStep.model.plantBuildingType.disabled ||\r\n formStep.model.plantBuildingType.value !==\r\n 'residentialBuilding') &&\r\n (formStep.model.plantPosition.disabled ||\r\n formStep.model.plantPosition.value) !== 'indoor';\r\n break;\r\n\r\n case 'outsideNonResidentialBuilding':\r\n option.disabled =\r\n formStep.model.plantPosition.disabled ||\r\n formStep.model.plantPosition.value !== 'outdoor';\r\n break;\r\n case 'outsideNonResidentialBuildingEEG48Abs1':\r\n option.disabled =\r\n formStep.model.plantPosition.disabled ||\r\n formStep.model.plantPosition.value !== 'outdoor';\r\n break;\r\n\r\n case 'structuralFacility':\r\n case 'nextToResidentialBuilding':\r\n case 'publicWasteDisposalFacilities':\r\n case 'approvedDevelopmentPlan':\r\n case 'agriculturalLandOrParkingLots':\r\n case 'artificialWaterBody':\r\n case 'drainedPeatland':\r\n option.disabled =\r\n formStep.formModel.generationType.disabled ||\r\n formStep.formModel.generationType.plantStructureType\r\n .value !== 'openSpacePlant';\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-pvInstallationTypeForAgriculturalLandOrParkingLots\r\n formStep.model.pvInstallationTypeForAgriculturalLandOrParkingLots.disabled =\r\n applicationType !== 'photovoltaic' ||\r\n formStep.model.pvInstallationType.disabled ||\r\n formStep.model.pvInstallationType.value !==\r\n 'agriculturalLandOrParkingLots';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-storageConnection\r\n // The field is only displayed if it is an application with storage.\r\n // and this application has planning maturity.\r\n formStep.model.storageConnection.disabled = !(\r\n hasStorage && !isRequestWithoutPlanning(formStep.formModel)\r\n );\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-storageCoupling\r\n {\r\n formStep.model.storageCoupling.disabled = !hasStorage;\r\n }\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-storageConnectionConcept\r\n {\r\n formStep.model.storageConnectionConcept.disabled =\r\n !hasStorage || !formStep.model.storageCoupling.value;\r\n\r\n for (const option of formStep.model.storageConnectionConcept.options) {\r\n switch (option.key) {\r\n case 'storageWithoutPowerGenerationPlantAndWithoutConsumptionPlant':\r\n case 'storageWithoutPowerGenerationPlantAndWithConsumptionPlant':\r\n case 'storageFacilityWithPowerGenerationPlantAndWithoutConsumptionPlant':\r\n case 'powerGenerationPlantWithStorageInTheConsumerPathAndConsumptionPlant':\r\n option.disabled = !isStorageCouplingAcCoupled(\r\n formStep.model,\r\n );\r\n break;\r\n\r\n case 'powerGenerationPlantWithStorageFacilityInTheGenerationPathAndConsumptionPlant':\r\n option.disabled = !isStorageCouplingDcCoupled(\r\n formStep.model,\r\n );\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Enable or disable all storageCoupling options based on the value of storageHasSeparateInverter\r\n // For normal storage applications, the options are always enabled.\r\n // For photovoltaicAndStorageLte30 applications, the options need to be set to acCoupled or dcCoupled depending on the value of storageHasSeparateInverter.\r\n const isStorageHasSeparateInverterEnabled = !formStep.formModel\r\n .plantPerformance.storageHasSeparateInverter.disabled;\r\n formStep.model.storageCoupling.options.forEach((option) => {\r\n option.disabled = isStorageHasSeparateInverterEnabled;\r\n });\r\n formStep.model.storageCoupling.userChangeable = !isStorageHasSeparateInverterEnabled;\r\n if (isStorageHasSeparateInverterEnabled) {\r\n formStep.model.storageCoupling.options.forEach((option) => {\r\n if (option.key === 'acCoupled') {\r\n option.disabled = !formStep.formModel.plantPerformance\r\n .storageHasSeparateInverter.value;\r\n } else if (option.key === 'dcCoupled') {\r\n option.disabled = !!formStep.formModel.plantPerformance\r\n .storageHasSeparateInverter.value;\r\n }\r\n });\r\n }\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-electricityTaxExemptionHint\r\n formStep.model.electricityTaxExemptionHint.disabled = hasStorage;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-tenantElectricitySurcharge\r\n formStep.model.tenantElectricitySurcharge.disabled =\r\n (applicationType !== 'photovoltaic' &&\r\n applicationType !== 'photovoltaicAndStorageLte30') ||\r\n isPluginGeneratingPlant(formStep.formModel) ||\r\n formStep.formModel.generationType.plantStructureType.value !==\r\n 'building';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-requirementTenantElectricitySurchargeHint\r\n formStep.model.requirementTenantElectricitySurchargeHint.disabled =\r\n formStep.model.tenantElectricitySurcharge.disabled ||\r\n !formStep.model.tenantElectricitySurcharge.value;\r\n\r\n formStep.model.plantBuildingTypeForTenantElectricitySurcharge.disabled =\r\n formStep.model.tenantElectricitySurcharge.disabled ||\r\n !formStep.model.tenantElectricitySurcharge.value ||\r\n !formStep.model.plantBuildingType.disabled ||\r\n (isPv(formStep.formModel) &&\r\n (formStep.formModel.plantPerformance.photovoltaic\r\n .pvOverallNominalPower.value ?? 0) <= 100);\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-minimumRequirementLivingSpace\r\n formStep.model.minimumRequirementLivingSpace.disabled =\r\n (formStep.model.plantBuildingTypeForTenantElectricitySurcharge.value ==\r\n 'noResidentialBuilding' &&\r\n !formStep.model.plantBuildingTypeForTenantElectricitySurcharge\r\n .disabled) ||\r\n (formStep.model.plantBuildingType.value == 'noResidentialBuilding' &&\r\n !formStep.model.plantBuildingType.disabled) ||\r\n formStep.model.tenantElectricitySurcharge.disabled ||\r\n !formStep.model.tenantElectricitySurcharge.value;\r\n\r\n formStep.model.noResidentialExemptions.disabled =\r\n formStep.model.tenantElectricitySurcharge.disabled ||\r\n !formStep.model.tenantElectricitySurcharge.value == true ||\r\n (formStep.model.plantBuildingTypeForTenantElectricitySurcharge.value !==\r\n 'noResidentialBuilding' &&\r\n !formStep.model.plantBuildingTypeForTenantElectricitySurcharge\r\n .disabled) ||\r\n (formStep.model.plantBuildingType.value !== 'noResidentialBuilding' &&\r\n !formStep.model.plantBuildingType.disabled);\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-electricityConsumptionWithinThisBuilding\r\n formStep.model.electricityConsumptionWithinThisBuilding.disabled =\r\n formStep.model.tenantElectricitySurcharge.disabled ||\r\n !formStep.model.tenantElectricitySurcharge.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-noAdditionalNetworkForEndConsumer\r\n formStep.model.noAdditionalNetworkForEndConsumer.disabled =\r\n formStep.model.tenantElectricitySurcharge.disabled ||\r\n !formStep.model.tenantElectricitySurcharge.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-federalNetworkAgencyHint\r\n formStep.model.federalNetworkAgencyHint.disabled =\r\n formStep.model.tenantElectricitySurcharge.disabled ||\r\n !formStep.model.tenantElectricitySurcharge.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-proofOfRegistrationPhotovoltaic\r\n formStep.model.proofOfRegistrationPhotovoltaic.disabled =\r\n formStep.model.tenantElectricitySurcharge.disabled ||\r\n !formStep.model.tenantElectricitySurcharge.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-proofOfAllocationOfTenantElectricitySurcharge\r\n formStep.model.proofOfAllocationOfTenantElectricitySurcharge.disabled =\r\n formStep.model.tenantElectricitySurcharge.disabled ||\r\n !formStep.model.tenantElectricitySurcharge.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-declarationEnwgHint\r\n formStep.model.declarationEnwgHint.disabled =\r\n formStep.model.tenantElectricitySurcharge.disabled ||\r\n !formStep.model.tenantElectricitySurcharge.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-plantOperatorKnowsEnwgSpecifications\r\n formStep.model.plantOperatorKnowsEnwgSpecifications.disabled =\r\n formStep.model.tenantElectricitySurcharge.disabled ||\r\n !formStep.model.tenantElectricitySurcharge.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-storageCharge\r\n {\r\n formStep.model.storageCharge.disabled =\r\n !hasStorage || !formStep.model.storageCoupling.value;\r\n\r\n for (const option of formStep.model.storageCharge.options) {\r\n switch (option.key) {\r\n case 'onlyFromEeg':\r\n case 'onlyFromKwkg':\r\n case 'fromEegAndKwkg':\r\n case 'fromPublicGridAndEeg':\r\n case 'fromPublicGridAndKwkg':\r\n case 'fromPublicGridAndEegAndKwkg':\r\n option.disabled =\r\n isStorageConnectionConceptWithoutPowerGeneration(\r\n formStep.model,\r\n ) ||\r\n isStorageConnectionConceptWithoutPowerGenerationAndWithConsumptionPlant(\r\n formStep.model,\r\n );\r\n break;\r\n\r\n case 'onlyFromPublicGrid':\r\n option.disabled =\r\n !isStorageConnectionConceptWithoutPowerGeneration(\r\n formStep.model,\r\n ) &&\r\n !isStorageConnectionConceptWithoutPowerGenerationAndWithConsumptionPlant(\r\n formStep.model,\r\n );\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-storageDischarge\r\n {\r\n formStep.model.storageDischarge.disabled =\r\n !hasStorage || !formStep.model.storageCoupling.value;\r\n\r\n for (const option of formStep.model.storageDischarge.options) {\r\n switch (option.key) {\r\n case 'onlyIntoCustomersGridSelfSupply':\r\n case 'intoCustomersGridAndPublicGridBivalent':\r\n option.disabled =\r\n !isStorageConnectionConceptStorageInGenerationPath(\r\n formStep.model,\r\n ) &&\r\n !isStorageConnectionConceptStorageInConsumerPath(\r\n formStep.model,\r\n ) &&\r\n !isStorageConnectionConceptWithoutPowerGenerationAndWithConsumptionPlant(\r\n formStep.model,\r\n );\r\n break;\r\n\r\n case 'onlyIntoPublicGridGridFeedIn':\r\n option.disabled =\r\n !isStorageConnectionConceptWithoutPowerGeneration(\r\n formStep.model,\r\n ) &&\r\n !isStorageConnectionConceptWithPowerGeneration(\r\n formStep.model,\r\n );\r\n break;\r\n }\r\n }\r\n }\r\n\r\n const storageChargeFromPublicGrid = isStorageChargeFromPublicGrid(\r\n formStep.model,\r\n );\r\n\r\n const storageDischargeIntoPublicGrid = isStorageDischargeIntoPublicGrid(\r\n formStep.model,\r\n );\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-storageBalancingEnergyMarketParticipation\r\n formStep.model.storageBalancingEnergyMarketParticipation.disabled =\r\n !hasStorage ||\r\n (!storageChargeFromPublicGrid && !storageDischargeIntoPublicGrid);\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-storageBalancingEnergyMarketParticipationType\r\n {\r\n formStep.model.storageBalancingEnergyMarketParticipationType.disabled =\r\n formStep.model.storageBalancingEnergyMarketParticipation.disabled ||\r\n !formStep.model.storageBalancingEnergyMarketParticipation.value;\r\n\r\n for (const option of formStep.model\r\n .storageBalancingEnergyMarketParticipationType.options) {\r\n switch (option.key) {\r\n case 'positiveAndNegative':\r\n option.disabled =\r\n !storageChargeFromPublicGrid ||\r\n !storageDischargeIntoPublicGrid;\r\n break;\r\n\r\n case 'onlyPositive':\r\n option.disabled = !storageDischargeIntoPublicGrid;\r\n break;\r\n\r\n case 'onlyNegative':\r\n option.disabled = !storageChargeFromPublicGrid;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n formStep.model.storagePublicDischargeWarning.disabled =\r\n !hasStorage ||\r\n !(\r\n (isStorageConnectionConceptStorageInGenerationPath(\r\n formStep.model,\r\n ) ||\r\n isStorageConnectionConceptStorageInConsumerPath(\r\n formStep.model,\r\n )) &&\r\n isStorageDischargeCustomersGridAndPublicGrid(formStep.model)\r\n );\r\n\r\n await plantDataInfeedManagementRules(formStep);\r\n};\r\n","import { PropertyOwnerFormStep } from '@/types/forms/formSteps/propertyOwnerFormStep';\r\n\r\nexport const propertyOwnerRules = async (\r\n formStep: { model: PropertyOwnerFormStep } & Vue,\r\n): Promise => {\r\n formStep.model.owners.items.forEach((owner) => {\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854571973/Formular+Grundst+ckseigent+mer#FormularGrundstückseigentümer-companyName\r\n owner.companyName.disabled = owner.salutation.value !== 'company';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854571973/Formular+Grundst+ckseigent+mer#FormularGrundstückseigentümer-ownerName.firstName\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854571973/Formular+Grundst+ckseigent+mer#FormularGrundstückseigentümer-ownerName.lastName\r\n owner.ownerName.disabled = owner.salutation.value === 'company';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854571973/Formular+Grundst+ckseigent+mer#FormularGrundstückseigentümer-contactPerson.firstName\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854571973/Formular+Grundst+ckseigent+mer#FormularGrundstückseigentümer-contactPerson.lastName\r\n owner.contactPersonName.disabled = owner.salutation.value !== 'company';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854571973/Formular+Grundst+ckseigent+mer#FormularGrundstückseigentümer-birthday\r\n owner.birthday.disabled = owner.salutation.value === 'company';\r\n });\r\n};\r\n","import { PlantPerformanceFormStep } from '@/types/forms/formSteps/plantPerformanceFormStep';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\n\r\nexport const plantPerformancePhotovoltaicRules = async (\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n formStep: {\r\n model: PlantPerformanceFormStep;\r\n formModel: ApplicationForm;\r\n } & Vue,\r\n): Promise => {\r\n const pvOverallNominalPower =\r\n formStep.model.photovoltaic.pvOverallNominalPower.value;\r\n\r\n formStep.model.photovoltaic.pvTotalPower30.disabled =\r\n formStep.formModel.applicationType !== 'photovoltaicAndStorageLte30' ||\r\n pvOverallNominalPower === null ||\r\n pvOverallNominalPower <= 30;\r\n};\r\n","import { PlantPerformanceFormStep } from '@/types/forms/formSteps/plantPerformanceFormStep';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport { isTotalPlantPerformanceAbove300 } from '../common';\r\n\r\nexport const plantPerformanceStorageRules = async (\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n formStep: {\r\n model: PlantPerformanceFormStep;\r\n formModel: ApplicationForm;\r\n } & Vue,\r\n): Promise => {\r\n const storageOverallDischargePower =\r\n formStep.model.storage.storageOverallDischargePower.value;\r\n\r\n const hasTotalPlantPerformanceAbove300 = isTotalPlantPerformanceAbove300(\r\n formStep.formModel,\r\n );\r\n\r\n for (const module of formStep.model.storage.storageModules.items) {\r\n module.storageMemoryExpansion.disabled = hasTotalPlantPerformanceAbove300;\r\n }\r\n\r\n formStep.model.storage.storageTotalPower30.disabled =\r\n formStep.formModel.applicationType !== 'photovoltaicAndStorageLte30' ||\r\n storageOverallDischargePower === null ||\r\n storageOverallDischargePower <= 30;\r\n};\r\n","import Vue from 'vue';\r\nimport { PlantPerformanceFormStep } from '@/types/forms/formSteps/plantPerformanceFormStep';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport {\r\n isRequestWithoutPlanning,\r\n isTotalPlantPerformanceAbove300,\r\n isTotalPlantPerformanceBelow300,\r\n} from '../common';\r\n\r\nexport const plantPerformanceGeneratorRules = async (\r\n formStep: {\r\n model: PlantPerformanceFormStep;\r\n formModel: ApplicationForm;\r\n } & Vue,\r\n): Promise => {\r\n const hasTotalPlantPerformanceAbove300 = isTotalPlantPerformanceAbove300(\r\n formStep.formModel,\r\n );\r\n const hasTotalPlantPerformanceBelow300 = isTotalPlantPerformanceBelow300(\r\n formStep.formModel,\r\n );\r\n const requestWithoutPlanning = isRequestWithoutPlanning(formStep.formModel);\r\n\r\n for (const module of formStep.model.generator.generatorModules.items) {\r\n const generatorTotalActivePower =\r\n module.generatorTotalActivePower.value ?? 0;\r\n const generatorTotalApparentPower =\r\n module.generatorTotalApparentPower.value ?? 0;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573576/Feldgruppe+Generatoren+nicht+PV+oder+Speicher+NS#FeldgruppeGeneratoren(nichtPVoderSpeicher)NS-totalActivePower\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573576/Feldgruppe+Generatoren+nicht+PV+oder+Speicher+NS#FeldgruppeGeneratoren(nichtPVoderSpeicher)NS-totalApparentPower\r\n module.generatorTotalActivePowerIsGreaterThanTotalApparentPowerWarning.disabled =\r\n !hasTotalPlantPerformanceBelow300 ||\r\n generatorTotalActivePower <= generatorTotalApparentPower;\r\n\r\n module.generatorContributionSymmetricalShortCircuitCurrent.disabled =\r\n !hasTotalPlantPerformanceAbove300 || requestWithoutPlanning;\r\n module.generatorVoltageSymmetricalShortCircuitCurrent.disabled =\r\n !hasTotalPlantPerformanceAbove300 || requestWithoutPlanning;\r\n module.generatorContributionSustainedShortCircuitCurrent.disabled =\r\n !hasTotalPlantPerformanceAbove300 || requestWithoutPlanning;\r\n module.generatorVoltageSustainedShortCircuitCurrent.disabled =\r\n !hasTotalPlantPerformanceAbove300 || requestWithoutPlanning;\r\n }\r\n};\r\n","import Vue from 'vue';\r\nimport { PlantPerformanceFormStep } from '@/types/forms/formSteps/plantPerformanceFormStep';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport {\r\n getOverallNominalPower,\r\n isOverallActivePowerWarningEnabled,\r\n} from '../../../utilities/application/plantPerformance';\r\nimport {\r\n isPluginGeneratingPlant,\r\n isPv,\r\n isRequestWithoutPlanning,\r\n isTotalPlantPerformanceAbove300,\r\n} from '../common';\r\n\r\nexport const plantPerformanceInverterRules = async (\r\n formStep: {\r\n model: PlantPerformanceFormStep;\r\n formModel: ApplicationForm;\r\n } & Vue,\r\n): Promise => {\r\n const hasTotalPlantPerformanceAbove300 = isTotalPlantPerformanceAbove300(\r\n formStep.formModel,\r\n );\r\n const requestWithoutPlanning = isRequestWithoutPlanning(formStep.formModel);\r\n\r\n for (const module of formStep.model.inverter.inverterModules.items.concat(\r\n formStep.model.inverterStorage.inverterModules.items,\r\n )) {\r\n module.inverterManufacturerAndModuleType.disabled = isPluginGeneratingPlant(\r\n formStep.formModel,\r\n );\r\n\r\n module.inverterContributionSymmetricalShortCircuitCurrent.disabled =\r\n !hasTotalPlantPerformanceAbove300 || requestWithoutPlanning;\r\n module.inverterVoltageSymmetricalShortCircuitCurrent.disabled =\r\n !hasTotalPlantPerformanceAbove300 || requestWithoutPlanning;\r\n module.inverterContributionSustainedShortCircuitCurrent.disabled =\r\n !hasTotalPlantPerformanceAbove300 || requestWithoutPlanning;\r\n module.inverterVoltageSustainedShortCircuitCurrent.disabled =\r\n !hasTotalPlantPerformanceAbove300 || requestWithoutPlanning;\r\n }\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4864934167/Feldgruppe+Wechselrichter+PV+und+Speicher+MS#FeldgruppeWechselrichterPVundSpeicherMS-overallActivePower\r\n // if the overall active power differs from the photovoltaic overall nominal power\r\n // or the storage overall discharge power by more than 10%, a warning is shown in the form\r\n formStep.model.inverter.inverterOverallActivePowerWarning.disabled =\r\n isPluginGeneratingPlant(formStep.formModel) ||\r\n !isPv(formStep.formModel) ||\r\n !isOverallActivePowerWarningEnabled(\r\n formStep.model.inverter.inverterOverallActivePower.value,\r\n getOverallNominalPower(formStep.model),\r\n );\r\n\r\n formStep.model.inverter.inverterOverallActivePower.disabled = formStep.model.inverterStorage.inverterOverallActivePower.disabled = isPluginGeneratingPlant(\r\n formStep.formModel,\r\n );\r\n\r\n formStep.model.inverter.inverterOverallApparentPower.disabled = formStep.model.inverterStorage.inverterOverallApparentPower.disabled = isPluginGeneratingPlant(\r\n formStep.formModel,\r\n );\r\n\r\n formStep.model.inverterStorage.inverterOverallActivePowerWarning.disabled = true;\r\n};\r\n","import { PlantPerformanceFormStep } from '@/types/forms/formSteps/plantPerformanceFormStep';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport {\r\n isPluginGeneratingPlant,\r\n isPv,\r\n isPvAndStorageLte30,\r\n isStorage,\r\n isTotalPlantPerformanceAbove300,\r\n isTotalPlantPerformanceBelow300,\r\n} from './common';\r\nimport Vue from 'vue';\r\nimport { plantPerformancePhotovoltaicRules } from './plantPerformance/photovoltaic';\r\nimport { plantPerformanceStorageRules } from './plantPerformance/storage';\r\nimport { plantPerformanceGeneratorRules } from './plantPerformance/generator';\r\nimport { plantPerformanceInverterRules } from './plantPerformance/inverter';\r\nimport { getOverallNominalPower } from '../../utilities/application/plantPerformance';\r\n\r\nexport const plantPerformanceRules = async (\r\n formStep: {\r\n model: PlantPerformanceFormStep;\r\n formModel: ApplicationForm;\r\n } & Vue,\r\n): Promise => {\r\n formStep.model.photovoltaic.disabled = !isPv(formStep.formModel);\r\n\r\n formStep.model.storage.disabled = !isStorage(formStep.formModel);\r\n\r\n formStep.model.inverter.disabled = !isInverterEnabled(formStep.formModel);\r\n\r\n formStep.model.inverterStorage.disabled = !isStorageInverterEnabled(\r\n formStep.formModel,\r\n );\r\n\r\n formStep.model.generator.disabled = !isGeneratorEnabled(formStep.formModel);\r\n\r\n formStep.model.certificateHint.disabled = !isPluginGeneratingPlant(\r\n formStep.formModel,\r\n );\r\n\r\n // we have to wait one additional tick for the component watchers\r\n // to set the overall sums to the underlying models\r\n await Vue.nextTick();\r\n\r\n // https://netzkern.atlassian.net/browse/ED-597\r\n const overallNominalPower = getOverallNominalPower(formStep.model);\r\n\r\n formStep.model.overallNominalPowerNotMatchingTotalPlantPerformanceValueTypeWarning.disabled =\r\n formStep.formModel.generationType.totalPlantPerformance.disabled ||\r\n overallNominalPower === null ||\r\n overallNominalPower === 0 ||\r\n (isTotalPlantPerformanceAbove300(formStep.formModel) &&\r\n overallNominalPower > 300) ||\r\n (isTotalPlantPerformanceBelow300(formStep.formModel) &&\r\n overallNominalPower <= 300);\r\n\r\n formStep.model.storageHasSeparateInverter.disabled = !isPvAndStorageLte30(\r\n formStep.formModel,\r\n );\r\n\r\n formStep.model.inverterStorage.disabled =\r\n formStep.model.storageHasSeparateInverter.disabled ||\r\n !formStep.model.storageHasSeparateInverter.value;\r\n\r\n await plantPerformanceGeneratorRules(formStep);\r\n await plantPerformanceInverterRules(formStep);\r\n await plantPerformancePhotovoltaicRules(formStep);\r\n await plantPerformanceStorageRules(formStep);\r\n};\r\n\r\nfunction isInverterEnabled(form: ApplicationForm): boolean {\r\n const result = isStorage(form) || isPv(form);\r\n return result;\r\n}\r\n\r\nfunction isStorageInverterEnabled(form: ApplicationForm): boolean {\r\n const result = isPvAndStorageLte30(form) && true;\r\n return result;\r\n}\r\n\r\nfunction isGeneratorEnabled(form: ApplicationForm): boolean {\r\n return !isStorage(form) && !isPv(form);\r\n}\r\n","import { SelectField } from '@/types/forms/fields/selectField';\r\nimport { MeasuringConceptsFormStep } from '@/types/forms/formSteps/measuringConceptsFormStep';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport {\r\n isPluginGeneratingPlant,\r\n isPvAndStorageLte30,\r\n isStorage,\r\n lawParagraph14aConditionsMet,\r\n} from './common';\r\nimport { ValidationProperties, ValidationEvaluation } from 'vue/types/vue';\r\nimport { Validation } from 'vuelidate';\r\n\r\nexport const measuringConceptsRules = async (\r\n formStep: {\r\n model: MeasuringConceptsFormStep;\r\n formModel: ApplicationForm;\r\n validations:\r\n | (Validation &\r\n ValidationProperties &\r\n ValidationEvaluation)\r\n | undefined;\r\n } & Vue,\r\n): Promise => {\r\n const zeroInfeed = formStep.model.operatingMode.options.find(\r\n (o) => o.key === 'zeroInfeed',\r\n );\r\n\r\n if (zeroInfeed) {\r\n zeroInfeed.disabled = true;\r\n }\r\n\r\n const commercialTransfer = formStep.model.operatingMode.options.find(\r\n (o) => o.key === 'commercialTransfer',\r\n );\r\n\r\n if (commercialTransfer) {\r\n commercialTransfer.disabled =\r\n formStep.formModel.applicationType === 'storage' ||\r\n isPluginGeneratingPlant(formStep.formModel);\r\n }\r\n\r\n const storageOperatingMode = isPvAndStorageLte30(formStep.formModel)\r\n ? formStep.model.operatingModeStorage\r\n : formStep.model.operatingMode;\r\n\r\n formStep.model.operatingModeStorage.disabled = !isPvAndStorageLte30(\r\n formStep.formModel,\r\n );\r\n\r\n if (isStorage(formStep.formModel)) {\r\n storageOperatingMode.options.forEach((o) => (o.disabled = true));\r\n\r\n const storageDischarge =\r\n formStep.formModel.plantData.storageDischarge.value;\r\n\r\n switch (storageDischarge) {\r\n case 'onlyIntoCustomersGridSelfSupply':\r\n SelectField.preselectExactlyOneOption(\r\n storageOperatingMode,\r\n 'zeroInfeed',\r\n );\r\n break;\r\n case 'intoCustomersGridAndPublicGridBivalent':\r\n SelectField.preselectExactlyOneOption(\r\n storageOperatingMode,\r\n 'surplusInfeed',\r\n );\r\n break;\r\n case 'onlyIntoPublicGridGridFeedIn':\r\n SelectField.preselectExactlyOneOption(\r\n storageOperatingMode,\r\n 'fullInfeed',\r\n );\r\n break;\r\n }\r\n }\r\n\r\n if (isPluginGeneratingPlant(formStep.formModel)) {\r\n if (isStorage(formStep.formModel)) {\r\n SelectField.preselectExactlyOneOption(\r\n formStep.model.operatingMode,\r\n 'zeroInfeed',\r\n );\r\n } else {\r\n SelectField.preselectExactlyOneOption(\r\n formStep.model.operatingMode,\r\n 'surplusInfeed',\r\n );\r\n }\r\n }\r\n\r\n formStep.model.fullInfeedBonus.disabled =\r\n (formStep.formModel.applicationType !== 'photovoltaic' &&\r\n formStep.formModel.applicationType !==\r\n 'photovoltaicAndStorageLte30') ||\r\n formStep.model.operatingMode.value !== 'fullInfeed' ||\r\n (formStep.formModel.generationType.plantStructureType.value !==\r\n 'building' &&\r\n formStep.formModel.generationType.plantStructureType.value !==\r\n 'noiseBarrier');\r\n\r\n formStep.model.fullInfeedBonusHeadline.disabled =\r\n formStep.model.fullInfeedBonus.disabled;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565613/Formular+Erzeugungsart#FormularErzeugungsart-meterNumber\r\n // https://netzkern.atlassian.net/browse/ED-644\r\n const isLowVoltageWithExistingConnection =\r\n !formStep.formModel.powerConnection.doesConnectionExist.disabled &&\r\n formStep.formModel.powerConnection.doesConnectionExist.value ===\r\n 'yes' &&\r\n !formStep.formModel.powerConnection.whichVoltageLevel.disabled &&\r\n formStep.formModel.powerConnection.whichVoltageLevel.value ===\r\n 'lowVoltage';\r\n formStep.model.meterNumber.disabled =\r\n !(\r\n isPluginGeneratingPlant(formStep.formModel) ||\r\n isLowVoltageWithExistingConnection\r\n ) || formStep.model.operatingMode.value == 'fullInfeed';\r\n\r\n formStep.model.measuringPointOperatorInfo.disabled = !lawParagraph14aConditionsMet(\r\n formStep.formModel,\r\n );\r\n\r\n formStep.model.measuringPointOperation.disabled =\r\n isStorage(formStep.formModel) &&\r\n !lawParagraph14aConditionsMet(formStep.formModel);\r\n\r\n formStep.model.measuringPointOperator.disabled =\r\n formStep.model.measuringPointOperation.disabled ||\r\n formStep.model.measuringPointOperation.value !== 'other';\r\n\r\n formStep.model.priceSheetMeasuringPointOperation.disabled =\r\n formStep.model.measuringPointOperation.disabled ||\r\n formStep.model.measuringPointOperation.value !== 'ewe';\r\n\r\n formStep.model.measuringPointOperationInfoEwe.disabled =\r\n !isStorage(formStep.formModel) ||\r\n !(\r\n !formStep.model.measuringPointOperation.disabled &&\r\n formStep.model.measuringPointOperation.value === 'ewe'\r\n );\r\n formStep.model.measuringPointOperationFollowingConditionsAndGtacEwe.disabled =\r\n !isStorage(formStep.formModel) ||\r\n !(\r\n !formStep.model.measuringPointOperation.disabled &&\r\n formStep.model.measuringPointOperation.value === 'ewe'\r\n );\r\n formStep.model.measuringPointOperationInfoOther.disabled =\r\n !isStorage(formStep.formModel) ||\r\n !(\r\n !formStep.model.measuringPointOperation.disabled &&\r\n formStep.model.measuringPointOperation.value === 'other'\r\n );\r\n\r\n formStep.model.storageHeadline.disabled = !isPvAndStorageLte30(\r\n formStep.formModel,\r\n );\r\n};\r\n","export const controllableConsumptionDevicesRules = async (): Promise => {\r\n // no rules at the moment\r\n};\r\n","import { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport { BillingFormStep } from '@/types/forms/formSteps/billingFormStep';\r\nimport { getOverallNominalPower } from '../../utilities/application/plantPerformance';\r\nimport { isMediumVoltage } from './common';\r\n\r\nexport const billingRules = async (\r\n formStep: { model: BillingFormStep; formModel: ApplicationForm } & Vue,\r\n): Promise => {\r\n const applicationType = formStep.formModel.applicationType;\r\n\r\n const nominalPower =\r\n getOverallNominalPower(formStep.formModel.plantPerformance) ?? 0;\r\n\r\n const noPvOrDeaWithNominalPowerLte100AndNotMv =\r\n (applicationType !== 'photovoltaic' &&\r\n applicationType !== 'photovoltaicAndStorageLte30' &&\r\n applicationType !== 'dea') ||\r\n nominalPower > 100 ||\r\n isMediumVoltage(formStep.formModel.powerConnection);\r\n\r\n formStep.model.plantSalesMethodAssignment.disabled = noPvOrDeaWithNominalPowerLte100AndNotMv;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Abrechnung#FormularAbrechnung-noEegRemuneration\r\n formStep.model.noEegRemuneration.disabled =\r\n (applicationType !== 'photovoltaic' &&\r\n applicationType !== 'photovoltaicAndStorageLte30' &&\r\n applicationType !== 'dea') ||\r\n (!formStep.formModel.generationType\r\n .proceedWithFullRegistrationForEEGCompensation.disabled &&\r\n !!formStep.formModel.generationType\r\n .proceedWithFullRegistrationForEEGCompensation.value);\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Abrechnung#FormularAbrechnung-reasonNoEegRemuneration\r\n formStep.model.reasonNoEegRemuneration.disabled =\r\n formStep.model.noEegRemuneration.disabled ||\r\n !formStep.model.noEegRemuneration.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Abrechnung#FormularAbrechnung-explanationNoEegRemuneration\r\n formStep.model.explanationNoEegRemuneration.disabled =\r\n formStep.model.reasonNoEegRemuneration.disabled ||\r\n formStep.model.reasonNoEegRemuneration.value !== 'other';\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Abrechnung#FormularAbrechnung-noEegRemunerationHint\r\n formStep.model.noEegRemunerationHint.disabled =\r\n formStep.model.noEegRemuneration.disabled ||\r\n !formStep.model.noEegRemuneration.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573897/Formular+Abrechnung#FormularAbrechnung-taxNumber\r\n formStep.model.taxNumber.disabled =\r\n (!formStep.model.taxNumberWillFollow.disabled &&\r\n !!formStep.model.taxNumberWillFollow.value) ||\r\n formStep.model.tax.disabled ||\r\n formStep.model.tax.value === 'noSalesTax';\r\n\r\n formStep.model.smallPVTaxAdvisorHint.disabled =\r\n nominalPower > 30 ||\r\n formStep.formModel.powerConnection.hasExistingPlants.value ||\r\n formStep.model.tax.value === 'noSalesTax';\r\n\r\n formStep.model.matchingTaxIDHint.disabled = !formStep.formModel\r\n .powerConnection.hasExistingPlants.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573897/Formular+Abrechnung#FormularAbrechnung-taxNumberWillFollow\r\n formStep.model.taxNumberWillFollow.disabled =\r\n formStep.model.tax.disabled ||\r\n formStep.model.tax.value === 'noSalesTax';\r\n\r\n formStep.model.noFinancialDistress.disabled = noPvOrDeaWithNominalPowerLte100AndNotMv;\r\n\r\n formStep.model.noPendingEURecoveryClaims.disabled = noPvOrDeaWithNominalPowerLte100AndNotMv;\r\n\r\n const noEegRenumerationIsChecked =\r\n !formStep.model.noEegRemuneration.disabled &&\r\n !!formStep.model.noEegRemuneration.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573897/Formular+Abrechnung#FormularAbrechnung-directDebitMandate\r\n formStep.model.directDebitMandate.disabled = noEegRenumerationIsChecked;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573897/Formular+Abrechnung#FormularAbrechnung-iban\r\n formStep.model.iban.disabled = noEegRenumerationIsChecked;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573897/Formular+Abrechnung#FormularAbrechnung-nameAndDomicileCreditInstitution\r\n formStep.model.nameAndDomicileCreditInstitution.disabled = noEegRenumerationIsChecked;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573897/Formular+Abrechnung#FormularAbrechnung-date\r\n formStep.model.date.disabled = noEegRenumerationIsChecked;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573897/Formular+Abrechnung#FormularAbrechnung-accountOwnerName\r\n formStep.model.accountOwnerName.disabled = noEegRenumerationIsChecked;\r\n};\r\n","import { DocumentsFormStep } from '@/types/forms/formSteps/documentsFormStep';\r\nimport { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport {\r\n isPluginGeneratingPlant,\r\n isPvAndStorageLte30,\r\n isRequestWithPlanning,\r\n isRequestWithoutPlanning,\r\n isStorage,\r\n isStorageConnectionConceptStorageInGenerationPath,\r\n isTotalPlantPerformanceAbove300,\r\n isTotalPlantPerformanceBelow300,\r\n} from './common';\r\nimport Vue from 'vue';\r\nimport { FormList } from '@/types/forms/fields/formList';\r\nimport { ReferenceFormGroup } from '@/types/forms/formGroups/referenceFormGroup';\r\nimport { FormField } from '@/types/forms/fields/formField';\r\nimport { toggleRequiredValidator } from '@/utilities/toggleRequiredValidator';\r\nimport {\r\n getOverallActivePower,\r\n getOverallApparentPower,\r\n} from '../../utilities/application/plantPerformance';\r\nimport { getOverallActivePowerWithPreExisting } from '../../utilities/application/powerConnection';\r\n\r\nexport const documentsRules = async (\r\n formStep: {\r\n model: DocumentsFormStep;\r\n formModel: ApplicationForm;\r\n } & Vue,\r\n): Promise => {\r\n const hasStorage = isStorage(formStep.formModel);\r\n const hasLowVoltage =\r\n formStep.formModel.powerConnection.whichVoltageLevel.value ==\r\n 'lowVoltage';\r\n const isphotovoltaicAndStorageLte30 =\r\n formStep.formModel.applicationType == 'photovoltaicAndStorageLte30';\r\n const hasMediumVoltage =\r\n formStep.formModel.powerConnection.whichVoltageLevel.value ==\r\n 'mediumVoltage';\r\n const hasUnknownVoltage =\r\n formStep.formModel.powerConnection.whichVoltageLevel.value == 'unknown';\r\n\r\n const apparentPower =\r\n getOverallApparentPower(\r\n formStep.formModel.applicationType,\r\n formStep.formModel.plantPerformance,\r\n ) ?? 0;\r\n const activePower =\r\n getOverallActivePower(\r\n formStep.formModel.applicationType,\r\n formStep.formModel.plantPerformance,\r\n ) ?? 0;\r\n\r\n const newAndExistingActivePower = getOverallActivePowerWithPreExisting(\r\n formStep.formModel.applicationType,\r\n formStep.formModel.plantPerformance,\r\n formStep.formModel.powerConnection,\r\n );\r\n\r\n const hasLvApparentBelowOrEqual30 = hasLowVoltage && apparentPower <= 30;\r\n const hasLvApparentAbove30 = hasLowVoltage && apparentPower > 30;\r\n\r\n const hasMvAbove135 = hasMediumVoltage && activePower >= 135;\r\n const hasUnBelowOrEqual300 = hasUnknownVoltage && activePower <= 300;\r\n const hasUnAbove300 = hasUnknownVoltage && activePower > 300;\r\n\r\n const hasLvWithPreExistingAbove30 =\r\n hasLowVoltage && newAndExistingActivePower > 30;\r\n const hasMvWithPreExistingAbove30 =\r\n hasMediumVoltage && newAndExistingActivePower > 30;\r\n const hasMvWithPreExistingAbove270 =\r\n hasMediumVoltage && newAndExistingActivePower > 270;\r\n\r\n const requestWithPlanning = isRequestWithPlanning(formStep.formModel);\r\n const requestWithoutPlanning = isRequestWithoutPlanning(formStep.formModel);\r\n\r\n const hasTotalPlantPerformanceAbove300 = isTotalPlantPerformanceAbove300(\r\n formStep.formModel,\r\n );\r\n const hasTotalPlantPerformanceBelow300 = isTotalPlantPerformanceBelow300(\r\n formStep.formModel,\r\n );\r\n\r\n if (requestWithoutPlanning) {\r\n for (const field of Object.values(formStep.model)) {\r\n if (field instanceof FormField) {\r\n field.disabled = true;\r\n }\r\n\r\n if (field instanceof FormList) {\r\n field.disabled = true;\r\n\r\n for (const module of field.items) {\r\n for (const moduleField of Object.values(module)) {\r\n if (moduleField instanceof FormField) {\r\n moduleField.disabled = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n formStep.model.sitePlanWithLotNumber.disabled = false;\r\n }\r\n } else {\r\n syncArray(\r\n formStep.formModel.plantPerformance.generator.generatorModules,\r\n formStep.model.generatorModules,\r\n );\r\n syncArray(\r\n formStep.formModel.plantPerformance.inverter.inverterModules,\r\n formStep.model.inverterModules,\r\n );\r\n syncArray(\r\n formStep.formModel.plantPerformance.inverterStorage.inverterModules,\r\n formStep.model.inverterStorageModules,\r\n );\r\n syncArray(\r\n formStep.formModel.plantPerformance.storage.storageModules,\r\n formStep.model.storageModules,\r\n );\r\n\r\n await Vue.nextTick();\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565613/Formular+Erzeugungsart#FormularErzeugungsart-meterPicture\r\n formStep.model.meterPicture.disabled =\r\n formStep.formModel.generationType.plugInGeneratingPlant.disabled ||\r\n !formStep.formModel.generationType.plugInGeneratingPlant.value;\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4868800911/Formular+Anlagendaten#FormularAnlagendaten-bafaApproval\r\n formStep.model.bafaApproval.disabled =\r\n formStep.formModel.plantData.bafaApprovalWillBeSubmittedLater\r\n .disabled ||\r\n formStep.formModel.plantData.bafaApprovalWillBeSubmittedLater\r\n .value === true;\r\n\r\n //https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573319/Formular+Anlagenleistung#FormularAnlagenleistung-gridAndPlantProtectionProofOfConformity\r\n formStep.model.gridAndPlantProtectionProofOfConformity.disabled =\r\n isPluginGeneratingPlant(formStep.formModel) ||\r\n isTotalPlantPerformanceAbove300(formStep.formModel) ||\r\n hasMvWithPreExistingAbove270 ||\r\n hasUnAbove300;\r\n\r\n toggleRequiredValidator(\r\n formStep.model.gridAndPlantProtectionProofOfConformity,\r\n hasLvApparentAbove30 ||\r\n hasLvWithPreExistingAbove30 ||\r\n hasMvWithPreExistingAbove30 ||\r\n (hasUnBelowOrEqual300 && newAndExistingActivePower > 30),\r\n );\r\n\r\n // we have to wait one additional tick for the component watchers\r\n // to set the overall sums to the underlying models\r\n await Vue.nextTick();\r\n\r\n const isNotStorageOrNotPowerGenerationPlantWithStorageFacilityInTheGenerationPathAndConsumptionPlant =\r\n !hasStorage ||\r\n isphotovoltaicAndStorageLte30 ||\r\n formStep.formModel.plantData.storageConnectionConcept.value !==\r\n 'powerGenerationPlantWithStorageFacilityInTheGenerationPathAndConsumptionPlant';\r\n\r\n // Generator\r\n for (const module of formStep.model.generatorModules.items) {\r\n // lv / <=300\r\n module.generatorConformityConfirmationOrUnitCertificate.disabled = !hasTotalPlantPerformanceBelow300;\r\n module.generatorProofOfConformity.disabled = !hasTotalPlantPerformanceBelow300;\r\n\r\n // mv / >300\r\n module.generatorUnitOrPrototypeConfirmation.disabled = !hasTotalPlantPerformanceAbove300;\r\n module.generatorComponentCertificate.disabled = !hasTotalPlantPerformanceAbove300;\r\n\r\n module.generatorProofOfConformity.disabled =\r\n !hasTotalPlantPerformanceBelow300 ||\r\n !isNotStorageOrNotPowerGenerationPlantWithStorageFacilityInTheGenerationPathAndConsumptionPlant ||\r\n isPluginGeneratingPlant(formStep.formModel) ||\r\n hasMvAbove135 ||\r\n hasUnAbove300;\r\n\r\n toggleRequiredValidator(\r\n module.generatorProofOfConformity,\r\n hasLvApparentBelowOrEqual30,\r\n );\r\n }\r\n\r\n // Inverter\r\n for (const module of formStep.model.inverterModules.items.concat(\r\n formStep.model.inverterStorageModules.items,\r\n )) {\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573355/Feldgruppe+Wechselrichter+PV+und+Speicher+NS#FeldgruppeWechselrichterPVundSpeicherNS-conformityConfirmationOrUnitCertificate\r\n module.inverterConformityConfirmationOrUnitCertificate.disabled =\r\n (!hasTotalPlantPerformanceBelow300 &&\r\n !formStep.formModel.generationType.totalPlantPerformance\r\n .disabled) ||\r\n !isNotStorageOrNotPowerGenerationPlantWithStorageFacilityInTheGenerationPathAndConsumptionPlant ||\r\n isPluginGeneratingPlant(formStep.formModel);\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573355/Feldgruppe+Wechselrichter+PV+und+Speicher+NS#FeldgruppeWechselrichterPVundSpeicherNS-technicalDataSheet\r\n module.inverterTechnicalDataSheet.disabled =\r\n !isNotStorageOrNotPowerGenerationPlantWithStorageFacilityInTheGenerationPathAndConsumptionPlant ||\r\n isPluginGeneratingPlant(formStep.formModel);\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573355/Feldgruppe+Wechselrichter+PV+und+Speicher+NS#FeldgruppeWechselrichterPVundSpeicherNS-proofOfConformity\r\n module.inverterProofOfConformity.disabled =\r\n (!hasTotalPlantPerformanceBelow300 &&\r\n !formStep.formModel.generationType.totalPlantPerformance\r\n .disabled) ||\r\n !isNotStorageOrNotPowerGenerationPlantWithStorageFacilityInTheGenerationPathAndConsumptionPlant ||\r\n isPluginGeneratingPlant(formStep.formModel) ||\r\n hasMvAbove135 ||\r\n hasUnAbove300;\r\n\r\n toggleRequiredValidator(\r\n module.inverterProofOfConformity,\r\n hasLvApparentBelowOrEqual30,\r\n );\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4864934167/Feldgruppe+Wechselrichter+PV+und+Speicher+MS#FeldgruppeWechselrichterPVundSpeicherMS-unitCertificate\r\n module.inverterUnitCertificate.disabled =\r\n isPvAndStorageLte30(formStep.formModel) ||\r\n (!hasTotalPlantPerformanceAbove300 &&\r\n !formStep.formModel.generationType.totalPlantPerformance\r\n .disabled) ||\r\n isStorageConnectionConceptStorageInGenerationPath(\r\n formStep.formModel.plantData,\r\n );\r\n }\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-performanceMonitoringCertificate\r\n formStep.model.performanceMonitoringCertificate.disabled =\r\n formStep.formModel.powerConnection\r\n .feedInPowerShallBeLimitedByAController.disabled ||\r\n !(\r\n formStep.formModel.powerConnection\r\n .feedInPowerShallBeLimitedByAController.value ?? false\r\n );\r\n\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854565649/Formular+Netzanschluss#FormularNetzanschluss-electricalSystemCircuitDiagram\r\n formStep.model.electricalSystemCircuitDiagram.disabled = !(\r\n activePower > 300 ||\r\n (activePower > 60 &&\r\n formStep.formModel.powerConnection.hasExistingPlants.value) ||\r\n formStep.formModel.generationType.plantType.value ===\r\n 'emergencyGenerator'\r\n );\r\n\r\n formStep.model.proofOfReadyForPlanning.disabled = !requestWithPlanning;\r\n\r\n formStep.model.generatorModules.disabled =\r\n formStep.formModel.plantPerformance.generator.disabled;\r\n formStep.model.inverterModules.disabled =\r\n formStep.formModel.plantPerformance.inverter.disabled ||\r\n isPluginGeneratingPlant(formStep.formModel);\r\n formStep.model.inverterStorageModules.disabled =\r\n formStep.formModel.plantPerformance.inverterStorage.disabled ||\r\n isPluginGeneratingPlant(formStep.formModel);\r\n formStep.model.storageModules.disabled =\r\n formStep.formModel.plantPerformance.storage.disabled;\r\n\r\n formStep.model.sitePlanWithLotNumber.disabled = isPluginGeneratingPlant(\r\n formStep.formModel,\r\n );\r\n }\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/comma-dangle\r\nfunction syncArray<\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n T extends FormList,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n K extends FormList\r\n>(source: T, destination: K) {\r\n const sourceIds = new Set(\r\n source.items\r\n .map((item) => item.id?.value)\r\n .filter((item) => item != null),\r\n );\r\n\r\n for (let i = destination.items.length - 1; i >= 0; i--) {\r\n if (!sourceIds.has(destination.items[i].id?.value ?? '')) {\r\n destination.sudoRemoveAt(i);\r\n }\r\n }\r\n\r\n source.items.forEach((sourceItem) => {\r\n if (\r\n !destination.items.some(\r\n (destItem) => destItem.id?.value === sourceItem.id?.value,\r\n )\r\n ) {\r\n destination.createItem(sourceItem.id?.value ?? undefined);\r\n }\r\n });\r\n}\r\n","import { ApplicationForm } from '@/types/forms/specific/applicationForm';\r\nimport { CheckAndSendFormStep } from '@/types/forms/formSteps/checkAndSendFormStep';\r\nimport { isPluginGeneratingPlant, isRequestWithoutPlanning } from './common';\r\n\r\nexport const checkAndSendRules = async (\r\n formStep: { model: CheckAndSendFormStep; formModel: ApplicationForm } & Vue,\r\n): Promise => {\r\n // https://netzkern.atlassian.net/wiki/spaces/EWE/pages/4854573899/Formular+berpr+fen+Absenden#FormularÜberprüfen&Absenden-correctnessNotice\r\n formStep.model.correctnessNotice.disabled =\r\n isPluginGeneratingPlant(formStep.formModel) ||\r\n isRequestWithoutPlanning(formStep.formModel);\r\n\r\n formStep.model.generalTermsConsent.disabled = isRequestWithoutPlanning(\r\n formStep.formModel,\r\n );\r\n};\r\n","export const confirmationRules = async (): Promise => {\r\n // this is most likely not going to be used\r\n};\r\n","import { generalRules } from './application/general';\r\nimport { locationRules } from './application/location';\r\nimport { generationTypeRules } from './application/generationType';\r\nimport { powerConnectionRules } from './application/powerConnection';\r\nimport { plantOperatorRules } from './application/plantOperator';\r\nimport { plantBuilderRules } from './application/plantBuilder';\r\nimport { plantDataRules } from './application/plantData';\r\nimport { propertyOwnerRules } from './application/propertyOwner';\r\nimport { plantPerformanceRules } from './application/plantPerformance';\r\nimport { measuringConceptsRules } from './application/measuringConcepts';\r\nimport { controllableConsumptionDevicesRules } from './application/controllableConsumptionDevices';\r\nimport { billingRules } from './application/billing';\r\nimport { documentsRules } from './application/documents';\r\nimport { checkAndSendRules } from './application/checkAndSend';\r\nimport { confirmationRules } from './application/confirmation';\r\n\r\nexport const applicationRules = {\r\n general: generalRules,\r\n location: locationRules,\r\n generationType: generationTypeRules,\r\n powerConnection: powerConnectionRules,\r\n plantOperator: plantOperatorRules,\r\n plantBuilder: plantBuilderRules,\r\n plantData: plantDataRules,\r\n propertyOwner: propertyOwnerRules,\r\n plantPerformance: plantPerformanceRules,\r\n measuringConcepts: measuringConceptsRules,\r\n controllableConsumptionDevices: controllableConsumptionDevicesRules,\r\n billing: billingRules,\r\n documents: documentsRules,\r\n checkAndSend: checkAndSendRules,\r\n confirmation: confirmationRules,\r\n};\r\n","import { kitchenSinkRules } from './rules/kitchenSink';\r\nimport { applicationRules } from './rules/application';\r\n\r\nexport const rules = {\r\n kitchenSink: kitchenSinkRules,\r\n application: applicationRules,\r\n};\r\n","import { helpers, ValidationRule } from 'vuelidate/lib/validators';\r\nimport moment from 'moment';\r\nimport { germanDateFormat } from '@/utilities/germanFormats';\r\nimport { DateRange } from '@/types/forms/shared/dateRange';\r\n\r\n/*\r\n * Determines whether the given string can be represented as a date. Moment js is used\r\n here to parse the string in German format since the JS Date Object handles\r\n german dates quite poorly. The moment() function accepts the string and format and\r\n will internally create a Date object. If this fails in anyway, it will not match\r\n the given value.\r\n https://momentjs.com/docs/#/use-it/\r\n*/\r\n\r\nexport const date = ((value: string | null | DateRange): boolean => {\r\n if (typeof value === 'string' || value == null) {\r\n return (\r\n !helpers.req(value) ||\r\n moment(value, germanDateFormat).format(germanDateFormat) === value\r\n );\r\n } else {\r\n return (\r\n (!helpers.req(value.start) ||\r\n moment(value?.start, germanDateFormat).format(\r\n germanDateFormat,\r\n ) === value?.start) &&\r\n (!helpers.req(value.end) ||\r\n moment(value.end, germanDateFormat).format(germanDateFormat) ===\r\n value.end)\r\n );\r\n }\r\n}) as ValidationRule;\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(prop) {\n return (0, _common.withParams)({\n type: 'requiredUnless',\n prop: prop\n }, function (value, parentVm) {\n return !(0, _common.ref)(prop, this, parentVm) ? (0, _common.req)(value) : true;\n });\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(min) {\n return (0, _common.withParams)({\n type: 'minValue',\n min: min\n }, function (value) {\n return !(0, _common.req)(value) || (!/\\s/.test(value) || value instanceof Date) && +value >= +min;\n });\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(min, max) {\n return (0, _common.withParams)({\n type: 'between',\n min: min,\n max: max\n }, function (value) {\n return !(0, _common.req)(value) || (!/\\s/.test(value) || value instanceof Date) && +min <= +value && +max >= +value;\n });\n};\n\nexports.default = _default;"],"sourceRoot":""}