{"version":3,"file":"default-src_modules_service-forms-lazy_service-forms-lazy_module_ts.67024cea8b350919.js","mappings":"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","names":["BaggageTracingService","constructor","submitService","http","sentryLogger","configService","this","baggageTracing","query","submitQuery","valuesForBaggageTracingApi","apiUrl","cfg","serviceForm","portalServices","httpOptions","headers","buildHeaders","keyId","request","createQueryString","get","pipe","map","response","returnValue","Error","catchError","err","warn","message","error","throwError","bagOptionsControls","id","label","parseFormArrayOptions","formArrayValue","optionsMap","value","index","reduce","rest","curr","formValue","bagOptions","iteneraries","transformItenerary","itenerary","bagItems","transformItems","baggageReferenceNumber","firstName","lastName","homeAddress","email","phonePrefix","replace","phoneNumber","valueOrNull","temporaryAddress","temporaryAddressValidFrom","toDottedUIString","temporaryAddressValidTo","cardNumber","finnairPlusTier","baggageLastSeen","numberOfPiecesChecked","baggageIdentificationTagNumbers","whenAndWhereLossReported","baggageInsurancePolicyNumber","insuranceCompanyNameAndAddress","anythingParticularAtCheckIn","color","brand","typeOfBag","bagWasHard","Zipper","Lock","combinationLockCode","Wheels","baggageNameTagDescription","baggageIdentifiableFeatures","__addressKey","__messageSubject","__confirmationTo","__emailType","val","items","length","bagItem","itemNumber","quantity","name","description","belongsTo","P","itemName","D","itemQuantity","E","itemBelongsTo","U","itemDescription","flights","flight","from","destination","flightNumber","date","l","origin","flightDate","static","__ngFactoryType__","i0","i1","i2","i3","_angular_core__WEBPACK_IMPORTED_MODULE_6__","jDH","factory","ɵfac","collectDocumentReferences","formData","companionAttachments","addPassengers","companions","c","attachment","receipts","additionalExpenses","attachments","euCompensationAttachment","euCompensation","attachmentIds","concat","filter","fileId","mainPassengerAttachment","mainPassenger","medaAttachment","specialAssistance","SpecialAssistanceFormFields","MEDA_ATTACHMENT","convertToNumber","str","number","parseFloat","isNaN","formTypeToCaseType","formType","FormType","FYI","CaseType","MEDA","FYA","ClaimOrFeedbackService","languageService","createCase","formValues","customerFeedback","body","mapFormData","options","post","fetchCase","queryParamName","lastNameQueryParam","params","HttpParams","set","retrieveForm","familyName","caseNumber","linkAttachmentToCase","attachmentId","caseId","linkAttachmentPath","sendMessageToCase","content","bookingInformation","langKeyValue","toUpperCase","countryCode","snapshot","case","omitNullAndUndefined","caseType","caseOrigin","country","language","CUSTOMER_SUPPORT_LANGUAGES","includes","worldTracerNumber","bagTracing","bookingReference","reservationNumber","toString","locationCode","compensationType","paymentDetails","creator","REPRESENTATIVE","mapCreator","claimantDetails","claimCompany","CLAIM_COMPANY","mapCompany","customer","mapCustomer","mapCompanions","euCompensationCosts","mapCompensation","delayedBaggageCosts","mapBaggageCosts","bankAccount","mapBankAccount","category","mapCategory","freeTextFeedback","mapFreeTextFeedback","MultiStepFormSteps","OPTIONAL_FEEDBACK","additionalComments","HttpHeaders","Accept","firstLevel","CategoryMapLevel1","formSubCategory","secondCategory","euCompensationRating","mapEUCompensationFeedbackRating","enumValues","OptionalFeedbackInputs","feedbackRating","mapFeedbackRating","thirdLevel","child","FormSubCategories","DELAYED_OR_CANCELLED","CategoryMapLevel2","children","customerFields","firstname","lastname","phone","fPlusNumber","memberNumber","countryOfResidence","companyType","claimCompanyOther","reference","referenceNumber","companion","isChild","FormCategories","BAGGAGE_IRREGULARITIES","FormCategoryInputs","FORM_CATEGORY","standardCompensation","resolveEuStandardCompensationCashValue","euClaimOption","expenses","compensation","hotelCosts","mealCosts","transportationCosts","transportCosts","phoneCosts","indirectCosts","additionalExpensesDescription","indirectCostSpecification","FLIGHT_DISRUPTION","delayedBaggageCost","bagItemCosts","clothAndCosmeticCosts","bagRentalCosts","rentedCost","CompensationTypeOptions","CASH","accountHolder","accountHolderAddress","bankName","bankAddress","bankCountry","iban","accountNumber","bic","bik","ncc","correspondentBankData","patronymicName","ifsc","inn","kpp","keys","key","CategoryMapLevel3","rating","RATING_SCHEME_MAP","EU_COMPENSATION","uploadFile","file","salesforceCaseId","getFileAttachment","mergeMap","uploadAttachment","Observable","observer","reader","FileReader","onload","result","next","data","substring","indexOf","filename","complete","onerror","readAsDataURL","downloadAttachment","hash","customerCareAttachment","responseType","observe","Blob","type","attachmentPath","Object","acc","_angular_core__WEBPACK_IMPORTED_MODULE_13__","CertificatesForInsuranceCompanyField","BOOKING_REFERENCE","CONFIRM_SELF_CANCELLED_BOOKING","EMAIL","FIRST_NAME","FLIGHT_DATE","FLIGHT_NUMBER","FLIGHTS","LAST_NAME","PHONE","REASON_FOR_CERTIFICATE","TICKET_NUMBER","WORLD_TRACER_NUMBER","CertificatesForInsuranceCompanyReason","BAGGAGE_DELAYED_OR_DAMAGED","FLIGHT_DELAYED_OR_CANCELLED","NO_SHOW","ONBOARD","SELF_CANCELLED_BOOKING","ClaimMissingPartnerPointsFormField","MEMBER_NAME","MEMBER_NUMBER","ATTACHMENT","ADDITIONAL_INFORMATION","ETicketReceiptFormField","RESERVATION_NUMBER","FormBuilderInput","TEXT","TEXTAREA","FILE_UPLOADER","RADIO","SELECT","GiftCardStatus","ACTIVE","CANCELLED","CONVERTED","EXPIRED","INITIAL","LOCKED","GiftCardInformationFormStep","GIFT_CARD_VERIFICATION","GIFT_CARD_INFORMATION","BANK_DETAILS","CONTACT_DETAILS","GIFT_CARD_CONVERSION","GiftCardInformationFormControls","EMAIL_ADDRESS","GIFT_CARD_ID","GIFT_CARD_PIN_1","GIFT_CARD_PIN_2","GiftCardInformationFormName","BANK_DETAILS_FORM","CONTACT_DETAILS_FORM","CONVERSION_FORM","VERIFICATION_FORM","LoggedInMissingPointsFormField","AIRLINE","ARRIVAL_AIRPORT","BOOKING_CLASS","DEPARTURE_AIRPORT","NO_TICKET_NUMBER","SEQUENCE_NUMBER","LoggedOutMissingPointsFormField","PASSENGER_NAME","FLIGHT_FROM","FLIGHT_TO","DEPARTURE_DATE","RETURN_DATE","FLIGHT_NUMBERS","COMPANIONS","COMPANION_NAME","COMPANION_MEMBER_NUMBER","MESSAGE","INDIVIDUAL","AGENT","FORM_SUB_CATEGORY","BOOKING_AND_TRAVEL_EXPERIENCE","OVERBOOKING","DOWNGRADING","DELAYED_BAGGAGE","DAMAGED_BAGGAGE","BOOKINGS","AIRPORT_EXPERIENCE","ONBOARD_EXPERIENCE","TRAVEL_EXTRAS","SPECIAL_NEEDS","FINNAIR_PLUS","FORM_TYPE","CLAIMANT_DETAILS","CATEGORY","BOOKING_INFORMATION","ADD_PASSENGERS","ADDITIONAL_EXPENSES","PAYMENT_DETAILS","REVIEW_AND_SUBMIT","SECOND_CATEGORY","BAG_TRACING","SecondCategoryInput","BaggageOptions","BAGS","PRAMS_BABY","SPORT","WHEELCHAIR","SPECIAL_BAGGAGE","MISSING_ITEMS","BookingOptions","TICKET_FARES_AND_RULES","DIGITAL_SALES_SERVICES","CUSTOMER_SERVICE_BY_FINNAIR","CUSTOMER_SERVICE_BY_OTHER","SCHEDULE_CHANGE","AirportExperienceOptions","ARRIVAL_SERVICE","CHECK_IN","GATE_SERVICE","GATEWAY_SERVICES","LOUNGES","DIGITAL_GROUND_SERVICES","DENIED_ACCEPTANCE","AUTHORITIES_AND_OTHER_SERVICES","PERSONAL_INJURY","OnboardExperienceOptions","CREW","FOOD_AND_DRINK","INFLIGHT_ENTERTAINMENT","SEATS_AND_SEATING","INTERNET","CABIN_EXPERIENCE","TravelExtrasOptions","SEATS","MEALS","BAGGAGE","UPGRADES","WIFI","TREATS_AND_COMFORT_ITEMS","ADVERTISING","SpecialNeedsOptions","CUSTOMER_WITH_DISABILITY","CUSTOMER_WITH_MEDICAL_CONDITION","ELDERLY_CUSTOMER","TRAVELING_WITH_SMALL_CHILDREN","UNACCOMPANIED_MINOR","PET_IN_CABIN_OR_IN_HOLD","FinnairPlusOptions","SERVICE","MEMBER_SHIP_BENEFIT","AWARDS","MARKETING","RULES_AND_CONDITIONS","BagTracingInputs","HAS_WORLD_TRACER_NUMBER","GIVE_FEEDBACK","ADDITIONAL_COMMENTS","CARE","REROUTING","CUSTOMER_SERVICE_ATTITUDE","REACHABILITY","DIGITAL_SERVICES","INFORMATION","CUSTOMER_COMMUNICATION","AVAILABILITY_OF_FARES","NO_SHOW_OR_RETURN_CANCELLED","FARE_RESTRICTIONS","REFUND_POLICY","WEBSITE_FUNCTIONALITY","FINNAIR_APP","CHAT","SOCIAL_MEDIA","WHATSAPP","REACHABILITY_OF_CONTACT_CENTER","CUSTOMER_SERVICE_SKILLS","TRAVEL_AGENCIES","OTHER_DISTRIBUTORS","CHANGES_IN_TRAVEL_PLANS","CHANGES_NOT_INFORMED","LONG_BAGGAGE_DELIVERY_TIME","INFORMATION_ANNOUNCEMENTS_SIGNAGE","ARRIVAL_SERVICE_REACHABALITY_BY_PHONE","EXCESS_BAGGAGE_CHARGE","PRE_PAID_SEATS","SEATING","CHECK_IN_QUEUE","RECOGNITION_OF_TOP_TIER_PRIORITY_CUSTOMER","FLUENCY_OF_BOARDING","CARRY_ON_BAGGAGE","REFUSED_ACCEPTANCE_AT_THE_BOARDING_GATE","MISSED_CONNECTING_FLIGHT","ACCESS_TO_LOUNGE","INTERIOR_APPEARANCE_CLEANLINESS","MEAL_AND_BEVERAGE_SERVICE","INTERNET_CHECK_IN","KIOSK_CHECK_IN","SMS_CHECK_IN","INFO_ON_DIGITAL_CHANNEL","TRAVEL_DOCUMENT_ISSUE","REFUSED_ACCEPTANCE_AT_CHECK_IN","CUSTOMS","PASSPORT_CONTROL","SECURITY_CHECKS","FACILITIES_OR_SIGNAGE_OR_SHOPS","FLY_RAIL_TRAIN_CONNECTION_IN_GERMANY","INJURY_HAPPENED_INSIDE_AIRPORT_TERMINAL","INJURY_HAPPENED_WHEN_BOARDING_EXITING_THE_AIRCRAFT","DAMAGE_SPILLAGE_CAUSED_TO_CLOTHING_OR_BELONGINGS","PILOTS","COMPLIMENTARY_MEALS","SPECIAL_MEALS","FOOD_AND_DRINK_BOUGHT_ONBOARD","FOOD_SAFETY","DEFECTED_WORKING_ONLY_PARTIALLY","SELECTION_OF_MOVIES_GAMES_MUSIC_NEWSPAPERS","DEFECTIVE_SEAT","DEFECTIVE_TABLE_OR_READING_LIGHT_ETC","INTERNET_NOT_WORKING","CLEANLINESS_AND_HYGIENE","HEATING_VENTILATION_NOISE_LIGHTS","AIRCRAFT_TYPE_CODE_SHARE","HAND_BAGGAGE_ISSUES","DISTURBING_FELLOW_PASSENGER","AVAILABILITY","SEAT_CHANGED","BOOKING_PROCESS","PRICE","SELECTION","MISSING_OR_CHANGED_MEAL","QUALITY","WIFI_NOT_WORKING","ITEM_MISSING_OR_BROKEN","INFLIGHT_PREORDER_SALES","BOOKING_EXPERIENCE","INFLIGHT_EXPERIENCE","DAMAGED_MOBILITY_AID","DELAYED_MOBILITY_AID","MOBILITY_AID_HANDLING","DELAYED_DELIVERY_OF_PET","DAMAGED_PET_CARRIER","WEB_PAGES_FUNCTIONALITY_INFO","FUNCTIONALITY_OF_PROCEDURES","REACHABILITY_OF_SERVICE","TIER_MEMBER_BENEFITS","BASIC_MEMBER_BENEFITS","JUNIOR_PLUS_BENEFITS","FLIGHT_AWARD_AVAILABILITY","FINNAIR_FLIGHT_AWARD","PARTNER_FLIGHT_AWARD","NON_AIRLINE_AWARD","CAMPAIGN","EMAIL_NEWSLETTERS","PRINTED_MATERIAL","MEMBERSHIP_CARDS","TIER_QUALIFICATION","EXPIRATION_OF_POINTS","COMPARISON_TO_COMPETITOR_PROGRAM","JOINING_FINNAIR_PLUS","CustomerFields","FeedbackRateOptions","VERY_POOR","POOR","OKAY","GOOD","EXCELLENT","GiveOptionalFeedbackOptions","YES","NO","ClaimantDetailInputs","AUTHORIZED_REP","AUTHORIZED_COMPANY","COMPANY_TYPE","CLAIM_COMPANY_OTHER","REFERENCE_NUMBER","CompanyType","TRAVEL_AGENT_OR_OPERATOR","INSURANCE_COMPANY","OTHER","BookingInfoInputs","ORIGIN","DESTINATION","FLIGHT_LEG","PaymentDetailsInputs","COMPENSATION_TYPE","IBAN","ACCOUNT_NUMBER","BIC","ACCOUNT_HOLDER","ACCOUNT_HOLDER_ADDRESS","BANK_NAME","BANK_ADDRESS","BANK_COUNTRY","NCC","IFSC","BIK","CBD","KPP","INN","PATRONYMIC_NAME","GIFT_VOUCHER","AddPassengersInputs","MAIN_PASSENGER","PassengerInputs","COUNTRY","IS_CHILD","EuCompensationInputs","CLAIM_TYPE","EU_CLAIM_OPTION","ClaimType","EU_STANDARD_COMPENSATION","RECEIVED_COMPENSATION","SPECIAL_CASE_COMPENSATION","JUST_FEEDBACK","EUClaimOptions","SHORT","SHORT_HALF","MIDDLE","MIDDLE_HALF","LONG","LONG_HALF","DowngradingOptions","CABIN","DowngradingInputs","DOWNGRADING_CLAIM_TYPE","AdditionalExpensesInputs","HOTEL_COST","TRANSPORT_COST","MEAL_COST","PHONE_COST","CLOTH_AND_COSMETIC_COST","RENTED_COST","OTHER_COST","INDIRECT_COST","INDIRECT_COST_SPECIFICATION","ATTACHMENTS","AdditionalExpenses","ReviewAndSubmitInputs","CONFIRM","MedaCategories","wheelChairOrMobA","hearingImpaired","visuallyImpaired","visuallyImpairedWithGuideDog","travelingWithServiceDog","pregnant","medicalCondition","medicalEquipment","other","LoggedInMissingPointsErrorCode","INTERNAL_ERROR","ADN_PROXY_INTERNAL_ERROR","COUPON_NOT_MATCHING","THIS_FREQUENT_FLYER_CARD_IS_NOT_RECOGNIZED","THIS_FREQUENT_FLYER_CARD_AND_PROGRAM_ARE_NOT_RECOGNIZED","THIS_FREQUENT_FLYER_CARD_IS_NOT_RECOGNIZED_BUT_PROGRAM_CODE_IS_AY","PASSENGER_NOT_FOUND_FOR_THE_FLIGHT_NUMBER_ON_THE_REQUIRED_DATE","CITY_PAIR_NOT_FOUND","TICKET_NUMBER_NOT_FOUND","BOOKING_CLASS_NOT_MATCHING","CABIN_CODE_NOT_MATCHING","ACCRUAL_PROCESS_HAS_BEEN_CONFIRMED_EARLIER","FLIGHT_IS_NOT_FOUND_FOR_THIS_CITY_PAIR_ON_THE_MENTIONED_DATE","NO_FLIGHT_FOUND_FOR_THIS_CITY_PAIR_ON_THE_MENTIONED_DATE","INVALID_PARAMETER_IN_QUERY","FREQUENT_FLYER_PROGRAM_INVALID_FOR_CHARTER_FLIGHT","FREQUENT_FLYER_PROGRAM_INVALID","PASSENGER_IS_NO_SHOW_FOR_THIS_FLIGHT","PASSENGER_DID_NOT_FLY_ON_THIS_FLIGHT","PASSENGER_IS_AN_ID_PASSENGER","THIS_FLIGHT_IS_AN_ADHOC_FLIGHT","THIS_FLIGHT_IS_A_CHARTER_FLIGHT","THIS_PASSENGER_USED_A_REDEMPTION_TICKET","THIS_FLIGHT_WAS_ALREADY_ACCRUED","THIS_FLIGHT_WAS_ALREADY_ACCRUED_FOR_ANOTHER_FREQUENT_FLYER_CARD","PASSENGERS_NAME_NOT_FOUND","MARKETING_CARRIER_IS_INVALID_FOR_LOYALTY","REQUEST_NOT_YET_ELIGIBLE","REQUEST_NOT_ELIGIBLE_ANYMORE","localizationKeyGenericError","loggedInMissingPointsErrorCodeToLocalizationKeyMap","RetrieveFields","RETRIEVE_FORM","FAMILY_NAME","CASE_NUMBER","ABLE_TO_SIT_WITH_KNEES_BENT","ADD_MEDICAL_EQUIPMENT","ASSISTANT_NAME","CAPAP_DEVICE_MODEL","LITHIUM_BATTERIES","LITHIUM_BATTERY_1_POWER","LITHIUM_BATTERY_2_POWER","MEDICAL_CONDITION","MEDICAL_EQUIPMENT","NEED_ASSISTANCE_WHERE","OTHER_MEDICAL_EQUIPMENT_MODEL","OTHER_MEDICAL_EQUIPMENT_TYPE","OTHER_REASON","OWN_WHEELCHAIR","PORTABLE_OXYGEN_CONCENTRATOR_MODEL","REASON_FOR_SPECIAL_ATTENTION","REASON_FOR_WHEELCHAIR","TRAVELING_WITH_ASSISTANT","WHEELCHAIR_DEPTH","WHEELCHAIR_HEIGHT","WHEELCHAIR_TYPE","WHEELCHAIR_WEIGHT","WHEELCHAIR_WIDTH","OTHER_MOBILITY_AID_DESCRIPTION","FileOrigin","CASE","FEED","ClaimMissingPointsFormOrigin","FROM_FLIGHTS","FROM_PARTNERS","CancellationCoverClaimFor","DEPARTURE_AND_RETURN_FLIGHTS","RETURN_FLIGHTS","RefundFormPurchaseChannels","FINNAIR","RefundFormRefundReasons","FLIGHT_CANCELLED_BY_FINNAIR","CANCELLED_WITHIN_24_HOURS","EXTRA_NOT_DELIVERED","CHANGED_FLIGHT_OR_SEAT","CANCELLED_BY_TICKET_RULES","FAULTY_PRODUCT","BEST_BEFORE_EXPIRE","WRONG_PRODUCT","CANCELLED_MYFLIGHT","ORDER_NOT_DELIVERED","RefundPaymentMethods","MONEY_BACK","RefundTypes","FLIGHT","EXTRAS","FLIGHT_AND_EXTRAS","RefundPaymentTypes","ONLINE_BANK","RefundFormOnlineBankFields","RefundFormCountries","FINLAND","ESTONIA","SWEDEN","UK","RUSSIA","AUSTRALIA","CANADA","USA","INDIA","AUSTRIA","BELGIUM","CZECH_REPUBLIC","DENMARK","FRANCE","GERMANY","HUNGARY","ICELAND","IRELAND","ITALY","LATVIA","LITHUANIA","NETHERLANDS","NORWAY","POLAND","PORTUGAL","SPAIN","SWITZERLAND","CHINA","HONGKONG","ISRAEL","JAPAN","KOREA","SINGAPORE","THAILAND","OTHER_COUNTRIES","EnabledOnlineBankFields","enabledCountries","RefundsService","gtmService","store$","fetchRefunds","recLoc","dispatch","setRefunds","refunds","status","RefundsStatus","LOADING","customerRefunds","tap","reportFetchResult","OK","HttpErrorResponse","ERROR","trackElement","GaContext","REFUNDS","ElementTypes","FORM","undefined","ElementActions","SUBMIT","i4","_angular_core__WEBPACK_IMPORTED_MODULE_9__","RefundsCommonModule","fesm2022_core","$C","G2t","StorageService","imports","CommonModule","StoreModule","forFeature","REFUNDS_FEATURE_KEY","reducer","ServiceFormsLazyModule","CorporateService","GiftCardService","MissingPointsService","PhonePrefixService","SubmitService","ComponentsModule","DirectiveModule","GtmModule","PipesModule","ReactiveFormsModule","withConfig","callSetDisabledState","CommonServiceFormsModule","UiComponentsModule","UiTranslateModule","ServiceFormsModule","MatDatepickerModule","MatNativeDateModule","MatAutocompleteModule","LoginModule","initialState","seal","refundsReducer","createReducer","on","RefundsActions","state","action","claimFlightsMissingAvios","claimMissingAviosFormData","Array","isArray","claimFlightsMissingAviosSubmissionData","getFlightsMissingAviosSubmissionData","fileToBase64","switchMap","base64","attachmentName","sendToClaimMissingPoints","JSON","stringify","claimPartnerMissingAvios","claimMissingPartnerPointsFormData","claimPartnerMissingAviosSubmissionData","claimMissingPointsForm","passengerName","claimMissingPartnerPoints","locale","at","jsonBody","customerCare","claimFlightsMissingAviosFormData","airline","companionName","companionMemberNumber","flightDetails","ticketNumber","bookingClass","flightFrom","title","flightTo","departureDate","returnDate","flightNumbers","loggedInMissingPointsRequest","getSubmissionData","missingPointsRequest","loggedOutMissingPointsRequest","getSubmissionDataForLoggedOutMissingPoints","formatTicketNumber","FormData","append","formatFinnairPlusCardNumber","entries","transformFlightNumbers","forEach","transformCompanions","nameKey","memberNumberKey","A","I","loggedInMissingPoints","Airline","loginToken","take","token","oauth_token","errorCode","i5","createAction","props","resetRefunds","all","union","veryPoor","poor","okay","good","excellent","resolveEuStandardCompensationGiftCardValue","resolveFirstStepForFlow","step","getBaggageExpenseControls","oldGroup","Validators","pattern","PRICE_PATTERN","getAdditionalExpenseControls","validateAtLeastOneFieldFilled","group","entrySet","field","some","scrollService","scrollToInvalidField","form","elementRef","f","markAllAsTouched","updateValueAndValidity","setTimeout","scrollToFirstInvalidInput","requestRefund","mapRefundRequestSubmissionData","certificatesForInsuranceCompany","confirmSelfCancelledBooking","reasonForCertificate","sendCancellationCoverClaimRequest","base64File","mapCancellationCoverClaimSubmissionData","fields","retryWhenOKResponseWithEmptyBody","feedbackCase","retryWithBackoff","MAX_ATTEMPTS","BACKOFF_MS","assign","fileContent","fileName","departureCity","destinationCity","toDottedString","refundFor","attachmentConsent","RefundType","RefundReason","RefundItemType","extras","flightAndExtras","travelRetail","flightCancelledByFinnair","flightCancelledWithin24Hours","extraNotDelivered","changedFlightOrSeat","ticketAllowsCancellation","bestBeforeExpire","faultyProduct","wrongProduct","cancelledMyFlight","orderNotDelivered","baggage","internet","lounge","comfortItems","meal","seat","seatAndMeal","mainPax","passengers","output","refundType","refundReason","refundItems","useOnlyVoucher","paymentMethod","bookingDate","cancellationDate","additionalInformation","passenger","baseData","finnairPlusNumber","preorderBagNumber","push","flightData","travelExtras","travelExtra","emdData","emdNumber","refundItemType","paymentType","mapOnlinePaymentData","bankingData","bankAccountHolder","bankAccountHolderAddress","_angular_core__WEBPACK_IMPORTED_MODULE_14__","router","giftCardConversionUrl","giftCardVerificationUrl","createHeaders","extraHeaders","contentType","giftCardApiKey","getGiftCardInformation","giftCardId","pin","getReturnUrl","url","split","slice","join","postGiftCardConversion","_angular_core__WEBPACK_IMPORTED_MODULE_4__"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/modules/service-forms-lazy/services/baggage-tracing.service.ts","./src/modules/service-forms-lazy/services/claim-or-feedback.service.ts","./src/modules/service-forms-lazy/interfaces/certificates-for-insurance-company-form.interface.ts","./src/modules/service-forms-lazy/interfaces/claim-missing-partner-points-form.interface.ts","./src/modules/service-forms-lazy/interfaces/e-ticket-receipt-form.interface.ts","./src/modules/service-forms-lazy/interfaces/form-builder.interface.ts","./src/modules/service-forms-lazy/interfaces/gift-card-information-form.interface.ts","./src/modules/service-forms-lazy/interfaces/missing-points-form.interface.ts","./src/modules/service-forms-lazy/interfaces/multi-step-conditional-form.interface.ts","./src/modules/service-forms-lazy/interfaces/response-data.interface.ts","./src/modules/service-forms-lazy/interfaces/retrieve-page.interface.ts","./src/modules/service-forms-lazy/interfaces/special-assistance-form.interface.ts","./src/modules/service-forms-lazy/interfaces/submission-data.interface.ts","./src/modules/service-forms-lazy/interfaces/refund-form.interface.ts","./src/modules/refunds-common/services/refunds.service.ts","./src/modules/refunds-common/refunds-common.module.ts","./src/modules/service-forms-lazy/service-forms-lazy.module.ts","./src/modules/refunds-common/store/reducers/refunds.reducer.ts","./src/modules/refunds-common/store/reducers/index.ts","./src/modules/service-forms-lazy/services/missing-points.service.ts","./src/modules/refunds-common/store/actions/refunds.actions.ts","./src/modules/service-forms-lazy/components/multi-step-conditional-forms/utils/utils.ts","./src/modules/refunds-common/interfaces/store.interface.ts","./src/modules/service-forms-lazy/services/submit.service.ts","./src/modules/service-forms-lazy/services/gift-card.service.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { map, catchError } from 'rxjs/operators';\nimport { Observable, throwError } from 'rxjs';\n\nimport { SentryLogger, ConfigService } from '@fcom/core';\nimport { CheckboxOptionList, createQueryString } from '@fcom/service-forms';\n\nimport {\n BaggageTracingBag,\n BaggageTracingItenerary,\n BaggageTracingSubmissionData,\n BaggageTracingAPISubmissionData,\n} from '../interfaces';\nimport { SubmitService } from '../services/submit.service';\n\n@Injectable()\nexport class BaggageTracingService {\n constructor(\n private submitService: SubmitService,\n private http: HttpClient,\n private sentryLogger: SentryLogger,\n private configService: ConfigService\n ) {}\n\n /**\n * Return values:\n * 1 = Email sending is successfull\n * 0 = Something went wrong with sending email\n * -1 = Attatchment virus scan failed\n * All of them are returned with success 200\n * @param query\n */\n public baggageTracing(query): Observable {\n const submitQuery = this.valuesForBaggageTracingApi(query);\n\n const apiUrl = this.configService.cfg.serviceForm.portalServices.apiUrl;\n const keyId = this.configService.cfg.serviceForm.portalServices.keyId;\n\n const httpOptions = {\n headers: this.submitService.buildHeaders({ 'x-api-key': keyId }),\n };\n const request = `${apiUrl}/mailer?${createQueryString(submitQuery)}`;\n\n return this.http.get(request, httpOptions).pipe(\n map((response) => {\n if (response.returnValue === '1') {\n return response;\n }\n throw new Error('Error submitting Baggage tracing form request');\n }),\n // eslint-disable-next-line rxjs/no-implicit-any-catch\n catchError((err) => {\n this.sentryLogger.warn(err.message, { request, error: err });\n return throwError(() => err);\n })\n );\n }\n\n public get bagOptionsControls(): CheckboxOptionList {\n return [\n { id: 'Zipper', label: 'SERVICE_FORMS.NTServiceForms.fields.bagOptions.zipper' },\n { id: 'Lock', label: 'SERVICE_FORMS.NTServiceForms.fields.bagOptions.lock' },\n { id: 'Wheels', label: 'SERVICE_FORMS.NTServiceForms.fields.bagOptions.wheels' },\n { id: 'Retractable handle', label: 'SERVICE_FORMS.NTServiceForms.fields.bagOptions.retractableHandle' },\n { id: 'Combination lock', label: 'SERVICE_FORMS.NTServiceForms.fields.bagOptions.combinationLock' },\n ];\n }\n\n /**\n * Return key value pairs from formArray checkbox list,\n * for selected options based on provided mapping obj\n * @param formArrayValue\n * @param optionsMap\n */\n public parseFormArrayOptions(formArrayValue: Array, optionsMap: CheckboxOptionList): object {\n return formArrayValue\n .map((value, index) => {\n return {\n [optionsMap[index].id]: value ? optionsMap[index].id : null,\n };\n })\n .reduce((rest, curr) => ({ ...rest, ...curr }));\n }\n\n private valuesForBaggageTracingApi(formValue: BaggageTracingSubmissionData): BaggageTracingAPISubmissionData {\n const bagOptions = this.parseFormArrayOptions(formValue.bagOptions, this.bagOptionsControls);\n const iteneraries = this.transformItenerary(formValue.itenerary);\n const bagItems = this.transformItems(formValue.bagItems);\n\n return {\n '01___Reference_number': formValue.baggageReferenceNumber || 'not filled',\n '02___First_name': formValue.firstName,\n '03___Last_name': formValue.lastName,\n '04___Home_address': formValue.homeAddress,\n '05___Email': formValue.email,\n '06___Phone_number': `${formValue.phonePrefix.replace('|', ' ')}${formValue.phoneNumber}`,\n '07___Mobile_number': `${formValue.phonePrefix.replace('|', ' ')}${formValue.phoneNumber}`,\n '08___Temporary_address': this.valueOrNull(formValue.temporaryAddress),\n '09___Temporary_address_valid_from': formValue.temporaryAddressValidFrom\n ? formValue.temporaryAddressValidFrom.toDottedUIString()\n : null,\n '10___Temporary_address_valid_to': formValue.temporaryAddressValidTo\n ? formValue.temporaryAddressValidTo.toDottedUIString()\n : null,\n '11___Plus_number': this.valueOrNull(formValue.cardNumber),\n '12___Finnair_plus_tier': this.valueOrNull(formValue.finnairPlusTier),\n '14___Baggage_last_seen': this.valueOrNull(formValue.baggageLastSeen),\n '15___Number_of_pieces_checked': this.valueOrNull(formValue.numberOfPiecesChecked),\n '16___Baggage_Identification_Tag_numbers': this.valueOrNull(formValue.baggageIdentificationTagNumbers),\n '17___When_and_where_loss_reported': this.valueOrNull(formValue.whenAndWhereLossReported),\n '18___Baggage_insurance_policy_number': this.valueOrNull(formValue.baggageInsurancePolicyNumber),\n '19___Insurance_company_name_and_address': this.valueOrNull(formValue.insuranceCompanyNameAndAddress),\n '20___Anything_particular_at_check_in': this.valueOrNull(formValue.anythingParticularAtCheckIn),\n '21___Colour': this.valueOrNull(formValue.color),\n '22___Brand': this.valueOrNull(formValue.brand),\n '23___Type_of_bag': this.valueOrNull(formValue.typeOfBag),\n '24___Bag_was': this.valueOrNull(formValue.bagWasHard),\n '25___Bag_had_zipper': bagOptions['Zipper'],\n '26___Bag_had_lock': bagOptions['Lock'],\n '27___Bag_had_combination_lock': bagOptions['Combination lock'],\n '28___Lock_number_combination': this.valueOrNull(formValue.combinationLockCode),\n '30___Bag_had_wheels': bagOptions['Wheels'],\n '32___Bag_had_retractable_handle': bagOptions['Retractable handle'],\n '33___Baggage_name_tag_description': this.valueOrNull(formValue.baggageNameTagDescription),\n '34___Baggage_identifiable_features': this.valueOrNull(formValue.baggageIdentifiableFeatures),\n '50___Items_to_identify_baggage': this.valueOrNull(formValue.baggageIdentifiableFeatures),\n __addressKey: 'emailServlet.baggageTracing',\n __messageSubject: 'Baggage tracing form',\n __confirmationTo: formValue.email,\n __emailType: 'BaggageTracing',\n ...iteneraries,\n ...bagItems,\n };\n }\n\n private valueOrNull(val) {\n return val || null;\n }\n\n /**\n * Return dynamically created formArray bag items\n * in badly named format requested by API\n * 35___Item_2_quantity\n * @param items\n */\n private transformItems(items: BaggageTracingBag[]): object {\n if (items.length === 0) {\n return {};\n }\n return items\n .map((bagItem, index) => {\n const itemNumber = 35 + index;\n const quantity = `${itemNumber}___Item_${index + 1}_quantity`;\n const name = `${itemNumber}___Item_${index + 1}`;\n const description = `${itemNumber}___Item_${index + 1}_description`;\n const belongsTo = `${itemNumber}___Item_${index + 1}_belongs_to`;\n\n return {\n [name]: bagItem.itemName,\n [quantity]: bagItem.itemQuantity,\n [belongsTo]: bagItem.itemBelongsTo,\n [description]: bagItem.itemDescription,\n };\n })\n .reduce((rest, curr) => ({ ...rest, ...curr }));\n }\n\n /**\n * Return dynamically created formArray iteneraries\n * in badle named format requested by API\n * 13___Flight_1_form\n * @param flights\n */\n private transformItenerary(flights: BaggageTracingItenerary[]): object {\n if (flights.length === 0) {\n return {};\n }\n return flights\n .map((flight, index) => {\n const from = `13___Flight_${index + 1}_from`;\n const destination = `13___Flight_${index + 1}_to`;\n const flightNumber = `13___Flight_${index + 1}`;\n const date = `13___Flight_${index + 1}_date`;\n\n return {\n [from]: flight.origin,\n [destination]: flight.destination,\n [flightNumber]: flight.flightNumber,\n [date]: flight.flightDate.toDottedUIString(),\n };\n })\n .reduce((rest, curr) => ({ ...rest, ...curr }));\n }\n}\n","import { HttpClient, HttpHeaders, HttpParams, type HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, mergeMap, map } from 'rxjs/operators';\n\nimport { ConfigService, SentryLogger } from '@fcom/core';\nimport { enumValues } from '@fcom/core/utils';\nimport { snapshot } from '@fcom/rx';\nimport { type Attachment } from '@fcom/ui-components/components/interfaces';\nimport { LanguageService } from '@fcom/ui-translate';\n\nimport {\n RATING_SCHEME_MAP,\n resolveEuStandardCompensationCashValue,\n} from '../components/multi-step-conditional-forms/utils/utils';\nimport {\n CaseType,\n CategoryMapLevel1,\n CategoryMapLevel2,\n CategoryMapLevel3,\n CompensationTypeOptions,\n FormCategories,\n FormCategoryInputs,\n FormSubCategories,\n FormType,\n MultiStepFormSteps,\n OptionalFeedbackInputs,\n SpecialAssistanceFormFields,\n type BankAccount,\n type CaseAttachmentPayload,\n type CaseCategory,\n type CaseCompany,\n type CaseCreator,\n type CaseCustomer,\n type CaseFormData,\n type CaseGetMessage,\n type CasePassengerDetails,\n type CasePostMessage,\n type CaseSubmissionData,\n type Companion,\n type DelayedBaggageCosts,\n type EuCompensationCosts,\n type FeedbackRating,\n type FileOrigin,\n type FormCase,\n type LinkAttachmentToCase,\n type LinkAttachmentToCaseData,\n type LinkAttachmentToCaseResponse,\n type MainPassenger,\n type RetrieveCase,\n type RetrieveFormData,\n type SpecialAssistance,\n} from '../interfaces';\nimport { CUSTOMER_SUPPORT_LANGUAGES } from '../utils';\n\ntype HttpGetOptions = Parameters[1];\ntype HttpPostOptions = Parameters[2];\n\nconst collectDocumentReferences = (formData: CaseFormData): string[] => {\n // Companions and possible power of attorney -documents\n const companionAttachments: Attachment[] = formData.addPassengers?.companions?.map((c) => c.attachment?.[0]);\n\n // Receipts for additional expenses\n const receipts: Attachment[] = formData.additionalExpenses?.attachments || [];\n\n const euCompensationAttachment: Attachment[] = formData.euCompensation?.attachments || [];\n const attachmentIds: string[] =\n companionAttachments\n ?.concat(receipts, euCompensationAttachment)\n ?.filter((attachment: Attachment): string => attachment?.fileId)\n ?.map((attachment: Attachment): string => attachment.fileId) || [];\n\n const mainPassengerAttachment: Attachment = formData.addPassengers?.mainPassenger?.attachment?.[0];\n\n if (mainPassengerAttachment?.fileId) {\n return [...attachmentIds, mainPassengerAttachment.fileId];\n }\n\n const medaAttachment: Attachment = formData.specialAssistance?.[SpecialAssistanceFormFields.MEDA_ATTACHMENT];\n\n if (medaAttachment?.fileId) {\n return [...attachmentIds, medaAttachment.fileId];\n }\n\n return attachmentIds;\n};\n\nconst convertToNumber = (str: string): number => {\n const number = parseFloat(str);\n return !isNaN(number) ? number : 0;\n};\n\nconst formTypeToCaseType = (formType: FormType): CaseType => {\n switch (formType) {\n case FormType.FYI:\n return CaseType.FYI;\n case FormType.MEDA:\n return CaseType.MEDA;\n default:\n return CaseType.FYA;\n }\n};\n\n@Injectable()\nexport class ClaimOrFeedbackService {\n constructor(\n private http: HttpClient,\n private configService: ConfigService,\n private sentryLogger: SentryLogger,\n private languageService: LanguageService\n ) {}\n\n createCase(formValues: CaseFormData): Observable {\n const { apiUrl, keyId } = this.configService.cfg.serviceForm.customerFeedback;\n\n const body: CaseSubmissionData = this.mapFormData(formValues);\n const headers: HttpHeaders = this.buildHeaders({ 'x-api-key': keyId });\n const options: HttpPostOptions = { headers };\n\n return this.http.post(`${apiUrl}/cases`, body, options).pipe(\n catchError((error: HttpErrorResponse): Observable => {\n this.sentryLogger.warn(error?.message, { error });\n return throwError((): HttpErrorResponse => error);\n })\n );\n }\n\n fetchCase(formValues: RetrieveFormData): Observable {\n const { apiUrl, keyId } = this.configService.cfg.serviceForm.customerFeedback;\n const headers: HttpHeaders = this.buildHeaders({ 'x-api-key': keyId });\n const queryParamName: string =\n this.configService.cfg.serviceForm.customerFeedback?.options?.['lastNameQueryParam'] || 'lastname';\n\n const params: HttpParams = new HttpParams().set(queryParamName, formValues.retrieveForm.familyName);\n const options: HttpGetOptions = { headers, params };\n return this.http.get(`${apiUrl}/cases/${formValues.retrieveForm.caseNumber}`, options);\n }\n\n linkAttachmentToCase(formValues: LinkAttachmentToCase): Observable {\n const { apiUrl, keyId } = this.configService.cfg.serviceForm.customerFeedback;\n\n const body: LinkAttachmentToCaseData = {\n attachmentIds: [formValues.attachmentId],\n caseId: formValues.caseId,\n lastName: formValues.lastName,\n };\n const headers: HttpHeaders = this.buildHeaders({ 'x-api-key': keyId });\n const options: HttpPostOptions = { headers };\n const linkAttachmentPath: string =\n this.configService.cfg.serviceForm.customerFeedback?.options?.['linkAttachmentPath'] || 'link-attachment';\n\n return this.http.post(`${apiUrl}/${linkAttachmentPath}`, body, options).pipe(\n catchError((error: HttpErrorResponse): Observable => {\n this.sentryLogger.warn(error?.message, { error });\n return throwError((): HttpErrorResponse => error);\n })\n );\n }\n\n // @TODO: Add support for attachments\n sendMessageToCase(\n caseId: string,\n lastName: string,\n message: string,\n attachmentIds: string[]\n ): Observable {\n const { apiUrl, keyId } = this.configService.cfg.serviceForm.customerFeedback;\n\n const body: CasePostMessage = {\n caseId,\n lastName,\n message: {\n content: message,\n attachmentIds,\n },\n };\n const options: HttpPostOptions = {\n headers: this.buildHeaders({ 'x-api-key': keyId }),\n };\n\n return this.http.post(`${apiUrl}/comments`, body, options).pipe(\n catchError((error: HttpErrorResponse): Observable => {\n this.sentryLogger.warn(error?.message, { error });\n return throwError((): HttpErrorResponse => error);\n })\n );\n }\n\n private mapFormData(formValues: CaseFormData): CaseSubmissionData {\n const bookingInformation: CaseFormData[MultiStepFormSteps.BOOKING_INFORMATION] = formValues.bookingInformation;\n const langKeyValue: string = this.languageService.langKeyValue.toUpperCase();\n const countryCode: string = snapshot(this.languageService.countryCode);\n return {\n case: this.omitNullAndUndefined({\n caseType: formTypeToCaseType(formValues.formType),\n caseOrigin: 'portal',\n country: countryCode === 'INT' ? 'GB' : countryCode,\n language: CUSTOMER_SUPPORT_LANGUAGES.includes(langKeyValue) ? langKeyValue : 'EN',\n worldTracerNumber: formValues.bagTracing?.worldTracerNumber || null,\n bookingReference: bookingInformation?.reservationNumber ?? null,\n flightDate: bookingInformation?.flightDate ? bookingInformation.flightDate.toString() : null,\n flightNumber: bookingInformation?.flightNumber ?? null,\n origin: bookingInformation?.origin?.locationCode ?? null,\n destination: bookingInformation?.destination?.locationCode ?? null,\n compensationType: formValues.paymentDetails?.compensationType ?? null,\n creator: formValues.formType === FormType.REPRESENTATIVE ? this.mapCreator(formValues.claimantDetails) : null,\n claimCompany:\n formValues.formType === FormType.CLAIM_COMPANY ? this.mapCompany(formValues.claimantDetails) : null,\n customer: this.mapCustomer(formValues),\n companions: this.mapCompanions(formValues.addPassengers?.companions),\n euCompensationCosts: this.mapCompensation(formValues),\n delayedBaggageCosts: this.mapBaggageCosts(formValues),\n bankAccount: this.mapBankAccount(formValues.paymentDetails),\n category: this.mapCategory(formValues),\n specialAssistance: formValues.specialAssistance\n ? this.omitNullAndUndefined(formValues.specialAssistance)\n : null,\n freeTextFeedback: this.mapFreeTextFeedback(formValues),\n }),\n attachmentIds: collectDocumentReferences(formValues),\n };\n }\n\n private mapFreeTextFeedback(formValues: CaseFormData): string {\n return (\n formValues[MultiStepFormSteps.OPTIONAL_FEEDBACK]?.additionalComments ||\n formValues?.euCompensation?.additionalComments ||\n ''\n );\n }\n\n private buildHeaders(params: Record): HttpHeaders {\n return new HttpHeaders({\n Accept: 'application/json',\n 'Content-Type': 'application/json; charset=utf-8',\n ...params,\n });\n }\n\n private mapCategory(formData: CaseFormData): CaseCategory {\n const firstLevel: string = CategoryMapLevel1[formData.category.formSubCategory];\n const secondCategory: string = formData.secondCategory?.secondCategory || formData.category.formSubCategory;\n const euCompensationRating: FeedbackRating[] = this.mapEUCompensationFeedbackRating(\n formData,\n enumValues(OptionalFeedbackInputs)\n );\n const feedbackRating: FeedbackRating[] = this.mapFeedbackRating(formData, enumValues(OptionalFeedbackInputs));\n const thirdLevel: CaseCategory['child']['children'] = euCompensationRating.length\n ? euCompensationRating\n : feedbackRating;\n\n // Special case for Flight irregularities\n const secondLevel: string =\n formData.category.formSubCategory === FormSubCategories.DELAYED_OR_CANCELLED && thirdLevel.length === 0\n ? ''\n : (CategoryMapLevel2[secondCategory] ?? '');\n\n return {\n name: firstLevel,\n child: {\n name: secondLevel,\n children: thirdLevel,\n },\n };\n }\n\n private mapCustomer(formData: CaseFormData): CaseCustomer | null {\n if (!formData.addPassengers) {\n return null;\n }\n const mainPassenger: MainPassenger = formData.addPassengers.mainPassenger;\n const customerFields: CaseFormData['customerFields'] = formData.customerFields;\n\n return this.omitNullAndUndefined({\n firstname: mainPassenger?.firstName,\n lastname: mainPassenger?.lastName,\n email: mainPassenger?.email ?? null,\n phone: mainPassenger?.phone ?? null,\n fPlusNumber: customerFields?.memberNumber,\n countryOfResidence: mainPassenger?.country,\n });\n }\n\n private mapCompany(claimantDetails: CaseFormData[MultiStepFormSteps.CLAIMANT_DETAILS]): CaseCompany {\n return {\n companyType: claimantDetails?.companyType,\n name: claimantDetails?.claimCompanyOther || claimantDetails?.claimCompany,\n email: claimantDetails?.email,\n phone: claimantDetails?.phone,\n reference: claimantDetails?.referenceNumber,\n };\n }\n\n private mapCreator(claimantDetails: CaseFormData[MultiStepFormSteps.CLAIMANT_DETAILS]): CaseCreator {\n return {\n firstname: claimantDetails?.firstName,\n lastname: claimantDetails?.lastName,\n email: claimantDetails?.email,\n phone: claimantDetails?.phone,\n };\n }\n\n private mapCompanions(companions: Companion[] = []): CasePassengerDetails[] {\n return companions.map((companion: Companion) => {\n return !companion?.isChild\n ? {\n firstname: companion?.firstName,\n lastname: companion?.lastName,\n email: companion?.email,\n phone: companion?.phone,\n }\n : {\n firstname: companion?.firstName,\n lastname: companion?.lastName,\n };\n });\n }\n\n mapCompensation(formData: CaseFormData): EuCompensationCosts | null {\n if (FormCategories.BAGGAGE_IRREGULARITIES === formData?.category?.[FormCategoryInputs.FORM_CATEGORY]) {\n // delayed baggage cost is mapped in mapBaggageCosts\n return null;\n }\n const standardCompensation: number = resolveEuStandardCompensationCashValue(\n formData?.euCompensation?.euClaimOption\n );\n const expenses: CaseFormData[MultiStepFormSteps.EU_COMPENSATION] = formData.euCompensation;\n\n if (!expenses && standardCompensation === 0) {\n return null;\n }\n\n const compensation: EuCompensationCosts = {\n hotelCosts: convertToNumber(expenses?.hotelCosts),\n mealCosts: convertToNumber(expenses?.mealCosts),\n transportationCosts: convertToNumber(expenses?.transportCosts),\n phoneCosts: convertToNumber(expenses?.phoneCosts),\n additionalExpenses: convertToNumber(expenses?.indirectCosts),\n additionalExpensesDescription: expenses?.indirectCostSpecification ?? '',\n standardCompensation,\n };\n\n const hasValidCompensation: boolean =\n compensation.hotelCosts > 0 ||\n compensation.mealCosts > 0 ||\n compensation.transportationCosts > 0 ||\n compensation.phoneCosts > 0 ||\n compensation.additionalExpenses > 0 ||\n compensation.standardCompensation > 0;\n\n return hasValidCompensation ? compensation : null;\n }\n\n mapBaggageCosts(formData: CaseFormData): DelayedBaggageCosts | null {\n if (FormCategories.FLIGHT_DISRUPTION === formData.category?.[FormCategoryInputs.FORM_CATEGORY]) {\n // flight disruption cost is mapped in mapCompensation\n return null;\n }\n const expenses = formData.additionalExpenses;\n if (!expenses) {\n return null;\n }\n const delayedBaggageCost: DelayedBaggageCosts = {\n bagItemCosts: convertToNumber(expenses?.clothAndCosmeticCosts),\n bagRentalCosts: convertToNumber(expenses?.rentedCost),\n additionalExpenses: convertToNumber(expenses?.indirectCosts),\n additionalExpensesDescription: expenses.indirectCostSpecification ?? '',\n };\n\n const hasValidDelayedBaggageCost: boolean =\n delayedBaggageCost.bagRentalCosts > 0 ||\n delayedBaggageCost.bagItemCosts > 0 ||\n delayedBaggageCost.additionalExpenses > 0;\n return hasValidDelayedBaggageCost ? delayedBaggageCost : null;\n }\n\n private mapBankAccount(paymentDetails: CaseFormData[MultiStepFormSteps.PAYMENT_DETAILS]): BankAccount | null {\n if (!paymentDetails || paymentDetails.compensationType !== CompensationTypeOptions.CASH) {\n return null;\n }\n\n return {\n accountHolder: paymentDetails.accountHolder ?? '',\n accountHolderAddress: paymentDetails.accountHolderAddress ?? '',\n bankName: paymentDetails.bankName ?? '',\n bankAddress: paymentDetails.bankAddress ?? '',\n bankCountry: paymentDetails.country ?? '',\n iban: (paymentDetails.accountNumber || paymentDetails.iban) ?? '',\n bic: paymentDetails.bic ?? '',\n bik: paymentDetails.bik ?? '',\n ncc: paymentDetails.ncc ?? '',\n correspondentBankData: paymentDetails.correspondentBankData ?? '',\n patronymicName: paymentDetails.patronymicName ?? '',\n ifsc: paymentDetails.ifsc ?? '',\n inn: paymentDetails.inn ?? '',\n kpp: paymentDetails.kpp ?? '',\n };\n }\n\n private mapFeedbackRating(formData: CaseFormData, keys: string[]): FeedbackRating[] {\n const formValues: CaseFormData[MultiStepFormSteps.OPTIONAL_FEEDBACK] =\n formData?.[MultiStepFormSteps.OPTIONAL_FEEDBACK];\n return formValues\n ? keys\n .filter((key: string): null | string => formValues[key] && formValues[`${key}Rate`])\n .map(\n (key: string): FeedbackRating => ({\n name: CategoryMapLevel3[key],\n rating: RATING_SCHEME_MAP[formValues[`${key}Rate`] as string],\n })\n )\n : [];\n }\n\n mapEUCompensationFeedbackRating(formData: CaseFormData, keys: string[]): FeedbackRating[] {\n const formValues: CaseFormData[MultiStepFormSteps.EU_COMPENSATION] = formData?.[MultiStepFormSteps.EU_COMPENSATION];\n return formValues\n ? keys\n .filter((key: string): null | string => formValues[key] && formValues[`${key}Rate`])\n .map(\n (key: string): FeedbackRating => ({\n name: CategoryMapLevel3[key],\n rating: RATING_SCHEME_MAP[formValues[`${key}Rate`] as string],\n })\n )\n : [];\n }\n\n public uploadFile(\n file: File,\n origin: FileOrigin,\n salesforceCaseId?: string,\n caseId?: string,\n lastName?: string\n ): Observable {\n return this.getFileAttachment(file, origin, salesforceCaseId, caseId, lastName).pipe(\n mergeMap((attachment: CaseAttachmentPayload): Observable => this.uploadAttachment(attachment))\n );\n }\n\n public getFileAttachment(\n file: File,\n origin: FileOrigin,\n salesforceCaseId?: string,\n caseId?: string,\n lastName?: string\n ): Observable {\n return new Observable((observer) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (reader.result) {\n const result = reader.result.toString();\n observer.next({\n data: result.substring(result.indexOf(',') + 1),\n filename: file.name,\n origin,\n salesforceCaseId,\n caseId,\n lastName,\n });\n observer.complete();\n } else {\n observer.error();\n }\n };\n reader.onerror = () => {\n observer.error();\n };\n reader.readAsDataURL(file);\n });\n }\n\n public downloadAttachment(attachmentId: string, hash: string): Observable {\n const { apiUrl, keyId } = this.configService.cfg.serviceForm.customerCareAttachment;\n const headers: HttpHeaders = new HttpHeaders({ 'x-api-key': keyId });\n return this.http\n .post(\n `${apiUrl}/${attachmentId}`,\n {\n attachmentId,\n hash,\n },\n {\n headers,\n responseType: 'arraybuffer',\n observe: 'response',\n }\n )\n .pipe(\n map((response) => {\n return new Blob([response.body], {\n type: response.headers.get('content-type') || 'application/octet-stream',\n });\n }),\n catchError((error: HttpErrorResponse): Observable => {\n return throwError(() => error);\n })\n );\n }\n\n private uploadAttachment(attachment: CaseAttachmentPayload): Observable {\n const { apiUrl, keyId } = this.configService.cfg.serviceForm.customerFeedback;\n const attachmentPath: string =\n this.configService.cfg.serviceForm.customerFeedback?.options?.['attachmentPath'] || 'attachment';\n\n const httpOptions = {\n headers: this.buildHeaders({ 'x-api-key': keyId }),\n };\n\n return this.http.post(`${apiUrl}/${attachmentPath}`, attachment, httpOptions).pipe(\n // eslint-disable-next-line rxjs/no-implicit-any-catch\n catchError((err) => {\n this.sentryLogger.warn(err.message, { error: err });\n return throwError(() => err);\n })\n );\n }\n\n private omitNullAndUndefined(value: T): T {\n return Object.keys(value)\n .filter((key) => value[key] !== null && value[key] !== undefined)\n .reduce((acc, key) => {\n acc[key] = value[key];\n return acc;\n }, {} as T);\n }\n}\n","export enum CertificatesForInsuranceCompanyField {\n BOOKING_REFERENCE = 'bookingReference',\n CONFIRM_SELF_CANCELLED_BOOKING = 'confirmSelfCancelledBooking',\n EMAIL = 'email',\n FIRST_NAME = 'firstName',\n FLIGHT_DATE = 'flightDate',\n FLIGHT_NUMBER = 'flightNumber',\n FLIGHTS = 'flights',\n LAST_NAME = 'lastName',\n PHONE = 'phone',\n REASON_FOR_CERTIFICATE = 'reasonForCertificate',\n TICKET_NUMBER = 'ticketNumber',\n WORLD_TRACER_NUMBER = 'worldTracerNumber',\n}\n\nexport type CertificatesForInsuranceCompanyConditionalFieldControls = Partial<{\n [CertificatesForInsuranceCompanyField.CONFIRM_SELF_CANCELLED_BOOKING]: string;\n [CertificatesForInsuranceCompanyField.FLIGHTS]: Record[];\n [CertificatesForInsuranceCompanyField.WORLD_TRACER_NUMBER]: string;\n}>;\n\ninterface CertificatesForInsuranceCompanyRequiredFieldControls {\n [CertificatesForInsuranceCompanyField.BOOKING_REFERENCE]: string;\n [CertificatesForInsuranceCompanyField.EMAIL]: string;\n [CertificatesForInsuranceCompanyField.FIRST_NAME]: string;\n [CertificatesForInsuranceCompanyField.LAST_NAME]: string;\n [CertificatesForInsuranceCompanyField.PHONE]: string;\n [CertificatesForInsuranceCompanyField.REASON_FOR_CERTIFICATE]: CertificatesForInsuranceCompanyReason;\n [CertificatesForInsuranceCompanyField.TICKET_NUMBER]: string;\n}\n\nexport type CertificatesForInsuranceCompanyFormData = CertificatesForInsuranceCompanyConditionalFieldControls &\n CertificatesForInsuranceCompanyRequiredFieldControls;\n\nexport interface CertificatesForInsuranceCompanyPayload extends CertificatesForInsuranceCompanyFormData {\n locale: string;\n}\n\nexport enum CertificatesForInsuranceCompanyReason {\n BAGGAGE_DELAYED_OR_DAMAGED = 'baggageDelayedOrDamaged',\n FLIGHT_DELAYED_OR_CANCELLED = 'flightDelayedOrCancelled',\n NO_SHOW = 'noShow',\n ONBOARD = 'onBoard',\n SELF_CANCELLED_BOOKING = 'selfCancelledBooking',\n}\n","import { type Attachment } from '@fcom/ui-components/components/interfaces';\n\nexport enum ClaimMissingPartnerPointsFormField {\n MEMBER_NAME = '01___Member_Name',\n MEMBER_NUMBER = '02___Member_Number',\n EMAIL = '03___Email',\n ATTACHMENT = 'attachment',\n ADDITIONAL_INFORMATION = '05___Additional_Information',\n}\n\nexport type ClaimMissingPartnerPointsFormData = {\n claimMissingPartnerPoints: {\n [ClaimMissingPartnerPointsFormField.MEMBER_NAME]: string;\n [ClaimMissingPartnerPointsFormField.MEMBER_NUMBER]: string;\n [ClaimMissingPartnerPointsFormField.EMAIL]: string;\n [ClaimMissingPartnerPointsFormField.ATTACHMENT]: Attachment | Attachment[];\n [ClaimMissingPartnerPointsFormField.ADDITIONAL_INFORMATION]: string;\n };\n};\n","export enum ETicketReceiptFormField {\n LAST_NAME = 'lastName',\n RESERVATION_NUMBER = 'reservationNumber',\n}\n","import { Observable } from 'rxjs';\n\nimport { SelectOption } from '@fcom/common/interfaces';\nimport { RadioItemGroupOption } from '@fcom/ui-components';\nimport { type FileUploaderComponent } from '@fcom/ui-components/components/forms/file-uploader/file-uploader.component';\nimport { type Attachment } from '@fcom/ui-components/components/interfaces';\n\nexport enum FormBuilderInput {\n TEXT,\n TEXTAREA,\n FILE_UPLOADER,\n RADIO,\n SELECT,\n}\n\nexport interface FormBuilderFieldBase {\n allowedFileTypes?: FileUploaderComponent['allowedFileTypes'];\n controlConfig: any[];\n controlName: string;\n customAttachLabel?: string;\n customRequiredLabel?: string;\n disabled?: boolean;\n i18n?: string;\n id?: string;\n maxSizeInBytes?: FileUploaderComponent['maxSizeInBytes'];\n multiple?: FileUploaderComponent['multiple'];\n note?: string;\n options?: SelectOption[];\n placeHolder?: string;\n prefillFromProfile?: string;\n required?: boolean;\n translationPrefix?: string;\n type: FormBuilderInput;\n uploadService?: FileUploaderComponent['uploadService'];\n values?: RadioItemGroupOption[];\n wordCount?: number;\n}\n\nexport interface FormBuilderFieldText extends FormBuilderFieldBase {\n type: FormBuilderInput.TEXT;\n placeHolder?: string;\n}\n\nexport interface FormBuilderFieldTextarea extends FormBuilderFieldBase {\n type: FormBuilderInput.TEXTAREA;\n placeHolder?: string;\n wordCount?: number;\n}\n\nexport interface FormBuilderFieldRadio extends FormBuilderFieldBase {\n type: FormBuilderInput.RADIO;\n values: RadioItemGroupOption[];\n}\n\nexport interface FormBuilderFieldSelect extends FormBuilderFieldBase {\n type: FormBuilderInput.SELECT;\n options: SelectOption[];\n}\n\nexport interface FormBuilderFieldFileUploader extends FormBuilderFieldBase {\n allowedFileTypes?: FileUploaderComponent['allowedFileTypes'];\n customAttachLabel?: string;\n customRequiredLabel?: string;\n disabled?: boolean;\n i18n?: string;\n id?: string;\n maxSizeInBytes?: FileUploaderComponent['maxSizeInBytes'];\n multiple?: FileUploaderComponent['multiple'];\n type: FormBuilderInput.FILE_UPLOADER;\n uploadService?: FileUploaderComponent['uploadService'];\n}\n\nexport type FormBuilderField =\n | FormBuilderFieldFileUploader\n | FormBuilderFieldRadio\n | FormBuilderFieldSelect\n | FormBuilderFieldText\n | FormBuilderFieldTextarea;\n\nexport interface FormBuilderGroup {\n controlName: string;\n fields: FormBuilderField[];\n}\n\nexport interface FormBuilderSubmitHandler {\n (formValue: FormBuilderSubmissionData): Observable;\n}\n\nexport type FormBuilderFieldValue = Attachment | Attachment[] | boolean | number | string;\n\nexport interface FormBuilderSubmissionData {\n [key: string]: {\n [key: string]: FormBuilderFieldValue;\n };\n}\n","import { type HttpErrorResponse } from '@angular/common/http';\nimport { type FormControl, type FormGroup } from '@angular/forms';\n\nimport { MultiStepFormSteps, PaymentDetailsInputs, type CaseFormData } from './multi-step-conditional-form.interface';\nimport { type AkamaiCryptoChallengeErrorResponse } from './response-data.interface';\n\nexport type GiftCardBankDetails = Omit<\n CaseFormData[MultiStepFormSteps.PAYMENT_DETAILS],\n PaymentDetailsInputs.COMPENSATION_TYPE\n>;\n\nexport type GiftCardBankDetailsForm = {\n [key in keyof GiftCardBankDetails]: FormControl;\n};\n\nexport interface GiftCardContactDetails {\n emailAddress: string;\n}\n\nexport interface GiftCardConversionPayload {\n body: Partial & GiftCardContactDetails;\n giftCardId: string;\n pin: string;\n}\n\nexport interface GiftCardConversionForm {\n giftCardPin2: FormControl;\n}\n\nexport type GiftCardConversionError = AkamaiCryptoChallengeErrorResponse | HttpErrorResponse;\n\nexport type GiftCardContactDetailsForm = {\n [key in keyof GiftCardContactDetails]: FormControl;\n};\n\nexport interface GiftCardCustomer {\n email: string;\n firstName: string;\n lastName: string;\n locale: string;\n phone: string;\n}\n\nexport interface GiftCardReason {\n caseId: string;\n category: string;\n incidentDate: string;\n incidentNumber: string;\n migrated: boolean;\n recLoc: string;\n subCategory: string;\n user: string;\n}\n\n/** @todo Verify gift card statuses. */\nexport enum GiftCardStatus {\n ACTIVE = 'active',\n CANCELLED = 'cancelled',\n CONVERTED = 'converted',\n EXPIRED = 'expired',\n INITIAL = 'initial',\n LOCKED = 'locked',\n}\n\nexport interface GiftCardVerificationForm {\n giftCardId: FormControl;\n giftCardPin1: FormControl;\n}\n\nexport enum GiftCardInformationFormStep {\n GIFT_CARD_VERIFICATION,\n GIFT_CARD_INFORMATION,\n BANK_DETAILS,\n CONTACT_DETAILS,\n GIFT_CARD_CONVERSION,\n}\n\nexport enum GiftCardInformationFormControls {\n EMAIL_ADDRESS = 'emailAddress',\n GIFT_CARD_ID = 'giftCardId',\n GIFT_CARD_PIN_1 = 'giftCardPin1',\n GIFT_CARD_PIN_2 = 'giftCardPin2',\n}\n\nexport enum GiftCardInformationFormName {\n BANK_DETAILS_FORM = 'bankDetailsForm',\n CONTACT_DETAILS_FORM = 'contactDetailsForm',\n CONVERSION_FORM = 'conversionForm',\n VERIFICATION_FORM = 'verificationForm',\n}\n\nexport interface GiftCardInformationForm {\n [GiftCardInformationFormName.BANK_DETAILS_FORM]: FormGroup;\n [GiftCardInformationFormName.CONTACT_DETAILS_FORM]: FormGroup;\n [GiftCardInformationFormName.CONVERSION_FORM]: FormGroup;\n [GiftCardInformationFormName.VERIFICATION_FORM]: FormGroup;\n}\n\nexport type GiftCardStepForms = Array<\n | FormGroup\n | FormGroup\n | FormGroup\n | FormGroup\n | FormGroup\n>;\n\nexport interface GiftCardVerificationPayload {\n giftCardId: string;\n pin: string;\n}\n\n/** @todo Add error response from gift card service. */\nexport type GiftCardVerificationError = AkamaiCryptoChallengeErrorResponse;\n\nexport interface GiftCardVerificationResponse {\n account?: string;\n availableValue: string;\n cashValue?: string;\n currency: string;\n customer: GiftCardCustomer;\n expiredValue?: string;\n expiryDate: string;\n giftCardId: string;\n initialValue: string;\n isConvertibleToCash?: boolean;\n issuanceDate: string;\n reason: GiftCardReason;\n status: GiftCardStatus;\n}\n","export enum LoggedInMissingPointsFormField {\n AIRLINE = 'airline',\n ARRIVAL_AIRPORT = 'destinationAirport',\n BOOKING_CLASS = 'bookingClassSold',\n DEPARTURE_AIRPORT = 'originAirport',\n FLIGHT_DATE = 'flightDate',\n FLIGHT_NUMBER = 'flightNumber',\n NO_TICKET_NUMBER = 'noTicketNumber',\n SEQUENCE_NUMBER = 'sequenceNumber',\n TICKET_NUMBER = 'ticketNumber',\n}\n\nexport enum LoggedOutMissingPointsFormField {\n AIRLINE = 'airline',\n ATTACHMENT = 'attachment',\n PASSENGER_NAME = 'passengerName',\n MEMBER_NUMBER = 'memberNumber',\n TICKET_NUMBER = 'ticketNumber',\n FLIGHT_FROM = 'flightFrom',\n FLIGHT_TO = 'flightTo',\n DEPARTURE_DATE = 'departureDate',\n RETURN_DATE = 'returnDate',\n FLIGHT_NUMBERS = 'flightNumbers',\n FLIGHT_NUMBER = 'flightNumber',\n COMPANIONS = 'companions',\n COMPANION_NAME = 'companionName',\n COMPANION_MEMBER_NUMBER = 'companionMemberNumber',\n MESSAGE = 'message',\n EMAIL = 'email',\n PHONE = 'phone',\n BOOKING_CLASS = 'bookingClass',\n}\n","import type { AppState } from '@fcom/core/interfaces';\nimport type { Location } from '@fcom/core-api/interfaces';\nimport type { LocalDate } from '@fcom/core/utils';\nimport type { FormStatus } from '@fcom/service-forms';\nimport type { Attachment } from '@fcom/ui-components/components/interfaces';\n\nimport type { SpecialAssistanceFormFields } from './special-assistance-form.interface';\n\nexport enum FormType {\n FYI = 'fyi',\n FYA = 'fya',\n INDIVIDUAL = 'individual',\n REPRESENTATIVE = 'representative',\n CLAIM_COMPANY = 'claimCompany',\n MEDA = 'meda',\n}\n\nexport enum CaseType {\n FYI = 'fyi',\n FYA = 'fya',\n MEDA = 'meda',\n AGENT = 'agent',\n}\n\nexport enum FormCategoryInputs {\n FORM_CATEGORY = 'formCategory',\n FORM_SUB_CATEGORY = 'formSubCategory',\n}\n\nexport enum FormCategories {\n FLIGHT_DISRUPTION = 'flightDisruption',\n BAGGAGE_IRREGULARITIES = 'baggageIrregularities',\n BOOKING_AND_TRAVEL_EXPERIENCE = 'bookingAndTravelExperience',\n}\n\nexport enum FormSubCategories {\n DELAYED_OR_CANCELLED = 'delayedOrCancelled',\n OVERBOOKING = 'overbooking',\n DOWNGRADING = 'downgrading',\n DELAYED_BAGGAGE = 'delayedBaggage',\n DAMAGED_BAGGAGE = 'damagedBaggage',\n BOOKINGS = 'bookings',\n AIRPORT_EXPERIENCE = 'airportExperience',\n ONBOARD_EXPERIENCE = 'onboardExperience',\n TRAVEL_EXTRAS = 'travelExtras',\n SPECIAL_NEEDS = 'specialNeeds',\n FINNAIR_PLUS = 'finnairPlus',\n}\n\nexport enum MultiStepFormSteps {\n FORM_TYPE = 'formType',\n CLAIMANT_DETAILS = 'claimantDetails',\n CATEGORY = 'category',\n BOOKING_INFORMATION = 'bookingInformation',\n ADD_PASSENGERS = 'addPassengers',\n DOWNGRADING = 'downgrading',\n EU_COMPENSATION = 'euCompensation',\n ADDITIONAL_EXPENSES = 'additionalExpenses',\n PAYMENT_DETAILS = 'paymentDetails',\n OPTIONAL_FEEDBACK = 'optionalFeedback',\n REVIEW_AND_SUBMIT = 'reviewAndSubmit',\n SECOND_CATEGORY = 'secondCategory',\n BAG_TRACING = 'bagTracing',\n}\n\nexport enum SecondCategoryInput {\n SECOND_CATEGORY = 'secondCategory',\n}\n\nexport enum BaggageOptions {\n BAGS = 'bags',\n PRAMS_BABY = 'pramsBaby',\n SPORT = 'sport',\n WHEELCHAIR = 'wheelChair',\n SPECIAL_BAGGAGE = 'specialBaggage',\n MISSING_ITEMS = 'missingItems',\n}\n\nexport enum BookingOptions {\n TICKET_FARES_AND_RULES = 'ticketFaresAndRules',\n DIGITAL_SALES_SERVICES = 'digitalSalesServices',\n CUSTOMER_SERVICE_BY_FINNAIR = 'customerServiceByFinnair',\n CUSTOMER_SERVICE_BY_OTHER = 'customerServiceByOther',\n SCHEDULE_CHANGE = 'scheduleChange',\n}\n\nexport enum AirportExperienceOptions {\n ARRIVAL_SERVICE = 'arrivalService',\n CHECK_IN = 'checkIn',\n GATE_SERVICE = 'gateService',\n GATEWAY_SERVICES = 'gatewayServices',\n LOUNGES = 'lounges',\n DIGITAL_GROUND_SERVICES = 'digitalGroundServices',\n DENIED_ACCEPTANCE = 'deniedAcceptance',\n AUTHORITIES_AND_OTHER_SERVICES = 'authoritiesAndOtherServices',\n PERSONAL_INJURY = 'personalInjury',\n}\n\nexport enum OnboardExperienceOptions {\n CREW = 'crew',\n FOOD_AND_DRINK = 'foodAndDrink',\n INFLIGHT_ENTERTAINMENT = 'inflightEntertainment',\n SEATS_AND_SEATING = 'seatsAndSeating',\n INTERNET = 'internet',\n CABIN_EXPERIENCE = 'cabinExperience',\n}\n\nexport enum TravelExtrasOptions {\n SEATS = 'seats',\n MEALS = 'meals',\n BAGGAGE = 'baggage',\n UPGRADES = 'upgrades',\n WIFI = 'wifi',\n TREATS_AND_COMFORT_ITEMS = 'treatsAndComfortItems',\n ADVERTISING = 'advertising',\n}\n\nexport enum SpecialNeedsOptions {\n CUSTOMER_WITH_DISABILITY = 'customerWithDisability',\n CUSTOMER_WITH_MEDICAL_CONDITION = 'customerWithMedicalCondition',\n ELDERLY_CUSTOMER = 'elderlyCustomer',\n TRAVELING_WITH_SMALL_CHILDREN = 'travelingWithSmallChildren',\n UNACCOMPANIED_MINOR = 'unaccompaniedMinor',\n WHEELCHAIR = 'wheelChair',\n PET_IN_CABIN_OR_IN_HOLD = 'petInCabinOrInHold',\n}\n\nexport enum FinnairPlusOptions {\n SERVICE = 'service',\n MEMBER_SHIP_BENEFIT = 'memberShipBenefit',\n AWARDS = 'awards',\n MARKETING = 'marketing',\n RULES_AND_CONDITIONS = 'rulesAndConditions',\n}\n\nexport type SecondCategoryOption =\n | BaggageOptions\n | BookingOptions\n | AirportExperienceOptions\n | OnboardExperienceOptions\n | TravelExtrasOptions\n | SpecialNeedsOptions\n | FinnairPlusOptions;\n\nexport enum BagTracingInputs {\n HAS_WORLD_TRACER_NUMBER = 'hasWorldTracerNumber',\n WORLD_TRACER_NUMBER = 'worldTracerNumber',\n}\n\nexport enum OptionalFeedbackInputs {\n GIVE_FEEDBACK = 'giveFeedback',\n ADDITIONAL_COMMENTS = 'additionalComments',\n\n CARE = 'care',\n REROUTING = 'reroutingRebooking',\n CUSTOMER_SERVICE_ATTITUDE = 'customerServiceAttitude',\n REACHABILITY = 'reachability',\n DIGITAL_SERVICES = 'digitalServices',\n INFORMATION = 'information',\n CUSTOMER_COMMUNICATION = 'customerCommunication',\n AVAILABILITY_OF_FARES = 'availabilityOfFares',\n NO_SHOW_OR_RETURN_CANCELLED = 'noShowOrReturnCancelled',\n FARE_RESTRICTIONS = 'fareRestrictions',\n REFUND_POLICY = 'refundPolicy',\n WEBSITE_FUNCTIONALITY = 'websiteFunctionality',\n FINNAIR_APP = 'finnairApp',\n CHAT = 'chat',\n SOCIAL_MEDIA = 'socialMedia',\n WHATSAPP = 'whatsapp',\n REACHABILITY_OF_CONTACT_CENTER = 'reachabilityOfContactCenter',\n CUSTOMER_SERVICE_SKILLS = 'customerServiceSkills',\n TRAVEL_AGENCIES = 'travelAgencies',\n OTHER_DISTRIBUTORS = 'otherDistributors',\n CHANGES_IN_TRAVEL_PLANS = 'changesInTravelPlans',\n CHANGES_NOT_INFORMED = 'changesNotInformed',\n LONG_BAGGAGE_DELIVERY_TIME = 'longBaggageDeliveryTime',\n INFORMATION_ANNOUNCEMENTS_SIGNAGE = 'informationAnnouncementsSignage',\n ARRIVAL_SERVICE_REACHABALITY_BY_PHONE = 'arrivalServiceReachabalityByPhone',\n EXCESS_BAGGAGE_CHARGE = 'excessBaggageCharge',\n PRE_PAID_SEATS = 'prePaidSeats',\n SEATING = 'seating',\n CHECK_IN_QUEUE = 'checkInQueue',\n RECOGNITION_OF_TOP_TIER_PRIORITY_CUSTOMER = 'recognitionOfTopTierPriorityCustomer',\n FLUENCY_OF_BOARDING = 'fluencyOfBoarding',\n CARRY_ON_BAGGAGE = 'carryOnBaggage',\n REFUSED_ACCEPTANCE_AT_THE_BOARDING_GATE = 'refusedAcceptanceAtTheBoardingGate',\n MISSED_CONNECTING_FLIGHT = 'missedConnectingFlight',\n ACCESS_TO_LOUNGE = 'accessToLounge',\n INTERIOR_APPEARANCE_CLEANLINESS = 'interiorAppearanceCleanliness',\n MEAL_AND_BEVERAGE_SERVICE = 'mealAndBeverageService',\n INTERNET_CHECK_IN = 'internetCheckIn',\n KIOSK_CHECK_IN = 'kioskCheckIn',\n SMS_CHECK_IN = 'smsCheckIn',\n INFO_ON_DIGITAL_CHANNEL = 'infoOnDigitalChannel',\n TRAVEL_DOCUMENT_ISSUE = 'travelDocumentIssue',\n REFUSED_ACCEPTANCE_AT_CHECK_IN = 'refusedAcceptanceAtCheckIn',\n CUSTOMS = 'customs',\n PASSPORT_CONTROL = 'passportControl',\n SECURITY_CHECKS = 'securityChecks',\n FACILITIES_OR_SIGNAGE_OR_SHOPS = 'facilitiesOrSignageOrShops',\n FLY_RAIL_TRAIN_CONNECTION_IN_GERMANY = 'flyRailTrainConnectionInGermany',\n INJURY_HAPPENED_INSIDE_AIRPORT_TERMINAL = 'injuryHappenedInsideAirportTerminal',\n INJURY_HAPPENED_WHEN_BOARDING_EXITING_THE_AIRCRAFT = 'injuryHappenedWhenBoardingExitingTheAircraft',\n DAMAGE_SPILLAGE_CAUSED_TO_CLOTHING_OR_BELONGINGS = 'damageSpillageCausedToClothingOrBelongings',\n PILOTS = 'pilots',\n COMPLIMENTARY_MEALS = 'complimentaryMeals',\n SPECIAL_MEALS = 'specialMeals',\n FOOD_AND_DRINK_BOUGHT_ONBOARD = 'foodAndDrinkBoughtOnboard',\n FOOD_SAFETY = 'foodSafety',\n DEFECTED_WORKING_ONLY_PARTIALLY = 'defectedWorkingOnlyPartially',\n SELECTION_OF_MOVIES_GAMES_MUSIC_NEWSPAPERS = 'selectionOfMoviesGamesMusicNewspapers',\n DEFECTIVE_SEAT = 'defectiveSeat',\n DEFECTIVE_TABLE_OR_READING_LIGHT_ETC = 'defectiveTableOrReadingLightEtc',\n INTERNET_NOT_WORKING = 'internetNotWorking',\n CLEANLINESS_AND_HYGIENE = 'cleanlinessAndHygiene',\n HEATING_VENTILATION_NOISE_LIGHTS = 'heatingVentilationNoiseLights',\n AIRCRAFT_TYPE_CODE_SHARE = 'aircraftTypeCodeShare',\n HAND_BAGGAGE_ISSUES = 'handBaggageIssues',\n DISTURBING_FELLOW_PASSENGER = 'disturbingFellowPassenger',\n AVAILABILITY = 'availability',\n SEAT_CHANGED = 'seatChanged',\n BOOKING_PROCESS = 'bookingProcess',\n PRICE = 'price',\n SELECTION = 'selection',\n MISSING_OR_CHANGED_MEAL = 'missingOrChangedMeal',\n QUALITY = 'quality',\n WIFI_NOT_WORKING = 'wifiNotWorking',\n ITEM_MISSING_OR_BROKEN = 'itemMissingOrBroken',\n INFLIGHT_PREORDER_SALES = 'inflightPreorderSales',\n BOOKING_EXPERIENCE = 'bookingExperience',\n AIRPORT_EXPERIENCE = 'airportExperience',\n INFLIGHT_EXPERIENCE = 'inflightExperience',\n DAMAGED_MOBILITY_AID = 'damagedMobilityAid',\n DELAYED_MOBILITY_AID = 'delayedMobilityAid',\n MOBILITY_AID_HANDLING = 'mobilityAidHandling',\n DELAYED_DELIVERY_OF_PET = 'delayedDeliveryOfPet',\n DAMAGED_PET_CARRIER = 'damagedPetCarrier',\n WEB_PAGES_FUNCTIONALITY_INFO = 'webPagesFunctionalityInfo',\n FUNCTIONALITY_OF_PROCEDURES = 'functionalityOfProcedures',\n REACHABILITY_OF_SERVICE = 'reachabilityOfService',\n TIER_MEMBER_BENEFITS = 'tierMemberBenefits',\n BASIC_MEMBER_BENEFITS = 'basicMemberBenefits',\n JUNIOR_PLUS_BENEFITS = 'juniorPlusBenefits',\n UPGRADES = 'upgrades',\n FLIGHT_AWARD_AVAILABILITY = 'flightAwardAvailability',\n FINNAIR_FLIGHT_AWARD = 'finnairFlightAward',\n PARTNER_FLIGHT_AWARD = 'partnerFlightAward',\n NON_AIRLINE_AWARD = 'nonAirlineAward',\n CAMPAIGN = 'campaign',\n EMAIL_NEWSLETTERS = 'emailNewsletters',\n PRINTED_MATERIAL = 'printedMaterial',\n MEMBERSHIP_CARDS = 'membershipCards',\n TIER_QUALIFICATION = 'tierQualification',\n EXPIRATION_OF_POINTS = 'expirationOfPoints',\n COMPARISON_TO_COMPETITOR_PROGRAM = 'comparisonToCompetitorProgram',\n JOINING_FINNAIR_PLUS = 'joiningFinnairPlus',\n}\n\nexport type OptionalFeedbackOptions = Record;\n\nexport enum CustomerFields {\n MEMBER_NUMBER = 'memberNumber',\n}\n\nexport enum FeedbackRateOptions {\n VERY_POOR = 'veryPoor',\n POOR = 'poor',\n OKAY = 'okay',\n GOOD = 'good',\n EXCELLENT = 'excellent',\n}\n\nexport enum GiveOptionalFeedbackOptions {\n YES = 'addFeedback',\n NO = 'plainClaim',\n}\n\nexport enum ClaimantDetailInputs {\n AUTHORIZED_REP = 'authorizedRep',\n AUTHORIZED_COMPANY = 'authorizedCompany',\n COMPANY_TYPE = 'companyType',\n CLAIM_COMPANY = 'claimCompany',\n CLAIM_COMPANY_OTHER = 'claimCompanyOther',\n REFERENCE_NUMBER = 'referenceNumber',\n FIRST_NAME = 'firstName',\n LAST_NAME = 'lastName',\n EMAIL = 'email',\n PHONE = 'phone',\n}\n\nexport enum CompanyType {\n CLAIM_COMPANY = 'claimCompany',\n TRAVEL_AGENT_OR_OPERATOR = 'travelAgentOrOperator',\n INSURANCE_COMPANY = 'insuranceCompany',\n OTHER = 'other',\n}\n\nexport enum BookingInfoInputs {\n RESERVATION_NUMBER = 'reservationNumber',\n FLIGHT_DATE = 'flightDate',\n FLIGHT_NUMBER = 'flightNumber',\n ORIGIN = 'origin',\n DESTINATION = 'destination',\n FLIGHT_LEG = 'flightLeg',\n}\n\nexport enum PaymentDetailsInputs {\n COMPENSATION_TYPE = 'compensationType',\n IBAN = 'iban',\n ACCOUNT_NUMBER = 'accountNumber',\n BIC = 'bic',\n ACCOUNT_HOLDER = 'accountHolder',\n ACCOUNT_HOLDER_ADDRESS = 'accountHolderAddress',\n BANK_NAME = 'bankName',\n BANK_ADDRESS = 'bankAddress',\n BANK_COUNTRY = 'country',\n NCC = 'ncc',\n IFSC = 'ifsc',\n BIK = 'bik',\n CBD = 'correspondentBankData',\n KPP = 'kpp',\n INN = 'inn',\n PATRONYMIC_NAME = 'patronymicName',\n}\n\nexport enum CompensationTypeOptions {\n GIFT_VOUCHER = 'voucher',\n CASH = 'cash',\n}\n\nexport enum AddPassengersInputs {\n MAIN_PASSENGER = 'mainPassenger',\n COMPANIONS = 'companions',\n}\n\nexport enum PassengerInputs {\n FIRST_NAME = 'firstName',\n LAST_NAME = 'lastName',\n EMAIL = 'email',\n PHONE = 'phone',\n COUNTRY = 'country',\n IS_CHILD = 'isChild',\n ATTACHMENT = 'attachment',\n}\n\nexport enum EuCompensationInputs {\n CLAIM_TYPE = 'claimType',\n EU_CLAIM_OPTION = 'euClaimOption',\n}\n\nexport enum ClaimType {\n EU_STANDARD_COMPENSATION = 'euStandardCompensation',\n RECEIVED_COMPENSATION = 'receivedCompensation',\n SPECIAL_CASE_COMPENSATION = 'specialCaseCompensation',\n JUST_FEEDBACK = 'justFeedback',\n}\n\nexport enum PassengerInfoType {\n SELF = 'self',\n OTHERS = 'others',\n}\n\nexport enum EUClaimOptions {\n SHORT = 'short',\n SHORT_HALF = 'shortHalf',\n MIDDLE = 'middle',\n MIDDLE_HALF = 'middleHalf',\n LONG = 'long',\n LONG_HALF = 'longHalf',\n}\n\nexport enum DowngradingOptions {\n CABIN = 'cabin',\n ADDITIONAL_EXPENSES = 'additionalExpenses',\n TRAVEL_EXTRAS = 'travelExtras',\n}\n\nexport enum DowngradingInputs {\n DOWNGRADING_CLAIM_TYPE = 'downgradingClaimType',\n}\n\nexport enum AdditionalExpensesInputs {\n ADDITIONAL_EXPENSES = 'additionalExpenses',\n HOTEL_COST = 'hotelCosts',\n TRANSPORT_COST = 'transportCosts',\n MEAL_COST = 'mealCosts',\n PHONE_COST = 'phoneCosts',\n CLOTH_AND_COSMETIC_COST = 'clothAndCosmeticCosts',\n RENTED_COST = 'rentedCost',\n OTHER_COST = 'otherCosts',\n INDIRECT_COST = 'indirectCosts',\n INDIRECT_COST_SPECIFICATION = 'indirectCostSpecification',\n ATTACHMENTS = 'attachments',\n}\n\nexport enum AdditionalExpenses {\n YES = 'yes',\n NO = 'no',\n}\n\nexport enum ReviewAndSubmitInputs {\n CONFIRM = 'confirm',\n}\n\ninterface Passenger {\n [PassengerInputs.FIRST_NAME]: string;\n [PassengerInputs.LAST_NAME]: string;\n}\n\nexport interface MainPassenger extends Passenger {\n [PassengerInputs.COUNTRY]: string;\n [PassengerInputs.EMAIL]: string;\n [PassengerInputs.PHONE]: string;\n [PassengerInputs.ATTACHMENT]?: Attachment[];\n}\n\nexport interface Companion extends Passenger {\n [PassengerInputs.EMAIL]?: string;\n [PassengerInputs.PHONE]?: string;\n [PassengerInputs.ATTACHMENT]?: Attachment[];\n [PassengerInputs.IS_CHILD]: boolean;\n}\n\ntype PartialRecord = Partial>;\n\nexport interface SpecialAssistance {\n ableToSitWithKneesBent: boolean;\n additionalInformation: string;\n additionalMedicalEquipment: string;\n assistantName: string;\n assistanceType: string;\n capapDeviceModel: string;\n reasonForWheelchair: string;\n travellingWithAssistant: boolean;\n typeOfMedicalEquipment: string;\n typeOfCondition: string;\n otherReasonForAssistance: string;\n ownWheelchair: boolean;\n otherMedicalEquipmentModel: string;\n otherMedicalEquipmentType: string;\n portableOxygenConcentratorModel: string;\n wheelchairDepth: number;\n wheelchairHeight: number;\n wheelchairWidth: number;\n wheelchairWeight: number;\n wheelchairType: string;\n [SpecialAssistanceFormFields.MEDA_ATTACHMENT]?: Attachment;\n amountOfLithiumIonBatteries?: string | number;\n battery1Power?: string;\n battery2Power?: string;\n otherMobilityAidDescription?: string;\n}\n\nexport interface CaseFormData {\n formType: FormType;\n customerFields?: {\n [CustomerFields.MEMBER_NUMBER]: string;\n };\n [MultiStepFormSteps.CLAIMANT_DETAILS]?: {\n [ClaimantDetailInputs.COMPANY_TYPE]?: string;\n [ClaimantDetailInputs.CLAIM_COMPANY]?: string;\n [ClaimantDetailInputs.CLAIM_COMPANY_OTHER]?: string;\n [ClaimantDetailInputs.FIRST_NAME]?: string;\n [ClaimantDetailInputs.LAST_NAME]?: string;\n [ClaimantDetailInputs.EMAIL]: string;\n [ClaimantDetailInputs.PHONE]: string;\n [ClaimantDetailInputs.REFERENCE_NUMBER]?: string;\n };\n [MultiStepFormSteps.CATEGORY]: {\n [FormCategoryInputs.FORM_CATEGORY]: string;\n [FormCategoryInputs.FORM_SUB_CATEGORY]: string;\n };\n [MultiStepFormSteps.BOOKING_INFORMATION]: {\n [BookingInfoInputs.RESERVATION_NUMBER]: string;\n [BookingInfoInputs.FLIGHT_DATE]: LocalDate;\n [BookingInfoInputs.FLIGHT_NUMBER]: string;\n [BookingInfoInputs.ORIGIN]: Location;\n [BookingInfoInputs.DESTINATION]: Location;\n };\n [MultiStepFormSteps.ADD_PASSENGERS]: {\n [AddPassengersInputs.MAIN_PASSENGER]: MainPassenger;\n [AddPassengersInputs.COMPANIONS]: Companion[];\n };\n [MultiStepFormSteps.OPTIONAL_FEEDBACK]: Omit<\n PartialRecord,\n 'additionalComments'\n > & {\n additionalComments?: string;\n customerCommunicationRate?: FeedbackRateOptions;\n careRate?: FeedbackRateOptions;\n reroutingRebookingRate?: FeedbackRateOptions;\n customerServiceRate?: FeedbackRateOptions;\n reachabilityRate?: FeedbackRateOptions;\n digitalServicesRate?: FeedbackRateOptions;\n informationRate?: FeedbackRateOptions;\n availabilityOfFaresRate?: FeedbackRateOptions;\n noShowOrReturnCancelledRate?: FeedbackRateOptions;\n fareRestrictionsRate?: FeedbackRateOptions;\n refundPolicyRate?: FeedbackRateOptions;\n websiteFunctionalityRate?: FeedbackRateOptions;\n finnairAppRate?: FeedbackRateOptions;\n chatRate?: FeedbackRateOptions;\n socialMediaRate?: FeedbackRateOptions;\n whatsappRate?: FeedbackRateOptions;\n reachabilityOfContactCenterRate?: FeedbackRateOptions;\n customerServiceSkillsRate?: FeedbackRateOptions;\n customerServiceAttitudeAndFriendlinessRate?: FeedbackRateOptions;\n travelAgenciesRate?: FeedbackRateOptions;\n otherDistributorsRate?: FeedbackRateOptions;\n changesInTravelPlansRate?: FeedbackRateOptions;\n changesNotInformedRate?: FeedbackRateOptions;\n longBaggageDeliveryTimeRate?: FeedbackRateOptions;\n informationAnnouncementsSignageRate?: FeedbackRateOptions;\n arrivalServiceReachabalityByPhoneRate?: FeedbackRateOptions;\n excessBaggageChargeRate?: FeedbackRateOptions;\n prePaidSeatsRate?: FeedbackRateOptions;\n seatingRate?: FeedbackRateOptions;\n checkInQueueRate?: FeedbackRateOptions;\n recognitionOfTopTierPriorityCustomerRate?: FeedbackRateOptions;\n fluencyOfBoardingRate?: FeedbackRateOptions;\n carryOnBaggageRate?: FeedbackRateOptions;\n refusedAcceptanceAtTheBoardingGateRate?: FeedbackRateOptions;\n missedConnectingFlightRate?: FeedbackRateOptions;\n accessToLoungeRate?: FeedbackRateOptions;\n interiorAppearanceCleanlinessRate?: FeedbackRateOptions;\n mealAndBeverageServiceRate?: FeedbackRateOptions;\n internetCheckInRate?: FeedbackRateOptions;\n kioskCheckInRate?: FeedbackRateOptions;\n smsCheckInRate?: FeedbackRateOptions;\n infoOnDigitalChannelRate?: FeedbackRateOptions;\n travelDocumentIssueRate?: FeedbackRateOptions;\n refusedAcceptanceAtCheckInRate?: FeedbackRateOptions;\n customsRate?: FeedbackRateOptions;\n passportControlRate?: FeedbackRateOptions;\n securityChecksRate?: FeedbackRateOptions;\n facilitiesOrSignageOrShopsRate?: FeedbackRateOptions;\n flyRailTrainConnectionInGermanyRate?: FeedbackRateOptions;\n injuryHappenedInsideAirportTerminalRate?: FeedbackRateOptions;\n injuryHappenedWhenBoardingExitingTheAircraftRate?: FeedbackRateOptions;\n damageSpillageCausedToClothingOrBelongingsRate?: FeedbackRateOptions;\n pilotsRate?: FeedbackRateOptions;\n complimentaryMealsRate?: FeedbackRateOptions;\n specialMealsRate?: FeedbackRateOptions;\n foodAndDrinkBoughtOnboardRate?: FeedbackRateOptions;\n foodSafetyRate?: FeedbackRateOptions;\n defectedWorkingOnlyPartiallyRate?: FeedbackRateOptions;\n selectionOfMoviesGamesMusicNewspapersRate?: FeedbackRateOptions;\n defectiveSeatRate?: FeedbackRateOptions;\n defectiveTableOrReadingLightEtcRate?: FeedbackRateOptions;\n internetNotWorkingRate?: FeedbackRateOptions;\n cleanlinessAndHygieneRate?: FeedbackRateOptions;\n heatingVentilationNoiseLightsRate?: FeedbackRateOptions;\n aircraftTypeCodeShareRate?: FeedbackRateOptions;\n handBaggageIssuesRate?: FeedbackRateOptions;\n disturbingFellowPassengerRate?: FeedbackRateOptions;\n availabilityRate?: FeedbackRateOptions;\n seatChangedRate?: FeedbackRateOptions;\n bookingProcessRate?: FeedbackRateOptions;\n priceRate?: FeedbackRateOptions;\n selectionRate?: FeedbackRateOptions;\n missingOrChangedMealRate?: FeedbackRateOptions;\n qualityRate?: FeedbackRateOptions;\n wifiNotWorkingRate?: FeedbackRateOptions;\n itemMissingOrBrokenRate?: FeedbackRateOptions;\n inflightPreorderSalesRate?: FeedbackRateOptions;\n bookingExperienceRate?: FeedbackRateOptions;\n airportExperienceRate?: FeedbackRateOptions;\n inflightExperienceRate?: FeedbackRateOptions;\n damagedMobilityAidRate?: FeedbackRateOptions;\n delayedMobilityAidRate?: FeedbackRateOptions;\n mobilityAidHandlingRate?: FeedbackRateOptions;\n delayedDeliveryOfPetRate?: FeedbackRateOptions;\n damagedPetCarrierRate?: FeedbackRateOptions;\n webPagesFunctionalityInfoRate?: FeedbackRateOptions;\n functionalityOfProceduresRate?: FeedbackRateOptions;\n reachabilityOfServiceRate?: FeedbackRateOptions;\n tierMemberBenefitsRate?: FeedbackRateOptions;\n basicMemberBenefitsRate?: FeedbackRateOptions;\n juniorPlusBenefitsRate?: FeedbackRateOptions;\n upgradesRate?: FeedbackRateOptions;\n flightAwardAvailabilityRate?: FeedbackRateOptions;\n finnairFlightAwardRate?: FeedbackRateOptions;\n partnerFlightAwardRate?: FeedbackRateOptions;\n nonAirlineAwardRate?: FeedbackRateOptions;\n campaignRate?: FeedbackRateOptions;\n emailNewslettersRate?: FeedbackRateOptions;\n printedMaterialRate?: FeedbackRateOptions;\n membershipCardsRate?: FeedbackRateOptions;\n tierQualificationRate?: FeedbackRateOptions;\n expirationOfPointsRate?: FeedbackRateOptions;\n comparisonToCompetitorProgramRate?: FeedbackRateOptions;\n joiningFinnairPlusRate?: FeedbackRateOptions;\n };\n [MultiStepFormSteps.PAYMENT_DETAILS]?: {\n [PaymentDetailsInputs.COMPENSATION_TYPE]: CompensationTypeOptions;\n [PaymentDetailsInputs.IBAN]?: string;\n [PaymentDetailsInputs.BIC]?: string;\n [PaymentDetailsInputs.ACCOUNT_HOLDER]?: string;\n [PaymentDetailsInputs.ACCOUNT_HOLDER_ADDRESS]?: string;\n [PaymentDetailsInputs.BANK_NAME]?: string;\n [PaymentDetailsInputs.BANK_ADDRESS]?: string;\n [PaymentDetailsInputs.BANK_COUNTRY]?: string;\n [PaymentDetailsInputs.ACCOUNT_NUMBER]?: string;\n [PaymentDetailsInputs.NCC]?: string;\n [PaymentDetailsInputs.IFSC]?: string;\n [PaymentDetailsInputs.BIK]?: string;\n [PaymentDetailsInputs.CBD]?: string;\n [PaymentDetailsInputs.KPP]?: string;\n [PaymentDetailsInputs.INN]?: string;\n [PaymentDetailsInputs.PATRONYMIC_NAME]?: string;\n };\n [MultiStepFormSteps.SECOND_CATEGORY]?: {\n [SecondCategoryInput.SECOND_CATEGORY]: SecondCategoryOption;\n };\n [MultiStepFormSteps.EU_COMPENSATION]?: {\n [EuCompensationInputs.CLAIM_TYPE]: ClaimType;\n [EuCompensationInputs.EU_CLAIM_OPTION]: EUClaimOptions;\n [AdditionalExpensesInputs.OTHER_COST]?: boolean;\n [AdditionalExpensesInputs.INDIRECT_COST]?: string;\n [AdditionalExpensesInputs.INDIRECT_COST_SPECIFICATION]?: string;\n [AdditionalExpensesInputs.ATTACHMENTS]?: Attachment[];\n [AdditionalExpensesInputs.CLOTH_AND_COSMETIC_COST]?: string;\n [AdditionalExpensesInputs.RENTED_COST]?: string;\n [AdditionalExpensesInputs.HOTEL_COST]?: string;\n [AdditionalExpensesInputs.TRANSPORT_COST]?: string;\n [AdditionalExpensesInputs.MEAL_COST]?: string;\n [AdditionalExpensesInputs.PHONE_COST]?: string;\n careRate?: FeedbackRateOptions;\n reroutingRebookingRate?: FeedbackRateOptions;\n customerServiceAttitudeAndFriendlinessRate?: FeedbackRateOptions;\n reachabilityRate?: FeedbackRateOptions;\n digitalServicesRate?: FeedbackRateOptions;\n informationRate?: FeedbackRateOptions;\n additionalComments?: string;\n };\n [MultiStepFormSteps.ADDITIONAL_EXPENSES]?: {\n [AdditionalExpensesInputs.ADDITIONAL_EXPENSES]: string;\n [AdditionalExpensesInputs.OTHER_COST]: boolean;\n [AdditionalExpensesInputs.INDIRECT_COST]?: string;\n [AdditionalExpensesInputs.INDIRECT_COST_SPECIFICATION]?: string;\n [AdditionalExpensesInputs.ATTACHMENTS]?: Attachment[];\n [AdditionalExpensesInputs.CLOTH_AND_COSMETIC_COST]?: string;\n [AdditionalExpensesInputs.RENTED_COST]?: string;\n [AdditionalExpensesInputs.HOTEL_COST]?: string;\n [AdditionalExpensesInputs.TRANSPORT_COST]?: string;\n [AdditionalExpensesInputs.MEAL_COST]?: string;\n [AdditionalExpensesInputs.PHONE_COST]?: string;\n };\n [MultiStepFormSteps.BAG_TRACING]?: {\n [BagTracingInputs.HAS_WORLD_TRACER_NUMBER]: boolean;\n [BagTracingInputs.WORLD_TRACER_NUMBER]: string;\n };\n specialAssistance: SpecialAssistance;\n}\n\nexport interface BankAccount {\n accountHolder: string;\n accountHolderAddress: string;\n bankName: string;\n bankAddress: string;\n bankCountry: string;\n iban: string;\n bic: string;\n bik: string;\n ncc: string;\n correspondentBankData: string;\n patronymicName: string;\n ifsc: string;\n inn: string;\n kpp: string;\n}\n\ninterface BaseCosts {\n additionalExpenses: number;\n additionalExpensesDescription: string;\n}\n\nexport interface EuCompensationCosts extends BaseCosts {\n hotelCosts: number;\n mealCosts: number;\n transportationCosts: number;\n phoneCosts: number;\n standardCompensation: number;\n}\n\nexport interface DelayedBaggageCosts extends BaseCosts {\n bagItemCosts: number;\n bagRentalCosts: number;\n}\n\nexport type Rating = 1 | 2 | 3 | 4 | 5;\n\nexport interface FeedbackRating {\n name: string;\n rating: Rating;\n}\n\nexport interface CaseCategory {\n name: string;\n child: {\n name: string;\n children?: FeedbackRating[];\n };\n}\n\nexport interface FormCase {\n caseType: CaseType;\n caseOrigin: 'portal';\n country: string;\n language: string;\n freeTextFeedback: string;\n bookingReference?: string;\n worldTracerNumber?: string;\n flightDate?: string;\n flightNumber?: string;\n origin?: string;\n destination?: string;\n compensationType?: 'voucher' | 'cash';\n claimCompany?: CaseCompany;\n creator?: CaseCreator;\n customer: CaseCustomer;\n companions: CasePassengerDetails[];\n bankAccount?: BankAccount;\n euCompensationCosts?: EuCompensationCosts;\n delayedBaggageCosts?: DelayedBaggageCosts;\n specialAssistance?: SpecialAssistance;\n category: CaseCategory;\n}\n\nexport interface CasePostMessage {\n caseId: string;\n lastName: string;\n message: {\n content: string;\n attachmentIds?: string[];\n };\n}\n\nexport enum MessageCreator {\n CUSTOMER = 'customer',\n FINNAIR = 'finnair',\n}\n\nexport interface MessageAttachment {\n attachmentId: string;\n fileName: string;\n hash: string;\n}\n\nexport interface CaseGetMessage {\n content: string;\n creationDate: string;\n creator: MessageCreator;\n attachments: MessageAttachment[];\n}\n\nexport enum CaseStatus {\n NEW = 'new',\n HANDLING = 'handling',\n WAITING = 'waiting',\n HANDLED = 'handled',\n}\n\n// TODO: align with the real case model FormCase\nexport interface RetrieveCase extends FormCase {\n caseId: string;\n status: CaseStatus;\n creationDate: string;\n requestReason: string;\n caseSFId: string;\n messages: CaseGetMessage[];\n}\n\nexport interface CaseSubmissionData {\n case: FormCase;\n attachmentIds: string[];\n}\n\nexport interface CaseCustomer extends CasePassengerDetails {\n fPlusNumber: string;\n countryOfResidence: string;\n}\n\nexport type CaseCreator = CasePassengerDetails;\n\nexport interface CaseCompany {\n companyType: string;\n name: string;\n email: string;\n phone: string;\n reference?: string;\n}\n\nexport interface CasePassengerDetails {\n firstname: string;\n lastname: string;\n email?: string;\n phone?: string;\n}\n\nexport interface CaseAttachment {\n file: File;\n fileId?: string;\n status: FormStatus;\n error?: string;\n}\n\nexport interface MultiStepFormState extends AppState {\n readonly formSteps: MultiStepFormSteps[];\n}\n\nexport const MedaCategories = {\n /** Custom for meda **/\n wheelChairOrMobA: 'Wheelchair or other mobility aid',\n hearingImpaired: 'Hearing impaired',\n visuallyImpaired: 'Visually impaired',\n visuallyImpairedWithGuideDog: 'Visually impaired travelling with a dog',\n travelingWithServiceDog: 'Traveling with a service dog',\n pregnant: 'Pregnancy',\n medicalCondition: 'Medical condition',\n medicalEquipment: 'Medical equipment',\n other: 'Other condition',\n};\n\nexport const CategoryMapLevel1 = {\n [FormSubCategories.DELAYED_OR_CANCELLED]: 'Flight irregularities',\n [FormSubCategories.OVERBOOKING]: 'Overbooking/Downgrading',\n [FormSubCategories.DOWNGRADING]: 'Overbooking/Downgrading',\n [FormSubCategories.DELAYED_BAGGAGE]: 'Delayed baggage',\n [FormSubCategories.DAMAGED_BAGGAGE]: 'Damaged baggage',\n [FormSubCategories.BOOKINGS]: 'Sales',\n [FormSubCategories.AIRPORT_EXPERIENCE]: 'Ground experience',\n [FormSubCategories.ONBOARD_EXPERIENCE]: 'Inflight experience',\n [FormSubCategories.TRAVEL_EXTRAS]: 'Travel Extras',\n [FormSubCategories.SPECIAL_NEEDS]: 'Customers with special needs',\n [FormSubCategories.FINNAIR_PLUS]: 'Finnair Plus',\n ...MedaCategories,\n};\n\nexport const CategoryMapLevel2 = {\n [FormSubCategories.DELAYED_OR_CANCELLED]: 'Handling during irregularity',\n [FormSubCategories.OVERBOOKING]: 'Overbooking',\n [FormSubCategories.DOWNGRADING]: 'Downgrading',\n [BaggageOptions.BAGS]: 'Bags',\n [BaggageOptions.PRAMS_BABY]: 'Prams/baby equipment',\n [BaggageOptions.SPORT]: 'Sports equipment',\n [BaggageOptions.WHEELCHAIR]: 'Wheelchair and mobility aid',\n [BaggageOptions.SPECIAL_BAGGAGE]: 'Special baggage',\n [BaggageOptions.MISSING_ITEMS]: 'Missing items',\n [BookingOptions.TICKET_FARES_AND_RULES]: 'Ticket fares and rules',\n [BookingOptions.DIGITAL_SALES_SERVICES]: 'Digital sales services',\n [BookingOptions.CUSTOMER_SERVICE_BY_FINNAIR]: 'Customer service by Finnair',\n [BookingOptions.CUSTOMER_SERVICE_BY_OTHER]: 'Customer service by other suppliers',\n [BookingOptions.SCHEDULE_CHANGE]: 'Schedule change',\n [AirportExperienceOptions.ARRIVAL_SERVICE]: 'Arrival service',\n [AirportExperienceOptions.CHECK_IN]: 'Check-in',\n [AirportExperienceOptions.GATE_SERVICE]: 'Gate service',\n [AirportExperienceOptions.GATEWAY_SERVICES]: 'Gateway/Transfer desk services',\n [AirportExperienceOptions.LOUNGES]: 'Lounges',\n [AirportExperienceOptions.DIGITAL_GROUND_SERVICES]: 'Digital ground services',\n [AirportExperienceOptions.DENIED_ACCEPTANCE]: 'Denied acceptance on a flight (other than overbooking)',\n [AirportExperienceOptions.AUTHORITIES_AND_OTHER_SERVICES]: 'Authorities and other services at airport (not Finnair)',\n [AirportExperienceOptions.PERSONAL_INJURY]: 'Personal injury',\n [OnboardExperienceOptions.CREW]: 'Crew',\n [OnboardExperienceOptions.FOOD_AND_DRINK]: 'Food & Drink',\n [OnboardExperienceOptions.INFLIGHT_ENTERTAINMENT]: 'Inflight entertainment',\n [OnboardExperienceOptions.SEATS_AND_SEATING]: 'Seat & Seating',\n [OnboardExperienceOptions.INTERNET]: 'Internet',\n [OnboardExperienceOptions.CABIN_EXPERIENCE]: 'Cabin experience',\n [TravelExtrasOptions.SEATS]: 'Seats',\n [TravelExtrasOptions.MEALS]: 'Meals',\n [TravelExtrasOptions.BAGGAGE]: 'Baggage',\n [TravelExtrasOptions.UPGRADES]: 'Upgrades',\n [TravelExtrasOptions.WIFI]: 'Wifi',\n [TravelExtrasOptions.TREATS_AND_COMFORT_ITEMS]: 'Travel retail',\n [TravelExtrasOptions.ADVERTISING]: 'Advertising',\n [SpecialNeedsOptions.CUSTOMER_WITH_DISABILITY]: 'Customers with disabilities',\n [SpecialNeedsOptions.CUSTOMER_WITH_MEDICAL_CONDITION]: 'Medical condition',\n [SpecialNeedsOptions.ELDERLY_CUSTOMER]: 'Elderly customers',\n [SpecialNeedsOptions.TRAVELING_WITH_SMALL_CHILDREN]: 'Families with small children',\n [SpecialNeedsOptions.UNACCOMPANIED_MINOR]: 'Unaccompanied minors',\n [SpecialNeedsOptions.PET_IN_CABIN_OR_IN_HOLD]: 'Pet in cabin (PETC) or pet in hold (AVIH)',\n [FinnairPlusOptions.SERVICE]: 'Finnair Plus service',\n [FinnairPlusOptions.MEMBER_SHIP_BENEFIT]: 'Finnair Plus membership benefit',\n [FinnairPlusOptions.AWARDS]: 'Finnair Plus awards',\n [FinnairPlusOptions.MARKETING]: 'Finnair Plus marketing',\n [FinnairPlusOptions.RULES_AND_CONDITIONS]: 'Finnair Plus rules & conditions',\n};\n\nexport const CategoryMapLevel3 = {\n [OptionalFeedbackInputs.CARE]: 'Care (meals, hotel, phone calls)',\n [OptionalFeedbackInputs.REROUTING]: 'Rerouting/rebooking',\n [OptionalFeedbackInputs.CUSTOMER_SERVICE_ATTITUDE]: 'Customer service attitude and friendliness',\n [OptionalFeedbackInputs.REACHABILITY]: 'Reachability of customer services',\n [OptionalFeedbackInputs.DIGITAL_SERVICES]: 'Digital services',\n [OptionalFeedbackInputs.INFORMATION]: 'Information',\n [OptionalFeedbackInputs.CUSTOMER_COMMUNICATION]: 'Customer communication at airport',\n [OptionalFeedbackInputs.AVAILABILITY_OF_FARES]: 'Availability of fares',\n [OptionalFeedbackInputs.NO_SHOW_OR_RETURN_CANCELLED]: 'Return cancelled due first flight not used',\n [OptionalFeedbackInputs.FARE_RESTRICTIONS]: 'Fare restrictions',\n [OptionalFeedbackInputs.REFUND_POLICY]: 'Refund policy',\n [OptionalFeedbackInputs.WEBSITE_FUNCTIONALITY]: 'Website functionality',\n [OptionalFeedbackInputs.FINNAIR_APP]: 'Finnair app',\n [OptionalFeedbackInputs.CHAT]: 'Chat',\n [OptionalFeedbackInputs.SOCIAL_MEDIA]: 'Social media',\n [OptionalFeedbackInputs.WHATSAPP]: 'WhatsApp',\n [OptionalFeedbackInputs.REACHABILITY_OF_CONTACT_CENTER]: 'Reachability of contact center',\n [OptionalFeedbackInputs.CUSTOMER_SERVICE_SKILLS]: 'Customer service skills',\n [OptionalFeedbackInputs.TRAVEL_AGENCIES]: 'Travel agencies',\n [OptionalFeedbackInputs.OTHER_DISTRIBUTORS]: 'Other distributors',\n [OptionalFeedbackInputs.CHANGES_IN_TRAVEL_PLANS]: 'Changes in travel plans',\n [OptionalFeedbackInputs.CHANGES_NOT_INFORMED]: 'Changes not informed',\n [OptionalFeedbackInputs.LONG_BAGGAGE_DELIVERY_TIME]: 'Long baggage delivery time',\n [OptionalFeedbackInputs.INFORMATION_ANNOUNCEMENTS_SIGNAGE]: 'Information/announcements/signage',\n [OptionalFeedbackInputs.ARRIVAL_SERVICE_REACHABALITY_BY_PHONE]: 'Arrival service reachability by phone',\n [OptionalFeedbackInputs.EXCESS_BAGGAGE_CHARGE]: 'Excess baggage charge',\n [OptionalFeedbackInputs.PRE_PAID_SEATS]: 'Pre-paid seats',\n [OptionalFeedbackInputs.SEATING]: 'Seating',\n [OptionalFeedbackInputs.CHECK_IN_QUEUE]: 'Check-in queue',\n [OptionalFeedbackInputs.RECOGNITION_OF_TOP_TIER_PRIORITY_CUSTOMER]: 'Recognition of top tier/priority customer',\n [OptionalFeedbackInputs.FLUENCY_OF_BOARDING]: 'Fluency of boarding',\n [OptionalFeedbackInputs.CARRY_ON_BAGGAGE]: 'Carry-on baggage',\n [OptionalFeedbackInputs.REFUSED_ACCEPTANCE_AT_THE_BOARDING_GATE]: 'Refused acceptance at the boarding gate',\n [OptionalFeedbackInputs.MISSED_CONNECTING_FLIGHT]: 'Missed connecting flight',\n [OptionalFeedbackInputs.ACCESS_TO_LOUNGE]: 'Access to lounge',\n [OptionalFeedbackInputs.INTERIOR_APPEARANCE_CLEANLINESS]: 'Interior/appearance/cleanliness',\n [OptionalFeedbackInputs.MEAL_AND_BEVERAGE_SERVICE]: 'Meal and beverage service',\n [OptionalFeedbackInputs.INTERNET_CHECK_IN]: 'Internet check-in',\n [OptionalFeedbackInputs.KIOSK_CHECK_IN]: 'Kiosk check-in',\n [OptionalFeedbackInputs.SMS_CHECK_IN]: 'SMS check-in',\n [OptionalFeedbackInputs.INFO_ON_DIGITAL_CHANNEL]: 'Information on digital channel',\n [OptionalFeedbackInputs.TRAVEL_DOCUMENT_ISSUE]: 'Travel document issue',\n [OptionalFeedbackInputs.REFUSED_ACCEPTANCE_AT_CHECK_IN]: 'Refused acceptance at check-in',\n [OptionalFeedbackInputs.CUSTOMS]: 'Customs',\n [OptionalFeedbackInputs.PASSPORT_CONTROL]: 'Passport control',\n [OptionalFeedbackInputs.SECURITY_CHECKS]: 'Security checks',\n [OptionalFeedbackInputs.FACILITIES_OR_SIGNAGE_OR_SHOPS]: 'Facilities/signage/shops',\n [OptionalFeedbackInputs.FLY_RAIL_TRAIN_CONNECTION_IN_GERMANY]: 'Fly&Rail train connection (in Germany)',\n [OptionalFeedbackInputs.INJURY_HAPPENED_INSIDE_AIRPORT_TERMINAL]: 'Injury happened inside airport terminal',\n [OptionalFeedbackInputs.INJURY_HAPPENED_WHEN_BOARDING_EXITING_THE_AIRCRAFT]:\n 'Injury happened when boarding/exiting the aircraft',\n [OptionalFeedbackInputs.DAMAGE_SPILLAGE_CAUSED_TO_CLOTHING_OR_BELONGINGS]:\n 'Damage/spillage/injury caused to clothing/belongings/on person',\n [OptionalFeedbackInputs.PILOTS]: 'Pilots',\n [OptionalFeedbackInputs.COMPLIMENTARY_MEALS]: 'Complimentary meals',\n [OptionalFeedbackInputs.SPECIAL_MEALS]: 'Special meals',\n [OptionalFeedbackInputs.FOOD_AND_DRINK_BOUGHT_ONBOARD]: 'Food/drink bought onboard',\n [OptionalFeedbackInputs.FOOD_SAFETY]: 'Food safety',\n [OptionalFeedbackInputs.DEFECTED_WORKING_ONLY_PARTIALLY]: 'Defected/working only partially',\n [OptionalFeedbackInputs.SELECTION_OF_MOVIES_GAMES_MUSIC_NEWSPAPERS]:\n 'Selection of movies/ games/ music/ newspapers etc',\n [OptionalFeedbackInputs.DEFECTIVE_SEAT]: 'Defected seat',\n [OptionalFeedbackInputs.DEFECTIVE_TABLE_OR_READING_LIGHT_ETC]: 'Defective table/reading light etc.',\n [OptionalFeedbackInputs.INTERNET_NOT_WORKING]: 'Not functioning',\n [OptionalFeedbackInputs.CLEANLINESS_AND_HYGIENE]: 'Cleanliness/hygiene',\n [OptionalFeedbackInputs.HEATING_VENTILATION_NOISE_LIGHTS]: 'Heating/ventilation/noise/lights',\n [OptionalFeedbackInputs.AIRCRAFT_TYPE_CODE_SHARE]: 'Aircraft type/code share',\n [OptionalFeedbackInputs.HAND_BAGGAGE_ISSUES]: 'Hand baggage issues',\n [OptionalFeedbackInputs.DISTURBING_FELLOW_PASSENGER]: 'Disturbing fellow customer',\n [OptionalFeedbackInputs.AVAILABILITY]: 'Availability',\n [OptionalFeedbackInputs.SEAT_CHANGED]: 'Seat changed',\n [OptionalFeedbackInputs.BOOKING_PROCESS]: 'Booking process',\n [OptionalFeedbackInputs.PRICE]: 'Price',\n [OptionalFeedbackInputs.SELECTION]: 'Selection',\n [OptionalFeedbackInputs.MISSING_OR_CHANGED_MEAL]: 'Missing or changed',\n [OptionalFeedbackInputs.QUALITY]: 'Quality',\n [OptionalFeedbackInputs.WIFI_NOT_WORKING]: 'Wifi not working',\n [OptionalFeedbackInputs.ITEM_MISSING_OR_BROKEN]: 'Item missing or broken',\n [OptionalFeedbackInputs.INFLIGHT_PREORDER_SALES]: 'Inflight/preorder sales',\n [OptionalFeedbackInputs.BOOKING_EXPERIENCE]: 'Booking experience',\n [OptionalFeedbackInputs.AIRPORT_EXPERIENCE]: 'Airport experience',\n [OptionalFeedbackInputs.INFLIGHT_EXPERIENCE]: 'Inflight experience',\n [OptionalFeedbackInputs.DAMAGED_MOBILITY_AID]: 'Damaged mobility aid',\n [OptionalFeedbackInputs.DELAYED_MOBILITY_AID]: 'Delayed mobility aid',\n [OptionalFeedbackInputs.MOBILITY_AID_HANDLING]: 'Mobility aid handling',\n [OptionalFeedbackInputs.DELAYED_DELIVERY_OF_PET]: 'Delayed delivery of pet carrier (AVIH)',\n [OptionalFeedbackInputs.DAMAGED_PET_CARRIER]: 'Damaged pet carrier (AVIH)',\n [OptionalFeedbackInputs.WEB_PAGES_FUNCTIONALITY_INFO]: 'Web pages functionality/info',\n [OptionalFeedbackInputs.FUNCTIONALITY_OF_PROCEDURES]: 'Functionality of procedures',\n [OptionalFeedbackInputs.REACHABILITY_OF_SERVICE]: 'Reachability of service',\n [OptionalFeedbackInputs.TIER_MEMBER_BENEFITS]: 'Tier member benefits',\n [OptionalFeedbackInputs.BASIC_MEMBER_BENEFITS]: 'Basic member benefits',\n [OptionalFeedbackInputs.JUNIOR_PLUS_BENEFITS]: 'Junior plus benefits',\n [OptionalFeedbackInputs.UPGRADES]: 'Upgrade (all)',\n [OptionalFeedbackInputs.FLIGHT_AWARD_AVAILABILITY]: 'Flight award availability',\n [OptionalFeedbackInputs.FINNAIR_FLIGHT_AWARD]: 'Finnair flight award',\n [OptionalFeedbackInputs.PARTNER_FLIGHT_AWARD]: 'Partner flight award',\n [OptionalFeedbackInputs.NON_AIRLINE_AWARD]: 'Non-airline award',\n [OptionalFeedbackInputs.CAMPAIGN]: 'Campaign',\n [OptionalFeedbackInputs.EMAIL_NEWSLETTERS]: 'Email newsletters',\n [OptionalFeedbackInputs.PRINTED_MATERIAL]: 'Printed material',\n [OptionalFeedbackInputs.MEMBERSHIP_CARDS]: 'Membership cards',\n [OptionalFeedbackInputs.TIER_QUALIFICATION]: 'Tier qualification',\n [OptionalFeedbackInputs.EXPIRATION_OF_POINTS]: 'The expiration of the points',\n [OptionalFeedbackInputs.COMPARISON_TO_COMPETITOR_PROGRAM]: 'Comparison to competitor program',\n [OptionalFeedbackInputs.JOINING_FINNAIR_PLUS]: 'Joining Finnair Plus',\n};\n\nexport interface MultiStepFormStepLogic {\n nextStep: MultiStepFormSteps | undefined;\n currentStep: MultiStepFormSteps | undefined;\n}\n\nexport interface LinkAttachmentToCase {\n caseId: string;\n lastName: string;\n attachmentId: string;\n}\n\nexport interface LinkAttachmentToCaseData {\n attachmentIds: string[];\n caseId: string;\n lastName: string;\n}\n\nexport interface LinkAttachmentToCaseResponse {\n id: string;\n}\n\nexport interface UploadCaseAttachment {\n caseId: string;\n lastName: string;\n file: File;\n}\n","import { type HttpErrorResponse } from '@angular/common/http';\n\n/**\n * @example\n * ```json\n * {\n * \"headers\": {\n * \"lazyUpdate\": null\n * \"normalizedNames\": {},\n * },\n * \"status\": 428,\n * \"statusText\": \"OK\",\n * \"url\": \"https://finnair.com/d/api-url\",\n * \"ok\": false,\n * \"name\": \"HttpErrorResponse\",\n * \"message\": \"Http failure response for https://www.finnair.com/d/api-url: 428 OK\",\n * \"error\": {\n * \"branding_cust_url\": \"https://www.finnair.com/challenge/challenge.html\",\n * \"branding_type\": \"custom_branding\",\n * \"chlg_duration\": 30,\n * \"count\": 1,\n * \"cpu\": false,\n * \"difficulty\": 15000,\n * \"nonce\": \"5452a5ea9204ab279d57\",\n * \"provider\": \"crypto\",\n * \"sec-cp-challenge\": \"true\",\n * \"timeout\": 1000,\n * \"timestamp\": 1715158515,\n * \"token\": \"AAQAAAAJ_____\"\n * }\n * }\n * ```\n */\nexport interface AkamaiCryptoChallengeErrorResponse extends HttpErrorResponse {\n error: {\n branding_cust_url: string;\n branding_type: 'custom_branding';\n chlg_duration: number;\n count: number;\n cpu: false;\n difficulty: number;\n nonce: string;\n provider: 'crypto';\n 'sec-cp-challenge': string;\n timeout: number;\n timestamp: number;\n token: string;\n };\n}\n\nexport interface SpecialAssistanceResponseData {\n caseId: string;\n caseNumber: string;\n}\n\nexport interface RefundRequestResponseData {\n status: string;\n}\n\nexport interface PortalServicesMailerResponseData {\n returnValue: string;\n}\n\nexport interface CancellationCoverClaimResponseData {\n returnValue: string;\n}\n\nexport interface CertificatesForInsuranceCompanyResponseData {\n message: string;\n}\n\nexport interface FinnairPlusContactResponseData {\n returnValue: string;\n}\n\nexport interface ClaimMissingPartnerPointsResponseData {\n returnValue: string;\n}\n\nexport interface ClaimMissingAviosResponseData {\n returnValue: string;\n}\n\nexport interface LoggedInMissingPointsResponseData {\n errorCode?: LoggedInMissingPointsErrorCode;\n errorMessage?: string;\n}\n\n// Keys copied from current state of the back-end side\nexport enum LoggedInMissingPointsErrorCode {\n // GENERIC\n INTERNAL_ERROR = 'INTERNAL ERROR',\n ADN_PROXY_INTERNAL_ERROR = 'ADN PROXY INTERNAL ERROR',\n COUPON_NOT_MATCHING = 'COUPON NOT MATCHING',\n THIS_FREQUENT_FLYER_CARD_IS_NOT_RECOGNIZED = 'THIS FREQUENT FLYER CARD IS NOT RECOGNIZED',\n THIS_FREQUENT_FLYER_CARD_AND_PROGRAM_ARE_NOT_RECOGNIZED = 'THIS FREQUENT FLYER CARD AND PROGRAM ARE NOT RECOGNIZED',\n THIS_FREQUENT_FLYER_CARD_IS_NOT_RECOGNIZED_BUT_PROGRAM_CODE_IS_AY = 'THIS FREQUENT FLYER CARD IS NOT RECOGNIZED BUT PROGRAM CODE IS AY',\n PASSENGER_NOT_FOUND_FOR_THE_FLIGHT_NUMBER_ON_THE_REQUIRED_DATE = 'PASSENGER NOT FOUND FOR THE FLIGHT NUMBER ON THE REQUIRED DATE',\n CITY_PAIR_NOT_FOUND = 'CITY PAIR NOT FOUND',\n TICKET_NUMBER_NOT_FOUND = 'TICKET NUMBER NOT FOUND',\n BOOKING_CLASS_NOT_MATCHING = 'BOOKING CLASS NOT MATCHING',\n CABIN_CODE_NOT_MATCHING = 'CABIN CODE NOT MATCHING',\n ACCRUAL_PROCESS_HAS_BEEN_CONFIRMED_EARLIER = 'ACCRUAL PROCESS HAS BEEN CONFIRMED EARLIER',\n FLIGHT_IS_NOT_FOUND_FOR_THIS_CITY_PAIR_ON_THE_MENTIONED_DATE = '[Given flight] IS NOT FOUND FOR THIS CITY PAIR ON THE MENTIONED DATE',\n NO_FLIGHT_FOUND_FOR_THIS_CITY_PAIR_ON_THE_MENTIONED_DATE = 'NO FLIGHT FOUND FOR THIS CITY PAIR ON THE MENTIONED DATE',\n INVALID_PARAMETER_IN_QUERY = 'INVALID PARAMETER IN QUERY',\n FREQUENT_FLYER_PROGRAM_INVALID_FOR_CHARTER_FLIGHT = 'FREQUENT FLYER PROGRAM INVALID FOR CHARTER FLIGHT',\n FREQUENT_FLYER_PROGRAM_INVALID = 'FREQUENT FLYER PROGRAM INVALID',\n // SPECIFIC\n PASSENGER_IS_NO_SHOW_FOR_THIS_FLIGHT = 'PASSENGER IS NO SHOW FOR THIS FLIGHT/DATE',\n PASSENGER_DID_NOT_FLY_ON_THIS_FLIGHT = 'PASSENGER DID NOT FLY ON THIS FLIGHT/DATE',\n PASSENGER_IS_AN_ID_PASSENGER = 'PASSENGER IS AN ID PASSENGER',\n THIS_FLIGHT_IS_AN_ADHOC_FLIGHT = 'THIS FLIGHT IS AN ADHOC FLIGHT',\n THIS_FLIGHT_IS_A_CHARTER_FLIGHT = 'THIS FLIGHT IS A CHARTER FLIGHT',\n THIS_PASSENGER_USED_A_REDEMPTION_TICKET = 'THIS PASSENGER USED A REDEMPTION TICKET',\n THIS_FLIGHT_WAS_ALREADY_ACCRUED = 'THIS FLIGHT WAS ALREADY ACCRUED',\n THIS_FLIGHT_WAS_ALREADY_ACCRUED_FOR_ANOTHER_FREQUENT_FLYER_CARD = 'THIS FLIGHT WAS ALREADY ACCRUED FOR ANOTHER FREQUENT FLYER CARD',\n // eslint-disable-next-line quotes\n PASSENGERS_NAME_NOT_FOUND = `PASSENGER'S NAME NOT MATCHING`,\n MARKETING_CARRIER_IS_INVALID_FOR_LOYALTY = 'MARKETING CARRIER IS INVALID FOR LOYALTY',\n REQUEST_NOT_YET_ELIGIBLE = 'REQUEST NOT YET ELIGIBLE - PROCESSING DELAY NOT REACHED',\n REQUEST_NOT_ELIGIBLE_ANYMORE = 'REQUEST NOT ELIGIBLE ANYMORE',\n}\n\nexport const localizationKeyGenericError = 'SERVICE_FORMS.serviceForms.missingPoints.error.genericError';\n\nexport const loggedInMissingPointsErrorCodeToLocalizationKeyMap: { [key in LoggedInMissingPointsErrorCode]?: string } =\n {\n // GENERIC - should default to the genericError key.\n // SPECIFIC\n [LoggedInMissingPointsErrorCode.PASSENGER_IS_NO_SHOW_FOR_THIS_FLIGHT]:\n 'SERVICE_FORMS.serviceForms.missingPoints.error.passengerIsNoShowForThisFlightDate',\n [LoggedInMissingPointsErrorCode.PASSENGER_DID_NOT_FLY_ON_THIS_FLIGHT]:\n 'SERVICE_FORMS.serviceForms.missingPoints.error.passengerDidNotFlyOnThisFlightDate',\n [LoggedInMissingPointsErrorCode.PASSENGER_IS_AN_ID_PASSENGER]:\n 'SERVICE_FORMS.serviceForms.missingPoints.error.passengerIsAnIdPassenger',\n [LoggedInMissingPointsErrorCode.THIS_FLIGHT_IS_AN_ADHOC_FLIGHT]:\n 'SERVICE_FORMS.serviceForms.missingPoints.error.thisFlightIsAnAdhocFlight',\n [LoggedInMissingPointsErrorCode.THIS_FLIGHT_IS_A_CHARTER_FLIGHT]:\n 'SERVICE_FORMS.serviceForms.missingPoints.error.thisFlightIsACharterFlight',\n [LoggedInMissingPointsErrorCode.THIS_PASSENGER_USED_A_REDEMPTION_TICKET]:\n 'SERVICE_FORMS.serviceForms.missingPoints.error.thisPassengerUsedARedemptionTicket',\n [LoggedInMissingPointsErrorCode.THIS_FLIGHT_WAS_ALREADY_ACCRUED]:\n 'SERVICE_FORMS.serviceForms.missingPoints.error.thisFlightWasAlreadyAccrued',\n [LoggedInMissingPointsErrorCode.THIS_FLIGHT_WAS_ALREADY_ACCRUED_FOR_ANOTHER_FREQUENT_FLYER_CARD]:\n 'SERVICE_FORMS.serviceForms.missingPoints.error.thisFlightWasAlreadyAccruedForAnotherFrequentFlyerCard',\n [LoggedInMissingPointsErrorCode.PASSENGERS_NAME_NOT_FOUND]:\n 'SERVICE_FORMS.serviceForms.missingPoints.error.passengerNameNotFound',\n [LoggedInMissingPointsErrorCode.MARKETING_CARRIER_IS_INVALID_FOR_LOYALTY]:\n 'SERVICE_FORMS.serviceForms.missingPoints.error.marketingCarrierIsInvalidForLoyalty',\n [LoggedInMissingPointsErrorCode.REQUEST_NOT_YET_ELIGIBLE]:\n 'SERVICE_FORMS.serviceForms.missingPoints.error.requestNotYetEligibleProcessingDelayNotReached',\n [LoggedInMissingPointsErrorCode.REQUEST_NOT_ELIGIBLE_ANYMORE]:\n 'SERVICE_FORMS.serviceForms.missingPoints.error.requestNotEligibleAnymore',\n };\n","export enum RetrieveFields {\n RETRIEVE_FORM = 'retrieveForm',\n FAMILY_NAME = 'familyName',\n CASE_NUMBER = 'caseNumber',\n}\n\nexport interface RetrieveFormData {\n [RetrieveFields.RETRIEVE_FORM]: {\n [RetrieveFields.CASE_NUMBER]: string;\n [RetrieveFields.FAMILY_NAME]: string;\n };\n}\n","export enum SpecialAssistanceFormFields {\n ABLE_TO_SIT_WITH_KNEES_BENT = 'ableToSitWithKneesBent',\n ADD_MEDICAL_EQUIPMENT = 'addMedicalEquipment',\n ASSISTANT_NAME = 'assistantName',\n CAPAP_DEVICE_MODEL = 'CAPAPDeviceModel',\n DESTINATION = 'destination',\n LITHIUM_BATTERIES = 'lithiumBatteries',\n LITHIUM_BATTERY_1_POWER = 'lithiumBattery1Power',\n LITHIUM_BATTERY_2_POWER = 'lithiumBattery2Power',\n MEDA_ATTACHMENT = 'attachment',\n MEDICAL_CONDITION = 'medicalCondition',\n MEDICAL_EQUIPMENT = 'medicalEquipment',\n NEED_ASSISTANCE_WHERE = 'needAssistanceWhere',\n ORIGIN = 'origin',\n OTHER_MEDICAL_EQUIPMENT_MODEL = 'otherMedicalEquipmentModel',\n OTHER_MEDICAL_EQUIPMENT_TYPE = 'otherMedicalEquipmentType',\n OTHER_REASON = 'otherReasonForAssistance',\n OWN_WHEELCHAIR = 'ownWheelchair',\n PORTABLE_OXYGEN_CONCENTRATOR_MODEL = 'portableOxygenConcentratorModel',\n REASON_FOR_SPECIAL_ATTENTION = 'reasonForSpecialAttention',\n REASON_FOR_WHEELCHAIR = 'reasonForWheelchair',\n TRAVELING_WITH_ASSISTANT = 'travelingWithAssistant',\n WHEELCHAIR_DEPTH = 'wheelchairDepth',\n WHEELCHAIR_HEIGHT = 'wheelchairHeight',\n WHEELCHAIR_TYPE = 'wheelchairType',\n WHEELCHAIR_WEIGHT = 'wheelchairWeight',\n WHEELCHAIR_WIDTH = 'wheelchairWidth',\n OTHER_MOBILITY_AID_DESCRIPTION = 'otherMobilityAidDescription',\n}\n","import { Airline } from '@fcom/common/interfaces/airlines';\nimport { type Location } from '@fcom/core-api';\nimport { LocalDate } from '@fcom/core/utils';\nimport { type Attachment } from '@fcom/ui-components/components/interfaces';\n\nexport interface SpecialAssistanceSubmissionData {\n firstName: string;\n lastName: string;\n phoneNumber: string;\n email: string;\n cardNumber?: number;\n flightDate: LocalDate;\n flightNumber: string;\n origin: {\n locationCode: string;\n };\n destination: {\n locationCode: string;\n };\n reservationNumber: string;\n reasonForSpecialAttention?: string;\n ownWheelchair?: string;\n reasonForWheelchair?: string;\n ableToSitWithKneesBent?: string;\n needAssistanceWhere?: string;\n travelingWithAssistant?: string;\n medicalCondition?: string;\n medicalEquipment?: string;\n typeOfMedicalEquipment?: string;\n CAPAPDeviceModel?: string;\n portableOxygenConcentratorModel?: string;\n otherMedicalEquipmentType?: string;\n otherMedicalEquipmentModel?: string;\n addMedicalEquipment?: string;\n additionalInformation?: string;\n otherReasonForAssistance?: string;\n wheelchairType?: string;\n wheelchairDepth?: string;\n wheelchairHeight?: string;\n wheelchairWidth?: string;\n wheelchairWeight?: string;\n assistantName?: string;\n assistance?: string;\n lithiumBatteries?: string;\n lithiumBattery1Power?: string;\n lithiumBattery2Power?: string;\n otherMobilityAidDescription?: string;\n}\n\nexport interface RequestRefundSubmissionData extends RequestRefundBankingData {\n refundType: string;\n refundReason: string;\n firstName: string;\n lastName: string;\n phone: string;\n email: string;\n bookingReference: string;\n departureDate?: string;\n bookingDate?: string;\n cancellationDate?: string;\n additionalInformation?: string;\n refundItems: RefundItem[];\n useOnlyVoucher: boolean;\n flightNumber?: string;\n}\n\nexport interface RequestRefundBankingData {\n iban?: string;\n bic?: string;\n bankAccountHolder?: string;\n bankAccountHolderAddress?: string;\n bankName?: string;\n bankAddress?: string;\n correspondentBankData?: string;\n bik?: string;\n inn?: string;\n patronymicName?: string;\n kpp?: string;\n ncc?: string;\n ifsc?: string;\n}\n\nexport interface RefundItem {\n firstName: string;\n lastName: string;\n ticketNumber?: string;\n emdNumber?: string;\n refundItemType?: string;\n finnairPlusNumber?: string;\n preorderBagNumber?: string;\n}\n\nexport interface SpecialAssistanceAPISubmissionData {\n contact: {\n Language: string;\n firstName: string;\n lastName: string;\n emailAddress: string;\n phoneNumber?: string;\n memberNumber?: number;\n };\n flight: {\n departureDate: string;\n flightNumber: string;\n source: string;\n destination: string;\n reservationNumber: string;\n };\n request: {\n reasonForRequest: string;\n otherReasonForAssistance?: string;\n additionalInformation?: string;\n ownWheelchair?: string;\n assistance?: string;\n wheelchairType?: string;\n wheelchairDepth?: string;\n wheelchairHeight?: string;\n wheelchairWidth?: string;\n wheelchairWeight?: string;\n addMedicalEquipment?: string;\n travelingWithAssistant?: string;\n assistantName?: string;\n medicalEquipment?: string;\n typeOfMedicalEquipment?: string;\n typeOfCondition?: string;\n ableToSitWithKneesBent?: string;\n reasonForWheelchair?: string;\n portableOxygenConcentratorModel?: string;\n CAPAPDeviceModel?: string;\n otherMedicalEquipmentModel?: string;\n otherMedicalEquipmentType?: string;\n lithiumBatteries?: string;\n lithiumBattery1Power?: string;\n lithiumBattery2Power?: string;\n };\n}\n\nexport interface CaseAttachmentPayload {\n data: string;\n filename: string;\n origin: FileOrigin;\n salesforceCaseId?: string;\n caseId?: string;\n lastName?: string;\n}\n\nexport enum FileOrigin {\n CASE = 'case',\n FEED = 'feed',\n}\n\nexport interface CancellationCoverClaimFormData {\n bookingReference: string;\n ticketNumber: string;\n departureCity?: Location;\n destinationCity?: Location;\n departureDate?: LocalDate;\n returnDate?: LocalDate;\n firstName: string;\n familyName: string;\n email: string;\n country: string;\n phoneNumber?: string;\n refundFor: string;\n companions?: {\n firstName: string;\n familyName: string;\n }[];\n file: string;\n attachmentConsent: boolean;\n iban?: string;\n bic?: string;\n accountHolder?: string;\n bankName?: string;\n}\n\nexport interface BaggageTracingAPISubmissionData {\n '01___Reference_number': string;\n '02___First_name': string;\n '03___Last_name': string;\n '04___Home_address': string;\n '05___Email': string;\n '06___Phone_number': string;\n '07___Mobile_number': string;\n '08___Temporary_address'?: string;\n '09___Temporary_address_valid_from'?: string;\n '10___Temporary_address_valid_to'?: string;\n '11___Plus_number'?: string;\n '12___Finnair_plus_tier': string;\n '13___Flight_1_from'?: string;\n '13___Flight_1_to'?: string;\n '13___Flight_1'?: string;\n '13___Flight_1_date'?: string;\n '13___Flight_2_from'?: string;\n '13___Flight_2_to'?: string;\n '13___Flight_2'?: string;\n '13___Flight_2_date'?: string;\n '13___Flight_3_from'?: string;\n '13___Flight_3_to'?: string;\n '13___Flight_3'?: string;\n '13___Flight_3_date'?: string;\n '13___Flight_4_from'?: string;\n '13___Flight_4_to'?: string;\n '13___Flight_4'?: string;\n '13___Flight_4_date'?: string;\n '14___Baggage_last_seen': string;\n '15___Number_of_pieces_checked': number;\n '16___Baggage_Identification_Tag_numbers': string;\n '17___When_and_where_loss_reported': string;\n '18___Baggage_insurance_policy_number': string;\n '19___Insurance_company_name_and_address': string;\n '20___Anything_particular_at_check_in': string;\n '21___Colour': string;\n '22___Brand'?: string;\n '23___Type_of_bag'?: string;\n '24___Bag_was'?: string;\n '25___Bag_had_zipper': string;\n '26___Bag_had_lock': string;\n '27___Bag_had_combination_lock': string;\n '28___Lock_number_combination': string;\n '30___Bag_had_wheels': string;\n '32___Bag_had_retractable_handle': string;\n '33___Baggage_name_tag_description': string;\n '34___Baggage_identifiable_features': string;\n '35___Item_1_quantity'?: string;\n '35___Item_1'?: string;\n '35___Item_1_description'?: string;\n '35___Item_1_belongs_to'?: BaggageTracingItemOwnership;\n '37___Item_2_quantity'?: string;\n '37___Item_2'?: string;\n '37___Item_2_description'?: string;\n '37___Item_2_belongs_to'?: BaggageTracingItemOwnership;\n '38___Item_3_quantity'?: string;\n '38___Item_3'?: string;\n '38___Item_3_description'?: string;\n '38___Item_3_belongs_to'?: BaggageTracingItemOwnership;\n '39___Item_4_quantity'?: string;\n '39___Item_4'?: string;\n '39___Item_4_description'?: string;\n '39___Item_4_belongs_to'?: BaggageTracingItemOwnership;\n '40___Item_5_quantity'?: string;\n '40___Item_5'?: string;\n '40___Item_5_description'?: string;\n '40___Item_5_belongs_to'?: BaggageTracingItemOwnership;\n '41___Item_6_quantity'?: string;\n '41___Item_6'?: string;\n '41___Item_6_description'?: string;\n '41___Item_6_belongs_to'?: BaggageTracingItemOwnership;\n '50___Items_to_identify_baggage'?: string;\n __addressKey: string;\n __messageSubject: string;\n __confirmationTo: string;\n __emailType: string;\n}\n/* tslint:enable */\n\nexport type BaggageTracingItemOwnership = 'MALE' | 'FEMALE' | 'CHILD';\n\nexport interface BaggageTracingSubmissionData {\n baggageReferenceNumber: string;\n firstName: string;\n lastName: string;\n phonePrefix: string;\n phoneNumber: string;\n email: string;\n homeAddress: string;\n temporaryAddress?: string;\n temporaryAddressValidFrom?: LocalDate;\n temporaryAddressValidTo?: LocalDate;\n cardNumber?: string;\n finnairPlusTier?: string;\n itenerary: BaggageTracingItenerary[];\n baggageLastSeen: string;\n numberOfPiecesChecked: number;\n baggageIdentificationTagNumbers: string;\n whenAndWhereLossReported: string;\n baggageInsurancePolicyNumber: string;\n insuranceCompanyNameAndAddress: string;\n anythingParticularAtCheckIn: string;\n color: string;\n brand?: string;\n typeOfBag?: string;\n bagWasHard?: string;\n bagOptions?: boolean[];\n combinationLockCode?: string;\n baggageNameTagDescription: string;\n baggageIdentifiableFeatures: string;\n bagItems: BaggageTracingBag[];\n itemsToIdentifyBaggage: string;\n}\n\nexport interface BaggageTracingItenerary {\n destination: string;\n origin: string;\n flightDate: LocalDate;\n flightNumber: string;\n}\n\nexport interface BaggageTracingBag {\n itemQuantity: number;\n itemName: string;\n itemDescription: string;\n itemBelongsTo: BaggageTracingItemOwnership;\n}\n\nexport interface LoggedInMissingPointsSubmissionData {\n airline: string;\n destinationAirport?: Location;\n bookingClassSold?: string;\n originAirport?: Location;\n flightDate?: LocalDate;\n flightNumber?: string;\n sequenceNumber?: string;\n ticketNumber: string;\n}\n\nexport interface LoggedOutMissingPointsSubmissionData {\n passengerName: string;\n memberNumber: string;\n airline: Airline;\n ticketNumber?: string;\n flightFrom: Location;\n flightTo: Location;\n departureDate: LocalDate;\n returnDate?: LocalDate;\n flightNumbers: { flightNumber: string }[];\n companions?: {\n companionName: string;\n companionMemberNumber: string;\n }[];\n message?: string;\n email: string;\n phone: string;\n}\n\nexport enum ClaimMissingPointsFormOrigin {\n FROM_FLIGHTS = 'fromFlights',\n FROM_PARTNERS = 'fromPartners',\n}\n\nexport interface ClaimPartnerMissingAviosSubmissionData {\n claimMissingPointsForm: ClaimMissingPointsFormOrigin;\n passengerName?: string;\n memberNumber?: string;\n message?: string;\n email?: string;\n attachment?: string;\n attachmentName?: string;\n locale?: string;\n}\n\nexport interface ClaimFlightsMissingAviosFormData {\n passengerName?: string;\n memberNumber?: string;\n airline?: Airline;\n ticketNumber?: string;\n bookingClass?: string;\n flightFrom?: Location;\n flightTo?: Location;\n departureDate?: LocalDate;\n returnDate?: LocalDate;\n flightNumbers?: { flightNumber: string }[];\n companions?: {\n companionName: string;\n companionMemberNumber: string;\n }[];\n message?: string;\n email?: string;\n phone?: string;\n attachment?: Attachment | Attachment[];\n}\n\nexport interface ClaimFlightsMissingAviosSubmissionData {\n claimMissingPointsForm: ClaimMissingPointsFormOrigin;\n airline?: Airline;\n ticketNumber?: string;\n memberNumber?: string;\n passengerName?: string;\n bookingClass?: string;\n flightDetails?: ClaimMissingAviosFlightDetailSubmissionData;\n message?: string;\n email?: string;\n phone?: string;\n companions?: {\n passengerName: string;\n memberNumber: string;\n }[];\n attachment?: string;\n attachmentName?: string;\n locale?: string;\n}\nexport interface ClaimMissingAviosFlightDetailSubmissionData {\n ticketNumber?: string;\n bookingClass?: string;\n flightFrom: string;\n flightTo: string;\n departureDate: string;\n returnDate?: string;\n flightNumbers: string[];\n}\n\nexport enum CancellationCoverClaimFor {\n DEPARTURE_AND_RETURN_FLIGHTS = 'departure and return flights',\n RETURN_FLIGHTS = 'return flights',\n}\n\nexport interface CancellationCoverClaimSubmissionData {\n bookingReference: string;\n ticketNumber: string;\n departureCity?: string;\n destinationCity?: string;\n departureDate?: string;\n returnDate?: string;\n firstName: string;\n familyName: string;\n email: string;\n country: string;\n phone?: string;\n refundFor: CancellationCoverClaimFor;\n companions?: {\n firstName: string;\n familyName: string;\n }[];\n attachment: string;\n attachmentConsent: string;\n attachmentName: string;\n iban?: string;\n bic?: string;\n accountHolder?: string;\n bankName?: string;\n locale?: string;\n}\n","import { FormArray, FormControl, FormGroup } from '@angular/forms';\n\nimport { FormValue } from '@fcom/service-forms/interfaces';\n\nexport enum RefundFormPurchaseChannels {\n FINNAIR = 'finnair',\n OTHER = 'other',\n}\n\nexport enum RefundFormRefundReasons {\n FLIGHT_CANCELLED_BY_FINNAIR = 'flightCancelledByFinnair',\n CANCELLED_WITHIN_24_HOURS = 'flightCancelledWithin24Hours',\n EXTRA_NOT_DELIVERED = 'extraNotDelivered',\n CHANGED_FLIGHT_OR_SEAT = 'changedFlightOrSeat',\n CANCELLED_BY_TICKET_RULES = 'ticketAllowsCancellation',\n FAULTY_PRODUCT = 'faultyProduct',\n BEST_BEFORE_EXPIRE = 'bestBeforeExpire',\n WRONG_PRODUCT = 'wrongProduct',\n CANCELLED_MYFLIGHT = 'cancelledMyFlight',\n ORDER_NOT_DELIVERED = 'orderNotDelivered',\n}\n\nexport enum RefundPaymentMethods {\n MONEY_BACK = 'moneyBack',\n GIFT_VOUCHER = 'giftVoucher',\n}\n\nexport enum RefundTypes {\n FLIGHT = 'flight',\n EXTRAS = 'extras',\n FLIGHT_AND_EXTRAS = 'flightAndExtras',\n}\n\nexport enum RefundPaymentTypes {\n ONLINE_BANK = 'onlineBank',\n OTHER = 'other',\n}\n\nexport enum RefundFormOnlineBankFields {\n IBAN = 'iban',\n ACCOUNT_NUMBER = 'accountNumber',\n BIC = 'bic',\n ACCOUNT_HOLDER = 'accountHolder',\n ACCOUNT_HOLDER_ADDRESS = 'accountHolderAddress',\n BANK_NAME = 'bankName',\n BANK_ADDRESS = 'bankAddress',\n BANK_COUNTRY = 'country',\n NCC = 'ncc',\n IFSC = 'ifsc',\n BIK = 'bik',\n CBD = 'correspondentBankData',\n KPP = 'kpp',\n INN = 'inn',\n PATRONYMIC_NAME = 'patronymicName',\n}\n\nexport enum RefundFormTravelExtraTypes {\n BAGGAGE = 'baggage',\n INTERNET = 'internet',\n LOUNGE = 'lounge',\n COMFORT_ITEMS = 'comfortItems',\n MEALS = 'meal',\n SEAT = 'seat',\n SEAT_AND_MEAL = 'seatAndMeal',\n}\n\nexport enum RefundFormCountries {\n FINLAND = 'FI',\n ESTONIA = 'EE',\n SWEDEN = 'SE',\n UK = 'GB',\n RUSSIA = 'RU',\n AUSTRALIA = 'AU',\n CANADA = 'CA',\n USA = 'US',\n INDIA = 'IN',\n AUSTRIA = 'AT',\n BELGIUM = 'BE',\n CZECH_REPUBLIC = 'CZ',\n DENMARK = 'DK',\n FRANCE = 'FR',\n GERMANY = 'DE',\n HUNGARY = 'HU',\n ICELAND = 'IS',\n IRELAND = 'IE',\n ITALY = 'IT',\n LATVIA = 'LV',\n LITHUANIA = 'LT',\n NETHERLANDS = 'NL',\n NORWAY = 'NO',\n POLAND = 'PL',\n PORTUGAL = 'PT',\n SPAIN = 'ES',\n SWITZERLAND = 'CH',\n CHINA = 'CN',\n HONGKONG = 'HK',\n ISRAEL = 'IL',\n JAPAN = 'JP',\n KOREA = 'KR',\n SINGAPORE = 'SG',\n THAILAND = 'TH',\n OTHER_COUNTRIES = 'OTHER',\n}\n\nexport const OnlineBankFields = [\n RefundFormOnlineBankFields.IBAN,\n RefundFormOnlineBankFields.BIC,\n RefundFormOnlineBankFields.BANK_NAME,\n RefundFormOnlineBankFields.BANK_ADDRESS,\n RefundFormOnlineBankFields.ACCOUNT_HOLDER,\n RefundFormOnlineBankFields.ACCOUNT_HOLDER_ADDRESS,\n RefundFormOnlineBankFields.ACCOUNT_NUMBER,\n RefundFormOnlineBankFields.NCC,\n RefundFormOnlineBankFields.IFSC,\n RefundFormOnlineBankFields.BIK,\n RefundFormOnlineBankFields.CBD,\n RefundFormOnlineBankFields.KPP,\n RefundFormOnlineBankFields.INN,\n RefundFormOnlineBankFields.PATRONYMIC_NAME,\n];\n\nexport const IbanCountries = [\n RefundFormCountries.FINLAND,\n RefundFormCountries.ESTONIA,\n RefundFormCountries.SWEDEN,\n RefundFormCountries.UK,\n RefundFormCountries.AUSTRIA,\n RefundFormCountries.BELGIUM,\n RefundFormCountries.CZECH_REPUBLIC,\n RefundFormCountries.DENMARK,\n RefundFormCountries.FRANCE,\n RefundFormCountries.GERMANY,\n RefundFormCountries.HUNGARY,\n RefundFormCountries.ICELAND,\n RefundFormCountries.IRELAND,\n RefundFormCountries.ITALY,\n RefundFormCountries.LATVIA,\n RefundFormCountries.LITHUANIA,\n RefundFormCountries.NETHERLANDS,\n RefundFormCountries.NORWAY,\n RefundFormCountries.POLAND,\n RefundFormCountries.PORTUGAL,\n RefundFormCountries.SPAIN,\n RefundFormCountries.SWITZERLAND,\n RefundFormCountries.ISRAEL,\n];\n\nexport const EnabledOnlineBankFields = [\n {\n name: RefundFormOnlineBankFields.IBAN,\n enabledCountries: IbanCountries,\n },\n {\n name: RefundFormOnlineBankFields.ACCOUNT_NUMBER,\n enabledCountries: [\n RefundFormCountries.RUSSIA,\n RefundFormCountries.AUSTRALIA,\n RefundFormCountries.CANADA,\n RefundFormCountries.USA,\n RefundFormCountries.INDIA,\n RefundFormCountries.CHINA,\n RefundFormCountries.HONGKONG,\n RefundFormCountries.JAPAN,\n RefundFormCountries.KOREA,\n RefundFormCountries.SINGAPORE,\n RefundFormCountries.THAILAND,\n RefundFormCountries.OTHER_COUNTRIES,\n ],\n },\n {\n name: RefundFormOnlineBankFields.BIC,\n enabledCountries: [\n RefundFormCountries.AUSTRALIA,\n RefundFormCountries.CANADA,\n RefundFormCountries.USA,\n RefundFormCountries.UK,\n RefundFormCountries.RUSSIA,\n RefundFormCountries.CHINA,\n RefundFormCountries.HONGKONG,\n RefundFormCountries.ISRAEL,\n RefundFormCountries.JAPAN,\n RefundFormCountries.KOREA,\n RefundFormCountries.SINGAPORE,\n RefundFormCountries.THAILAND,\n RefundFormCountries.OTHER_COUNTRIES,\n ],\n },\n {\n name: RefundFormOnlineBankFields.ACCOUNT_HOLDER,\n enabledCountries: ['ALL'],\n },\n {\n name: RefundFormOnlineBankFields.ACCOUNT_HOLDER_ADDRESS,\n enabledCountries: [\n RefundFormCountries.RUSSIA,\n RefundFormCountries.AUSTRALIA,\n RefundFormCountries.CANADA,\n RefundFormCountries.USA,\n RefundFormCountries.INDIA,\n RefundFormCountries.CHINA,\n RefundFormCountries.HONGKONG,\n RefundFormCountries.ISRAEL,\n RefundFormCountries.JAPAN,\n RefundFormCountries.KOREA,\n RefundFormCountries.SINGAPORE,\n RefundFormCountries.THAILAND,\n RefundFormCountries.OTHER_COUNTRIES,\n ],\n },\n {\n name: RefundFormOnlineBankFields.BANK_NAME,\n enabledCountries: [\n RefundFormCountries.RUSSIA,\n RefundFormCountries.AUSTRALIA,\n RefundFormCountries.CANADA,\n RefundFormCountries.USA,\n RefundFormCountries.INDIA,\n RefundFormCountries.CHINA,\n RefundFormCountries.HONGKONG,\n RefundFormCountries.ISRAEL,\n RefundFormCountries.JAPAN,\n RefundFormCountries.KOREA,\n RefundFormCountries.SINGAPORE,\n RefundFormCountries.THAILAND,\n RefundFormCountries.OTHER_COUNTRIES,\n ],\n },\n {\n name: RefundFormOnlineBankFields.BANK_ADDRESS,\n enabledCountries: [\n RefundFormCountries.RUSSIA,\n RefundFormCountries.AUSTRALIA,\n RefundFormCountries.CANADA,\n RefundFormCountries.USA,\n RefundFormCountries.INDIA,\n RefundFormCountries.CHINA,\n RefundFormCountries.HONGKONG,\n RefundFormCountries.ISRAEL,\n RefundFormCountries.JAPAN,\n RefundFormCountries.KOREA,\n RefundFormCountries.SINGAPORE,\n RefundFormCountries.THAILAND,\n RefundFormCountries.OTHER_COUNTRIES,\n ],\n },\n {\n name: RefundFormOnlineBankFields.NCC,\n enabledCountries: [RefundFormCountries.AUSTRALIA, RefundFormCountries.USA, RefundFormCountries.CANADA],\n },\n {\n name: RefundFormOnlineBankFields.IFSC,\n enabledCountries: [RefundFormCountries.INDIA],\n },\n {\n name: RefundFormOnlineBankFields.BIK,\n enabledCountries: [RefundFormCountries.RUSSIA],\n },\n {\n name: RefundFormOnlineBankFields.CBD,\n enabledCountries: [RefundFormCountries.RUSSIA],\n },\n {\n name: RefundFormOnlineBankFields.KPP,\n enabledCountries: [RefundFormCountries.RUSSIA],\n },\n {\n name: RefundFormOnlineBankFields.INN,\n enabledCountries: [RefundFormCountries.RUSSIA],\n },\n {\n name: RefundFormOnlineBankFields.PATRONYMIC_NAME,\n enabledCountries: [RefundFormCountries.RUSSIA],\n },\n];\n\nexport type RefundForm = {\n purchaseChannel: FormControl;\n refundType: FormControl;\n refundReason: FormControl;\n reservationNumber: FormControl;\n flightNumber: FormControl;\n flightDate: FormControl;\n bookingDate: FormControl;\n cancellationDate: FormControl;\n phoneNumber: FormControl;\n email: FormControl;\n passengers: FormArray>;\n paymentMethod: FormControl;\n paymentType: FormControl;\n iban: FormControl;\n bic: FormControl;\n accountHolder: FormControl;\n accountHolderAddress: FormControl;\n bankName: FormControl;\n bankAddress: FormControl;\n additionalInformation: FormControl;\n country: FormControl;\n accountNumber: FormControl;\n ncc: FormControl;\n ifsc: FormControl;\n bik: FormControl;\n correspondentBankData: FormControl;\n kpp: FormControl;\n inn: FormControl;\n patronymicName: FormControl;\n};\n\nexport type RefundFormPassengers = {\n firstname: FormControl;\n lastname: FormControl;\n finnairPlusNumber: FormControl;\n ticketNumber: FormControl;\n travelExtras: FormArray>;\n preorderBagNumber: FormControl;\n};\n\nexport type RefundFormPassengersTravelExtras = {\n emdNumber: FormControl;\n refundItemType: FormControl;\n};\n\nexport type RefundFormData = FormValue>;\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http';\n\nimport { Store } from '@ngrx/store';\nimport { catchError, Observable, tap, throwError } from 'rxjs';\n\nimport { ConfigService, SentryLogger } from '@fcom/core';\nimport { GtmService } from '@fcom/common/gtm';\nimport { ElementActions, ElementTypes, GaContext } from '@fcom/common';\n\nimport { RefundsState, RefundsStatus } from '../interfaces/store.interface';\nimport { setRefunds } from '../store/actions/refunds.actions';\nimport { RefundCase } from '../interfaces/refunds.interface';\n\n@Injectable()\nexport class RefundsService {\n constructor(\n private configService: ConfigService,\n private http: HttpClient,\n private sentryLogger: SentryLogger,\n private gtmService: GtmService,\n private store$: Store\n ) {}\n\n fetchRefunds(recLoc: string, lastName: string): Observable {\n const params: HttpParams = new HttpParams().set('recLoc', recLoc).set('lastName', lastName);\n this.store$.dispatch(setRefunds({ refunds: [], status: RefundsStatus.LOADING }));\n const { apiUrl, keyId } = this.configService.cfg.serviceForm.customerRefunds;\n return this.http\n .get(`${apiUrl}/refunds`, {\n headers: { 'x-api-key': keyId },\n params,\n })\n .pipe(\n tap((data: RefundCase[]) => {\n this.reportFetchResult('success');\n this.store$.dispatch(setRefunds({ refunds: data, status: RefundsStatus.OK }));\n }),\n catchError((error: unknown) => {\n const err = error instanceof HttpErrorResponse ? error : ({ status: 503 } as HttpErrorResponse);\n this.reportFetchResult('error', err.status);\n this.sentryLogger.error(`Failed to fetch refunds with status ${err.status}`, err);\n this.store$.dispatch(setRefunds({ refunds: [], status: RefundsStatus.ERROR }));\n return throwError(() => error);\n })\n );\n }\n\n reportFetchResult(result: 'success' | 'error', status = 200): void {\n this.gtmService.trackElement(\n `refunds-checker-form-${result}-${status}`,\n GaContext.REFUNDS,\n ElementTypes.FORM,\n undefined,\n ElementActions.SUBMIT\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { StoreModule } from '@ngrx/store';\n\nimport { StorageService } from '@fcom/core';\n\nimport { REFUNDS_FEATURE_KEY } from './constants';\nimport { reducer } from './store/reducers';\n\n@NgModule({\n imports: [CommonModule, StoreModule.forFeature(REFUNDS_FEATURE_KEY, reducer)],\n providers: [StorageService],\n declarations: [],\n exports: [],\n})\nexport class RefundsCommonModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\n\nimport { ComponentsModule, DirectiveModule, PhonePrefixService, PipesModule } from '@fcom/common';\nimport { GtmModule } from '@fcom/common/gtm';\nimport { LoginModule } from '@fcom/common/login';\nimport { CorporateService } from '@fcom/common/services/corporate/corporate.service';\nimport { RefundsCommonModule } from '@fcom/refunds-common/refunds-common.module';\nimport { RefundsService } from '@fcom/refunds-common/services/refunds.service';\nimport { CommonServiceFormsModule } from '@fcom/service-forms/components/common/common-service-forms.module';\nimport { ServiceFormsModule } from '@fcom/service-forms/service-forms.module';\nimport { UiComponentsModule } from '@fcom/ui-components';\nimport { UiTranslateModule } from '@fcom/ui-translate';\n\nimport {\n BaggageTracingFormComponent,\n CancellationCoverClaimFormComponent,\n CaseAttachmentsFormComponent,\n CertificatesForInsuranceCompanyFormComponent,\n ClaimMissingPartnerPointsFormComponent,\n ClaimMissingPointsFormComponent,\n CorporateContactFormComponent,\n ETicketReceiptFormComponent,\n FormBuilderComponent,\n GiftCardInformationFormComponent,\n JoinCorporateFormComponent,\n LoggedInMissingPointsFormComponent,\n LoggedOutMissingPointsFormComponent,\n RefundFormComponent,\n RefundStatusCheckerFormComponent,\n SafDownloadFormComponent,\n SpecialAssistanceFormComponent,\n SpecialAssistanceWizardComponent,\n VatReceiptFormComponent,\n} from './components';\nimport { BaggageTracingService } from './services/baggage-tracing.service';\nimport { ClaimOrFeedbackService } from './services/claim-or-feedback.service';\nimport { GiftCardService } from './services/gift-card.service';\nimport { MissingPointsService } from './services/missing-points.service';\nimport { SubmitService } from './services/submit.service';\n\n@NgModule({\n imports: [\n CommonModule,\n ComponentsModule,\n DirectiveModule,\n GtmModule,\n PipesModule,\n ReactiveFormsModule.withConfig({\n callSetDisabledState: 'whenDisabledForLegacyCode',\n }),\n CommonServiceFormsModule,\n UiComponentsModule,\n UiTranslateModule,\n ServiceFormsModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatAutocompleteModule,\n RefundsCommonModule,\n LoginModule,\n ],\n declarations: [\n BaggageTracingFormComponent,\n CancellationCoverClaimFormComponent,\n CaseAttachmentsFormComponent,\n CertificatesForInsuranceCompanyFormComponent,\n ClaimMissingPartnerPointsFormComponent,\n ClaimMissingPointsFormComponent,\n CorporateContactFormComponent,\n ETicketReceiptFormComponent,\n FormBuilderComponent,\n GiftCardInformationFormComponent,\n JoinCorporateFormComponent,\n LoggedInMissingPointsFormComponent,\n LoggedOutMissingPointsFormComponent,\n RefundFormComponent,\n RefundStatusCheckerFormComponent,\n SpecialAssistanceFormComponent,\n SpecialAssistanceWizardComponent,\n VatReceiptFormComponent,\n SafDownloadFormComponent,\n ],\n exports: [\n BaggageTracingFormComponent,\n CancellationCoverClaimFormComponent,\n CaseAttachmentsFormComponent,\n CertificatesForInsuranceCompanyFormComponent,\n ClaimMissingPartnerPointsFormComponent,\n ClaimMissingPointsFormComponent,\n ETicketReceiptFormComponent,\n FormBuilderComponent,\n GiftCardInformationFormComponent,\n LoggedInMissingPointsFormComponent,\n LoggedOutMissingPointsFormComponent,\n RefundFormComponent,\n RefundStatusCheckerFormComponent,\n SpecialAssistanceFormComponent,\n SpecialAssistanceWizardComponent,\n VatReceiptFormComponent,\n SafDownloadFormComponent,\n ],\n providers: [\n BaggageTracingService,\n ClaimOrFeedbackService,\n CorporateService,\n CorporateService,\n GiftCardService,\n MissingPointsService,\n PhonePrefixService,\n RefundsService,\n SubmitService,\n ],\n})\nexport class ServiceFormsLazyModule {}\n","import { createReducer, on } from '@ngrx/store';\n\nimport { RefundsState, RefundsStatus } from '../../interfaces/store.interface';\nimport { RefundsActions } from '../actions';\n\nexport const initialState: RefundsState = Object.seal({ refunds: [], status: RefundsStatus.INITIAL });\n\nconst refundsReducer = createReducer(\n initialState,\n on(RefundsActions.setRefunds, (state, { refunds, status }) => ({\n ...state,\n refunds: [...refunds],\n status: status,\n })),\n on(RefundsActions.resetRefunds, () => initialState)\n);\n\nexport function reducer(state: RefundsState, action: RefundsActions.RefundsActionsUnion): RefundsState {\n return refundsReducer(state, action);\n}\n","import { ActionReducer } from '@ngrx/store';\n\nimport * as refunds from '../reducers/refunds.reducer';\nimport { RefundsState } from '../../interfaces/store.interface';\n\nexport const reducer: ActionReducer = refunds.reducer;\n","import { HttpClient, type HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { Store } from '@ngrx/store';\nimport { type Observable, throwError } from 'rxjs';\nimport { catchError, switchMap, take } from 'rxjs/operators';\n\nimport { Airline } from '@fcom/common/interfaces/airlines';\nimport { fileToBase64 } from '@fcom/common/utils/form-utils';\nimport { type AppState, ConfigService, SentryLogger } from '@fcom/core';\nimport { loginToken } from '@fcom/core/selectors';\nimport { formatFinnairPlusCardNumber } from '@fcom/core/utils';\nimport { type Attachment } from '@fcom/ui-components/components/interfaces';\nimport { LanguageService } from '@fcom/ui-translate';\n\nimport {\n ClaimFlightsMissingAviosFormData,\n ClaimFlightsMissingAviosSubmissionData,\n ClaimMissingAviosResponseData,\n ClaimMissingPartnerPointsFormData,\n ClaimMissingPartnerPointsFormField,\n ClaimMissingPointsFormOrigin,\n ClaimPartnerMissingAviosSubmissionData,\n LoggedInMissingPointsErrorCode,\n LoggedInMissingPointsFormField,\n LoggedInMissingPointsResponseData,\n LoggedInMissingPointsSubmissionData,\n LoggedOutMissingPointsFormField,\n LoggedOutMissingPointsSubmissionData,\n PortalServicesMailerResponseData,\n} from '../interfaces';\nimport { SubmitService } from '../services/submit.service';\n\ntype HttpPostOptions = Parameters[2];\n\n@Injectable()\nexport class MissingPointsService {\n constructor(\n private http: HttpClient,\n private configService: ConfigService,\n private sentryLogger: SentryLogger,\n private submitService: SubmitService,\n private store$: Store,\n private languageService: LanguageService\n ) {}\n\n loggedInMissingPointsRequest(\n formValues: LoggedInMissingPointsSubmissionData\n ): Observable {\n const params = this.getSubmissionData(formValues);\n return this.missingPointsRequest(params);\n }\n\n loggedOutMissingPointsRequest(\n formValues: LoggedOutMissingPointsSubmissionData\n ): Observable {\n const { apiUrl, keyId } = this.configService.cfg.serviceForm.portalServices;\n const httpOptions = {\n headers: new HttpHeaders({\n 'x-api-key': keyId,\n }),\n };\n\n return this.http\n .post(\n `${apiUrl}/mailer`,\n this.getSubmissionDataForLoggedOutMissingPoints(formValues),\n httpOptions\n )\n .pipe(\n // eslint-disable-next-line rxjs/no-implicit-any-catch\n catchError((error: unknown): Observable => {\n this.sentryLogger.warn('Error submitting logged out MissingPoints request', { error });\n return throwError(() => error);\n })\n );\n }\n\n public formatTicketNumber(ticketNumber: string): string {\n return ticketNumber.replace(/-/g, '');\n }\n\n private getSubmissionDataForLoggedOutMissingPoints(formValues: LoggedOutMissingPointsSubmissionData): FormData {\n const flightFrom = formValues[LoggedOutMissingPointsFormField.FLIGHT_FROM];\n const flightTo = formValues[LoggedOutMissingPointsFormField.FLIGHT_TO];\n\n const data = new FormData();\n const attachment: Attachment = formValues[LoggedOutMissingPointsFormField.ATTACHMENT];\n const file: File = Array.isArray(attachment) ? attachment.at(0)?.file : attachment?.file;\n\n data.append('__addressKey', 'emailServlet.plusMissingPoints');\n data.append('__messageSubject', 'Missing points form');\n data.append('__from', formValues[LoggedOutMissingPointsFormField.EMAIL]);\n data.append('__confirmationTo', formValues[LoggedOutMissingPointsFormField.EMAIL]);\n data.append('__locale', this.languageService.langKeyValue);\n\n data.append('01___passenger_name', formValues[LoggedOutMissingPointsFormField.PASSENGER_NAME]);\n data.append(\n '02___plus_membership_number',\n formatFinnairPlusCardNumber(formValues[LoggedOutMissingPointsFormField.MEMBER_NUMBER])\n );\n if (formValues[LoggedOutMissingPointsFormField.TICKET_NUMBER]) {\n data.append('03___ticket_number', formValues[LoggedOutMissingPointsFormField.TICKET_NUMBER]);\n }\n data.append('04___flight_from', flightFrom && `${flightFrom.title} (${flightFrom.locationCode})`);\n data.append('05___flight_to', flightTo && `${flightTo.title} (${flightTo.locationCode})`);\n data.append('06___departure_date', formValues[LoggedOutMissingPointsFormField.DEPARTURE_DATE].toDottedUIString());\n if (formValues[LoggedOutMissingPointsFormField.RETURN_DATE]) {\n data.append('06___return_date', formValues[LoggedOutMissingPointsFormField.RETURN_DATE].toDottedUIString());\n }\n Object.entries(this.transformFlightNumbers(formValues[LoggedOutMissingPointsFormField.FLIGHT_NUMBERS])).forEach(\n ([key, value]) => data.append(key, value)\n );\n data.append('08___travel_companion', formValues[LoggedOutMissingPointsFormField.COMPANIONS].length > 0 ? '1' : '0');\n Object.entries(this.transformCompanions(formValues[LoggedOutMissingPointsFormField.COMPANIONS])).forEach(\n ([key, value]) => data.append(key, value)\n );\n if (formValues[LoggedOutMissingPointsFormField.MESSAGE]) {\n data.append('10___message', formValues[LoggedOutMissingPointsFormField.MESSAGE]);\n }\n data.append('11___email', formValues[LoggedOutMissingPointsFormField.EMAIL]);\n data.append('12___phone', formValues[LoggedOutMissingPointsFormField.PHONE]);\n data.append('13___airline', formValues[LoggedOutMissingPointsFormField.AIRLINE]);\n if (formValues[LoggedOutMissingPointsFormField.BOOKING_CLASS]) {\n data.append('14___bookingClass', formValues[LoggedOutMissingPointsFormField.BOOKING_CLASS]);\n }\n data.append('attachment', file);\n\n return data;\n }\n\n private transformFlightNumbers(items): { [key: string]: string } {\n if (items.length === 0) {\n return {};\n }\n return items\n .map((flight: object, index: number) => {\n const key = `07___flight_number_${index + 1}`;\n\n return {\n [key]: flight[LoggedOutMissingPointsFormField.FLIGHT_NUMBER],\n };\n })\n .reduce((rest, curr) => ({ ...rest, ...curr }));\n }\n\n private transformCompanions(items): { [key: string]: string } {\n if (items.length === 0) {\n return {};\n }\n return items\n .map((companion: object, index: number) => {\n const nameKey = `09___companion_${index + 1}_name`;\n const memberNumberKey = `09___companion_${index + 1}_plus_number`;\n\n return {\n [nameKey]: companion[LoggedOutMissingPointsFormField.COMPANION_NAME],\n [memberNumberKey]: formatFinnairPlusCardNumber(\n companion[LoggedOutMissingPointsFormField.COMPANION_MEMBER_NUMBER]\n ),\n };\n })\n .reduce((rest, curr) => ({ ...rest, ...curr }));\n }\n\n private getSubmissionData(formValues: LoggedInMissingPointsSubmissionData): { [key: string]: string } {\n return {\n [LoggedInMissingPointsFormField.AIRLINE]: formValues[LoggedInMissingPointsFormField.AIRLINE],\n [LoggedInMissingPointsFormField.ARRIVAL_AIRPORT]: formValues[LoggedInMissingPointsFormField.ARRIVAL_AIRPORT]\n ? formValues[LoggedInMissingPointsFormField.ARRIVAL_AIRPORT].locationCode\n : undefined,\n [LoggedInMissingPointsFormField.BOOKING_CLASS]: formValues[LoggedInMissingPointsFormField.BOOKING_CLASS],\n [LoggedInMissingPointsFormField.DEPARTURE_AIRPORT]: formValues[LoggedInMissingPointsFormField.DEPARTURE_AIRPORT]\n ? formValues[LoggedInMissingPointsFormField.DEPARTURE_AIRPORT].locationCode\n : undefined,\n [LoggedInMissingPointsFormField.FLIGHT_DATE]:\n formValues[LoggedInMissingPointsFormField.FLIGHT_DATE] &&\n formValues[LoggedInMissingPointsFormField.FLIGHT_DATE].toString(),\n [LoggedInMissingPointsFormField.FLIGHT_NUMBER]: formValues[LoggedInMissingPointsFormField.FLIGHT_NUMBER],\n [LoggedInMissingPointsFormField.SEQUENCE_NUMBER]: formValues[LoggedInMissingPointsFormField.SEQUENCE_NUMBER],\n [LoggedInMissingPointsFormField.TICKET_NUMBER]: this.formatTicketNumber(\n formValues[LoggedInMissingPointsFormField.TICKET_NUMBER]\n ),\n };\n }\n\n private missingPointsRequest(data: { [key: string]: string }): Observable {\n const isPartner = data[LoggedInMissingPointsFormField.AIRLINE] !== Airline.FINNAIR;\n const apiUrl = `${this.configService.cfg.serviceForm.loggedInMissingPoints.apiUrl}${isPartner ? '/partner' : ''}`;\n const keyId = this.configService.cfg.serviceForm.loggedInMissingPoints.keyId;\n return this.store$.pipe(\n loginToken(),\n take(1),\n switchMap((token: string) => {\n const httpOptions = {\n // eslint-disable-next-line camelcase\n headers: this.submitService.buildHeaders({ 'x-api-key': keyId, oauth_token: token }),\n };\n\n return this.http.post(apiUrl, data, httpOptions).pipe(\n // eslint-disable-next-line rxjs/no-implicit-any-catch\n catchError((err: HttpErrorResponse) => {\n if (\n !err.error.error?.errorCode ||\n err.error.error.errorCode === LoggedInMissingPointsErrorCode.INTERNAL_ERROR\n ) {\n this.sentryLogger.warn('Error submitting logged in MissingPoints request', { error: err });\n }\n return throwError(() => err);\n })\n );\n })\n );\n }\n\n claimFlightsMissingAvios = (\n claimMissingAviosFormData: ClaimFlightsMissingAviosFormData\n ): Observable => {\n const attachment: Attachment | Attachment[] = claimMissingAviosFormData.attachment;\n const file: File = Array.isArray(attachment) ? attachment[0]?.file : attachment?.file;\n const claimFlightsMissingAviosSubmissionData: ClaimFlightsMissingAviosSubmissionData =\n this.getFlightsMissingAviosSubmissionData(claimMissingAviosFormData);\n if (file) {\n return fileToBase64(file).pipe(\n switchMap((base64) => {\n claimFlightsMissingAviosSubmissionData.attachment = base64;\n claimFlightsMissingAviosSubmissionData.attachmentName = file.name;\n return this.sendToClaimMissingPoints(JSON.stringify(claimFlightsMissingAviosSubmissionData));\n })\n );\n } else {\n return this.sendToClaimMissingPoints(JSON.stringify(claimFlightsMissingAviosSubmissionData));\n }\n };\n\n claimPartnerMissingAvios = (\n claimMissingPartnerPointsFormData: ClaimMissingPartnerPointsFormData\n ): Observable => {\n const claimPartnerMissingAviosSubmissionData: ClaimPartnerMissingAviosSubmissionData = {\n claimMissingPointsForm: ClaimMissingPointsFormOrigin.FROM_PARTNERS,\n passengerName:\n claimMissingPartnerPointsFormData.claimMissingPartnerPoints[ClaimMissingPartnerPointsFormField.MEMBER_NAME],\n memberNumber:\n claimMissingPartnerPointsFormData.claimMissingPartnerPoints[ClaimMissingPartnerPointsFormField.MEMBER_NUMBER],\n email: claimMissingPartnerPointsFormData.claimMissingPartnerPoints[ClaimMissingPartnerPointsFormField.EMAIL],\n message:\n claimMissingPartnerPointsFormData.claimMissingPartnerPoints[\n ClaimMissingPartnerPointsFormField.ADDITIONAL_INFORMATION\n ],\n locale: this.languageService.langKeyValue,\n };\n const attachment =\n claimMissingPartnerPointsFormData.claimMissingPartnerPoints[ClaimMissingPartnerPointsFormField.ATTACHMENT];\n const file = Array.isArray(attachment) ? attachment.at(0)?.file : attachment?.file;\n if (file) {\n return fileToBase64(file).pipe(\n switchMap((base64: string) => {\n claimPartnerMissingAviosSubmissionData.attachment = base64;\n claimPartnerMissingAviosSubmissionData.attachmentName = file.name;\n return this.sendToClaimMissingPoints(JSON.stringify(claimPartnerMissingAviosSubmissionData));\n })\n );\n } else {\n return this.sendToClaimMissingPoints(JSON.stringify(claimPartnerMissingAviosSubmissionData));\n }\n };\n\n private sendToClaimMissingPoints = (jsonBody: string): Observable => {\n const { apiUrl, keyId } = this.configService.cfg.serviceForm.customerCare;\n const httpOptions: HttpPostOptions = {\n headers: new HttpHeaders({ 'x-api-key': keyId }),\n };\n return this.http\n .post(`${apiUrl}/feedback/claim-missing-points`, jsonBody, httpOptions)\n .pipe(\n catchError((err) => {\n this.sentryLogger.warn(err?.message, { error: err });\n return throwError(() => err);\n })\n );\n };\n\n private getFlightsMissingAviosSubmissionData = (\n claimFlightsMissingAviosFormData: ClaimFlightsMissingAviosFormData\n ): ClaimFlightsMissingAviosSubmissionData => {\n const claimFlightsMissingAviosSubmissionData = {\n airline: claimFlightsMissingAviosFormData.airline,\n claimMissingPointsForm: ClaimMissingPointsFormOrigin.FROM_FLIGHTS,\n passengerName: claimFlightsMissingAviosFormData.passengerName,\n memberNumber: claimFlightsMissingAviosFormData.memberNumber,\n email: claimFlightsMissingAviosFormData.email,\n phone: claimFlightsMissingAviosFormData.phone,\n message: claimFlightsMissingAviosFormData.message,\n companions: claimFlightsMissingAviosFormData.companions?.map((companion) => ({\n passengerName: companion.companionName,\n memberNumber: companion.companionMemberNumber,\n })),\n locale: this.languageService.langKeyValue,\n } as ClaimFlightsMissingAviosSubmissionData;\n\n if (claimFlightsMissingAviosFormData.passengerName) {\n claimFlightsMissingAviosSubmissionData.flightDetails = {\n ticketNumber: claimFlightsMissingAviosFormData.ticketNumber || undefined,\n bookingClass: claimFlightsMissingAviosFormData.bookingClass,\n flightFrom: claimFlightsMissingAviosFormData.flightFrom?.title,\n flightTo: claimFlightsMissingAviosFormData.flightTo?.title,\n departureDate: claimFlightsMissingAviosFormData.departureDate?.toString(),\n returnDate: claimFlightsMissingAviosFormData.returnDate?.toString(),\n flightNumbers: claimFlightsMissingAviosFormData.flightNumbers?.map((flight) => flight.flightNumber),\n };\n } else {\n claimFlightsMissingAviosSubmissionData.ticketNumber = claimFlightsMissingAviosFormData.ticketNumber || undefined;\n }\n return claimFlightsMissingAviosSubmissionData;\n };\n}\n","import { createAction, props, union } from '@ngrx/store';\n\nimport { RefundsStatus } from '../../interfaces/store.interface';\nimport { RefundCase } from '../../interfaces/refunds.interface';\n\nexport const setRefunds = createAction(\n '[RefundsActions] SetRefunds',\n props<{ refunds: RefundCase[]; status: RefundsStatus }>()\n);\nexport const resetRefunds = createAction('[RefundsActions] ResetRefunds');\n\nconst all = union({ setRefunds, resetRefunds });\nexport type RefundsActionsUnion = typeof all;\n","import { type AbstractControl, type UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms';\n\nimport { entrySet } from '@fcom/core/utils';\n\nimport {\n AdditionalExpenses,\n AdditionalExpensesInputs,\n EUClaimOptions,\n FormCategories,\n MultiStepFormSteps,\n} from '../../../interfaces';\nimport { PRICE_PATTERN } from '../../../utils';\n\nexport const RATING_SCHEME_MAP = { veryPoor: 1, poor: 2, okay: 3, good: 4, excellent: 5 };\n\nexport const resolveEuStandardCompensationGiftCardValue = (key: EUClaimOptions): number => {\n switch (key) {\n case EUClaimOptions.SHORT:\n return 375;\n case EUClaimOptions.SHORT_HALF:\n return 188;\n case EUClaimOptions.MIDDLE:\n return 600;\n case EUClaimOptions.MIDDLE_HALF:\n return 300;\n case EUClaimOptions.LONG:\n return 900;\n case EUClaimOptions.LONG_HALF:\n return 450;\n default:\n return 0;\n }\n};\n\nexport const resolveEuStandardCompensationCashValue = (key: EUClaimOptions): number => {\n switch (key) {\n case EUClaimOptions.SHORT:\n return 250;\n case EUClaimOptions.SHORT_HALF:\n return 125;\n case EUClaimOptions.MIDDLE:\n return 400;\n case EUClaimOptions.MIDDLE_HALF:\n return 200;\n case EUClaimOptions.LONG:\n return 600;\n case EUClaimOptions.LONG_HALF:\n return 300;\n default:\n return 0;\n }\n};\n\nexport const resolveFirstStepForFlow = (step: FormCategories | undefined): MultiStepFormSteps | undefined => {\n if (step === FormCategories.FLIGHT_DISRUPTION) {\n return MultiStepFormSteps.BOOKING_INFORMATION;\n } else if (step === FormCategories.BAGGAGE_IRREGULARITIES || step === FormCategories.BOOKING_AND_TRAVEL_EXPERIENCE) {\n return MultiStepFormSteps.SECOND_CATEGORY;\n }\n return undefined;\n};\n\nexport const getBaggageExpenseControls = (\n oldGroup: AbstractControl\n): Record => {\n return {\n [AdditionalExpensesInputs.CLOTH_AND_COSMETIC_COST]: [\n oldGroup?.get(AdditionalExpensesInputs.CLOTH_AND_COSMETIC_COST)?.value || '',\n [Validators.pattern(PRICE_PATTERN)],\n ],\n [AdditionalExpensesInputs.RENTED_COST]: [\n oldGroup?.get(AdditionalExpensesInputs.RENTED_COST)?.value || '',\n [Validators.pattern(PRICE_PATTERN)],\n ],\n };\n};\n\nexport const getAdditionalExpenseControls = (\n oldGroup: AbstractControl\n): Record => {\n return {\n [AdditionalExpensesInputs.TRANSPORT_COST]: [\n oldGroup?.get(AdditionalExpensesInputs.TRANSPORT_COST)?.value || '',\n Validators.pattern(PRICE_PATTERN),\n ],\n [AdditionalExpensesInputs.HOTEL_COST]: [\n oldGroup?.get(AdditionalExpensesInputs.HOTEL_COST)?.value || '',\n Validators.pattern(PRICE_PATTERN),\n ],\n [AdditionalExpensesInputs.PHONE_COST]: [\n oldGroup?.get(AdditionalExpensesInputs.PHONE_COST)?.value || '',\n Validators.pattern(PRICE_PATTERN),\n ],\n [AdditionalExpensesInputs.MEAL_COST]: [\n oldGroup?.get(AdditionalExpensesInputs.MEAL_COST)?.value || '',\n Validators.pattern(PRICE_PATTERN),\n ],\n };\n};\n\nexport const validateAtLeastOneFieldFilled = (): ValidatorFn => {\n return (group: UntypedFormGroup): { pattern: true } | null => {\n if (group.value[AdditionalExpensesInputs.ADDITIONAL_EXPENSES] === AdditionalExpenses.NO) {\n return null;\n }\n const atLeastOneFieldFilled: boolean = entrySet(group.value)\n .filter((field) => field.key !== AdditionalExpensesInputs.ADDITIONAL_EXPENSES)\n .some((field) => field.value !== null && field.value !== '');\n if (atLeastOneFieldFilled) {\n return null;\n }\n return { pattern: true };\n };\n};\n","import { RefundCase } from './refunds.interface';\n\nexport interface RefundsState {\n refunds: RefundCase[];\n status: RefundsStatus;\n}\n\nexport enum RefundsStatus {\n INITIAL,\n LOADING,\n OK,\n ERROR,\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable, type ElementRef } from '@angular/core';\nimport { type FormGroup } from '@angular/forms';\n\nimport { from, pipe, throwError, type Observable, type UnaryFunction } from 'rxjs';\nimport { catchError, mergeMap, switchMap } from 'rxjs/operators';\n\nimport { ScrollService } from '@fcom/common/services';\nimport { fileToBase64 } from '@fcom/common/utils/form-utils';\nimport { ConfigService, SentryLogger } from '@fcom/core/services';\nimport { retryWithBackoff } from '@fcom/rx';\nimport { type Attachment } from '@fcom/ui-components/components/interfaces';\nimport { LanguageService } from '@fcom/ui-translate';\n\nimport {\n CancellationCoverClaimFor,\n CertificatesForInsuranceCompanyField,\n ClaimMissingPartnerPointsFormField,\n type CancellationCoverClaimFormData,\n type CancellationCoverClaimResponseData,\n type CancellationCoverClaimSubmissionData,\n type CertificatesForInsuranceCompanyFormData,\n type CertificatesForInsuranceCompanyPayload,\n type CertificatesForInsuranceCompanyResponseData,\n type ClaimMissingPartnerPointsFormData,\n type ClaimMissingPartnerPointsResponseData,\n type RefundItem,\n type RefundRequestResponseData,\n type RequestRefundBankingData,\n type RequestRefundSubmissionData,\n} from '../interfaces';\nimport { RefundPaymentMethods, RefundPaymentTypes, type RefundFormData } from '../interfaces/refund-form.interface';\n\ntype HttpPostOptions = Parameters[2];\n\n@Injectable()\nexport class SubmitService {\n constructor(\n private configService: ConfigService,\n private http: HttpClient,\n private sentryLogger: SentryLogger,\n private languageService: LanguageService,\n private scrollService: ScrollService\n ) {}\n public requestRefund(formValues: RefundFormData): Observable {\n const { apiUrl, keyId } = this.configService.cfg.serviceForm.customerRefunds;\n const httpOptions: HttpPostOptions = {\n headers: new HttpHeaders({ 'x-api-key': keyId }),\n };\n const submitQuery = this.mapRefundRequestSubmissionData(formValues);\n return this.http.post(`${apiUrl}/refunds`, submitQuery, httpOptions).pipe(\n catchError((err: unknown) => {\n if (err instanceof Error) {\n this.sentryLogger.warn(err.message, { error: err });\n return throwError(() => err);\n }\n })\n );\n }\n\n public certificatesForInsuranceCompany(\n formData: CertificatesForInsuranceCompanyFormData\n ): Observable {\n const { apiUrl, keyId } = this.configService.cfg.serviceForm.customerCare;\n\n const body: CertificatesForInsuranceCompanyPayload = {\n bookingReference: formData[CertificatesForInsuranceCompanyField.BOOKING_REFERENCE],\n confirmSelfCancelledBooking: formData[CertificatesForInsuranceCompanyField.CONFIRM_SELF_CANCELLED_BOOKING],\n email: formData[CertificatesForInsuranceCompanyField.EMAIL],\n firstName: formData[CertificatesForInsuranceCompanyField.FIRST_NAME],\n flights: formData[CertificatesForInsuranceCompanyField.FLIGHTS],\n lastName: formData[CertificatesForInsuranceCompanyField.LAST_NAME],\n locale: this.languageService.langKeyValue,\n phone: formData[CertificatesForInsuranceCompanyField.PHONE],\n reasonForCertificate: formData[CertificatesForInsuranceCompanyField.REASON_FOR_CERTIFICATE],\n ticketNumber: formData[CertificatesForInsuranceCompanyField.TICKET_NUMBER],\n worldTracerNumber: formData[CertificatesForInsuranceCompanyField.WORLD_TRACER_NUMBER],\n };\n\n const httpOptions: HttpPostOptions = {\n headers: new HttpHeaders({ 'x-api-key': keyId }),\n };\n\n return this.http\n .post(\n `${apiUrl}/feedback/certificates-for-insurance-company`,\n body,\n httpOptions\n )\n .pipe(\n catchError((error: unknown) => {\n this.sentryLogger.warn('Error submitting CancellationVerification request', { error });\n return throwError(() => error);\n })\n );\n }\n\n public sendCancellationCoverClaimRequest(\n formValues: CancellationCoverClaimFormData,\n file: File\n ): Observable {\n const { apiUrl, keyId } = this.configService.cfg.serviceForm.customerCare;\n const httpOptions: HttpPostOptions = {\n headers: new HttpHeaders({\n 'x-api-key': keyId,\n }),\n };\n return fileToBase64(file).pipe(\n switchMap((base64File: string): Observable => {\n const body: CancellationCoverClaimSubmissionData = this.mapCancellationCoverClaimSubmissionData(\n formValues,\n base64File,\n file.name\n );\n return this.http\n .post(`${apiUrl}/feedback/cancellation-cover-claim`, body, httpOptions)\n .pipe(\n catchError((error): Observable => {\n this.sentryLogger.warn(error?.message, { error });\n return throwError(() => error);\n })\n );\n })\n );\n }\n\n public claimMissingPartnerPoints(\n formValues: ClaimMissingPartnerPointsFormData\n ): Observable {\n const { apiUrl, keyId } = this.configService.cfg.serviceForm.portalServices;\n\n const fields: ClaimMissingPartnerPointsFormField[] = [\n ClaimMissingPartnerPointsFormField.MEMBER_NAME,\n ClaimMissingPartnerPointsFormField.MEMBER_NUMBER,\n ClaimMissingPartnerPointsFormField.EMAIL,\n ClaimMissingPartnerPointsFormField.ATTACHMENT,\n ClaimMissingPartnerPointsFormField.ADDITIONAL_INFORMATION,\n ];\n\n const formData: FormData = new FormData();\n formData.append('__addressKey', 'emailServlet.plusPlusshop');\n formData.append('__messageSubject', 'Claim missing Finnair Plus partner points');\n formData.append('__confirmationTo', formValues.claimMissingPartnerPoints[ClaimMissingPartnerPointsFormField.EMAIL]);\n formData.append('__locale', this.languageService.langKeyValue);\n\n for (const field of fields) {\n formData.append(\n field,\n field === ClaimMissingPartnerPointsFormField.ATTACHMENT &&\n 'string' !== typeof formValues.claimMissingPartnerPoints[field]\n ? Array.isArray(formValues.claimMissingPartnerPoints[field])\n ? formValues.claimMissingPartnerPoints[field]?.[0]?.file\n : (formValues.claimMissingPartnerPoints[field] as Attachment)?.file\n : (formValues.claimMissingPartnerPoints[field] as string)\n );\n }\n\n const httpOptions: HttpPostOptions = {\n headers: new HttpHeaders({\n keyId,\n }),\n };\n\n return this.http.post(`${apiUrl}/mailer`, formData, httpOptions).pipe(\n catchError((error: unknown): Observable => {\n this.sentryLogger.warn('Error submitting ClaimMissingPartnerPoints request', { error });\n return throwError((): unknown => error);\n })\n );\n }\n\n /*\n * This is a ridiculous hack but that's how the API works...\n * API starts processing after the first request and returns 201 until the processing is done\n * Processing can take up to 5 minutes so that's why we have maximum of 150 attemps\n * We throw an error and retry until we have received some content.\n * Also we don't want to retry 150 times if server returns an error\n */\n public retryWhenOKResponseWithEmptyBody(): UnaryFunction<\n Observable,\n Observable\n > {\n const MAX_ATTEMPTS = 150;\n const BACKOFF_MS = 2000;\n return pipe(\n mergeMap>((response) => {\n if (response?.feedbackCase) {\n return from([response]);\n }\n return throwError(() => new Error('Empty body'));\n }),\n retryWithBackoff(MAX_ATTEMPTS, BACKOFF_MS)\n );\n }\n\n public buildHeaders(params: object): HttpHeaders {\n return new HttpHeaders(\n Object.assign(\n {\n Accept: 'application/json',\n 'Content-Type': 'application/json; charset=utf-8',\n },\n params\n )\n );\n }\n\n private mapCancellationCoverClaimSubmissionData(\n formValues: CancellationCoverClaimFormData,\n fileContent: string,\n fileName: string\n ): CancellationCoverClaimSubmissionData {\n return {\n bookingReference: formValues.bookingReference,\n ticketNumber: formValues.ticketNumber,\n departureCity: formValues.departureCity && formValues.departureCity.title,\n destinationCity: formValues.destinationCity && formValues.destinationCity.title,\n departureDate: formValues.departureDate ? formValues.departureDate.toDottedString() : undefined,\n returnDate: formValues.returnDate ? formValues.returnDate.toDottedString() : undefined,\n firstName: formValues.firstName,\n familyName: formValues.familyName,\n email: formValues.email,\n country: formValues.country,\n phone: formValues.phoneNumber,\n refundFor:\n formValues.refundFor === 'returnFlight'\n ? CancellationCoverClaimFor.RETURN_FLIGHTS\n : CancellationCoverClaimFor.DEPARTURE_AND_RETURN_FLIGHTS,\n attachment: fileContent,\n attachmentConsent: formValues.attachmentConsent ? 'accepted' : 'not accepted',\n attachmentName: fileName,\n iban: formValues.iban,\n bic: formValues.bic,\n accountHolder: formValues.accountHolder,\n bankName: formValues.bankName,\n companions: formValues.companions?.map((companion) => ({\n firstName: companion.firstName,\n familyName: companion.familyName,\n })),\n locale: this.languageService.langKeyValue,\n };\n }\n\n private mapRefundRequestSubmissionData(formValues: RefundFormData): RequestRefundSubmissionData {\n enum RefundType {\n flight = 'Flight Ticket',\n extras = 'Travel Extra',\n flightAndExtras = 'Flight Ticket and Travel Extra',\n travelRetail = 'Travel Retail',\n }\n\n enum RefundReason {\n flightCancelledByFinnair = 'Involuntary',\n flightCancelledWithin24Hours = '24h Rule',\n extraNotDelivered = 'Ancillary Invol',\n changedFlightOrSeat = 'Upgrade',\n ticketAllowsCancellation = 'Voluntary',\n bestBeforeExpire = 'Expired Date',\n faultyProduct = 'Faulty',\n wrongProduct = 'Wrong Product',\n // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\n cancelledMyFlight = 'Voluntary',\n // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\n orderNotDelivered = 'Involuntary',\n }\n\n enum RefundItemType {\n baggage = 'Baggage',\n internet = 'Internet',\n lounge = 'Lounge',\n comfortItems = 'Comfort items',\n meal = 'Meal',\n seat = 'Seat',\n seatAndMeal = 'Seat and meal',\n }\n\n const mainPax = formValues.passengers[0];\n let output: RequestRefundSubmissionData = {\n refundType: RefundType[formValues.refundType],\n refundReason: RefundReason[formValues.refundReason],\n firstName: mainPax.firstname,\n lastName: mainPax.lastname,\n phone: formValues.phoneNumber,\n email: formValues.email,\n flightNumber: formValues.flightNumber,\n bookingReference: formValues.reservationNumber,\n refundItems: [],\n useOnlyVoucher: formValues.paymentMethod === RefundPaymentMethods.GIFT_VOUCHER,\n };\n\n if (formValues.flightDate) {\n output.departureDate = formValues.flightDate.toString();\n }\n\n if (formValues.bookingDate) {\n output.bookingDate = formValues.bookingDate.toString();\n }\n\n if (formValues.cancellationDate) {\n output.cancellationDate = formValues.cancellationDate.toString();\n }\n\n if (formValues.additionalInformation) {\n output.additionalInformation = formValues.additionalInformation;\n }\n\n formValues.passengers.forEach(function (passenger) {\n const baseData: RefundItem = { firstName: passenger.firstname, lastName: passenger.lastname };\n passenger.finnairPlusNumber && (baseData.finnairPlusNumber = passenger.finnairPlusNumber);\n\n // add preorderBagNumber to RefundItem (if available)\n if (passenger.preorderBagNumber) {\n baseData.preorderBagNumber = passenger.preorderBagNumber;\n output.refundItems.push(baseData);\n }\n\n // create refund item for flight ticket (if available)\n if (passenger.ticketNumber) {\n const flightData = { ticketNumber: passenger.ticketNumber };\n output.refundItems.push({ ...baseData, ...flightData });\n }\n\n // create refund item for each travel extra (if available)\n if (passenger.travelExtras) {\n passenger.travelExtras.forEach(function (travelExtra) {\n const emdData = {\n emdNumber: travelExtra.emdNumber,\n refundItemType: RefundItemType[travelExtra.refundItemType],\n };\n output.refundItems.push({ ...baseData, ...emdData });\n });\n }\n });\n\n if (formValues.paymentType === RefundPaymentTypes.ONLINE_BANK) {\n output = { ...output, ...this.mapOnlinePaymentData(formValues) };\n }\n\n if (!output.flightNumber) {\n delete output.flightNumber;\n }\n\n return output;\n }\n\n private mapOnlinePaymentData(formValues: RefundFormData): RequestRefundBankingData {\n const bankingData: RequestRefundBankingData = {};\n\n formValues.iban && (bankingData.iban = formValues.iban);\n formValues.accountNumber && (bankingData.iban = formValues.accountNumber);\n formValues.bic && (bankingData.bic = formValues.bic);\n formValues.accountHolder && (bankingData.bankAccountHolder = formValues.accountHolder);\n formValues.accountHolderAddress && (bankingData.bankAccountHolderAddress = formValues.accountHolderAddress);\n formValues.bankName && (bankingData.bankName = formValues.bankName);\n formValues.bankAddress && (bankingData.bankAddress = formValues.bankAddress);\n formValues.correspondentBankData && (bankingData.correspondentBankData = formValues.correspondentBankData);\n formValues.bik && (bankingData.bik = formValues.bik);\n formValues.inn && (bankingData.inn = formValues.inn);\n formValues.patronymicName && (bankingData.patronymicName = formValues.patronymicName);\n formValues.kpp && (bankingData.kpp = formValues.kpp);\n formValues.ncc && (bankingData.ncc = formValues.ncc);\n formValues.ifsc && (bankingData.ifsc = formValues.ifsc);\n\n return bankingData;\n }\n\n public scrollToInvalidField = (form: FormGroup | FormGroup[], elementRef: ElementRef): void => {\n if (Array.isArray(form)) {\n form.forEach((f: FormGroup): void => {\n f.markAllAsTouched();\n f.updateValueAndValidity();\n });\n } else {\n form.markAllAsTouched();\n form.updateValueAndValidity();\n }\n setTimeout((): void => {\n this.scrollService.scrollToFirstInvalidInput(elementRef, 40);\n });\n };\n}\n","import { HttpClient, HttpHeaders, type HttpErrorResponse, type HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { throwError, type Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { ConfigService, SentryLogger } from '@fcom/core/services';\n\nimport {\n GiftCardVerificationResponse,\n type GiftCardConversionPayload,\n type GiftCardVerificationPayload,\n} from '../interfaces';\n\n@Injectable()\nexport class GiftCardService {\n giftCardConversionUrl: string;\n giftCardVerificationUrl: string;\n\n constructor(\n private configService: ConfigService,\n private http: HttpClient,\n private router: Router,\n private sentryLogger: SentryLogger\n ) {\n this.giftCardConversionUrl = this.configService.cfg.giftCardConversionUrl;\n this.giftCardVerificationUrl = this.configService.cfg.giftCardVerificationUrl;\n }\n\n /**\n * Adds headers to outgoing API requests. This includes the\n * `content-type`, `X-Api-Key` and any extra headers that\n * have been provided.\n *\n * @default contentType 'application/json'\n */\n private createHeaders(\n extraHeaders: Record = {},\n contentType = 'application/json; charset=utf-8'\n ): HttpHeaders {\n return new HttpHeaders({\n Accept: 'application/json',\n 'Content-Type': contentType,\n 'X-Api-Key': this.configService.cfg.giftCardApiKey,\n ...extraHeaders,\n });\n }\n\n /**\n * Verifies gift card based on the ID and PIN given.\n * @see https://checkout-reference-preprod.preprod.payments.app.cloud.finnair.com/giftCard\n * @returns The gift card information if accepted.\n */\n getGiftCardInformation({\n giftCardId,\n pin,\n }: GiftCardVerificationPayload): Observable {\n return this.http\n .get(`${this.giftCardVerificationUrl}/${giftCardId}`, {\n headers: this.createHeaders({ pin }),\n })\n .pipe(\n catchError((response: HttpErrorResponse): Observable => {\n this.sentryLogger.warn('Unable to get gift card information', { response });\n return throwError((): unknown => response);\n })\n );\n }\n\n /**\n * This will return the parent page by\n * removing the last segment of current url.\n *\n * @example '/fi-en/customer-care-and-contact-information/contact-and-request-forms/check-your-gift-card' ->\n * '/fi-en/customer-care-and-contact-information/contact-and-request-forms'\n */\n getReturnUrl(): string {\n return this.router.url.split('/').slice(0, -1).join('/');\n }\n\n /**\n * Makes the request to convert the gift card to cash.\n *\n * Includes the customer's gift card ID, PIN, bank details and email address.\n */\n postGiftCardConversion({\n body,\n giftCardId,\n pin,\n }: GiftCardConversionPayload): Observable | HttpErrorResponse> {\n return this.http\n .post>(`${this.giftCardConversionUrl}/${giftCardId}`, body, {\n headers: this.createHeaders({ pin }),\n })\n .pipe(\n catchError((response: HttpErrorResponse): Observable => {\n this.sentryLogger.warn('Unable to convert gift card to cash', { response });\n return throwError((): unknown => response);\n })\n );\n }\n}\n"],"x_google_ignoreList":[]}