{"version":3,"file":"salaxy-lib-core.umd.cjs","sources":["../../../@salaxy/core/ts/util/schema/FormHelpers.ts","../../../@salaxy/core/ts/model/oauth2.ts","../../../@salaxy/core/ts/model/v01.ts","../../../@salaxy/core/ts/model/irepr.ts","../../../@salaxy/core/ts/model/irpsr.ts","../../../@salaxy/core/ts/model/non-api/AuthorizationPdfType.ts","../../../@salaxy/core/ts/model/non-api/WebSiteAccountType.ts","../../../@salaxy/core/ts/model/non-api/TimesheetInputModification.ts","../../../@salaxy/core/ts/codegen/incomeTypeCodes.ts","../i18n/fi.js","../../../@salaxy/core/ts/logic/ConfigLogic.ts","../../../@salaxy/core/ts/logic/Configs.ts","../../../@salaxy/core/ts/util/Objects.ts","../../../@salaxy/core/ts/logic/TranslationsInstance.ts","../../../@salaxy/core/ts/logic/Translations.ts","../../../@salaxy/core/ts/logic/IncomeTypesLogic.ts","../../../@salaxy/core/ts/codegen/enumerations.ts","../../../@salaxy/core/ts/codegen/enumerationsIr.ts","../../../@salaxy/core/ts/logic/EnumerationsLogic.ts","../../../node_modules/.pnpm/dayjs@1.11.10/node_modules/dayjs/dayjs.min.js","../../../node_modules/.pnpm/dayjs@1.11.10/node_modules/dayjs/plugin/customParseFormat.js","../../../node_modules/.pnpm/dayjs@1.11.10/node_modules/dayjs/plugin/advancedFormat.js","../../../node_modules/.pnpm/dayjs@1.11.10/node_modules/dayjs/plugin/duration.js","../../../node_modules/.pnpm/dayjs@1.11.10/node_modules/dayjs/plugin/isoWeek.js","../../../node_modules/.pnpm/dayjs@1.11.10/node_modules/dayjs/plugin/isSameOrBefore.js","../../../node_modules/.pnpm/dayjs@1.11.10/node_modules/dayjs/plugin/isSameOrAfter.js","../../../node_modules/.pnpm/dayjs@1.11.10/node_modules/dayjs/plugin/utc.js","../../../node_modules/.pnpm/dayjs@1.11.10/node_modules/dayjs/plugin/quarterOfYear.js","../../../@salaxy/core/ts/codegen/yearlyHolidaysYears.ts","../../../@salaxy/core/ts/util/Dates.ts","../../../@salaxy/core/ts/codegen/accountProductDefaults.ts","../../../@salaxy/core/ts/codegen/vismaSignOriginalMethods.ts","../../../@salaxy/core/ts/codegen/yearlyChangingNumbersYears.ts","../../../@salaxy/core/ts/codegen/yearlyTaxFreeYears.ts","../../../@salaxy/core/ts/codegen/kevaEmploymentRegCodes.ts","../../../@salaxy/core/ts/codegen/cbaCodes.ts","../../../@salaxy/core/ts/util/Years.ts","../../../@salaxy/core/ts/logic/model/calcRowsMetadata.ts","../../../@salaxy/core/ts/logic/model/CalculationRowCategories.ts","../../../@salaxy/core/ts/logic/model/ExternalDialogData.ts","../../../@salaxy/core/ts/logic/model/SystemRole.ts","../../../@salaxy/core/ts/logic/model/ExpensesVatRate.ts","../../../@salaxy/core/ts/logic/CalcRowsLogic.ts","../../../@salaxy/core/ts/util/Numeric.ts","../../../@salaxy/core/ts/util/schema/JsonSchemaUtils.ts","../../../@salaxy/core/ts/util/schema/JsonSchemaCache.ts","../../../@salaxy/core/ts/util/Arrays.ts","../../../node_modules/.pnpm/js-base64@3.7.7/node_modules/js-base64/base64.mjs","../../../@salaxy/core/ts/util/Base64.ts","../../../@salaxy/core/ts/util/Brand.ts","../../../@salaxy/core/ts/util/BrowserUtil.ts","../../../@salaxy/core/ts/util/Cookies.ts","../../../@salaxy/core/ts/util/DateTimes.ts","../../../@salaxy/core/ts/util/Iban.ts","../../../@salaxy/core/ts/util/MemoryStorage.ts","../../../@salaxy/core/ts/util/OData.ts","../../../@salaxy/core/ts/util/SimpleStorage.ts","../../../@salaxy/core/ts/util/Texts.ts","../../../@salaxy/core/ts/util/Token.ts","../../../@salaxy/core/ts/util/Validation.ts","../../../@salaxy/core/ts/util/Promises.ts","../../../@salaxy/core/ts/api/infra/CrudApiBase.ts","../../../@salaxy/core/ts/api/infra/OAuth2.ts","../../../@salaxy/core/ts/api/infra/SingleItemApiBase.ts","../../../@salaxy/core/ts/api/infra/AjaxFetch.ts","../../../@salaxy/core/ts/api/crud/Absences.ts","../../../@salaxy/core/ts/api/crud/AccountingTargets.ts","../../../@salaxy/core/ts/api/crud/AuthorizedAccounts.ts","../../../@salaxy/core/ts/logic/CalculatorLogic.ts","../../../@salaxy/core/ts/api/Calculator.ts","../../../@salaxy/core/ts/api/crud/Calculations.ts","../../../@salaxy/core/ts/api/crud/CalendarEvents.ts","../../../@salaxy/core/ts/api/crud/Certificates.ts","../../../@salaxy/core/ts/api/crud/Credentials.ts","../../../@salaxy/core/ts/api/crud/CustomerInvoices.ts","../../../@salaxy/core/ts/api/crud/Datasets.ts","../../../@salaxy/core/ts/logic/import/Culture.ts","../../../@salaxy/core/ts/logic/import/DataMapperMember.ts","../../../@salaxy/core/ts/logic/import/DataMapperSelector.ts","../../../@salaxy/core/ts/logic/import/DataMapper.ts","../../../@salaxy/core/ts/logic/import/DataMappersLogic.ts","../../../@salaxy/core/ts/logic/import/FileDelimiter.ts","../../../@salaxy/core/ts/logic/import/TableFormat.ts","../../../@salaxy/core/ts/logic/import/FileLogic.ts","../../../@salaxy/core/ts/logic/import/Tables.ts","../../../@salaxy/core/ts/logic/import/FileParser.ts","../../../@salaxy/core/ts/logic/PayrollLogic.ts","../../../@salaxy/core/ts/api/crud/Payrolls.ts","../../../@salaxy/core/ts/logic/ValidationHelper.ts","../../../@salaxy/core/ts/logic/import/HrSuuntiImportLogic.ts","../../../@salaxy/core/ts/logic/import/ImportBatch.ts","../../../@salaxy/core/ts/logic/import/ExportLogic.ts","../../../@salaxy/core/ts/logic/staging/model/WorktimeImportKnownUsecase.ts","../../../@salaxy/core/ts/logic/staging/model/WorktimeImportPreviewMetadata.ts","../../../@salaxy/core/ts/logic/staging/model/WorktimeImportStatus.ts","../../../@salaxy/core/ts/logic/staging/model/WorktimeImportAccrualUnit.ts","../../../@salaxy/core/ts/logic/staging/model/WorktimeImportAccrualKind.ts","../../../@salaxy/core/ts/logic/staging/model/WorktimeImportAccrualType.ts","../../../@salaxy/core/ts/logic/staging/StagingApiConnector.ts","../../../@salaxy/core/ts/logic/staging/WorktimeApiConnector.ts","../../../@salaxy/core/ts/logic/AccountingTargetLogic.ts","../../../@salaxy/core/ts/logic/ApiLogic.ts","../../../@salaxy/core/ts/logic/CalculationResultLogic.ts","../../../@salaxy/core/ts/logic/ContractPartyLogic.ts","../../../@salaxy/core/ts/logic/EmploymentLogic.ts","../../../@salaxy/core/ts/logic/HolidaysLogic.ts","../../../@salaxy/core/ts/logic/InvoicesLogic.ts","../../../@salaxy/core/ts/logic/Occupations.ts","../../../@salaxy/core/ts/logic/OnboardingLogic.ts","../../../@salaxy/core/ts/logic/PaymentLogic.ts","../../../@salaxy/core/ts/logic/ReportsLogic.ts","../../../@salaxy/core/ts/logic/RoleLogic.ts","../../../@salaxy/core/ts/logic/SalaryDateLogic.ts","../../../@salaxy/core/ts/logic/SettingsLogic.ts","../../../@salaxy/core/ts/logic/StorageLogic.ts","../../../@salaxy/core/ts/logic/SxyFormsSettings.ts","../../../@salaxy/core/ts/logic/TaxCard2019Logic.ts","../../../@salaxy/core/ts/logic/TypedocLogic.ts","../../../@salaxy/core/ts/logic/BicHelper.ts","../../../@salaxy/core/ts/logic/UserDefinedRowLogic.ts","../../../@salaxy/core/ts/logic/WorkflowLogic.ts","../../../@salaxy/core/ts/api/crud/Employments.ts","../../../@salaxy/core/ts/api/crud/Files.ts","../../../@salaxy/core/ts/api/crud/HolidayYears.ts","../../../@salaxy/core/ts/api/crud/Invoices.ts","../../../@salaxy/core/ts/api/crud/IrEarningsPayments.ts","../../../@salaxy/core/ts/api/crud/IrPayerSummaries.ts","../../../@salaxy/core/ts/api/crud/MessageThreads.ts","../../../@salaxy/core/ts/api/crud/PaymentChannelApi.ts","../../../@salaxy/core/ts/api/crud/Payrolls4.ts","../../../@salaxy/core/ts/api/crud/Taxcards.ts","../../../@salaxy/core/ts/api/crud/Workers.ts","../../../@salaxy/core/ts/api/crud/ServiceModels.ts","../../../@salaxy/core/ts/api/crud/Usecases.ts","../../../@salaxy/core/ts/api/crud/HouseholdYears.ts","../../../@salaxy/core/ts/api/crud/Records.ts","../../../@salaxy/core/ts/api/crud/BusinessTemplates.ts","../../../@salaxy/core/ts/api/crud/ReferenceObjects.ts","../../../@salaxy/core/ts/api/Accounts.ts","../../../@salaxy/core/ts/api/Onboardings.ts","../../../@salaxy/core/ts/api/Reports.ts","../../../@salaxy/core/ts/api/Session.ts","../../../@salaxy/core/ts/api/Test.ts","../../../@salaxy/core/ts/api/depricated/Client.ts","../../../@salaxy/core/ts/api/settings/AccountSettings.ts","../../../@salaxy/core/ts/api/settings/BeneficialOwnersApi.ts","../../../@salaxy/core/ts/api/HelpCenter.ts","../../../@salaxy/core/ts/api/Overview.ts","../../../@salaxy/core/ts/api/PartnerServices.ts","../../../@salaxy/core/ts/api/ProApi.ts","../../../@salaxy/core/ts/api/Imports.ts","../../../@salaxy/core/ts/ui/CellRenderingLogic.ts","../../../@salaxy/core/ts/ui/SitemapVisibility.ts","../../../@salaxy/core/ts/usecases/household/householdUsecaseTree.ts","../../../@salaxy/core/ts/usecases/household/HouseholdUsecasesLogic.ts","../../../@salaxy/core/ts/usecases/BaseUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/AbsencePeriodUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/BicycleBenefitUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/BoardUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/CarBenefitUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/DailyAllowanceUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/DefaultUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/EmploymentTerminationUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/ExpensesUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/ForeclosureUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/HolidaysUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/HourlySalaryWithWorkingTimeCompensationUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/IrIncomeTypeUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/MealBenefitUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/MilageOwnCarUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/NonProfitOrgUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/OtherCompensationUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/PaidSickLeaveUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/RemunerationUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/SubsidisedCommuteUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/TaxAtSourceUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/TaxWithholdingUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/TotalWorkerPaymentUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/TrainingUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/UnionPaymentUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/WorkingTimeCompensationUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/PayStatsUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/rows/TimeRatePayUsecaseLogic.ts","../../../@salaxy/core/ts/usecases/RowUsecaseCalcData.ts","../../../@salaxy/core/ts/usecases/RowsUsecaseLogic.ts","../../../@salaxy/core/ts/expressions/helpers/RowsHelper.ts","../../../@salaxy/core/ts/expressions/helpers/PricesHelper.ts","../../../@salaxy/core/ts/expressions/helpers/HelpersRoot.ts","../../../@salaxy/core/ts/expressions/index.ts","../../../@salaxy/core/ts/ActionExecutor.ts"],"sourcesContent":["import { OpenAPIV3 } from \"../../@types\";\r\n\r\nimport { InputMetadata } from \"./InputMetadata\";\r\n\r\n/**\r\n * Provides framework independent helpers for creating HTML forms\r\n * based on JSON schema and other metadata.\r\n */\r\nexport class FormHelpers {\r\n\r\n  /**\r\n   * Gets a valid input type, format and other input properties from schema.\r\n   * @param schema The property schema based on which the input is created.\r\n   * @param propertyName Name of property or null if the input is not created from a property, but from model directly.\r\n   * @param dataBindingPath Path for the data model.\r\n   * Default is \"form\": The current form. Could be a a longer path e.g. \"form.result.employerCalc\"\r\n   */\r\n  public static getInputMetadata(schema: OpenAPIV3.SchemaObject, propertyName: string | undefined, dataBindingPath = \"form\"): InputMetadata {\r\n    propertyName = propertyName || \"\";\r\n    const result: InputMetadata = {\r\n      name: propertyName,\r\n      path: null,\r\n      type: schema.type,\r\n      format: schema.format,\r\n      isEnum: false,\r\n    };\r\n    result.path = result.name ? (dataBindingPath ? (dataBindingPath + \".\" + result.name) : result.name) : dataBindingPath;\r\n    switch (result.type) {\r\n      case \"number\":\r\n      case \"integer\": // TODO: Add enum support to numbers.\r\n      case \"boolean\":\r\n      case \"object\":\r\n      case \"array\":\r\n        break;\r\n      case \"string\":\r\n        result.isEnum = (schema.enum?.length ?? 0) > 0;\r\n        break;\r\n      default:\r\n        result.type = \"error\";\r\n        result.content = `Unhandled data type '${result.type}', format '${result.format}' in '${propertyName || \"no property name\"}'.`;\r\n        return result;\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Gets the necessary metadata for generating the inputs for the specified model of type \"object\".\r\n   * If the schema is not of type \"object\", returns null.\r\n   * @param schema Schema for which the user interface is generated.\r\n   * @param dataBindingPath Path for the data model.\r\n   * Default is \"form\": The current form. Could be a a longer path e.g. \"form.result.employerCalc\"\r\n   */\r\n  public static getInputsForObject(schema: OpenAPIV3.SchemaObject, dataBindingPath = \"form\"): InputMetadata[] | undefined {\r\n    if (schema.type === \"object\") {\r\n      return Object.keys(schema.properties ?? {}).map((key) => this.getInputMetadata(schema, key, dataBindingPath));\r\n    } else {\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n\r\n  /**\r\n   * Gets input for the schema itself.\r\n   * @param schema Schema for which the input component is generated.\r\n   * @param propertyName Property name in relation to schema. This may be used in language versioning / texts.\r\n   * @param dataBindingPath Path for the data binding within the form.\r\n   */\r\n  public static getInputForSelf(schema: OpenAPIV3.SchemaObject, propertyName: string | undefined, dataBindingPath: string): InputMetadata {\r\n    return this.getInputMetadata(schema, propertyName, dataBindingPath);\r\n  }\r\n\r\n  /**\r\n   * Gets the necessary metadata for generating the inputs for the array items.\r\n   * If the schema is not of type \"array\", returns null.\r\n   * @param schema Schema for which the user interface is generated.\r\n   * @param dataBindingPath Path for the data binding within the form.\r\n   */\r\n  public static getInputsForArray(schema: OpenAPIV3.SchemaObject, dataBindingPath: string): InputMetadata[] | undefined {\r\n    if (schema.type === \"array\") {\r\n      return FormHelpers.getInputsForObject(schema.items as OpenAPIV3.SchemaObject, dataBindingPath)\r\n        || [FormHelpers.getInputForSelf(schema.items as OpenAPIV3.SchemaObject, undefined, dataBindingPath)];\r\n    }\r\n    return undefined;\r\n\r\n  }\r\n}\r\n","/* eslint-disable */\r\n//----------------------\r\n// <auto-generated>\r\n//     Generated using the NSwag toolchain v10.6.6324.28497 (NJsonSchema v8.33.6323.36213) (http://NSwag.org)\r\n// </auto-generated>\r\n//----------------------\r\n\r\n\r\n/** Based on standard https://tools.ietf.org/html/rfc6749 . */\r\nexport interface OAuthMessage {\r\n    /** The client identifier issued to the client during the registration process. */\r\n    client_id?: string | null;\r\n    /** The client secret. The client MAY omit the parameter if the client secret is an empty string. */\r\n    client_secret?: string | null;\r\n    /** The value MUST be one of \"code\" for requesting an authorization code, \"token\" for  requesting an access token(implicit grant), or a registered extension value. */\r\n    response_type?: OAuthResponseType | null;\r\n    /** The value of the scope parameter is expressed as a list of space-delimited, case-sensitive strings.The strings are defined by the authorization server. */\r\n    scope?: string | null;\r\n    /** An opaque value used by the client to maintain state between the request and callback.The authorization server includes this value when redirecting the user-agent back to the client. The parameter SHOULD be used for preventing cross-site request forgery. */\r\n    state?: string | null;\r\n    /** After completing its interaction with the resource owner, the authorization server directs the resource owner's user-agent back to the client. */\r\n    redirect_uri?: string | null;\r\n    /** A single ASCII [USASCII] error code. */\r\n    error?: OAuthError | null;\r\n    /** Human-readable ASCII [USASCII] text providing additional information, used to assist the client developer in understanding the error that occurred. */\r\n    error_description?: string | null;\r\n    /** A URI identifying a human-readable web page with information about the error, used to provide the client developer with additional information about the error. */\r\n    error_uri?: string | null;\r\n    /** Requested grant type. */\r\n    grant_type?: OAuthGrantType | null;\r\n    /** The authorization code received from the authorization server. */\r\n    code?: string | null;\r\n    /** The access token issued by the authorization server. */\r\n    access_token?: string | null;\r\n    /** The type of the token issued. */\r\n    token_type?: OAuthTokenType | null;\r\n    /** The lifetime in seconds of the access token.  For example, the value \"3600\" denotes that the access token will expire in one hour from the time the response was generated. If omitted, the authorization server SHOULD provide the expiration time via other means or document the default value. */\r\n    expires_in?: number | null;\r\n    /** Auth0 connection */\r\n    connection?: string | null;\r\n    /** The resource owner username. */\r\n    username?: string | null;\r\n    /** The resource owner password. */\r\n    password?: string | null;\r\n    /** The refresh token, which can be used to obtain new access tokens. */\r\n    refresh_token?: string | null;\r\n    /** The value of the \"assertion\" parameter MUST contain a single JWT. */\r\n    assertion?: string | null;\r\n    /** The id token issued by the authorization server. */\r\n    id_token?: string | null;\r\n    /** Salaxy specific onboarding uri. */\r\n    salaxy_onboarding_uri?: string | null;\r\n    /** User interface language. */\r\n    salaxy_language?: string | null;\r\n    /** Users role. */\r\n    salaxy_role?: string | null;\r\n}\r\n\r\n/** OAuthGrantType enumeration */\r\nexport enum OAuthGrantType {\r\n    Undefined = <any>\"undefined\", \r\n    Authorization_code = <any>\"authorization_code\", \r\n    Password = <any>\"password\", \r\n    Client_credentials = <any>\"client_credentials\", \r\n    Refresh_token = <any>\"refresh_token\", \r\n    JwtBearer = <any>\"jwtBearer\", \r\n}\r\n\r\n/** OAuthResponseType enumeration */\r\nexport enum OAuthResponseType {\r\n    Undefined = <any>\"undefined\", \r\n    Code = <any>\"code\", \r\n    Token = <any>\"token\", \r\n}\r\n\r\n/** OAuthTokenType enumeration */\r\nexport enum OAuthTokenType {\r\n    Undefined = <any>\"undefined\", \r\n    Bearer = <any>\"bearer\", \r\n    Mac = <any>\"mac\", \r\n}\r\n\r\n/** OAuthError enumeration */\r\nexport enum OAuthError {\r\n    Undefined = <any>\"undefined\", \r\n    Invalid_request = <any>\"invalid_request\", \r\n    Unauthorized_client = <any>\"unauthorized_client\", \r\n    Access_denied = <any>\"access_denied\", \r\n    Unsupported_response_type = <any>\"unsupported_response_type\", \r\n    Invalid_scope = <any>\"invalid_scope\", \r\n    Server_error = <any>\"server_error\", \r\n    Temporarily_unavailable = <any>\"temporarily_unavailable\", \r\n}\r\n\r\n/** OAuthSalaxyAuthorizeMode enumeration */\r\nexport enum OAuthSalaxyAuthorizeMode {\r\n    Undefined = <any>\"undefined\", \r\n    Sign_in = <any>\"sign_in\", \r\n    Sign_up = <any>\"sign_up\", \r\n}","//----------------------\r\n// <auto-generated>\r\n//     Generated using the NSwag toolchain v14.6.3.0 (NJsonSchema v11.5.2.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\r\n// </auto-generated>\r\n//----------------------\r\n\r\n/* eslint-disable */\r\n// ReSharper disable InconsistentNaming\r\n\r\n\r\n\r\n/** Absences for a single Worker. */\r\nexport interface WorkerAbsences {\r\n    /** Account ID for the worker whose absences are recorded. */\r\n    workerId?: string | null;\r\n    /** The employment relation id for the worker whose absences are recorded. */\r\n    employmentId: string;\r\n    /** Collection of absence periods. */\r\n    periods?: AbsencePeriod[] | null;\r\n    /** Basic information for the Worker. \r\nAutomatically updated upon save based on WorkerId.\r\nMainly for the listings etc. */\r\n    workerSnapshot?: Avatar | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Period of absence */\r\nexport interface AbsencePeriod {\r\n    /** Identifies a single leave. */\r\n    id?: string | null;\r\n    /** Period for the absance. */\r\n    period?: DateRange | null;\r\n    /** Cause / type of the absence */\r\n    causeCode?: AbsenceCauseCode | null;\r\n    /** If true, the absence is paid by the employer. */\r\n    isPaid?: boolean | null;\r\n    /** If true, annual leaves are accrued from the absence. If false, these days are deducted from the accrual.\r\nBy default, you may leave this null and it always follows the IsPaid. */\r\n    isHolidayAccrual?: boolean | null;\r\n    /** Amount of salary that is paid for the absense.\r\nCurrently not in use: Would be used in Incomes Register integration. */\r\n    amount?: number | null;\r\n    /** Additional information as recorded by the Employer. */\r\n    notes?: string | null;\r\n    /** Identifier in the source system is a key defined by a source system / partner system.\r\nThis is a pass-through string that is passed to the result calculations. */\r\n    sourceId?: string | null;\r\n    /** Number of Bonus days to be paid. This is applicable only for {Palkkaus.Model.Worktime.Absences.AbsenceCauseCode.AnnualLeave}AnnualLeave. */\r\n    bonusDaysCount?: number | null;\r\n}\r\n\r\n/** Defines an avatar for an account, profile etc. - mainly the image that should be shown, names and short description */\r\nexport interface Avatar {\r\n    /** Entity type: person/company */\r\n    entityType?: LegalEntityType | null;\r\n    /** First name or company name */\r\n    firstName?: string | null;\r\n    /** Last name, for companies, this should be null */\r\n    lastName?: string | null;\r\n    /** Display name. For a person this is 'FirstName LastName' (auto-created). */\r\n    displayName?: string | null;\r\n    /** Sortable name for ordered lists etc. For a person this is 'LastName, FirstName' (auto-created).\r\nDepending on the data storage, this may be all-lowercase for easier sorting and search. */\r\n    sortableName?: string | null;\r\n    /** Type of the Avatar picture. */\r\n    pictureType?: AvatarPictureType | null;\r\n    /** Color - currently only used by type Icon */\r\n    color?: string | null;\r\n    /** Initials - currently only used by type Icon */\r\n    initials?: string | null;\r\n    /** URL of the picture if specified as picture (null in a case of type Icon) */\r\n    url?: string | null;\r\n    /** Short description of the user. \r\nThis may be overriden by a context specific value by the business logic. */\r\n    description?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Describes the range of dates from start to end and the number of days in between. */\r\nexport interface DateRange {\r\n    /** Start date of the period */\r\n    start?: string | null;\r\n    /** End date of the period. */\r\n    end?: string | null;\r\n    /** Number of days in the range.\r\nDepending of the context, this may be mathematical (end - start) or \r\nexplicitly specified (typically working days).\r\nTypically an integer, and calculations and UI's may choose to round it. */\r\n    daysCount?: number | null;\r\n    /** The collection of days contained in the DateRange if specified by the user.\r\nAlternative to DaysCount. If set, should also set DaysCount for backward compatibility. */\r\n    days?: string[] | null;\r\n}\r\n\r\nexport interface PageResultOfApiListItem {\r\n    items?: ApiListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** The line item class for search and listing results. Use this class for building user interfaces. */\r\nexport interface ApiListItem {\r\n    /** The payload type of the item. */\r\n    type?: ApiListItemType | null;\r\n    /** List item type of the item if the item supports a custom OData interface. */\r\n    listType?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: string | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: { [key: string]: any; } | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Object that represents a Salaxy account. */\r\nexport interface AccountInIndex {\r\n    /** Avatar for the account */\r\n    avatar?: Avatar | null;\r\n    /** Official id of the person or company. */\r\n    officialId?: string | null;\r\n    /** Email address. */\r\n    email?: string | null;\r\n    /** Telephone number. */\r\n    telephone?: string | null;\r\n    /** Bank account number (IBAN) */\r\n    ibanNumber?: string | null;\r\n}\r\n\r\n/** An account for a Person - can be both Employer and Worker */\r\nexport interface PersonAccount {\r\n    /** Information about the verification of the account. \r\nNOTE that this object may not be present in many method calls - this is because it contains confidential information. */\r\n    identity?: Identity | null;\r\n    /** Type of the last login - the user role */\r\n    lastLoginAs?: WebSiteUserRole | null;\r\n    /** Contact verification pin for securing contact address changes. */\r\n    contactVerificationPin?: string | null;\r\n    /** Entity type of the account.\r\nType PersonCreatedByEmployer means that the Worker has not yet signed into the system and there may be multiple instances of the same logical person (Official ID) - one for each employer. */\r\n    entityType?: LegalEntityType | null;\r\n    /** If true the object Account is and Employer account - it has the EmployerInfo object */\r\n    isEmployer?: boolean | null;\r\n    /** If true the object Account is and Worker account - it has the WorkerInfo object */\r\n    isWorker?: boolean | null;\r\n    /** If true, the account has been verified. Typically this means a digitally signed contract.\r\nThis means that the account also has an Identity object.\r\nHowever, as the Identity object contains confidential information, it is not necessarily present in all method calls. */\r\n    isVerified?: boolean | null;\r\n    /** Avatar is the visual representation of the Account. */\r\n    avatar?: Avatar | null;\r\n    /** Contact information for the Account. */\r\n    contact?: Contact | null;\r\n    /** Language of the person/company. */\r\n    language?: Language | null;\r\n    /** Service model for the account. */\r\n    serviceModelId?: string | null;\r\n    /** Workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Identity is the official identity of an actor. This part is not freely editable as changing it requires signature or some other means. Identity is also often fetched from external sources such as govenment registries. */\r\nexport interface Identity {\r\n    /** This is an official identifier of the actor:\r\nFinnish HETU (Soc. sec. number) for a Person or Y-tunnus (Company ID for a company or association) */\r\n    officialId?: string | null;\r\n    /** This is an official name of the actor.\r\nIt originates from the YTJ or Bank authentication. */\r\n    officialName?: string | null;\r\n    /** First name OR company name */\r\n    firstName?: string | null;\r\n    /** Last name\r\nAvailable only to real persons (as opposed to companies). */\r\n    lastName?: string | null;\r\n    /** The latest authorization contract that is the bases for this Identity */\r\n    contract?: AuthorizationContract | null;\r\n    /** Tha bank account number of the Worker - in Iban format. */\r\n    ibanNumber?: string | null;\r\n    /** Indicates whether the principal user of the customer is a politically exposed person or not. */\r\n    isPep?: boolean | null;\r\n    /** Mainly for company accounts, but in special cases for Persons,\r\nthis is the main Contact party and usually the signer for the account. */\r\n    primaryContact?: ContractParty | null;\r\n    /** List of roles which this account is member of. */\r\n    roles?: Role[] | null;\r\n    /** Latest contact, bank account or name update. */\r\n    identityUpdatedAt?: string | null;\r\n    /** Latest KYC update, if done. */\r\n    kycUpdatedAt?: string | null;\r\n}\r\n\r\n/** Common contact information object for Person, Company, Location etc. */\r\nexport interface Contact {\r\n    /** Contact e-mail address. Always lower invariant, trimmed and empty string set to null. */\r\n    email?: string | null;\r\n    /** Telephone number */\r\n    telephone?: string | null;\r\n    /** Street address */\r\n    street?: string | null;\r\n    /** Postal code */\r\n    postalCode?: string | null;\r\n    /** City or community (postitoimipaikka) */\r\n    city?: string | null;\r\n    /** This is the ISO code for country.\r\nCurrently, it should always be \"fi\". */\r\n    countryCode?: string | null;\r\n}\r\n\r\n/** Defines the data that IWorkflowItem must provide. */\r\nexport interface WorkflowData {\r\n    /** Workflow events for the item. */\r\n    events?: WorkflowEvent[] | null;\r\n}\r\n\r\n/** Contract / authorization document that is the bases for Salaxy acting in behalf of this account */\r\nexport interface AuthorizationContract {\r\n    /** Time when the contract was signed */\r\n    signedAt?: string | null;\r\n    /** If true, there is a valid authorization - the account has been validated. */\r\n    isSigned?: boolean | null;\r\n    /** Type of the authorization */\r\n    authorizationType?: AuthorizationType | null;\r\n    /** A person or other party that authorized the current person. */\r\n    authorizedBy?: Authority | null;\r\n}\r\n\r\n/** A signing party in a contract. */\r\nexport interface ContractParty {\r\n    /** Identifier for the party: Currently always an account, but may be an external ID later. */\r\n    id?: string | null;\r\n    /** Avatar for the Party. \r\nNote that this is not automatically fetched by all methods: Especially when IsSelf is true. */\r\n    avatar?: Avatar | null;\r\n    /** Contact information - note that for most signatures, only E-mail and phone number are required. */\r\n    contact?: Contact | null;\r\n    /** True if Profile is the current Authorization.\r\nIf set to true, will set current Authorization as this contract party.\r\nIf set to false AND was previously true, will set the Profile properties null (unless explicitly set to something else) */\r\n    isSelf?: boolean | null;\r\n    /** Official ID if needed in signature */\r\n    officialId?: string | null;\r\n    /** Role of the person - justification for authorization */\r\n    role?: string | null;\r\n    /** True if the person has signed the contract. */\r\n    isSigned?: boolean | null;\r\n    /** Reserved for cases where there are several signees and each has a separate signature document. */\r\n    signatureUrl?: string | null;\r\n    /** Bank account IBAN number */\r\n    iban?: string | null;\r\n    /** Party type (Person or Prospect) */\r\n    contractPartyType?: ContractPartyType | null;\r\n    /** If true, contact is an employer */\r\n    isEmployer?: boolean | null;\r\n}\r\n\r\n/** Event in the workflow */\r\nexport interface WorkflowEvent {\r\n    /** Event-provider specific identifier for the event.\r\nFor deletable events, this should identify , but do NOT trust this to be 100% unique. */\r\n    id?: string | null;\r\n    /** Type of the event. This typically maps to parent-object specific enumeration. */\r\n    type?: string | null;\r\n    /** Message for backoffice purposes from the User or system that created the event. */\r\n    message?: string | null;\r\n    /** User Interface styling of the event: Indicates the severity for the end-user. */\r\n    ui?: BootstrapStyle | null;\r\n    /** Features for this event. */\r\n    features?: WorkflowEventFeatures[] | null;\r\n    /** UTC time for when the event occured. */\r\n    time?: string | null;\r\n    /** User or system that created the event. */\r\n    user?: string | null;\r\n    /** Credential of the user which is responsible of the event. */\r\n    assignedTo?: string | null;\r\n    /** Record attached to this event. */\r\n    record?: string | null;\r\n}\r\n\r\n/** A person or other party that authorized the current person. */\r\nexport interface Authority {\r\n    /** Name of the authority. */\r\n    name?: string | null;\r\n    /** Telephone number of the person. This is currently optional.\r\nIdea is to send SMS invitations in some scenarios. */\r\n    telephone?: string | null;\r\n    /** E-mail of the person. This is currently not used, but is expected to be used in the future. \r\nSo fill it in as it was required unless you have very compelling reasons. */\r\n    email?: string | null;\r\n    /** Finnish Person ID is the key to signature. This is currently always required. */\r\n    personalId?: string | null;\r\n    /** The Palkkaus.fi Account ID. This is optional and should not be set if the ID is the same as the target account / Person. */\r\n    accountId?: string | null;\r\n    /** Date for the authorization. */\r\n    authorizedAt?: string | null;\r\n}\r\n\r\n/** A company account - note that this can also be an association etc. - something that has a Company ID. */\r\nexport interface CompanyAccount {\r\n    /** Information about the verification of the account. \r\nNOTE that this object may not be present in many method calls - this is because it contains confidential information. */\r\n    identity?: Identity | null;\r\n    /** High level company type */\r\n    companyType?: CompanyType | null;\r\n    /** Entity type of the account.\r\nType PersonCreatedByEmployer means that the Worker has not yet signed into the system and there may be multiple instances of the same logical person (Official ID) - one for each employer. */\r\n    entityType?: LegalEntityType | null;\r\n    /** If true the object Account is and Employer account - it has the EmployerInfo object */\r\n    isEmployer?: boolean | null;\r\n    /** If true the object Account is and Worker account - it has the WorkerInfo object */\r\n    isWorker?: boolean | null;\r\n    /** If true, the account has been verified. Typically this means a digitally signed contract.\r\nThis means that the account also has an Identity object.\r\nHowever, as the Identity object contains confidential information, it is not necessarily present in all method calls. */\r\n    isVerified?: boolean | null;\r\n    /** Avatar is the visual representation of the Account. */\r\n    avatar?: Avatar | null;\r\n    /** Contact information for the Account. */\r\n    contact?: Contact | null;\r\n    /** Language of the person/company. */\r\n    language?: Language | null;\r\n    /** Service model for the account. */\r\n    serviceModelId?: string | null;\r\n    /** Workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Represents a user credential in session: This credential is typically based on Claims and is availble without going to database. */\r\nexport interface SessionUserCredential {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** Unique identitier for the user ID coming from the Auth0 database: \r\n'[MethodText]|[ProviderId]', e.g. 'facebook|12345678901234567'\r\n(Number may contain more characters - not sure for the exact cahracters count) */\r\n    id?: string | null;\r\n    /** Avatar object that contains the visual reresentation of the User account. */\r\n    avatar?: Avatar | null;\r\n    /** E-mail address if provided by the authentication provider. */\r\n    email?: string | null;\r\n    /** The ultimate authentication provider that authenticated the user, e.g. Facebook, Google. */\r\n    authenticationMethod?: AuthenticationMethod | null;\r\n}\r\n\r\n/** User certificate. */\r\nexport interface Certificate {\r\n    /** Certificate thumbprint. */\r\n    thumbprint?: string | null;\r\n    /** Certificate bytes Used in returning the certificate to the user as PFX or ZIP.\r\nNot persisted. */\r\n    bytes?: string | null;\r\n    /** End user description for the certificate. */\r\n    title?: string | null;\r\n    /** Password for issuing a new certificate. Not persisted.\r\nAlso used for passing the CSR in request if it is passed as Base64 encoded text. Not persisted. */\r\n    password?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Avatar for authorized account. */\r\nexport interface AuthorizedAvatar {\r\n    /** Optional ID for partner authorization.\r\nUsed to restrict the authorization based on Partner data (typically user account, role etc.).\r\nCurrent implementation compares this to partnerAccountId and allows acces only if the two match. */\r\n    partnerKey?: string | null;\r\n    /** The time when the authorization was done */\r\n    authorizedAt?: string | null;\r\n    /** Scope for the account authorization.\r\nThe value of the scope  is expressed as a list of space-delimited, case-sensitive strings. */\r\n    scope?: string | null;\r\n    /** Entity type: person/company */\r\n    entityType?: LegalEntityType | null;\r\n    /** First name or company name */\r\n    firstName?: string | null;\r\n    /** Last name, for companies, this should be null */\r\n    lastName?: string | null;\r\n    /** Display name. For a person this is 'FirstName LastName' (auto-created). */\r\n    displayName?: string | null;\r\n    /** Sortable name for ordered lists etc. For a person this is 'LastName, FirstName' (auto-created).\r\nDepending on the data storage, this may be all-lowercase for easier sorting and search. */\r\n    sortableName?: string | null;\r\n    /** Type of the Avatar picture. */\r\n    pictureType?: AvatarPictureType | null;\r\n    /** Color - currently only used by type Icon */\r\n    color?: string | null;\r\n    /** Initials - currently only used by type Icon */\r\n    initials?: string | null;\r\n    /** URL of the picture if specified as picture (null in a case of type Icon) */\r\n    url?: string | null;\r\n    /** Short description of the user. \r\nThis may be overriden by a context specific value by the business logic. */\r\n    description?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Account - either Person or Company - is a juridical entity Paying or receiving salaries, making contracts etc. It may be related to zero, one or multiple UserAccounts/Credentials. */\r\nexport interface AccountBase {\r\n    /** Entity type of the account.\r\nType PersonCreatedByEmployer means that the Worker has not yet signed into the system and there may be multiple instances of the same logical person (Official ID) - one for each employer. */\r\n    entityType?: LegalEntityType | null;\r\n    /** If true the object Account is and Employer account - it has the EmployerInfo object */\r\n    isEmployer?: boolean | null;\r\n    /** If true the object Account is and Worker account - it has the WorkerInfo object */\r\n    isWorker?: boolean | null;\r\n    /** If true, the account has been verified. Typically this means a digitally signed contract.\r\nThis means that the account also has an Identity object.\r\nHowever, as the Identity object contains confidential information, it is not necessarily present in all method calls. */\r\n    isVerified?: boolean | null;\r\n    /** Avatar is the visual representation of the Account. */\r\n    avatar?: Avatar | null;\r\n    /** Contact information for the Account. */\r\n    contact?: Contact | null;\r\n    /** Language of the person/company. */\r\n    language?: Language | null;\r\n    /** Service model for the account. */\r\n    serviceModelId?: string | null;\r\n    /** Workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Provides information about a new issued certificate. */\r\nexport interface IssuedCertificate {\r\n    /** Certificate thumbprint: A unique identifier for the created certificate. */\r\n    thumbprint?: string | null;\r\n    /** Certificate bytes when the certifcate is a file. Currently PFX or ZIP. */\r\n    bytes?: string | null;\r\n    /** Certificate / public key as text (PEM) if provided by the generation process. */\r\n    cert?: string | null;\r\n    /** Private key as text (PEM) if provided by the generation process. */\r\n    key?: string | null;\r\n}\r\n\r\n/** Defines an accounting target (system), CoA and ruleset that maps the calculation to the CoA (Chart of Accounts). */\r\nexport interface AccountingTarget {\r\n    /** Information and configuration related to the system where the accounting data is to be sent. */\r\n    info?: AccountingTargetInfo | null;\r\n    /** The rule set that defines the Chart of Accounts and the mapping of salary payment to it. */\r\n    ruleSet?: AccountingRuleSet | null;\r\n    /** Readonly workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Specifies the general information of the behavior of Accounting target: Especially the channel and the related properties. */\r\nexport interface AccountingTargetInfo {\r\n    /** Basic information and visualization for the accounting target.\r\nAvatar provides the visualization and the name for the target.\r\nE-mail may be used in sending of the material and telephone in contacting the accounting target.\r\nIBAN number has no use. */\r\n    target?: AccountInIndex | null;\r\n    /** Channel is the technical transport mechanism to accounting software */\r\n    channel?: AccountingChannel | null;\r\n    /** The default export method for exports: whether automatic or manual. */\r\n    method?: ExportMethod | null;\r\n    /** If specified, defines the available methods in manual exports. */\r\n    availableMethods?: ExportMethod[] | null;\r\n    /** The default export format for tabular (csv, excel) data. */\r\n    format?: string | null;\r\n    /** Accounting channel specific data (default settings) for the accounting target setup. */\r\n    data?: { [key: string]: any; } | null;\r\n}\r\n\r\n/** Ruleset containing required tabular logic (rules) and accounts for creating accounting entries. */\r\nexport interface AccountingRuleSet {\r\n    /** Template to which this ruleset is based on. */\r\n    templateId?: string | null;\r\n    /** Accounts which are used in the tabular logic for creating accounting entries. */\r\n    accounts?: AccountingRuleSetAccount[] | null;\r\n    /** Optional target Chart of Accounts: All the accounts in the target system, not just the ones in use. */\r\n    targetCoA?: AccountingRuleSetAccount[] | null;\r\n    /** Tabular logic for creating accounting entries. */\r\n    rows?: AccountingRuleSetRow[] | null;\r\n}\r\n\r\n/** Single account with number, grouping and default text. */\r\nexport interface AccountingRuleSetAccount {\r\n    /** Id for the account. */\r\n    id?: string | null;\r\n    /** Boolean indicating if the account is non-removable template. */\r\n    isReadOnly?: boolean | null;\r\n    /** Account number. */\r\n    account?: string | null;\r\n    /** Text for the account. */\r\n    text?: string | null;\r\n}\r\n\r\n/** Contains a single row of the tabular logic for creating accounting entries. */\r\nexport interface AccountingRuleSetRow {\r\n    /** Id for the row. */\r\n    id?: string | null;\r\n    /** Entry group: income type or total type. */\r\n    entryCodeGroup?: string | null;\r\n    /** A single code in the code group: single income type code or total row type. */\r\n    entryCode?: string | null;\r\n    /** Boolean indicating if the row is non-removable template. */\r\n    isReadOnly?: boolean | null;\r\n    /** Boolean indicating if the row is in use. */\r\n    enabled?: boolean | null;\r\n    /** Boolean indicating whether the system should make an accounting entry based on this row. */\r\n    isIncluded?: boolean | null;\r\n    /** Id of the debit account. */\r\n    debitId?: string | null;\r\n    /** Grouping text for the account.\r\nIf the account has a grouping defined, it will be listed as a separate row group. */\r\n    debitGrouping?: string | null;\r\n    /** Id of the credit account. */\r\n    creditId?: string | null;\r\n    /** Grouping text for the account.\r\nIf the account has a grouping defined, it will be listed as a separate row group. */\r\n    creditGrouping?: string | null;\r\n    /** Additional flags for directing the logic for creating accounting entry based on given entries. */\r\n    flags?: string[] | null;\r\n}\r\n\r\nexport interface PageResultOfAccountingTargetListItem {\r\n    items?: AccountingTargetListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of Accounting targets. */\r\nexport interface AccountingTargetListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: AccountingTargetStatus | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: AccountingTargetData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Accounting Target specific business data for index. */\r\nexport interface AccountingTargetData {\r\n    /** Contains the email or id of the responsible for the partner workflow event. */\r\n    partnerMessageAssignedTo?: string | null;\r\n    /** Channel is the technical transport mechanism to accounting software */\r\n    channel?: AccountingChannel | null;\r\n    /** The default export method for exports: whether automatic or manual. */\r\n    method?: ExportMethod | null;\r\n    /** Available methods in manual exports (comma separated string). */\r\n    availableMethods?: string | null;\r\n    /** The default export format for tabular (csv, excel) data. */\r\n    format?: string | null;\r\n    /** Template to which this is based on. */\r\n    templateId?: string | null;\r\n}\r\n\r\n/** Request model for Assertion demo */\r\nexport interface AssertionDemoCertificateRequest {\r\n    /** Certificate bytes as Base64String */\r\n    certificateBytes?: string | null;\r\n    /** Certificate password for signing. */\r\n    password?: string | null;\r\n    /** Account to impersonate as: Will be set as sub in the token. */\r\n    subject?: string | null;\r\n    /** Potential proxy (partner) account that is in between the current user and the subject.\r\nWill be set as salaxy_proxy_act in the token. */\r\n    proxyActor?: string | null;\r\n    /** E-mail for the user / credential that is using the system.\r\nWill be set as salaxy_user.email. */\r\n    userEmail?: string | null;\r\n}\r\n\r\n/** Response model for Assertion demo */\r\nexport interface AssertionDemoCertificateResponse {\r\n    /** Token as string */\r\n    token?: string | null;\r\n    /** Token decoded for deisplay purposes. */\r\n    tokenDecoded?: any | null;\r\n    /** If there is an error creating hte certificate, it is displayed here. */\r\n    error?: string | null;\r\n}\r\n\r\n/** Contains lists of beneficial owners and other beneficiaries of the company. */\r\nexport interface BeneficialOwners {\r\n    /** Additional info about the owned company, e.g. the total number of shares. */\r\n    ownedCompanyDetails?: OwnedCompanyInfo | null;\r\n    /** List of beneficial owners of the company. */\r\n    owners?: BeneficialOwner[] | null;\r\n    /** List of other beneficiaries than beneficial owners of the company */\r\n    beneficiaries?: Beneficiary[] | null;\r\n    /** The workflow data for manual editing and approval purposes. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Contains additional info of the owned company. */\r\nexport interface OwnedCompanyInfo {\r\n    /** Total count of shares. */\r\n    totalNumberOfShares?: number | null;\r\n}\r\n\r\n/** Name and ids of the owner and the number/percent of shares. */\r\nexport interface BeneficialOwner {\r\n    /** Owned number of shares. */\r\n    numberOfShares?: number | null;\r\n    /** Owned percent of shares. */\r\n    percentOfShares?: number | null;\r\n    /** Address. */\r\n    address?: string | null;\r\n    /** Avatar for the account */\r\n    avatar?: Avatar | null;\r\n    /** Official id of the person or company. */\r\n    officialId?: string | null;\r\n    /** Email address. */\r\n    email?: string | null;\r\n    /** Telephone number. */\r\n    telephone?: string | null;\r\n    /** Bank account number (IBAN) */\r\n    ibanNumber?: string | null;\r\n}\r\n\r\n/** Other beneficiary of the company than beneficial owner. */\r\nexport interface Beneficiary {\r\n    /** Nationality of the beneficiary. */\r\n    nationality?: string | null;\r\n    /** Avatar for the account */\r\n    avatar?: Avatar | null;\r\n    /** Official id of the person or company. */\r\n    officialId?: string | null;\r\n    /** Email address. */\r\n    email?: string | null;\r\n    /** Telephone number. */\r\n    telephone?: string | null;\r\n    /** Bank account number (IBAN) */\r\n    ibanNumber?: string | null;\r\n}\r\n\r\n/** Calculation correction with state. */\r\nexport interface CalculationCorrection {\r\n    /** Editable API calculation. */\r\n    calculation?: CorrectionCalculation | null;\r\n    /** State of the calculation. */\r\n    state?: string | null;\r\n    /** Snapshot details for save. */\r\n    snapshot?: SnapshotInput | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Extensions to Corrections */\r\nexport interface CorrectionCalculation {\r\n    /** Pricing model */\r\n    pricingModel?: PricingModel | null;\r\n    /** Fixed fee */\r\n    fixedFee?: number | null;\r\n    /** Customer payments info. */\r\n    cfa?: CalcCfa | null;\r\n    /** The employer object for this calculation.\r\nTypically, you do not need to set this before the actual payment process. */\r\n    employer?: CalcEmployer | null;\r\n    /** The Worker (employee) that has performed the work. */\r\n    worker?: CalcWorker | null;\r\n    /** Information about the workflow and state of the calculation. */\r\n    workflow?: CalcWorkflow | null;\r\n    /** The main salary element. \r\nAlternatively the salary can be set in the Rows object - this will be the only way to set multiple salary rows (not yet supported). */\r\n    salary?: Salary | null;\r\n    /** Set of rows that make up the salary calculation:\r\nExpenses, Benefits, deductions etc. Note that side costs are not rows. */\r\n    rows?: UserDefinedRow[] | null;\r\n    /** DEPRECIATED: Usecase will be replacing this functionality in a next major release.\r\nThe Framework Agreement (TES) parameters that affect the framework based side costs etc. of this calculation */\r\n    framework?: TesParameters | null;\r\n    /** A usecase for creating and editing salary calculations.\r\nIn practice, a usecase is either a user interface or a microservice that provides a salary calculation\r\nand it may be implemented outside Salaxy.\r\nProvides the possibility to store useacase specific data as part of calculation.\r\nNOTE: This functionality will replace Framework property in a next major release. */\r\n    usecase?: UsecaseData | null;\r\n    /** The results of the calculation. In the API, this is a read-only object. */\r\n    result?: CalculationResult | null;\r\n    /** Information about the work that is not directly related to calculating salary and expenses. */\r\n    info?: CalcInfo | null;\r\n    /** Sharing of the calculation. This object cannot be modified directly, \r\nuse specialized methods in Calculations service. */\r\n    sharing?: CalculationSharing | null;\r\n    /** Contains calculation specific data for accounting (both cost and financial accounting). */\r\n    accounting?: CalculationAccounting | null;\r\n    /** Worktime data that is stored as part of Salary calculation:\r\nwork days, absences, holidays and holiday accrual.\r\nIn the future may also contain relevant part of timesheet data (work hours). */\r\n    worktime?: CalcWorktime | null;\r\n    /** Readonly workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Input data for calculation snapshot. */\r\nexport interface SnapshotInput {\r\n    /** Reason code for the snapshot. */\r\n    reasonCode?: number | null;\r\n    /** Severity code for snapshot case. */\r\n    severityCode?: number | null;\r\n    /** Free form description. */\r\n    description?: string | null;\r\n    /** Categories for the snapshot case. */\r\n    categories?: string[] | null;\r\n}\r\n\r\n/** Cfa allocations. */\r\nexport interface CalcCfa {\r\n    /** The date and time of allocation.\r\nThis is always UTC. */\r\n    updatedAt?: string | null;\r\n    /** The worker net salary which is booked to the customer funds account. */\r\n    net?: number | null;\r\n    /** The tax amount which is booked to the  customer funds account. */\r\n    tax?: number | null;\r\n    /** The pension amount which is booked to the  customer funds account. */\r\n    pension?: number | null;\r\n    /** The Palkkaus service which is booked to the  customer funds account. */\r\n    service?: number | null;\r\n    /** The Palkkaus fee which is booked to the  customer funds account. */\r\n    fee?: number | null;\r\n    /** The total payment booked to the  customer funds account. */\r\n    readonly total?: number | null;\r\n}\r\n\r\n/** Employer of a calculation */\r\nexport interface CalcEmployer {\r\n    /** Display image information and type of employer.\r\nNOTE: Recalculate-method retains the values for display purposes if AccountId or IsSelf is not set.\r\nThis is mainly for demo and testing in anonymous mode.\r\nHowever, in storage methods, the value is reset based on values of AccountId or IsSelf\r\neven if they are not set: Anything stored in Avatar will be ignored. */\r\n    avatar?: Avatar | null;\r\n    /** The Palkkaus.fi Account identifier for the Employer. */\r\n    accountId?: string | null;\r\n    /** True if Profile is the current Authorization.\r\nIf set to true, will set current Authorization as this contract party.\r\nThis overrides any value in AccountId, so be sure to switch this back to false if this is switchable.\r\nSetting to False does not have any immediate effect. */\r\n    isSelf?: boolean | null;\r\n    /** Current address of the employer.\r\nPlease note that this is a read only field. */\r\n    contact?: Contact | null;\r\n    /** Official id of the person or company.\r\nPlease note that this is a read only field. */\r\n    officialId?: string | null;\r\n}\r\n\r\n/** Worker object for the current calculation */\r\nexport interface CalcWorker {\r\n    /** Palkkaus.fi Account Id for the worker.\r\nAlternatively you can set the Payment data with the required infromation */\r\n    accountId?: string | null;\r\n    /** Employment Id for the worker. */\r\n    employmentId?: string | null;\r\n    /** Data that is needed for salary payment.\r\nThis object may be null if AccountId has been set. \r\nAlso, if AccountId has been set, these properties will be ignored: \r\nThe Worker will decide on payment properties herself. */\r\n    paymentData?: CalcWorkerPaymentData | null;\r\n    /** Display image and properties of the Worker. \r\nBased on either the AccountId or PaymentData */\r\n    avatar?: Avatar | null;\r\n    /** True if Profile is the currently Account\r\nIf set to true, will set current Account as this contract party.\r\nThis overrides any value in AccountId, so be sure to switch this back to false if this is switchable.\r\nSetting to False does not have any immediate effect. */\r\n    isSelf?: boolean | null;\r\n    /** Date of birth for the Worker - this affects the side costs. \r\nPlease also set the DateOfBirthAccuracy, if you set this property.\r\nIf PaymentData or AccountId lead to a valid Social security number, it will override any age set here. */\r\n    dateOfBirth?: string | null;\r\n    /** Accuracy of the date of birth\r\nIf PaymentData or AccountId lead to a valid Social security number, it will override any age set here. */\r\n    dateOfBirthAccuracy?: DateOfBirthAccuracy | null;\r\n    /** New Widthholding tax logic that is based on separately stored tax cards. */\r\n    tax?: CalcTax | null;\r\n    /** Current address of the worker.\r\nPlease note that this is a read only field. */\r\n    contact?: Contact | null;\r\n}\r\n\r\n/** Defines the properties of salary calculation workflow - typically the workflow from draft to Payment. */\r\nexport interface CalcWorkflow {\r\n    /** Status of the calculation from Draft to PaymentSucceeded */\r\n    status?: CalculationStatus | null;\r\n    /** Time when this calculation was paid (if it was paid) to Palkkaus service. */\r\n    paidAt?: string | null;\r\n    /** Time when the salary was paid by Palkkaus service. */\r\n    salaryPaidAt?: string | null;\r\n    /** Last date and time when this calculation was repaired after payment. */\r\n    repairedAt?: string | null;\r\n    /** The estimated date when the salary is withdrawable by the worker. */\r\n    salaryDate?: string | null;\r\n    /** The requested date for the SalaryDate from the employer. */\r\n    requestedSalaryDate?: string | null;\r\n    /** Defines the re-setting of the salary date in the calculation re-calculation. */\r\n    salaryDateKind?: SalaryDateKind | null;\r\n    /** The original id the calculation which this calculation is a copy of. */\r\n    originalId?: string | null;\r\n}\r\n\r\n/** Defines the main salary that is the bases for the calculation */\r\nexport interface Salary {\r\n    /** Type of the salary being calculated */\r\n    kind: SalaryKind;\r\n    /** Amount of e.g. hours, months for the salary. Default is 1. */\r\n    amount?: number | null;\r\n    /** Price of one unit - e.g. hour, month. */\r\n    price: number;\r\n    /** E.g. hour, month. Typically this parameter can be left empty/null and the unit is set according to type. */\r\n    unit?: string | null;\r\n    /** Optional message for the salary row that is shown in reports. If null, will be set according to type. */\r\n    message?: string | null;\r\n    /** If set to true, will calculate the household deduction. Applies only to natural persons - as oppsed to companies. */\r\n    isHouseholdDeductible?: boolean | null;\r\n    /** If tax IsHouseholdDeductible is set to true, please also select the category (categories). \r\nNote that \"OwnPropety\" is a default, it does not need to be set: Only set RelativesProperty if necessary. */\r\n    taxDeductionCategories?: TaxDeductionWorkCategories | null;\r\n}\r\n\r\n/** This is a user defined calculation row as opposed to CalculationRow that may be either based on a user defined row or generated by the system based on e.g. TES parameters. */\r\nexport interface UserDefinedRow {\r\n    /** Zero based row index that can be used to match the row to result rows or when deleting.\r\nNOTE: The Row ID is given values on the fly so setting this will not have any effect at the moment.\r\nIt may reorder the entries in later implementations. */\r\n    rowIndex?: number | null;\r\n    /** Wage type. Either a built in wage type in Salaxy or a custom wage type created by the user.\r\nPlease note that this type fully determines the <see cref=\"T:Palkkaus.Model.Calc.CalculationRowType\"></see> and the kind. */\r\n    type?: string | null;\r\n    /** Logical type of the row */\r\n    rowType?: CalculationRowType | null;\r\n    /** Description text of the row that is shown in reports. If null, will be set according to type. */\r\n    message?: string | null;\r\n    /** Count for the row - default is one */\r\n    count?: number | null;\r\n    /** Price for the row */\r\n    price?: number | null;\r\n    /** Unit for the row. Guessed based on the RowType and count, but you are better off setting it to be sure. */\r\n    unit?: CalculationRowUnit | null;\r\n    /** Source of the calculation row - affects how the row is handled in editing / recalculation scenarios. */\r\n    source?: CalculationRowSource | null;\r\n    /** Identifier in the source system is a key defined by a source system / partner system.\r\nThis is a pass-through string that is passed to the result calculations. */\r\n    sourceId?: string | null;\r\n    /** Accounting related data for the row. */\r\n    accounting?: RowAccounting | null;\r\n    /** Period if different than the Period of calculation.\r\nWill be reported to the National Incomes registry, but also affect some other calculations.\r\nNote that this property may be (and by default is) null. */\r\n    period?: DateRange | null;\r\n    /** Usecase specific data */\r\n    data?: { [key: string]: any; } | null;\r\n}\r\n\r\n/** Captures the collection of parameters that different Framework agreements (TES) have. */\r\nexport interface TesParameters {\r\n    /** Type of the work framework */\r\n    type?: FrameworkAgreement | null;\r\n    /** Subtype when one framework has several options */\r\n    subType?: TesSubtype | null;\r\n    /** Marker that the payments defined by framework agreement are included in the salary (will not be added by the calculation). */\r\n    isTesIncludedInSalary?: boolean | null;\r\n    /** Number of days may affect calculation of different payments calculated based on a Framework agreement */\r\n    numberOfDays?: number | null;\r\n    /** Travel expences per day */\r\n    dailyTravelExpenses?: number | null;\r\n    /** The amount of kilometers travelled by day - used to define the amount of travel expenses in aomse framework agreements. */\r\n    dailyTravelExpensesKm?: number | null;\r\n    /** Daily expenses amount */\r\n    dailyExpenses?: number | null;\r\n    /** If true will calculate the Finnish child care subsidy */\r\n    isYksityisenHoidonTuki?: boolean | null;\r\n    /** Amount of Finnish child care subsidy */\r\n    yksityisenHoidonTukiAmount?: number | null;\r\n}\r\n\r\n/** A usecase for creating and editing salary calculations and other . In practice, a usecase is either a user interface or a microservice that provides the bases for the object. Provides the possibility to store useacase specific data as part of object. NOTE: For Calculations, this functionality will replace TesParameters in the 3.0 version. */\r\nexport interface UsecaseData {\r\n    /** Key for the usecase based on which it is resolved. \r\nLater, this may resolve to a user interface, microservice or a to manifest registering one.\r\nFor now, just use a unique string starting with a domain you own. */\r\n    uri?: string | null;\r\n    /** A short label of that can be shown to the end user. */\r\n    label?: string | null;\r\n    /** Optional description of the use case for the end user.\r\nShown in detail views when explaining the logic of the usecase. */\r\n    description?: string | null;\r\n    /** Usecase specific data */\r\n    data?: { [key: string]: any; } | null;\r\n}\r\n\r\nexport interface CalculationResult {\r\n    /** Calculation totals that are common to both Worker and Employer. */\r\n    totals?: TotalCalculationDTO | null;\r\n    /** Rows that are compatible with Incomes Register (tulorekisteri) process.\r\nThese are available only for calculations paid after 7.2.2019 (TODO: estimation as of writing). */\r\n    irRows?: IrRow[] | null;\r\n    /** The calculation from the Employer point-of-view */\r\n    employerCalc?: EmployerCalculationDTO | null;\r\n    /** The calculation from the Worker point-of-view */\r\n    workerCalc?: WorkerCalculationDTO | null;\r\n    /** The result rows. Note that this collection also contains the main Salary entry as one of the rows. */\r\n    rows?: ResultRow[] | null;\r\n    /** Responsibilities of Employer and parameters that affect those responsibilities. */\r\n    responsibilities?: IEmployerResponsibilities | null;\r\n    /** The validation result for the current calculation.\r\nPlease note that this is not serialized into the data storage. */\r\n    validation?: ApiValidation | null;\r\n}\r\n\r\n/** Informational object that stores data about the salary calculation / payment that is not directly related to calculating the salary. */\r\nexport interface CalcInfo {\r\n    /** Start date of the work */\r\n    workStartDate?: string | null;\r\n    /** End date of the work */\r\n    workEndDate?: string | null;\r\n    /** Description of the work for reporting purposes. Max 32 chars. */\r\n    workDescription?: string | null;\r\n    /** Message from worker to employer - when worker sends the salary calculation to the employer. */\r\n    workerMessage?: string | null;\r\n    /** Message which will be displayed in the payslip. */\r\n    salarySlipMessage?: string | null;\r\n    /** Payment reference number in payment service */\r\n    paymentId?: string | null;\r\n    /** Original Payment reference number */\r\n    originalPaymentId?: string | null;\r\n    /** Earnings Payment Report Official id of the sender. */\r\n    irSenderOfficialId?: string | null;\r\n    /** Channel that is used for payment. */\r\n    paymentChannel?: PaymentChannel | null;\r\n    /** Application id for invoicing etc. purposes. */\r\n    applicationId?: string | null;\r\n    /** The MessageThread Id, if this calculation is referred in a message thread. */\r\n    messageThreadId?: string | null;\r\n    /** Assumed earnings payment report date for the report. */\r\n    reportDate?: string | null;\r\n    /** Notes related to the payment and other backoffice operations: \r\nFor example the justification why the sum is in calculation vs. Paytrail payment. */\r\n    backofficeNotes?: string | null;\r\n    /** Occupation classification, used at least for Accident insurance purposes, but may be used for other reporting. \r\nFor Finnish Salaries use the Statistics Finland \r\n\"Classification of Occupations 2010\" (TK10): https://www.stat.fi/meta/luokitukset/ammatti/017-2018-05-15/index_en.html */\r\n    occupationCode?: string | null;\r\n    /** Secondary occupation classification. Some earnings payment reports may require two occupation codes. */\r\n    occupationCode2?: string | null;\r\n    /** Applicable collective agreement */\r\n    cbaCode?: number | null;\r\n    /** Employee group. */\r\n    employeeGroup?: string | null;\r\n    /** Calculated pension insurance payment date. */\r\n    pensionPaymentDate?: string | null;\r\n    /** Pension insurance reference number. */\r\n    pensionPaymentRef?: string | null;\r\n    /** Pension insurance payment specifier. */\r\n    pensionPaymentSpecifier?: string | null;\r\n    /** The Payroll Id, if this calculation is part of a Payroll list. */\r\n    payrollId?: string | null;\r\n    /** Cost center for reporting purposes. */\r\n    costCenter?: string | null;\r\n    /** Identifier of the worker in a source system. Used in imports etc.\r\nThis is automatically set from the source id of the employment. */\r\n    workerSourceId?: string | null;\r\n    /** Identifier of the calculation in a source system. Used in imports etc. */\r\n    sourceId?: string | null;\r\n}\r\n\r\n/** Defines the properties related to sharing and sending of the calculation. */\r\nexport interface CalculationSharing {\r\n    /** Type of sharing for this calculation. */\r\n    type?: SharingUriType | null;\r\n    /** Sharing uri. */\r\n    uri?: string | null;\r\n    /** Email address to which the calculation was shared last time. */\r\n    lastSharedTo?: string | null;\r\n    /** Email address which the calculation was shared as cc last time. */\r\n    lastSharedCc?: string | null;\r\n    /** Last shared message to the employer */\r\n    lastSharedMessage?: string | null;\r\n}\r\n\r\n/** Contains calculation specific data for accounting (both cost and financial accounting). */\r\nexport interface CalculationAccounting {\r\n    /** Values for cost accounting dimensions */\r\n    dimensions?: CostAccountingDimension[] | null;\r\n}\r\n\r\n/** Worktime data that is stored as part of Salary calculation: work days, absences, holidays and holiday accrual. In the future may also contain relevant part of timesheet data (work hours). */\r\nexport interface CalcWorktime {\r\n    /** Employment period that is updated from employment at each recalculation (as opposed to holiday specification). */\r\n    employmentPeriod?: DateRange | null;\r\n    /** Wage basis from the current employment relation.\r\nThis is for absences and does not presume that holiday years exist for the worker. */\r\n    wageBasis?: WageBasis | null;\r\n    /** Describes the working days in the period.\r\nCurrently, uses the DaysCount, but later the full days array will be taken to use.\r\nThis includes the absence days (divider in AbsencesDaySalary). */\r\n    workDays?: DateRange | null;\r\n    /** Periods of 'absences'. */\r\n    absencesPeriods?: AbsencePeriod[] | null;\r\n    /** Price for a single absence day. Typically based on MonthlySalary, but may be modified. */\r\n    absencesDailySalary?: number | null;\r\n    /** Specification for the holiday calculation */\r\n    holidaySpec?: HolidaySpecificationForYear | null;\r\n    /** Price for a single holiday day */\r\n    leavesDailySalary?: number | null;\r\n    /** Price for a single bonus day */\r\n    bonusDailySalary?: number | null;\r\n    /** Total remaining amount of holiday pay accrual. */\r\n    holidayPayAccrualRemaining?: number | null;\r\n    /** Total remaining amount of holiday bonus accrual. */\r\n    holidayBonusAccrualRemaining?: number | null;\r\n    /** Accruals for each calendar month in this calculation. */\r\n    accruals?: MonthlyHolidayAccrual[] | null;\r\n    /** Specification for the accrual calculation */\r\n    accrualSpec?: HolidayAccrualCalcSpecification | null;\r\n}\r\n\r\n/** The required information for paying the Salary to Worker. */\r\nexport interface CalcWorkerPaymentData {\r\n    /** First name of the person. */\r\n    firstName?: string | null;\r\n    /** Last name / Surname of the person. */\r\n    lastName?: string | null;\r\n    /** Gets the Social security number the way the user set it in input.\r\nHOWEVER: The getter will change the string to upper invariant/trim and if the last character is \"*\", it will be replaced by calculated checksum. */\r\n    socialSecurityNumber?: string | null;\r\n    /** Social security number if valid or null */\r\n    readonly socialSecurityNumberValid?: string | null;\r\n    /** IBAN number for the Bank account */\r\n    ibanNumber?: string | null;\r\n    /** Contact e-mail address. */\r\n    email?: string | null;\r\n    /** Telephone number */\r\n    telephone?: string | null;\r\n}\r\n\r\n/** Tax card information stored as part of the Calculation object */\r\nexport interface CalcTax {\r\n    /** Identifier for a stored tax card if one is applied to this calculation.\r\nSystem updates the TaxCardId automatically in Recalculate / Save if it finds a better candidate\r\nand also updates the Snapshot. */\r\n    taxcardId?: string | null;\r\n    /** Snapshot of the tax card for salary slip etc. purposes.\r\nUpdated in Recalculate / Save based on TaxCardId */\r\n    snapshot?: TaxcardSnapshot | null;\r\n    /** Possibility to set a fixed widthholding tax amount for this calculation regardless of \r\nthe percentage etc. in the tax card. */\r\n    fixedTaxAmount?: number | null;\r\n    /** The API returns true if there is a valid taxcard for the PaidAt date for this calculation\r\nor if FixedTaxAmount is set for th calculation. */\r\n    isValid?: boolean | null;\r\n    /** Calculated widthholding tax. Note that this is an estimation until the calculation is actually paid.\r\nAlso, if the salary is not paid as cash (e.g. fringe benefits), there may not be enough money to make the full deduction. */\r\n    estimatedTax?: number | null;\r\n    /** A flag that during last recalculation, there was a new shared taxcard that was waiting approval. */\r\n    hasNewSharedCard?: boolean | null;\r\n    /** Tax percent that is used in visualization. This is mainly used in Unit testing and anonymous calcultors.\r\nNot used in real paid calculations. This is percent. I.e. for 50% set 50, not 0.5.\r\nIf PaymentData or AccountId lead to a valid tax card type and percent, or if there is FixedTaxAmount, this value is not used. */\r\n    taxPercentForVisualization?: number | null;\r\n}\r\n\r\n/** Provides row specific data for accounting (both cost and financial accounting). */\r\nexport interface RowAccounting {\r\n    /** Percent for VAT calculation expressed as decimal: 24% is 0.24. */\r\n    vatPercent?: number | null;\r\n    /** Total VAT amount splitted by VAT rates.\r\nPlease note, that if both {Palkkaus.Model.Calc.RowAccounting.VatPercent} and the {Palkkaus.Model.Calc.RowAccounting.VatEntries} with some entries given,\r\nthe {Palkkaus.Model.Calc.RowAccounting.VatEntries} are applied.\r\nPlease note that this is null by default. */\r\n    vatEntries?: VatEntry[] | null;\r\n    /** Values for cost accounting dimensions */\r\n    dimensions?: CostAccountingDimension[] | null;\r\n    /** Row accounting entries for overriding standard accounting logic. */\r\n    entry?: RowAccountingEntry | null;\r\n}\r\n\r\n/** Calculates the total numbers - the ones that are common to Employer and worker. */\r\nexport interface TotalCalculationDTO {\r\n    /** The total pension payment for this calculation */\r\n    pension?: number | null;\r\n    /** The total unemployment payment sum. */\r\n    unemployment?: number | null;\r\n    /** The total of all calculation rows */\r\n    total?: number | null;\r\n    /** The base salary without overtime and other such additions that are part of gross salary. */\r\n    totalBaseSalary?: number | null;\r\n    /** Gross salary is the salary including additions like overtime, but not benefits or expenses */\r\n    totalGrossSalary?: number | null;\r\n    /** Taxable salary is the salary from the taxation point of view - includes some benefits. */\r\n    totalTaxable?: number | null;\r\n    /** Deduction from TotalTaxable to tax at source calculation. */\r\n    taxAtSourceDeduction?: number | null;\r\n    /** DEPRICATED: This is now the same as TotalPensionInsuranceBase. For other social insurances, you may want to use \r\nTotalUnemploymentInsuranceBase, TotalHealthInsuranceBase or TotalAccidentInsuranceBase, */\r\n    totalSocialSecurityBase?: number | null;\r\n    /** Base income for calculating the Pension insurance contributions. */\r\n    totalPensionInsuranceBase?: number | null;\r\n    /** Base income for calculating the Unemployment insurance contributions. */\r\n    totalUnemploymentInsuranceBase?: number | null;\r\n    /** Base income for calculating the Health insurance contributions. */\r\n    totalHealthInsuranceBase?: number | null;\r\n    /** Base income for calculating the Accident insurance contributions. */\r\n    totalAccidentInsuranceBase?: number | null;\r\n    /** Tax free expenses. */\r\n    totalExpenses?: number | null;\r\n    /** Total sum of rows that are paid through Salaxy Customer Funds account.\r\nThis is the Gross sum before side costs, deductions etc., but it is not Gross salary as it includes expenses etc. */\r\n    totalPayable?: number | null;\r\n}\r\n\r\n/** Business level modeling corresponding to WageReportsToIRTypes Transaction. Also contains additional data for accounting and integration purposes. */\r\nexport interface IrRow {\r\n    /** Type of the row - basically describes the source for this row: \r\nEither Manual (default) or Usecase logic, which may be legacy / API v02 or new / API v03. */\r\n    type?: IrRowSourceType | null;\r\n    /** Description text of the row that is shown in reports. */\r\n    message?: string | null;\r\n    /** Count for the row. Default is one. */\r\n    count?: number | null;\r\n    /** Price for the row. */\r\n    price?: number | null;\r\n    /** Simple multiplication: Count * Price - no other logic. Not used as Input. */\r\n    total?: number | null;\r\n    /** Unit for the row. If specified as Undefined, set by the server-logic based on row type etc. */\r\n    unit?: Unit | null;\r\n    /** Details for the National Incomes registry */\r\n    irData?: IrDetails | null;\r\n    /** Details from Salaxy internal calulcation point-of-view (logic not in IR). */\r\n    calcData?: IrRowCalculationProperties | null;\r\n    /** Earnings period if different than the report period.\r\nNote that this property may be (and by default is) null. */\r\n    earningPeriod?: DateRange | null;\r\n    /** Period for the calculation row. This is mainly used for absences (AbsencePeriod row type), leaves and holidays (HolidaySalary, HolidayBonus and HolidayCompensation).\r\nNote that this property may be (and by default is) null. */\r\n    period?: DateRange | null;\r\n    /** Accounting related data for the row. */\r\n    accounting?: RowAccounting | null;\r\n    /** Usecase specific data */\r\n    data?: { [key: string]: any; } | null;\r\n}\r\n\r\n/** Models the business logic of Employer side of the calculation. For documentation, see the IEmployerCalculation interface. */\r\nexport interface EmployerCalculationDTO {\r\n    /** All side cost: The mandatory side costs + Palkkaus and partner fees */\r\n    allSideCosts?: number | null;\r\n    /** The final cost after household decuction from the tax authorities:\r\nAdd to the payment the deductions (paid by employer) and deduct House hold deduction (later potentially other such subsidies) */\r\n    finalCost?: number | null;\r\n    /** Household deduction that the tax man will reimburse in taxation.\r\nThis is an estimation: There is minimum and maximum limits etc. */\r\n    householdDeduction?: number | null;\r\n    /** The mandatory side costs are Pension (TyEL), Social secuirty and Unemployment insurance. */\r\n    mandatorySideCosts?: number | null;\r\n    /** The Palkkaus.fi fee including potential partner fees. */\r\n    palkkaus?: number | null;\r\n    /** Extra service charge in addition to Palkkaus fee. */\r\n    service?: number | null;\r\n    /** The part of the Pension that Employer pays */\r\n    pension?: number | null;\r\n    /** The social security payment- paid as part of taxation (ennakonpidätys). */\r\n    socialSecurity?: number | null;\r\n    /** Total payment that is Paid to Palkkaus.fi */\r\n    totalPayment?: number | null;\r\n    /** Total payment using pre Insiders register calculation logic.\r\nDEPRICATED: This is provided for special scenarios and may be removed without warning */\r\n    totalPaymentLegacy?: number | null;\r\n    /** Total salary cost is the paid salary, deductions and side costs, but not expenses. */\r\n    totalSalaryCost?: number | null;\r\n    /** The part of the unemployment insurance that the employer pays */\r\n    unemployment?: number | null;\r\n    /** Total deductions that are made from the payment that is paid to Palkkaus and then to Worker */\r\n    totalDeductions?: number | null;\r\n    /** Union payment if it is deducted from the final figure */\r\n    deductionUnionPayment?: number | null;\r\n    /** Pension payments, when paid directly by the Employer - not by Palkkaus.fi */\r\n    deductionPensionSelfPayment?: number | null;\r\n    /** Unemployment insurance (TVR) payments, when paid directly by the Employer - not by Palkkaus.fi */\r\n    deductionUnemploymentSelfPayment?: number | null;\r\n    /** Salary advance - this part has already been paid. */\r\n    deductionSalaryAdvance?: number | null;\r\n    /** Foreclosure that has already been paid by the employer. */\r\n    deductionForeclosure?: number | null;\r\n    /** Tax and social security payments, when paid directly by the Employer - not by Palkkaus.fi */\r\n    deductionTaxAndSocialSecuritySelfPayment?: number | null;\r\n    /** Worker salary and expense payments, when paid directly by the Employer - not by Palkkaus.fi */\r\n    deductionWorkerSelfPayment?: number | null;\r\n    /** Foreclosure that Palkkaus.fi pays in behalf of employer. */\r\n    foreclosureByPalkkaus?: number | null;\r\n    /** Other deductions that are deducted from the net salary. */\r\n    deductionOtherDeductions?: number | null;\r\n}\r\n\r\n/** The Worker side of the calculation. SalarySlip is largely written based on this calculation. */\r\nexport interface WorkerCalculationDTO {\r\n    /** The benefits as valued by the tax authority. */\r\n    benefits?: number | null;\r\n    /** All the items that are deducted from the salary (this is also the order if there is not enough payable money):\r\nSalaryAdvance + Tax + Pension + UnemploymentInsurance + UnionPayment + OtherDeductions */\r\n    deductions?: number | null;\r\n    /** The payment that is made to the Worker based on salary after all deductions.\r\nDoes not include expenses. */\r\n    salaryPayment?: number | null;\r\n    /** The salary advance that was paid to the Worker */\r\n    salaryAdvance?: number | null;\r\n    /** The foreclosure that been deducted from the salary by the employer. */\r\n    foreclosure?: number | null;\r\n    /** Ennakonpidätys: The taxes that were deducted from the worker salary. */\r\n    tax?: number | null;\r\n    /** Lähdevero: The tax at source that were deducted from the worker salary. */\r\n    taxAtSource?: number | null;\r\n    /** Net salary after tax - before worker foreclosure or deductions of the side costs */\r\n    salaryAfterTax?: number | null;\r\n    /** Net salary after tax and foreclosure. */\r\n    salaryAfterTaxAndForeclosure?: number | null;\r\n    /** Part of the Pension that is taken from the Worker side of the salary. */\r\n    pension?: number | null;\r\n    /** Workers part of the unemployment insurance. */\r\n    unemploymentInsurance?: number | null;\r\n    /** The social security payment. NOT paid as a part of tax withhold . */\r\n    socialSecurity?: number | null;\r\n    /** The union payment that is deducted from the Worker salarya s per workers request. */\r\n    unionPayment?: number | null;\r\n    /** Widthholding tax: The original calulated version - there might not be enough money to finally pay this. */\r\n    fullTax?: number | null;\r\n    /** Tax at source: The original calulated version - there might not be enough money to finally pay this. */\r\n    fullTaxAtSource?: number | null;\r\n    /** The salary advance that was paid to the Worker\r\nThe original calulated version - there might not be enough money to finally pay this. */\r\n    fullSalaryAdvance?: number | null;\r\n    /** Part of the Pension that is taken from the Worker side of the salary.\r\nThe original calulated version - there might not be anough money to finally pay this. */\r\n    fullPension?: number | null;\r\n    /** Workers part of the unemployment insurance.\r\nThe original calulated version - there might not be anough money to finally pay this. */\r\n    fullUnemploymentInsurance?: number | null;\r\n    /** The social security payment. NOT paid as a part of tax withhold .\r\nThe original calculted version. */\r\n    fullSocialSecurity?: number | null;\r\n    /** The union payment that is deducted from the Worker salarya s per workers request. */\r\n    fullUnionPayment?: number | null;\r\n    /** The sum that is at the end paid to the Worker:\r\nSalary payment + expenses */\r\n    totalWorkerPayment?: number | null;\r\n    /** Total payment using pre Insiders register calculation logic.\r\nDEPRICATED: This is provided for special scenarios and may be removed without warning */\r\n    totalWorkerPaymentLegacy?: number | null;\r\n    /** The side costs that are deducted from the Worker salary according to law:\r\nPension, Unemployment and Union payment. Tax is not included in this number.\r\nThis is not an official number, really used in the charts etc. */\r\n    workerSideCosts?: number | null;\r\n    /** Other deductions that are deducted from the net salary.\r\nThe original calulated version - there might not be enough money to finally deduct this. */\r\n    fullOtherDeductions?: number | null;\r\n    /** Part of the other deductions that are deducted from the net salary. */\r\n    otherDeductions?: number | null;\r\n    /** Prepaid expenses that are deducted from the expenses to be paid to the worker.\r\nThe original calulated version - there might not be enough money to finally deduct this. */\r\n    fullPrepaidExpenses?: number | null;\r\n    /** Part of the prepaid expenses that are deducted from the expenses. */\r\n    prepaidExpenses?: number | null;\r\n}\r\n\r\n/** Defines a Calculation row in the calculation results */\r\nexport interface ResultRow {\r\n    /** Row index that matches this row to a user defined row (which is zero-based).\r\nIf the row is generated by calculation business logic (e.g. based on framework agreement), the index is -1. */\r\n    userRowIndex?: number | null;\r\n    /** Wage type. Either a built in wage type in Salaxy or a custom wage type created by the user.\r\nPlease note that this type fully determines the <see cref=\"T:Palkkaus.Model.Calc.CalculationRowType\"></see> and the kind. */\r\n    type?: string | null;\r\n    /** Logical type of the row */\r\n    rowType?: CalculationRowType | null;\r\n    /** Source of the calculation row - affects how the row is handled in editing / recalculation scenarios. */\r\n    rowSource?: CalculationRowSource | null;\r\n    /** Description text of the row that is shown in reports. If null, will be set according to type. */\r\n    message?: string | null;\r\n    /** Count for the row - default is one */\r\n    count?: number | null;\r\n    /** Price for the row */\r\n    price?: number | null;\r\n    /** Unit for the row */\r\n    unit?: CalculationRowUnit | null;\r\n    /** Total for the row - always Price * Count */\r\n    total?: number | null;\r\n    /** Base salary (Peruspalkka) is the monthly salary or total salary without addiotions (overtime, holidays etc.) */\r\n    totalBaseSalary?: number | null;\r\n    /** Gross salary (Bruttopalkka) is \"real\" salary including the additions (overtime, holidays etc.) but not benefits. */\r\n    totalGrossSalary?: number | null;\r\n    /** Taxable income (Ennakonpidätyksen alainen ansio) is the salary from taxation point-of-view. It is basically the Gross Salary plus benefits. */\r\n    totalTaxable?: number | null;\r\n    /** Social Security Base (Sosiaaliturvan alainen ansio) is typically the same as TotalTaxable, \r\nbut e.g. child care subsidy (yksityisen hoidon tuki) is handled differently. */\r\n    totalSocialSecurityBase?: number | null;\r\n    /** Taxfree expenses compensation */\r\n    totalExpenses?: number | null;\r\n    /** Deductions from the salary: Union payment, Advance, Foreclosure */\r\n    totalDeduction?: number | null;\r\n    /** Identifier in the source system is a key defined by a source system / partner system.\r\nThis is a pass-through string that is kept as-is in the Salaxy system. */\r\n    sourceId?: string | null;\r\n    /** Period if different than the Period of calculation.\r\nWill be reported to the National Incomes registry, but also affect some other calculations.\r\nNote that this property may be (and by default is) null. */\r\n    period?: DateRange | null;\r\n    /** Accounting related data for the row. */\r\n    accounting?: RowAccounting | null;\r\n    /** Usecase specific data */\r\n    data?: { [key: string]: any; } | null;\r\n}\r\n\r\n/** Parameters that affect the calculation. EmployerResponsibilities is historical name - currentlty to object holds also other properties that are not well described as responsibilities. These based on the EmployerGroups selection or properties of the Employer and Worker snapshots as well as this Calculation */\r\nexport interface IEmployerResponsibilities {\r\n    /** Employer groups that are set on Example calculations.\r\nThese will be replaced by properties from Worker / Employer when these persons are set. */\r\n    employerGroups?: EmployerGroups | null;\r\n    /** Pension is not paid if the salary to this Worker is less than a certain amount in a month (about 60€)\r\nor worker is less than 17 or more than 64 years old. */\r\n    readonly noPensionPayment?: boolean | null;\r\n    /** If worker is less than 16 or more than 67, social secuiry payment is not paid */\r\n    readonly noSocialSecurity?: boolean | null;\r\n    /** If Worker is less than 17 or more than 64, TVR is not paid.\r\nAlso if the Employer has no accident insurance. */\r\n    readonly noTvr?: boolean | null;\r\n    /** The name of the Pension company because this affects the Pension percentage used in the calculation (only in contract situation).\r\nIt also needs to be shown in the reports. */\r\n    readonly pensionCompany?: PensionCompany | null;\r\n    /** Pension discount percent. */\r\n    readonly pensionDiscountPercent?: number | null;\r\n    /** Customer specific pension percent. */\r\n    readonly pensionPercent?: number | null;\r\n    /** Company for the current insurance */\r\n    readonly insuranceCompany?: InsuranceCompany | null;\r\n    /** Percent for calculating the estimate for the accident insurance amount to pay. */\r\n    readonly insurancePercent?: number | null;\r\n    /** Percent for calculating the estimate for the group life insurance amount to pay. */\r\n    readonly groupLifeInsurancePercent?: number | null;\r\n    /** Accident insurance contract number. */\r\n    readonly insuranceContractNumber?: string | null;\r\n    /** If the Worker is from 53 to 62 years old, more of the Pension payment \r\nis deducted from the Worker side of the salary (less for the Employer).\r\nNOTE: People from 63 to 67 years pay the same amount as 17-52 years old. */\r\n    readonly pensionOldAgePayment?: boolean | null;\r\n    /** The employer should have a Pension contract (not a temporary employer).\r\nIt does not necessarily mean that the user has a contract yet.\r\nNOTE: At the moment, this is not used for calculation - only in the Side costs visualizer tool. */\r\n    readonly pensionRegularEmployer?: boolean | null;\r\n    /** If true, the employer has a Pension contract and makes the payments \r\nin a monthly schedule which means that Pension interest is calculated for the 20th of the next month.\r\nCurrently, this is only enabled to Etera - other companies will follow. */\r\n    readonly isPensionMonthlyContract?: boolean | null;\r\n    /** If true, the employer pays the Unemployment insurance directly to TVR.\r\nAs of writing, this is true for all companies and with calculations starting 1.8.2018,\r\nfalse for households or calculations before the date. */\r\n    readonly unemploymentSelfPayment?: boolean | null;\r\n    /** The assumed salary payment date from the worker perspective.\r\nThe system calculates the nearest possible salary date if no any salary date has been given by the\r\nemployer. If given, the system confirms the given date.\r\nThis date affects the yearly percents used in the salary calculation. */\r\n    readonly calculationPaymentDate?: string | null;\r\n    /** The age range that is used in the business logic that determines the employer responsibilities.\r\nThis property replaces the EmployerGroups.AgeRange that was previous get/set. \r\nThis is based on WorkerDateOfBirth and CalculationPaymentDate. */\r\n    readonly pensionAgeRange?: AgeRange | null;\r\n    /** Date of birth for the Worker - this affects the side costs. \r\nPlease also set the DateOfBirthAccuracy, if you set this property.\r\nIf SocialSecurityNumber is set, it will override any value set here. */\r\n    readonly workerDateOfBirth?: string | null;\r\n    /** Accuracy of the date of birth\r\nIf SocialSecurityNumber is set, it will override any value set here. */\r\n    readonly workerDateOfBirthAccuracy?: DateOfBirthAccuracy | null;\r\n    /** Pension calculation type. */\r\n    pensionCalculation?: PensionCalculation | null;\r\n    /** Rules (e.g. effect of monthly lower limit) for pension calculation. */\r\n    pensionRule?: PensionRule | null;\r\n    /** Type of the employment relation */\r\n    employmentType?: EmploymentRelationType | null;\r\n    /** Taxcard type from the employment point of view. */\r\n    employmentTaxcard?: EmploymentRelationTaxcard | null;\r\n    /** Worker's preferred salary payment method: bank account, external etc. */\r\n    salaryPaymentMethod?: EmploymentRelationSalaryPaymentMethod | null;\r\n    /** Type of additional income earner data by National Incomer Register classification . If several types apply, all of them should be selected. */\r\n    irIncomeEarnerTypes?: IncomeEarnerType[] | null;\r\n    /** Sub organization code for the Incomes Registry. */\r\n    readonly subOrgCode?: string | null;\r\n    /** Employment registration code for Incomes Registry. */\r\n    employmentRegCode?: string | null;\r\n    /** Tax and social security payments are paid directly by the Employer - not by Palkkaus.fi */\r\n    readonly taxAndSocialSecuritySelfPayment?: boolean | null;\r\n    /** Worker salary and expense payments are paid directly by the Employer - not by Palkkaus.fi */\r\n    readonly workerSelfPayment?: boolean | null;\r\n    /** Pension payments are paid directly by the Employer - not by Palkkaus.fi */\r\n    readonly pensionSelfPayment?: boolean | null;\r\n    /** Pension insurance contract number. */\r\n    readonly pensionContractNumber?: string | null;\r\n    /** Status for indicating whether the total amount of paid salaries exceeds the thresold for higher unemployment insurance percent. */\r\n    readonly unemploymentPayrollLimitStatus?: UnemploymentPayrollLimitStatus | null;\r\n    /** Options for the delivery of the payslip to the worker. */\r\n    readonly salarySlipDeliveryMethods?: WorkerSalarySlipDeliveryMethod[] | null;\r\n}\r\n\r\n/** Common base class / interface for data validation. */\r\nexport interface ApiValidation {\r\n    /** If true, the data is valid - no errors. */\r\n    readonly isValid?: boolean | null;\r\n    /** If true, has required fields missing data. */\r\n    readonly hasAllRequiredFields?: boolean | null;\r\n    /** Validation errors on invalid field values. \r\nNote that required fields missing error messages are not here. Only the invalid values. */\r\n    readonly errors?: ApiValidationError[] | null;\r\n}\r\n\r\n/** Id of the cost accounting dimension with optional percentage for shared costs. */\r\nexport interface CostAccountingDimension {\r\n    /** Dimension Id. */\r\n    id?: string | null;\r\n    /** Cost accounting dimension value id. */\r\n    value?: string | null;\r\n    /** Sharing percent for the dimension. */\r\n    percent?: number | null;\r\n}\r\n\r\n/** Extends the Holiday specification with the properties of employment relation that are required for a specific year. */\r\nexport interface HolidaySpecificationForYear {\r\n    /** Wage basis for a Holiday Year.\r\nWhen this is changed, you need to make a rerun to the previous calculations in the holiday year.\r\nNOTE: This is not in HolidaySpecification because, the same value is stored in Employment relation. */\r\n    wageBasis?: WageBasis | null;\r\n    /** Employment period for the purposes of holiday calculation (annual leave accrual).\r\nWhen this is changed, you need to make a rerun to the previous calculations in the holiday year. */\r\n    employmentPeriod?: DateRange | null;\r\n    /** Defines how the holidays are handled for the worker. */\r\n    code?: HolidayCode | null;\r\n    /** Defines how the holiday pay is calculated. */\r\n    holidayPayCalculation?: HolidayPayCalculation | null;\r\n    /** Defines the number of holidays that the worker is entitled per month worked.\r\nIf the value is set to 0 (default), the number is 2 for first year and 2,5 thereafter as defined in the law.\r\nTo actually se the daysPerMonth to zero, use code value other than Permanent14Days or Permanent35Hours. */\r\n    accrualFixed?: number | null;\r\n    /** For {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.HolidayCompensation} the compensation percent.\r\nHoliday compensation as percent of salary (11.5% is 0.115) */\r\n    compensation?: number | null;\r\n    /** For {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.PercentageBasedPay} the percent.\r\nHoliday pay as percent of salary (11.5% is 0.115) */\r\n    holidayPayPercent?: number | null;\r\n    /** Method for paying holiday bonus in this salary calculation. */\r\n    bonusMethod?: HolidayBonusPaymentMethod | null;\r\n    /** Holiday bonus for the worker (lomaraha, lomaltapaluuraha).\r\nTypically 0.5 for 50%. */\r\n    bonus?: number | null;\r\n}\r\n\r\n/** Holiday Accrual for a calendar month in releation to a calculation. */\r\nexport interface MonthlyHolidayAccrual {\r\n    /** First day of month for the holiday month */\r\n    month?: string | null;\r\n    /** Holiday accrual for this month.\r\nNote that -1 is indication that accrual should not be updated for this particylar month.\r\nThere is no possiblity for negative accrual. */\r\n    daysAccrued?: number | null;\r\n    /** Number of absence days used in the calculation. */\r\n    absencesDays?: number | null;\r\n    /** Work days in determining the accrual for the month in 14 days rule. */\r\n    workDays?: number | null;\r\n    /** Work hours in determining the accrual fot the month in 35 hour rule. */\r\n    workHours?: number | null;\r\n    /** Id of the calculation that this accrual is related to. */\r\n    calcId?: string | null;\r\n}\r\n\r\n/** Info covering most important accrual year parameters. */\r\nexport interface HolidayAccrualCalcSpecification {\r\n    /** Year as integer */\r\n    year?: number | null;\r\n    /** Defines how the holidays are handled for the worker. */\r\n    code?: HolidayCode | null;\r\n    /** Wage basis for a Holiday Year. */\r\n    wageBasis?: WageBasis | null;\r\n    /** Default accrual for months where the Accrual occurs. */\r\n    defaultAccrual?: number | null;\r\n}\r\n\r\n/** Basic information about the taxcard: This object has the information printed in SalarySlip etc. but not the full salaries paid to the taxcard etc. */\r\nexport interface TaxcardSnapshot {\r\n    /** Year that the tax card is valid for. Typically this means from February of this year to January of the following. */\r\n    forYear: number;\r\n    /** Validity for the taxcard as expressed in the card.\r\nNote that the end date may not be reliable if new taxcard has replaced this one. */\r\n    validity?: DateRange | null;\r\n    /** Tax percent as percent. I.e. for 50% set 50, not 0.5. */\r\n    taxPercent?: number | null;\r\n    /** Income up to which the TaxPercent can be used.\r\nAny income above the limit is taxed with ExcessTaxPercent. */\r\n    incomeLimit?: number | null;\r\n    /** Cumulative income on the taxcard - including this calculation.\r\nNote that with shared taxcards, this may include income from other employers. */\r\n    cumulativeIncome?: number | null;\r\n    /** Tax percentage that is used in calculating the widthholding tax for the part of income above the IncomeLimit.\r\nThis is percent. I.e. for 50% set 50, not 0.5. */\r\n    taxPercent2?: number | null;\r\n    /** A Worker may request a minimum percent that is deducted even if the effective tax percent would be lower.\r\nThis can be used if Worker knows that he/she will be earning more in the year than what was estimated when the taxcard was created. */\r\n    taxPercentMin?: number | null;\r\n    /** TaxPercentMin set by owner of the card.\r\nThis overrides the tax percent min set by the taxcard sharer. */\r\n    taxPercentMinOwned?: number | null;\r\n    /** The income type of the taxacard if fetched from the tax authorities taxcard API. */\r\n    incomeType?: TaxcardApiIncomeType | null;\r\n    /** Type of the taxcard as of 2019, when the taxcards logic was simplified by the Finnish tazx authorities. */\r\n    kind?: TaxcardKind | null;\r\n    /** Uri to the file copy of the tax card. \r\nSet by the system as part of the upload process, do not change in the API though it may be technically possible. This may have unintended results. */\r\n    fileUri?: string | null;\r\n    /** Uri to the preview image of the tax card. \r\nSet by the system as part of the upload process, do not change in the API though it may be technically possible. This may have unintended results. */\r\n    previewUri?: string | null;\r\n    /** Explicit value of when the item was last checked. At the moment, updated in API fetches only, but may be used later for other checks.\r\nUndefined value is 1.1.2000 */\r\n    lastChecked?: string | null;\r\n}\r\n\r\n/** For VAT breakdown of a receipt (ALV-erittely) represents a single VAT rate and the revenue and tax with that rate. */\r\nexport interface VatEntry {\r\n    /** Tax amount of specific VAT rate in euro.\r\nThis value is mandatory, if the collection of VatEntries contains more than one item. */\r\n    tax?: number | null;\r\n    /** Applied VAT rate. This is always mandatory. */\r\n    vatRate?: VatRate | null;\r\n    /** Tax as percent of Net sales (0-1). Currently just informative, but may later be used for Custom non-standard VAT rates. */\r\n    taxPercent?: number | null;\r\n    /** Gross sales for specific VAT rate including the tax (VAT).\r\nThis value is mandatory, if the collection of VatEntries contains more than one item. */\r\n    gross?: number | null;\r\n    /** Net sales for specific VAT rate excluding the tax (VAT).\r\nThis value is mandatory, if the collection of VatEntries contains more than one item. */\r\n    net?: number | null;\r\n}\r\n\r\n/** Row accounting entry for overriding standard accounting logic. */\r\nexport interface RowAccountingEntry {\r\n    /** Debit Account number.\r\nIf given will override the system resolved debit account number. */\r\n    debitAccountNumber?: string | null;\r\n    /** Credit Account number.\r\nIf given will override the system resolved credit account number. */\r\n    creditAccountNumber?: string | null;\r\n}\r\n\r\n/** Reporting details to Incomes registry (Tulorekisteri). */\r\nexport interface IrDetails {\r\n    /** The number code in Incomes Register. */\r\n    code?: number | null;\r\n    /** Boolean flags that can be set on transaction. */\r\n    flags?: IrFlags[] | null;\r\n    /** Defines the exceptions to Insurance / Sidecost defaults that are set by the row type. */\r\n    insuranceExceptions?: IrInsuranceExceptions[] | null;\r\n    /** Daily allowance code. */\r\n    dailyAllowance?: AllowanceCode[] | null;\r\n    /** Set this to true if meak benefit is of tax value - false if it si not.\r\nThe value should be null if the row is not mealBenefit. */\r\n    mealBenefitIsTaxValue?: boolean | null;\r\n    /** Provides the additional data needed for car benefit. */\r\n    carBenefit?: CarBenefit | null;\r\n    /** If true, report zero amount to IR. */\r\n    noTransactionAmount?: boolean | null;\r\n}\r\n\r\n/** Details from Salaxy internal calulcation point-of-view (logic not in IR). */\r\nexport interface IrRowCalculationProperties {\r\n    /** Grouping for reports etc. */\r\n    grouping?: CalcGroup | null;\r\n    /** Defines the behavior of the row in Salaxy calculation process. */\r\n    behavior?: CalculationFlag[] | null;\r\n    /** Wage type. Either a built in wage type in Salaxy or a custom wage type created by the user.\r\nPlease note that this type fully determines the <see cref=\"T:Palkkaus.Model.Calc.CalculationRowType\"></see> and the kind. */\r\n    type?: string | null;\r\n}\r\n\r\n/** Employer groups that are set on Example calculations. These will be replaced by properties from Worker / Employer */\r\nexport interface EmployerGroups {\r\n    /** If true, the Employer is a private person.\r\nOtherwise Company or Unknown. */\r\n    isPrivatePerson?: boolean | null;\r\n}\r\n\r\n/** Validation errors used in API output. */\r\nexport interface ApiValidationError {\r\n    /** Full path to Name of the property / field (Member name in JSON).\r\nThis may be null/empty for type General. */\r\n    key?: string | null;\r\n    /** High level type: Specifies the relation to object and its Member. */\r\n    type: ApiValidationErrorType;\r\n    /** Validation error message in the requested language. */\r\n    msg: string;\r\n    /** Validation error long description in the requested language. */\r\n    description?: string | null;\r\n    /** Some error providers may have a unique technical code for error or validator */\r\n    code?: string | null;\r\n}\r\n\r\n/** Car benefit Mandatory data group, if the income type is \"Car benefit\". This data group may not be used with other income types. */\r\nexport interface CarBenefit {\r\n    /** Car benefit type */\r\n    carBenefitCode?: CarBenefitCode | null;\r\n    /** Car age group */\r\n    ageGroupCode?: AgeGroupCode | null;\r\n    /** Odometer reading\r\n\r\nThe value must be greater than or equal to 0 */\r\n    kilometers?: number | null;\r\n    /** Car emissions value\r\n\r\nThe car emissions value must be greater than or equal to 0, and smaller than or\r\nequal to 100. The car emissions value can only be reported if the payment date\r\nor other reporting date is in 2022–2025. */\r\n    emissionsValue?: number | null;\r\n}\r\n\r\nexport interface PageResultOfCalculationListItem {\r\n    items?: CalculationListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of calculations in the user interface. It contains all essential information of the calculation and is basis for searching, filtering and sorting. */\r\nexport interface CalculationListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: CalculationStatus | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: CalculationData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Calculation specific business data for index. */\r\nexport interface CalculationData {\r\n    /** A flag indicating if the requested date for the SalaryDate has been set.\r\nIf the date has been set, the value of the flag is 'SALA'. */\r\n    requestedSalaryDate?: string | null;\r\n    /** The sum that is at the end paid to the Worker:\r\nSalary payment + expenses */\r\n    workerPayment?: number | null;\r\n    /** The total pension payment for this calculation. */\r\n    pensionPayment?: number | null;\r\n    /** The taxes that were deducted from the worker salary a paid as part of taxation. */\r\n    taxPayment?: number | null;\r\n    /** The social security payment- paid as part of taxation. */\r\n    socialSecurityPayment?: number | null;\r\n    /** Status of the calculation from the end-user point-of-view. */\r\n    status?: CalculationStatus | null;\r\n    /** Payroll id. */\r\n    payrollId?: string | null;\r\n    /** Employment id. */\r\n    employmentId?: string | null;\r\n    /** The original id the calculation which this calculation is a copy of. */\r\n    originalId?: string | null;\r\n    /** Use case uri. */\r\n    usecaseUri?: string | null;\r\n    /** The MessageThread Id, if this calculation is referred in a message thread. */\r\n    messageThreadId?: string | null;\r\n    /** Contains the email or id of the responsible for the partner workflow event. */\r\n    partnerMessageAssignedTo?: string | null;\r\n    /** Work start date. */\r\n    workStartDate?: string | null;\r\n    /** Work end date. */\r\n    workEndDate?: string | null;\r\n    /** Payment channel. */\r\n    paymentChannel?: PaymentChannel | null;\r\n    /** Taxable salary is the salary from the taxation point of view - includes some benefits. */\r\n    totalTaxable?: number | null;\r\n    /** Base salary. */\r\n    salary?: number | null;\r\n    /** Salary additions */\r\n    allowances?: number | null;\r\n    /** Benefits. */\r\n    benefits?: number | null;\r\n    /** Deductions */\r\n    deductions?: number | null;\r\n    /** Expenses */\r\n    expenses?: number | null;\r\n    /** The requested salary date. */\r\n    inputSalaryDate?: string | null;\r\n    /** Defines the re-setting of the salary date in the calculation re-calculation. */\r\n    salaryDateKind?: SalaryDateKind | null;\r\n    /** Last date and time when this calculation was repaired after payment. */\r\n    repairedAt?: string | null;\r\n}\r\n\r\n/** Document in the document flow. */\r\nexport interface DocumentFlowItem {\r\n    /** Existing business object in the document flow. */\r\n    item?: IApiListItem | null;\r\n    /** Child items, for example invoices for the calculation. */\r\n    children?: DocumentFlowItem[] | null;\r\n}\r\n\r\n/** Interface for the line item for search and listing results. */\r\nexport interface IApiListItem {\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Pricing partner information. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Calculation is the most important model in the Palkkaus.fi API. We suggest you open the separately provided documentation and especially the class diagram to understand the whole model in detail. */\r\nexport interface Calculation {\r\n    /** The employer object for this calculation.\r\nTypically, you do not need to set this before the actual payment process. */\r\n    employer?: CalcEmployer | null;\r\n    /** The Worker (employee) that has performed the work. */\r\n    worker?: CalcWorker | null;\r\n    /** Information about the workflow and state of the calculation. */\r\n    workflow?: CalcWorkflow | null;\r\n    /** The main salary element. \r\nAlternatively the salary can be set in the Rows object - this will be the only way to set multiple salary rows (not yet supported). */\r\n    salary?: Salary | null;\r\n    /** Set of rows that make up the salary calculation:\r\nExpenses, Benefits, deductions etc. Note that side costs are not rows. */\r\n    rows?: UserDefinedRow[] | null;\r\n    /** DEPRECIATED: Usecase will be replacing this functionality in a next major release.\r\nThe Framework Agreement (TES) parameters that affect the framework based side costs etc. of this calculation */\r\n    framework?: TesParameters | null;\r\n    /** A usecase for creating and editing salary calculations.\r\nIn practice, a usecase is either a user interface or a microservice that provides a salary calculation\r\nand it may be implemented outside Salaxy.\r\nProvides the possibility to store useacase specific data as part of calculation.\r\nNOTE: This functionality will replace Framework property in a next major release. */\r\n    usecase?: UsecaseData | null;\r\n    /** The results of the calculation. In the API, this is a read-only object. */\r\n    result?: CalculationResult | null;\r\n    /** Information about the work that is not directly related to calculating salary and expenses. */\r\n    info?: CalcInfo | null;\r\n    /** Sharing of the calculation. This object cannot be modified directly, \r\nuse specialized methods in Calculations service. */\r\n    sharing?: CalculationSharing | null;\r\n    /** Contains calculation specific data for accounting (both cost and financial accounting). */\r\n    accounting?: CalculationAccounting | null;\r\n    /** Worktime data that is stored as part of Salary calculation:\r\nwork days, absences, holidays and holiday accrual.\r\nIn the future may also contain relevant part of timesheet data (work hours). */\r\n    worktime?: CalcWorktime | null;\r\n    /** Readonly workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Options for copying a calculation. */\r\nexport interface CalculationCopyOptions {\r\n    /** Work start date for the new salary calculation */\r\n    startDate?: string | null;\r\n    /** Work end date for the new salary calculation */\r\n    endDate?: string | null;\r\n    /** &gt;Number of days for the new calculation. */\r\n    numberOfDays?: number | null;\r\n}\r\n\r\n/** Parameters that are changing yearly. This class is made for the change of the year and it is typically updated in December. It is not for recording longer history of numbers. */\r\nexport interface YearlyChangingNumbers {\r\n    /** Year for numbers. */\r\n    readonly year?: number | null;\r\n    /** Returns yearly sidecosts. */\r\n    readonly sideCosts?: YearlySideCosts | null;\r\n    /** Returns holidays for the year. */\r\n    holidays?: Holidays | null;\r\n}\r\n\r\n/** Encapsulates yearly side costs into one class. */\r\nexport interface YearlySideCosts {\r\n    /** Unemployment insurance payment percent - Employer */\r\n    readonly unemploymentEmployerPercent?: number | null;\r\n    /** Unemployment insurance payment percent - Large Employer */\r\n    readonly unemploymentHigherEmployerPercent?: number | null;\r\n    /** Unemployment insurance payment percent - deducted from Worker */\r\n    readonly unemploymentWorkerPercent?: number | null;\r\n    /** Unemployment insurance payment percent for partial owner worker - deducted from Worker */\r\n    readonly unemploymentPartialOwnerWorkerPercent?: number | null;\r\n    /** Pension payment income limit per month */\r\n    readonly tyelIncomeLimit?: number | null;\r\n    /** Pension payment base percentage */\r\n    readonly tyelBasePercent?: number | null;\r\n    /** Pension payment base percentage - deducted from Worker salary */\r\n    readonly tyelWorkerPercent?: number | null;\r\n    /** Pension payment base percentage - deducted from 53-62 year old Worker */\r\n    readonly tyel53Percent?: number | null;\r\n    /** Pension contract employer six month limit */\r\n    readonly tyelContractEmployerLimit?: number | null;\r\n    /** Social Security payment for employer (SAVA-maksu) */\r\n    readonly socSecPercent?: number | null;\r\n    /** Illness Insurance care percent that is withhold from the Worker. (vakuutetun sairausvakuutusmaksu: päivärahamaksu + sairaanhoitomaksu */\r\n    readonly illnessInsurancePercent?: number | null;\r\n    /** Medical care contribution of the employee's health insurance contribution. */\r\n    readonly healthInsuranceMedicalCareContribution?: number | null;\r\n    /** Daily allowance contribution of the employee's health insurance contribution. */\r\n    readonly healthInsuranceDailyAllowanceContribution?: number | null;\r\n    /** Tax free daily allowance for full day approved by tax authorities. */\r\n    readonly taxFreeDailyAllowance?: number | null;\r\n    /** Tax free daily allowance for half day approved by tax authorities. */\r\n    readonly taxFreeDailyHalfAllowance?: number | null;\r\n    /** Tax free meal allowance approved by tax authorities. */\r\n    readonly taxFreeMealAllowance?: number | null;\r\n    /** Tax free bicycle benefit approved by tax authorities. */\r\n    readonly taxFreeBicycleBenefit?: number | null;\r\n    /** Tax free subsidised sommute benefit approved by tax authorities. */\r\n    readonly taxFreeSubsidisedCommute?: number | null;\r\n    /** Tax free milage allowance approved by tax authorities. */\r\n    readonly taxFreeKmAllowance?: number | null;\r\n    /** Union payment: Rakennusliitto, A (typical) */\r\n    readonly unionPaymentRaksaA?: number | null;\r\n    /** Union payment: Rakennusliitto, AO and TA */\r\n    readonly unionPaymentRaksaAoTa?: number | null;\r\n    /** ALV-% for the fee. */\r\n    readonly palkkausVatPercent?: number | null;\r\n    /** ALV-% for the fee. */\r\n    readonly palkkausVatRate?: VatRate | null;\r\n    /** Household deduction */\r\n    readonly householdDeduction?: number | null;\r\n    /** Household deduction */\r\n    readonly householdDeductionExtended?: number | null;\r\n    /** Household deduction max amount */\r\n    readonly householdDeductionMaxAmount?: number | null;\r\n    /** Household deduction max amount */\r\n    readonly householdDeductionMaxAmountExtended?: number | null;\r\n    /** Tax deduction categories, which extend the deduction. */\r\n    readonly householdDeductionCategoriesExtended?: TaxDeductionWorkCategories[] | null;\r\n    /** Household deduction deductible */\r\n    readonly householdDeductionDeductible?: number | null;\r\n    /** Meal benefit for catering contract */\r\n    readonly mealBenefitCateringContract?: number | null;\r\n    /** Meal benefit for institute */\r\n    readonly mealBenefitInstitute?: number | null;\r\n    /** Meal benefit for restaurant worker */\r\n    readonly mealBenefitRestaurantWorker?: number | null;\r\n    /** Meal benefit for teacher */\r\n    readonly mealBenefitTeacher?: number | null;\r\n    /** Meal ticket lower limit */\r\n    readonly mealTicketLowerLimit?: number | null;\r\n    /** Meal ticket upper limit */\r\n    readonly mealTicketUpperLimit?: number | null;\r\n    /** Taxable-% of meal ticket */\r\n    readonly mealTicketTaxable?: number | null;\r\n    /** Foreclosure: protected portion. */\r\n    readonly protectedPortionBase?: number | null;\r\n    /** Foreclosure: protected portion for each dependant. */\r\n    readonly protectedPortionDependant?: number | null;\r\n}\r\n\r\nexport interface HolidayDate {\r\n    date?: string | null;\r\n    holiday?: Holiday | null;\r\n    readonly holidayGroups?: HolidayGroup[] | null;\r\n    localName?: string | null;\r\n    name?: string | null;\r\n}\r\n\r\n/** Holidays for the entire year. */\r\nexport interface YearlyHolidays {\r\n    /** Year for the holidays. */\r\n    readonly year?: number | null;\r\n    /** Holidays for the year. */\r\n    readonly holidays?: Holidays2 | null;\r\n}\r\n\r\n/** Data that is needed for determening PeriodRecalculationParams and thus at the end recalculating holidays and absences to a calculation. */\r\nexport interface PeriodRecalculationData {\r\n    /** The salary calculation that should be recalculated. */\r\n    calc?: Calculation | null;\r\n    /** Current employment data. */\r\n    employment?: Employment | null;\r\n    /** Holiday year with holidays that should be added as salary rows.\r\nIf not provided, holidays are not calculated. */\r\n    holidayYear?: HolidayYear | null;\r\n    /** Absences that should be deducted from monthly salary.\r\nIf not provided, absences are not calculated. */\r\n    absences?: WorkerAbsences | null;\r\n}\r\n\r\n/** Employment relation: The relation between Employer and Worker as well as the personal info of the worker. */\r\nexport interface Employment {\r\n    /** General information about the Employment relation. */\r\n    info?: EmploymentRelationInfo | null;\r\n    /** Describes the work that is being performed in this Employment Relation. */\r\n    work?: WorkDescription | null;\r\n    /** Contains values that are needed when creating an employment, but where changing is restricted in the future:\r\nE.g. names and personalId are required when creating a new employment, but once a calculation is created (or at least paid),\r\nediting of theses is no longer possible. See the editing rules for individual properties. */\r\n    identity?: EmploymentIdentity | null;\r\n    /** Properties of the employment for international situations: Working abroad or foreign worker. */\r\n    international?: EmploymentRelationInternational | null;\r\n    /** Contacts stored in the employment. */\r\n    contacts?: ContactAdvanced[] | null;\r\n    /** Usecase is data related to the source and processing of the Employment data outside the Salaxy backend service / system.\r\nTypically, Usecase data would be processed by an external system that has originally created the \r\nEmployment Relation (Worker / Employee in many systems). E.g. expenses system, hourly reporting system. */\r\n    usecase?: UsecaseData | null;\r\n    /** Defines how the holidays are specified to this Worker. */\r\n    holidays?: HolidaySpecification | null;\r\n    /** Contains read-only personal information for the worker typically managed by the Worker account:\r\nNames, personal ID and contact. Currently, this data is edited in Person or WorkerAccount containers, not in the employment relation. */\r\n    personalInfo?: AccountInIndex | null;\r\n    /** If true, the Worker has registered and maintains his / her own personal info.\r\nIf false, the Worker account is created and still maintained by the Employer. */\r\n    isRegistered?: boolean | null;\r\n    /** Customer specific business configurations. */\r\n    configs?: BizConfig[] | null;\r\n    /** Accrued time for the employment relation. */\r\n    accruals?: EmploymentAccrual[] | null;\r\n    /** Workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Holiday year is in Finland from April to end of march. This is the time from which the holidays for the following summer and year are determined. */\r\nexport interface HolidayYear {\r\n    /** Year as integer. This value is required when inserting and cannot be edited later. \r\nPeriod will be set accordingly, or adjusted in case it is set below. */\r\n    year: number;\r\n    /** Salaxy ID of the worker. This value is required when inserting and cannot be edited later.\r\nWorkerSnapshot is automatically updated upon save. */\r\n    workerId?: string | null;\r\n    /** The employment relation for the worker whose holidays are managed. */\r\n    employmentId: string;\r\n    /** The holiday period for the year: Should always be 2.5.[Year]-30.4.[Year+1] */\r\n    period?: DateRange | null;\r\n    /** Specifies how the holidays are handled.\r\nIf the Spec.Code is Undefined in Save, the contents is fetched from the current employment relation. */\r\n    spec?: HolidaySpecificationForYear | null;\r\n    /** Calculated Holiday pay for the year. */\r\n    holidayPay?: HolidayPay | null;\r\n    /** Accrual of holidays (lomakirjanpito). */\r\n    accrual?: HolidayAccrual | null;\r\n    /** Payments related to Annual Leaves (holidays). */\r\n    leaves?: AnnualLeaves | null;\r\n    /** Basic information for the Worker. \r\nAutomatically updated upon save based on WorkerId.\r\nMainly for the listings etc. */\r\n    workerSnapshot?: Avatar | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** General information about the Employment relation. */\r\nexport interface EmploymentRelationInfo {\r\n    /** The Account ID of the Worker if Worker */\r\n    workerAccountId?: string | null;\r\n    /** Identifier in a source system. Used in imports etc. */\r\n    sourceId?: string | null;\r\n    /** User friendly employment relation type that is used to set other more technical types and Incomes Registry properties. */\r\n    type?: EmploymentRelationType | null;\r\n    /** The bank account number for salary payment. */\r\n    ibanNumber?: string | null;\r\n    /** Type of additional income earner data by National Incomer Register classification . If several types apply, all of them should be selected. */\r\n    irIncomeEarnerTypes?: IncomeEarnerType[] | null;\r\n    /** Applicable collective agreement */\r\n    cbaCode?: number | null;\r\n    /** Employee group. */\r\n    employeeGroup?: string | null;\r\n    /** Type for the pension insurance. */\r\n    pensionCalculation?: PensionCalculation | null;\r\n    /** Rules (e.g. effect of monthly lower limit) for pension calculation. */\r\n    pensionRule?: PensionRule | null;\r\n    /** The id of the pension company. */\r\n    pensionCompany?: PensionCompany | null;\r\n    /** The pension contract number. */\r\n    pensionContractNumber?: string | null;\r\n    /** The id of the insurance company. */\r\n    insuranceCompany?: InsuranceCompany | null;\r\n    /** The accident insurance contract number. */\r\n    insuranceContractNumber?: string | null;\r\n    /** Taxcard type from the employment point of view. */\r\n    taxcard?: EmploymentRelationTaxcard | null;\r\n    /** Status of this employment relationship */\r\n    status?: EmploymentRelationStatus | null;\r\n    /** Worker's preferred salary payment method: bank account, external etc. */\r\n    salaryPaymentMethod?: EmploymentRelationSalaryPaymentMethod | null;\r\n    /** Start date of the Employment Relation. */\r\n    startDate?: string | null;\r\n    /** End date of the Employment Relation. */\r\n    endDate?: string | null;\r\n    /** Duration of the employment. If true, the employment relation is for a fixed term.\r\nOtherwise (which is the default) the employment relation continues until further notice. */\r\n    isFixedTerm?: boolean | null;\r\n    /** Indicates that the employment relation has been terminated.\r\nSaving with this status also makes the employment relation Archived. */\r\n    isTerminated?: boolean | null;\r\n    /** Employment registration code for Incomes Registry. */\r\n    employmentRegCode?: string | null;\r\n}\r\n\r\n/** Describes the work that is being performed - mainly for Employment relation purposes. */\r\nexport interface WorkDescription {\r\n    /** Free text description of the work that is being performed. */\r\n    description?: string | null;\r\n    /** Occupation classification, used at least for Accident insurance purposes, but may be used for other reporting. \r\nFor Finnish Salaries use the Statistics Finland \r\n\"Classification of Occupations 2010\" (TK10): https://www.stat.fi/meta/luokitukset/ammatti/017-2018-05-15/index_en.html */\r\n    occupationCode?: string | null;\r\n    /** Secondary occupation classification. Some earnings payment reports may require two occupation codes. */\r\n    occupationCode2?: string | null;\r\n    /** Contains default calculation rows for the worker.\r\nTypically used for setting for example monthly salary or hourly salary price for workers. */\r\n    salaryDefaults?: UserDefinedRow[] | null;\r\n    /** Default bases for wage. */\r\n    wageBasis?: WageBasis | null;\r\n    /** Number of hours per month defined in the employment contract. */\r\n    monthlyHours?: number | null;\r\n    /** Contains calculation specific data for accounting (both cost and financial accounting). */\r\n    accounting?: CalculationAccounting | null;\r\n}\r\n\r\n/** Contains values that are needed when creating an employment, but where changing is restricted in the future: E.g. names and personalId are required when creating a new employment, but once a calculation is created (or at least paid), editing of theses is no longer possible. See the editing rules for individual properties. */\r\nexport interface EmploymentIdentity {\r\n    /** First name of the Worker. Value is required when creating a new employment, it cannot be modified after initial create:\r\nInstead you should just delete the Worker (only allowed if no paid salaries etc.) and create a new one. */\r\n    firstName?: string | null;\r\n    /** Last name of the worker. Editing rules are the same as with FirstName. */\r\n    lastName?: string | null;\r\n    /** Personal ID (hetu) of the worker (currently required). Editing rules are the same as with FirstName. */\r\n    personalId?: string | null;\r\n    /** Avatar picture. If set, this is used in avatar instead of Initials (automatic FirstName/LastName) and color.\r\nMay be changed until the Worker registers to the service. After this, the Worker can upload their own image or choose to remove the image. */\r\n    avatarImg?: string | null;\r\n    /** Avatar color for visual icon together with initials. Use web compatible rgb values, e.g. \"#FF00FF\" or \"rgb(255, 0, 255)\".\r\nEditing rules are the same as with AvatarImg. */\r\n    color?: string | null;\r\n    /** Language of the user in user interfaces and print-outs (most significantly the salary slip).\r\nEditing rules are the same as with AvatarImg. */\r\n    language?: Language | null;\r\n}\r\n\r\n/** Properties of the employment for international situations: Working abroad or foreign worker. */\r\nexport interface EmploymentRelationInternational {\r\n    /** Country of residence for non-recident of Finland (rajatusti verovelvollinen) */\r\n    country?: Country | null;\r\n    /** Identifier for non-recident of Finland in the country of residence.\r\nType of the identifier is specified in IdType. */\r\n    foreignId?: string | null;\r\n    /** Type of ForeignId. */\r\n    idType?: InternationalIdentifier | null;\r\n    /** The non-resident taxcard (or percent without taxcard) that is used if the taxcard in Employment.Info.Taxcard is set to TaxAtSource. */\r\n    taxAtSource?: TaxAtSource | null;\r\n    /** Types of social security for international situations. */\r\n    socialSecurity?: InternationalSocialSecurityType | null;\r\n    /** Exceptions to standard social security cases. */\r\n    socialSecurityExceptions?: InternationalSocialSecurityException[] | null;\r\n}\r\n\r\n/** Advanced contact information with strongly typed country and type information. */\r\nexport interface ContactAdvanced {\r\n    /** Type of contact when specification allows several contacts. */\r\n    type?: ContactType | null;\r\n    /** Contact e-mail address. Always lower invariant, trimmed and empty string set to null. */\r\n    email?: string | null;\r\n    /** Telephone number */\r\n    telephone?: string | null;\r\n    /** Street address */\r\n    street?: string | null;\r\n    /** Postal code */\r\n    postalCode?: string | null;\r\n    /** City or community (postitoimipaikka) */\r\n    city?: string | null;\r\n    /** Country as defined as */\r\n    country?: Country | null;\r\n    /** Name of the country as free text if Country is Other. */\r\n    countryOtherName?: string | null;\r\n}\r\n\r\n/** Specifies how the holidays are handled for this Worker. */\r\nexport interface HolidaySpecification {\r\n    /** Defines how the holidays are handled for the worker. */\r\n    code?: HolidayCode | null;\r\n    /** Defines how the holiday pay is calculated. */\r\n    holidayPayCalculation?: HolidayPayCalculation | null;\r\n    /** Defines the number of holidays that the worker is entitled per month worked.\r\nIf the value is set to 0 (default), the number is 2 for first year and 2,5 thereafter as defined in the law.\r\nTo actually se the daysPerMonth to zero, use code value other than Permanent14Days or Permanent35Hours. */\r\n    accrualFixed?: number | null;\r\n    /** For {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.HolidayCompensation} the compensation percent.\r\nHoliday compensation as percent of salary (11.5% is 0.115) */\r\n    compensation?: number | null;\r\n    /** For {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.PercentageBasedPay} the percent.\r\nHoliday pay as percent of salary (11.5% is 0.115) */\r\n    holidayPayPercent?: number | null;\r\n    /** Method for paying holiday bonus in this salary calculation. */\r\n    bonusMethod?: HolidayBonusPaymentMethod | null;\r\n    /** Holiday bonus for the worker (lomaraha, lomaltapaluuraha).\r\nTypically 0.5 for 50%. */\r\n    bonus?: number | null;\r\n}\r\n\r\n/** Customer specific business configuration. */\r\nexport interface BizConfig {\r\n    /** Flag for disabling the configuration without deleting it. */\r\n    disabled?: boolean | null;\r\n    /** If specified, defines the start date for the settings.\r\nIf in the future, the the settings is inactive. Null (default) means the settings is valid indefinetely from the past. */\r\n    startDate?: string | null;\r\n    /** If specified, defines the end date for the settings. \r\nDate is inclusive meaning that if EndDate is 31.12., settings is valid until end-of-year: Valid on 31.12. and invalid 1.1.\r\nIf in the past, the the settings is inactive. Null (default) means the settings is valid indefinetely to future. */\r\n    endDate?: string | null;\r\n    /** Name for the configuration. */\r\n    name?: string | null;\r\n    /** Applicable collective agreement */\r\n    cbaCode?: number | null;\r\n    /** Employee group. */\r\n    employeeGroup?: string | null;\r\n    /** Type of the configuration data. It can be a value type or object type. */\r\n    dataType?: string | null;\r\n    /** Configuration data. */\r\n    data?: any | null;\r\n    /** Last time the configuration was created/updated. */\r\n    updatedAt?: string | null;\r\n    /** User who last updated the configuration. */\r\n    updatedBy?: string | null;\r\n}\r\n\r\n/** Accrued time for the employment. */\r\nexport interface EmploymentAccrual {\r\n    /** Accrued time type. */\r\n    type?: string | null;\r\n    /** Start date of the accrued time. */\r\n    startDate?: string | null;\r\n    /** End date of the accrued time. */\r\n    endDate?: string | null;\r\n    /** Amount of time */\r\n    amount?: number | null;\r\n    /** Unit for time. */\r\n    unit?: Unit | null;\r\n}\r\n\r\n/** Calculated holiday pay for the year. */\r\nexport interface HolidayPay {\r\n    /** Calculated price for a single holiday day based on the regular monthly salary.\r\nPlease note that this is applicable for accounting purposes (holiday pay debt) only. */\r\n    readonly normalMonthlyPayDailySalary?: number | null;\r\n    /** The picked monthly salary from the holiday year's calculations.\r\nPlease note that the calculator logic does not use this value but the NormalMonthlyPayManual or enterd monthly salary in the calculation. */\r\n    readonly normalMonthlyPay?: number | null;\r\n    /** For NormalMonthlyPay the manually entered regular monthly salary. */\r\n    normalMonthlyPayManual?: number | null;\r\n    /** For AverageDailyPay the calculated price for a single holiday day. */\r\n    averageDailyPayDailySalary?: number | null;\r\n    /** For AverageDailyPay the calculated average daily pay. */\r\n    averageDailyPay?: number | null;\r\n    /** For AverageDailyPay the manually entered average daily pay. */\r\n    averageDailyPayManual?: number | null;\r\n    /** For AverageDailyPay the total pay received or due for time worked during the holiday credit year. */\r\n    averageDailyPayBase?: number | null;\r\n    /** For AverageDailyPay the number of days the employee was at work.\r\nThis number does not include the one eighth of the hours worked in excess of the  statutory regular daily working hours which is added to the number of days at work used in the calculation. */\r\n    averageDailyPayDays?: number | null;\r\n    /** Multiplier used in the calculation of the average daily pay. */\r\n    averageDailyPayMultiplier?: number | null;\r\n    /** For AverageHourlyPay the calculated price for a single holiday day. */\r\n    averageHourlyPayDailySalary?: number | null;\r\n    /** For AverageHourlyPay the calculated average hourly pay. */\r\n    averageHourlyPay?: number | null;\r\n    /** For AverageHourlyPay the manually entered average hourly pay. */\r\n    averageHourlyPayManual?: number | null;\r\n    /** For AverageHourlyPay the total pay received or due for time worked during the holiday credit year. */\r\n    averageHourlyPayBase?: number | null;\r\n    /** For AverageHourlyPay the number of hours the employee was at work. */\r\n    averageHourlyPayHours?: number | null;\r\n    /** Multiplier used in the calculation of the average hourly pay. */\r\n    averageHourlyPayMultiplier?: number | null;\r\n    /** For PercentageBasedPay the calculated price for a single holiday day. */\r\n    percentageBasedPayDailySalary?: number | null;\r\n    /** For PercentageBasedPay the calculated total holiday pay. */\r\n    percentageBasedPay?: number | null;\r\n    /** For PercentageBasedPay the manually entered total holiday pay. */\r\n    percentageBasedPayManual?: number | null;\r\n    /** For PercentageBasedPay the total pay received or due for time worked during the holiday credit year. */\r\n    percentageBasedPayBase?: number | null;\r\n    /** For PercentageBasedPay the percent for the calculation. */\r\n    percentageBasedPayPercent?: number | null;\r\n    /** For OtherPay the manually entered pay, the price for a single holiday day. */\r\n    otherPay?: number | null;\r\n    /** For HolidayCompensation the calculated price for a single holiday day. */\r\n    compensationPayDailySalary?: number | null;\r\n    /** For HolidayCompensation the calculated total holiday compensation pay. */\r\n    compensationPay?: number | null;\r\n    /** For HolidayCompensation the manually entered total holiday compensation pay. */\r\n    compensationPayManual?: number | null;\r\n    /** For HolidayCompensation the total pay received or due for time worked during the holiday credit year. */\r\n    compensationPayBase?: number | null;\r\n    /** For Script the result of the calculation by the script. */\r\n    scriptPay?: number | null;\r\n    /** Accrual used in the calculation of the holiday daily pay. */\r\n    accrual?: number | null;\r\n}\r\n\r\n/** Yearly log for Holiday accrual. */\r\nexport interface HolidayAccrual {\r\n    /** Holiday accrual entries during the period. */\r\n    months?: HolidayAccrualEntry[] | null;\r\n    /** The period for holiday accrual.\r\nThis is also the period of the holiday year that the Worker is Employed,\r\ni.e. it may be shorter than HolidayYear Period if the employment relation \r\nbegins or ends within the holiday year. */\r\n    period?: DateRange | null;\r\n    /** Default accrual for months where the Accrual occurs.\r\nWhen Holiday year is recalculated, this is determined either from Employment Period or AccrualFixed if set. */\r\n    defaultAccrual?: number | null;\r\n    /** Start saldo from the previous year. */\r\n    startSaldo?: number | null;\r\n    /** Total for the current year. This does not include Start saldo. */\r\n    readonly total?: number | null;\r\n    /** End saldo from the previous year. This is Total + Start Saldo. */\r\n    readonly endSaldo?: number | null;\r\n}\r\n\r\n/** Data about the annual leaves planned and used during the holiday year. */\r\nexport interface AnnualLeaves {\r\n    /** Planned annual leaves. */\r\n    planned?: AnnualLeave[] | null;\r\n    /** Paid or otherwise handled annual leaves.\r\nPRELIMINARY: This property is under revision - it may be moved or renamed without being a breaking change. */\r\n    paid?: AnnualLeavePayment[] | null;\r\n}\r\n\r\n/** The information about tax at source, typically from  non-resident taxcard (lähdeverokortti) for non-residents. */\r\nexport interface TaxAtSource {\r\n    /** Tax percent. As of writing, this is 35% by default and 15% for athletes and performingg artists,\r\nbut the percentage may change and bust be checked from the taxcard (or legistlattion if there is no card available). */\r\n    percent?: number | null;\r\n    /** Monthly deduction (e.g. 510 €/month) if one can be used for this card. */\r\n    deductionMonthly?: number | null;\r\n    /** Daily deduction (e.g. 17 €/day) if one can be used for this card. */\r\n    deductionDaily?: number | null;\r\n}\r\n\r\n/** Entry in the Yearly Holiday Accrual list. */\r\nexport interface HolidayAccrualEntry {\r\n    /** Index of the month from 0-11 for easier iteration.\r\nThis is also the real identifier of the month when editing the entries through API.\r\nMonths 4-12 are index 0-8 and month 1-3 are index 9-11 */\r\n    index?: number | null;\r\n    /** First day of month for the holiday month */\r\n    month?: string | null;\r\n    /** Days added to holiday Accrual: Typically days per month. */\r\n    daysAccrued?: number | null;\r\n    /** Source of the holiday accrual. */\r\n    source?: HolidayAccrualSource | null;\r\n    /** Identier of the calculation if Kind */\r\n    calcId?: string | null;\r\n    /** Additional information as recorded by the Employer. */\r\n    notes?: string | null;\r\n}\r\n\r\n/** A planned annual Leave - not sure whether it will kept or is it just planned */\r\nexport interface AnnualLeave {\r\n    /** Identifies a single leave. */\r\n    id?: string | null;\r\n    /** The planned holiday period. */\r\n    period?: DateRange | null;\r\n    /** Additional information as recorded by the Employer. */\r\n    notes?: string | null;\r\n}\r\n\r\n/** Payment related to annual leave: holiday salary, bonus and compensation */\r\nexport interface AnnualLeavePayment {\r\n    /** Type of the payment entry */\r\n    kind?: AnnualLeavePaymentKind | null;\r\n    /** The reference date: Typically the Paid at date.\r\nThe items are typically sorted based on this. */\r\n    date?: string | null;\r\n    /** Days of holidays that are paid or compensated */\r\n    holidayDays?: number | null;\r\n    /** Salary that is paid for holidays */\r\n    holidaySalary?: number | null;\r\n    /** Compensation that is paid for holidays not kept. */\r\n    holidayCompensation?: number | null;\r\n    /** Bonus for either Holiday Salary or Compensation. */\r\n    holidayBonus?: number | null;\r\n    /** If the payment is defined by a calculation, stores the calculation ID. */\r\n    calcId?: string | null;\r\n    /** If true, the payment can be ignored. */\r\n    isDisabled?: boolean | null;\r\n    /** Identifies a single leave. */\r\n    id?: string | null;\r\n    /** The planned holiday period. */\r\n    period?: DateRange | null;\r\n    /** Additional information as recorded by the Employer. */\r\n    notes?: string | null;\r\n}\r\n\r\n/** Represents a calendar event in iCalendar compatible way. */\r\nexport interface CalendarEvent {\r\n    /** The part of the data that provides the compliance to iCalendar VEVENT data model defined in RFC 5545, \r\nnot including the properties that are standard in Salaxy (e.g. id/uid, createdAt etc.). */\r\n    event?: CalendarVEvent | null;\r\n    /** Occurence information based on the event. */\r\n    occurenceInfo?: CalendarEventOccurenceInfo | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Stores the calendar even data that is compatible with RFC 5545 VEVENT component. */\r\nexport interface CalendarVEvent {\r\n    /** Unique identifier: This is the ID of the parent. */\r\n    uid?: string | null;\r\n    /** Timestamp for the item: This may be important for processing of items to some calendar items, hence stored separately from other dates. */\r\n    timeStamp?: string | null;\r\n    /** The start date/time of the event.\r\nNOTE, unlike in iCalendar, in our model Start is always required and then either End or Duration is used to determine the duration. */\r\n    start?: string | null;\r\n    /** The end date/time of the event.\r\nNote that if Duration is set, it will override this property whenever saved or recalculated. */\r\n    end?: string | null;\r\n    /** The duration of the event. \r\nNote that if set to something else than null / zero, this property will always override the End date/datetime. */\r\n    duration?: string | null;\r\n    /** Returns true if the event is an all-day event: Start and End are dates (\"yyyy-MM-dd\"), not date-times (\"yyyy-MM-ddThh:mm:ss\"). */\r\n    isAllDay?: boolean | null;\r\n    /** The event status as defined in https://tools.ietf.org/html/rfc5545#section-3.8.1.11\r\nor in Salaxy process. Other statuses default to undefined. */\r\n    status?: CalendarEventStatus | null;\r\n    /** Short, one-line summary: Text that is typically shown in calendar views. */\r\n    summary?: string | null;\r\n    /** Categorization of the event */\r\n    categories?: string[] | null;\r\n    /** The attendees for the event. */\r\n    attendees?: CalendarAttendee[] | null;\r\n    /** The Alarms (notifications) and other Actions (scripts) related to the event. */\r\n    actions?: CalendarAction[] | null;\r\n    /** Priority is specified as an integer in the range 0 to 9.\r\nA value of 0 specifies an undefined priority.\r\nA value of 1 is the highest priority, 1-4=HIGH, 5=MEDIUM/Normal and 6-9=LOW.\r\nNegative values may be used by admin functions (not through API) to set priority overrides. */\r\n    priority?: number | null;\r\n    /** The full description text. */\r\n    description?: string | null;\r\n    /** Attachments for calendar events. */\r\n    attachments?: CalendarAttachment[] | null;\r\n    /** The recurrence rules as specified in iCalendar: https://tools.ietf.org/html/rfc5545#section-3.3.10 and https://tools.ietf.org/html/rfc5545#section-3.8.5.3\r\nE.g. \"FREQ=DAILY;INTERVAL=10;COUNT=5\" */\r\n    recurrenceRules?: string[] | null;\r\n    /** Constant recurrence dates specified by RDATE in iCalendar */\r\n    recurrenceDates?: string[] | null;\r\n    /** Exception dates specified by EXDATE in iCalendar */\r\n    exceptionDates?: string[] | null;\r\n    /** When imported from external system, this contains the original Uid. Null for items created by Salaxy. */\r\n    originalUid?: string | null;\r\n}\r\n\r\n/** Information about the occurences of the calendar event when the event was last stored into the storage. */\r\nexport interface CalendarEventOccurenceInfo {\r\n    /** If true, the event is a recurring */\r\n    isRecurring?: boolean | null;\r\n    /** First occurence of the event */\r\n    occurencesStart?: string | null;\r\n    /** Last occurence of the event. Please note that only max 1 year from today is calculated. */\r\n    occurencesEnd?: string | null;\r\n    /** Next occurences (max 100) */\r\n    next?: CalendarOccurence[] | null;\r\n    /** Dictionary of executed actions. */\r\n    executedActions?: { [key: string]: string; } | null;\r\n}\r\n\r\n/** Describes the calendar attendees in an avatar-visualization compatible way. */\r\nexport interface CalendarAttendee {\r\n    /** Account or Credentials uri IF the attendee is a Palkkaus.fi account. Otherwise null. */\r\n    uri?: string | null;\r\n    /** The display name of the attendee (CN) */\r\n    displayName?: string | null;\r\n    /** The E-mail address of the person */\r\n    email?: string | null;\r\n    /** Entity type: person/company. In calendar attendees, defaults to Person. */\r\n    entityType?: LegalEntityType | null;\r\n    /** Type of the Avatar picture. */\r\n    pictureType?: AvatarPictureType | null;\r\n    /** Color - currently only used by type Icon */\r\n    color?: string | null;\r\n    /** Initials - used by PictureType Icon */\r\n    initials?: string | null;\r\n    /** URL of the picture if specified as picture (null in a case of type Icon) */\r\n    url?: string | null;\r\n}\r\n\r\n/** Salaxy calendar action is an extension to iCalendar Alarms: It supports the standard alarms: Display, Email and Audio, but also salaxy action scripts. */\r\nexport interface CalendarAction {\r\n    /** Unique identifier in the Salaxy context. */\r\n    id?: string | null;\r\n    /** Action type */\r\n    type?: CalendarActionType | null;\r\n    /** Summary text for the action. Subject for E-mail */\r\n    summary?: string | null;\r\n    /** Description text for the action. Body text for Email, Notification message for Display. */\r\n    description?: string | null;\r\n    /** Attendees are E-mail receivers for Email Alert and potentially Display notifications in the future. \r\nScript actions may also later use them when credentials, accounts or similar are needed fro execution. */\r\n    attendees?: CalendarAttendee[] | null;\r\n    /** Attachment files for the action. Attachments for E-mail. */\r\n    attachments?: CalendarAttachment[] | null;\r\n    /** The duration trigger. Either this or TriggerDateTime must specified. */\r\n    triggerDuration?: string | null;\r\n    /** The fixed date-time trigger. Only used if, Duration is not available.\r\nNOTE that Salaxy implements this feature a bit differently than rfc-5545: The spec says that for a repeating event, \r\nthe alarm should trigger only once (+repeat), but current Salaxy implementation would trigger the alarm the amount of items. */\r\n    triggerDateTime?: string | null;\r\n    /** If specified, the action repeats number of times (in addition to the initial trigger) specified in this parameter with RepeatDuration values.\r\nIf Repeat is more than 0, also RepeatDuration must be specified. */\r\n    repeat?: number | null;\r\n    /** Time between the repeats aftern the initial repeat. */\r\n    repeatDuration?: string | null;\r\n}\r\n\r\n/** Attachment for calendar event or Action/Alarm. */\r\nexport interface CalendarAttachment {\r\n    /** URI of the attachment. This is the default way of specifying attachments.\r\nTODO: Check if the Uri data type works in API. If not, switch to string. */\r\n    uri?: string | null;\r\n    /** Attachment as inline data. Encoded with ValueEncoding. */\r\n    data?: string | null;\r\n    /** The file format type / mime type (e.g. \"text/plain\"). */\r\n    formatType?: string | null;\r\n    /** Encoding for the inline data.\r\nTODO: Consider making read-only. */\r\n    valueEncoding?: string | null;\r\n}\r\n\r\n/** Occurence of a calendar event */\r\nexport interface CalendarOccurence {\r\n    /** Identifier of the event that produces this occurence */\r\n    eventId?: string | null;\r\n    /** Summary text for occurence. Max 255 characters. */\r\n    summary?: string | null;\r\n    /** Categorization of the event */\r\n    categories?: string[] | null;\r\n    /** Indicates that the time of the recurrence is irrelevant: Just display the date.\r\nNOTE that in Occurences, when IsAllDay=true, the End is the date when occurence ends (typically same as Start), not the next day as in VEVENT. */\r\n    isAllDay?: boolean | null;\r\n    /** If true, the occurence is based on a recurrence rule. */\r\n    isRecurring?: boolean | null;\r\n    /** The start date/time of the event as ISO 8601 Date (\"yyyy-MM-dd\") or DateTime (\"s\"/\"yyyy-MM-ddThh:mm:ss\") without timezone.\r\nValue should be Date when IsAllDay is true and DateTime, when it is false. */\r\n    start?: string | null;\r\n    /** The end date/time of the event as ISO 8601 Date (\"yyyy-MM-dd\") or DateTime (\"s\"/\"yyyy-MM-ddThh:mm:ss\") without timezone.\r\nValue should be Date when IsAllDay is true and DateTime, when it is false. */\r\n    end?: string | null;\r\n    /** The duration of the event. */\r\n    duration?: string | null;\r\n    /** Collection of action occurences for this event occurence. */\r\n    actions?: CalendarActionOccurence[] | null;\r\n}\r\n\r\n/** Occurence of an Action (Alarm in iCalendar) within a Calendar occurence. */\r\nexport interface CalendarActionOccurence {\r\n    /** Identifier of the event that produces this action occurence */\r\n    eventId?: string | null;\r\n    /** Identifier of the action that produces this occurence */\r\n    actionId?: string | null;\r\n    /** Action type */\r\n    type?: CalendarActionType | null;\r\n    /** The date/date-time this action is executed. */\r\n    start?: string | null;\r\n    /** Indicates that the time of the recurrence (start) is irrelevant: Just display the date. */\r\n    isAllDay?: boolean | null;\r\n    /** Summary text for occurence. Max 255 characters. */\r\n    summary?: string | null;\r\n}\r\n\r\nexport interface PageResultOfCalendarEventListItem {\r\n    items?: CalendarEventListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of calendar events in the search index. */\r\nexport interface CalendarEventListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: CalendarEventStatus | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: CalendarEventData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Calendar event specific business data for index. */\r\nexport interface CalendarEventData {\r\n    /** The start date/time of the event. */\r\n    start?: string | null;\r\n    /** The end date/time of the event. */\r\n    end?: string | null;\r\n    /** The duration of the event. */\r\n    duration?: string | null;\r\n    /** Recurrence rules as a CRLF separted string. */\r\n    rRules?: string | null;\r\n    /** Returns true if the event is a recurring event: RRules or Recurrence dates.. */\r\n    isRecurring?: boolean | null;\r\n    /** Returns true if the event is an all-day event. */\r\n    isAllDay?: boolean | null;\r\n    /** Priority is specified as an integer in the range 0 to 9.\r\nA value of 0 specifies an undefined priority.\r\nA value of 1 is the highest priority, 1-4=HIGH, 5=MEDIUM/Normal and 6-9=LOW.\r\nNegative values may be used by admin functions (not through API) to set priority overrides. */\r\n    priority?: number | null;\r\n    /** Status as string */\r\n    status?: string | null;\r\n}\r\n\r\n/** Customer invoice is an invoice from Palkkaus / Salaxy to Customer / Partner: Invoice for the usage of service. */\r\nexport interface CustomerInvoice {\r\n    /** Header-level information about the invoice. */\r\n    info?: CustomerInvoiceInfo | null;\r\n    /** The data that is the bases for invoicing e.g. calculations, monthly active users etc. */\r\n    bases?: CustomerInvoicingBases[] | null;\r\n    /** If not null, contains a final invoice in Laskupiste format. */\r\n    invoice?: LaskupisteInvoice | null;\r\n    /** Readonly workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Header level data for the customer invoices. */\r\nexport interface CustomerInvoiceInfo {\r\n    /** Status of this invoice entry. */\r\n    status?: CustomerInvoiceStatus | null;\r\n    /** Count of companies (end-customers) in this invoice. */\r\n    companyCount?: number | null;\r\n}\r\n\r\n/** Represents the data that is the bases for invoicing e.g. calculations, monthly active users etc. */\r\nexport interface CustomerInvoicingBases {\r\n    id?: string | null;\r\n    date?: string | null;\r\n    product?: string | null;\r\n    companyId?: string | null;\r\n    partnerId?: string | null;\r\n    amount?: number | null;\r\n    meta?: { [key: string]: any; } | null;\r\n}\r\n\r\nexport interface LaskupisteInvoice {\r\n    id?: number | null;\r\n    customerId?: number | null;\r\n    currency?: string | null;\r\n    orderedDate?: string | null;\r\n    invoiceNumber?: number | null;\r\n    invoiceName?: string | null;\r\n    rows?: LaskupisteInvoiceRow[] | null;\r\n    invoiceState?: string | null;\r\n}\r\n\r\n/** Single invoice row for Laskupiste */\r\nexport interface LaskupisteInvoiceRow {\r\n    productId?: number | null;\r\n    name?: string | null;\r\n    amount?: number | null;\r\n    amountType?: string | null;\r\n    unitPrice?: number | null;\r\n    vatPercent?: number | null;\r\n    specifier?: string | null;\r\n    specifierType?: string | null;\r\n    meta?: { [key: string]: any; } | null;\r\n}\r\n\r\nexport interface PageResultOfCustomerInvoiceListItem {\r\n    items?: CustomerInvoiceListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of Customer invoices. Customer invoices are service invoices from Palkkaus / Salaxy to customers and partners. */\r\nexport interface CustomerInvoiceListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: CustomerInvoiceStatus | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: CustomerInvoiceListItemData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Customer Invoice specific business data for index. */\r\nexport interface CustomerInvoiceListItemData {\r\n    /** Number of end-companies in the invoice. */\r\n    companyCount?: number | null;\r\n}\r\n\r\n/** Dataset models some arbitrary data that is store in storage. This is any data that is not \"strongly modeled\", for example: Imports from / exports to external systems, reports, data analyses and control data for batch processes. */\r\nexport interface Dataset {\r\n    /** Editable metadata info about a dataset. */\r\n    info?: DatasetInfo | null;\r\n    /** The payload of the dataset: The objects or tables that are stored. */\r\n    data?: DatasetDataObject[] | null;\r\n    /** Usecase is data related to the source and processing of the Employment data outside the Salaxy backend service / system.\r\nTypically, Usecase data would be processed by an external system that has originally created the \r\nEmployment Relation (Worker / Employee in many systems). E.g. expenses system, hourly reporting system. */\r\n    usecase?: UsecaseData | null;\r\n    /** Readonly workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Editable metadata info about a dataset. */\r\nexport interface DatasetInfo {\r\n    /** Status of the dataset. */\r\n    status?: DatasetStatus | null;\r\n    /** End-user friendly label that describes the dataset in listings etc. */\r\n    label?: string | null;\r\n    /** The logical type / purpose of the dataset. */\r\n    type?: DatasetType | null;\r\n}\r\n\r\nexport interface DatasetDataObject {\r\n    /** Technical name (unique key) for the data object */\r\n    name?: string | null;\r\n    /** User friendly label. */\r\n    label?: string | null;\r\n    /** Schema document that contains the schema. */\r\n    schemaDoc?: string | null;\r\n    /** Identifier / path to the schema that defines the data structure for the content. */\r\n    schema?: string | null;\r\n    /** If true, the schema should be interpreted as an array (display in table by default). */\r\n    isArray?: boolean | null;\r\n    /** Data payload / content of the object. */\r\n    content?: any[] | null;\r\n    /** Potential validation data for content.\r\nNote that in many scenarios, validation may not be done / may not be serialized to storage so this property may be null. */\r\n    validation?: ApiValidation | null;\r\n    /** Defines one or multiple views for the dataset object. Typically this is fields to include / exclude from\r\nthe views and definitions on how the views should be formatted / edited.\r\nFirst view is considered the default view and some UI's will only support that one view. */\r\n    views?: DatasetView[] | null;\r\n}\r\n\r\n/** Defines a view, typically an array view, for a dataset. */\r\nexport interface DatasetView {\r\n    /** Properties / columns that should be shown in the view.\r\nThese may be either simple column names or property paths (e.g. \"personalInfo.avatar.sortableName\") for hierarchical objects. */\r\n    include?: string[] | null;\r\n    /** Properties / columns that should be shown excluded from the view.\r\nExclusion is used only if Include is not set and it is applied to the \"default view\":\r\nDefault view depends on the renderer, but it is typically just the first level of a hierarchical view,\r\nso exclude values are typically just simple column / property names, not property paths. */\r\n    exclude?: string[] | null;\r\n}\r\n\r\nexport interface PageResultOfDatasetListItem {\r\n    items?: DatasetListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of datasets. */\r\nexport interface DatasetListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: DatasetStatus | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: DatasetListItemData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Dataset specific business data for index. */\r\nexport interface DatasetListItemData {\r\n    /** Key for the usecase based on which it is resolved. \r\nLater, this may resolve to a user interface, microservice or a to manifest registering one.\r\nFor now, just use a unique string starting with a domain you own. */\r\n    usecaseUri?: string | null;\r\n}\r\n\r\nexport interface PageResultOfEmploymentListItem {\r\n    items?: EmploymentListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of employment relations in the user interface. */\r\nexport interface EmploymentListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: EmploymentRelationStatus | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: EmploymentData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Employment specific business data for index. */\r\nexport interface EmploymentData {\r\n    /** Type for the pension insurance. */\r\n    pensionCalculation?: PensionCalculation | null;\r\n    /** Taxcard type from the employment point of view. */\r\n    taxcard?: EmploymentRelationTaxcard | null;\r\n    /** Type of the employment relation */\r\n    type?: EmploymentRelationType | null;\r\n    /** Start date of the Employment Relation. */\r\n    startDate?: string | null;\r\n    /** End date of the Employment Relation. */\r\n    endDate?: string | null;\r\n    /** Duration of the employment. If true, the employment relation is for a fixed term.\r\nOtherwise (which is the default) the employment relation continues until further notice. */\r\n    isFixedTerm?: boolean | null;\r\n    /** Indicates that the employment relation has been terminated.\r\nThis is the value stored in the database as opposed to */\r\n    isTerminated?: boolean | null;\r\n    /** The search logic returns the active state of the employment here in relation to queried date (or today).\r\nNote that you cannot query based on this dynamic parameter: All values in the search index are null. */\r\n    isActive?: boolean | null;\r\n}\r\n\r\n/** Employing relation info for the worker. */\r\nexport interface EmployingRelation {\r\n    /** Employer avatar */\r\n    employer?: AccountInIndex | null;\r\n    /** Contact information for the report. Typically the employer, but may be something else.\r\nBy desing, the contact information is not filled in for Private Person employers. */\r\n    contact?: Contact | null;\r\n    /** Relevant and public employer settings. */\r\n    settings?: EmployingRelationSettings | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Settings for the employing relation. */\r\nexport interface EmployingRelationSettings {\r\n    /** Cost accounting settings for employing relation. */\r\n    costAccounting?: EmployingRelationCostAccounting | null;\r\n}\r\n\r\n/** Cost accounting settings in the employing relation. */\r\nexport interface EmployingRelationCostAccounting {\r\n    /** Cost accounting dimensions */\r\n    dimensions?: CostAccountingDimensionDefinition[] | null;\r\n}\r\n\r\n/** Cost accounting dimension definition. */\r\nexport interface CostAccountingDimensionDefinition {\r\n    /** Id for the dimension. */\r\n    id?: string | null;\r\n    /** Default label for the dimension entry. */\r\n    label?: string | null;\r\n    /** Hierarchial object containing selection options for dimension values. */\r\n    options?: CostAccountingDimensionOption[] | null;\r\n    /** If true, multiple values can be set to the dimension and the costs are shared between dimension values. */\r\n    allowCostSharing?: boolean | null;\r\n    /** Defines the visible scopes of the dimension. For example, Scope.Row shows the dimension on row level only. */\r\n    scope?: CostAccountingDimensionScope | null;\r\n}\r\n\r\n/** Selectable cost accounting dimension value. */\r\nexport interface CostAccountingDimensionOption {\r\n    /** Value for the option. */\r\n    value?: string | null;\r\n    /** Description of the value. */\r\n    text?: string | null;\r\n    /** For option hiearchies, path to this option not including the value itself. */\r\n    path?: string | null;\r\n    /** Defines the visible scopes of the dimension values. For example, Scope.Row shows the dimension value on row level only.\r\nThe default is, that the scope is not defined and that the value is visible everywhere. */\r\n    scope?: CostAccountingDimensionScope | null;\r\n}\r\n\r\n/** The BlobFile stores metadata about miscellaneous BLOB-files that are stored to the system. For example Receipts and Authorizations. */\r\nexport interface BlobFile {\r\n    id?: string | null;\r\n    /** The logical container - first level folder for the file. */\r\n    container?: BlobRepository | null;\r\n    /** Strongly typed logical type of the file. For user files, this is a sub folder. */\r\n    type?: BlobFileType | null;\r\n    /** File type (mime type etc.) based on the ending of the file name.\r\nNull for folders. */\r\n    readonly fileType?: FileType | null;\r\n    /** A user friendly name that can be used in listings.\r\nIn the upload scenarios this is usually the original file name when uploaded. \r\nIt is not necessarily unique. No path information */\r\n    userFriendlyName?: string | null;\r\n    /** Technical file name in storage.  In practical terms, this is the relative path\r\nexcluding the container part \"/[container]/\". \r\nI.e. this property is without the starting slash \"/\". \r\nIt must be unique and is used for Uri.\r\nFor user files this is constructed \"[Username]/[Type]/[UniqueFileName].[xxx]\" */\r\n    filePath?: string | null;\r\n    /** Full unique URI in the storage */\r\n    blobUri?: string | null;\r\n    /** If created, contains uri to a PNG image for preview purposes. */\r\n    previewUri?: string | null;\r\n    updatedAt?: string | null;\r\n    /** The length of the file in bytes. */\r\n    length?: number | null;\r\n    /** If true, this is a collection (folder in file system) */\r\n    isCollection?: boolean | null;\r\n    metadata?: BlobFileMetadata | null;\r\n    /** The workflow data for manual editing and approval purposes. */\r\n    workflowData?: WorkflowData | null;\r\n}\r\n\r\nexport interface FileType {\r\n    extension?: string | null;\r\n    mimeType?: string | null;\r\n    isImage?: boolean | null;\r\n    readonly isText?: boolean | null;\r\n}\r\n\r\n/** Metadata related to blob files as a strongly typed object. */\r\nexport interface BlobFileMetadata {\r\n    /** Whether the document is digitally signed (or manually checked as being signed).\r\nAt the time of writing, this is used only for AuthorizationPdf documents. */\r\n    isSigned?: boolean | null;\r\n    /** Logical date for the file. E.g. first of the month for a monthly report. */\r\n    logicalDate?: string | null;\r\n    /** Subtype is internal typing within a BlobFileType. This may or may not be a sub-folder.\r\nThere is no enumeration on File level - there may be one under services specific to one BlobFileType. */\r\n    subType?: string | null;\r\n    /** Avatar object related to the report.\r\nFor example for the salary payments this is the other party (employer or worker) */\r\n    avatar?: Avatar | null;\r\n    /** Identifier of the original calculation etc. business object. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation. */\r\n    payment?: number | null;\r\n    /** Arbitrary metadata. */\r\n    data?: { [key: string]: any; } | null;\r\n}\r\n\r\nexport interface PageResultOfFileListItem {\r\n    items?: FileListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of reports in the user interface. It contains all essential information of the report and is basis for searching, filtering and sorting. */\r\nexport interface FileListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: string | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: FileData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Report specific business data for index. */\r\nexport interface FileData {\r\n    /** Contains the email or id of the responsible for the partner workflow event. */\r\n    partnerMessageAssignedTo?: string | null;\r\n    /** Number of workers in the report. */\r\n    workerCount?: number | null;\r\n    /** Number of calculations in the report. */\r\n    calculationCount?: number | null;\r\n    /** Official id for the report. */\r\n    officialId?: string | null;\r\n    /** A user friendly name that can be used in listings.\r\nIn the upload scenarios this is usually the original file name when uploaded. \r\nIt is not necessarily unique. No path information */\r\n    userFriendlyName?: string | null;\r\n    /** Technical file name in storage.  In practical terms, this is the relative path\r\nexcluding the container part \"/[container]/\". \r\nI.e. this property is without the starting slash \"/\". \r\nIt must be unique and is used for Uri.\r\nFor user files this is constructed \"[Username]/[Type]/[UniqueFileName].[xxx]\" */\r\n    filePath?: string | null;\r\n}\r\n\r\nexport interface PageResultOfHolidayYearListItem {\r\n    items?: HolidayYearListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of holiday years  in the user interface. */\r\nexport interface HolidayYearListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: string | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: HolidayYearData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Holiday year specific business data for index. */\r\nexport interface HolidayYearData {\r\n    /** Holiday year. */\r\n    year?: number | null;\r\n    /** Employment id. */\r\n    employmentId?: string | null;\r\n}\r\n\r\n/** Report for containing all the result data and rules for the holiday pay calculation. */\r\nexport interface HolidayPayCalculationReportData {\r\n    /** Holiday year for which the holiday pay is calculated. */\r\n    holidayYear?: HolidayYear | null;\r\n    /** Current settings for the accrual calculations. */\r\n    holidayAccrualSettings?: HolidayAccrualSettings | null;\r\n    /** Applied settings for the holiday pay calculation. */\r\n    holidayPaySettings?: HolidayPaySettings | null;\r\n    /** Detailed calculation data with rows on which the holiday pay calculation is based. */\r\n    calculations?: HolidayPayCalculationReportDataCalc[] | null;\r\n}\r\n\r\n/** Settings for the holiday accrual calculations. */\r\nexport interface HolidayAccrualSettings {\r\n    /** Defines how the holidays are handled for the worker. */\r\n    code?: HolidayCode | null;\r\n    /** Applicable collective agreement */\r\n    cbaCode?: number | null;\r\n    /** Employee group. */\r\n    employeeGroup?: string | null;\r\n    /** Flag for disabling the setting. */\r\n    disabled?: boolean | null;\r\n    /** If specified, defines the start holiday year for the settings.\r\nIf in the future, the settings is inactive. Null (default) means the settings is valid indefinetely from the past. */\r\n    startYear?: number | null;\r\n    /** If specified, defines the end holiday year for the settings. \r\nThe year is inclusive meaning.\r\nIf in the past, the the settings is inactive. Null (default) means the settings is valid indefinetely to future. */\r\n    endYear?: number | null;\r\n    /** RowTypes, WageTypes or IncomeTypes which accumulate working time.\r\nDefault is  null, which means that a default set of types is used. */\r\n    workingTimeTypes?: string[] | null;\r\n    /** Script for the holiday accrual calculation. Used if {Palkkaus.Model.Settings.Holiday.HolidayAccrualSettings.Code} is {Palkkaus.Model.Worktime.Holidays.HolidayCode.Script}. */\r\n    script?: string | null;\r\n}\r\n\r\n/** Settings for the holiday pay calculations. */\r\nexport interface HolidayPaySettings {\r\n    /** Defines how the holiday pay is calculated. */\r\n    holidayPayCalculation?: HolidayPayCalculation | null;\r\n    /** Applicable collective agreement */\r\n    cbaCode?: number | null;\r\n    /** Employee group. */\r\n    employeeGroup?: string | null;\r\n    /** Flag for disabling the setting. */\r\n    disabled?: boolean | null;\r\n    /** If specified, defines the start holiday year for the settings.\r\nIf in the future, the settings is inactive. Null (default) means the settings is valid indefinetely from the past. */\r\n    startYear?: number | null;\r\n    /** If specified, defines the end holiday year for the settings. \r\nThe year is inclusive meaning.\r\nIf in the past, the the settings is inactive. Null (default) means the settings is valid indefinetely to future. */\r\n    endYear?: number | null;\r\n    /** Possible multipliers for the holiday pay calculation.\r\nDefault is  null, which means that a default set of multipliers is used. */\r\n    multipliers?: { [key: string]: number; } | null;\r\n    /** RowTypes, WageTypes or IncomeTypes that are used in the holiday pay calculation and which accumulate working time.\r\nDefault is  null, which means that a default set of types is used.\r\nThis is applicable only for {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.AverageHourlyPay} */\r\n    workingTimeTypes?: string[] | null;\r\n    /** RowTypes, WageTypes or IncomeTypes that are used in the holiday pay calculation and which accumulate overtime.\r\nDefault is  null, which means that a default set of types is used.\r\nThis is applicable only for {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.AverageDailyPay} */\r\n    overtimeTypes?: string[] | null;\r\n    /** RowTypes, WageTypes or IncomeTypes that are used in the holiday pay calculation and which accumulate salary.\r\nDefault is  null, which means that a default set of types is used. */\r\n    salaryTypes?: string[] | null;\r\n    /** Script for the holiday pay calculation. Used if {Palkkaus.Model.Settings.Holiday.HolidayPaySettings.HolidayPayCalculation} is {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.ScriptPay}. */\r\n    script?: string | null;\r\n}\r\n\r\n/** Detailed calculation data with rows on which the holiday pay calculation is based. */\r\nexport interface HolidayPayCalculationReportDataCalc {\r\n    /** Calculation id. */\r\n    calculationId?: string | null;\r\n    /** Calculation title. */\r\n    calculationTitle?: string | null;\r\n    /** Calculation salary date. */\r\n    salaryDate?: string | null;\r\n    /** Calculation work start date. */\r\n    workStartDate?: string | null;\r\n    /** Calculation work end date. */\r\n    workEndDate?: string | null;\r\n    /** Working days in the calculation.\r\nThis is applicable only for {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.AverageDailyPay} */\r\n    workingDays?: number | null;\r\n    /** Absences days in the calculation.\r\nThis is applicable only for {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.AverageDailyPay}. */\r\n    absenceDays?: number | null;\r\n    /** Total salary in the calculation which is calculated into holiday pay. */\r\n    total?: number | null;\r\n    /** Total hours in the calculation which is calculated into holiday pay.\r\nThis is applicable only for {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.AverageHourlyPay} */\r\n    hours?: number | null;\r\n    /** Total over time hours in the calculation which is calculated into holiday pay.\r\nThis is applicable only for {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.AverageDailyPay}.\"/&gt; */\r\n    overtimeHours?: number | null;\r\n    /** Detailed row data on which the holiday pay calculation is based. */\r\n    rows?: HolidayPayCalculationReportDataCalcRow[] | null;\r\n}\r\n\r\n/** Detailed row data on which the holiday pay calculation is based. */\r\nexport interface HolidayPayCalculationReportDataCalcRow {\r\n    /** The row of the calculation. */\r\n    irRow?: IrRow | null;\r\n    /** Matching RowType, Type or IncomeType which accumulates salary. */\r\n    salaryType?: string | null;\r\n    /** Matching RowType, Type or IncomeType which accumulates working time.\r\nThis is applicable only for {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.AverageHourlyPay} */\r\n    workingTimeType?: string | null;\r\n    /** Matching RowType, Type or IncomeType which accumulates overtime.\r\nThis is applicable only for {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.AverageDailyPay} */\r\n    overtimeType?: string | null;\r\n    /** Total salary which is calculated into holiday pay. */\r\n    total?: number | null;\r\n    /** Total hours which is calculated into holiday pay.\r\nThis is applicable only for {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.AverageHourlyPay} */\r\n    hours?: number | null;\r\n    /** Total over time hours which is calculated into holiday pay.\r\nThis is applicable only for {Palkkaus.Model.Worktime.Holidays.HolidayPayCalculation.AverageDailyPay}.\"/&gt; */\r\n    overtimeHours?: number | null;\r\n}\r\n\r\n/** Household yearly data. */\r\nexport interface HouseholdYear {\r\n    /** Year for the salaries */\r\n    year?: number | null;\r\n    /** Status of the household deduction process. */\r\n    processingStatus?: HouseholdYearProcessingStatus | null;\r\n    /** Status of user feedback. */\r\n    status?: HouseholdYearStatus | null;\r\n    /** Free text from the account holder to Salaxy backoffice. */\r\n    userFeedbackText?: string | null;\r\n    /** Time when the feedback was given. */\r\n    userFeedbackTime?: string | null;\r\n    /** Amount of accident insurance paid during this year as reported by the user\r\nThis is relevant for households for Household deduction: \r\nThis amount can be deducted from the yearly salaries and needs to be reported to tax authorities. */\r\n    insuranceAmount?: number | null;\r\n    /** Name of the spouse with who the household deduction is split */\r\n    spouseName?: string | null;\r\n    /** Finnish Personal ID of the spouse with who the household deduction is split */\r\n    spousePersonalId?: string | null;\r\n    /** Readonly workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\nexport interface PageResultOfHouseholdYearListItem {\r\n    items?: HouseholdYearListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents household yearly deduction data. */\r\nexport interface HouseholdYearListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: HouseholdYearStatus | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: HouseholdYearData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Household year specific business data for index. */\r\nexport interface HouseholdYearData {\r\n    /** Contains the email or id of the responsible for the partner workflow event. */\r\n    partnerMessageAssignedTo?: string | null;\r\n}\r\n\r\n/** Result item of the EInvoice address query. */\r\nexport interface EInvoiceAddress {\r\n    /** Name for the company. */\r\n    receiverName?: string | null;\r\n    /** Official id of the company. */\r\n    receiverOfficialId?: string | null;\r\n    /** Receiver EInvoice address of company. */\r\n    receiver?: string | null;\r\n    /** Intermediator id for this receiver address. */\r\n    intermediator?: string | null;\r\n    /** Intermediator name for this receiver address. */\r\n    intermediatorName?: string | null;\r\n}\r\n\r\n/** API worker import object. The API uses this object for mass operations for creating or assuring the worker employment relations in the system. */\r\nexport interface WorkerImport {\r\n    /** Company number in the the trade register (Y-tunnus). \r\nFormat is \"1234567-8\" - 7 numbers, one control character, with or without the dash.\r\nAlso, the international VAT format is allowed: FI12345678\r\nThis field is optional and defaults to the company number of the current account. */\r\n    officialId?: string | null;\r\n    /** Additional parameters for import. Defaults to string. */\r\n    parameters?: { [key: string]: any; } | null;\r\n    /** Item for import. */\r\n    item?: WorkerAccount | null;\r\n    /** Validation for the import */\r\n    validation?: ApiValidation | null;\r\n    /** Result object of the import. */\r\n    result?: ApiImportResultOfString | null;\r\n}\r\n\r\n/** Account data that is relevant for a Worker. */\r\nexport interface WorkerAccount {\r\n    /** Tha bank account number of the Worker - in Iban format. */\r\n    ibanNumber?: string | null;\r\n    /** If created (and still owned) by an employer, this is the AccountOwnerId of the employer who created this account. */\r\n    employerId?: string | null;\r\n    /** The Person ID of the worker if known. */\r\n    officialPersonId?: string | null;\r\n    /** Age range that is relevant to workers salary calculation and/or employment.\r\nSet this especially if OfficialPersonId is not set. \r\nIf OfficialPersonId is valid, this property is always set based on it. */\r\n    ageRange?: AgeRange | null;\r\n    /** Current Employment Relation: The data that is owned by the Employer about the Worker \r\neven if the Worker has registered and created an account.\r\nIf employer has several Employment Relations, this is the one that is marked as Primary. */\r\n    employment?: WorkerAccountEmployment | null;\r\n    /** Provides validation errors currently only in Save operations,\r\nbut potentially in the future also in detail/list views. */\r\n    validation?: ApiValidation | null;\r\n    /** The unique id for the employment. This does not change within one employment. */\r\n    employmentId?: string | null;\r\n    /** Entity type of the account.\r\nType PersonCreatedByEmployer means that the Worker has not yet signed into the system and there may be multiple instances of the same logical person (Official ID) - one for each employer. */\r\n    entityType?: LegalEntityType | null;\r\n    /** If true the object Account is and Employer account - it has the EmployerInfo object */\r\n    isEmployer?: boolean | null;\r\n    /** If true the object Account is and Worker account - it has the WorkerInfo object */\r\n    isWorker?: boolean | null;\r\n    /** If true, the account has been verified. Typically this means a digitally signed contract.\r\nThis means that the account also has an Identity object.\r\nHowever, as the Identity object contains confidential information, it is not necessarily present in all method calls. */\r\n    isVerified?: boolean | null;\r\n    /** Avatar is the visual representation of the Account. */\r\n    avatar?: Avatar | null;\r\n    /** Contact information for the Account. */\r\n    contact?: Contact | null;\r\n    /** Language of the person/company. */\r\n    language?: Language | null;\r\n    /** Service model for the account. */\r\n    serviceModelId?: string | null;\r\n    /** Workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Result of the import. Both status and possible item are returned. */\r\nexport interface ApiImportResultOfString {\r\n    /** Status of the import */\r\n    status?: ApiImportStatus | null;\r\n    /** Result object of the import. Defaults to id of the imported object. */\r\n    item?: string | null;\r\n}\r\n\r\n/** Employment Relation as it is shown as part of WorkerAccount. */\r\nexport interface WorkerAccountEmployment {\r\n    /** Type of the employment relation */\r\n    type?: EmploymentRelationType | null;\r\n    /** Type of additional income earner data by National Incomer Register classification . If several types apply, all of them should be selected. */\r\n    irIncomeEarnerTypes?: IncomeEarnerType[] | null;\r\n    /** Applicable collective agreement */\r\n    cbaCode?: number | null;\r\n    /** Employee group. */\r\n    employeeGroup?: string | null;\r\n    /** Describes the work that is being performed in this Employment Relation. */\r\n    work?: WorkDescription | null;\r\n    /** Defines how the holidays are specified to this Worker. */\r\n    holidays?: HolidaySpecification | null;\r\n    /** Usecase is data related to the source and processing of the Employment data outside the Salaxy backend service / system.\r\nTypically, Usecase data would be processed by an external system that has originally created the \r\nEmployment Relation (Worker / Employee in many systems). E.g. expenses system, hourly reporting system. */\r\n    usecase?: UsecaseData | null;\r\n    /** Type for the pension insurance. */\r\n    pensionCalculation?: PensionCalculation | null;\r\n    /** Rules (e.g. effect of monthly lower limit) for pension calculation. */\r\n    pensionRule?: PensionRule | null;\r\n    /** The id of the pension company. */\r\n    pensionCompany?: PensionCompany | null;\r\n    /** The pension contract number. */\r\n    pensionContractNumber?: string | null;\r\n    /** The id of the insurance company. */\r\n    insuranceCompany?: InsuranceCompany | null;\r\n    /** The accident insurance contract number. */\r\n    insuranceContractNumber?: string | null;\r\n    /** Taxcard type from the employment point of view. */\r\n    taxcard?: EmploymentRelationTaxcard | null;\r\n    /** Worker's salary payment method, bank account, external etc. */\r\n    salaryPaymentMethod?: EmploymentRelationSalaryPaymentMethod | null;\r\n    /** Start date of the Employment Relation. */\r\n    startDate?: string | null;\r\n    /** End date of the Employment Relation. */\r\n    endDate?: string | null;\r\n    /** Duration of the employment. If true, the employment relation is for a fixed term.\r\nOtherwise (which is the default) the employment relation continues until further notice. */\r\n    isFixedTerm?: boolean | null;\r\n    /** Indicates that the employment relation has been terminated.\r\nSaving with this status also makes the employment relation Archived. */\r\n    isTerminated?: boolean | null;\r\n    /** If true, the worker is the same person as the actual signed owner of the account. */\r\n    isAccountOwner?: boolean | null;\r\n    /** Identifier in a source system. Used in imports etc. */\r\n    sourceId?: string | null;\r\n    /** Employment registration code for Incomes Registry. */\r\n    employmentRegCode?: string | null;\r\n}\r\n\r\n/** API company import object. The API uses this object for mass operations for creating or assuring the customer companies in the system. */\r\nexport interface CompanyImport {\r\n    /** Company number in the the trade register (Y-tunnus). \r\nFormat is \"1234567-8\" - 7 numbers, one control character, with or without the dash.\r\nAlso, the international VAT format is allowed: FI12345678\r\nThis field is optional and defaults to the company number of the current account. */\r\n    officialId?: string | null;\r\n    /** Additional parameters for import. Defaults to string. */\r\n    parameters?: { [key: string]: any; } | null;\r\n    /** Item for import. */\r\n    item?: AssureCompanyAccountRequest | null;\r\n    /** Validation for the import */\r\n    validation?: ApiValidation | null;\r\n    /** Result object of the import. */\r\n    result?: ApiImportResultOfPartnerCompanyAccountInfo | null;\r\n}\r\n\r\n/** Request to assure that a company account exists: Either an account is returned or an account stub (non-verified) will be created. */\r\nexport interface AssureCompanyAccountRequest {\r\n    /** Company number in the the trade register (Y-tunnus). \r\nFormat is \"1234567-8\" - 7 numbers, one control character, with or without the dash.\r\nAlso, the international VAT format is allowed: FI12345678 */\r\n    officialId: string;\r\n    /** The account identifier at the partner site. \r\nIf present, this ID is used to restrict the authorization to one account at partner site only. */\r\n    partnerAccountId?: string | null;\r\n    /** Contact e-mail */\r\n    email?: string | null;\r\n    /** Telephone number for the contact person */\r\n    telephone?: string | null;\r\n    /** First name of the contact person */\r\n    contactFirstName?: string | null;\r\n    /** Last name of the contact person */\r\n    contactLastName?: string | null;\r\n    /** The primary partner account for the new company to create.\r\nIf the company already exists and has given authorization to the primary partner, and does not have any primary partner, the primary partner will be set.\r\nPlease note, that the calling account must have the authorization to the primary partner account, or\r\nbe the primary partner itself. */\r\n    proxyPartner?: string | null;\r\n    /** Language preference. */\r\n    language?: Language | null;\r\n}\r\n\r\n/** Result of the import. Both status and possible item are returned. */\r\nexport interface ApiImportResultOfPartnerCompanyAccountInfo {\r\n    /** Status of the import */\r\n    status?: ApiImportStatus | null;\r\n    /** Result object of the import. Defaults to id of the imported object. */\r\n    item?: PartnerCompanyAccountInfo | null;\r\n}\r\n\r\n/** Information about a Customer account for a Partner */\r\nexport interface PartnerCompanyAccountInfo {\r\n    /** Account Id */\r\n    accountId?: string | null;\r\n    /** Account Id formatted for dispaly to end user */\r\n    accountIdFormatted?: string | null;\r\n    /** Avatar for display information */\r\n    avatar?: Avatar | null;\r\n    /** If true, the account has a verified owner. */\r\n    isVerified?: boolean | null;\r\n    /** If true, the current user (the partner) is authorized to access the account */\r\n    isAuthorized?: boolean | null;\r\n    /** The partner account ID to which the access is currently restricted. */\r\n    partnerAccountId?: string | null;\r\n}\r\n\r\n/** Import object for E-invoice delivery. */\r\nexport interface EInvoicingRequest {\r\n    /** Company number in the the trade register (Y-tunnus). \r\nFormat is \"1234567-8\" - 7 numbers, one control character, with or without the dash.\r\nAlso, the international VAT format is allowed: FI12345678\r\nThis field is optional and defaults to the company number of the current account. */\r\n    officialId?: string | null;\r\n    /** Additional parameters for import. Defaults to string. */\r\n    parameters?: { [key: string]: any; } | null;\r\n    /** Item for import. */\r\n    item?: string | null;\r\n    /** Validation for the import */\r\n    validation?: ApiValidation | null;\r\n    /** Result object of the import. */\r\n    result?: ApiImportResultOfObject | null;\r\n}\r\n\r\n/** Result of the import. Both status and possible item are returned. */\r\nexport interface ApiImportResultOfObject {\r\n    /** Status of the import */\r\n    status?: ApiImportStatus | null;\r\n    /** Result object of the import. Defaults to id of the imported object. */\r\n    item?: any | null;\r\n}\r\n\r\n/** API worker check object. The API uses this object for checking the existence of a worker with employment. */\r\nexport interface WorkerCheck {\r\n    /** Company number in the the trade register (Y-tunnus). \r\nFormat is \"1234567-8\" - 7 numbers, one control character, with or without the dash.\r\nAlso, the international VAT format is allowed: FI12345678\r\nThis field is optional and defaults to the company number of the current account. */\r\n    officialId?: string | null;\r\n    /** Item id to check.\r\nThis can be external ID, official ID or Salaxy ID. */\r\n    id?: string | null;\r\n    /** Validation for the import */\r\n    validation?: ApiValidation | null;\r\n    /** Result object of the import. */\r\n    result?: ApiCheckResultOfWorkerAccountOf | null;\r\n}\r\n\r\n/** Result of the check. Both status and possible item are returned. */\r\nexport interface ApiCheckResultOfWorkerAccountOf {\r\n    /** Status of the check */\r\n    status?: ApiCheckStatus | null;\r\n    /** Result object of the check. Defaults to null. */\r\n    item?: WorkerAccount[] | null;\r\n}\r\n\r\n/** Import object for invoice creation. */\r\nexport interface InvoicingRequest {\r\n    /** Company number in the the trade register (Y-tunnus). \r\nFormat is \"1234567-8\" - 7 numbers, one control character, with or without the dash.\r\nAlso, the international VAT format is allowed: FI12345678\r\nThis field is optional and defaults to the company number of the current account. */\r\n    officialId?: string | null;\r\n    /** Additional parameters for import. Defaults to string. */\r\n    parameters?: { [key: string]: any; } | null;\r\n    /** Item for import. */\r\n    item?: string | null;\r\n    /** Validation for the import */\r\n    validation?: ApiValidation | null;\r\n    /** Result object of the import. */\r\n    result?: ApiImportResultOfInvoiceOf | null;\r\n}\r\n\r\n/** Result of the import. Both status and possible item are returned. */\r\nexport interface ApiImportResultOfInvoiceOf {\r\n    /** Status of the import */\r\n    status?: ApiImportStatus | null;\r\n    /** Result object of the import. Defaults to id of the imported object. */\r\n    item?: Invoice[] | null;\r\n}\r\n\r\n/** Invoice for the pending payment in the business system. For example, a salary gross payment created for the salary calculation and delivered as an e-invoice to the employer. For example, a salary net payment, created for the employer which is self paying the net payment to the worker. */\r\nexport interface Invoice {\r\n    /** Group indicator.\r\nInvoices with the same group id can be paid in the same batch. */\r\n    group?: string | null;\r\n    /** Invoice header details. */\r\n    header?: InvoiceHeader | null;\r\n    /** Invoice recipient details. */\r\n    recipient?: InvoiceRecipient | null;\r\n    /** Invoice payer details. */\r\n    payer?: InvoicePayer | null;\r\n    /** List of invoice rows. */\r\n    rows?: InvoiceRow[] | null;\r\n    /** Invoice data in XML or json format. */\r\n    content?: string | null;\r\n    /** Invoice in pdf format. */\r\n    pdf?: string | null;\r\n    /** The workflow data for manual editing and approval purposes. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Header for the invoice */\r\nexport interface InvoiceHeader {\r\n    /** Payment reference (e.g. RF0710010831).\r\nPlease note that in salary payment scenarios, this is not necessarily unique. */\r\n    referenceNumber?: string | null;\r\n    /** Invoice Date. */\r\n    date?: string | null;\r\n    /** Due date for the invoice. */\r\n    dueDate?: string | null;\r\n    /** The date for the actual period for which this invoice is done.\r\nFor salaries, this is salary date, for monthly / quarterly payments, this is the first day of period. */\r\n    logicalDate?: string | null;\r\n    /** Total amount for the invoice excluding VAT. */\r\n    totalExVat?: number | null;\r\n    /** Total payable amount for the invoice including VAT. */\r\n    total?: number | null;\r\n    /** Already paid amount of the invoice.\r\nThis is applicable only for some periodic invoices, like tax invoices, which may be paid in parts. */\r\n    totalPaid?: number | null;\r\n    /** The free text that is displayed / sent with the invoice.\r\nMay have multiple lines. */\r\n    message?: string | null;\r\n    /** Channel that is used for paying the invoice. */\r\n    channel?: PaymentChannel | null;\r\n    /** Invoice type. */\r\n    type?: InvoiceType | null;\r\n    /** The external ID is used for matching the executed payment from the 3rd party system\r\nto the pending payment in the Palkkaus system. */\r\n    externalId?: string | null;\r\n    /** The current notified status of the invoice in external system. */\r\n    status?: InvoiceStatus | null;\r\n    /** The time when the object status was last updated. */\r\n    statusAt?: string | null;\r\n    /** Invoice/payment status in the external system. */\r\n    externalStatusAt?: string | null;\r\n    /** External status of the invoice in the external system. */\r\n    externalStatus?: string | null;\r\n    /** List of business object ids (typically calculations) on which the payment is based on. */\r\n    businessObjects?: string[] | null;\r\n    /** The payroll ID of the calculation this invoice is based on (applicable only for Net and Foreclosure). */\r\n    payrollId?: string | null;\r\n    /** The payroll Title of the calculation this invoice is based on (applicable only for Net and Foreclosure). */\r\n    payrollTitle?: string | null;\r\n    /** The count of paid business objects (typically calculations) which the invoices is based on.\r\nThis is applicable only for some periodic invoices, like tax invoices, which may be paid in parts. */\r\n    paidBusinessObjectsCount?: number | null;\r\n    /** Period for the Invoice: Work period, month / quarter of sidecosts etc. */\r\n    period?: DateRange | null;\r\n    /** The payment type of the invoice. If the payment channel does not support the requested payment type (e.g. Salary),\r\nit should set here the payment type that it used (e.g. Default).\r\nPayment channel should also expect new types to be introduced, without that being a breaking change.\r\nCurrently, we expect Default always be supported. */\r\n    paymentType?: InvoicePaymentType | null;\r\n}\r\n\r\n/** Payment receiver party of the invoice. */\r\nexport interface InvoiceRecipient {\r\n    /** The full name of the payment receiver for payment purposes. */\r\n    fullName?: string | null;\r\n    /** The International Bank Account Number of the receiver. */\r\n    iban?: string | null;\r\n    /** This is an official identifier of the party: Finnish Personal Id (HETU) for a Person or Company Id (Y-tunnus) for a company or association.\r\nWARNING: This is currently needed for Finvoice only (https://www.finanssiala.fi/finvoice/Sivut/default.aspx). As such we consider removing it from persons. \r\nPlease inform if you use this property! */\r\n    officialId?: string | null;\r\n    /** Identifier in a source system. Used in imports etc. */\r\n    sourceId?: string | null;\r\n    /** Optional contact info. Not available for all recipients. */\r\n    contact?: Contact | null;\r\n    /** The ultimate beneficiary of the money: \r\nThis may be a Palkkaus.fi Worker Account (Avatar id is not null)\r\nor some other entity: Tax authorities, pension company etc. (Avatar id is null).\r\nTypically beneficiary is the same as Iban, OfficialId, FullName and Contact in this object,\r\nbut this is not true in edge cases (e.g. customer funds account). */\r\n    beneficiary?: AccountInIndex | null;\r\n}\r\n\r\n/** Payment payer party of the invoice. */\r\nexport interface InvoicePayer {\r\n    /** Avatar is the visual representation of the party. */\r\n    avatar?: Avatar | null;\r\n    /** Contact information for the party. */\r\n    contact?: Contact | null;\r\n    /** Official identifier of the party:\r\nFinnish HETU (Soc. sec. number) for a Person or Y-tunnus (Company ID for a company or association). */\r\n    officialId?: string | null;\r\n    /** Optional ID for identifying the party in the third party system.\r\nThis is the same partner key that is given as part of Single Sign-On process. */\r\n    partnerKey?: string | null;\r\n}\r\n\r\n/** Row for the invoice */\r\nexport interface InvoiceRow {\r\n    /** Article Identifier is given by seller, EAN etc.\r\nIn the case of Salaxy salaries, this is CalculationRowType. */\r\n    articleId?: string | null;\r\n    /** Name of the product or service.\r\nIn the case of Salaxy salaries, this is language versioned text of CalculationRowType. */\r\n    articleName?: string | null;\r\n    /** Message (RowFreeText in Finvoice) is the message is mainly designed for accounting systems. */\r\n    message?: string | null;\r\n    /** Count (DeliveredQuantity in Finvoice) is the quantity of product or service. */\r\n    count?: number | null;\r\n    /** Price including VAT (UnitPriceVatIncludedAmount, Yksikköhinta verollinen) */\r\n    price?: number | null;\r\n    /** Price of one product or service without Vat (UnitPriceAmount, Yksikköhinta veroton). \r\nYksikköhinta voidaan ilmoittaa myös verollisena UnitPriceVatIncludedAmount- elementissä laskutuskäytännön ja verottajan ALV-ohjeistuksen mukaan. */\r\n    priceExVat?: number | null;\r\n    /** Vat percent related to the product or service (RowVatRatePercent, Alv%)\r\nPlease note that eg. 24% is valued as 0.24 */\r\n    vatPercent?: number | null;\r\n    /** Row total excluding VAT (RowVatExcludedAmount, Yhteensä veroton) */\r\n    totalExVat?: number | null;\r\n    /** Row total with VAT (RowAmount, Yhteensä verollinen) */\r\n    total?: number | null;\r\n    /** Suggested account number (RowNormalProposedAccountIdentifier). */\r\n    accountingAccountNumber?: string | null;\r\n    /** Textual code for accounting mapping (RowProposedAccountText, Raportointikoodi).\r\nIn Finvoice: \"Accounting information agreed between seller and buyer.\" */\r\n    accountingCode?: string | null;\r\n    /** Business object id (typically calculation) on which the row is based on. */\r\n    businessObject?: string | null;\r\n}\r\n\r\n/** Check object for invoice settings. */\r\nexport interface InvoiceSettingsCheck {\r\n    /** Company number in the the trade register (Y-tunnus). \r\nFormat is \"1234567-8\" - 7 numbers, one control character, with or without the dash.\r\nAlso, the international VAT format is allowed: FI12345678\r\nThis field is optional and defaults to the company number of the current account. */\r\n    officialId?: string | null;\r\n    /** Item id to check.\r\nThis can be external ID, official ID or Salaxy ID. */\r\n    id?: string | null;\r\n    /** Validation for the import */\r\n    validation?: ApiValidation | null;\r\n    /** Result object of the import. */\r\n    result?: ApiCheckResultOfInvoiceSettings | null;\r\n}\r\n\r\n/** Result of the check. Both status and possible item are returned. */\r\nexport interface ApiCheckResultOfInvoiceSettings {\r\n    /** Status of the check */\r\n    status?: ApiCheckStatus | null;\r\n    /** Result object of the check. Defaults to null. */\r\n    item?: InvoiceSettings | null;\r\n}\r\n\r\n/** Settings related to invoices that are sent to customers. */\r\nexport interface InvoiceSettings {\r\n    /** Receiver's address for the e-invoice. */\r\n    eInvoiceReceiver?: string | null;\r\n    /** Receiver's operator for the e-invoice. */\r\n    eInvoiceIntermediator?: string | null;\r\n    /** SEPA maksatustunnus */\r\n    sepaBankPartyId?: string | null;\r\n    /** Employer's bank account number */\r\n    ibanNumber?: string | null;\r\n}\r\n\r\n/** API calculation import object. The API uses this object for mass operations for adding calculations to a new or existing payroll object. If the calculation object does not contain a valid payroll-ID, a new payroll will be created. Returns payroll ID. */\r\nexport interface CalculationImport {\r\n    /** Company number in the the trade register (Y-tunnus). \r\nFormat is \"1234567-8\" - 7 numbers, one control character, with or without the dash.\r\nAlso, the international VAT format is allowed: FI12345678\r\nThis field is optional and defaults to the company number of the current account. */\r\n    officialId?: string | null;\r\n    /** Additional parameters for import. Defaults to string. */\r\n    parameters?: { [key: string]: any; } | null;\r\n    /** Item for import. */\r\n    item?: Calculation | null;\r\n    /** Validation for the import */\r\n    validation?: ApiValidation | null;\r\n    /** Result object of the import. */\r\n    result?: ApiImportResultOfString | null;\r\n}\r\n\r\n/** Save options for the payroll calculations. */\r\nexport interface PayrollCalculationsSaveOptions {\r\n    /** If true, the included calculations should be merged into the existing calculations. */\r\n    isMerge?: boolean | null;\r\n    /** Merging option for the rows. */\r\n    rowMergeOption?: RowMergeOption | null;\r\n    /** Source id for the merged rows.\r\nPlease note that if the RowMergeOption is RemoveImportedRows and the source ID is set, only the rows with the given source ID will be removed,\r\notherwise if the source ID is not set, all rows with any source ID will be removed. */\r\n    sourceId?: string | null;\r\n    /** If true, any calculation should be added with \r\nthe default rows from the employment. */\r\n    applyEmploymentDefaultRows?: boolean | null;\r\n    /** If true, resolves, recalculates and updates holidays and absences to the given calculations. */\r\n    applyWorktime?: boolean | null;\r\n}\r\n\r\n/** Contains order data for Varma pensions (TyEL, YEL) and required operations. */\r\nexport interface VarmaPensionOrder {\r\n    /** Orderer information. */\r\n    orderer?: InvoiceParty | null;\r\n    /** Action for the order. */\r\n    action?: VarmaPensionOrderAction | null;\r\n    /** Validation information. */\r\n    validation?: ApiValidation | null;\r\n    /** YEL data for the order */\r\n    yel?: VarmaPensionOrderYel | null;\r\n    /** TyEL data for the order */\r\n    tyel?: VarmaPensionOrderTyel | null;\r\n}\r\n\r\n/** Party in an Varma Invoice: Either Payer or Recipient. */\r\nexport interface InvoiceParty {\r\n    /** Finnish Company ID (Y-tunnus). */\r\n    companyId?: string | null;\r\n    /** Organisation name */\r\n    companyName?: string | null;\r\n    /** Contact information */\r\n    contact?: Contact | null;\r\n    /** Contact person Full name */\r\n    contactPersonName?: string | null;\r\n}\r\n\r\n/** Varma pension order YEL details. */\r\nexport interface VarmaPensionOrderYel {\r\n    /** Personal id number. */\r\n    personalId?: string | null;\r\n    /** Payer definition. */\r\n    payer?: VarmaPensionOrderYelPayer | null;\r\n    /** If true, indicates that existing contract will be moved to Varma. */\r\n    isMove?: boolean | null;\r\n    /** Estimated yearly income. */\r\n    yearlyIncome?: number | null;\r\n    /** Start date for the new pension. */\r\n    startDate?: string | null;\r\n    /** Movement timing. (Q1,Q2,Q3 or Q4, or as soon as possible) */\r\n    moveMoment?: string | null;\r\n    /** Indicates if the existing yearly income estimate will be changed. */\r\n    isYearlyIncomeChange?: boolean | null;\r\n}\r\n\r\n/** Varma pension order TyEL details. */\r\nexport interface VarmaPensionOrderTyel {\r\n    /** Personal id number. */\r\n    personalId?: string | null;\r\n    /** If true, indicates that existing contract will be moved to Varma. */\r\n    isMove?: boolean | null;\r\n    /** Estimated yerly income. */\r\n    yearlyIncome?: number | null;\r\n    /** Start year for the new order. */\r\n    startYear?: string | null;\r\n    /** Start month for the new order. */\r\n    startMonth?: string | null;\r\n    /** Movement timing. (Q1,Q2,Q3 or Q4, or as soon as possible) */\r\n    moveMoment?: string | null;\r\n}\r\n\r\n/** Local Tapiola insurance order API object. */\r\nexport interface LocalTapiolaInsuranceOrder {\r\n    /** Status of the Local Tapiola insurance order. */\r\n    status?: LocalTapiolaInsuranceOrderStatus | null;\r\n    /** Information about the company placing the Local Tapiola insurance order. */\r\n    company?: LocalTapiolaInsuranceOrderCompanyInfo | null;\r\n    /** Information about the Local Tapiola worker insurance order. */\r\n    items?: LocalTapiolInsuranceOrderInfo[] | null;\r\n    /** Validation information. */\r\n    validation?: ApiValidation | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Information required for an insured company with a Local Tapiola occupational accident insurance. */\r\nexport interface LocalTapiolaInsuranceOrderCompanyInfo {\r\n    /** Company details. */\r\n    details?: AccountInIndex | null;\r\n    /** Company address. */\r\n    address?: Contact | null;\r\n    /** If true, the address of the Principal Place Of Business differs from the company address. */\r\n    hasPrincipalBusinessAddress?: boolean | null;\r\n    /** Address of the principal place of business. */\r\n    principalBusinessAddress?: Contact | null;\r\n    /** Information of the insured companys delegate person. */\r\n    contactPerson?: LocalTapiolaInsuranceOrderCompanyContactPerson | null;\r\n    /** Company owner structure is too complex to be fully represented with simple form data\r\ni.e. list of InsuranceOrderCompanyOwnerInfo objects. */\r\n    complexOwnerStructure?: boolean | null;\r\n    /** List of beneficial owners of the company. */\r\n    owners?: BeneficialOwner[] | null;\r\n    /** List of other beneficiaries than beneficial owners of the company */\r\n    beneficiaries?: Beneficiary[] | null;\r\n}\r\n\r\n/** Information required with a Local Tapiola worker accident insurance order. */\r\nexport interface LocalTapiolInsuranceOrderInfo {\r\n    /** Type of the Local Tapiola insurance order. */\r\n    orderType?: LocalTapiolaInsuranceOrderType | null;\r\n    /** Start date of the insurance. Only valid for new occupational accident insurance and\r\nentrepreneur insurance. If insurance is moved to Local Tapiola from another insurance\r\ncompany, StartingPoint should be used instead. */\r\n    startDate?: string | null;\r\n    /** Billing interval (1, 2, 3 or 4 times per year). Applies only to entrepreneur insurance. */\r\n    billingInterval?: number | null;\r\n    /** Name of the old insurance company, if the insurance is transferred to Local Tapiola\r\nfrom some other insurance company. */\r\n    oldInsuranceCompany?: string | null;\r\n    /** Industry that the company operates in. */\r\n    industry?: string | null;\r\n    /** Occupation types and income estimates. Can be many entries for an occupational accident\r\ninsurance and only a single entry for an entrepreneur insurance. */\r\n    occupations?: LocalTapiolaInsuranceOrderOccupation[] | null;\r\n    /** Name of the entrepreneur. */\r\n    insuredName?: string | null;\r\n    /** Social security number of the entrepreneur. */\r\n    insuredOfficialId?: string | null;\r\n}\r\n\r\n/** Information required for a company contact person with a Local Tapiola occupational accident insurance. */\r\nexport interface LocalTapiolaInsuranceOrderCompanyContactPerson {\r\n    /** The authorization type of for the contact person. */\r\n    authorizationType?: LocalTapiolaInsuranceOrderAuthorizationType | null;\r\n    /** Avatar for the account */\r\n    avatar?: Avatar | null;\r\n    /** Official id of the person or company. */\r\n    officialId?: string | null;\r\n    /** Email address. */\r\n    email?: string | null;\r\n    /** Telephone number. */\r\n    telephone?: string | null;\r\n    /** Bank account number (IBAN) */\r\n    ibanNumber?: string | null;\r\n}\r\n\r\n/** Occupation information required with a new Local Tapiola worker occupational accident insurance order. */\r\nexport interface LocalTapiolaInsuranceOrderOccupation {\r\n    /** Occupation code. */\r\n    occupationCode?: string | null;\r\n    /** Occupation name. */\r\n    occupationName?: string | null;\r\n    /** Estimated annual salary income. */\r\n    estimatedIncome?: number | null;\r\n}\r\n\r\nexport interface PageResultOfInvoiceListItem {\r\n    items?: InvoiceListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of invoices in the user interface. It contains all essential information of the report and is basis for searching, filtering and sorting. */\r\nexport interface InvoiceListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: InvoiceStatus | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: InvoiceData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Invoice specific business data for index. */\r\nexport interface InvoiceData {\r\n    /** Contains the email or id of the responsible for the partner workflow event. */\r\n    partnerMessageAssignedTo?: string | null;\r\n    /** Channel that is used for paying the invoice. */\r\n    channel?: PaymentChannel | null;\r\n    /** Invoice Date. */\r\n    date?: string | null;\r\n    /** Due date for the invoice. */\r\n    dueDate?: string | null;\r\n    /** Start of period for the Invoice: Work period, month / quarter of sidecosts etc. */\r\n    periodStart?: string | null;\r\n    /** End of period for the Invoice: Work period, month / quarter of sidecosts etc. */\r\n    periodEnd?: string | null;\r\n    /** Already paid amount of the invoice.\r\nThis is applicable only for some periodic invoices, like tax invoices, which may be paid in parts. */\r\n    totalPaid?: number | null;\r\n    /** The count of paid business objects (typically calculations) which the invoices is based on.\r\nThis is applicable only for some periodic invoices, like tax invoices, which may be paid in parts. */\r\n    paidBusinessObjectsCount?: number | null;\r\n    /** The time when the object status was last updated. */\r\n    statusAt?: string | null;\r\n    /** The payroll ID of the calculation this invoice is based on (applicable only for Net and Foreclosure). */\r\n    payrollId?: string | null;\r\n    /** The payroll Title of the calculation this invoice is based on (applicable only for Net and Foreclosure). */\r\n    payrollTitle?: string | null;\r\n    /** Invoice/payment status in the external system. */\r\n    externalStatusAt?: string | null;\r\n    /** External status of the invoice in the external system. */\r\n    externalStatus?: string | null;\r\n}\r\n\r\n/** Represents a bank account in the Visma BankConnect system. */\r\nexport interface Account {\r\n    /** Gets or sets a value indicating whether the account is a web service account. */\r\n    webServiceAccount?: boolean | null;\r\n    /** Gets or sets the web service payment ID associated with the account. */\r\n    webServicePaymentId?: string | null;\r\n    /** Gets or sets the name of the bank associated with the account. */\r\n    bank?: AccountBank | null;\r\n    /** Gets or sets the International Bank Account Number (IBAN) of the account. */\r\n    iban?: string | null;\r\n    /** Gets or sets the name of the account. */\r\n    name?: string | null;\r\n    /** Gets or sets the owner of the account. */\r\n    owner?: string | null;\r\n    /** Gets or sets the product type of the account. */\r\n    product?: string | null;\r\n    /** Gets or sets the currency of the account. */\r\n    currency?: AccountCurrency | null;\r\n    /** Gets or sets the Bank Identifier Code (BIC) of the account. */\r\n    bic?: string | null;\r\n    /** Gets or sets the account authorizations. */\r\n    authorizations?: AccountAuthorizations | null;\r\n    /** Gets or sets the creation date of the entity. */\r\n    created?: string | null;\r\n    /** Gets or sets the last updated date of the entity. */\r\n    updated?: string | null;\r\n    /** Gets or sets the unique identifier of the entity. */\r\n    id?: string | null;\r\n}\r\n\r\nexport interface AccountAuthorizations {\r\n    accounts?: Authorization | null;\r\n    payments?: Authorization | null;\r\n}\r\n\r\nexport interface Authorization {\r\n    expires?: string | null;\r\n}\r\n\r\n/** Defines a set of calculations based on identifiers potentially unsaved Calculation objects as well as Payrolls. */\r\nexport interface CalculationCollection {\r\n    /** Collection of calculation ID's to be fetched from storage */\r\n    ids?: string[] | null;\r\n    /** Collection of payroll ID's to be fetched from storage */\r\n    payrollIds?: string[] | null;\r\n    /** Collection of inline calculations that may be saved or not */\r\n    calcs?: Calculation[] | null;\r\n    /** Collection of inline Payroll objects that may be saved or not */\r\n    payrolls?: PayrollDetails[] | null;\r\n}\r\n\r\n/** New version 03 of Payroll. Payroll (Palkkalista) is a list of employees who receive salary or wages from a particular organization. Typical usecase is that a a company has e.g. a monthly salary list that is paid at the end of month. For next month, a copy is then made from the latest list and the copy is potentially modified with the changes of that particular month. */\r\nexport interface PayrollDetails {\r\n    /** Input that defines the Payroll. */\r\n    input?: PayrollInput | null;\r\n    /** General summary information about the Payroll and when it was las processed. */\r\n    info?: Payroll03Info | null;\r\n    /** Snapshots of the calculations based on the ID's specified in Info */\r\n    calcs?: Calculation[] | null;\r\n    /** When saved or validated, provides a validation object for each calculation:\r\nWhether the calculations are ready for payment. */\r\n    validations?: ApiListItemValidation[] | null;\r\n    /** A usecase for creating and editing Payroll lists.\r\nIn practice, a usecase is either a user interface or a microservice that provides a Payroll processing\r\nand it may be implemented outside Salaxy.\r\nProvides the possibility to store useacase specific data as part of the Payroll. */\r\n    usecase?: UsecaseData | null;\r\n    /** The workflow data for manual editing and approval purposes. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Input that user defines about the Payroll */\r\nexport interface PayrollInput {\r\n    /** Title that can be specified by the end user. */\r\n    title?: string | null;\r\n    /** The Default Salary period for the Payroll.\r\nThis may be overriden for an individual calculation. */\r\n    period?: DateRange | null;\r\n    /** The requested date for the SalaryDate from the employer. */\r\n    salaryDate?: string | null;\r\n    /** Defines the re-setting of the salary date in the calculation re-calculation. */\r\n    salaryDateKind?: SalaryDateKind | null;\r\n    /** Channel that is used for payment. */\r\n    paymentChannel?: PaymentChannel | null;\r\n    /** What types of wages are paid with this payroll.\r\nMay affect the rendering of the user interface (e.g. for holidays, hours and absences).\r\nAlso affects which Workers are show in the add / link dialog by default. */\r\n    wageBasis?: WageBasis | null;\r\n    /** If true, the calculation rows are not updated from employment when the Payroll is copied.\r\nDefault is that the rows and other data is updated in copy / create new etc. */\r\n    noUpdateFromEmployment?: boolean | null;\r\n    /** If the Payroll is based on a template, this is the identifier of the template.\r\nThe field can be manually set to null / ID to break / reconnect that connection. */\r\n    template?: string | null;\r\n    /** List of calculations that are attached to this calculation. */\r\n    calculations?: string[] | null;\r\n    /** Identifier of the payroll in a source system. Used in imports etc. */\r\n    sourceId?: string | null;\r\n}\r\n\r\n/** Provides Read-only information about the Payroll In the case of non-paid Payrolls, this is the latest save/validation. In the case of paid Payrolls, this is the status of the Payroll when it was paid. */\r\nexport interface Payroll03Info {\r\n    /** Date that the Info was last updated. */\r\n    date?: string | null;\r\n    /** Count of calculations in this Payroll */\r\n    calcCount?: number | null;\r\n    /** Total gross salary */\r\n    totalGrossSalary?: number | null;\r\n    /** Total payment for the Payroll. */\r\n    totalPayment?: number | null;\r\n    /** Total Palkkaus.fi fees for the Payroll */\r\n    fees?: number | null;\r\n    /** If true, all calculations have been validated and they are valid for payment.\r\nIf false, validation has not been done or some calculations are not valid for payment. */\r\n    isReadyForPayment?: boolean | null;\r\n    /** Status for the payroll and its calculations in the payment Workflow. */\r\n    status?: PayrollStatus | null;\r\n    /** Due date for the payroll. Date when the payment should be made to achieve SalaryDate. */\r\n    dueDate?: string | null;\r\n    /** Paid at date for the payroll. (Date of the employer's payment). */\r\n    paymentDate?: string | null;\r\n    /** The estimated date when the salary is withdrawable by the worker. */\r\n    salaryDate?: string | null;\r\n    /** The reference number of the payment after payment is made. */\r\n    paymentId?: string | null;\r\n    /** Original Payment reference number */\r\n    originalPaymentId?: string | null;\r\n    /** Application id for invoicing etc. purposes. */\r\n    applicationId?: string | null;\r\n    /** The MessageThread Id, if this payroll is referred in a message thread. */\r\n    messageThreadId?: string | null;\r\n}\r\n\r\n/** ApiValidation object that is specialized for list items. Provides if and index properties for connecting a validation to a specific item in the list */\r\nexport interface ApiListItemValidation {\r\n    /** Identifier of the item this validation is for.\r\nIdentifiers are not always available (if the item has not been saved), so index is a more generic approach. */\r\n    id?: string | null;\r\n    /** Zero based index of the item this validation is for. */\r\n    index?: number | null;\r\n    /** If true, the data is valid - no errors. */\r\n    readonly isValid?: boolean | null;\r\n    /** If true, has required fields missing data. */\r\n    readonly hasAllRequiredFields?: boolean | null;\r\n    /** Validation errors on invalid field values. \r\nNote that required fields missing error messages are not here. Only the invalid values. */\r\n    readonly errors?: ApiValidationError[] | null;\r\n}\r\n\r\n/** Provides a preview of how an invoice should be created. In the future versions, it is expected to return DIFF information on how potential previously created invoices would behave (e.g. if som invoices would be canceled or changed). */\r\nexport interface InvoicePreview {\r\n    /** The invoice that exists / would be created. */\r\n    invoice?: InvoiceListItem | null;\r\n    /** If true, this invoice has already been created. */\r\n    exists?: boolean | null;\r\n}\r\n\r\n/** Messages thread groups togehter a set of related messages and/or attachments. */\r\nexport interface MessageThread {\r\n    /** Title for the message */\r\n    title?: string | null;\r\n    /** Status for the entire message thread. */\r\n    status?: MessageThreadStatus | null;\r\n    /** The owner of the thread: The entity that has the right to delete or move the thread.\r\nThis may or may not be the originator the message thread.\r\nThe owner is typically Company or Household, in some cases Worker person.\r\nIt should NOT be partner or person from a company. */\r\n    ownerInfo?: Avatar | null;\r\n    /** Palkkaus.fi id (IBAN) of the other party.\r\nThe other party is the second entity(besides the owner) in that is juridically in the message.\r\nThis may or may not be the originator the message thread.\r\nIt is typically the Partner or Palkkaus.fi, but may also be the Worker in the future. */\r\n    otherParty?: string | null;\r\n    /** The other party is the second entity (besides the owner) in that is juridically in the message.\r\nThis may or may not be the originator the message thread.\r\nIt is typically the Partner or Palkkaus.fi, but may also be the Worker in the future. */\r\n    otherPartyInfo?: Avatar | null;\r\n    /** List of messages and attachments in this thread */\r\n    messages?: Message[] | null;\r\n    /** The workflow from the Owner point-of-view. */\r\n    ownerWorkflow?: MessageThreadWorkflow | null;\r\n    /** The workflow from the other party point-of-view. */\r\n    otherPartyWorkflow?: MessageThreadWorkflow | null;\r\n    /** The workflow data for manual editing and approval purposes. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Provides data for the usecase: The customer or service model level customization that is done for this object.\r\nThe customization may define user interface, data model and even scripts or worflow related to the object. */\r\n    usecase?: UsecaseData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** A message within a messaging thread. */\r\nexport interface Message {\r\n    /** Unique identifier for the message. */\r\n    id?: string | null;\r\n    /** Time for the message */\r\n    time?: string | null;\r\n    /** Content type of the message */\r\n    type?: ThreadedMessageType | null;\r\n    /** Textual content: If message, this is the content text.\r\nIf other type, short title / description typically shown in the title bar. */\r\n    content?: string | null;\r\n    /** Identifier of the external content.\r\nBlobFile Id for attachments, Calculation ID for calculations etc. */\r\n    contentId?: string | null;\r\n    /** Other misc. data that is used in displaying the content in the immediate message view.\r\nDo not include the entire object here. Just the immediately available data. */\r\n    contentData?: { [key: string]: any; } | null;\r\n    /** Content type specific text for preview.\r\nThis may be URI, ID or boolean.\r\nFor BlobFile, it is currently the BlobFile Guid (the same as ContentId) or null, \r\nbut in the future, the field may also contain an URL without that being a breaking change! */\r\n    preview?: string | null;\r\n    /** The party / type of the message sender. */\r\n    fromParty?: MessageFrom | null;\r\n    /** If set, specifies the time when the message has been read by the thread owner. */\r\n    readByOwner?: string | null;\r\n    /** If set, specifies the time when the message has been read by the other party. */\r\n    readByOtherParty?: string | null;\r\n    /** Validates the object that is the payload of the message. */\r\n    validation?: ApiValidation | null;\r\n}\r\n\r\n/** Defines workflow actions for a message thread. */\r\nexport interface MessageThreadWorkflow {\r\n    /** Number of messages that this party has posted that have not been read by the other party. */\r\n    unreadCount?: number | null;\r\n    /** The salary date for the discussion.\r\nOwner's and other party's are typically the same, but they may differ: \r\ne.g. one may be the requested / estimated date and the other the first possible date if the requested is unrealistic.\r\nNOTE: Unlike in Salaxy, this is always UTC. */\r\n    salaryDate?: string | null;\r\n    /** Time of the last message posted by this party. \r\nNOTE: Unlike in Salaxy, this is always UTC. */\r\n    updatedAt?: string | null;\r\n    /** Text for the last message (written by this party). This is for preview purposes: May be shortened. */\r\n    lastMessageText?: string | null;\r\n}\r\n\r\nexport interface PageResultOfMessageListItem {\r\n    items?: MessageListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of message threads in the user interface. It contains header data of the message thread and is basis for searching, filtering and sorting. */\r\nexport interface MessageListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: string | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: MessageData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Message thread specific business data for index. */\r\nexport interface MessageData {\r\n    /** Title for the message */\r\n    title?: string | null;\r\n    /** Last message that was was created by the owner */\r\n    ownerLastMessage?: string | null;\r\n    /** Last message that was created by the other party */\r\n    otherPartyLastMessage?: string | null;\r\n    /** Number of messages by Owner that have not been read by the other party */\r\n    ownerUnreadCount?: number | null;\r\n    /** Number of messages that have been read by the Other party and have not been read by the owner. */\r\n    otherPartyUnreadCount?: number | null;\r\n    /** Contains the email or id of the responsible for the partner workflow event. */\r\n    partnerMessageAssignedTo?: string | null;\r\n    /** Key for the usecase based on which it is resolved. \r\nLater, this may resolve to a user interface, microservice or a to manifest registering one.\r\nFor now, just use a unique string starting with a domain you own. */\r\n    usecaseUri?: string | null;\r\n    /** If true, the message is a salaxy email, generated by the system. */\r\n    isSalaxyEmail?: boolean | null;\r\n    /** Start date of the default salary period */\r\n    periodStart?: string | null;\r\n    /** End date of the default salary period */\r\n    periodEnd?: string | null;\r\n    /** Count of calculations in this Payroll */\r\n    calcCount?: number | null;\r\n    /** Time of the last message posted by owner. */\r\n    ownerUpdatedAt?: string | null;\r\n    /** Time of the last message posted by other party. */\r\n    otherPartyUpdatedAt?: string | null;\r\n}\r\n\r\n/** Measurement value. */\r\nexport interface Measurement {\r\n    /** Tag for the measurement. */\r\n    tag?: string | null;\r\n    /** Time when the measurement was recorded. */\r\n    timestamp?: string | null;\r\n    /** Actual measurement value. */\r\n    value?: number | null;\r\n}\r\n\r\n/** Provides the data for onboarding process for a company. Onboarding is the process where Salaxy gathers sufficient information to at least create an acccount, often even more so that the user can pay a salaary with the account. */\r\nexport interface Onboarding {\r\n    /** Type of the account to be created. */\r\n    accountType: WebSiteUserRole;\r\n    /** Partner that should be added as primary authorization when the object is created.\r\nCurrently not used in update operations (only New and Signature / VismaSign)\r\nand does not set as primary partner except if exception specifically made for a partner. */\r\n    authorizePartner?: string | null;\r\n    /** The server-side status of the onboarding process.\r\nNOTE that there is a more relaxed user interface-level state in ui.state and ui.stateFullText \r\nthat can be used in onboarding user interfaces. */\r\n    status?: OnboardingStatus | null;\r\n    /** Input that is needed for creating a company account. */\r\n    company?: CompanyInput | null;\r\n    /** Input that is needed for creating a personal account.\r\nThis may be \r\n1) the principal account if the account is created for 1a) Worker or 1b) Household or \r\n2) creator owner if the account is created for a Company. */\r\n    person?: PersonInput | null;\r\n    /** Possibility to define products. \r\nThese can only be defined to one account as part of the onboarding process: \r\nIf company account is created, the products are always for Company, not for the Person =&gt; \r\nPerson will have default products in that case and they need to be edited in a separate process once the accounts have been created. */\r\n    products?: AccountProducts | null;\r\n    /** Input and post data for digital signature. */\r\n    signature?: SignatureData | null;\r\n    /** Validation status and errors. */\r\n    validation?: AccountValidation | null;\r\n    /** User interface related data: Mainly the state of the UI. */\r\n    ui?: OnboardingUIState | null;\r\n    credentials?: OnboardingCredentials | null;\r\n    /** Custom state object that is guaranteed to survive the round-trip in the onboarding process.\r\nCalling application to the onboarding may pass here any data that it needs after the onboarding process is ready and user has been authenticated. */\r\n    appState?: { [key: string]: string; } | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Represents the input for creating a company account. */\r\nexport interface CompanyInput {\r\n    /** If true, creates a company account based on company data. */\r\n    doCreate?: boolean | null;\r\n    /** Official name of the company */\r\n    name: string;\r\n    /** URL to a Logo picture (preferably PNG). This logo should be a square - icon type of logo for avatar. */\r\n    logo?: string | null;\r\n    /** The Business ID (Y-tunnus / Business Identity Code) is a code given to businesses and organizations by the PRH or the Tax Administration. \r\nIt consists of seven digits, a dash and a control mark, for example 1234567-8.\r\nAlternative accepted formats incule international VAT number \"FI12345678\" or number without the dash: \"12345678\". */\r\n    businessId: string;\r\n    /** This is an official name of the actor.\r\nIt originates from the YTJ or Bank authentication. */\r\n    officialName?: string | null;\r\n    /** If an object with the given BusinessID exists, it is resolved here: The unique ID is set here by the onboarding service. This field cannot be set. */\r\n    resolvedId?: string | null;\r\n    /** Identifier at the partner site - typically an organization ID. */\r\n    partnerAccountId?: string | null;\r\n    /** Company ownership for KYC */\r\n    ownership?: Ownership | null;\r\n    /** If true, will fetch the data from the Finnish Business Infromation System (YTJ/BIS).\r\nFetching is done firstly based on Business ID, if that is not valid then based on name. */\r\n    doYtjUpdate?: boolean | null;\r\n    /** The details of company data as provided by the Finnish Business Infromation System (YTJ/BIS) */\r\n    ytjDetails?: YtjCompany | null;\r\n    /** A search to Finnish Business Infromation System (YTJ/BIS). This search is triggered if you set the RawInput field. */\r\n    ytjSearch?: YtjSearchResult | null;\r\n    /** The legal type of the company, as categorized by Palkkaus / used in generating IBAN numbers. */\r\n    companyType: CompanyType;\r\n    /** Contact information for the company */\r\n    contact?: Contact | null;\r\n    /** List of roles which this account is member of. */\r\n    roles?: Role[] | null;\r\n    /** Language of the company. */\r\n    language?: Language | null;\r\n}\r\n\r\nexport interface PersonInput {\r\n    /** If true, creates a personal account based on this data.\r\nOtherwise this is just user data for Company. */\r\n    doCreate?: boolean | null;\r\n    /** Contact information for the user / personal account */\r\n    contact?: Contact | null;\r\n    /** Verification objects for contact verification. */\r\n    contactVerification?: OnboardingContactVerifications | null;\r\n    /** Finnish Personal ID (Henkilötunnus /HETU) */\r\n    personalId?: string | null;\r\n    /** This is an official name of the actor.\r\nIt originates from the YTJ or Bank authentication. */\r\n    officialName?: string | null;\r\n    /** If an object with the given PersonalId exists, it is resolved here: The unique ID is set here by the onboarding service. This field cannot be set. */\r\n    resolvedId?: string | null;\r\n    /** First name or company name */\r\n    firstName?: string | null;\r\n    /** Last name, for companies, this should be null */\r\n    lastName?: string | null;\r\n    /** URL of the picture if specified as picture (null in a case of type Icon) */\r\n    picture?: string | null;\r\n    /** Bank account number for salary payment */\r\n    bankAccountIban?: string | null;\r\n    /** Language of the person. */\r\n    language?: Language | null;\r\n}\r\n\r\n/** Provides an overview and the possibility to edit products that are enabled to this account */\r\nexport interface AccountProducts {\r\n    /** The basic services for Salary payment. */\r\n    baseService?: BaseSalaryProduct | null;\r\n    /** Reports and payments to tax authorities. */\r\n    tax?: TaxProduct | null;\r\n    /** Reports and payments to TVR (the unemployment insurance fund of Finland) */\r\n    unemployment?: UnemploymentProduct | null;\r\n    /** Reports ant payments to Pension companies. */\r\n    pension?: PensionProduct | null;\r\n    /** Reports and payments for mandatory employment insurances. */\r\n    insurance?: InsuranceProduct | null;\r\n    /** Bookkeeping reports for salarypayments */\r\n    accounting?: AccountingProduct | null;\r\n    /** Employer health care from the company Heltti */\r\n    healthCareHeltti?: HealthCareHelttiProduct | null;\r\n    /** Pension payments for an entrepreneur */\r\n    pensionEntrepreneur?: PensionEntrepreneurProduct | null;\r\n    /** Defines the pricing partner, service model and pricing model. */\r\n    pricing?: PricingProduct | null;\r\n}\r\n\r\nexport interface SignatureData {\r\n    /** Name of the signing person.\r\nBy default, this is Onboarding Person, but it may be a completely different person. */\r\n    personName?: string | null;\r\n    /** Personal ID of the person, who has the right to sign. */\r\n    personalId?: string | null;\r\n    /** Email that is sent to Signature provider, if any. */\r\n    email?: string | null;\r\n    /** Telephone that is sent to Signature provider, if any. */\r\n    telephone?: string | null;\r\n    /** If true, the person signing is PEP (Politically Exposed Person */\r\n    isPep?: boolean | null;\r\n    /** TODO: To be removed after Signicat is in production.\r\nData related to VismaSign signature process (API v01). */\r\n    vismaSignData?: VismaSignV01ObData | null;\r\n    /** Data related to Signicat signature process. */\r\n    signicatData?: SignicatData | null;\r\n    /** The account is authorized to sign on behalf of the actual account. */\r\n    isProcura?: boolean | null;\r\n}\r\n\r\n/** Validation errors for the onboarding process */\r\nexport interface AccountValidation {\r\n    /** If true the official ID is technically valid.\r\nOfficial ID is either Finnish Personal ID (HETU, Henkilötunnus) or Business ID (Y-tunnus). */\r\n    isOfficialIdValid?: boolean | null;\r\n    /** If false, none of the accounts in ExistingAccounts cannot be accessed by the current user. */\r\n    isAuthorized?: boolean | null;\r\n    /** TODO: NOt implemented yet - should be implemented\r\nIf true, the onboarding object has sufficient data to start the Digital Signature process (Visma Sign).\r\nDepending on the use case this may or may not be required for committing the data as account data. */\r\n    canStartSign?: boolean | null;\r\n    /** If true, the validation process has been completed. The IsValid may be true or false. */\r\n    isCompleted?: boolean | null;\r\n    /** Existing account based on official id (Personal ID / Business ID). */\r\n    existingAccount?: Avatar | null;\r\n    /** If true, the data is valid - no errors. */\r\n    readonly isValid?: boolean | null;\r\n    /** If true, has required fields missing data. */\r\n    readonly hasAllRequiredFields?: boolean | null;\r\n    /** Validation errors on invalid field values. \r\nNote that required fields missing error messages are not here. Only the invalid values. */\r\n    readonly errors?: ApiValidationError[] | null;\r\n}\r\n\r\n/** Stores data for the onboarding user interface. */\r\nexport interface OnboardingUIState {\r\n    /** State of the user interface. Typically an enumeration that stores where the UI was. E.g. Wizard step. */\r\n    state?: string | null;\r\n    /** Full description of the user interface state for admin and analyses purposes. */\r\n    stateFullText?: string | null;\r\n    /** URL where the user should be redirected back to when the onboarding process is complete. */\r\n    successUrl?: string | null;\r\n    /** URL where the user should be redirected back to if the process is canceled or there is an urecoverable error. */\r\n    cancelUrl?: string | null;\r\n    /** Response type to OAuth -request */\r\n    oAuthResponseType?: string | null;\r\n    /** Salaxy worker invitation key that points to a Salary slip / calculation that the user is coming to fetch \r\nin this onboarding process. The Onboarding data is prefilled with the data from th Salary calculation. */\r\n    invitationKey?: string | null;\r\n}\r\n\r\n/** Stores information about the credentials that were used in the Onboarding process. */\r\nexport interface OnboardingCredentials {\r\n    /** Identifier of the credentials (UserAccount Guid in the database). */\r\n    credentialId?: string | null;\r\n    /** The partner that initiated the Onboarding process. */\r\n    partnerId?: string | null;\r\n}\r\n\r\nexport interface Ownership {\r\n    /** If true, authorities require tracking the shareholders.\r\nIn Finland, with current legistlation, this is if a shareholder has over 25% of the shares. */\r\n    isRequiredTracking?: boolean | null;\r\n    /** List of shareholders for the company */\r\n    shareHolders?: Shareholder[] | null;\r\n}\r\n\r\n/** The details of company data as provided by the Finnish Business Infromation System (YTJ/BIS) */\r\nexport interface YtjCompany {\r\n    /** The Business ID (Y-tunnus / Business Identity Code) is a code given to businesses and organizations by the PRH or the Tax Administration. \r\nIt consists of seven digits, a dash and a control mark, for example 1234567-8.\r\nAlternative accepted formats incule international VAT number \"FI12345678\" or number without the dash: \"12345678\". */\r\n    businessId?: string | null;\r\n    /** Official name of the company. \r\nSource: Tiedostonimi.Tiedostonimi */\r\n    name?: string | null;\r\n    /** The legal type of the company, as categorized by Palkkaus / used in generating IBAN numbers. */\r\n    companyType?: CompanyType | null;\r\n    /** YTJ's legal type of the company as a string. This is only to be used for display purposes.\r\nSource: YritysHaku.YritysMuoto */\r\n    companyTypeText?: string | null;\r\n    /** The internal YTJ code number for the company's legal type. */\r\n    ytjCompanyType?: YtjCompanyType | null;\r\n    /** Original YTJ company type code. */\r\n    ytjCompanyTypeCode?: number | null;\r\n    /** Contact information for the */\r\n    contact?: Contact | null;\r\n    /** Social security number of the contact person in the company, if available. */\r\n    contactPersonPersonalId?: string | null;\r\n    /** Names are not necessarily avaiable. If they are, they may not be reliable. */\r\n    contactPerson?: string | null;\r\n    /** Mobile for or other company phone.\r\nDifference between Contact.Phone and ContactPhone is that \r\nthis (ContactPhone) is first mobile number, then company general phone if the former was null.\r\nContact.Phone is fisrt general phone number and mobile number only if not available. */\r\n    contactPhone?: string | null;\r\n    /** Web site address */\r\n    www?: string | null;\r\n    /** The sector where the company is active. (Toimialatieto.Koodi) */\r\n    sectorOfBusinessCode?: number | null;\r\n    /** Text of the sector where company operates. */\r\n    sectorOfBusinessText?: string | null;\r\n}\r\n\r\n/** Search result for free text search from the Finnish Business Infromation System (YTJ/BIS). Returns a list of companies without details. */\r\nexport interface YtjSearchResult {\r\n    /** The original search string - without trimming etc. that are done in the actual search. */\r\n    rawInput?: string | null;\r\n    /** If true, search is a success. This may mean that no results were found though. */\r\n    isSuccess?: boolean | null;\r\n    /** If true, the searh is too generic. \r\nTypically either there was more than 200 results or less than 3 characters in the search string. \r\nBoth of these return an error in the API. */\r\n    isTooGeneric?: boolean | null;\r\n    /** Technical status - for developers / admin. */\r\n    status?: string | null;\r\n    /** A message that can be shown to the end user. */\r\n    userMessage?: string | null;\r\n    /** API quota counter */\r\n    counter?: number | null;\r\n    /** Result of the search. */\r\n    result?: YtjSearchResultCompany[] | null;\r\n}\r\n\r\n/** Contact verification object for onboarding. */\r\nexport interface OnboardingContactVerifications {\r\n    /** Verification for email contact. */\r\n    email?: OnboardingContactVerification | null;\r\n    /** Verification for telephone contact. */\r\n    telephone?: OnboardingContactVerification | null;\r\n}\r\n\r\n/** First version of the product that integrates the Palkkaus.fi-salary payments to employers accounting. */\r\nexport interface BaseSalaryProduct {\r\n    /** If true, worker salary and expense payments are paid directly by the employer. */\r\n    isWorkerSelfHandling?: boolean | null;\r\n    /** Receiver's address for the e-invoice. */\r\n    eInvoiceReceiver?: string | null;\r\n    /** Receiver's operator for the e-invoice. */\r\n    eInvoiceIntermediator?: string | null;\r\n    /** SEPA maksatustunnus */\r\n    sepaBankPartyId?: string | null;\r\n    /** Identifier for the product */\r\n    readonly id?: string | null;\r\n    /** The main short title for the product / service */\r\n    readonly title?: string | null;\r\n    /** The status text that should give the user.\r\nRestrict the length to 56 characters. */\r\n    readonly status?: string | null;\r\n    /** One paragraph description text */\r\n    readonly description?: string | null;\r\n    /** The logo image for the product. */\r\n    readonly img?: string | null;\r\n    /** Identifier for the main product desription article in the Palkkaus.fi CMS */\r\n    readonly articleId?: string | null;\r\n    /** If true, the product is enabled for the current user */\r\n    enabled?: boolean | null;\r\n    /** If false, it is not bossible to enable this product for the current account / environment. \r\nTypically, this means that the UI should not show this product. */\r\n    visible?: boolean | null;\r\n    /** Indicates (true-value) if the end user has confirmed the product options.\r\nIf false, the end user has not confirmed the option. */\r\n    visited?: boolean | null;\r\n}\r\n\r\n/** Service related to integration, reporting and payments to tax authorities. */\r\nexport interface TaxProduct {\r\n    /** The reference number for the tax authorities */\r\n    paymentReferenceNumber?: string | null;\r\n    /** Defines how the reporting is done for Incomes registry (Tulorekisteri). */\r\n    irReporting?: TaxReportHandling | null;\r\n    /** If true, tax and social security payments are paid directly by the employer. */\r\n    isTaxAndSocialSecuritySelfHandling?: boolean | null;\r\n    /** Identifier for the product */\r\n    readonly id?: string | null;\r\n    /** The main short title for the product / service */\r\n    readonly title?: string | null;\r\n    /** The status text that should give the user.\r\nRestrict the length to 56 characters. */\r\n    readonly status?: string | null;\r\n    /** One paragraph description text */\r\n    readonly description?: string | null;\r\n    /** The logo image for the product. */\r\n    readonly img?: string | null;\r\n    /** Identifier for the main product desription article in the Palkkaus.fi CMS */\r\n    readonly articleId?: string | null;\r\n    /** If true, the product is enabled for the current user */\r\n    enabled?: boolean | null;\r\n    /** If false, it is not bossible to enable this product for the current account / environment. \r\nTypically, this means that the UI should not show this product. */\r\n    visible?: boolean | null;\r\n    /** Indicates (true-value) if the end user has confirmed the product options.\r\nIf false, the end user has not confirmed the option. */\r\n    visited?: boolean | null;\r\n}\r\n\r\n/** Product that helps employer to handle the mandatory unemployment insurance reports and payments. */\r\nexport interface UnemploymentProduct {\r\n    /** If true, the account has paid salaries this year outside Palkkaus.fi.\r\nThis affects the yearly reporting - Palkkaus needs to contact the account.\r\nNote that this is a shared option with the taxation product. */\r\n    isSalariesPaidThisYear?: boolean | null;\r\n    /** If true, the account has made prepayments or is registered to make prepayments.\r\nPalkkaus needs to contact the account. */\r\n    isPrepayments?: boolean | null;\r\n    /** If true, the account himself handles the unemployment insurance notifications. */\r\n    isNotificationsSelfHandling?: boolean | null;\r\n    /** Identifier for the product */\r\n    readonly id?: string | null;\r\n    /** The main short title for the product / service */\r\n    readonly title?: string | null;\r\n    /** The status text that should give the user.\r\nRestrict the length to 56 characters. */\r\n    readonly status?: string | null;\r\n    /** One paragraph description text */\r\n    readonly description?: string | null;\r\n    /** The logo image for the product. */\r\n    readonly img?: string | null;\r\n    /** Identifier for the main product desription article in the Palkkaus.fi CMS */\r\n    readonly articleId?: string | null;\r\n    /** If true, the product is enabled for the current user */\r\n    enabled?: boolean | null;\r\n    /** If false, it is not bossible to enable this product for the current account / environment. \r\nTypically, this means that the UI should not show this product. */\r\n    visible?: boolean | null;\r\n    /** Indicates (true-value) if the end user has confirmed the product options.\r\nIf false, the end user has not confirmed the option. */\r\n    visited?: boolean | null;\r\n}\r\n\r\n/** Pension for Workers: The payments and monthly reporting. */\r\nexport interface PensionProduct {\r\n    readonly status?: string | null;\r\n    /** The use has a pension contract done (as opposed to acting as a temporary employer that pays the pension without a acontract). */\r\n    isPensionContractDone?: boolean | null;\r\n    /** The pension company where the user has a contract. */\r\n    pensionCompany?: PensionCompany | null;\r\n    /** Number for the contract. */\r\n    pensionContractNumber?: string | null;\r\n    /** If true, the user handles the reporting and payments himself/herself. */\r\n    isPensionSelfHandling?: boolean | null;\r\n    /** If true, there is a new pending contract. */\r\n    isPendingContract?: boolean | null;\r\n    /** Enabled property set automatically by IsPensionSelfHandling. */\r\n    enabled?: boolean | null;\r\n    /** Identifier for the product */\r\n    readonly id?: string | null;\r\n    /** The main short title for the product / service */\r\n    readonly title?: string | null;\r\n    /** One paragraph description text */\r\n    readonly description?: string | null;\r\n    /** The logo image for the product. */\r\n    readonly img?: string | null;\r\n    /** Identifier for the main product desription article in the Palkkaus.fi CMS */\r\n    readonly articleId?: string | null;\r\n    /** If false, it is not bossible to enable this product for the current account / environment. \r\nTypically, this means that the UI should not show this product. */\r\n    visible?: boolean | null;\r\n    /** Indicates (true-value) if the end user has confirmed the product options.\r\nIf false, the end user has not confirmed the option. */\r\n    visited?: boolean | null;\r\n}\r\n\r\n/** Employer insurance. Currently, this is the mandatory employer insurance only. */\r\nexport interface InsuranceProduct {\r\n    readonly status?: string | null;\r\n    /** If set to true, the insurance is set to a partner insurance. */\r\n    isPartnerInsurance?: boolean | null;\r\n    /** If true, the user indicates that he/she has already made an insurance contract.\r\nShould also fill in the InsuranceCompany and InsuranceContractNumber */\r\n    isInsuranceContractDone?: boolean | null;\r\n    /** Company for the current insurance */\r\n    insuranceCompany?: InsuranceCompany | null;\r\n    /** Contract number for the current insurance. */\r\n    insuranceContractNumber?: string | null;\r\n    /** Enabled property set automatically by IsPartnerInsurance. */\r\n    enabled?: boolean | null;\r\n    /** Identifier for the product */\r\n    readonly id?: string | null;\r\n    /** The main short title for the product / service */\r\n    readonly title?: string | null;\r\n    /** One paragraph description text */\r\n    readonly description?: string | null;\r\n    /** The logo image for the product. */\r\n    readonly img?: string | null;\r\n    /** Identifier for the main product desription article in the Palkkaus.fi CMS */\r\n    readonly articleId?: string | null;\r\n    /** If false, it is not bossible to enable this product for the current account / environment. \r\nTypically, this means that the UI should not show this product. */\r\n    visible?: boolean | null;\r\n    /** Indicates (true-value) if the end user has confirmed the product options.\r\nIf false, the end user has not confirmed the option. */\r\n    visited?: boolean | null;\r\n}\r\n\r\n/** First version of the product that integrates the Palkkaus.fi-salary payments to employers accounting. */\r\nexport interface AccountingProduct {\r\n    readonly status?: string | null;\r\n    accountantName?: string | null;\r\n    accountantEmail?: string | null;\r\n    accountantPhone?: string | null;\r\n    /** Enabled property set automatically by AccountantName, AccountantEmail and AccountantPhone. */\r\n    enabled?: boolean | null;\r\n    /** Identifier for the product */\r\n    readonly id?: string | null;\r\n    /** The main short title for the product / service */\r\n    readonly title?: string | null;\r\n    /** One paragraph description text */\r\n    readonly description?: string | null;\r\n    /** The logo image for the product. */\r\n    readonly img?: string | null;\r\n    /** Identifier for the main product desription article in the Palkkaus.fi CMS */\r\n    readonly articleId?: string | null;\r\n    /** If false, it is not bossible to enable this product for the current account / environment. \r\nTypically, this means that the UI should not show this product. */\r\n    visible?: boolean | null;\r\n    /** Indicates (true-value) if the end user has confirmed the product options.\r\nIf false, the end user has not confirmed the option. */\r\n    visited?: boolean | null;\r\n}\r\n\r\n/** Employer health care from the company Heltti */\r\nexport interface HealthCareHelttiProduct {\r\n    /** Defines the product package */\r\n    package?: HelttiProductPackage | null;\r\n    /** Industry of work */\r\n    industry?: HelttiIndustry | null;\r\n    readonly status?: string | null;\r\n    /** Enabled property set automatically by HelttiProductPackage. */\r\n    enabled?: boolean | null;\r\n    /** Identifier for the product */\r\n    readonly id?: string | null;\r\n    /** The main short title for the product / service */\r\n    readonly title?: string | null;\r\n    /** One paragraph description text */\r\n    readonly description?: string | null;\r\n    /** The logo image for the product. */\r\n    readonly img?: string | null;\r\n    /** Identifier for the main product desription article in the Palkkaus.fi CMS */\r\n    readonly articleId?: string | null;\r\n    /** If false, it is not bossible to enable this product for the current account / environment. \r\nTypically, this means that the UI should not show this product. */\r\n    visible?: boolean | null;\r\n    /** Indicates (true-value) if the end user has confirmed the product options.\r\nIf false, the end user has not confirmed the option. */\r\n    visited?: boolean | null;\r\n}\r\n\r\nexport interface PensionEntrepreneurProduct {\r\n    readonly status?: string | null;\r\n    /** If true, user wants to order a YEL-contract. */\r\n    tempContractMarker?: boolean | null;\r\n    /** Enabled property set automatically by TempContractMarker. */\r\n    enabled?: boolean | null;\r\n    /** Identifier for the product */\r\n    readonly id?: string | null;\r\n    /** The main short title for the product / service */\r\n    readonly title?: string | null;\r\n    /** One paragraph description text */\r\n    readonly description?: string | null;\r\n    /** The logo image for the product. */\r\n    readonly img?: string | null;\r\n    /** Identifier for the main product desription article in the Palkkaus.fi CMS */\r\n    readonly articleId?: string | null;\r\n    /** If false, it is not bossible to enable this product for the current account / environment. \r\nTypically, this means that the UI should not show this product. */\r\n    visible?: boolean | null;\r\n    /** Indicates (true-value) if the end user has confirmed the product options.\r\nIf false, the end user has not confirmed the option. */\r\n    visited?: boolean | null;\r\n}\r\n\r\n/** Defines the pricing partner, service model and pricing model. */\r\nexport interface PricingProduct {\r\n    /** Current status of pricing. */\r\n    readonly status?: string | null;\r\n    /** Enabled property set automatically if partner set and partner specific pricing model. */\r\n    enabled?: boolean | null;\r\n    /** Defines the pricing partner, service model and pricing model. */\r\n    pricingPartner?: PersonPricingPartner | null;\r\n    /** Identifier for the product */\r\n    readonly id?: string | null;\r\n    /** The main short title for the product / service */\r\n    readonly title?: string | null;\r\n    /** One paragraph description text */\r\n    readonly description?: string | null;\r\n    /** The logo image for the product. */\r\n    readonly img?: string | null;\r\n    /** Identifier for the main product desription article in the Palkkaus.fi CMS */\r\n    readonly articleId?: string | null;\r\n    /** If false, it is not bossible to enable this product for the current account / environment. \r\nTypically, this means that the UI should not show this product. */\r\n    visible?: boolean | null;\r\n    /** Indicates (true-value) if the end user has confirmed the product options.\r\nIf false, the end user has not confirmed the option. */\r\n    visited?: boolean | null;\r\n}\r\n\r\n/** For Visma Sign V01, data that is stored within the onboarding object. */\r\nexport interface VismaSignV01ObData {\r\n    /** Document ID identifies the document (one or several files) that are to be signed in Visma Sign storage. */\r\n    documentId?: string | null;\r\n    /** Invitation ID that is used in the signature process */\r\n    invitationId?: string | null;\r\n    /** Category / folder where the item is stored. */\r\n    category?: string | null;\r\n    /** File name in Visma Sign. */\r\n    fileName?: string | null;\r\n    /** Logs the authentication service (e.g. 'tupas-osuuspankki', 'tupas-nordea') for later analyses.\r\nAll methods are available in https://sign.visma.net/api/v1/auth/methods (test: https://vismasign.frakt.io/api/v1/auth/methods) */\r\n    authService?: string | null;\r\n}\r\n\r\n/** Data about the Signicat process. */\r\nexport interface SignicatData {\r\n    /** Identifier of the document that is signed. */\r\n    documentId?: string | null;\r\n    /** Document summary after the signature has been done. */\r\n    documentSummary?: any | null;\r\n    /** URI to the signed PDF document: Full unique URI for the BlobFile. */\r\n    pdfBlobUri?: string | null;\r\n}\r\n\r\n/** Defines a shareholder. At the moment, this is only a name and it is used only if the person has more than 25% of the shares. Expect this object to be developed with, Ownership percent or number of shares, Id or other such link to the actual person etc. */\r\nexport interface Shareholder {\r\n    /** Name of the shareholder. */\r\n    name?: string | null;\r\n}\r\n\r\n/** Search result list level of detail of companies coming from YTJ. */\r\nexport interface YtjSearchResultCompany {\r\n    /** The Business ID (Y-tunnus / Business Identity Code) is a code given to businesses and organizations by the PRH or the Tax Administration. \r\nIt consists of seven digits, a dash and a control mark, for example 1234567-8.\r\nAlternative accepted formats incule international VAT number \"FI12345678\" or number without the dash: \"12345678\". */\r\n    businessId?: string | null;\r\n    /** Official name of the company. */\r\n    name?: string | null;\r\n    /** Numeric ID (\"Yritysavain\") */\r\n    id?: number | null;\r\n    /** Type of the company. This is a free text type. Not necessary parseable to company type enumeration in details. */\r\n    type?: string | null;\r\n}\r\n\r\n/** Contact verification object for single message type. */\r\nexport interface OnboardingContactVerification {\r\n    /** Given pin code. */\r\n    pin?: string | null;\r\n}\r\n\r\n/** Legacy pricing partner information stored in the Person object */\r\nexport interface PersonPricingPartner {\r\n    /** Partner account id. */\r\n    accountId?: string | null;\r\n    /** Pricing model by the partner. */\r\n    pricingModel?: PricingModel | null;\r\n    /** Fee for one calculation, which is visible and paid by customer.\r\nThis is not relevant if the PricingModel is PalkkausFee */\r\n    fixedFee?: number | null;\r\n    /** Service model by the partner. */\r\n    serviceModelId?: string | null;\r\n}\r\n\r\n/** Data that is used for displaying the welcome page for the Worker account. */\r\nexport interface WelcomeDataWorker {\r\n    /** The welcome page timeline cards. */\r\n    timeline?: ApiListItem[] | null;\r\n    /** Active taxcard added by the Worker or null, if none is added (or none is valid for today). */\r\n    activeTaxcard?: Taxcard | null;\r\n}\r\n\r\n/** Full tax card that is stored in database and that is used in tax card percentage calculations. Also contains the salary history in the income log. */\r\nexport interface Taxcard {\r\n    /** The Worker, whose salaries are paid based on this tax card. */\r\n    worker?: Avatar | null;\r\n    /** Employment for which the tax card is created. */\r\n    employmentId?: string | null;\r\n    /** The input that is coming from the Worker / Tax authorities */\r\n    card: TaxcardInput;\r\n    /** Calculations that have been paid to this tax card. */\r\n    incomeLog?: TaxCardIncome[] | null;\r\n    /** Read-only calculation results and other logic values on the Taxcard. */\r\n    readonly result?: TaxcardResults | null;\r\n    /** If the item is an employer instance of a shared taxcard, contains the original identifier\r\nas URI (\"[Server]/[PayloadType]/[Owner]/[Id]\", e.g. \"https://test-secure.salaxy.com/CalculationDTO/FI86POYL0009461858/16ea052e-f23f-4b72-83a9-b8f6590f0dc9\");\r\nThis item cannot be set in Save - only in Approve method. */\r\n    copyOfUri?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Input from user for a tax card: What is written in the card plus the state infomration that is directly editable by the user. */\r\nexport interface TaxcardInput {\r\n    /** The personal ID as written in the tax card. */\r\n    personalId: string;\r\n    /** Tax card approval state */\r\n    state?: TaxcardState | null;\r\n    /** Year that the tax card is valid for. Typically this means from February of this year to January of the following. */\r\n    forYear: number;\r\n    /** Validity for the taxcard as expressed in the card.\r\nNote that the end date may not be reliable if new taxcard has replaced this one. */\r\n    validity?: DateRange | null;\r\n    /** Tax percent as percent. I.e. for 50% set 50, not 0.5. */\r\n    taxPercent?: number | null;\r\n    /** Income up to which the TaxPercent can be used.\r\nAny income above the limit is taxed with ExcessTaxPercent. */\r\n    incomeLimit?: number | null;\r\n    /** Tax percentage that is used in calculating the widthholding tax for the part of income above the IncomeLimit. */\r\n    taxPercent2?: number | null;\r\n    /** A Worker may request a minimum percent that is deducted even if the effective tax percent would be lower.\r\nThis can be used if Worker knows that he/she will be earning more in the year than what was estimated when the taxcard was created. */\r\n    taxPercentMin?: number | null;\r\n    /** TaxPercentMin set by owner of the card.\r\nThis overrides the tax percent min set by the taxcard sharer. */\r\n    taxPercentMinOwned?: number | null;\r\n    /** Explicit value of when the item was last checked. At the moment, updated in API fetches only, but may be used later for other checks.\r\nUndefined value is 1.1.2000 */\r\n    lastChecked?: string | null;\r\n    /** The income type of the taxacard if fetched from the tax authorities taxcard API. */\r\n    incomeType?: TaxcardApiIncomeType | null;\r\n    /** Withholding Percentage may include Stock Options and Grants (information from the taxcard API).\r\nThis property is not currently in use. */\r\n    includesStockOptionsAndGrants?: boolean | null;\r\n    /** Type of the taxcard as of 2019, when the taxcards logic was simplified by the Finnish tazx authorities. */\r\n    kind?: TaxcardKind | null;\r\n    /** Uri to the file copy of the tax card. \r\nSet by the system as part of the upload process, do not change in the API though it may be technically possible. This may have unintended results. */\r\n    fileUri?: string | null;\r\n    /** Uri to the preview image of the tax card. \r\nSet by the system as part of the upload process, do not change in the API though it may be technically possible. This may have unintended results. */\r\n    previewUri?: string | null;\r\n}\r\n\r\n/** Defines income that is recorded in a Taxcard: A paid salary calulation, income from previous employers or other salaries that affect the income calculation. */\r\nexport interface TaxCardIncome {\r\n    /** Type of income */\r\n    type?: TaxCardIncomeType | null;\r\n    /** Calculation id in the Salaxy database.\r\nIf the calculation is not in the Salaxy Database, leave this null. */\r\n    id?: string | null;\r\n    /** Owner of the row, typically the employer that paid the salary.\r\nNull meaning that it is the owner of the original taxcard. */\r\n    owner?: string | null;\r\n    /** A short description of the paid calculation.\r\nThis is a mandatory field if the Id is null. */\r\n    description?: string | null;\r\n    /** Beginning of the salary payment period from taxation point-of-view.\r\nThis is typically the same as CalcInfo.WorkStartDate, but may be different in edge cases. */\r\n    startDate?: string | null;\r\n    /** End of the salary payment period from taxation point-of-view.\r\nThis is typically the same as CalcInfo.WorkEndDate, but may be different in edge cases. */\r\n    endDate?: string | null;\r\n    /** The paidAt date which tells mainly to which year the payment should be attributed.\r\nThis is reliable only if the salary is paid by Salaxy (TaxCardIncomeType.SalaxyCalculation).\r\nIn other cases it is just the reporting date. */\r\n    paidAt?: string | null;\r\n    /** Taxable income from this calculation */\r\n    income?: number | null;\r\n    /** Widthholding tax in euro */\r\n    tax?: number | null;\r\n    /** When loading calculations from the database (in taxcard Save and FindBy with diff), \r\nthis property identifies the differences in the entry. */\r\n    diff?: IncomeLogDiff | null;\r\n}\r\n\r\n/** Read-only calculations and other logic methods on a Taxcard. */\r\nexport interface TaxcardResults {\r\n    /** Total income for the actual year, which is used for income limit.\r\nNote that this does not include January income that may be paid for previous year taxcard. */\r\n    readonly totalIncome?: number | null;\r\n    /** Total income for January of the following year that is paid for previous year taxcard (this taxcard) if there is no new taxcard for January. */\r\n    readonly totalIncomeJanuary?: number | null;\r\n    /** Payments of the salary calculations that were made using Palkkaus.fi system (as opposed to external salaries etc) \r\nand that were marked to this card. These are for the actual year, which is used for income limit.\r\nFor Shared card, all employers are considered, for Owner copies of shared card, only salaries paid by owner is considered. */\r\n    readonly payment?: number | null;\r\n    /** Payments of the salary calculations that were made using Palkkaus.fi system (as opposed to external salaries etc) \r\nand that were marked to this card. These are for January of the following year that is paid for previous year taxcard (this taxcard) if there is no new taxcard for January.\r\nFor Shared card, all employers are considered, for Owner copies of shared card, only salaries paid by owner is considered. */\r\n    readonly paymentJanuary?: number | null;\r\n    /** Gets the validity of the taxcard today. This value reflects purely the date value - it does not take into account approval or replacement. */\r\n    readonly validityToday?: TaxcardValidity | null;\r\n}\r\n\r\n/** Accounting data for reports. */\r\nexport interface AccountingData {\r\n    /** All ledgers. */\r\n    ledgerAccounts?: LedgerAccount[] | null;\r\n    /** Basic information and visualization for the accounting target.\r\nAvatar provides the visualization and the name for the target.\r\nE-mail may be used in sending of the material and telephone in contacting the accounting target.\r\nIBAN number has no use. */\r\n    target?: AccountInIndex | null;\r\n    /** The default export format for tabular (csv, excel) data. */\r\n    format?: string | null;\r\n    /** Finnish Business Identifier (Y-tunnus) for the company. */\r\n    officialId?: string | null;\r\n    /** Employer avatar */\r\n    employer?: Avatar | null;\r\n    /** Contact information for the report. Typically the employer, but may be something else. */\r\n    contact?: Contact | null;\r\n    /** Period for the report. */\r\n    period?: DateRange | null;\r\n    /** Summary containing relevant numbers for the report. For example,\r\nnumber of calculations, gross and net amounts, payment amounts and Palkkaus fee. */\r\n    summary?: AccountingDataSummary | null;\r\n}\r\n\r\n/** Represents a single accounting ledger. */\r\nexport interface LedgerAccount {\r\n    /** Legder entries */\r\n    entries?: LedgerEntry[] | null;\r\n    /** Account number. */\r\n    accountNumber?: string | null;\r\n    /** Account name. */\r\n    accountName?: string | null;\r\n    /** Account grouping. */\r\n    accountGrouping?: string | null;\r\n    /** Current saldo for the ledger. */\r\n    readonly saldo?: number | null;\r\n}\r\n\r\n/** Summary of the accounting data. Contains main figures: totals and workers and employer total figures. */\r\nexport interface AccountingDataSummary {\r\n    /** The total number of calculations included in the report. */\r\n    calculationCount?: number | null;\r\n    /** The total number of distinct workers included in the report. */\r\n    workerCount?: number | null;\r\n    /** Total gross salary of the calculations included in the report. */\r\n    readonly totalGrossSalary?: number | null;\r\n    /** Total payment of the calculations included in the report. */\r\n    readonly totalPayment?: number | null;\r\n    /** Calculation totals that are common to both Worker and Employer. */\r\n    totals?: TotalCalculationDTO | null;\r\n    /** The calculation from the Employer point-of-view */\r\n    employerCalc?: EmployerCalculationDTO | null;\r\n    /** The calculation from the Worker point-of-view */\r\n    workerCalc?: WorkerCalculationDTO | null;\r\n    /** Calculation totals of accrued total holiday pay and related sidecosts. */\r\n    holidayCalc?: HolidayCalculationDTO | null;\r\n    /** Validation messages for the accounting data. */\r\n    validation?: ApiValidation | null;\r\n}\r\n\r\n/** Represents a single ledger entry. */\r\nexport interface LedgerEntry {\r\n    /** Id for the entry. */\r\n    id?: string | null;\r\n    /** Entry date. */\r\n    entryDate?: string | null;\r\n    /** Entry description. */\r\n    description?: string | null;\r\n    /** Debit indicator. */\r\n    isDebit?: boolean | null;\r\n    /** Posted amount. Includes VAT. */\r\n    amount?: number | null;\r\n    /** VAT percent. */\r\n    vatPercent?: number | null;\r\n    /** VAT amount of specific VAT rate. */\r\n    vatAmount?: number | null;\r\n    /** Applied VAT rate. */\r\n    vatRate?: VatRate | null;\r\n    /** Account number. */\r\n    accountNumber?: string | null;\r\n    /** Account name. */\r\n    accountName?: string | null;\r\n    /** Account grouping. */\r\n    accountGrouping?: string | null;\r\n    /** Dimension data. */\r\n    dimension?: { [key: string]: any; } | null;\r\n}\r\n\r\n/** Calculation totals of accrued total holiday pay and related sidecosts. */\r\nexport interface HolidayCalculationDTO {\r\n    /** Total sum of accrued holiday pays. */\r\n    totalAccruedHolidayPay?: number | null;\r\n    /** Total sum of accrued holiday pays. */\r\n    totalAccruedHolidayBonus?: number | null;\r\n    /** Total sum of social security payments for accrued holiday pays. */\r\n    totalAccruedHolidaySocialSecurity?: number | null;\r\n    /** Total sum of pension payments for accrued holiday pays. */\r\n    totalAccruedHolidayPension?: number | null;\r\n    /** Total sum of unemployment insurance payments for accrued holiday pays. */\r\n    totalAccruedHolidayUnemployment?: number | null;\r\n    /** Total accident insurance. */\r\n    totalAccruedHolidayAccidentInsurance?: number | null;\r\n    /** Total accident insurance. */\r\n    totalAccruedHolidayGroupLifeInsurance?: number | null;\r\n}\r\n\r\n/** Contents for the invoice status notification message. */\r\nexport interface InvoiceStatusNotification {\r\n    /** Unique ID for the invoice in Salaxy system.\r\nIf omitted, the resolving to an invoice will be made using external id. */\r\n    id?: string | null;\r\n    /** External id can be set in the notification for the invoice for later messaging.\r\nIf the notification message contains an External Id AND regular Id, the External Id is updated in the Salaxy database.\r\nIf the notification contains External Id, but NO regular Id, an invoice is fetched based on External Id.\r\nIn the latter case, a non-existent Id or multiple invoices with the same External Id will throw an exception and the entire update process is canceled. */\r\n    externalId?: string | null;\r\n    /** New status for the invoice. Required main payload of the call. */\r\n    status?: InvoiceStatus | null;\r\n    /** Required Date for the transaction (booking date). */\r\n    date?: string | null;\r\n    /** Required realized amount of the transaction. */\r\n    amount?: number | null;\r\n    /** Optional full name of the payment receiver. Should be sent only if the user or process has the possibility of changing the name. */\r\n    receiverFullName?: string | null;\r\n    /** Optional bank account IBAN of the receiver. Should be sent only if the user or process has the possibility of changing the IBAN. */\r\n    receiverIban?: string | null;\r\n    /** Optional payment reference number. Should be sent only if the user or process has the possibility of changing or removing the reference number.\r\nChanging the reference number will typically lead to an error in the back office process that needs to be manually handled. */\r\n    referenceNumber?: string | null;\r\n    /** The payment type of the invoice. If the payment channel does not support the requested payment type (e.g. Salary),\r\nit should set here the payment type that it used (e.g. Default).\r\nPayment channel should also expect new types to be introduced, without that being a breaking change.\r\nCurrently, we expect Default always be supported. */\r\n    paymentType?: InvoicePaymentType | null;\r\n    /** Invoice/payment status in the external system. */\r\n    externalStatusAt?: string | null;\r\n    /** External status of the invoice in the external system. */\r\n    externalStatus?: string | null;\r\n}\r\n\r\n/** Absence Period with Worker information. */\r\nexport interface WorkerAbsencePeriod {\r\n    /** WorkerAbsences storage object that contains the period */\r\n    absencesId?: string | null;\r\n    /** The Worker that owns the Absence period */\r\n    worker?: Avatar | null;\r\n    /** Identifies a single leave. */\r\n    id?: string | null;\r\n    /** Period for the absance. */\r\n    period?: DateRange | null;\r\n    /** Cause / type of the absence */\r\n    causeCode?: AbsenceCauseCode | null;\r\n    /** If true, the absence is paid by the employer. */\r\n    isPaid?: boolean | null;\r\n    /** If true, annual leaves are accrued from the absence. If false, these days are deducted from the accrual.\r\nBy default, you may leave this null and it always follows the IsPaid. */\r\n    isHolidayAccrual?: boolean | null;\r\n    /** Amount of salary that is paid for the absense.\r\nCurrently not in use: Would be used in Incomes Register integration. */\r\n    amount?: number | null;\r\n    /** Additional information as recorded by the Employer. */\r\n    notes?: string | null;\r\n    /** Identifier in the source system is a key defined by a source system / partner system.\r\nThis is a pass-through string that is passed to the result calculations. */\r\n    sourceId?: string | null;\r\n    /** Number of Bonus days to be paid. This is applicable only for {Palkkaus.Model.Worktime.Absences.AbsenceCauseCode.AnnualLeave}AnnualLeave. */\r\n    bonusDaysCount?: number | null;\r\n}\r\n\r\nexport interface PageResultOfPayrollListItem {\r\n    items?: PayrollListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of payrolls in the user interface. It contains header data of the payroll and is basis for searching, filtering and sorting. */\r\nexport interface PayrollListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: PayrollStatus | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: PayrollData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Payroll specific business data for index. */\r\nexport interface PayrollData {\r\n    /** Contains the email or id of the responsible for the partner workflow event. */\r\n    partnerMessageAssignedTo?: string | null;\r\n    /** Title that can be specified by the end user. */\r\n    title?: string | null;\r\n    /** What types of wages are paid with this payroll.\r\nMay affect the rendering of the user interface (e.g. for     holidays, hours and absences).\r\nAlso affects which Workers are show in the add / link dialog by default. */\r\n    wageBasis?: WageBasis | null;\r\n    /** Due date for the payroll. Date when the payment should be made to achieve SalaryDate. */\r\n    dueDate?: string | null;\r\n    /** If true, all calculations have been validated and they are valid for payment.\r\nIf false, validation has not been done or some calculations are not valid for payment. */\r\n    isReady?: boolean | null;\r\n    /** Paid at date for the payroll. (Date of the employer's payment). */\r\n    paymentDate?: string | null;\r\n    /** Start date of the default salary period */\r\n    periodStart?: string | null;\r\n    /** End date of the default salary period */\r\n    periodEnd?: string | null;\r\n    /** Count of calculations in this Payroll */\r\n    calcCount?: number | null;\r\n    /** If the Payroll is based on a template, this is the identifier of the template. */\r\n    template?: string | null;\r\n    /** ID of the calendar event that is scheduling creation of occurences from this template. */\r\n    calendarEvent?: string | null;\r\n    /** ID of the calendar event that created this occurence. */\r\n    calendarOccurence?: string | null;\r\n    /** The MessageThread Id, if this payroll is referred in a message thread. */\r\n    messageThreadId?: string | null;\r\n    /** Payment channel. */\r\n    paymentChannel?: PaymentChannel | null;\r\n    /** The requested salary date. */\r\n    inputSalaryDate?: string | null;\r\n    /** Defines the re-setting of the salary date in the calculation re-calculation. */\r\n    salaryDateKind?: SalaryDateKind | null;\r\n}\r\n\r\n/** Record for storing company or employment details. */\r\nexport interface Record {\r\n    /** Salaxy ID of the worker / other paty. This value is required when inserting and cannot be edited later.\r\nWorkerSnapshot is automatically updated upon save. */\r\n    otherId?: string | null;\r\n    /** Optional entity id, for example the employment relation for the worker. */\r\n    entityId?: string | null;\r\n    /** Entity type of the business object, which the records are targeted to. */\r\n    entityType?: string | null;\r\n    /** Record type. This should be based on customer specific enumeration. */\r\n    recordType?: string | null;\r\n    /** Start date of the record. */\r\n    startDate?: string | null;\r\n    /** End date of the record. */\r\n    endDate?: string | null;\r\n    /** Title for the record */\r\n    title?: string | null;\r\n    /** Textual content */\r\n    text?: string | null;\r\n    /** Attachments. */\r\n    attachments?: Attachment[] | null;\r\n    /** A usecase for creating and editing records.\r\nIn practice, a usecase is either a user interface or a microservice that provides a salary calculation\r\nand it may be implemented outside Salaxy. */\r\n    usecase?: UsecaseData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Attachment. */\r\nexport interface Attachment {\r\n    /** Name of the attachment. E.g. monthly-details-2018-01.pdf */\r\n    fileName?: string | null;\r\n    /** Content for data. */\r\n    contentId?: string | null;\r\n}\r\n\r\nexport interface PageResultOfRecordListItem {\r\n    items?: RecordListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of records in the user interface. */\r\nexport interface RecordListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: string | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: RecordData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Record specific business data for index. */\r\nexport interface RecordData {\r\n    /** Record type. This should be based on customer specific enumeration. */\r\n    recordType?: string | null;\r\n    /** Key for the usecase based on which it is resolved. \r\nLater, this may resolve to a user interface, microservice or a to manifest registering one.\r\nFor now, just use a unique string starting with a domain you own. */\r\n    usecaseUri?: string | null;\r\n}\r\n\r\n/** Reference object. For testing and development purposes only. This object is a typical business object. The implementation is based on the current development conventions. The reference objects have no meaning or use outside development or testing environments, and they should not be used in production for any business purpose. */\r\nexport interface ReferenceObject {\r\n    /** Header for the reference object.\r\nContains typical header data of various types. */\r\n    header?: ReferenceObjectHeader | null;\r\n    /** Collection of events for the reference object. */\r\n    events?: ReferenceObjectEvent[] | null;\r\n    /** A usecase for reference objects.\r\nIn practice, a usecase is either a user interface or a microservice that provides an extension to the default Salaxy functionality,\r\nand it may be implemented outside Salaxy. */\r\n    usecase?: UsecaseData | null;\r\n    /** The workflow data for manual editing and approval purposes. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Header for the reference object. Contains typical header data of various types. */\r\nexport interface ReferenceObjectHeader {\r\n    /** A free text property, the description of the object. */\r\n    description?: string | null;\r\n    /** Enumerated property, the status for the object. */\r\n    status?: BootstrapStyle | null;\r\n    /** Nullable date property, the reference date for the object. */\r\n    referenceDate?: string | null;\r\n}\r\n\r\n/** A single event in the collection of events for the reference object. Contains typical row specific data of various types. */\r\nexport interface ReferenceObjectEvent {\r\n    /** A free text property, the name of the event. */\r\n    name?: string | null;\r\n    /** Nullable date property, the  date for the event. */\r\n    date?: string | null;\r\n    /** Enumerated property, the result for the event. */\r\n    result?: BootstrapStyle | null;\r\n}\r\n\r\nexport interface PageResultOfReferenceObjectListItem {\r\n    items?: ReferenceObjectListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** List item for Reference object. For testing and development purposes only. This object is a typical list item for the business object. The implementation is based on the current development conventions. The reference objects have no meaning or use outside development or testing environments, and they should not be used in production for any business purpose. */\r\nexport interface ReferenceObjectListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: BootstrapStyle | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: ReferenceObjectData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\nexport interface ReferenceObjectData {\r\n}\r\n\r\n/** Describes a logical generated report. This is a report instance e.g. a monthly report for January 2017. It may contain several files of different types: PDF, preview PNG, HTML etc. */\r\nexport interface Report {\r\n    /** Short title for the report that can be shown to the end user. */\r\n    title?: string | null;\r\n    /** Report date: For monthly and yearly reports this is the first day of the year/month.\r\nFor ad-hoc reports, this is the start date of the period. */\r\n    reportDate?: string | null;\r\n    /** Type of the report */\r\n    type?: ReportType | null;\r\n    /** PDF report for viewing and printing. This is typically the main report.\r\nFor preview and demo, there is typically only HTML version - no PDF. */\r\n    pdfUrl?: string | null;\r\n    /** Thumbnail image for the report. \r\nFor preview and demo data this is typically a fixed image - the thumbnail is only generated when PDF is generated. */\r\n    thumbnail?: string | null;\r\n    /** HTML for the report. Use salaxy-rpt.css for formatting.\r\nFor preview and demo, this is the format to show to the user - PDF is not generated. */\r\n    htmlUrl?: string | null;\r\n    /** Some reports are also available in JSON format, from which you can create lists, CSV, Excel files etc. */\r\n    jsonUrl?: string | null;\r\n    /** If true, the report is in preview state, typically in the middle of the month.\r\nThis means that the data itself is production, its just not final. */\r\n    isPreview?: boolean | null;\r\n    /** If true, the report is created using demo data - should be used only in the beginning when the user has not paid any salaries. \r\nThis may be e.g. calculations in draft stage or completely invented demo data such as example workers.\r\nDemo data should not be confused to test database (test-api.palkkaus.fi / test-api.salaxy.com): \r\nPaid calculations in test database are production data. */\r\n    isDemoData?: boolean | null;\r\n    /** Time when the PDF, HTML or JSON URL's expire IF they are generated in a way that\r\nthey are callable without authentication for a specified time period.\r\nThis property is null if the URL requires authentication. */\r\n    urlsExpireAt?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Deserializable calculation. */\r\nexport interface ReportingCalculation {\r\n    /** The employer object for this calculation.\r\nTypically, you do not need to set this before the actual payment process. */\r\n    employer?: CalcEmployer | null;\r\n    /** The Worker (employee) that has performed the work. */\r\n    worker?: CalcWorker | null;\r\n    /** Information about the workflow and state of the calculation. */\r\n    workflow?: CalcWorkflow | null;\r\n    /** The main salary element. \r\nAlternatively the salary can be set in the Rows object - this will be the only way to set multiple salary rows (not yet supported). */\r\n    salary?: Salary | null;\r\n    /** Set of rows that make up the salary calculation:\r\nExpenses, Benefits, deductions etc. Note that side costs are not rows. */\r\n    rows?: UserDefinedRow[] | null;\r\n    /** DEPRECIATED: Usecase will be replacing this functionality in a next major release.\r\nThe Framework Agreement (TES) parameters that affect the framework based side costs etc. of this calculation */\r\n    framework?: TesParameters | null;\r\n    /** A usecase for creating and editing salary calculations.\r\nIn practice, a usecase is either a user interface or a microservice that provides a salary calculation\r\nand it may be implemented outside Salaxy.\r\nProvides the possibility to store useacase specific data as part of calculation.\r\nNOTE: This functionality will replace Framework property in a next major release. */\r\n    usecase?: UsecaseData | null;\r\n    /** The results of the calculation. In the API, this is a read-only object. */\r\n    result?: CalculationResult | null;\r\n    /** Information about the work that is not directly related to calculating salary and expenses. */\r\n    info?: CalcInfo | null;\r\n    /** Sharing of the calculation. This object cannot be modified directly, \r\nuse specialized methods in Calculations service. */\r\n    sharing?: CalculationSharing | null;\r\n    /** Contains calculation specific data for accounting (both cost and financial accounting). */\r\n    accounting?: CalculationAccounting | null;\r\n    /** Worktime data that is stored as part of Salary calculation:\r\nwork days, absences, holidays and holiday accrual.\r\nIn the future may also contain relevant part of timesheet data (work hours). */\r\n    worktime?: CalcWorktime | null;\r\n    /** Readonly workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Contains accounting rows for one or many calculations. */\r\nexport interface AccountingReportTable {\r\n    /** All rows in the report table. */\r\n    rows?: AccountingReportRow[] | null;\r\n    /** Accounting report table type. */\r\n    tableType?: AccountingReportTableType | null;\r\n    /** Finnish Business Identifier (Y-tunnus) for the company. */\r\n    businessId?: string | null;\r\n    /** Employer avatar */\r\n    employer?: Avatar | null;\r\n    /** Contact information for the report. Typically the employer, but may be something else. */\r\n    contact?: Contact | null;\r\n    /** Period for the report. */\r\n    period?: DateRange | null;\r\n    /** Summary containing relevant numbers for the report. For example,\r\nnumber of calculations, gross and net amounts, payment amounts and Palkkaus fee. */\r\n    summary?: AccountingReportTableSummary | null;\r\n}\r\n\r\n/** Accounting report table row. */\r\nexport interface AccountingReportRow {\r\n    /** Row type. Default is the Booking. */\r\n    rowType?: AccountingReportRowType | null;\r\n    /** Amount for the row: May be positive or negative(depending on the depet/credit and account type). */\r\n    amount?: number | null;\r\n    /** Percentage of the value added tax that is included in the amount. */\r\n    vatPercent?: number | null;\r\n    /** Proposed account number for the row. */\r\n    accountNumber?: string | null;\r\n    /** Proposed account text for the row. */\r\n    accountText?: string | null;\r\n    /** Returns product code. */\r\n    productCode?: string | null;\r\n    /** Returns product name. (Code or ResultCode in this order). */\r\n    productName?: string | null;\r\n    /** Text for the booking entry / header. */\r\n    text?: string | null;\r\n    /** Space separated set of class names for CSS styling purposes. */\r\n    styles?: string | null;\r\n    /** Count of units. Default is 1. */\r\n    count?: number | null;\r\n    /** Price for the unit. */\r\n    price?: number | null;\r\n    /** Unit identifier; */\r\n    unit?: string | null;\r\n    /** Additional information for the row. */\r\n    additionalInformation?: string | null;\r\n}\r\n\r\n/** Summary of the accounting report. Contains main figures: totals and workers and employer total figures. */\r\nexport interface AccountingReportTableSummary {\r\n    /** The total number of calculations included in the report. */\r\n    count?: number | null;\r\n    /** Calculation totals that are common to both Worker and Employer. */\r\n    totals?: TotalCalculationDTO | null;\r\n    /** The calculation from the Employer point-of-view */\r\n    employerCalc?: EmployerCalculationDTO | null;\r\n    /** The calculation from the Worker point-of-view */\r\n    workerCalc?: WorkerCalculationDTO | null;\r\n}\r\n\r\n/** Report for containing all the result data and rules for the pay stats calculation. */\r\nexport interface PayStatsCalculationReportData {\r\n    /** Detailed calculation data with rows on which the pay stats calculation is based. */\r\n    results?: PayStatsCalculationReportDataResult[] | null;\r\n}\r\n\r\n/** Report for containing all the result data and rules for the pay stats calculation. */\r\nexport interface PayStatsCalculationReportDataResult {\r\n    /** Detailed calculation data with rows on which the pay statistics calculation is based. */\r\n    calculations?: PayStatsCalculationReportDataCalc[] | null;\r\n    /** Settings for the type of the pay statistics. */\r\n    type?: PayStatsTypeDefinition | null;\r\n    /** Start date (included) of the period */\r\n    start?: string | null;\r\n    /** End date (included) of the period. */\r\n    end?: string | null;\r\n    /** Total salary in the calculation which is calculated into the pay statistics type. */\r\n    salary?: number | null;\r\n    /** Total working time in the calculation which is calculated into the pay statistics type. */\r\n    workingTime?: number | null;\r\n    /** Total result of the pay statistics calculation, e.g. average hourly pay for the period. */\r\n    result?: number | null;\r\n    /** Last time the result was created/updated. */\r\n    updatedAt?: string | null;\r\n}\r\n\r\n/** Detailed calculation data with rows on which the pay stats calculation is based. */\r\nexport interface PayStatsCalculationReportDataCalc {\r\n    /** Calculation id. */\r\n    calculationId?: string | null;\r\n    /** Calculation title. */\r\n    calculationTitle?: string | null;\r\n    /** Calculation salary date. */\r\n    salaryDate?: string | null;\r\n    /** Calculation work start date. */\r\n    workStartDate?: string | null;\r\n    /** Calculation work end date. */\r\n    workEndDate?: string | null;\r\n    /** Total salary in the calculation which is calculated into the pay stats type. */\r\n    salary?: number | null;\r\n    /** Total hours in the calculation which is calculated into the pay stats type. */\r\n    workingTime?: number | null;\r\n    /** Detailed row data on which the pay stats calculation is based. */\r\n    rows?: PayStatsCalculationReportDataCalcRow[] | null;\r\n}\r\n\r\n/** Settings for different types of pay statistics. */\r\nexport interface PayStatsTypeDefinition {\r\n    /** Id for the pay statistics type. */\r\n    id?: string | null;\r\n    /** Description for the pay statistics type, e.g. \"Average hourly pay for the period\". */\r\n    description?: string | null;\r\n    /** The pay statistics type. */\r\n    kind?: PayStatsKind | null;\r\n    /** Applicable collective agreement */\r\n    cbaCode?: number | null;\r\n    /** Employee group. */\r\n    employeeGroup?: string | null;\r\n    /** Flag for disabling the definition. */\r\n    disabled?: boolean | null;\r\n    /** If specified, defines the start date for the settings.\r\nIf in the future, the the settings is inactive. Null (default) means the settings is valid indefinetely from the past. */\r\n    startDate?: string | null;\r\n    /** If specified, defines the end date for the settings. \r\nDate is inclusive meaning that if EndDate is 31.12., settings is valid until end-of-year: Valid on 31.12. and invalid 1.1.\r\nIf in the past, the the settings is inactive. Null (default) means the settings is valid indefinetely to future. */\r\n    endDate?: string | null;\r\n    /** Period type for the pay statistics calculation.\r\nPlease note that currently this is on purpose a different enum than the {Palkkaus.Model.Common.PeriodType} which is used for retrieving accounting reports etc. */\r\n    periodLength?: PayStatsPeriodLength | null;\r\n    /** Date kind for the period. */\r\n    periodDateKind?: PeriodDateKind | null;\r\n    /** RowTypes, WageTypes or IncomeTypes that are used in the statistics calculation. */\r\n    workingTimeTypes?: string[] | null;\r\n    /** Minimum working time required for the statistics calculation. */\r\n    minWorkingTime?: number | null;\r\n    /** RowTypes, WageTypes or IncomeTypes that are used in the statistics calculation and which accumulate salary. */\r\n    salaryTypes?: string[] | null;\r\n    /** Script for the pay statistics calculation. Used if {Palkkaus.Model.Settings.PayStats.PayStatsTypeDefinition.Kind} is {Palkkaus.Model.Settings.PayStats.PayStatsKind.Script}. */\r\n    script?: string | null;\r\n}\r\n\r\n/** Detailed row data on which the pay stats calculation is based. */\r\nexport interface PayStatsCalculationReportDataCalcRow {\r\n    /** The row of the calculation. */\r\n    irRow?: IrRow | null;\r\n    /** Matching RowType, Type or IncomeType which accumulates salary. */\r\n    salaryType?: string | null;\r\n    /** Matching RowType, Type or IncomeType which accumulates working time. */\r\n    workingTimeType?: string | null;\r\n    /** Total salary which is calculated into the pay stats type. */\r\n    salary?: number | null;\r\n    /** Total working time which is calculated into  the pay stats type. */\r\n    workingTime?: number | null;\r\n}\r\n\r\n/** Calculation with additional cumulative data. */\r\nexport interface CumulativeCalculation {\r\n    /** Cumulative data for the calculation. */\r\n    cumulative?: { [key: string]: CumulativeData; } | null;\r\n    /** The employer object for this calculation.\r\nTypically, you do not need to set this before the actual payment process. */\r\n    employer?: CalcEmployer | null;\r\n    /** The Worker (employee) that has performed the work. */\r\n    worker?: CalcWorker | null;\r\n    /** Information about the workflow and state of the calculation. */\r\n    workflow?: CalcWorkflow | null;\r\n    /** The main salary element. \r\nAlternatively the salary can be set in the Rows object - this will be the only way to set multiple salary rows (not yet supported). */\r\n    salary?: Salary | null;\r\n    /** Set of rows that make up the salary calculation:\r\nExpenses, Benefits, deductions etc. Note that side costs are not rows. */\r\n    rows?: UserDefinedRow[] | null;\r\n    /** DEPRECIATED: Usecase will be replacing this functionality in a next major release.\r\nThe Framework Agreement (TES) parameters that affect the framework based side costs etc. of this calculation */\r\n    framework?: TesParameters | null;\r\n    /** A usecase for creating and editing salary calculations.\r\nIn practice, a usecase is either a user interface or a microservice that provides a salary calculation\r\nand it may be implemented outside Salaxy.\r\nProvides the possibility to store useacase specific data as part of calculation.\r\nNOTE: This functionality will replace Framework property in a next major release. */\r\n    usecase?: UsecaseData | null;\r\n    /** The results of the calculation. In the API, this is a read-only object. */\r\n    result?: CalculationResult | null;\r\n    /** Information about the work that is not directly related to calculating salary and expenses. */\r\n    info?: CalcInfo | null;\r\n    /** Sharing of the calculation. This object cannot be modified directly, \r\nuse specialized methods in Calculations service. */\r\n    sharing?: CalculationSharing | null;\r\n    /** Contains calculation specific data for accounting (both cost and financial accounting). */\r\n    accounting?: CalculationAccounting | null;\r\n    /** Worktime data that is stored as part of Salary calculation:\r\nwork days, absences, holidays and holiday accrual.\r\nIn the future may also contain relevant part of timesheet data (work hours). */\r\n    worktime?: CalcWorktime | null;\r\n    /** Readonly workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Cumulative data for a single calculation */\r\nexport interface CumulativeData {\r\n    /** First and last Salary dates (days when Worker receives the salary) and number of payment days. */\r\n    salaryDates?: DateRange | null;\r\n    /** Working days based on the salary calculations. */\r\n    workingDays?: DateRange | null;\r\n    /** Dictionary of labels of the current data */\r\n    labels?: { [key: string]: string; } | null;\r\n    /** The cumulative data of the calculations. */\r\n    data?: { [key: string]: number; } | null;\r\n    /** The cumulative units of the calculations. */\r\n    units?: { [key: string]: string; } | null;\r\n}\r\n\r\n/** A summary report for an employer for a specific period (typically month or year). */\r\nexport interface SummaryReportData {\r\n    statistics?: CalculationResultStatistics | null;\r\n    /** Finnish Business Identifier (Y-tunnus) for the company. */\r\n    businessId?: string | null;\r\n    /** Employer avatar */\r\n    employer?: Avatar | null;\r\n    /** Contact information for the report. Typically the employer, but may be something else. */\r\n    contact?: Contact | null;\r\n    /** Start date for the report */\r\n    startDate?: string | null;\r\n    /** End date for the report */\r\n    endDate?: string | null;\r\n    /** The total sum information for the report - this is the main payload of the report */\r\n    result?: CalculationResult | null;\r\n    /** Individual calculations based on which the report is made.\r\nDepending on the request, this may be filled in or null (as opposed to empty list). */\r\n    calculations?: Calculation[] | null;\r\n}\r\n\r\n/** Statistics data calculated from the calculation result. */\r\nexport interface CalculationResultStatistics {\r\n    /** The total number of calculations included in the report. */\r\n    calculationCount?: number | null;\r\n    /** The total number of distinct workers included in the report. */\r\n    workerCount?: number | null;\r\n    /** WorkerCalc.Pension / Totals.TotalSocialSecurityBase */\r\n    pensionWorkerPercent?: number | null;\r\n    /** WorkerCalc.UnemploymentInsurance / Totals.TotalSocialSecurityBase */\r\n    unemploymentWorkerPercent?: number | null;\r\n    /** WorkerCalc.Tax / Totals.TotalTaxable */\r\n    taxPercent?: number | null;\r\n    /** WorkerCalc.UnionPayment / Totals.TotalTaxable */\r\n    unionPaymentPercent?: number | null;\r\n}\r\n\r\n/** Container for calculation report data. */\r\nexport interface CalculationReportData {\r\n    /** Calculations as report rows. */\r\n    rows?: { [key: string]: any; }[] | null;\r\n    /** Ir Income type code labels */\r\n    irLabels?: { [key: string]: string; } | null;\r\n    /** Calculation row type labels */\r\n    typeLabels?: { [key: string]: string; } | null;\r\n    /** Total labels */\r\n    totalLabels?: { [key: string]: string; } | null;\r\n}\r\n\r\n/** Container for accounting based report data. */\r\nexport interface AccountingRowReportData {\r\n    /** Report row created from accounting base rows. */\r\n    rows?: AccountingRowReportDataRow[] | null;\r\n    /** Finnish Business Identifier (Y-tunnus) for the company. */\r\n    officialId?: string | null;\r\n    /** Employer avatar */\r\n    employer?: Avatar | null;\r\n    /** Contact information for the report. Typically the employer, but may be something else. */\r\n    contact?: Contact | null;\r\n    /** Period for the report. */\r\n    period?: DateRange | null;\r\n    /** Summary containing relevant numbers for the report. For example,\r\nnumber of calculations, gross and net amounts, payment amounts and Palkkaus fee. */\r\n    summary?: AccountingDataSummary | null;\r\n}\r\n\r\n/** Report row created from accounting base row data. */\r\nexport interface AccountingRowReportDataRow {\r\n    /** Entry group: income type or total type */\r\n    entryCodeGroup?: string | null;\r\n    /** A single code in the code group: single income type code or total row. */\r\n    entryCode?: string | null;\r\n    /** Entry date. */\r\n    entryDate?: string | null;\r\n    /** Entry description. */\r\n    message?: string | null;\r\n    /** Posted amount. Includes VAT. */\r\n    amount?: number | null;\r\n    /** VAT percent. */\r\n    vatPercent?: number | null;\r\n    /** VAT amount of specific VAT rate. */\r\n    vatAmount?: number | null;\r\n    /** Applied VAT rate. This is always mandatory. */\r\n    vatRate?: VatRate | null;\r\n    /** Dimension data. */\r\n    dimension?: { [key: string]: any; } | null;\r\n    /** Additional flags for directing the logic for creating accounting entry based on given entries. */\r\n    flags?: string[] | null;\r\n}\r\n\r\n/** The holiday pay debt data report based on given holiday years. */\r\nexport interface AccountingHolidayPayDebtReportData {\r\n    /** Finnish Business Identifier (Y-tunnus) for the company. */\r\n    officialId?: string | null;\r\n    /** Employer avatar */\r\n    employer?: Avatar | null;\r\n    /** Contact information for the report. Typically the employer, but may be something else. */\r\n    contact?: Contact | null;\r\n    /** Period for the report. */\r\n    period?: DateRange | null;\r\n    /** Calculated totals of accrued total holiday pay and related sidecosts. */\r\n    holidayCalc?: HolidayCalculationDTO | null;\r\n    /** Individual holiday years and their debt data included in the report. */\r\n    holidayYears?: AccountingHolidayPayDebtReportDataYear[] | null;\r\n}\r\n\r\n/** Individual holiday year with the debt data. */\r\nexport interface AccountingHolidayPayDebtReportDataYear {\r\n    /** Holiday year for which the debt is calculated. */\r\n    holidayYear?: HolidayYear | null;\r\n    /** Calculation totals of accrued total holiday pay and related sidecosts. */\r\n    holidayCalc?: HolidayCalculationDTO | null;\r\n}\r\n\r\n/** A summary report for a worker for a specific period (typically month or year) and selected employer. */\r\nexport interface WorkerSummaryReportData {\r\n    statistics?: CalculationResultStatistics | null;\r\n    /** Worker avatar */\r\n    worker?: Avatar | null;\r\n    /** Worker's socials security number */\r\n    workerSocialSecurityNumber?: string | null;\r\n    /** Worker's bank account number */\r\n    workerIbanNumber?: string | null;\r\n    /** Contact information for the report. Typically the employer, but may be something else. */\r\n    workerContact?: Contact | null;\r\n    /** Additional result data for the worker summary report. */\r\n    workerResult?: WorkerSummaryResult | null;\r\n    /** Finnish Business Identifier (Y-tunnus) for the company. */\r\n    businessId?: string | null;\r\n    /** Employer avatar */\r\n    employer?: Avatar | null;\r\n    /** Contact information for the report. Typically the employer, but may be something else. */\r\n    contact?: Contact | null;\r\n    /** Start date for the report */\r\n    startDate?: string | null;\r\n    /** End date for the report */\r\n    endDate?: string | null;\r\n    /** The total sum information for the report - this is the main payload of the report */\r\n    result?: CalculationResult | null;\r\n    /** Individual calculations based on which the report is made.\r\nDepending on the request, this may be filled in or null (as opposed to empty list). */\r\n    calculations?: Calculation[] | null;\r\n}\r\n\r\n/** Additional result data for the worker summary report. */\r\nexport interface WorkerSummaryResult {\r\n    /** Cash salary row details. */\r\n    cashSalary?: SummaryCalculationRows | null;\r\n    /** Benefits details. */\r\n    benefitsInKind?: SummaryCalculationRows | null;\r\n    /** Expense details. */\r\n    expenses?: SummaryCalculationRows | null;\r\n}\r\n\r\n/** Rows and totals for a set of calculation rows. */\r\nexport interface SummaryCalculationRows {\r\n    /** Summary rows. */\r\n    rows?: SummaryCalculationRow[] | null;\r\n    /** Total sum of rows. */\r\n    total?: number | null;\r\n}\r\n\r\n/** Row containing summary data for the summary report. */\r\nexport interface SummaryCalculationRow {\r\n    /** Description text of the row that is shown in reports. */\r\n    message?: string | null;\r\n    /** Count for the row. */\r\n    count?: number | null;\r\n    /** Price for the row. */\r\n    price?: number | null;\r\n    /** Total sum. */\r\n    total?: number | null;\r\n    /** Usecase specific data\r\nThis contains especially row label parameters: calculationRowType, kind and code */\r\n    data?: { [key: string]: any; } | null;\r\n}\r\n\r\nexport interface TaxAtSourceUsecase {\r\n    /** Tax value is either the fixed value (euro) or percentage (0-1) depending on the kind. */\r\n    taxValue?: number | null;\r\n    /** Deduction for the tax at source: Fixed, Monthly or Daily */\r\n    deductionPrice?: number | null;\r\n    /** Count of deduction units: 1 or number of months or days. */\r\n    deductionCount?: number | null;\r\n    /** Value of the deduction: Deduction * DeductionCount */\r\n    deduction?: number | null;\r\n    /** Total taxable value of the salary calculation. */\r\n    totalTaxable?: number | null;\r\n    /** Tax at source related employmment data. */\r\n    employmentData?: TaxAtSource | null;\r\n    /** List of allowed kinds (deductions based on source data).\r\nCurrently as a comma separated string. */\r\n    allowedKinds?: string | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: TaxAtSourceKind | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.IrIncomeType to IrRows */\r\nexport interface IrIncomeTypeUsecase {\r\n    /** Reporting details to Incomes registry (Tulorekisteri). */\r\n    irData?: IrDetails | null;\r\n    /** IR unit. */\r\n    unit?: Unit | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: TransactionCode | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.Board to IrRows */\r\nexport interface BoardUsecase {\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: BoardKind | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.NonProfitOrg to IrRows */\r\nexport interface NonProfitOrgUsecase {\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: NonProfitOrgKind | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.Remuneration to IrRows */\r\nexport interface RemunerationUsecase {\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: RemunerationKind | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.OtherCompensation to IrRows */\r\nexport interface OtherCompensationUsecase {\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: OtherCompensationKind | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.Training to IrRows */\r\nexport interface TrainingUsecase {\r\n    /** IR unit. */\r\n    unit?: Unit | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: TrainingKind | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.EmploymentTermination to IrRows */\r\nexport interface EmploymentTerminationUsecase {\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: EmploymentTerminationKind | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.WorkingTimeCompensation to IrRows */\r\nexport interface WorkingTimeCompensationUsecase {\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: WorkingTimeCompensationKind | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.PaidSickLeave to IrRows */\r\nexport interface PaidSickLeaveUsecase {\r\n    /** IR unit. */\r\n    unit?: Unit | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: PaidSickLeaveKind | null;\r\n}\r\n\r\n/** Handles both the hourly salary and working time compensation to IrRows */\r\nexport interface HourlySalaryWithWorkingTimeCompensationUsecase {\r\n    /** Collection of compensation rows. */\r\n    compensationRows?: WorkingTimeCompensationRow[] | null;\r\n    /** Pricing for the compensation row. */\r\n    pricing?: WorkingTimeCompensationPricing | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: WorkingTimeCompensationKind | null;\r\n}\r\n\r\n/** Working time compensation row. */\r\nexport interface WorkingTimeCompensationRow {\r\n    /** Count for compensation row. */\r\n    count?: number | null;\r\n    /** Percent for price calculation. */\r\n    percent?: number | null;\r\n    /** Compensation price, fixed price or calculated using percent. */\r\n    price?: number | null;\r\n    /** Message for compensation row */\r\n    message?: string | null;\r\n    /** Unit for compensation row. */\r\n    unit?: CalculationRowUnit | null;\r\n    /** Accounting related data for the row. */\r\n    accounting?: RowAccounting | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.DailyAllowance to IrRows */\r\nexport interface DailyAllowanceUsecase {\r\n    country?: string | null;\r\n    /** If true, the daily allowance is paid in half: The Worker has received 2 free meals (1 if PartialDailyAllowance).\r\nThis information is currently not reported to Incomes Register, it is only as information for calculation. */\r\n    isHalf?: boolean | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: DailyAllowanceKind | null;\r\n}\r\n\r\nexport interface TaxWithholdingUsecase {\r\n    /** Tax percent (0 - 1) {Palkkaus.Model.Usecases.CalculationRows.TaxWithholdingKind.Percentage} or fixed euro amount {Palkkaus.Model.Usecases.CalculationRows.TaxWithholdingKind.FixedValue} for tax with holding. */\r\n    taxValue?: number | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: TaxWithholdingKind | null;\r\n}\r\n\r\n/** Optimizes the worker payments using the given target amount. */\r\nexport interface TotalWorkerPaymentUsecase {\r\n    /** Calculation row type for adjusting the amount. */\r\n    rowType?: CalculationRowType | null;\r\n    /** Message for the row. */\r\n    message?: string | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: TotalWorkerPaymentKind | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.BicycleBenefitUsecase to IrRows */\r\nexport interface BicycleBenefitUsecase {\r\n    /** Deduction from salary */\r\n    deduction?: number | null;\r\n    /** Taxable amount of the benefit. */\r\n    taxable?: number | null;\r\n    /** Number of periods if Kind is PeriodicalDeduction. \r\nOtherwise this value is null. */\r\n    periodDivider?: number | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: BicycleBenefitKind | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.SubsidisedCommute to IrRows */\r\nexport interface SubsidisedCommuteUsecase {\r\n    /** Deduction from salary */\r\n    deduction?: number | null;\r\n    /** Taxable amount of the benefit. */\r\n    taxable?: number | null;\r\n    /** Number of periods if Kind is PeriodicalDeduction. \r\nOtherwise this value is null. */\r\n    periodDivider?: number | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: SubsidisedCommuteKind | null;\r\n}\r\n\r\n/** Pay statistics row type. */\r\nexport interface PayStatsUsecase {\r\n    /** Id for the pay statistics type. */\r\n    id?: string | null;\r\n    /** Period type for the pay statistics calculation. */\r\n    periodLength?: PayStatsPeriodLength | null;\r\n    /** Date kind for the period. */\r\n    periodDateKind?: PeriodDateKind | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: PayStatsKind | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.CarBenefitUsecase to IrRows */\r\nexport interface CarBenefitUsecase {\r\n    /** Age group as in A,B,C or I for international. */\r\n    ageGroup?: AgeGroupCode | null;\r\n    /** If true, the calculation is kilometers based. */\r\n    isKilometersBased?: boolean | null;\r\n    /** Number of kilometers is filled in only if that type of benefit calculation is used. */\r\n    kilometers?: number | null;\r\n    /** Car emissions value\r\n\r\nThe car emissions value must be greater than or equal to 0, and smaller than or\r\nequal to 100. The car emissions value can only be reported if the payment date\r\nor other reporting date is in 2022–2025. */\r\n    emissionsValue?: number | null;\r\n    /** Deduction from salary */\r\n    deduction?: number | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: CarBenefitKind | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.MealBenefit to IrRows */\r\nexport interface MealBenefitUsecase {\r\n    /** Deduction from salary */\r\n    deduction?: number | null;\r\n    /** The taxable price calculated by the server. */\r\n    taxablePrice?: number | null;\r\n    /** If true, the deduction from Worker salary corresponds to taxable value. */\r\n    isTaxValue?: boolean | null;\r\n    /** If true, the deduction from Worker Salary has already been done or will be done and is not added to this calculation. */\r\n    isTaxValueDeductionDone?: boolean | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: MealBenefitKind | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.UnionPayment to IrRows */\r\nexport interface UnionPaymentUsecase {\r\n    /** Reference for the union payment. */\r\n    referenceNumber?: string | null;\r\n    /** The full name of the union for payment purposes. */\r\n    recipientFullName?: string | null;\r\n    /** The International Bank Account Number of the union. */\r\n    iban?: string | null;\r\n    /** Percentage of the total taxable amount to pay.\r\nPlease note that this is only applicable for {Palkkaus.Model.Usecases.CalculationRows.UnionPaymentKind.PercentageAndLimits}. */\r\n    paymentPercentage?: number | null;\r\n    /** Maximum payment limit, or null if not desired.\r\nPlease note that this is only applicable for {Palkkaus.Model.Usecases.CalculationRows.UnionPaymentKind.PercentageAndLimits}. */\r\n    maximumPayment?: number | null;\r\n    /** Minimum payment limit, or null if not desired.\r\nPlease note that this is only applicable for {Palkkaus.Model.Usecases.CalculationRows.UnionPaymentKind.PercentageAndLimits}. */\r\n    minimumPayment?: number | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: UnionPaymentKind | null;\r\n}\r\n\r\n/** Absence row type. In addition to AbsenceCauseCode, the Kind supports format \"paid-[code]\" and \"unpaid-[code]\" where code is the Incomes Registry code. */\r\nexport interface AbsencePeriodUsecase {\r\n    /** If true, the absence is paid by the employer.\r\nIf null, uses the default value from the absence cause. */\r\n    isPaid?: boolean | null;\r\n    /** If true, annual leaves are accrued from the absence. If false, these days are deducted from the accrual.\r\nBy default, you may leave this null and it always follows the IsPaid. */\r\n    isHolidayAccrual?: boolean | null;\r\n    /** If true, resolves the price for the absence day from the employee's pricing rows or holiday year */\r\n    applyPricing?: boolean | null;\r\n    /** Number of Bonus days to be paid. This is applicable only for {Palkkaus.Model.Worktime.Absences.AbsenceCauseCode.AnnualLeave}AnnualLeave. */\r\n    bonusDaysCount?: number | null;\r\n    /** Resolved runtime. Bonus percent for holiday bonus. */\r\n    bonus?: number | null;\r\n    /** Resolved runtime. The deduction for the standard salary will be added. */\r\n    hasDeductionRow?: boolean | null;\r\n    /** Resolved runtime. Deduction row type. */\r\n    deductionRowType?: CalculationRowType | null;\r\n    /** Resolved runtime. Deduction type. */\r\n    deductionType?: string | null;\r\n    /** Resolved runtime. Deduction kind. */\r\n    deductionKind?: string | null;\r\n    /** Resolved runtime. Wage basis. */\r\n    wageBasis?: WageBasis | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: AbsenceCauseCode | null;\r\n}\r\n\r\n/** Handles the Calculation of CalculationRowType.Foreclosure to IrRows */\r\nexport interface ForeclosureUsecase {\r\n    /** Reference for the payment. */\r\n    referenceNumber?: string | null;\r\n    /** Length of the salary payment period. */\r\n    periodLength?: number | null;\r\n    /** Count of dependants of the debtor. Typically spouse and children. */\r\n    dependantsCount?: number | null;\r\n    /** Amount of the protected portion for each day. */\r\n    protectedPortionBase?: number | null;\r\n    /** Amount of the protected portion for each dependant for each day. */\r\n    protectedPortionDependant?: number | null;\r\n    /** Income from other sources. */\r\n    incomeFromOtherSources?: number | null;\r\n    /** Additional amount to be left to debtor. */\r\n    additionalAmountLeftToDebtor?: number | null;\r\n    /** Primary subtyping of the usecase. */\r\n    kind?: ForeclosureKind | null;\r\n}\r\n\r\n/** Sample object for creating v03 controller */\r\nexport interface SampleApiObject {\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\nexport interface PageResultOfSampleListItem {\r\n    items?: SampleListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Available Search index data of the Sample object */\r\nexport interface SampleListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: string | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: SampleData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Sample custom data in search index */\r\nexport interface SampleData {\r\n    /** A test string */\r\n    test?: string | null;\r\n}\r\n\r\nexport interface ServiceModel {\r\n    /** Name of the service model */\r\n    name?: string | null;\r\n    /** URL for the icon that represents the service model */\r\n    icon?: string | null;\r\n    /** Service model features, which can be switched on/off. */\r\n    features?: ServiceModelFeatures | null;\r\n    /** Default calculation related settings. */\r\n    calc?: ServiceModelCalculation | null;\r\n    /** Default accounting settings. */\r\n    accounting?: ServiceModelAccounting | null;\r\n    /** Default cost accounting settings. */\r\n    costAccounting?: ServiceModelCostAccounting | null;\r\n    /** Default holiday settings. */\r\n    holiday?: ServiceModelHoliday | null;\r\n    /** Default pricing settings. */\r\n    pricing?: ServiceModelPricing | null;\r\n    /** Default payment channels. */\r\n    payments?: ServiceModelPayments | null;\r\n    /** Partner branding settings: site logo, css etc. */\r\n    branding?: ServiceModelBranding | null;\r\n    /** Reporting layout settings. */\r\n    reporting?: ServiceModelReporting | null;\r\n    /** Default site for customers. */\r\n    site?: ServiceModelSite | null;\r\n    /** Settings related to usecases. */\r\n    usecase?: ServiceModelUsecase | null;\r\n    /** Settings related to messaging. */\r\n    messaging?: ServiceModelMessaging | null;\r\n    /** Settings related to the calculation data delivery by forms. */\r\n    forms?: ServiceModelForms | null;\r\n    /** Settings related to the pay statistics calculations. */\r\n    payStats?: ServiceModelPayStats | null;\r\n    /** Readonly workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Service model features, which can be swithced on/off. */\r\nexport interface ServiceModelFeatures {\r\n    /** If true, IR reporting uses given certificate. */\r\n    irDelivery?: boolean | null;\r\n    /** If true, the messaging is switched on for this service model. */\r\n    messaging?: boolean | null;\r\n    /** If true, the calculation data delivery by forms is switched on. */\r\n    forms?: boolean | null;\r\n    /** If true, the service model accounting settings override company  settings. */\r\n    accounting?: boolean | null;\r\n    /** If true, the service model cost accounting settings override company  settings. */\r\n    costAccounting?: boolean | null;\r\n    /** If true, the service model holiday settings override company  settings. */\r\n    holiday?: boolean | null;\r\n    /** If true, the service model payment settings override company  settings. */\r\n    payments?: boolean | null;\r\n    /** If true, the service model reporting settings override company settings. */\r\n    reporting?: boolean | null;\r\n    /** If true, the service model usecase settings override company settings. */\r\n    usecase?: boolean | null;\r\n    /** If true, the service model pay statistics settings override company settings. */\r\n    payStats?: boolean | null;\r\n}\r\n\r\n/** Settings related to Calculation */\r\nexport interface ServiceModelCalculation {\r\n    /** IR report delivery settings. */\r\n    irDelivery?: IrDelivery | null;\r\n}\r\n\r\n/** Settings related to Accounting */\r\nexport interface ServiceModelAccounting {\r\n    /** Default accounting target. */\r\n    defaultTargetId?: string | null;\r\n    /** Default period selection method:  PaidAt date (paid by employer), Salary date (paid to worker) or Work date (work done). The default is PaidAt date. */\r\n    defaultPeriodDateKind?: PeriodDateKind | null;\r\n    /** Accounting target systems and the rulesets assigned to them. */\r\n    targets?: AccountingTargetSettings[] | null;\r\n}\r\n\r\n/** Settings related to Cost Accounting */\r\nexport interface ServiceModelCostAccounting {\r\n    /** Cost accounting dimensions */\r\n    dimensions?: CostAccountingDimensionDefinition[] | null;\r\n}\r\n\r\n/** Settings related to Holiday */\r\nexport interface ServiceModelHoliday {\r\n    /** Settings for holiday pay calculations.\r\nThe default is null and the default settings are used. */\r\n    holidayPaySettings?: HolidayPaySettings[] | null;\r\n    /** Settings for the accrual calculations.\r\nThe default is null and the default settings are used. */\r\n    holidayAccrualSettings?: HolidayAccrualSettings[] | null;\r\n}\r\n\r\n/** Service model specific pricing settings for customers. */\r\nexport interface ServiceModelPricing {\r\n    /** Pricing model by the partner. */\r\n    pricingModel?: PricingModel | null;\r\n    /** Fee for one calculation, which is visible and paid by customer.\r\nThis is not relevant if the PricingModel is PalkkausFee */\r\n    fixedFee?: number | null;\r\n}\r\n\r\n/** Default payment channels for customers. */\r\nexport interface ServiceModelPayments {\r\n    /** The default channel when making payments. */\r\n    defaultChannel?: PaymentChannel | null;\r\n    /** Channel specific settings. */\r\n    channels?: PaymentChannelSettings[] | null;\r\n}\r\n\r\n/** Service model branding settings: logo, css etc. */\r\nexport interface ServiceModelBranding {\r\n    /** Url to logo. */\r\n    logo?: string | null;\r\n    /** Css path. */\r\n    skin?: string | null;\r\n}\r\n\r\n/** Defines the settings for producing reports: Mainly PDF's but also HTMl previews. */\r\nexport interface ServiceModelReporting {\r\n    /** Identifier of the report layout template in id@partition or URI format. */\r\n    layoutTemplateId?: string | null;\r\n    /** Layouts may define some variables that may be overriden, e.g. colors, margins, font-sizes. */\r\n    layoutTemplateVariables?: string | null;\r\n    /** The company logo that is used by some Layouts */\r\n    logo?: string | null;\r\n}\r\n\r\n/** Stores information about the web site that is used for customer (employer) to access the customer web site. */\r\nexport interface ServiceModelSite {\r\n    /** Type of web app that the customer is using to interact in the service process. */\r\n    webApp?: CustomerWebApp | null;\r\n    /** Web application URL when the WebApp is Custom. */\r\n    webAppUrl?: string | null;\r\n    /** Name for the web application- */\r\n    webAppName?: string | null;\r\n    /** Override the translated texts for a service model.\r\nKey in the dictionary is a full key starting from the language, e.g. \"fi.SALAXY.NG1_Sitemap.home\". */\r\n    texts?: { [key: string]: string; } | null;\r\n    /** Sitemap customizations based on product sitemap.\r\nKey is a full sitemap id (dot path) and data is a dataobject that is merged to SiteMap. */\r\n    sitemap?: { [key: string]: any; } | null;\r\n}\r\n\r\n/** Usecase related settings. */\r\nexport interface ServiceModelUsecase {\r\n    /** Available usecases for the current account. */\r\n    usecases?: UsecaseInSettings[] | null;\r\n}\r\n\r\n/** Settings related to Messaging. */\r\nexport interface ServiceModelMessaging {\r\n    /** Enable partner communication. Enabled by default. */\r\n    partnerMessages?: boolean | null;\r\n    /** Options for the notification to be sent to the worker after the salary payment. */\r\n    workerSalaryNotifications?: WorkerSalaryNotification[] | null;\r\n    /** Options for the delivery of the payslip to the worker. */\r\n    workerSalarySlipDeliveryMethods?: WorkerSalarySlipDeliveryMethod[] | null;\r\n}\r\n\r\n/** Settings related to the calculation data delivery by forms. */\r\nexport interface ServiceModelForms {\r\n}\r\n\r\n/** Settings related to pay statistics calculations. */\r\nexport interface ServiceModelPayStats {\r\n    /** Settings for different types of pay statistics. */\r\n    types?: PayStatsTypeDefinition[] | null;\r\n}\r\n\r\n/** IR Delivery settings. */\r\nexport interface IrDelivery {\r\n    /** Official id of the sender. */\r\n    senderOfficialId?: string | null;\r\n    /** Contact persons for the IR records */\r\n    contactPersons?: ContactPerson[] | null;\r\n}\r\n\r\n/** Specifies thee properties that are set for this accounting target in relation to the accounting channel. */\r\nexport interface AccountingTargetSettings {\r\n    /** Id of the target definition. */\r\n    id?: string | null;\r\n    /** Channel is the technical transport mechanism to accounting software */\r\n    channel?: AccountingChannel | null;\r\n    /** The default export method for exports: whether automatic or manual. */\r\n    method?: ExportMethod | null;\r\n    /** If specified, defines the available methods in manual exports. */\r\n    availableMethods?: ExportMethod[] | null;\r\n    /** The default export format for tabular (csv, excel) data. */\r\n    format?: string | null;\r\n    /** Web hook url for notifications.\r\nIf any calculation changes in some past month, this url is called by the system to notify the company about the change.\r\nThe month of change (\"month\") is added as query parameter to the url automatically by the system. */\r\n    webHookUrl?: string | null;\r\n    /** Name and visualization for selection lists. */\r\n    avatar?: Avatar | null;\r\n    /** Usecase specific data */\r\n    data?: { [key: string]: any; } | null;\r\n}\r\n\r\n/** Channel-specific payment settings */\r\nexport interface PaymentChannelSettings {\r\n    /** Identifies the channel */\r\n    channel?: PaymentChannel | null;\r\n    /** If true, the channel is enabled for the current user */\r\n    isEnabled?: boolean | null;\r\n    /** Read-only property that tells whether the payment channel is available in the current session. */\r\n    isAvailable?: boolean | null;\r\n    /** Usecase specific data */\r\n    data?: { [key: string]: any; } | null;\r\n}\r\n\r\n/** Usecase definition. */\r\nexport interface UsecaseInSettings {\r\n    /** Uri of the usecase */\r\n    uri?: string | null;\r\n    /** Item type of the usecase */\r\n    itemType?: ApiItemType | null;\r\n    /** Short title for the usecase */\r\n    label?: string | null;\r\n    /** Status of the usecase in the settings.\r\nThe status affects the visibilty of the usecase. */\r\n    status?: UsecaseStatus | null;\r\n    /** Order setting for the usecases.\r\nThis is needed e.g. ad hoc reports. */\r\n    order?: number | null;\r\n}\r\n\r\nexport interface ContactPerson {\r\n    /** Name */\r\n    name?: string | null;\r\n    /** Telephone number */\r\n    telephone?: string | null;\r\n    /** E-mail address\r\n\r\nIf the ‘Reimbursement application data’ data group is specified for a paid absence and 1 or 2 as the ‘Payment data type’ even in a single report in a record, you must report at least one ‘Contact person for the record’ for whom the ‘E-mail address’ and ‘Field of responsibility’ data items have been specified. */\r\n    email?: string | null;\r\n    /** Field of responsibility\r\n\r\nIf the ‘Reimbursement application data’ data group is specified for a paid absence and 1 or 2 as the ‘Payment data type’ even in a single report in a record, you must report at least one ‘‘Contact person for the record’ for whom the ‘E-mail address’ and ‘Field of responsibility’ data items have been specified, with ‘Field of responsibility’ having the value 1 (Content issues). */\r\n    responsibilityCode?: ContactPersonResponsibilityCode | null;\r\n}\r\n\r\nexport interface PageResultOfServiceModelListItem {\r\n    items?: ServiceModelListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a partner service model. */\r\nexport interface ServiceModelListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: string | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: ServiceModelData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Service model specific business data for index. */\r\nexport interface ServiceModelData {\r\n    /** Contains the email or id of the responsible for the partner workflow event. */\r\n    partnerMessageAssignedTo?: string | null;\r\n    /** Url to logo. */\r\n    logo?: string | null;\r\n    /** Css path. */\r\n    skin?: string | null;\r\n    /** Name for the web application- */\r\n    webAppName?: string | null;\r\n    /** Square icon for the service model. Used in listings etc. */\r\n    icon?: string | null;\r\n}\r\n\r\n/** Passes the data about the authorization that is the bases for callin the services that require user authorization. */\r\nexport interface UserSession {\r\n    /** If false, the current user needs to be authenticated or authenticated user does not have acces to the system. */\r\n    isAuthorized?: boolean | null;\r\n    /** If false, the current user does not have a credential in the system =&gt; need to redirect to login */\r\n    hasCredential?: boolean | null;\r\n    /** If false, the current user does not have a current account. \r\nIf HasCredential is true, this means that the user should be redirected to Account creation wizard. */\r\n    hasCurrentAccount?: boolean | null;\r\n    /** Authorization status */\r\n    status?: AuthorizationStatus | null;\r\n    /** Avatar that should be shown for the current session.\r\nTypically CurrentAccount.Avatar, but could theoretically be something different. */\r\n    avatar?: Avatar | null;\r\n    /** The current user credentials. */\r\n    currentCredential?: SessionUserCredential | null;\r\n    /** The current Palkkaus.fi-account that the user acting as */\r\n    currentAccount?: IVerifiedAccount | null;\r\n    /** Contains html for system alert. */\r\n    systemAlertHtml?: string | null;\r\n    /** Often needed settings directly in session object.\r\nNOTE: For editing settings, request the full settings object separately. */\r\n    settings?: AccountSettingsInSession | null;\r\n}\r\n\r\n/** An account that is verified. Typically this means a digitally signed contract. This means that the account also has an Identity object. However, as the Identity object contains confidential information, it is not necessarily present in all method calls. */\r\nexport interface IVerifiedAccount {\r\n    /** Information about the verification of the account. \r\nNOTE that this object may not be present in many method calls - this is because it contains confidential information. */\r\n    identity?: Identity | null;\r\n    /** If true, the account has been verified. Typically this means a digitally signed contract.\r\nThis means that the account also has an Identity object.\r\nHowever, as the Identity object contains confidential information, it is not necessarily present in all method calls. */\r\n    readonly isVerified?: boolean | null;\r\n    /** Avatar is the visual representation of the Account. */\r\n    avatar?: Avatar | null;\r\n    /** Contact information for the Account. */\r\n    contact?: Contact | null;\r\n    /** Language of the person/company. */\r\n    language?: Language | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated */\r\n    updatedAt?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Pricing partner information. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Read-only account settings in Session: These are the settings that should be immediately available in the regular UI without separate loading. */\r\nexport interface AccountSettingsInSession {\r\n    /** Pension contracts for optional selection of cotnract in Worker / Calc UI's */\r\n    pensionContracts?: PensionContract[] | null;\r\n    /** Insurance contracts for optional selection of cotnract in Worker / Calc UI's */\r\n    insuranceContracts?: InsuranceContract[] | null;\r\n    /** If true, the reporting layout is customized and should be loadded from the server in preview and reporting. */\r\n    hasCustomReport?: boolean | null;\r\n    /** The default accounting target for accounting reports. */\r\n    accountingTarget?: AccountingTargetSettings | null;\r\n    /** Partner and service model */\r\n    partner?: PrimaryPartnerSettings | null;\r\n    /** The payment channels that are enabled for the current user. */\r\n    paymentChannels?: PaymentChannel[] | null;\r\n    /** Current default payment channel */\r\n    defaultPaymentChannel?: PaymentChannel | null;\r\n    /** Available usecases for the current user. */\r\n    usecases?: UsecaseInSettings[] | null;\r\n    /** Basic information about the avialable integrations: Server URL and supported behaviors in the future. */\r\n    integration?: IntegrationInSession | null;\r\n    /** Partner messages enabled. */\r\n    partnerMessages?: boolean | null;\r\n    /** Cost accounting model. */\r\n    costAccounting?: CostAccountingInSession | null;\r\n    /** Forms settings for session. */\r\n    forms?: FormsInSession | null;\r\n    /** Customer specific preferences. */\r\n    preferences?: Preference[] | null;\r\n}\r\n\r\n/** Defines a pension contract. */\r\nexport interface PensionContract {\r\n    /** The pension company where the user has a contract. */\r\n    company?: PensionCompany | null;\r\n    /** The pension contract number that should be validated accordingly. */\r\n    contractNumber?: string | null;\r\n    /** Sub organization code for the Incomes Registry. */\r\n    subOrgCode?: string | null;\r\n    /** Pension discount percent. */\r\n    pensionDiscountPercent?: number | null;\r\n    /** Custom pension percent. */\r\n    pensionPercent?: number | null;\r\n    /** Read only pension percent which is valid if pension percent is not set. */\r\n    readonly pensionDefaultPercent?: number | null;\r\n    /** Unique identifier (guid) for the contract.\r\nThe value is automaticallyh added on the server side: Any input is ignored/invalid. Set as null for new contracts. */\r\n    id?: string | null;\r\n    /** Status of the contract */\r\n    status?: SettingsStatus | null;\r\n    /** If specified, defines the start date for the contract.\r\nIf in the future, the the contract is inactive. Null (default) means the contract is valid indefinetely from the past. */\r\n    startDate?: string | null;\r\n    /** If specified, defines the end date for the contract. \r\nDate is inclusive meaning that if EndDate is 31.12., contract is valid until end-of-year: Valid on 31.12. and invalid 1.1.\r\nIf in the past, the the contract is inactive. Null (default) means the contract is valid indefinetely to future. */\r\n    endDate?: string | null;\r\n}\r\n\r\n/** Represents an insurance contract for employer or information that the employer knowingly does not have an insurance contract. The latter is legal when only a very small amount of salaries is paid. */\r\nexport interface InsuranceContract {\r\n    /** If set to true, the insurance is set to a partner insurance. */\r\n    isPartnerInsurance?: boolean | null;\r\n    /** Company for the current insurance */\r\n    company?: InsuranceCompany | null;\r\n    /** The accident insurance contract number that should be validated accordingly. */\r\n    contractNumber?: string | null;\r\n    /** Percent for calculating the estimate for the accident insurance amount to pay. */\r\n    insurancePercent?: number | null;\r\n    /** Percent for calculating the estimate for the group life insurance amount to pay. */\r\n    groupLifeInsurancePercent?: number | null;\r\n    /** Unique identifier (guid) for the contract.\r\nThe value is automaticallyh added on the server side: Any input is ignored/invalid. Set as null for new contracts. */\r\n    id?: string | null;\r\n    /** Status of the contract */\r\n    status?: SettingsStatus | null;\r\n    /** If specified, defines the start date for the contract.\r\nIf in the future, the the contract is inactive. Null (default) means the contract is valid indefinetely from the past. */\r\n    startDate?: string | null;\r\n    /** If specified, defines the end date for the contract. \r\nDate is inclusive meaning that if EndDate is 31.12., contract is valid until end-of-year: Valid on 31.12. and invalid 1.1.\r\nIf in the past, the the contract is inactive. Null (default) means the contract is valid indefinetely to future. */\r\n    endDate?: string | null;\r\n}\r\n\r\n/** Settings related to the primary partner, service model and settings */\r\nexport interface PrimaryPartnerSettings {\r\n    /** Partner account id. */\r\n    accountId?: string | null;\r\n    /** TODO: Consider is this the right place for the all this info or should we have only the input here. */\r\n    info?: AccountantInfo | null;\r\n    /** If true, the accountant is a registered Palkkaus.fi account who typically has access to this account. */\r\n    type?: AccountantType | null;\r\n    /** Id of the service model. */\r\n    serviceModelId?: string | null;\r\n    /** Defines the service model for the customer. */\r\n    serviceModel?: PartnerServiceModel | null;\r\n}\r\n\r\n/** Settings related to Integrations that should be immediately available with session without separate load. */\r\nexport interface IntegrationInSession {\r\n    /** URL to custom staging / integration server.\r\nUsed in running custom usecases and other custom integrations (currently imports). */\r\n    serverUrl?: string | null;\r\n}\r\n\r\n/** Cost accounting models for session. */\r\nexport interface CostAccountingInSession {\r\n    /** Cost accounting dimensions */\r\n    dimensions?: CostAccountingDimensionDefinition[] | null;\r\n}\r\n\r\n/** Settings for session related to the calculation data delivery by forms. */\r\nexport interface FormsInSession {\r\n}\r\n\r\n/** Customer specific preferences. */\r\nexport interface Preference {\r\n    /** Name for the configuration. */\r\n    name?: string | null;\r\n    /** Type of the configuration data. It can be a value type or object type. */\r\n    dataType?: string | null;\r\n    /** Configuration data. */\r\n    data?: any | null;\r\n    /** Last time the preference was created/updated. */\r\n    updatedAt?: string | null;\r\n    /** User who last updated the configuration. */\r\n    updatedBy?: string | null;\r\n}\r\n\r\n/** Accountant details. */\r\nexport interface AccountantInfo {\r\n    /** Avatar for the account */\r\n    avatar?: Avatar | null;\r\n    /** Official id of the person or company. */\r\n    officialId?: string | null;\r\n    /** Email address. */\r\n    email?: string | null;\r\n    /** Telephone number. */\r\n    telephone?: string | null;\r\n    /** Bank account number (IBAN) */\r\n    ibanNumber?: string | null;\r\n}\r\n\r\n/** Defines how the primary partner services the customer TODO: To be designed, see G:\\My Drive\\Tech\\Phase 7\\Settings\\Palvelumallit.pptx */\r\nexport interface PartnerServiceModel {\r\n    /** The main product package that defines the product features. */\r\n    features?: ServiceModelFeatures | null;\r\n    /** Picing settings. */\r\n    pricing?: ServiceModelPricing | null;\r\n    /** Partner branding settings: site logo, css etc. */\r\n    branding?: ServiceModelBranding | null;\r\n    /** Default site for customers. */\r\n    site?: ServiceModelSite | null;\r\n}\r\n\r\n/** Provides the settings for a Company Employer account (all settings details for employer). */\r\nexport interface CompanyAccountSettings {\r\n    /** Salary calculation related settings. */\r\n    calc?: CalculationSettings | null;\r\n    /** Reporting and layout related settings. */\r\n    reporting?: ReportingSettings | null;\r\n    /** Primary partner, service model and pricing. */\r\n    partner?: PrimaryPartnerSettings | null;\r\n    /** Defines how accounting is done and to which target it is exported / sent. */\r\n    accounting?: AccountingSettings | null;\r\n    /** Cost accounting settings, e.g. cost centers and projects. */\r\n    costAccounting?: CostAccountingSettings | null;\r\n    /** Holiday settings for accruals and holiday pay calculations. */\r\n    holiday?: HolidaySettings | null;\r\n    /** Settings related to making of the payments. */\r\n    payments?: PaymentSettings | null;\r\n    /** Custom usecases. */\r\n    usecase?: UsecaseSettings | null;\r\n    /** Settings related to messaging. */\r\n    messaging?: MessagingSettings | null;\r\n    /** Settings related to the calculation data delivery by forms. */\r\n    forms?: FormsSettings | null;\r\n    /** Settings related to pay statistics calculations. */\r\n    payStats?: PayStatsSettings | null;\r\n    /** Customer specific business configurations. */\r\n    configs?: BizConfig[] | null;\r\n    /** Customer specific preferences. */\r\n    preferences?: Preference[] | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n}\r\n\r\n/** Settings that affect the calculation result of the salaries. */\r\nexport interface CalculationSettings {\r\n    /** Collection of pension contracts. In most cases, employer has only one, but in edge cases there may be several. */\r\n    pensionContracts?: PensionContract[] | null;\r\n    /** Collection of mandatory accident insurance contracts.\r\nIn most cases, employer has only one, but in edge cases there may be several. */\r\n    insuranceContracts?: InsuranceContract[] | null;\r\n    /** Settings related to unemployment insurance. */\r\n    unemploymentInsurance?: UnemploymentInsuranceSettings | null;\r\n    /** Settings related to reporting the salaries to authorities through Incomes Register. */\r\n    incomesRegister?: IncomesRegisterSettings | null;\r\n    /** Contains default calculation rows, default prices and custom row types for calculations. */\r\n    salaryDefaults?: RowTypeDefinition[] | null;\r\n    /** List of company employee groups. */\r\n    employeeGroups?: EmployeeGroupDefinition[] | null;\r\n}\r\n\r\n/** Defines the settings for producing reports: Mainly PDF's but also HTMl previews. */\r\nexport interface ReportingSettings {\r\n    /** If true, the service model is not applied to this feature. */\r\n    denyServiceModel?: boolean | null;\r\n    /** Identifier of the report layout template in id@partition or URI format. */\r\n    layoutTemplateId?: string | null;\r\n    /** Layouts may define some variables that may be overriden, e.g. colors, margins, font-sizes. */\r\n    layoutTemplateVariables?: string | null;\r\n    /** The company logo that is used by some Layouts */\r\n    logo?: string | null;\r\n}\r\n\r\n/** Settings related to Accounting */\r\nexport interface AccountingSettings {\r\n    /** If true, the service model is not applied to this feature. */\r\n    denyServiceModel?: boolean | null;\r\n    /** Default accounting target. */\r\n    defaultTargetId?: string | null;\r\n    /** Accounting target systems and the rulesets assigned to them. */\r\n    targets?: AccountingTargetSettings[] | null;\r\n    /** Default period selection method:  PaidAt date (paid by employer), Salary date (paid to worker) or Work date (work done). The default is PaidAt date. */\r\n    defaultPeriodDateKind?: PeriodDateKind | null;\r\n    /** Options for accounting report delivery for the company.\r\nThese are not affected by the service model. */\r\n    reportDelivery?: AccountingReportDelivery | null;\r\n    /** Options for accounting report delivery for the Accountant.\r\nThese are not affected by the service model. */\r\n    accountantReportDelivery?: AccountingReportDelivery | null;\r\n}\r\n\r\n/** Settings related to Cost Accounting */\r\nexport interface CostAccountingSettings {\r\n    /** If true, the service model is not applied to this feature. */\r\n    denyServiceModel?: boolean | null;\r\n    /** Cost accounting dimensions */\r\n    dimensions?: CostAccountingDimensionDefinition[] | null;\r\n}\r\n\r\n/** Settings related to holiday pay and accrual calculations. */\r\nexport interface HolidaySettings {\r\n    /** If true, the service model is not applied to this feature. */\r\n    denyServiceModel?: boolean | null;\r\n    /** Settings for holiday pay calculations.\r\nThe default is null and the default settings are used. */\r\n    holidayPaySettings?: HolidayPaySettings[] | null;\r\n    /** Settings for the accrual calculations.\r\nThe default is null and the default settings are used. */\r\n    holidayAccrualSettings?: HolidayAccrualSettings[] | null;\r\n}\r\n\r\n/** Payment related settings. */\r\nexport interface PaymentSettings {\r\n    /** If true, the service model is not applied to this feature. */\r\n    denyServiceModel?: boolean | null;\r\n    /** Settings related to payment methods that use the customer funds account (gross payment). */\r\n    customerFunds?: CustomerFundsSettings | null;\r\n    /** Settings related to invoices: Either salary payment or other invoicing. */\r\n    invoice?: InvoiceSettings | null;\r\n    /** The default channel when making payments. */\r\n    defaultChannel?: PaymentChannel | null;\r\n    /** Channel specific settings. */\r\n    channels?: PaymentChannelSettings[] | null;\r\n}\r\n\r\n/** Usecase related settings. */\r\nexport interface UsecaseSettings {\r\n    /** If true, the service model is not applied to this feature. */\r\n    denyServiceModel?: boolean | null;\r\n    /** Available usecases for the current account. */\r\n    usecases?: UsecaseInSettings[] | null;\r\n    /** URL to custom staging / integration server.\r\nUsed in running custom usecases and other custom integrations (currently imports). */\r\n    serverUrl?: string | null;\r\n}\r\n\r\n/** Settings related to Messaging */\r\nexport interface MessagingSettings {\r\n    /** If true, the service model is not applied to this feature. */\r\n    denyServiceModel?: boolean | null;\r\n    /** Partner messages enabled. */\r\n    partnerMessages?: boolean | null;\r\n    /** Options for the notification to be sent to the worker after the salary payment. */\r\n    workerSalaryNotifications?: WorkerSalaryNotification[] | null;\r\n    /** Options for the delivery of the payslip to the worker. */\r\n    workerSalarySlipDeliveryMethods?: WorkerSalarySlipDeliveryMethod[] | null;\r\n}\r\n\r\n/** Settings related to the calculation data delivery by forms. */\r\nexport interface FormsSettings {\r\n    /** If true, the service model is not applied to this feature. */\r\n    denyServiceModel?: boolean | null;\r\n}\r\n\r\n/** Settings for the calculation of pay statistics. */\r\nexport interface PayStatsSettings {\r\n    /** If true, the service model is not applied to this feature. */\r\n    denyServiceModel?: boolean | null;\r\n    /** Settings for different types of pay statistics. */\r\n    types?: PayStatsTypeDefinition[] | null;\r\n}\r\n\r\n/** Settings related to unemployment insurance. */\r\nexport interface UnemploymentInsuranceSettings {\r\n    /** Status for indicating whether the total amount of paid salaries exceeds the thresold for higher unemployment insurance percent. */\r\n    payrollLimitStatus?: UnemploymentPayrollLimitStatus | null;\r\n}\r\n\r\nexport interface IncomesRegisterSettings {\r\n    /** The reference number for the tax authorities */\r\n    taxReferenceNumber?: string | null;\r\n    /** Defines how the reporting is done for Incomes registry (Tulorekisteri). */\r\n    irReporting?: TaxReportHandling | null;\r\n    /** IR report delivery settings. */\r\n    irDelivery?: IrDelivery | null;\r\n}\r\n\r\n/** Extends the UserDefinedRow by adding the configuration: How the row type should behave and and how to show it in the UI. */\r\nexport interface RowTypeDefinition {\r\n    /** Configuration for the row type. */\r\n    config?: CalcRowConfig | null;\r\n    /** Zero based row index that can be used to match the row to result rows or when deleting.\r\nNOTE: The Row ID is given values on the fly so setting this will not have any effect at the moment.\r\nIt may reorder the entries in later implementations. */\r\n    rowIndex?: number | null;\r\n    /** Wage type. Either a built in wage type in Salaxy or a custom wage type created by the user.\r\nPlease note that this type fully determines the <see cref=\"T:Palkkaus.Model.Calc.CalculationRowType\"></see> and the kind. */\r\n    type?: string | null;\r\n    /** Logical type of the row */\r\n    rowType?: CalculationRowType | null;\r\n    /** Description text of the row that is shown in reports. If null, will be set according to type. */\r\n    message?: string | null;\r\n    /** Count for the row - default is one */\r\n    count?: number | null;\r\n    /** Price for the row */\r\n    price?: number | null;\r\n    /** Unit for the row. Guessed based on the RowType and count, but you are better off setting it to be sure. */\r\n    unit?: CalculationRowUnit | null;\r\n    /** Source of the calculation row - affects how the row is handled in editing / recalculation scenarios. */\r\n    source?: CalculationRowSource | null;\r\n    /** Identifier in the source system is a key defined by a source system / partner system.\r\nThis is a pass-through string that is passed to the result calculations. */\r\n    sourceId?: string | null;\r\n    /** Accounting related data for the row. */\r\n    accounting?: RowAccounting | null;\r\n    /** Period if different than the Period of calculation.\r\nWill be reported to the National Incomes registry, but also affect some other calculations.\r\nNote that this property may be (and by default is) null. */\r\n    period?: DateRange | null;\r\n    /** Usecase specific data */\r\n    data?: { [key: string]: any; } | null;\r\n}\r\n\r\n/** Definition for an employee group, e.g. \"Office workers\", \"Blue collar workers\" etc. */\r\nexport interface EmployeeGroupDefinition {\r\n    /** Id for the Employee Group. */\r\n    id?: string | null;\r\n    /** Name for the Employee Group. */\r\n    name?: string | null;\r\n}\r\n\r\n/** Settings for Accounting report delivery. */\r\nexport interface AccountingReportDelivery {\r\n    /** If true, the delivery is active. */\r\n    isEnabled?: boolean | null;\r\n    /** Address for delivery. Currently only email supported. */\r\n    address?: string | null;\r\n}\r\n\r\n/** Settings related to payment methods that use the customer funds account (gross payment). */\r\nexport interface CustomerFundsSettings {\r\n    /** If true, worker salary and expense payments are paid directly by the employer. */\r\n    isWorkerSelfHandling?: boolean | null;\r\n    /** If true, the user handles the reporting and payments himself/herself. */\r\n    isPensionSelfHandling?: boolean | null;\r\n    /** If true, tax and social security payments are paid directly by the employer. */\r\n    isTaxAndSocialSecuritySelfHandling?: boolean | null;\r\n}\r\n\r\n/** Configuration for user interface of a Calculation row type: Either built-in or custom. */\r\nexport interface CalcRowConfig {\r\n    /** Name / unique identifier of the row type. */\r\n    name?: string | null;\r\n    /** The built-in row type */\r\n    rowType?: CalculationRowType | null;\r\n    /** The type string, e.g. \"/builtIn/salary\" or \"/custom/boardMember\" */\r\n    type?: string | null;\r\n    /** Order number in the lists */\r\n    order?: number | null;\r\n    /** Label for the row type */\r\n    label?: string | null;\r\n    /** Description for the row type */\r\n    descr?: string | null;\r\n    /** More info HTML */\r\n    moreInfo?: string | null;\r\n    /** Categorization of the row types. */\r\n    category?: CalculationRowCategory | null;\r\n    /** Favorite row types and their sort order.\r\nThis is currently fixed, but may later be based on user profile (e.g. most used types). */\r\n    favorite?: number | null;\r\n    /** Color is based on the category */\r\n    color?: string | null;\r\n    /** Icon short text is 1-5 characters suitable for icon.\r\nHas 5 characters only if very narrow, e.g. \"1\" and comma - typically 2-3 chars. */\r\n    iconText?: string | null;\r\n    /** If the row has a kind selection (the main subtype), definition of the subtypes. */\r\n    kind?: CalcRowKindsConfig | null;\r\n    /** Group is the first \"folder\" in the name. Currently either \"builtIn\" or \"custom\", but later may have other groupings (e.g. employment groups or just free text). */\r\n    group?: CalcRowConfigTypeGroup | null;\r\n    /** Price input */\r\n    price?: CalcRowPriceConfig | null;\r\n    /** Amount input */\r\n    amount?: CalcRowAmountConfig | null;\r\n    /** The total input or read-only field. */\r\n    total?: CalcRowTotalConfig | null;\r\n    /** This is only info field for ui */\r\n    incomeTypes?: number[] | null;\r\n    /** Scripts for the type. */\r\n    scripts?: CalcRowScriptConfig[] | null;\r\n}\r\n\r\n/** Describes the set of kinds (sub types) used by a row type. */\r\nexport interface CalcRowKindsConfig {\r\n    /** Name of the base enumeration (as defined in the usecase / built-in type).\r\nThis is not unique in custom row types. */\r\n    name?: string | null;\r\n    /** Values of the enumeration. */\r\n    values?: CalcRowKindConfig[] | null;\r\n}\r\n\r\n/** Price input. */\r\nexport interface CalcRowPriceConfig {\r\n    /** Label for the input */\r\n    label?: string | null;\r\n    /** Default value */\r\n    default?: number | null;\r\n    /** Type of the input control to use */\r\n    input?: CalcRowConfigNumberInput | null;\r\n}\r\n\r\n/** Amount input */\r\nexport interface CalcRowAmountConfig {\r\n    /** Label for the input */\r\n    label?: string | null;\r\n    /** Default value */\r\n    default?: number | null;\r\n    /** Type of the input control to use */\r\n    input?: CalcRowConfigNumberInput | null;\r\n    /** Default unit. */\r\n    unit?: CalculationRowUnit | null;\r\n    /** Allowed units. If not set, only default unit allowed. */\r\n    units?: CalculationRowUnit[] | null;\r\n}\r\n\r\n/** The total input or read-only field. */\r\nexport interface CalcRowTotalConfig {\r\n    /** Type of the input control to use */\r\n    input?: CalcRowConfigNumberInput | null;\r\n}\r\n\r\n/** Property script configuration for a calculation row. */\r\nexport interface CalcRowScriptConfig {\r\n    /** Name of the property. */\r\n    name?: string | null;\r\n    /** Optional kind for types with kind. */\r\n    kind?: string | null;\r\n    /** Script for the property. */\r\n    script?: string | null;\r\n}\r\n\r\n/** Defines a single row kind (sub type) within a row type. */\r\nexport interface CalcRowKindConfig {\r\n    /** Text value of the enumeration (lowerCamelCase). */\r\n    name?: string | null;\r\n    /** Sorting order number of the value within the enum. */\r\n    order?: number | null;\r\n    /** Label of the enumeration if the translations have been applied. */\r\n    label?: string | null;\r\n    /** Description of the kind. */\r\n    descr?: string | null;\r\n    /** Price input */\r\n    price?: CalcRowPriceConfig | null;\r\n    /** Amount input */\r\n    amount?: CalcRowAmountConfig | null;\r\n    /** The total input or read-only field. */\r\n    total?: CalcRowTotalConfig | null;\r\n}\r\n\r\n/** Stores the CSS and images for the report creation. */\r\nexport interface ReportingLayoutTemplate {\r\n    /** HTML template for the print header.\r\nUse the following handlebars tags to inject values into the header:\r\n\r\n- `{{ date }}` Logical report date, e.g.Salary date for salary slip.\r\n- `{ { today } }` Printing date of the report.\r\n- `{{ title }}` Report specific title, e.g. \"Palkkalaskelma\".\r\n- `{{ subTitle}}` Report specific sub title, e.g. \"Palkkapäivä 1.6.2020\".\r\n- `{{&gt; pageNumber }}` Current page number.Rendered as SPAN element.\r\n- `{ {&gt; totalPages } }` total pages in the document.Rendered as SPAN element.\r\n- `{ {&gt; logo } }` The main logo for the page as uploaded to settings.Rendered as SVG or IMG element.\r\n- `{ {&gt; img2 } }` Secondary image as uploaded to settings.Rendered as SVG or IMG element. */\r\n    headerTemplate?: string | null;\r\n    /** HTML template for the print footer.\r\nUse the following handlebars tags to inject values into the footer:\r\n\r\n- `{{ date }}` Logical report date, e.g.Salary date for salary slip.\r\n- `{ { today } }` Printing date of the report.\r\n- `{{ title }}` Report specific title, e.g. \"Palkkalaskelma\".\r\n- `{{ subTitle}}` Report specific sub title, e.g. \"Palkkapäivä 1.6.2020\".\r\n- `{{&gt; pageNumber }}` Current page number.Rendered as SPAN element.\r\n- `{ {&gt; totalPages } }` total pages in the document.Rendered as SPAN element.\r\n- `{ {&gt; logo } }` The main logo for the page as uploaded to settings.Rendered as SVG or IMG element.\r\n- `{ {&gt; img2 } }` Secondary image as uploaded to settings.Rendered as SVG or IMG element. */\r\n    footerTemplate?: string | null;\r\n    /** Additional CSS that is used to customize the layout of the report. */\r\n    css?: string | null;\r\n    /** Main logo image as embedded SVG or image (HTML).\r\nThis should preferably be an SVG or alternatively an image tag with data uri. */\r\n    logo?: string | null;\r\n    /** Secondary image that can be used in header / footer as embedded SVG or image (HTML).\r\nThis should preferably be an SVG or alternatively an image tag with data uri. */\r\n    img2?: string | null;\r\n    /** Defines the margins of the content area */\r\n    margin?: ReportingArea | null;\r\n    /** Print background graphics if such are added to the report using css property above. */\r\n    printBackground?: boolean | null;\r\n}\r\n\r\nexport interface ReportingArea {\r\n    /** Top margin. */\r\n    top?: number | null;\r\n    /** Right margin. */\r\n    right?: number | null;\r\n    /** Bottom margin. */\r\n    bottom?: number | null;\r\n    /** Left margin. */\r\n    left?: number | null;\r\n}\r\n\r\nexport interface PageResultOfBrandListItem {\r\n    items?: BrandListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of brands. */\r\nexport interface BrandListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: string | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: BrandData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Brand specific business data for index. */\r\nexport interface BrandData {\r\n    /** Url to logo. */\r\n    logo?: string | null;\r\n    /** Css path. */\r\n    skin?: string | null;\r\n}\r\n\r\nexport interface PageResultOfPrimaryPartnerListItem {\r\n    items?: PrimaryPartnerListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of primary partners in the user interface. It contains all essential information of the report and is basis for searching, filtering and sorting. */\r\nexport interface PrimaryPartnerListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: string | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: PrimaryPartnerData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Primary partner specific business data for index. */\r\nexport interface PrimaryPartnerData {\r\n    /** Human-readable, human decided, recognizable short unique key for the partner:\r\nAll lower-case, a-z, 0-9, \"-\" and \"_\". Used in URL's etc. */\r\n    key?: string | null;\r\n    /** Display name for the account. */\r\n    name?: string | null;\r\n    /** Description of the primary account. */\r\n    description?: string | null;\r\n}\r\n\r\n/** Provides the results of the tax card calculation and business logic. */\r\nexport interface TaxcardResult {\r\n    /** Sum of income for this year based on the items marked on the tax card. */\r\n    yearlyPreviousIncome?: number | null;\r\n    /** Provides a decimal number for a recommended widthholding tax IF it is possible to calculate that based on given information.\r\nNull, if the information is not sufficient to give a recommendation. */\r\n    tax?: number | null;\r\n}\r\n\r\nexport interface PageResultOfTaxcardListItem {\r\n    items?: TaxcardListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** List item of taxcard searches. */\r\nexport interface TaxcardListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: TaxcardState | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: TaxcardData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Tax card specific business data for index. */\r\nexport interface TaxcardData {\r\n    /** Year that the tax card is valid for. Typically this means from February of this year to January of the following. */\r\n    forYear?: number | null;\r\n    /** Tax percent as percent. I.e. for 50% set 50, not 0.5. */\r\n    taxPercent?: number | null;\r\n    /** Income up to which the TaxPercent can be used.\r\nAny income above the limit is taxed with ExcessTaxPercent. */\r\n    incomeLimit?: number | null;\r\n    /** Total income paid to the taxcard during the year (forYear). */\r\n    totalIncome?: number | null;\r\n    /** Tax percentage that is used in calculating the widthholding tax for the part of income above the IncomeLimit. */\r\n    taxPercent2?: number | null;\r\n    /** A Worker may request a minimum percent that is deducted even if the effective tax percent would be lower.\r\nThis can be used if Worker knows that he/she will be earning more in the year than what was estimated when the taxcard was created. */\r\n    taxPercentMin?: number | null;\r\n    /** The income type of the taxacard if fetched from the tax authorities taxcard API. */\r\n    incomeType?: TaxcardApiIncomeType | null;\r\n    /** The type of the tax card. */\r\n    kind?: TaxcardKind | null;\r\n    /** Employment id. */\r\n    employmentId?: string | null;\r\n    /** Contains the email or id of the responsible for the partner workflow event. */\r\n    partnerMessageAssignedTo?: string | null;\r\n    /** Start date of the taxcard validity */\r\n    start?: string | null;\r\n    /** End date of the taxcard validity. This may be null on NoTaxcard types. */\r\n    end?: string | null;\r\n    /** If the item is an employer instance of a shared taxcard, contains the original identifier\r\nas URI (\"/[PayloadType]/[Owner]/[Id]\", e.g. \"/CalculationDTO/FI86POYL0009461858/16ea052e-f23f-4b72-83a9-b8f6590f0dc9\");\r\nThis item cannot be set in Save - only in Approve method. */\r\n    copyOfUri?: string | null;\r\n    /** Validity resolved as enumeration in relation to payment date given in the query.\r\nThis is not available in direct database OData queries as it is relevant to current / given date. */\r\n    validity?: TaxcardValidity | null;\r\n    /** Uri to the file copy of the tax card. */\r\n    fileUri?: string | null;\r\n    /** Uri to the preview image of the tax card. */\r\n    previewUri?: string | null;\r\n}\r\n\r\n/** Provides a a result to query of whether a taxcard exists for a personal ID (no personal information). */\r\nexport interface SharedTaxcardExistsResult {\r\n    /** Returns true if a shared taxcard exists. */\r\n    sharedExists?: boolean | null;\r\n    /** Returns true if there is already an owned taxcard for the employer. */\r\n    ownedExists?: boolean | null;\r\n    /** Uri for the Shared taxcard */\r\n    uri?: string | null;\r\n    /** If Owned taxcard exists, it is returned here. */\r\n    ownedTaxcard?: Taxcard | null;\r\n    /** If true there was an error fetching the information.\r\nTypically, this would be that there were too many attempts to fetch Personal ID's and request was classified as phishing.\r\nIn this case, you should currently create the employment relation and fetch the taxcard infor after that. \r\nWe may later introduce a \"Are you robot\" type of interface to go around this (if necessary). */\r\n    isError?: boolean | null;\r\n    /** Type of the taxcard. Undefined if none is found. */\r\n    kind?: TaxcardKind | null;\r\n    /** Validity of the taxcard. Note that this property is null when Exists is false. */\r\n    validity?: DateRange | null;\r\n    /** The personal ID that was used in fetching.\r\nIt may be validated and formatted, or just the original string if there were issues. */\r\n    personalId?: string | null;\r\n}\r\n\r\n/** Contains the status and necessary data with Workers current taxcards. */\r\nexport interface WorkerCurrentTaxcards {\r\n    /** The currently active taxcard if one exists. This property is null by default. */\r\n    active?: Taxcard | null;\r\n    /** All the relevant taxcards as list items.\r\nFor Workes own taxcards search (MyTaxcards) this is ownerd cards only */\r\n    list?: TaxcardListItem[] | null;\r\n    /** Employer taxcards from all Employers for the Worker account.\r\nAll available within the searched timestring. This list is only available for the Worker, not for the Employer. */\r\n    employers?: TaxcardListItem[] | null;\r\n    /** Personal ID that is used for taxcard binding. This always exists as opposed to Employment. */\r\n    personalId?: string | null;\r\n    /** Employment relation if the search is done based on employment relation ID and not Current worker account. */\r\n    employment?: AccountInIndex | null;\r\n    /** A shared taxcard waiting for approval if one exists. This property is null by default. */\r\n    waitingApproval?: TaxcardWaitingApproval | null;\r\n    /** Employment preference for the taxcard. */\r\n    employmentTaxcard?: EmploymentRelationTaxcard | null;\r\n}\r\n\r\n/** Informs the employer that there is a Worker taxcard waiting for approval potentially without revealing personal information. */\r\nexport interface TaxcardWaitingApproval {\r\n    /** URI for the shared card: This is the taxcard owned by the Worker and to view it \r\nyou need to request your own copy (would be in FullCard). */\r\n    uri?: string | null;\r\n    /** Type of the taxcard. */\r\n    kind?: TaxcardKind | null;\r\n    /** Status of the taxcard */\r\n    state?: TaxcardState | null;\r\n    /** Time when the taxcard was added. */\r\n    createdAt?: string | null;\r\n    /** Owner account that added the taxcard. */\r\n    owner?: Avatar | null;\r\n    /** If true, the relation has not yet been confirmed:\r\nI.e. the employer has just input the Finnish Personal Id (HETU) of the Worker.\r\nThe employment relation is confirmed when salaries are paid or salary request is received from Worker. */\r\n    isRelationUnconfirmed?: boolean | null;\r\n    /** If there is an owner instance of taxcard for the employer, the copy is added here.\r\nInstance exists only if there is a confirmed employment relation or if employer explicitly requests the taxcard. */\r\n    fullCard?: Taxcard | null;\r\n}\r\n\r\n/** Represents a template that can be used to create new business objects or parts of them. */\r\nexport interface Template {\r\n    /** Short name of the template. */\r\n    name?: string | null;\r\n    /** Longer description of the template. */\r\n    description?: string | null;\r\n    /** Contents of the template. */\r\n    packages?: ContentPackage[] | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Content for a API object property. */\r\nexport interface ContentPackage {\r\n    /** Api Item Type */\r\n    type?: ApiItemType | null;\r\n    /** Path to the property. */\r\n    propertyPath?: string | null;\r\n    /** Content for the property. */\r\n    content?: any | null;\r\n    /** Action to be performed with the content. */\r\n    action?: ContentPackageAction | null;\r\n}\r\n\r\nexport interface PageResultOfTemplateListItem {\r\n    items?: TemplateListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of templates in the user interface. */\r\nexport interface TemplateListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: string | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: TemplateData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Template specific business data for index. */\r\nexport interface TemplateData {\r\n    /** Longer description of the template. */\r\n    description?: string | null;\r\n}\r\n\r\n/** Test object with value properties. */\r\nexport interface TestValues {\r\n    /** Test integer. */\r\n    intValue?: number | null;\r\n    /** Test double. */\r\n    doubleValue?: number | null;\r\n    /** Test decimal. */\r\n    decimalValue?: number | null;\r\n    /** Test string. */\r\n    stringValue?: string | null;\r\n    /** Test DateTime. */\r\n    dateTimeValue?: string | null;\r\n    /** Test Date. */\r\n    dateValue?: string | null;\r\n    /** Test bool. */\r\n    boolValue?: boolean | null;\r\n    /** Test object. */\r\n    objectValue?: any | null;\r\n    /** Test array */\r\n    arrayValue?: any[] | null;\r\n    /** Test enum */\r\n    enumValue?: TestEnum | null;\r\n    /** Free values dictionary. */\r\n    dictValue?: { [key: string]: any; } | null;\r\n}\r\n\r\n/** Object containing essential details of the test account */\r\nexport interface TestAccountInfo {\r\n    /** Bearer token for authentication. */\r\n    token?: string | null;\r\n    /** The current user credentials. */\r\n    userCredential?: SessionUserCredential | null;\r\n}\r\n\r\n/** View model data for Simple Federation Flow sample page in /MyAccount/Federation */\r\nexport interface FederationSampleViewModel {\r\n    /** The federation data based on the current user */\r\n    federationData?: OpenIdUserInfoSupportedClaims | null;\r\n    /** Federation data as JSON: Only used by depricated Asp.Net MVC version of the demo view. */\r\n    federationDataJson?: string | null;\r\n    customFederationDataJson?: string | null;\r\n    /** Federation data as JWT */\r\n    token?: string | null;\r\n    /** Certificate password for signing */\r\n    certificatePwd?: string | null;\r\n    /** Uploaded certificate file */\r\n    certificateFile?: HttpPostedFileBase | null;\r\n    /** Certificate bytes as Base64String */\r\n    certificateBytes?: string | null;\r\n    /** Account to impersonate. */\r\n    accountId?: string | null;\r\n}\r\n\r\n/** Part of the OpenId specification that is supported by Salaxy federated authentication / Authorization. */\r\nexport interface OpenIdUserInfoSupportedClaims {\r\n    /** REQUIRED. Issuer Identifier for the Issuer of the response. \r\nThe iss value is a case-sensitive URL using the https scheme that contains scheme, host, and optionally, port number and path components and no query or fragment components. */\r\n    iss?: string | null;\r\n    /** In Salaxy federation this should be the federation endpoint: \"https://secure.salaxy.com/security/federation\" in production\r\nOR \"https://test-api.salaxy.com/security/federation\" in the test environment.\r\nFrom the spec: REQUIRED. Audience(s) that this ID Token is intended for. \r\nIt MUST contain the OAuth 2.0 client_id of the Relying Party as an audience value. \r\nIt MAY also contain identifiers for other audiences.\r\nIn the general case, the aud value is an array of case-sensitive strings.\r\nIn the common special case when there is one audience, the aud value MAY be a single case-sensitive string. */\r\n    aud?: string | null;\r\n    /** REQUIRED. Expiration time on or after which the ID Token MUST NOT be accepted for processing. \r\nThe processing of this parameter requires that the current date/time MUST be before the expiration date/time listed in the value.\r\nImplementers MAY provide for some small leeway, usually no more than a few minutes, to account for clock skew. \r\nIts value is a JSON [RFC7159] number representing the number of seconds from 1970-01-01T00:00:00Z as measured in UTC until the date/time.\r\nSee RFC 3339 [RFC3339] for details regarding date/times in general and UTC in particular. */\r\n    exp?: number | null;\r\n    /** REQUIRED. Subject - Identifier for the End-User at the Issuer. */\r\n    sub: string;\r\n    /** End-User's full name in displayable form including all name parts, possibly including titles and suffixes, \r\nordered according to the End-User's locale and preferences.\r\nNOTE: In creating account etc., Salaxy will use given_name and family_name separately and therefore ignore the name. */\r\n    name?: string | null;\r\n    /** Given name(s) or first name(s) of the End-User. */\r\n    given_name?: string | null;\r\n    /** Surname(s) or last name(s) of the End-User. */\r\n    family_name?: string | null;\r\n    /** URL of the End-User's profile picture.\r\nThis URL MUST refer to an image file (for example, a PNG, JPEG, or GIF image file), rather than to a Web page containing an image. */\r\n    picture?: string | null;\r\n    /** End-User's preferred e-mail address.\r\nIts value MUST conform to the RFC 5322 [RFC5322] addr-spec syntax.\r\nThe RP MUST NOT rely upon this value being unique, as discussed in Section 2.5.3. */\r\n    email?: string | null;\r\n    /** True if the End-User's e-mail address has been verified; otherwise false. \r\nIMPORTANT: In Salaxy federation context, avoid sending non-confirmed e-mails. This may later become an error without being considered a breaking change.\r\nWhen this Claim Value is true, this means that the OP took affirmative steps to ensure that this e-mail address was controlled by the End-User at the time the verification was performed. \r\nThe means by which an e-mail address is verified is context specific, and dependent upon the trust framework or contractual agreements within which the parties are operating. */\r\n    email_verified?: boolean | null;\r\n    /** End-User's birthday, represented as an ISO 8601:2004 [ISO8601‑2004] YYYY-MM-DD format.\r\nThe year MAY be 0000, indicating that it is omitted.\r\nTo represent only the year, YYYY format is allowed.\r\nNote that depending on the underlying platform's date related function, providing just year can result in varying month and day, so the implementers need to take this factor into account to correctly process the dates. */\r\n    birthdate?: string | null;\r\n    /** End-User's locale, represented as a BCP47 [RFC5646] language tag.\r\nThis is typically an ISO 639-1 Alpha-2 [ISO639‑1] language code in lowercase and an ISO 3166-1 Alpha-2 [ISO3166‑1] country code in uppercase, separated by a dash.\r\nFor example, en-US or fr-CA. */\r\n    locale?: string | null;\r\n    /** End-User's preferred telephone number. E.164 [E.164] is RECOMMENDED as the format of this Claim, for example, +1 (425) 555-1212 or +56 (2) 687 2400.\r\nIf the phone number contains an extension, it is RECOMMENDED that the extension be represented using the RFC 3966 [RFC3966] extension syntax, for example, +1 (604) 555-1234;ext=5678. */\r\n    phone_number?: string | null;\r\n    /** True if the End-User's phone number has been verified; otherwise false.\r\nWhen this Claim Value is true, this means that the OP took affirmative steps to ensure that this phone number was controlled by the End-User at the time the verification was performed.\r\nThe means by which a phone number is verified is context specific, and dependent upon the trust framework or contractual agreements within which the parties are operating.\r\nWhen true, the phone_number Claim MUST be in E.164 format and any extensions MUST be represented in RFC 3966 format. */\r\n    phone_number_verified?: boolean | null;\r\n    /** End-User's preferred postal address.\r\nThe value of the address member is a JSON [RFC4627] structure containing some or all of the members defined in Section 2.5.1. */\r\n    address?: OpenIdUserInfoAddress | null;\r\n    /** Time the End-User's information was last updated.\r\nIts value is a JSON number representing the number of seconds from 1970-01-01T00:00:00Z as measured in UTC until the date/time. */\r\n    updated_at?: number | null;\r\n    /** Salaxy extension to Open ID Connect UserInfo claims for Company federation. */\r\n    \"https://salaxy.com/federation/company\"?: UserInfoCompanyAccount | null;\r\n    /** Salaxy extension to Open ID Connect UserInfo claims for Personal account federation. */\r\n    \"https://salaxy.com/federation/person\"?: UserInfoPersonAccount | null;\r\n    /** Salaxy extension to Open ID Connect UserInfo claims for Application data. */\r\n    \"https://salaxy.com/federation/app\"?: UserInfoApplication | null;\r\n}\r\n\r\nexport interface HttpPostedFileBase {\r\n    readonly contentLength?: number | null;\r\n    readonly contentType?: string | null;\r\n    readonly fileName?: string | null;\r\n    readonly inputStream?: Stream | null;\r\n}\r\n\r\n/** The Address Claim represents a physical mailing address in OpenID Connect UserInfo response message. This object is modeled according to: http://openid.net/specs/openid-connect-basic-1_0.html#AddressClaim */\r\nexport interface OpenIdUserInfoAddress {\r\n    /** Full street address component, which MAY include house number, street name, Post Office Box, and multi-line extended street address information. */\r\n    street_address?: string | null;\r\n    /** City or locality component. */\r\n    locality?: string | null;\r\n    /** Zip code or postal code component. */\r\n    postal_code?: string | null;\r\n}\r\n\r\n/** Salaxy extension to Open ID claims for company federation. */\r\nexport interface UserInfoCompanyAccount {\r\n    /** If true, the authorization is made for a company account. \r\nThe root user claims are just for a current user acting in behalf of the company.\r\nIf false, the entire CompanyClaims object will be ignored. */\r\n    as_company?: boolean | null;\r\n    /** The Business ID (Y-tunnus / Business Identity Code) is a code given to businesses and organizations by the PRH or the Tax Administration. \r\nIt consists of seven digits, a dash and a control mark, for example 1234567-8.\r\nAlternative accepted formats incule international VAT number \"FI12345678\" or number without the dash: \"12345678\". */\r\n    business_id: string;\r\n    /** One of the Salaxy Finnish company type shortcuts: fiOy, fiTm, fiRy, fiYy (Other) */\r\n    type: CompanyType;\r\n    /** Company name - the owner of the Salaxy account and shown in salary calculations, reports and invoices.\r\nTypically this is the official full name of the company as in Business registry. */\r\n    name?: string | null;\r\n    /** URL of the Company profile picture.\r\nThis URL MUST refer to an image file (for example, a PNG, JPEG, or GIF image file), rather than to a Web page containing an image. \r\nThe URL SHOULD specifically reference a company logo picture (PNG preferred) and it should be a square. If not, it may be converted, cropped and/or extended. */\r\n    picture?: string | null;\r\n    /** The company's preferred e-mail address in relation to salary payments.\r\nIts value MUST conform to the RFC 5322 [RFC5322] addr-spec syntax. */\r\n    email?: string | null;\r\n    /** True if the Company's e-mail address has been verified; otherwise false.\r\nIMPORTANT: In Salaxy federation context, avoid sending non-confirmed e-mails. This may later become an error without being considered a breaking change.\r\nWhen this Claim Value is true, this means that the OP took affirmative steps to ensure that this e-mail address was controlled by the End-User at the time the verification was performed. \r\nThe means by which an e-mail address is verified is context specific, and dependent upon the trust framework or contractual agreements within which the parties are operating. */\r\n    email_verified?: boolean | null;\r\n    /** Company's preferred telephone number for salary payment purposes. \r\nE.164 [E.164] is RECOMMENDED as the format of this Claim, for example, +1 (425) 555-1212 or +56 (2) 687 2400.\r\nIf the phone number contains an extension, it is RECOMMENDED that the extension be represented using the RFC 3966 [RFC3966] extension syntax, for example, +1 (604) 555-1234;ext=5678. */\r\n    phone_number?: string | null;\r\n    /** True if the Company's phone number has been verified; otherwise false.\r\nWhen this Claim Value is true, this means that the OP took affirmative steps to ensure that this phone number was controlled by the End-User at the time the verification was performed.\r\nThe means by which a phone number is verified is context specific, and dependent upon the trust framework or contractual agreements within which the parties are operating.\r\nWhen true, the phone_number Claim MUST be in E.164 format and any extensions MUST be represented in RFC 3966 format. */\r\n    phone_number_verified?: boolean | null;\r\n    /** Company's preferred postal address in relation to salary payments.\r\nThe value of the address member is a JSON [RFC4627] structure containing some or all of the members defined in Section 2.5.1. */\r\n    address?: OpenIdUserInfoAddress | null;\r\n    /** The primary partner account for the new company to create.\r\nIf the company already exists and has given authorization to the primary partner, and does not have any primary partner, the primary partner will be set.\r\nPlease note, that the calling account must have the authorization to the primary partner account, or\r\nbe the primary partner itself. */\r\n    proxy_partner?: string | null;\r\n    /** The account identifier at the partner site. \r\nIf present, this ID is used to restrict the authorization to one account at partner site only. */\r\n    partner_account_id?: string | null;\r\n}\r\n\r\n/** Salaxy extension to Open ID Connect UserInfo claims for Personal account federation. */\r\nexport interface UserInfoPersonAccount {\r\n    /** If true, the user issuer indicates that the current user has the right to sign in behalf of the company / association.\r\nIn this case the provider must also provide a valid Finnish personal ID in personal_id field. */\r\n    can_sign_company?: boolean | null;\r\n    /** A Finnish Personal ID (Henkilötunnus / HETU) for digital signature.\r\nIf can_sign_company is set to true, the issuer should provide a valid personal id here. */\r\n    personal_id?: string | null;\r\n}\r\n\r\n/** Salaxy extension to Open ID Connect UserInfo claims for Application data. */\r\nexport interface UserInfoApplication {\r\n    /** Return link back to the calling application. Token is added to this string */\r\n    return_link?: string | null;\r\n    /** Return link in case of error or user cancel. */\r\n    cancel_link?: string | null;\r\n    /** Application role that the user has in relation to the account in this session.\r\nCurrently supported values are: \"noAccess\" and \"owner\"\r\nAlso \"unknown\" (the default if null) is technically supported, but that value is an error in federation process by design. */\r\n    role?: UserInfoApplicationRole | null;\r\n    /** Application specific state data that is sent from the federation provider to the end-application.\r\nThis data is guaranteed to survive the onboarding process. */\r\n    state?: { [key: string]: string; } | null;\r\n    /** TEMPORARY */\r\n    custom?: { [key: string]: string; } | null;\r\n}\r\n\r\nexport interface Stream {\r\n    readonly canRead?: boolean | null;\r\n    readonly canSeek?: boolean | null;\r\n    readonly canTimeout?: boolean | null;\r\n    readonly canWrite?: boolean | null;\r\n    readonly length?: number | null;\r\n    position?: number | null;\r\n    readTimeout?: number | null;\r\n    writeTimeout?: number | null;\r\n}\r\n\r\n/** Usecase definition */\r\nexport interface Usecase {\r\n    /** Uri with owner information. */\r\n    uri?: string | null;\r\n    /** Short title for the usecase. */\r\n    label?: string | null;\r\n    /** Longer description for what the usecase is used for. */\r\n    description?: string | null;\r\n    /** URL for the icon that represents the service model. \r\nSupports font-awesome icons v4: https://fontawesome.com/v4.7/ (e.g. \"fa-wrench\") and images with absolute URL (https). */\r\n    icon?: string | null;\r\n    /** Item type of the usecase */\r\n    itemType?: ApiItemType | null;\r\n    /** The default status of the usecase in the settings.\r\nThe status affects the visibilty of the usecase. */\r\n    status?: UsecaseStatus | null;\r\n    /** Order setting for the usecases.\r\nThis is needed e.g. ad hoc reports. */\r\n    order?: number | null;\r\n    /** JSON schema defines the data model and the automatically generated default user interface for the usecase. */\r\n    schema?: any | null;\r\n    /** The actions related to this usecase. */\r\n    actions?: UsecaseAction[] | null;\r\n    /** Customized userinterface definitions (views) for the usecase. */\r\n    views?: UsecaseView[] | null;\r\n    /** Readonly workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\nexport interface UsecaseAction {\r\n    /** Type of the automation action */\r\n    actionType?: UsecaseActionType | null;\r\n    /** Title of the action */\r\n    label?: string | null;\r\n    /** If true, the button is shown in the user interfaces.\r\nTODO: This property may be removed before final production version =&gt; Set on/off depending on the view. */\r\n    uiShowButton?: boolean | null;\r\n    /** Text for the UI button. */\r\n    uiText?: string | null;\r\n    /** Defines the color of the UI button */\r\n    uiColor?: BootstrapStyle | null;\r\n    /** Description of the action */\r\n    description?: string | null;\r\n    /** The content: The script or other definition. */\r\n    content?: string | null;\r\n}\r\n\r\n/** Customized user interface view. */\r\nexport interface UsecaseView {\r\n    /** Title of the action */\r\n    label?: string | null;\r\n    /** Description of the action */\r\n    description?: string | null;\r\n    /** The content: The HTML for the view. */\r\n    content?: string | null;\r\n}\r\n\r\nexport interface PageResultOfUsecaseListItem {\r\n    items?: UsecaseListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of usecases. */\r\nexport interface UsecaseListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: UsecaseStatus | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: UsecaseListItemData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Usecase specific business data for index. */\r\nexport interface UsecaseListItemData {\r\n    /** Contains the email or id of the responsible for the partner workflow event. */\r\n    partnerMessageAssignedTo?: string | null;\r\n    /** Longer description for what the usecase is used for. */\r\n    description?: string | null;\r\n    /** URL for the icon that represents the service model. \r\nSupports font-awesome icons v4: https://fontawesome.com/v4.7/ (e.g. \"fa-wrench\") and images with absolute URL (https). */\r\n    icon?: string | null;\r\n    /** Order setting for the usecases.\r\nThis is needed e.g. ad hoc reports. */\r\n    order?: number | null;\r\n}\r\n\r\n/** Version information for the API object. */\r\nexport interface VersionInfo {\r\n    /** Identifier for the version. */\r\n    versionId?: string | null;\r\n    /** Operation which created the version. */\r\n    operation?: string | null;\r\n    /** Date and time when the version was created. */\r\n    date?: string | null;\r\n    /** User account  who created the version. */\r\n    userAccount?: Avatar | null;\r\n}\r\n\r\n/** Abstract base class for implementing CRUD objects in the Salaxy API. */\r\nexport interface ApiCrudObject {\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\nexport interface PageResultOfWorkerListItem {\r\n    items?: WorkerListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of workers in the user interface. It contains all essential information of the worker and is basis for searching, filtering and sorting. */\r\nexport interface WorkerListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Last date of modification of the object. The modification can be produced by the end user or by the system. */\r\n    timestamp?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: string | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: WorkerData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Worker specific business data for index. */\r\nexport interface WorkerData {\r\n    /** Type of the employment relation. */\r\n    type?: EmploymentRelationType | null;\r\n    /** Type for the pension insurance. */\r\n    pensionCalculation?: PensionCalculation | null;\r\n    /** Taxcard type from the employment point of view. */\r\n    taxcard?: EmploymentRelationTaxcard | null;\r\n    /** Start date of the Employment Relation. */\r\n    startDate?: string | null;\r\n    /** End date of the Employment Relation. */\r\n    endDate?: string | null;\r\n    /** Duration of the employment. If true, the employment relation is for a fixed term.\r\nOtherwise (which is the default) the employment relation continues until further notice. */\r\n    isFixedTerm?: boolean | null;\r\n    /** Indicates that the employment relation has been terminated.\r\nSaving with this status also makes the employment relation Archived. */\r\n    isTerminated?: boolean | null;\r\n}\r\n\r\n/** AbcSection enumeration */\r\nexport enum AbcSection {\r\n    Undefined = \"undefined\",\r\n    DoNotShow = \"doNotShow\",\r\n    Employment = \"employment\",\r\n    Insurance = \"insurance\",\r\n    Salary = \"salary\",\r\n    Examples = \"examples\",\r\n    PalkkausGeneral = \"palkkausGeneral\",\r\n    PalkkausInstructions = \"palkkausInstructions\",\r\n    Blog = \"blog\",\r\n    Press = \"press\",\r\n    PersonEmployer = \"personEmployer\",\r\n    HouseholdEmployer = \"householdEmployer\",\r\n    Worker = \"worker\",\r\n    Employee = \"employee\",\r\n    Entrepreneur = \"entrepreneur\",\r\n    Association = \"association\",\r\n    BusinessOwner = \"businessOwner\",\r\n    ProductLongDescription = \"productLongDescription\",\r\n    DocumentTemplates = \"documentTemplates\",\r\n    InstructionsAndExamples = \"instructionsAndExamples\",\r\n}\r\n\r\n/** AbsenceCauseCode enumeration */\r\nexport enum AbsenceCauseCode {\r\n    Undefined = \"undefined\",\r\n    UnpaidLeave = \"unpaidLeave\",\r\n    PersonalReason = \"personalReason\",\r\n    Illness = \"illness\",\r\n    PartTimeSickLeave = \"partTimeSickLeave\",\r\n    ParentalLeave = \"parentalLeave\",\r\n    SpecialMaternityLeave = \"specialMaternityLeave\",\r\n    Rehabilitation = \"rehabilitation\",\r\n    ChildIllness = \"childIllness\",\r\n    PartTimeChildCareLeave = \"partTimeChildCareLeave\",\r\n    Training = \"training\",\r\n    JobAlternationLeave = \"jobAlternationLeave\",\r\n    StudyLeave = \"studyLeave\",\r\n    IndustrialAction = \"industrialAction\",\r\n    InterruptionInWorkProvision = \"interruptionInWorkProvision\",\r\n    LeaveOfAbsence = \"leaveOfAbsence\",\r\n    MilitaryRefresherTraining = \"militaryRefresherTraining\",\r\n    MilitaryService = \"militaryService\",\r\n    LayOff = \"layOff\",\r\n    ChildCareLeave = \"childCareLeave\",\r\n    MidWeekHoliday = \"midWeekHoliday\",\r\n    AccruedHoliday = \"accruedHoliday\",\r\n    OccupationalAccident = \"occupationalAccident\",\r\n    AnnualLeave = \"annualLeave\",\r\n    PartTimeAbsenceDueToRehabilitation = \"partTimeAbsenceDueToRehabilitation\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** AccountantType enumeration */\r\nexport enum AccountantType {\r\n    Unknown = \"unknown\",\r\n    UnlinkedPrimaryPartner = \"unlinkedPrimaryPartner\",\r\n    UnlinkedAccountingOnly = \"unlinkedAccountingOnly\",\r\n    PendingPrimaryPartner = \"pendingPrimaryPartner\",\r\n    PrimaryPartner = \"primaryPartner\",\r\n    None = \"none\",\r\n}\r\n\r\n/** AccountingChannel enumeration */\r\nexport enum AccountingChannel {\r\n    Undefined = \"undefined\",\r\n    Procountor = \"procountor\",\r\n    VismaNetvisor = \"vismaNetvisor\",\r\n    VismaFivaldi = \"vismaFivaldi\",\r\n}\r\n\r\n/** AccountingPeriodClosingOption enumeration */\r\nexport enum AccountingPeriodClosingOption {\r\n    Default = \"default\",\r\n    Accounting = \"accounting\",\r\n    PeriodicInvoices = \"periodicInvoices\",\r\n    AccountingAndPeriodicInvoices = \"accountingAndPeriodicInvoices\",\r\n    IrReports = \"irReports\",\r\n    AccountingAndIrReports = \"accountingAndIrReports\",\r\n    PeriodicInvoicesAndIrReports = \"periodicInvoicesAndIrReports\",\r\n    AccountingAndPeriodicInvoicesAndIrReports = \"accountingAndPeriodicInvoicesAndIrReports\",\r\n}\r\n\r\n/** AccountingReportRowType enumeration */\r\nexport enum AccountingReportRowType {\r\n    Debit = \"debit\",\r\n    Credit = \"credit\",\r\n    Total = \"total\",\r\n    GroupHeader = \"groupHeader\",\r\n    GroupTotal = \"groupTotal\",\r\n    ChildRow = \"childRow\",\r\n}\r\n\r\n/** AccountingReportTableType enumeration */\r\nexport enum AccountingReportTableType {\r\n    Classic = \"classic\",\r\n    Simple = \"simple\",\r\n    Mapped = \"mapped\",\r\n}\r\n\r\n/** AccountingTargetStatus enumeration */\r\nexport enum AccountingTargetStatus {\r\n    Undefined = \"undefined\",\r\n    OwnedTarget = \"ownedTarget\",\r\n    ProductTarget = \"productTarget\",\r\n    SharedTarget = \"sharedTarget\",\r\n}\r\n\r\n/** AgeGroupCode enumeration */\r\nexport enum AgeGroupCode {\r\n    A = \"a\",\r\n    B = \"b\",\r\n    C = \"c\",\r\n    U = \"u\",\r\n}\r\n\r\n/** AgeRange enumeration */\r\nexport enum AgeRange {\r\n    Unknown = \"unknown\",\r\n    Age_15 = \"age_15\",\r\n    Age16 = \"age16\",\r\n    Age17 = \"age17\",\r\n    Age18_52 = \"age18_52\",\r\n    Age53_62 = \"age53_62\",\r\n    Age63_64 = \"age63_64\",\r\n    Age65_67 = \"age65_67\",\r\n    Age68AndOVer = \"age68AndOVer\",\r\n}\r\n\r\n/** AllowanceCode enumeration */\r\nexport enum AllowanceCode {\r\n    MealAllowance = \"mealAllowance\",\r\n    PartialDailyAllowance = \"partialDailyAllowance\",\r\n    FullDailyAllowance = \"fullDailyAllowance\",\r\n    InternationalDailyAllowance = \"internationalDailyAllowance\",\r\n    TaxExemptReimbursementsAbroad = \"taxExemptReimbursementsAbroad\",\r\n}\r\n\r\n/** AnnualLeavePaymentKind enumeration */\r\nexport enum AnnualLeavePaymentKind {\r\n    Undefined = \"undefined\",\r\n    Planned = \"planned\",\r\n    ManualSalary = \"manualSalary\",\r\n    ManualCompensation = \"manualCompensation\",\r\n    ManualBonus = \"manualBonus\",\r\n    PaidCalc = \"paidCalc\",\r\n    DraftCalc = \"draftCalc\",\r\n}\r\n\r\n/** ApiCheckStatus enumeration */\r\nexport enum ApiCheckStatus {\r\n    Ignored = \"ignored\",\r\n    Success = \"success\",\r\n    Warning = \"warning\",\r\n    Error = \"error\",\r\n}\r\n\r\n/** ApiImportStatus enumeration */\r\nexport enum ApiImportStatus {\r\n    Ignored = \"ignored\",\r\n    Success = \"success\",\r\n    Warning = \"warning\",\r\n    Error = \"error\",\r\n}\r\n\r\n/** ApiListItemType enumeration */\r\nexport enum ApiListItemType {\r\n    Unknown = \"unknown\",\r\n    AccountBase = \"accountBase\",\r\n    CompanyAccount = \"companyAccount\",\r\n    PersonAccount = \"personAccount\",\r\n    WorkerAccount = \"workerAccount\",\r\n    Certificate = \"certificate\",\r\n    SessionUserCredential = \"sessionUserCredential\",\r\n    Onboarding = \"onboarding\",\r\n    Profile = \"profile\",\r\n    Calculation = \"calculation\",\r\n    CalculationPaid = \"calculationPaid\",\r\n    ESalaryPayment = \"eSalaryPayment\",\r\n    Payment = \"payment\",\r\n    EarningsPayment = \"earningsPayment\",\r\n    Employment = \"employment\",\r\n    WorkerAbsences = \"workerAbsences\",\r\n    HolidayYear = \"holidayYear\",\r\n    Taxcard = \"taxcard\",\r\n    PayrollDetails = \"payrollDetails\",\r\n    Invoice = \"invoice\",\r\n    Report = \"report\",\r\n    BlobFile = \"blobFile\",\r\n    PayerSummary = \"payerSummary\",\r\n    CalendarEvent = \"calendarEvent\",\r\n    Usecase = \"usecase\",\r\n    Dataset = \"dataset\",\r\n    Article = \"article\",\r\n    MessageThread = \"messageThread\",\r\n    EmailMessage = \"emailMessage\",\r\n    AccountProducts = \"accountProducts\",\r\n    VarmaPensionOrder = \"varmaPensionOrder\",\r\n    IfInsuranceOrder = \"ifInsuranceOrder\",\r\n    Historical = \"historical\",\r\n}\r\n\r\n/** ApiTestErrorType enumeration */\r\nexport enum ApiTestErrorType {\r\n    Default = \"default\",\r\n    UserFriendly = \"userFriendly\",\r\n}\r\n\r\n/** ApiItemType enumeration */\r\nexport enum ApiItemType {\r\n    Undefined = \"undefined\",\r\n    Calculation = \"calculation\",\r\n    CalculationPaid = \"calculationPaid\",\r\n    Dataset = \"dataset\",\r\n    PayrollDetails = \"payrollDetails\",\r\n    Invoice = \"invoice\",\r\n    EarningsPaymentReport = \"earningsPaymentReport\",\r\n    PayerSummaryReport = \"payerSummaryReport\",\r\n    Employment = \"employment\",\r\n    MessageThread = \"messageThread\",\r\n    CalendarEvent = \"calendarEvent\",\r\n    ListItems = \"listItems\",\r\n}\r\n\r\n/** ApiValidationErrorType enumeration */\r\nexport enum ApiValidationErrorType {\r\n    General = \"general\",\r\n    Required = \"required\",\r\n    Invalid = \"invalid\",\r\n    Warning = \"warning\",\r\n}\r\n\r\n/** AuthenticationMethod enumeration */\r\nexport enum AuthenticationMethod {\r\n    Undefined = \"undefined\",\r\n    EmailPwdLocal = \"emailPwdLocal\",\r\n    Facebook = \"facebook\",\r\n    Google = \"google\",\r\n    Microsoft = \"microsoft\",\r\n    LinkedIn = \"linkedIn\",\r\n    Auth0Database = \"auth0Database\",\r\n    X509 = \"x509\",\r\n    Salaxy = \"salaxy\",\r\n    Test = \"test\",\r\n    WebAuthn = \"webAuthn\",\r\n    MicrosoftOAuth = \"microsoftOAuth\",\r\n    GoogleOAuth = \"googleOAuth\",\r\n    InternalLocalhost = \"internalLocalhost\",\r\n}\r\n\r\n/** AuthorizationStatus enumeration */\r\nexport enum AuthorizationStatus {\r\n    Undefined = \"undefined\",\r\n    OK = \"oK\",\r\n    AccessDenied = \"accessDenied\",\r\n    ExpiredOauthToken = \"expiredOauthToken\",\r\n    InvalidOAuthToken = \"invalidOAuthToken\",\r\n    NoOauthToken = \"noOauthToken\",\r\n}\r\n\r\n/** AuthorizationType enumeration */\r\nexport enum AuthorizationType {\r\n    None = \"none\",\r\n    EmployerAuthorization = \"employerAuthorization\",\r\n    WorkerContract = \"workerContract\",\r\n    CompanyContract = \"companyContract\",\r\n    PartnerContract = \"partnerContract\",\r\n    Manual = \"manual\",\r\n    Temporary = \"temporary\",\r\n}\r\n\r\n/** AvatarPictureType enumeration */\r\nexport enum AvatarPictureType {\r\n    Icon = \"icon\",\r\n    Uploaded = \"uploaded\",\r\n    Gravatar = \"gravatar\",\r\n}\r\n\r\n/** BankPaymentType enumeration */\r\nexport enum BankPaymentType {\r\n    Unknown = \"unknown\",\r\n    Error = \"error\",\r\n    PaytrailBatch = \"paytrailBatch\",\r\n    NetvisorPayment = \"netvisorPayment\",\r\n    SalaryGrossPayment = \"salaryGrossPayment\",\r\n    RefundPayment = \"refundPayment\",\r\n    PartialRefundPayment = \"partialRefundPayment\",\r\n    DoubleRefundPayment = \"doubleRefundPayment\",\r\n    TransferToEcfaPayment = \"transferToEcfaPayment\",\r\n    InsuranceGrossPayment = \"insuranceGrossPayment\",\r\n    NetSalary = \"netSalary\",\r\n    SalaryAdvance = \"salaryAdvance\",\r\n    NetSalaryRepayment = \"netSalaryRepayment\",\r\n    NetSalaryCorrection = \"netSalaryCorrection\",\r\n    TaxAccount = \"taxAccount\",\r\n    Tvr = \"tvr\",\r\n    TvrRfnd = \"tvrRfnd\",\r\n    PalkkausFees = \"palkkausFees\",\r\n    BankFees = \"bankFees\",\r\n    PaytrailFees = \"paytrailFees\",\r\n    InsuranceLahiTapiola = \"insuranceLahiTapiola\",\r\n    Tyel = \"tyel\",\r\n    TyelEteraContract = \"tyelEteraContract\",\r\n    TyelEteraTemp = \"tyelEteraTemp\",\r\n    TyelEteraUnknown = \"tyelEteraUnknown\",\r\n    TyelEloContract = \"tyelEloContract\",\r\n    TyelEloTemp = \"tyelEloTemp\",\r\n    TyelEloInitialImport = \"tyelEloInitialImport\",\r\n    TyelVarmaContract = \"tyelVarmaContract\",\r\n    TyelVarmaTemp = \"tyelVarmaTemp\",\r\n    TyelIlmarinenContract = \"tyelIlmarinenContract\",\r\n    TyelIlmarinenTemp = \"tyelIlmarinenTemp\",\r\n    Union = \"union\",\r\n    UnionRaksa = \"unionRaksa\",\r\n    Foreclosure = \"foreclosure\",\r\n    SaldoYearBegin = \"saldoYearBegin\",\r\n    SaldoYearEnd = \"saldoYearEnd\",\r\n}\r\n\r\n/** BenefitCode enumeration */\r\nexport enum BenefitCode {\r\n    AccommodationBenefit = \"accommodationBenefit\",\r\n    TelephoneBenefit = \"telephoneBenefit\",\r\n    MealBenefit = \"mealBenefit\",\r\n    OtherBenefits = \"otherBenefits\",\r\n}\r\n\r\n/** BlobFileType enumeration */\r\nexport enum BlobFileType {\r\n    Unknown = \"unknown\",\r\n    AuthorizationPdf = \"authorizationPdf\",\r\n    Avatar = \"avatar\",\r\n    TaxCard = \"taxCard\",\r\n    ExpensesReceipt = \"expensesReceipt\",\r\n    Raksaloki = \"raksaloki\",\r\n    Template = \"template\",\r\n    EInvoice = \"eInvoice\",\r\n    Temporary = \"temporary\",\r\n    Settings = \"settings\",\r\n    Messages = \"messages\",\r\n    Record = \"record\",\r\n    MonthlyReport = \"monthlyReport\",\r\n    YearlyReport = \"yearlyReport\",\r\n    CalcReport = \"calcReport\",\r\n}\r\n\r\n/** BlobRepository enumeration */\r\nexport enum BlobRepository {\r\n    UserFiles = \"userFiles\",\r\n    VersionHistory = \"versionHistory\",\r\n    SystemFiles = \"systemFiles\",\r\n    Payload = \"payload\",\r\n    Reports = \"reports\",\r\n    CdnImages = \"cdnImages\",\r\n    Iam = \"iam\",\r\n    GitContent = \"gitContent\",\r\n    FileSystemContent = \"fileSystemContent\",\r\n}\r\n\r\n/** BootstrapStyle enumeration */\r\nexport enum BootstrapStyle {\r\n    Default = \"default\",\r\n    Primary = \"primary\",\r\n    Success = \"success\",\r\n    Info = \"info\",\r\n    Warning = \"warning\",\r\n    Danger = \"danger\",\r\n}\r\n\r\n/** CalcGroup enumeration */\r\nexport enum CalcGroup {\r\n    Undefined = \"undefined\",\r\n    BaseSalary = \"baseSalary\",\r\n    SalaryAdditions = \"salaryAdditions\",\r\n    Benefits = \"benefits\",\r\n    Expenses = \"expenses\",\r\n    Deductions = \"deductions\",\r\n    OtherNoPayment = \"otherNoPayment\",\r\n    Totals = \"totals\",\r\n    Disabled = \"disabled\",\r\n}\r\n\r\n/** CalcRowConfigNumberInput enumeration */\r\nexport enum CalcRowConfigNumberInput {\r\n    Number = \"number\",\r\n    Hidden = \"hidden\",\r\n    ReadOnly = \"readOnly\",\r\n}\r\n\r\n/** CalcRowConfigTypeGroup enumeration */\r\nexport enum CalcRowConfigTypeGroup {\r\n    BuiltIn = \"builtIn\",\r\n    Custom = \"custom\",\r\n}\r\n\r\n/** CalculationFlag enumeration */\r\nexport enum CalculationFlag {\r\n    Exclude = \"exclude\",\r\n    PensionInsurance = \"pensionInsurance\",\r\n    AccidentInsurance = \"accidentInsurance\",\r\n    UnemploymentInsurance = \"unemploymentInsurance\",\r\n    HealthInsurance = \"healthInsurance\",\r\n    InsurancesDeduction = \"insurancesDeduction\",\r\n    NoTax = \"noTax\",\r\n    Tax = \"tax\",\r\n    TaxDeduction = \"taxDeduction\",\r\n    CfNoPayment = \"cfNoPayment\",\r\n    CfPayment = \"cfPayment\",\r\n    CfDeduction = \"cfDeduction\",\r\n    CfDeductionAtSalaxy = \"cfDeductionAtSalaxy\",\r\n}\r\n\r\n/** CalculationRefresh enumeration */\r\nexport enum CalculationRefresh {\r\n    Default = \"default\",\r\n    Worker = \"worker\",\r\n    Employer = \"employer\",\r\n    Employment = \"employment\",\r\n    Taxcard = \"taxcard\",\r\n    Insurances = \"insurances\",\r\n}\r\n\r\n/** CalculationResultRowType enumeration */\r\nexport enum CalculationResultRowType {\r\n    Undefined = \"undefined\",\r\n    TotalBenefits = \"totalBenefits\",\r\n    TotalExpenses = \"totalExpenses\",\r\n    TotalSocialSecurityEmployer = \"totalSocialSecurityEmployer\",\r\n    TotalSocialSecurityEmployerDebt = \"totalSocialSecurityEmployerDebt\",\r\n    TotalSocialSecurityEmployerPayment = \"totalSocialSecurityEmployerPayment\",\r\n    TotalPension = \"totalPension\",\r\n    TotalPensionPayment = \"totalPensionPayment\",\r\n    TotalPensionEmployer = \"totalPensionEmployer\",\r\n    TotalPensionEmployerDebt = \"totalPensionEmployerDebt\",\r\n    TotalPensionWorker = \"totalPensionWorker\",\r\n    TotalUnemployment = \"totalUnemployment\",\r\n    TotalUnemploymentPayment = \"totalUnemploymentPayment\",\r\n    TotalUnemploymentEmployer = \"totalUnemploymentEmployer\",\r\n    TotalUnemploymentEmployerDebt = \"totalUnemploymentEmployerDebt\",\r\n    TotalUnemploymentWorker = \"totalUnemploymentWorker\",\r\n    TotalPalkkaus = \"totalPalkkaus\",\r\n    TotalSalary = \"totalSalary\",\r\n    TotalTax = \"totalTax\",\r\n    TotalTaxPayment = \"totalTaxPayment\",\r\n    TotalPayment = \"totalPayment\",\r\n    TotalWorkerPayment = \"totalWorkerPayment\",\r\n    TotalService = \"totalService\",\r\n}\r\n\r\n/** CalculationRowCategory enumeration */\r\nexport enum CalculationRowCategory {\r\n    Salary = \"salary\",\r\n    SalaryAdditions = \"salaryAdditions\",\r\n    SalaryCalc = \"salaryCalc\",\r\n    Holidays = \"holidays\",\r\n    Benefits = \"benefits\",\r\n    Expenses = \"expenses\",\r\n    Deductions = \"deductions\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** CalculationRowSource enumeration */\r\nexport enum CalculationRowSource {\r\n    Undefined = \"undefined\",\r\n    Disabled = \"disabled\",\r\n    ManualRow = \"manualRow\",\r\n    WorktimeImport = \"worktimeImport\",\r\n    PriceEmployment = \"priceEmployment\",\r\n    PriceCompany = \"priceCompany\",\r\n    CopyEmployment = \"copyEmployment\",\r\n    CopyCompany = \"copyCompany\",\r\n    CustomRowtype = \"customRowtype\",\r\n}\r\n\r\n/** CalculationRowType enumeration */\r\nexport enum CalculationRowType {\r\n    Unknown = \"unknown\",\r\n    Salary = \"salary\",\r\n    HourlySalary = \"hourlySalary\",\r\n    MonthlySalary = \"monthlySalary\",\r\n    TotalWorkerPayment = \"totalWorkerPayment\",\r\n    TotalEmployerPayment = \"totalEmployerPayment\",\r\n    TimeRatePay = \"timeRatePay\",\r\n    Compensation = \"compensation\",\r\n    Overtime = \"overtime\",\r\n    TesWorktimeShortening = \"tesWorktimeShortening\",\r\n    EveningAddition = \"eveningAddition\",\r\n    NightimeAddition = \"nightimeAddition\",\r\n    SaturdayAddition = \"saturdayAddition\",\r\n    SundayWork = \"sundayWork\",\r\n    OtherAdditions = \"otherAdditions\",\r\n    PaidSickLeaveSalary = \"paidSickLeaveSalary\",\r\n    PaidSickLeaveHourlySalary = \"paidSickLeaveHourlySalary\",\r\n    PaidSickLeaveMonthlySalary = \"paidSickLeaveMonthlySalary\",\r\n    TrainingSalary = \"trainingSalary\",\r\n    TrainingHourlySalary = \"trainingHourlySalary\",\r\n    TrainingMonthlySalary = \"trainingMonthlySalary\",\r\n    AccomodationBenefit = \"accomodationBenefit\",\r\n    MealBenefit = \"mealBenefit\",\r\n    PhoneBenefit = \"phoneBenefit\",\r\n    CarBenefit = \"carBenefit\",\r\n    BicycleBenefit = \"bicycleBenefit\",\r\n    OtherBenefit = \"otherBenefit\",\r\n    HolidayCompensation = \"holidayCompensation\",\r\n    HolidayBonus = \"holidayBonus\",\r\n    HolidaySalary = \"holidaySalary\",\r\n    DailyAllowance = \"dailyAllowance\",\r\n    DailyAllowanceHalf = \"dailyAllowanceHalf\",\r\n    MealCompensation = \"mealCompensation\",\r\n    MilageOwnCar = \"milageOwnCar\",\r\n    ToolCompensation = \"toolCompensation\",\r\n    Expenses = \"expenses\",\r\n    MilageDaily = \"milageDaily\",\r\n    MilageOther = \"milageOther\",\r\n    UnionPayment = \"unionPayment\",\r\n    Foreclosure = \"foreclosure\",\r\n    Advance = \"advance\",\r\n    ForeclosureByPalkkaus = \"foreclosureByPalkkaus\",\r\n    PrepaidExpenses = \"prepaidExpenses\",\r\n    OtherDeductions = \"otherDeductions\",\r\n    DeductibleOfExerciseAndCultureBenefit = \"deductibleOfExerciseAndCultureBenefit\",\r\n    ChildCareSubsidy = \"childCareSubsidy\",\r\n    ChainsawReduction = \"chainsawReduction\",\r\n    NonProfitOrg = \"nonProfitOrg\",\r\n    SubsidisedCommute = \"subsidisedCommute\",\r\n    IrIncomeType = \"irIncomeType\",\r\n    Board = \"board\",\r\n    Remuneration = \"remuneration\",\r\n    OtherCompensation = \"otherCompensation\",\r\n    WorkingTimeCompensation = \"workingTimeCompensation\",\r\n    EmploymentTermination = \"employmentTermination\",\r\n    HourlySalaryWithWorkingTimeCompensation = \"hourlySalaryWithWorkingTimeCompensation\",\r\n    PaidSickLeave = \"paidSickLeave\",\r\n    Training = \"training\",\r\n    PayStats = \"payStats\",\r\n    TaxAtSource = \"taxAtSource\",\r\n    TaxWithholding = \"taxWithholding\",\r\n    AbsencePeriod = \"absencePeriod\",\r\n    ServiceCharge = \"serviceCharge\",\r\n    Service = \"service\",\r\n    Script = \"script\",\r\n    Totals = \"totals\",\r\n}\r\n\r\n/** CalculationRowUnit enumeration */\r\nexport enum CalculationRowUnit {\r\n    Undefined = \"undefined\",\r\n    Count = \"count\",\r\n    Percent = \"percent\",\r\n    Days = \"days\",\r\n    Kilometers = \"kilometers\",\r\n    Hours = \"hours\",\r\n    Weeks = \"weeks\",\r\n    Months = \"months\",\r\n}\r\n\r\n/** CalculationStatus enumeration */\r\nexport enum CalculationStatus {\r\n    Draft = \"draft\",\r\n    PaymentStarted = \"paymentStarted\",\r\n    PaymentSucceeded = \"paymentSucceeded\",\r\n    PaymentCanceled = \"paymentCanceled\",\r\n    PaymentError = \"paymentError\",\r\n    PaymentWorkerCopy = \"paymentWorkerCopy\",\r\n    WorkerRequested = \"workerRequested\",\r\n    WorkerRequestAccepted = \"workerRequestAccepted\",\r\n    WorkerRequestDeclined = \"workerRequestDeclined\",\r\n    PaymentRefunded = \"paymentRefunded\",\r\n    PaymentRepairCopy = \"paymentRepairCopy\",\r\n    WaitingApproval = \"waitingApproval\",\r\n    PayrollDraft = \"payrollDraft\",\r\n    Repair = \"repair\",\r\n    ProDraft = \"proDraft\",\r\n    SharedWaiting = \"sharedWaiting\",\r\n    SharedApproved = \"sharedApproved\",\r\n    SharedRejected = \"sharedRejected\",\r\n    History = \"history\",\r\n    Template = \"template\",\r\n}\r\n\r\n/** CalculationStatusCategory enumeration */\r\nexport enum CalculationStatusCategory {\r\n    All = \"all\",\r\n    Readonly = \"readonly\",\r\n    Editable = \"editable\",\r\n    Sent = \"sent\",\r\n    Shared = \"shared\",\r\n    Received = \"received\",\r\n    Error = \"error\",\r\n}\r\n\r\n/** CalendarActionType enumeration */\r\nexport enum CalendarActionType {\r\n    Undefined = \"undefined\",\r\n    Display = \"display\",\r\n    Email = \"email\",\r\n    Audio = \"audio\",\r\n    CreateItem = \"createItem\",\r\n    Script = \"script\",\r\n    PaymentDate = \"paymentDate\",\r\n}\r\n\r\n/** CalendarEventStatus enumeration */\r\nexport enum CalendarEventStatus {\r\n    Undefined = \"undefined\",\r\n    Cancelled = \"cancelled\",\r\n    Confirmed = \"confirmed\",\r\n    Tentative = \"tentative\",\r\n    NeedsAction = \"needsAction\",\r\n    Completed = \"completed\",\r\n    InProcess = \"inProcess\",\r\n}\r\n\r\n/** CarBenefitCode enumeration */\r\nexport enum CarBenefitCode {\r\n    LimitedCarBenefit = \"limitedCarBenefit\",\r\n    FullCarBenefit = \"fullCarBenefit\",\r\n}\r\n\r\n/** CompanyType enumeration */\r\nexport enum CompanyType {\r\n    Unknown = \"unknown\",\r\n    FiOy = \"fiOy\",\r\n    FiTm = \"fiTm\",\r\n    FiRy = \"fiRy\",\r\n    FiYy = \"fiYy\",\r\n}\r\n\r\n/** ContentPackageAction enumeration */\r\nexport enum ContentPackageAction {\r\n    Undefined = \"undefined\",\r\n    Overwrite = \"overwrite\",\r\n    Preserve = \"preserve\",\r\n    Append = \"append\",\r\n}\r\n\r\n/** ContractPartyType enumeration */\r\nexport enum ContractPartyType {\r\n    Person = \"person\",\r\n    CustomContact = \"customContact\",\r\n}\r\n\r\n/** ContactType enumeration */\r\nexport enum ContactType {\r\n    Default = \"default\",\r\n    WorkerAccount = \"workerAccount\",\r\n    EmployerOverride = \"employerOverride\",\r\n    Foreign = \"foreign\",\r\n}\r\n\r\n/** CostAccountingDimensionScope enumeration */\r\nexport enum CostAccountingDimensionScope {\r\n    None = \"none\",\r\n    Calculation = \"calculation\",\r\n    Row = \"row\",\r\n    Hidden = \"hidden\",\r\n}\r\n\r\n/** Country enumeration */\r\nexport enum Country {\r\n    Fi = \"fi\",\r\n    Ae = \"ae\",\r\n    At = \"at\",\r\n    Ba = \"ba\",\r\n    Bg = \"bg\",\r\n    By = \"by\",\r\n    Cn = \"cn\",\r\n    De = \"de\",\r\n    Eg = \"eg\",\r\n    Fr = \"fr\",\r\n    Gg = \"gg\",\r\n    Hr = \"hr\",\r\n    Ie = \"ie\",\r\n    In = \"in\",\r\n    Je = \"je\",\r\n    Kr = \"kr\",\r\n    Lk = \"lk\",\r\n    Lv = \"lv\",\r\n    Me = \"me\",\r\n    Mx = \"mx\",\r\n    No = \"no\",\r\n    Pk = \"pk\",\r\n    Rs = \"rs\",\r\n    Sg = \"sg\",\r\n    Th = \"th\",\r\n    Tr = \"tr\",\r\n    Us = \"us\",\r\n    Vg = \"vg\",\r\n    Zm = \"zm\",\r\n    Am = \"am\",\r\n    Au = \"au\",\r\n    Bb = \"bb\",\r\n    Bm = \"bm\",\r\n    Ca = \"ca\",\r\n    Cy = \"cy\",\r\n    Dk = \"dk\",\r\n    Es = \"es\",\r\n    Gb = \"gb\",\r\n    Gr = \"gr\",\r\n    Hu = \"hu\",\r\n    Il = \"il\",\r\n    Is = \"is\",\r\n    Jp = \"jp\",\r\n    Ky = \"ky\",\r\n    Lt = \"lt\",\r\n    Ma = \"ma\",\r\n    Mk = \"mk\",\r\n    My = \"my\",\r\n    Nz = \"nz\",\r\n    Pl = \"pl\",\r\n    Ru = \"ru\",\r\n    Si = \"si\",\r\n    Tj = \"tj\",\r\n    Tz = \"tz\",\r\n    Uy = \"uy\",\r\n    Vn = \"vn\",\r\n    Ar = \"ar\",\r\n    Az = \"az\",\r\n    Be = \"be\",\r\n    Br = \"br\",\r\n    Ch = \"ch\",\r\n    Cz = \"cz\",\r\n    Ee = \"ee\",\r\n    Ge = \"ge\",\r\n    Hk = \"hk\",\r\n    Id = \"id\",\r\n    Im = \"im\",\r\n    It = \"it\",\r\n    Kg = \"kg\",\r\n    Kz = \"kz\",\r\n    Lu = \"lu\",\r\n    Md = \"md\",\r\n    Mt = \"mt\",\r\n    Nl = \"nl\",\r\n    Ph = \"ph\",\r\n    Ro = \"ro\",\r\n    Se = \"se\",\r\n    Sk = \"sk\",\r\n    Tm = \"tm\",\r\n    Ua = \"ua\",\r\n    Uz = \"uz\",\r\n    Za = \"za\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** CustomerInvoiceStatus enumeration */\r\nexport enum CustomerInvoiceStatus {\r\n    Undefined = \"undefined\",\r\n    Forecast = \"forecast\",\r\n    Preview = \"preview\",\r\n    WaitingPalkkaus = \"waitingPalkkaus\",\r\n    Unread = \"unread\",\r\n    Read = \"read\",\r\n    PaymentStarted = \"paymentStarted\",\r\n    Warning = \"warning\",\r\n    Paid = \"paid\",\r\n    Canceled = \"canceled\",\r\n    Error = \"error\",\r\n}\r\n\r\n/** CustomerWebApp enumeration */\r\nexport enum CustomerWebApp {\r\n    Palkkaus = \"palkkaus\",\r\n    CustomSso = \"customSso\",\r\n    CustomPalkkaus = \"customPalkkaus\",\r\n    NoCustomerUi = \"noCustomerUi\",\r\n}\r\n\r\n/** EarningsPaymentReportStatus enumeration */\r\nexport enum EarningsPaymentReportStatus {\r\n    New = \"new\",\r\n    Scheduled = \"scheduled\",\r\n    Succeeded = \"succeeded\",\r\n    Canceled = \"canceled\",\r\n    Error = \"error\",\r\n    Invalid = \"invalid\",\r\n    Sending = \"sending\",\r\n}\r\n\r\n/** EmploymentRelationSalaryPaymentMethod enumeration */\r\nexport enum EmploymentRelationSalaryPaymentMethod {\r\n    BankAccount = \"bankAccount\",\r\n    External = \"external\",\r\n}\r\n\r\n/** EmploymentRelationStatus enumeration */\r\nexport enum EmploymentRelationStatus {\r\n    Unknown = \"unknown\",\r\n    Primary = \"primary\",\r\n    SecondaryCurrent = \"secondaryCurrent\",\r\n    Archived = \"archived\",\r\n}\r\n\r\n/** EmploymentRelationTaxcard enumeration */\r\nexport enum EmploymentRelationTaxcard {\r\n    Undefined = \"undefined\",\r\n    Auto = \"auto\",\r\n    Manual = \"manual\",\r\n    NoTaxCard = \"noTaxCard\",\r\n    TaxAtSource = \"taxAtSource\",\r\n}\r\n\r\n/** EmploymentRelationType enumeration */\r\nexport enum EmploymentRelationType {\r\n    Undefined = \"undefined\",\r\n    Salary = \"salary\",\r\n    HourlySalary = \"hourlySalary\",\r\n    MonthlySalary = \"monthlySalary\",\r\n    Compensation = \"compensation\",\r\n    BoardMember = \"boardMember\",\r\n    Entrepreneur = \"entrepreneur\",\r\n    Farmer = \"farmer\",\r\n    EmployedByStateEmploymentFund = \"employedByStateEmploymentFund\",\r\n    Athlete = \"athlete\",\r\n    PerformingArtist = \"performingArtist\",\r\n    ForeignWorker = \"foreignWorker\",\r\n    WorkingAbroad = \"workingAbroad\",\r\n}\r\n\r\n/** ExportMethod enumeration */\r\nexport enum ExportMethod {\r\n    Undefined = \"undefined\",\r\n    FileExcel = \"fileExcel\",\r\n    FileCsv = \"fileCsv\",\r\n    FilePdf = \"filePdf\",\r\n    FileText = \"fileText\",\r\n    CopyExcel = \"copyExcel\",\r\n    CopyCsv = \"copyCsv\",\r\n    CopyText = \"copyText\",\r\n    PaymentChannel = \"paymentChannel\",\r\n    Api = \"api\",\r\n}\r\n\r\n/** DatasetStatus enumeration */\r\nexport enum DatasetStatus {\r\n    Draft = \"draft\",\r\n    Instance = \"instance\",\r\n    Template = \"template\",\r\n}\r\n\r\n/** DatasetType enumeration */\r\nexport enum DatasetType {\r\n    Undefined = \"undefined\",\r\n    ReportAdHoc = \"reportAdHoc\",\r\n    Import = \"import\",\r\n    Export = \"export\",\r\n    Batch = \"batch\",\r\n}\r\n\r\n/** DateOfBirthAccuracy enumeration */\r\nexport enum DateOfBirthAccuracy {\r\n    Assumption = \"assumption\",\r\n    AgeBased = \"ageBased\",\r\n    AgeGroupBased = \"ageGroupBased\",\r\n    MonthCorrect = \"monthCorrect\",\r\n    Exact = \"exact\",\r\n    Verified = \"verified\",\r\n}\r\n\r\n/** FrameworkAgreement enumeration */\r\nexport enum FrameworkAgreement {\r\n    NotDefined = \"notDefined\",\r\n    Construction = \"construction\",\r\n    Mll = \"mll\",\r\n    ChildCare = \"childCare\",\r\n    Cleaning = \"cleaning\",\r\n    SantaClaus = \"santaClaus\",\r\n    Entrepreneur = \"entrepreneur\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** Gender enumeration */\r\nexport enum Gender {\r\n    Unknown = \"unknown\",\r\n    Male = \"male\",\r\n    Female = \"female\",\r\n}\r\n\r\n/** HelttiIndustry enumeration */\r\nexport enum HelttiIndustry {\r\n    NotDefined = \"notDefined\",\r\n    I = \"i\",\r\n    J = \"j\",\r\n    K = \"k\",\r\n    M = \"m\",\r\n    O = \"o\",\r\n    N = \"n\",\r\n    P = \"p\",\r\n    Q = \"q\",\r\n    R = \"r\",\r\n    S = \"s\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** HelttiProductPackage enumeration */\r\nexport enum HelttiProductPackage {\r\n    NotDefined = \"notDefined\",\r\n    Small = \"small\",\r\n    Medium = \"medium\",\r\n    Large = \"large\",\r\n}\r\n\r\n/** IncomeEarnerType enumeration */\r\nexport enum IncomeEarnerType {\r\n    EmployedByStateEmploymentFund = \"employedByStateEmploymentFund\",\r\n    JointOwnerWithPayer = \"jointOwnerWithPayer\",\r\n    PartialOwner = \"partialOwner\",\r\n    KeyEmployee = \"keyEmployee\",\r\n    LeasedEmployeeLivingAbroad = \"leasedEmployeeLivingAbroad\",\r\n    PersonWorkingInFrontierDistrict = \"personWorkingInFrontierDistrict\",\r\n    PersonWorkingAbroad = \"personWorkingAbroad\",\r\n    Athlete = \"athlete\",\r\n    PerformingArtist = \"performingArtist\",\r\n    RestrictedPeriodInFinland = \"restrictedPeriodInFinland\",\r\n    NetOfTaxContract = \"netOfTaxContract\",\r\n    Organization = \"organization\",\r\n    PersonWorkingOnAlandFerry = \"personWorkingOnAlandFerry\",\r\n    EntrepreneurOrFarmerNoPensionRequired = \"entrepreneurOrFarmerNoPensionRequired\",\r\n    DimplomaticMission = \"dimplomaticMission\",\r\n    Eppo = \"eppo\",\r\n    LightEntrepreneur = \"lightEntrepreneur\",\r\n}\r\n\r\n/** IncomeLogDiff enumeration */\r\nexport enum IncomeLogDiff {\r\n    Default = \"default\",\r\n    New = \"new\",\r\n    Changed = \"changed\",\r\n    Removed = \"removed\",\r\n}\r\n\r\n/** InternationalIdentifier enumeration */\r\nexport enum InternationalIdentifier {\r\n    Undefined = \"undefined\",\r\n    TaxIdentificationNumber = \"taxIdentificationNumber\",\r\n    ForeignPersonalIdentificationNumber = \"foreignPersonalIdentificationNumber\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** InvoiceStatus enumeration */\r\nexport enum InvoiceStatus {\r\n    Undefined = \"undefined\",\r\n    Forecast = \"forecast\",\r\n    Preview = \"preview\",\r\n    WaitingPalkkaus = \"waitingPalkkaus\",\r\n    Unread = \"unread\",\r\n    Read = \"read\",\r\n    WaitingConfirmation = \"waitingConfirmation\",\r\n    PaymentStarted = \"paymentStarted\",\r\n    Warning = \"warning\",\r\n    Paid = \"paid\",\r\n    Canceled = \"canceled\",\r\n    Error = \"error\",\r\n}\r\n\r\n/** InvoiceType enumeration */\r\nexport enum InvoiceType {\r\n    Undefined = \"undefined\",\r\n    Net = \"net\",\r\n    Tax = \"tax\",\r\n    TaxWithholding = \"taxWithholding\",\r\n    TaxSocialSecurity = \"taxSocialSecurity\",\r\n    TaxAtSource = \"taxAtSource\",\r\n    Unemployment = \"unemployment\",\r\n    Pension = \"pension\",\r\n    Union = \"union\",\r\n    Foreclosure = \"foreclosure\",\r\n    Payroll = \"payroll\",\r\n    Service = \"service\",\r\n    Fee = \"fee\",\r\n    Gross = \"gross\",\r\n    Verification = \"verification\",\r\n}\r\n\r\n/** Holiday enumeration */\r\nexport enum Holiday {\r\n    NewYearsDay = \"newYearsDay\",\r\n    Epiphany = \"epiphany\",\r\n    GoodFriday = \"goodFriday\",\r\n    EasterSunday = \"easterSunday\",\r\n    EasterSaturday = \"easterSaturday\",\r\n    EasterMonday = \"easterMonday\",\r\n    MayDay = \"mayDay\",\r\n    AscensionDay = \"ascensionDay\",\r\n    Pentecost = \"pentecost\",\r\n    MidsummerEve = \"midsummerEve\",\r\n    MidsummerDay = \"midsummerDay\",\r\n    AllSaintsDay = \"allSaintsDay\",\r\n    IndependenceDay = \"independenceDay\",\r\n    ChristmasEve = \"christmasEve\",\r\n    ChristmasDay = \"christmasDay\",\r\n    StStephensDay = \"stStephensDay\",\r\n}\r\n\r\n/** HolidayAccrualSource enumeration */\r\nexport enum HolidayAccrualSource {\r\n    Initial = \"initial\",\r\n    Manual = \"manual\",\r\n    CalcDraft = \"calcDraft\",\r\n    CalcPaid = \"calcPaid\",\r\n}\r\n\r\n/** HolidayBonusPaymentMethod enumeration */\r\nexport enum HolidayBonusPaymentMethod {\r\n    None = \"none\",\r\n    PayForHolidaySalary = \"payForHolidaySalary\",\r\n    PaySummerBonus = \"paySummerBonus\",\r\n    PaySelectedDays = \"paySelectedDays\",\r\n    Pay24Days = \"pay24Days\",\r\n    PayAllBonus = \"payAllBonus\",\r\n}\r\n\r\n/** HolidayCode enumeration */\r\nexport enum HolidayCode {\r\n    Undefined = \"undefined\",\r\n    Permanent14Days = \"permanent14Days\",\r\n    Permanent35Hours = \"permanent35Hours\",\r\n    TemporaryTimeOff = \"temporaryTimeOff\",\r\n    HolidayCompensation = \"holidayCompensation\",\r\n    HolidayCompensationIncluded = \"holidayCompensationIncluded\",\r\n    NoHolidays = \"noHolidays\",\r\n    Other = \"other\",\r\n    Script = \"script\",\r\n}\r\n\r\n/** HolidayGroup enumeration */\r\nexport enum HolidayGroup {\r\n    Official = \"official\",\r\n    NonBanking = \"nonBanking\",\r\n    Holiday = \"holiday\",\r\n}\r\n\r\n/** HolidayPayCalculation enumeration */\r\nexport enum HolidayPayCalculation {\r\n    Undefined = \"undefined\",\r\n    NormalMonthlyPay = \"normalMonthlyPay\",\r\n    AverageDailyPay = \"averageDailyPay\",\r\n    PercentageBasedPay = \"percentageBasedPay\",\r\n    AverageHourlyPay = \"averageHourlyPay\",\r\n    HolidayCompensation = \"holidayCompensation\",\r\n    OtherPay = \"otherPay\",\r\n    ScriptPay = \"scriptPay\",\r\n}\r\n\r\n/** HouseholdYearProcessingStatus enumeration */\r\nexport enum HouseholdYearProcessingStatus {\r\n    Open = \"open\",\r\n    Closed = \"closed\",\r\n    Printed = \"printed\",\r\n}\r\n\r\n/** HouseholdYearStatus enumeration */\r\nexport enum HouseholdYearStatus {\r\n    Undefined = \"undefined\",\r\n    Ok = \"ok\",\r\n    OkWithModifications = \"okWithModifications\",\r\n    WillHandleMyself = \"willHandleMyself\",\r\n}\r\n\r\n/** InsuranceCompany enumeration */\r\nexport enum InsuranceCompany {\r\n    None = \"none\",\r\n    LähiTapiola = \"lähiTapiola\",\r\n    Pohjola = \"pohjola\",\r\n    If = \"if\",\r\n    Fennia = \"fennia\",\r\n    AVakuutus = \"aVakuutus\",\r\n    Aktia = \"aktia\",\r\n    Pohjantähti = \"pohjantähti\",\r\n    Tryg = \"tryg\",\r\n    Ålands = \"ålands\",\r\n    Turva = \"turva\",\r\n    Redarnas = \"redarnas\",\r\n    Folksam = \"folksam\",\r\n    Alandia = \"alandia\",\r\n    Protector = \"protector\",\r\n    Other = \"other\",\r\n    Pending = \"pending\",\r\n}\r\n\r\n/** InternationalSocialSecurityException enumeration */\r\nexport enum InternationalSocialSecurityException {\r\n    NotSubjectToEarningsRelatedPensionInsurance = \"notSubjectToEarningsRelatedPensionInsurance\",\r\n    NotSubjectToAccidentAndOccupationalDiseaseInsurance = \"notSubjectToAccidentAndOccupationalDiseaseInsurance\",\r\n    NotSubjectToUnemploymentInsurance = \"notSubjectToUnemploymentInsurance\",\r\n    NotSubjectToHealthInsurance = \"notSubjectToHealthInsurance\",\r\n    VoluntaryEarningsRelatedPensionInsurance = \"voluntaryEarningsRelatedPensionInsurance\",\r\n    NoObligationToHealthInsuranceDailyAllowanceContribution = \"noObligationToHealthInsuranceDailyAllowanceContribution\",\r\n}\r\n\r\n/** InternationalSocialSecurityType enumeration */\r\nexport enum InternationalSocialSecurityType {\r\n    Default = \"default\",\r\n    Foreign = \"foreign\",\r\n    Mixed = \"mixed\",\r\n}\r\n\r\n/** InvoiceDateKind enumeration */\r\nexport enum InvoiceDateKind {\r\n    InvoiceDate = \"invoiceDate\",\r\n    DueDate = \"dueDate\",\r\n    LogicalDate = \"logicalDate\",\r\n}\r\n\r\n/** InvoicePaymentType enumeration */\r\nexport enum InvoicePaymentType {\r\n    Default = \"default\",\r\n    Salary = \"salary\",\r\n    SalaryInPast = \"salaryInPast\",\r\n}\r\n\r\n/** IrFlags enumeration */\r\nexport enum IrFlags {\r\n    NoMoney = \"noMoney\",\r\n    OneOff = \"oneOff\",\r\n    UnjustEnrichment = \"unjustEnrichment\",\r\n}\r\n\r\n/** IrInsuranceExceptions enumeration */\r\nexport enum IrInsuranceExceptions {\r\n    IncludeAll = \"includeAll\",\r\n    IncludePension = \"includePension\",\r\n    IncludeHealthInsurance = \"includeHealthInsurance\",\r\n    IncludeUnemployment = \"includeUnemployment\",\r\n    IncludeAccidentInsurance = \"includeAccidentInsurance\",\r\n    ExcludeAll = \"excludeAll\",\r\n    ExcludePension = \"excludePension\",\r\n    ExcludeHealthInsurance = \"excludeHealthInsurance\",\r\n    ExcludeUnemployment = \"excludeUnemployment\",\r\n    ExcludeAccidentInsurance = \"excludeAccidentInsurance\",\r\n}\r\n\r\n/** IrRowSourceType enumeration */\r\nexport enum IrRowSourceType {\r\n    Manual = \"manual\",\r\n    Usecase = \"usecase\",\r\n    UsecaseV02 = \"usecaseV02\",\r\n}\r\n\r\n/** Language enumeration */\r\nexport enum Language {\r\n    Default = \"default\",\r\n    Fi = \"fi\",\r\n    Sv = \"sv\",\r\n    En = \"en\",\r\n}\r\n\r\n/** LegalEntityType enumeration */\r\nexport enum LegalEntityType {\r\n    Undefined = \"undefined\",\r\n    Person = \"person\",\r\n    Company = \"company\",\r\n    PersonCreatedByEmployer = \"personCreatedByEmployer\",\r\n    Partner = \"partner\",\r\n}\r\n\r\n/** LocalTapiolaInsuranceOrderAuthorizationType enumeration */\r\nexport enum LocalTapiolaInsuranceOrderAuthorizationType {\r\n    Procuration = \"procuration\",\r\n    PowerOfAttorney = \"powerOfAttorney\",\r\n    ApparentAuthority = \"apparentAuthority\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** LocalTapiolaInsuranceOrderStatus enumeration */\r\nexport enum LocalTapiolaInsuranceOrderStatus {\r\n    Draft = \"draft\",\r\n    WaitingApproval = \"waitingApproval\",\r\n    Checked = \"checked\",\r\n    Sent = \"sent\",\r\n    Handled = \"handled\",\r\n    Canceled = \"canceled\",\r\n}\r\n\r\n/** LocalTapiolaInsuranceOrderType enumeration */\r\nexport enum LocalTapiolaInsuranceOrderType {\r\n    NewWorkerInsurance = \"newWorkerInsurance\",\r\n    MoveWorkerInsurance = \"moveWorkerInsurance\",\r\n    NewEntrepreneurInsurance = \"newEntrepreneurInsurance\",\r\n    MoveEntrepreneurInsurance = \"moveEntrepreneurInsurance\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** RowMergeOption enumeration */\r\nexport enum RowMergeOption {\r\n    Undefined = \"undefined\",\r\n    RemoveAllRows = \"removeAllRows\",\r\n    RemoveImportedRows = \"removeImportedRows\",\r\n}\r\n\r\n/** MessageFrom enumeration */\r\nexport enum MessageFrom {\r\n    Undefined = \"undefined\",\r\n    Owner = \"owner\",\r\n    OtherParty = \"otherParty\",\r\n    System = \"system\",\r\n}\r\n\r\n/** MessageThreadStatus enumeration */\r\nexport enum MessageThreadStatus {\r\n    Draft = \"draft\",\r\n    Active = \"active\",\r\n    Approved = \"approved\",\r\n    Rejected = \"rejected\",\r\n    Archived = \"archived\",\r\n    Template = \"template\",\r\n}\r\n\r\n/** MessageType enumeration */\r\nexport enum MessageType {\r\n    Email = \"email\",\r\n    Sms = \"sms\",\r\n}\r\n\r\n/** OnboardingStatus enumeration */\r\nexport enum OnboardingStatus {\r\n    Created = \"created\",\r\n    Open = \"open\",\r\n    Error = \"error\",\r\n    Cancel = \"cancel\",\r\n    Done = \"done\",\r\n    Expired = \"expired\",\r\n}\r\n\r\n/** PayerSummaryReportStatus enumeration */\r\nexport enum PayerSummaryReportStatus {\r\n    New = \"new\",\r\n    Scheduled = \"scheduled\",\r\n    Succeeded = \"succeeded\",\r\n    Canceled = \"canceled\",\r\n    Error = \"error\",\r\n    Invalid = \"invalid\",\r\n    Sending = \"sending\",\r\n}\r\n\r\n/** PaymentChannel enumeration */\r\nexport enum PaymentChannel {\r\n    Undefined = \"undefined\",\r\n    Test = \"test\",\r\n    ZeroPayment = \"zeroPayment\",\r\n    External = \"external\",\r\n    PalkkausManual = \"palkkausManual\",\r\n    PalkkausWS = \"palkkausWS\",\r\n    PalkkausPersonal = \"palkkausPersonal\",\r\n    PalkkausInvoices = \"palkkausInvoices\",\r\n    PalkkausPSD = \"palkkausPSD\",\r\n    PalkkausCfaPaytrail = \"palkkausCfaPaytrail\",\r\n    PalkkausCfaReference = \"palkkausCfaReference\",\r\n    PalkkausCfaFinvoice = \"palkkausCfaFinvoice\",\r\n    PalkkausEcfaPaytrail = \"palkkausEcfaPaytrail\",\r\n    PalkkausEcfaReference = \"palkkausEcfaReference\",\r\n    PalkkausEcfaFinvoice = \"palkkausEcfaFinvoice\",\r\n    PalkkausCfaTest = \"palkkausCfaTest\",\r\n    AccountorGo = \"accountorGo\",\r\n    TalenomOnline = \"talenomOnline\",\r\n    TalenomCfa = \"talenomCfa\",\r\n    HolviCfa = \"holviCfa\",\r\n    FinagoSolo = \"finagoSolo\",\r\n    Procountor = \"procountor\",\r\n    Kevytyrittaja = \"kevytyrittaja\",\r\n    VismaNetvisor = \"vismaNetvisor\",\r\n    Askelma = \"askelma\",\r\n    Briox = \"briox\",\r\n    Lemonaid = \"lemonaid\",\r\n    Laskupiste = \"laskupiste\",\r\n    Holvi = \"holvi\",\r\n    Kompassi = \"kompassi\",\r\n    Domus = \"domus\",\r\n    PasseliMerit = \"passeliMerit\",\r\n    Odoo = \"odoo\",\r\n    Ecom = \"ecom\",\r\n    Kitsas = \"kitsas\",\r\n    TalenomManual = \"talenomManual\",\r\n    Hausvise = \"hausvise\",\r\n}\r\n\r\n/** PaymentMethod enumeration */\r\nexport enum PaymentMethod {\r\n    Undefined = \"undefined\",\r\n    Sepa = \"sepa\",\r\n    Siirto = \"siirto\",\r\n    Test = \"test\",\r\n}\r\n\r\n/** PaymentStatus enumeration */\r\nexport enum PaymentStatus {\r\n    New = \"new\",\r\n    SentToBank = \"sentToBank\",\r\n    BankTechApproval = \"bankTechApproval\",\r\n    BankDelivered = \"bankDelivered\",\r\n    BankPartialError = \"bankPartialError\",\r\n    BankError = \"bankError\",\r\n    Paid = \"paid\",\r\n    Unknown = \"unknown\",\r\n    Cancelled = \"cancelled\",\r\n}\r\n\r\n/** PayrollStatus enumeration */\r\nexport enum PayrollStatus {\r\n    Draft = \"draft\",\r\n    PaymentStarted = \"paymentStarted\",\r\n    PaymentSucceeded = \"paymentSucceeded\",\r\n    PaymentCanceled = \"paymentCanceled\",\r\n    PaymentError = \"paymentError\",\r\n    PaymentAllowed = \"paymentAllowed\",\r\n    WaitingApproval = \"waitingApproval\",\r\n    WaitingPartnerApproval = \"waitingPartnerApproval\",\r\n    Handled = \"handled\",\r\n    Template = \"template\",\r\n}\r\n\r\n/** PayStatsPeriodLength enumeration */\r\nexport enum PayStatsPeriodLength {\r\n    Undefined = \"undefined\",\r\n    Year = \"year\",\r\n    HalfYear = \"halfYear\",\r\n    Quarter = \"quarter\",\r\n    Month = \"month\",\r\n    LastPayPeriod = \"lastPayPeriod\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** PayStatsKind enumeration */\r\nexport enum PayStatsKind {\r\n    Undefined = \"undefined\",\r\n    AverageHourlyPay = \"averageHourlyPay\",\r\n    Script = \"script\",\r\n}\r\n\r\n/** PensionCalculation enumeration */\r\nexport enum PensionCalculation {\r\n    Undefined = \"undefined\",\r\n    Employee = \"employee\",\r\n    Entrepreneur = \"entrepreneur\",\r\n    Farmer = \"farmer\",\r\n    PartialOwner = \"partialOwner\",\r\n    Athlete = \"athlete\",\r\n    Compensation = \"compensation\",\r\n    BoardRemuneration = \"boardRemuneration\",\r\n    SmallEntrepreneur = \"smallEntrepreneur\",\r\n    SmallFarmer = \"smallFarmer\",\r\n    PublicSector = \"publicSector\",\r\n}\r\n\r\n/** PensionCompany enumeration */\r\nexport enum PensionCompany {\r\n    None = \"none\",\r\n    Etera = \"etera\",\r\n    Ilmarinen = \"ilmarinen\",\r\n    Elo = \"elo\",\r\n    PensionsAlandia = \"pensionsAlandia\",\r\n    Varma = \"varma\",\r\n    Veritas = \"veritas\",\r\n    Apteekkien = \"apteekkien\",\r\n    Verso = \"verso\",\r\n    KevaMunicipal = \"kevaMunicipal\",\r\n    KevaAland = \"kevaAland\",\r\n    KevaChurch = \"kevaChurch\",\r\n    KevaKela = \"kevaKela\",\r\n    KevaState = \"kevaState\",\r\n    Valio = \"valio\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** PensionRule enumeration */\r\nexport enum PensionRule {\r\n    Default = \"default\",\r\n    MonthlyLowerLimit = \"monthlyLowerLimit\",\r\n}\r\n\r\n/** PeriodDateKind enumeration */\r\nexport enum PeriodDateKind {\r\n    PaidAtDate = \"paidAtDate\",\r\n    SalaryDate = \"salaryDate\",\r\n    WorkDate = \"workDate\",\r\n    WorkDateStart = \"workDateStart\",\r\n    WorkDateEnd = \"workDateEnd\",\r\n}\r\n\r\n/** PeriodType enumeration */\r\nexport enum PeriodType {\r\n    Month = \"month\",\r\n    Quarter = \"quarter\",\r\n    Year = \"year\",\r\n    Custom = \"custom\",\r\n}\r\n\r\n/** PricingModel enumeration */\r\nexport enum PricingModel {\r\n    PalkkausFee = \"palkkausFee\",\r\n    NoFee = \"noFee\",\r\n    FixedFee = \"fixedFee\",\r\n}\r\n\r\n/** ProductPackage enumeration */\r\nexport enum ProductPackage {\r\n    Default = \"default\",\r\n    PartnerBasic = \"partnerBasic\",\r\n    PartnerPro = \"partnerPro\",\r\n}\r\n\r\n/** ProductListFilter enumeration */\r\nexport enum ProductListFilter {\r\n    Available = \"available\",\r\n    All = \"all\",\r\n}\r\n\r\n/** ReportCategory enumeration */\r\nexport enum ReportCategory {\r\n    All = \"all\",\r\n    Monthly = \"monthly\",\r\n    Yearly = \"yearly\",\r\n}\r\n\r\n/** ReportType enumeration */\r\nexport enum ReportType {\r\n    Undefined = \"undefined\",\r\n    Example = \"example\",\r\n    MonthlyDetails = \"monthlyDetails\",\r\n    TaxMonthly4001 = \"taxMonthly4001\",\r\n    PayerSummaryReport = \"payerSummaryReport\",\r\n    MonthlyPension = \"monthlyPension\",\r\n    MonthlyLiikekirjuri = \"monthlyLiikekirjuri\",\r\n    MonthlyLiikekirjuriLegacy = \"monthlyLiikekirjuriLegacy\",\r\n    MonthlyRapko = \"monthlyRapko\",\r\n    MonthlyAccounting = \"monthlyAccounting\",\r\n    MonthlyAccountingExcel = \"monthlyAccountingExcel\",\r\n    YearlyDetails = \"yearlyDetails\",\r\n    YearEndReport = \"yearEndReport\",\r\n    YearlyWorkerSummary = \"yearlyWorkerSummary\",\r\n    TaxYearly7801 = \"taxYearly7801\",\r\n    Unemployment = \"unemployment\",\r\n    Insurance = \"insurance\",\r\n    HouseholdDeduction = \"householdDeduction\",\r\n    TaxHouseholdDeduction14B = \"taxHouseholdDeduction14B\",\r\n    TaxHouseholdDeduction14BSpouseA = \"taxHouseholdDeduction14BSpouseA\",\r\n    TaxHouseholdDeduction14BSpouseB = \"taxHouseholdDeduction14BSpouseB\",\r\n    SalarySlip = \"salarySlip\",\r\n    SalarySlipPaid = \"salarySlipPaid\",\r\n    SalarySlipCopy = \"salarySlipCopy\",\r\n    ESalarySpecification = \"eSalarySpecification\",\r\n    EmployerReport = \"employerReport\",\r\n    PaymentReport = \"paymentReport\",\r\n    PaymentSummaryReport = \"paymentSummaryReport\",\r\n    TotalsReport = \"totalsReport\",\r\n    EarningsPaymentReport = \"earningsPaymentReport\",\r\n    AccountingReport = \"accountingReport\",\r\n    Invoice = \"invoice\",\r\n    InvoiceList = \"invoiceList\",\r\n    EmploymentContract = \"employmentContract\",\r\n    Authorization = \"authorization\",\r\n}\r\n\r\n/** Role enumeration */\r\nexport enum Role {\r\n    Undefined = \"undefined\",\r\n    Accountant = \"accountant\",\r\n    TrustedPartner = \"trustedPartner\",\r\n    AccountantCandidate = \"accountantCandidate\",\r\n    PricingPartner = \"pricingPartner\",\r\n    SepaPartner = \"sepaPartner\",\r\n    SalaxyPay = \"salaxyPay\",\r\n}\r\n\r\n/** SalaryDateKind enumeration */\r\nexport enum SalaryDateKind {\r\n    Default = \"default\",\r\n    InPast = \"inPast\",\r\n}\r\n\r\n/** SalaryKind enumeration */\r\nexport enum SalaryKind {\r\n    Undefined = \"undefined\",\r\n    FixedSalary = \"fixedSalary\",\r\n    HourlySalary = \"hourlySalary\",\r\n    MonthlySalary = \"monthlySalary\",\r\n    Compensation = \"compensation\",\r\n    TotalWorkerPayment = \"totalWorkerPayment\",\r\n    TotalEmployerPayment = \"totalEmployerPayment\",\r\n}\r\n\r\n/** SalaryType enumeration */\r\nexport enum SalaryType {\r\n    Tyel = \"tyel\",\r\n    Yel = \"yel\",\r\n    Compensation = \"compensation\",\r\n}\r\n\r\n/** LegacyServiceModel enumeration */\r\nexport enum LegacyServiceModel {\r\n    Shared = \"shared\",\r\n    PartnerOnly = \"partnerOnly\",\r\n}\r\n\r\n/** SettingsStatus enumeration */\r\nexport enum SettingsStatus {\r\n    Undefined = \"undefined\",\r\n    Checked = \"checked\",\r\n    Pending = \"pending\",\r\n}\r\n\r\n/** SharingUriType enumeration */\r\nexport enum SharingUriType {\r\n    Undefined = \"undefined\",\r\n    Url = \"url\",\r\n    Employer = \"employer\",\r\n}\r\n\r\n/** TaxcardApiIncomeType enumeration */\r\nexport enum TaxcardApiIncomeType {\r\n    Undefined = \"undefined\",\r\n    Salary = \"salary\",\r\n    DividendsForWorkAsSalary = \"dividendsForWorkAsSalary\",\r\n    PersonnelFundIncome = \"personnelFundIncome\",\r\n    SalaryOneOff = \"salaryOneOff\",\r\n    CompensationForUseEarnedIncome = \"compensationForUseEarnedIncome\",\r\n    CompensationForUseCapitalIncome = \"compensationForUseCapitalIncome\",\r\n    CompensationVatResponsible = \"compensationVatResponsible\",\r\n    Compensation = \"compensation\",\r\n    DividendsForWorkAsCompensation = \"dividendsForWorkAsCompensation\",\r\n    AthletePay = \"athletePay\",\r\n    OtherTaxableIncome = \"otherTaxableIncome\",\r\n    OtherTaxableIncomeOneOff = \"otherTaxableIncomeOneOff\",\r\n    EmployeeStockOption = \"employeeStockOption\",\r\n}\r\n\r\n/** TaxcardApprovalMethod enumeration */\r\nexport enum TaxcardApprovalMethod {\r\n    AssureWaiting = \"assureWaiting\",\r\n    Approve = \"approve\",\r\n    Reject = \"reject\",\r\n}\r\n\r\n/** TaxcardCalcDiffCheck enumeration */\r\nexport enum TaxcardCalcDiffCheck {\r\n    GetDiff = \"getDiff\",\r\n    NoCheck = \"noCheck\",\r\n    CommitDiff = \"commitDiff\",\r\n}\r\n\r\n/** TaxCardIncomeType enumeration */\r\nexport enum TaxCardIncomeType {\r\n    Unknown = \"unknown\",\r\n    SalaxyCalculation = \"salaxyCalculation\",\r\n    PreviousEmployerSalaries = \"previousEmployerSalaries\",\r\n    ExternalSalaries = \"externalSalaries\",\r\n    SharedCardExtSum = \"sharedCardExtSum\",\r\n    Diff = \"diff\",\r\n}\r\n\r\n/** TaxcardState enumeration */\r\nexport enum TaxcardState {\r\n    New = \"new\",\r\n    Approved = \"approved\",\r\n    EmployerAdded = \"employerAdded\",\r\n    VerifiedVero = \"verifiedVero\",\r\n    SharedWaiting = \"sharedWaiting\",\r\n    SharedApproved = \"sharedApproved\",\r\n    SharedRejected = \"sharedRejected\",\r\n    SharedRejectedWithoutOpen = \"sharedRejectedWithoutOpen\",\r\n    Shared = \"shared\",\r\n}\r\n\r\n/** TaxcardKind enumeration */\r\nexport enum TaxcardKind {\r\n    Undefined = \"undefined\",\r\n    NoTaxCard = \"noTaxCard\",\r\n    Auto = \"auto\",\r\n    DefaultYearly = \"defaultYearly\",\r\n    Replacement = \"replacement\",\r\n    NoWithholdingHousehold = \"noWithholdingHousehold\",\r\n    Others = \"others\",\r\n    Historical = \"historical\",\r\n}\r\n\r\n/** TaxcardValidity enumeration */\r\nexport enum TaxcardValidity {\r\n    Undefined = \"undefined\",\r\n    Valid = \"valid\",\r\n    ValidJanuary = \"validJanuary\",\r\n    Future = \"future\",\r\n    Expired = \"expired\",\r\n}\r\n\r\n/** TaxAtSourceKind enumeration */\r\nexport enum TaxAtSourceKind {\r\n    Undefined = \"undefined\",\r\n    NoDeduction = \"noDeduction\",\r\n    MonthlyDeduction = \"monthlyDeduction\",\r\n    DailyDeduction = \"dailyDeduction\",\r\n    FixedValues = \"fixedValues\",\r\n}\r\n\r\n/** TaxDeductionWorkCategories enumeration */\r\nexport enum TaxDeductionWorkCategories {\r\n    None = \"none\",\r\n    Householdwork = \"householdwork\",\r\n    Carework = \"carework\",\r\n    HomeImprovement = \"homeImprovement\",\r\n    OwnPropety = \"ownPropety\",\r\n    RelativesProperty = \"relativesProperty\",\r\n    OilHeatingReplacementWork = \"oilHeatingReplacementWork\",\r\n}\r\n\r\n/** TaxReportHandling enumeration */\r\nexport enum TaxReportHandling {\r\n    Default = \"default\",\r\n    NoZeroSalaryReport = \"noZeroSalaryReport\",\r\n    NoMonthlyReport = \"noMonthlyReport\",\r\n    Always = \"always\",\r\n}\r\n\r\n/** TaxWithholdingKind enumeration */\r\nexport enum TaxWithholdingKind {\r\n    Undefined = \"undefined\",\r\n    Percentage = \"percentage\",\r\n    FixedValue = \"fixedValue\",\r\n}\r\n\r\n/** TesSubtype enumeration */\r\nexport enum TesSubtype {\r\n    NotSelected = \"notSelected\",\r\n    ConstructionCarpenter = \"constructionCarpenter\",\r\n    ConstructionFloor = \"constructionFloor\",\r\n    ConstructionOther = \"constructionOther\",\r\n    ConstructionFreeContract = \"constructionFreeContract\",\r\n}\r\n\r\n/** TestEnum enumeration */\r\nexport enum TestEnum {\r\n    ValueZero = \"valueZero\",\r\n    ValueOne = \"valueOne\",\r\n    ValueTwo = \"valueTwo\",\r\n    ValueThree = \"valueThree\",\r\n    ValueFour = \"valueFour\",\r\n    ValueFive = \"valueFive\",\r\n    ValueSix = \"valueSix\",\r\n    ValueSeven = \"valueSeven\",\r\n    ValueEight = \"valueEight\",\r\n    ValueNine = \"valueNine\",\r\n    ValueTen = \"valueTen\",\r\n}\r\n\r\n/** ThreadedMessageType enumeration */\r\nexport enum ThreadedMessageType {\r\n    Text = \"text\",\r\n    BlobFile = \"blobFile\",\r\n    Calculation = \"calculation\",\r\n    Payroll = \"payroll\",\r\n    WorkerAccount = \"workerAccount\",\r\n    Email = \"email\",\r\n    SalaxyEmail = \"salaxyEmail\",\r\n    Sms = \"sms\",\r\n    SalaxySms = \"salaxySms\",\r\n    Timer = \"timer\",\r\n    TimerEdited = \"timerEdited\",\r\n    HourlyReport = \"hourlyReport\",\r\n    TimeReport = \"timeReport\",\r\n    Absence = \"absence\",\r\n    AnnualLeave = \"annualLeave\",\r\n    CalcRow = \"calcRow\",\r\n    Travel = \"travel\",\r\n    Expense = \"expense\",\r\n}\r\n\r\n/** TimeRatePayKind enumeration */\r\nexport enum TimeRatePayKind {\r\n    Undefined = \"undefined\",\r\n    Default = \"default\",\r\n    PaidSickLeave = \"paidSickLeave\",\r\n    Training = \"training\",\r\n    Military = \"military\",\r\n    Travel = \"travel\",\r\n}\r\n\r\n/** UnemploymentPayrollLimitStatus enumeration */\r\nexport enum UnemploymentPayrollLimitStatus {\r\n    Default = \"default\",\r\n    Higher = \"higher\",\r\n}\r\n\r\n/** UnionPaymentType enumeration */\r\nexport enum UnionPaymentType {\r\n    NotSelected = \"notSelected\",\r\n    RaksaNormal = \"raksaNormal\",\r\n    RaksaUnemploymentOnly = \"raksaUnemploymentOnly\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** Unit enumeration */\r\nexport enum Unit {\r\n    Undefined = \"undefined\",\r\n    Hours = \"hours\",\r\n    Days = \"days\",\r\n    Weeks = \"weeks\",\r\n    Period = \"period\",\r\n    One = \"one\",\r\n    Count = \"count\",\r\n    Percent = \"percent\",\r\n    Kilometers = \"kilometers\",\r\n    Euro = \"euro\",\r\n}\r\n\r\n/** UsecaseActionType enumeration */\r\nexport enum UsecaseActionType {\r\n    ClientScript = \"clientScript\",\r\n    ClientScriptAsync = \"clientScriptAsync\",\r\n    ServerScript = \"serverScript\",\r\n    ServerScriptAsync = \"serverScriptAsync\",\r\n    WebServiceCall = \"webServiceCall\",\r\n    PowerAutomateFlow = \"powerAutomateFlow\",\r\n}\r\n\r\n/** UsecaseStatus enumeration */\r\nexport enum UsecaseStatus {\r\n    Undefined = \"undefined\",\r\n    Active = \"active\",\r\n    Default = \"default\",\r\n    Inactive = \"inactive\",\r\n}\r\n\r\n/** VarmaPensionOrderAction enumeration */\r\nexport enum VarmaPensionOrderAction {\r\n    Undefined = \"undefined\",\r\n    NewYel = \"newYel\",\r\n    NewTyel = \"newTyel\",\r\n    Move = \"move\",\r\n}\r\n\r\n/** VarmaPensionOrderYelPayer enumeration */\r\nexport enum VarmaPensionOrderYelPayer {\r\n    Undefined = \"undefined\",\r\n    Entrepreneur = \"entrepreneur\",\r\n    Company = \"company\",\r\n}\r\n\r\n/** VatRate enumeration */\r\nexport enum VatRate {\r\n    Undefined = \"undefined\",\r\n    None = \"none\",\r\n    Vat0000 = \"vat0000\",\r\n    Vat1000 = \"vat1000\",\r\n    Vat1350 = \"vat1350\",\r\n    Vat1400 = \"vat1400\",\r\n    Vat2400 = \"vat2400\",\r\n    Vat2550 = \"vat2550\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** WageBasis enumeration */\r\nexport enum WageBasis {\r\n    Undefined = \"undefined\",\r\n    Monthly = \"monthly\",\r\n    Hourly = \"hourly\",\r\n    PerformanceBased = \"performanceBased\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** WebSiteUserRole enumeration */\r\nexport enum WebSiteUserRole {\r\n    None = \"none\",\r\n    Household = \"household\",\r\n    Worker = \"worker\",\r\n    Company = \"company\",\r\n}\r\n\r\n/** WorkerSalaryNotification enumeration */\r\nexport enum WorkerSalaryNotification {\r\n    Always = \"always\",\r\n    Silent = \"silent\",\r\n}\r\n\r\n/** WorkerSalarySlipDeliveryMethod enumeration */\r\nexport enum WorkerSalarySlipDeliveryMethod {\r\n    Default = \"default\",\r\n    Payslip = \"payslip\",\r\n    Omapalkka = \"omapalkka\",\r\n}\r\n\r\n/** WorkflowEventFeatures enumeration */\r\nexport enum WorkflowEventFeatures {\r\n    None = \"none\",\r\n    IsActive = \"isActive\",\r\n    IsEditable = \"isEditable\",\r\n    IsRemovable = \"isRemovable\",\r\n    IsOnHold = \"isOnHold\",\r\n}\r\n\r\n/** YearEndAdminCheck enumeration */\r\nexport enum YearEndAdminCheck {\r\n    NotChecked = \"notChecked\",\r\n    Ok = \"ok\",\r\n    OkWithWarning = \"okWithWarning\",\r\n    Errors = \"errors\",\r\n}\r\n\r\n/** YearEndFeedbackCalculationType enumeration */\r\nexport enum YearEndFeedbackCalculationType {\r\n    Unknown = \"unknown\",\r\n    SalaxyPayment = \"salaxyPayment\",\r\n    External = \"external\",\r\n    Correction = \"correction\",\r\n}\r\n\r\n/** YearEndUserFeedback enumeration */\r\nexport enum YearEndUserFeedback {\r\n    NotChecked = \"notChecked\",\r\n    Ok = \"ok\",\r\n    OkWithModifications = \"okWithModifications\",\r\n    WillHandleMyself = \"willHandleMyself\",\r\n    NoYearlyReports = \"noYearlyReports\",\r\n}\r\n\r\n/** YtjCompanyType enumeration */\r\nexport enum YtjCompanyType {\r\n    NoCompanyType = \"noCompanyType\",\r\n    HousingCooperative = \"housingCooperative\",\r\n    Condominium = \"condominium\",\r\n    AsoAssociation = \"asoAssociation\",\r\n    OpenCompany = \"openCompany\",\r\n    Association = \"association\",\r\n    HypoAssociation = \"hypoAssociation\",\r\n    MutualRealEstateCompany = \"mutualRealEstateCompany\",\r\n    Ky = \"ky\",\r\n    Osuuskunta = \"osuuskunta\",\r\n    CooperativeBank = \"cooperativeBank\",\r\n    Oy = \"oy\",\r\n    PublicLimitedCompany = \"publicLimitedCompany\",\r\n    Foundation = \"foundation\",\r\n    Branch = \"branch\",\r\n    SavingsBank = \"savingsBank\",\r\n    FinancialAssociation = \"financialAssociation\",\r\n    StateEstablishment = \"stateEstablishment\",\r\n    InsuranceAssociation = \"insuranceAssociation\",\r\n    PrivateEntrepreneur = \"privateEntrepreneur\",\r\n    OtherAssociation = \"otherAssociation\",\r\n    SpecialPurposeAssociation = \"specialPurposeAssociation\",\r\n    ForestCareAssociation = \"forestCareAssociation\",\r\n    OtherFinancialAssociation = \"otherFinancialAssociation\",\r\n    ReligiousCommunity = \"religiousCommunity\",\r\n    JointInterestGroups = \"jointInterestGroups\",\r\n    TaxableGrouping = \"taxableGrouping\",\r\n    DeathEstate = \"deathEstate\",\r\n    BusinessPartnership = \"businessPartnership\",\r\n    MutualInsuranceAssociation = \"mutualInsuranceAssociation\",\r\n    ForeignOrganisation = \"foreignOrganisation\",\r\n    MunicipalEstablishment = \"municipalEstablishment\",\r\n    FederationOfMunicipalitiesEstablishment = \"federationOfMunicipalitiesEstablishment\",\r\n    AlandFederation = \"alandFederation\",\r\n    EuropeanCooperative = \"europeanCooperative\",\r\n    EuropeanCooperativeBank = \"europeanCooperativeBank\",\r\n    ReindeerHerdingCooperative = \"reindeerHerdingCooperative\",\r\n    Unknown = \"unknown\",\r\n}\r\n\r\n/** CarBenefitKind enumeration */\r\nexport enum CarBenefitKind {\r\n    Undefined = \"undefined\",\r\n    LimitedCarBenefit = \"limitedCarBenefit\",\r\n    FullCarBenefit = \"fullCarBenefit\",\r\n}\r\n\r\n/** BicycleBenefitKind enumeration */\r\nexport enum BicycleBenefitKind {\r\n    Undefined = \"undefined\",\r\n    NoDeduction = \"noDeduction\",\r\n    SingleDeduction = \"singleDeduction\",\r\n    PeriodicalDeduction = \"periodicalDeduction\",\r\n}\r\n\r\n/** UnionPaymentKind enumeration */\r\nexport enum UnionPaymentKind {\r\n    Undefined = \"undefined\",\r\n    Fixed = \"fixed\",\r\n    Percentage = \"percentage\",\r\n    PercentageAndLimits = \"percentageAndLimits\",\r\n    RaksaNormal = \"raksaNormal\",\r\n    RaksaUnemploymentOnly = \"raksaUnemploymentOnly\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** NonProfitOrgKind enumeration */\r\nexport enum NonProfitOrgKind {\r\n    Undefined = \"undefined\",\r\n    KilometreAllowance = \"kilometreAllowance\",\r\n    DailyAllowance = \"dailyAllowance\",\r\n    AccomodationAllowance = \"accomodationAllowance\",\r\n}\r\n\r\n/** SubsidisedCommuteKind enumeration */\r\nexport enum SubsidisedCommuteKind {\r\n    Undefined = \"undefined\",\r\n    NoDeduction = \"noDeduction\",\r\n    SingleDeduction = \"singleDeduction\",\r\n    PeriodicalDeduction = \"periodicalDeduction\",\r\n}\r\n\r\n/** MealBenefitKind enumeration */\r\nexport enum MealBenefitKind {\r\n    Undefined = \"undefined\",\r\n    CateringContract = \"cateringContract\",\r\n    MealTicket = \"mealTicket\",\r\n    TaxableAmount = \"taxableAmount\",\r\n    MealAllowance = \"mealAllowance\",\r\n    Institute = \"institute\",\r\n    Teacher = \"teacher\",\r\n    RestaurantWorker = \"restaurantWorker\",\r\n    CollectedReimbursement = \"collectedReimbursement\",\r\n}\r\n\r\n/** DailyAllowanceKind enumeration */\r\nexport enum DailyAllowanceKind {\r\n    Undefined = \"undefined\",\r\n    FullDailyAllowance = \"fullDailyAllowance\",\r\n    PartialDailyAllowance = \"partialDailyAllowance\",\r\n    InternationalDailyAllowance = \"internationalDailyAllowance\",\r\n    MealAllowance = \"mealAllowance\",\r\n}\r\n\r\n/** BoardKind enumeration */\r\nexport enum BoardKind {\r\n    Undefined = \"undefined\",\r\n}\r\n\r\n/** RemunerationKind enumeration */\r\nexport enum RemunerationKind {\r\n    Undefined = \"undefined\",\r\n    InitiativeFee = \"initiativeFee\",\r\n    BonusPay = \"bonusPay\",\r\n    Commission = \"commission\",\r\n    PerformanceBonus = \"performanceBonus\",\r\n    ShareIssueForEmployees = \"shareIssueForEmployees\",\r\n    ProfitSharingBonus = \"profitSharingBonus\",\r\n}\r\n\r\n/** OtherCompensationKind enumeration */\r\nexport enum OtherCompensationKind {\r\n    Undefined = \"undefined\",\r\n    MeetingFee = \"meetingFee\",\r\n    LectureFee = \"lectureFee\",\r\n    PositionOfTrustCompensation = \"positionOfTrustCompensation\",\r\n    AccruedTimeOffCompensation = \"accruedTimeOffCompensation\",\r\n    MembershipOfGoverningBodyCompensation = \"membershipOfGoverningBodyCompensation\",\r\n    MonetaryGiftForEmployees = \"monetaryGiftForEmployees\",\r\n    UseCompensationAsEarnedIncome = \"useCompensationAsEarnedIncome\",\r\n    UseCompensationAsCapitalIncome = \"useCompensationAsCapitalIncome\",\r\n    OtherTaxableIncomeAsEarnedIncome = \"otherTaxableIncomeAsEarnedIncome\",\r\n    StockOptionsAndGrants = \"stockOptionsAndGrants\",\r\n    EmployeeInventionCompensation = \"employeeInventionCompensation\",\r\n    CapitalIncomePayment = \"capitalIncomePayment\",\r\n    WorkEffortBasedDividendsAsWage = \"workEffortBasedDividendsAsWage\",\r\n    WorkEffortBasedDividendsAsNonWage = \"workEffortBasedDividendsAsNonWage\",\r\n    EmployeeStockOption = \"employeeStockOption\",\r\n    EmployeeStockOptionWithLowerPrice = \"employeeStockOptionWithLowerPrice\",\r\n    CopyrightRoyaltiesEarnedIncome = \"copyrightRoyaltiesEarnedIncome\",\r\n    StockGrantPaidInMoney = \"stockGrantPaidInMoney\",\r\n    EmployeeStockOptionPaidInMoney = \"employeeStockOptionPaidInMoney\",\r\n}\r\n\r\n/** PaidSickLeaveKind enumeration */\r\nexport enum PaidSickLeaveKind {\r\n    Undefined = \"undefined\",\r\n    PaidSickLeaveSalary = \"paidSickLeaveSalary\",\r\n    PaidSickLeaveHourlySalary = \"paidSickLeaveHourlySalary\",\r\n    PaidSickLeaveMonthlySalary = \"paidSickLeaveMonthlySalary\",\r\n}\r\n\r\n/** WorkingTimeCompensationKind enumeration */\r\nexport enum WorkingTimeCompensationKind {\r\n    Undefined = \"undefined\",\r\n    EmergencyWorkCompensation = \"emergencyWorkCompensation\",\r\n    EveningWorkCompensation = \"eveningWorkCompensation\",\r\n    EveningShiftAllowance = \"eveningShiftAllowance\",\r\n    SaturdayPay = \"saturdayPay\",\r\n    ExtraWorkPremium = \"extraWorkPremium\",\r\n    OtherCompensation = \"otherCompensation\",\r\n    WaitingTimeCompensation = \"waitingTimeCompensation\",\r\n    SundayWorkCompensation = \"sundayWorkCompensation\",\r\n    StandByCompensation = \"standByCompensation\",\r\n    WeeklyRestCompensation = \"weeklyRestCompensation\",\r\n    OvertimeCompensation = \"overtimeCompensation\",\r\n    NightWorkAllowance = \"nightWorkAllowance\",\r\n    NightShiftCompensation = \"nightShiftCompensation\",\r\n}\r\n\r\n/** WorkingTimeCompensationPricing enumeration */\r\nexport enum WorkingTimeCompensationPricing {\r\n    Undefined = \"undefined\",\r\n    Percent = \"percent\",\r\n    Fixed = \"fixed\",\r\n}\r\n\r\n/** EmploymentTerminationKind enumeration */\r\nexport enum EmploymentTerminationKind {\r\n    Undefined = \"undefined\",\r\n    NoticePeriodCompensation = \"noticePeriodCompensation\",\r\n    MonetaryWorkingTimeBankCompensation = \"monetaryWorkingTimeBankCompensation\",\r\n    TerminationAndLayOffDamages = \"terminationAndLayOffDamages\",\r\n    VoluntaryTerminationCompensation = \"voluntaryTerminationCompensation\",\r\n    PensionPaidByEmployer = \"pensionPaidByEmployer\",\r\n}\r\n\r\n/** ForeclosureKind enumeration */\r\nexport enum ForeclosureKind {\r\n    Undefined = \"undefined\",\r\n    Fixed = \"fixed\",\r\n    Periodic = \"periodic\",\r\n    NonPeriodic = \"nonPeriodic\",\r\n}\r\n\r\n/** TotalWorkerPaymentKind enumeration */\r\nexport enum TotalWorkerPaymentKind {\r\n    Undefined = \"undefined\",\r\n    TotalWorkerPayment = \"totalWorkerPayment\",\r\n    TotalWorkerWorkerPaymentExcludingExpenses = \"totalWorkerWorkerPaymentExcludingExpenses\",\r\n    TotalWorkerPaymentAndTax = \"totalWorkerPaymentAndTax\",\r\n    TotalWorkerWorkerPaymentAndTaxExcludingExpenses = \"totalWorkerWorkerPaymentAndTaxExcludingExpenses\",\r\n}\r\n\r\n/** TransactionCode enumeration */\r\nexport enum TransactionCode {\r\n    Unknown = \"unknown\",\r\n    Ignored = \"ignored\",\r\n    TimeRatePay = \"timeRatePay\",\r\n    InitiativeFee = \"initiativeFee\",\r\n    BonusPay = \"bonusPay\",\r\n    ComplementaryWagePaidDuringBenefitPeriod = \"complementaryWagePaidDuringBenefitPeriod\",\r\n    EmergencyWorkCompensation = \"emergencyWorkCompensation\",\r\n    EveningWorkCompensation = \"eveningWorkCompensation\",\r\n    EveningShiftAllowance = \"eveningShiftAllowance\",\r\n    NoticePeriodCompensation = \"noticePeriodCompensation\",\r\n    KilometreAllowanceTaxable = \"kilometreAllowanceTaxable\",\r\n    MeetingFee = \"meetingFee\",\r\n    SaturdayPay = \"saturdayPay\",\r\n    ExtraWorkPremium = \"extraWorkPremium\",\r\n    HolidayBonus = \"holidayBonus\",\r\n    LectureFee = \"lectureFee\",\r\n    CompensationForTrustPosition = \"compensationForTrustPosition\",\r\n    OtherCompensation = \"otherCompensation\",\r\n    WaitingTimeCompensation = \"waitingTimeCompensation\",\r\n    WorkingConditionCompensation = \"workingConditionCompensation\",\r\n    PartialPayDuringSickLeave = \"partialPayDuringSickLeave\",\r\n    Commission = \"commission\",\r\n    SundayWorkCompensation = \"sundayWorkCompensation\",\r\n    BenefitArisingFromSyntheticOption = \"benefitArisingFromSyntheticOption\",\r\n    PerformanceBonus = \"performanceBonus\",\r\n    MonetaryCompensationFromWorkingTimeBank = \"monetaryCompensationFromWorkingTimeBank\",\r\n    CompensationForAccruedTimeOff = \"compensationForAccruedTimeOff\",\r\n    ShareIssueForEmployees = \"shareIssueForEmployees\",\r\n    ContractPay = \"contractPay\",\r\n    DamagesInConjunctionWithTermination = \"damagesInConjunctionWithTermination\",\r\n    StandByCompensation = \"standByCompensation\",\r\n    VoluntaryCompensationInConjunctionWithTermination = \"voluntaryCompensationInConjunctionWithTermination\",\r\n    WeeklyRestCompensation = \"weeklyRestCompensation\",\r\n    ProfitSharingBonus = \"profitSharingBonus\",\r\n    AnnualHolidayCompensation = \"annualHolidayCompensation\",\r\n    OvertimeCompensation = \"overtimeCompensation\",\r\n    NightWorkAllowance = \"nightWorkAllowance\",\r\n    NightShiftCompensation = \"nightShiftCompensation\",\r\n    OtherRegularCompensation = \"otherRegularCompensation\",\r\n    CompensationForUnusedCompensatoryLeave = \"compensationForUnusedCompensatoryLeave\",\r\n    AccommodationBenefit = \"accommodationBenefit\",\r\n    InterestBenefitForHousingLoan = \"interestBenefitForHousingLoan\",\r\n    MealAllowance = \"mealAllowance\",\r\n    CarBenefit = \"carBenefit\",\r\n    CompensationForGoverningBodyMembership = \"compensationForGoverningBodyMembership\",\r\n    ShareOfReserveDrawnFromPersonnelFund = \"shareOfReserveDrawnFromPersonnelFund\",\r\n    MonetaryGiftForEmployees = \"monetaryGiftForEmployees\",\r\n    KilometreAllowanceTaxExempt = \"kilometreAllowanceTaxExempt\",\r\n    TreatmentFeeForMunicipalVeterinarian = \"treatmentFeeForMunicipalVeterinarian\",\r\n    CompensationForUseEarnedIncome = \"compensationForUseEarnedIncome\",\r\n    CompensationForUseCapitalIncome = \"compensationForUseCapitalIncome\",\r\n    OtherTaxableBenefitForEmployees = \"otherTaxableBenefitForEmployees\",\r\n    OtherTaxableIncomeDeemedEarnedIncome = \"otherTaxableIncomeDeemedEarnedIncome\",\r\n    OtherFringeBenefit = \"otherFringeBenefit\",\r\n    KinshipCarersFee = \"kinshipCarersFee\",\r\n    StockOptions = \"stockOptions\",\r\n    WagesPaidBySubstitutePayerIncludingSocialInsurance = \"wagesPaidBySubstitutePayerIncludingSocialInsurance\",\r\n    WagesPaidBySubstitutePayerIncludingEarningsRelatedPensionInsurance = \"wagesPaidBySubstitutePayerIncludingEarningsRelatedPensionInsurance\",\r\n    WagesPaidBySubstitutePayerIncludingUnemploymentInsurance = \"wagesPaidBySubstitutePayerIncludingUnemploymentInsurance\",\r\n    WagesPaidBySubstitutePayerIncludingAccidentAndOccupationalDiseaseInsurance = \"wagesPaidBySubstitutePayerIncludingAccidentAndOccupationalDiseaseInsurance\",\r\n    WagesPaidBySubstitutePayerIncludingHealthInsurance = \"wagesPaidBySubstitutePayerIncludingHealthInsurance\",\r\n    CompensationForEmployeeInvention = \"compensationForEmployeeInvention\",\r\n    ReimbursementOfPrivateCaretakersExpenses = \"reimbursementOfPrivateCaretakersExpenses\",\r\n    PrivateCaretakersFee = \"privateCaretakersFee\",\r\n    ReimbursementOfFamilyDayCareProvidersExpenses = \"reimbursementOfFamilyDayCareProvidersExpenses\",\r\n    TelephoneBenefit = \"telephoneBenefit\",\r\n    DailyAllowance = \"dailyAllowance\",\r\n    CapitalIncomePayment = \"capitalIncomePayment\",\r\n    MealBenefit = \"mealBenefit\",\r\n    ReimbursementOfCostsPaidToConciliator = \"reimbursementOfCostsPaidToConciliator\",\r\n    NonWageCompensationForWork = \"nonWageCompensationForWork\",\r\n    SupplementaryDailyAllowancePaidByEmployerSpecificHealthInsuranceFund = \"supplementaryDailyAllowancePaidByEmployerSpecificHealthInsuranceFund\",\r\n    PensionPaidByEmployer = \"pensionPaidByEmployer\",\r\n    DividendsBasedOnWages = \"dividendsBasedOnWages\",\r\n    DividendsBasedOnNonWage = \"dividendsBasedOnNonWage\",\r\n    EmployerSubsidisedCommuterTicketTaxExempt = \"employerSubsidisedCommuterTicketTaxExempt\",\r\n    EmployerSubsidisedCommuterTicketTaxable = \"employerSubsidisedCommuterTicketTaxable\",\r\n    EmployeeStockOption = \"employeeStockOption\",\r\n    WagesTransferredToAthletesSpecialFund = \"wagesTransferredToAthletesSpecialFund\",\r\n    WagesPaidFromAthletesSpecialFund = \"wagesPaidFromAthletesSpecialFund\",\r\n    WagesForInsurancePurposes = \"wagesForInsurancePurposes\",\r\n    TaxableReimbursementOfExpenses = \"taxableReimbursementOfExpenses\",\r\n    PrivateDayCareAllowanceMunicipalSupplement = \"privateDayCareAllowanceMunicipalSupplement\",\r\n    PrivateDayCareAllowanceWages = \"privateDayCareAllowanceWages\",\r\n    PrivateDayCareAllowanceNonWage = \"privateDayCareAllowanceNonWage\",\r\n    KilometreAllowancePaidByNonProfitOrganisation = \"kilometreAllowancePaidByNonProfitOrganisation\",\r\n    DailyAllowancePaidByNonProfitOrganisation = \"dailyAllowancePaidByNonProfitOrganisation\",\r\n    UnjustEnrichment = \"unjustEnrichment\",\r\n    EmployeeStockOptionLowerMarketPrice = \"employeeStockOptionLowerMarketPrice\",\r\n    RoyaltyPaidToNonResidentTaxpayer = \"royaltyPaidToNonResidentTaxpayer\",\r\n    BicycleBenefitTaxExempt = \"bicycleBenefitTaxExempt\",\r\n    BicycleBenefitTaxable = \"bicycleBenefitTaxable\",\r\n    ConditionalStockOptions = \"conditionalStockOptions\",\r\n    CopyrightRoyaltiesEarnedIncome = \"copyrightRoyaltiesEarnedIncome\",\r\n    StockGrantPaidInMoney = \"stockGrantPaidInMoney\",\r\n    EmployeeStockOptionPaidInMoney = \"employeeStockOptionPaidInMoney\",\r\n    EarningsFromJuELEmployerToLightEntrepreneur = \"earningsFromJuELEmployerToLightEntrepreneur\",\r\n    CompensationCollectedForCarBenefit = \"compensationCollectedForCarBenefit\",\r\n    WithholdingTax = \"withholdingTax\",\r\n    ElectedOfficialFee = \"electedOfficialFee\",\r\n    TaxAtSource = \"taxAtSource\",\r\n    TaxAtSourceDeduction = \"taxAtSourceDeduction\",\r\n    WagesPaid = \"wagesPaid\",\r\n    ReimbursementCollectedForOtherFringeBenefits = \"reimbursementCollectedForOtherFringeBenefits\",\r\n    OtherItemDeductibleFromNetWage = \"otherItemDeductibleFromNetWage\",\r\n    NetWage = \"netWage\",\r\n    EmployerPaidPremiumForCollectiveAdditionalPensionInsurance = \"employerPaidPremiumForCollectiveAdditionalPensionInsurance\",\r\n    EmployerPaidPremiumForCollectiveAdditionalPensionInsuranceEmployeesContribution = \"employerPaidPremiumForCollectiveAdditionalPensionInsuranceEmployeesContribution\",\r\n    EmployeesHealthInsuranceContribution = \"employeesHealthInsuranceContribution\",\r\n    EmployeesPensionInsuranceContribution = \"employeesPensionInsuranceContribution\",\r\n    EmployeesUnemploymentInsuranceContribution = \"employeesUnemploymentInsuranceContribution\",\r\n    ReimbursementForEmployerSubsidisedCommuterTicket = \"reimbursementForEmployerSubsidisedCommuterTicket\",\r\n    TaxPaidAbroad = \"taxPaidAbroad\",\r\n    Distraint = \"distraint\",\r\n    VoluntaryIndividualPensionInsurancePremium = \"voluntaryIndividualPensionInsurancePremium\",\r\n    DeductionBeforeWithholding = \"deductionBeforeWithholding\",\r\n    ReimbursementCollectedForBicycleBenefit = \"reimbursementCollectedForBicycleBenefit\",\r\n}\r\n\r\n/** TrainingKind enumeration */\r\nexport enum TrainingKind {\r\n    Undefined = \"undefined\",\r\n    TrainingSalary = \"trainingSalary\",\r\n    TrainingHourlySalary = \"trainingHourlySalary\",\r\n    TrainingMonthlySalary = \"trainingMonthlySalary\",\r\n}\r\n\r\n/** Selected bank. */\r\nexport enum Bank {\r\n    OSUUSPANKKI = \"oSUUSPANKKI\",\r\n    NORDEA = \"nORDEA\",\r\n    NORDEA_PERSONAL = \"nORDEA_PERSONAL\",\r\n    HOLVI = \"hOLVI\",\r\n    POPPANKKI = \"pOPPANKKI\",\r\n    OMASÄÄSTÖPANKKI = \"oMASÄÄSTÖPANKKI\",\r\n    SÄÄSTÖPANKKI = \"sÄÄSTÖPANKKI\",\r\n    AKTIA = \"aKTIA\",\r\n    ÅLANDSBANKEN = \"åLANDSBANKEN\",\r\n    SPANKKI = \"sPANKKI\",\r\n    OSUUSPANKKI_TEST = \"oSUUSPANKKI_TEST\",\r\n    NORDEA_TEST = \"nORDEA_TEST\",\r\n    NORDEA_PERSONAL_TEST = \"nORDEA_PERSONAL_TEST\",\r\n    POPPANKKI_TEST = \"pOPPANKKI_TEST\",\r\n    OMASÄÄSTÖPANKKI_TEST = \"oMASÄÄSTÖPANKKI_TEST\",\r\n    SÄÄSTÖPANKKI_TEST = \"sÄÄSTÖPANKKI_TEST\",\r\n    AKTIA_TEST = \"aKTIA_TEST\",\r\n    ÅLANDSBANKEN_TEST = \"åLANDSBANKEN_TEST\",\r\n    SPANKKI_TEST = \"sPANKKI_TEST\",\r\n    OSUUSPANKKI_MOCK = \"oSUUSPANKKI_MOCK\",\r\n    NORDEA_MOCK = \"nORDEA_MOCK\",\r\n    NORDEA_PERSONAL_MOCK = \"nORDEA_PERSONAL_MOCK\",\r\n    HOLVI_MOCK = \"hOLVI_MOCK\",\r\n    POPPANKKI_MOCK = \"pOPPANKKI_MOCK\",\r\n    OMASÄÄSTÖPANKKI_MOCK = \"oMASÄÄSTÖPANKKI_MOCK\",\r\n    SÄÄSTÖPANKKI_MOCK = \"sÄÄSTÖPANKKI_MOCK\",\r\n    AKTIA_MOCK = \"aKTIA_MOCK\",\r\n    ÅLANDSBANKEN_MOCK = \"åLANDSBANKEN_MOCK\",\r\n    SPANKKI_MOCK = \"sPANKKI_MOCK\",\r\n    SALAXY_TEST = \"sALAXY_TEST\",\r\n}\r\n\r\nexport interface Holidays {\r\n    newYearsDay?: HolidayDate | null;\r\n    epiphany?: HolidayDate | null;\r\n    goodFriday?: HolidayDate | null;\r\n    easterSunday?: HolidayDate | null;\r\n    easterSaturday?: HolidayDate | null;\r\n    easterMonday?: HolidayDate | null;\r\n    mayDay?: HolidayDate | null;\r\n    ascensionDay?: HolidayDate | null;\r\n    pentecost?: HolidayDate | null;\r\n    midsummerEve?: HolidayDate | null;\r\n    midsummerDay?: HolidayDate | null;\r\n    allSaintsDay?: HolidayDate | null;\r\n    independenceDay?: HolidayDate | null;\r\n    christmasEve?: HolidayDate | null;\r\n    christmasDay?: HolidayDate | null;\r\n    stStephensDay?: HolidayDate | null;\r\n}\r\n\r\nexport interface Holidays2 {\r\n    newYearsDay?: HolidayDate | null;\r\n    epiphany?: HolidayDate | null;\r\n    goodFriday?: HolidayDate | null;\r\n    easterSunday?: HolidayDate | null;\r\n    easterSaturday?: HolidayDate | null;\r\n    easterMonday?: HolidayDate | null;\r\n    mayDay?: HolidayDate | null;\r\n    ascensionDay?: HolidayDate | null;\r\n    pentecost?: HolidayDate | null;\r\n    midsummerEve?: HolidayDate | null;\r\n    midsummerDay?: HolidayDate | null;\r\n    allSaintsDay?: HolidayDate | null;\r\n    independenceDay?: HolidayDate | null;\r\n    christmasEve?: HolidayDate | null;\r\n    christmasDay?: HolidayDate | null;\r\n    stStephensDay?: HolidayDate | null;\r\n}\r\n\r\nexport enum AccountBank {\r\n    OSUUSPANKKI = \"oSUUSPANKKI\",\r\n    NORDEA = \"nORDEA\",\r\n    NORDEA_PERSONAL = \"nORDEA_PERSONAL\",\r\n    HOLVI = \"hOLVI\",\r\n    POPPANKKI = \"pOPPANKKI\",\r\n    OMASÄÄSTÖPANKKI = \"oMASÄÄSTÖPANKKI\",\r\n    SÄÄSTÖPANKKI = \"sÄÄSTÖPANKKI\",\r\n    AKTIA = \"aKTIA\",\r\n    ÅLANDSBANKEN = \"åLANDSBANKEN\",\r\n    SPANKKI = \"sPANKKI\",\r\n    OSUUSPANKKI_TEST = \"oSUUSPANKKI_TEST\",\r\n    NORDEA_TEST = \"nORDEA_TEST\",\r\n    NORDEA_PERSONAL_TEST = \"nORDEA_PERSONAL_TEST\",\r\n    POPPANKKI_TEST = \"pOPPANKKI_TEST\",\r\n    OMASÄÄSTÖPANKKI_TEST = \"oMASÄÄSTÖPANKKI_TEST\",\r\n    SÄÄSTÖPANKKI_TEST = \"sÄÄSTÖPANKKI_TEST\",\r\n    AKTIA_TEST = \"aKTIA_TEST\",\r\n    ÅLANDSBANKEN_TEST = \"åLANDSBANKEN_TEST\",\r\n    SPANKKI_TEST = \"sPANKKI_TEST\",\r\n    OSUUSPANKKI_MOCK = \"oSUUSPANKKI_MOCK\",\r\n    NORDEA_MOCK = \"nORDEA_MOCK\",\r\n    NORDEA_PERSONAL_MOCK = \"nORDEA_PERSONAL_MOCK\",\r\n    HOLVI_MOCK = \"hOLVI_MOCK\",\r\n    POPPANKKI_MOCK = \"pOPPANKKI_MOCK\",\r\n    OMASÄÄSTÖPANKKI_MOCK = \"oMASÄÄSTÖPANKKI_MOCK\",\r\n    SÄÄSTÖPANKKI_MOCK = \"sÄÄSTÖPANKKI_MOCK\",\r\n    AKTIA_MOCK = \"aKTIA_MOCK\",\r\n    ÅLANDSBANKEN_MOCK = \"åLANDSBANKEN_MOCK\",\r\n    SPANKKI_MOCK = \"sPANKKI_MOCK\",\r\n    SALAXY_TEST = \"sALAXY_TEST\",\r\n}\r\n\r\nexport enum AccountCurrency {\r\n    EUR = \"eUR\",\r\n}\r\n\r\nexport enum ContactPersonResponsibilityCode {\r\n    ContentIssues = \"contentIssues\",\r\n    TechnicalIssues = \"technicalIssues\",\r\n}\r\n\r\nexport enum UserInfoApplicationRole {\r\n    Unknown = \"unknown\",\r\n    NoAccess = \"noAccess\",\r\n    ReadOnly = \"readOnly\",\r\n    ReadWrite = \"readWrite\",\r\n    Owner = \"owner\",\r\n}\r\n\r\nexport interface FileParameter {\r\n    data: any;\r\n    fileName: string;\r\n}","//----------------------\r\n// <auto-generated>\r\n//     Generated using the NSwag toolchain v14.0.3.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\r\n// </auto-generated>\r\n//----------------------\r\n\r\n/* tslint:disable */\r\n/* eslint-disable */\r\n// ReSharper disable InconsistentNaming\r\n\r\nexport module irepr {\r\n\r\n/** Object that stores National Incomes Register Earnings Payment Reports. */\r\nexport interface EarningsPayment {\r\n    /** Delivery data from IR Wage Report. */\r\n    deliveryData?: DeliveryData | null;\r\n    /** Salaxy data that can't be stored in Earnings Payment Report */\r\n    info?: EarningsPaymentReportExtensions | null;\r\n    /** Validation for the Earnings Payment Report */\r\n    validation?: ApiValidation | null;\r\n    /** Status of the Earnings Payment Report. */\r\n    status?: EarningsPaymentReportStatus | null;\r\n    /** IR Report log. Successfully sent or canceled report ids and time stamps. */\r\n    reportLog?: ReportLogEntry[] | null;\r\n    /** Last errors from IR. */\r\n    irErrors?: ApiValidation | null;\r\n    /** Last successful status in Incomes Register */\r\n    irStatus?: ReportLogEventType | null;\r\n    /** Current schedule for the report. */\r\n    scheduledFor?: string | null;\r\n    /** Timestamp of the last action in IR. */\r\n    lastDeliveredAt?: string | null;\r\n    /** If true, the report has been modified after the last send operation. */\r\n    isModified?: boolean | null;\r\n    /** Readonly workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Record data */\r\nexport interface DeliveryData {\r\n    /** Time of record creation */\r\n    timestamp?: string | null;\r\n    /** Data source */\r\n    source?: string | null;\r\n    /** Record type */\r\n    deliveryDataType?: DeliveryDataType | null;\r\n    /** Record owner's (payer's) record reference\r\n\r\nThe record owner's record reference must uniquely identify all records of a specific record owner (DeliveryDataOwner) containing earnings payment reports (DeliveryDataType=100). */\r\n    deliveryId?: string | null;\r\n    /** Rule for processing invalid data (reports)\r\n\r\nIf the record contains invalid reports, this entry determines whether to reject only the invalid reports in the record or the entire record */\r\n    faultyControl: FaultyControl;\r\n    /** Production environment\r\n\r\nIf the value is \"true\", the data must have been delivered to the Incomes Register's production environment. If the value is \"false\", the data must have been delivered to the Incomes Register's test environment. */\r\n    productionEnvironment?: boolean | null;\r\n    /** Record owner\r\n\r\nProcessing rules related to data items Record owner, Record creator and Record submitter:\r\n\r\nThe payer has a customer ID and the payer reports the data:\r\nAt least one identifier has been specified in the data group Payer identifiers. The data item Record owner must be one of the payer identifiers. If a business ID has been specified in the data group Payer identifiers, it must be specified as the Record owner.\r\nThe Record owner (= payer) must be specified as the Record creator.\r\nThe Record owner (= payer) must be specified as the Record submitter.\r\n\r\nThe payer has a customer ID and the service provider submits the data on behalf of the payer:\r\nAt least one identifier has been specified in the data group Payer identifiers. The data item Record owner must be one of the payer identifiers. If a business ID has been specified in the data group Payer identifiers, it must be specified as the Record owner.\r\nThe identifier of the service provider must be specified as the Record creator. If the service provider has a business ID, it must be specified. It must be specified in the Incomes Register that the service provider has the right to submit records on behalf of others.\r\nThe Record creator (= service provider) must be specified as the Record submitter.\r\n\r\nThe payer has no customer ID and the service provider submits the data on behalf of the payer:\r\nThe value of the data item \"The payer does not have a customer ID\" is \"true\".\r\nThe identifier of the service provider must be specified as the Record owner. If the service provider has a business ID, it must be specified. It must be specified in the Incomes Register that the service provider has the right to submit records on behalf of others.\r\nThe Record owner (= service provider) must be specified as the Record creator. */\r\n    deliveryDataOwner?: Id | null;\r\n    /** Record creator\r\n\r\nThe processing rules for Identifier type, Identifier, Country code and Country name are the same as in the Record owner (DeliveryDataOwner) data group. */\r\n    deliveryDataCreator?: Id | null;\r\n    /** Record submitter\r\n\r\nThe processing rules for Identifier type, Identifier, Country code and Country name are the same as in the Record owner (DeliveryDataOwner) data group. */\r\n    deliveryDataSender?: Id | null;\r\n    /** Pay period */\r\n    paymentPeriod?: PaymentPeriod | null;\r\n    /** Contact persons for the record */\r\n    contactPersons?: ContactPerson[] | null;\r\n    /** Payer details */\r\n    payer?: Payer | null;\r\n    /** Reports data */\r\n    reports?: Report[] | null;\r\n}\r\n\r\n/** Salaxy data that can't be stored in earnings payment report */\r\nexport interface EarningsPaymentReportExtensions {\r\n    /** Worker */\r\n    worker?: Avatar | null;\r\n    /** Calculation used to generate this WageReport */\r\n    calculationId?: string | null;\r\n    /** Employer's Id */\r\n    employerId?: string | null;\r\n    /** Worker's Id */\r\n    workerId?: string | null;\r\n    /** Partner of the customer. */\r\n    partnerId?: string | null;\r\n    /** Service model of the customer. */\r\n    serviceModelId?: string | null;\r\n    /** Payment Channel of the calculation. */\r\n    paymentChannel?: EarningsPaymentReportExtensionsPaymentChannel | null;\r\n    /** Application from which the calculation originated. */\r\n    applicationId?: string | null;\r\n    /** Assumed earnings payment report date for the report. */\r\n    reportDate?: string | null;\r\n}\r\n\r\n/** Common base class / interface for data validation. */\r\nexport interface ApiValidation {\r\n    /** If true, the data is valid - no errors. */\r\n    readonly isValid?: boolean | null;\r\n    /** If true, has required fields missing data. */\r\n    readonly hasAllRequiredFields?: boolean | null;\r\n    /** Validation errors on invalid field values. \r\nNote that required fields missing error messages are not here. Only the invalid values. */\r\n    readonly errors?: ApiValidationError[] | null;\r\n}\r\n\r\n/** Log data from the successfull sending or cancellation. */\r\nexport interface ReportLogEntry {\r\n    /** Response date from the Incomes Register. */\r\n    irTimestamp?: string | null;\r\n    /** Event type: Sending or cancellation. */\r\n    eventType?: ReportLogEventType | null;\r\n    /** Our own report id. */\r\n    reportId?: string | null;\r\n    /** Generated id from the Incomes Register. */\r\n    irReportId?: string | null;\r\n    /** Delivery id. */\r\n    irDeliveryId?: string | null;\r\n    /** Response id. */\r\n    irResponseId?: string | null;\r\n    /** Version. */\r\n    irVersion?: number | null;\r\n    /** User who sent the report. */\r\n    user?: string | null;\r\n    /** Credential of the user. */\r\n    credential?: string | null;\r\n    /** Storage version id. */\r\n    versionId?: string | null;\r\n    /** Message for the event. */\r\n    message?: string | null;\r\n}\r\n\r\n/** Defines the data that IWorkflowItem must provide. */\r\nexport interface WorkflowData {\r\n    /** Workflow events for the item. */\r\n    events?: WorkflowEvent[] | null;\r\n}\r\n\r\n/** Employer Identifier */\r\nexport interface Id {\r\n    /** Identifier type */\r\n    type?: IdType | null;\r\n    /** Identifier\r\n\r\nIf the \"Identifier type\" is \"Business ID\", the identifier must exist (according to information from the Business Information System (YTJ)).\r\nIf the \"Identifier type\" is \"Finnish Personal Identification Number\", the identifier must exist (according to information from the Population Information System (VTJ)). */\r\n    code?: string | null;\r\n    /** Country code\r\n\r\nMandatory data if \"Identifier type\" is other than \"Business ID\" or \"Finnish Personal Identification Number\". */\r\n    countryCode?: string | null;\r\n    /** Country name\r\n\r\nMandatory data if \"Country code\" is \"99\". */\r\n    countryName?: string | null;\r\n}\r\n\r\n/** Pay Period If the \"Action type\" is \"Replacement report\", the data should match that of the report’s previous version. */\r\nexport interface PaymentPeriod {\r\n    /** Date of payment or other report\r\n\r\nThe date must not be earlier than 1 January 2019. */\r\n    paymentDate?: string | null;\r\n    /** Start date\r\n\r\nThe date must not be earlier than 1 January 1800. */\r\n    startDate?: string | null;\r\n    /** End date\r\n\r\nThe date must not be earlier than the \"Start date\". */\r\n    endDate?: string | null;\r\n}\r\n\r\nexport interface ContactPerson {\r\n    /** Name */\r\n    name?: string | null;\r\n    /** Telephone number */\r\n    telephone?: string | null;\r\n    /** E-mail address\r\n\r\nIf the ‘Reimbursement application data’ data group is specified for a paid absence and 1 or 2 as the ‘Payment data type’ even in a single report in a record, you must report at least one ‘Contact person for the record’ for whom the ‘E-mail address’ and ‘Field of responsibility’ data items have been specified. */\r\n    email?: string | null;\r\n    /** Field of responsibility\r\n\r\nIf the ‘Reimbursement application data’ data group is specified for a paid absence and 1 or 2 as the ‘Payment data type’ even in a single report in a record, you must report at least one ‘‘Contact person for the record’ for whom the ‘E-mail address’ and ‘Field of responsibility’ data items have been specified, with ‘Field of responsibility’ having the value 1 (Content issues). */\r\n    responsibilityCode?: ResponsibilityCode | null;\r\n}\r\n\r\n/** Payer details */\r\nexport interface Payer {\r\n    /** Payer identifiers */\r\n    payerIds?: Id[] | null;\r\n    /** Basic payer details */\r\n    payerBasic?: PayerBasic | null;\r\n    /** Payer's address */\r\n    address?: Address | null;\r\n    /** Payer's suborganisations */\r\n    subOrgs?: SubOrg[] | null;\r\n    /** Other payer details */\r\n    payerOther?: PayerOther | null;\r\n    /** Substitute payer */\r\n    substitutePayer?: SubstitutePayer | null;\r\n}\r\n\r\n/** Report data */\r\nexport interface Report {\r\n    /** Service data */\r\n    reportData?: ReportData | null;\r\n    /** Income earner details */\r\n    incomeEarner?: IncomeEarner | null;\r\n    /** Income types */\r\n    transactions?: Transaction[] | null;\r\n    /** Details on foreign leased workforce */\r\n    foreignLeasedWork?: ForeignLeasedWork | null;\r\n    /** Stay periods in Finland */\r\n    stayPeriodsInFinland?: StayPeriodsInFinland | null;\r\n    /** Work periods in Finland */\r\n    workPeriodsInFinland?: WorkPeriodInFinland[] | null;\r\n    /** Countries of work */\r\n    workCountries?: WorkCountry[] | null;\r\n    /** Absences */\r\n    absence?: Absence | null;\r\n}\r\n\r\n/** Defines an avatar for an account, profile etc. - mainly the image that should be shown, names and short description */\r\nexport interface Avatar {\r\n    /** Entity type: person/company */\r\n    entityType?: AvatarEntityType | null;\r\n    /** First name or company name */\r\n    firstName?: string | null;\r\n    /** Last name, for companies, this should be null */\r\n    lastName?: string | null;\r\n    /** Display name. For a person this is 'FirstName LastName' (auto-created). */\r\n    displayName?: string | null;\r\n    /** Sortable name for ordered lists etc. For a person this is 'LastName, FirstName' (auto-created).\r\nDepending on the data storage, this may be all-lowercase for easier sorting and search. */\r\n    sortableName?: string | null;\r\n    /** Type of the Avatar picture. */\r\n    pictureType?: AvatarPictureType | null;\r\n    /** Color - currently only used by type Icon */\r\n    color?: string | null;\r\n    /** Initials - currently only used by type Icon */\r\n    initials?: string | null;\r\n    /** URL of the picture if specified as picture (null in a case of type Icon) */\r\n    url?: string | null;\r\n    /** Short description of the user. \r\nThis may be overriden by a context specific value by the business logic. */\r\n    description?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Validation errors used in API output. */\r\nexport interface ApiValidationError {\r\n    /** Full path to Name of the property / field (Member name in JSON).\r\nThis may be null/empty for type General. */\r\n    key?: string | null;\r\n    /** High level type: Specifies the relation to object and its Member. */\r\n    type: ApiValidationErrorType;\r\n    /** Validation error message in the requested language. */\r\n    msg: string;\r\n    /** Validation error long description in the requested language. */\r\n    description?: string | null;\r\n    /** Some error providers may have a unique technical code for error or validator */\r\n    code?: string | null;\r\n}\r\n\r\n/** Event in the workflow */\r\nexport interface WorkflowEvent {\r\n    /** Event-provider specific identifier for the event.\r\nFor deletable events, this should identify , but do NOT trust this to be 100% unique. */\r\n    id?: string | null;\r\n    /** Type of the event. This typically maps to parent-object specific enumeration. */\r\n    type?: string | null;\r\n    /** Message for backoffice purposes from the User or system that created the event. */\r\n    message?: string | null;\r\n    /** User Interface styling of the event: Indicates the severity for the end-user. */\r\n    ui?: WorkflowEventUi | null;\r\n    /** Features for this event. */\r\n    features?: Features[] | null;\r\n    /** UTC time for when the event occured. */\r\n    time?: string | null;\r\n    /** User or system that created the event. */\r\n    user?: string | null;\r\n    /** Credential of the user which is responsible of the event. */\r\n    assignedTo?: string | null;\r\n    /** Record attached to this event. */\r\n    record?: string | null;\r\n}\r\n\r\n/** Basic payer details */\r\nexport interface PayerBasic {\r\n    /** The payer does not have a customer ID\r\n\r\nMandatory data, if no identifiers have been specified in the \"Payer identifiers\" data group. */\r\n    missingId?: boolean | null;\r\n    /** Company name\r\n\r\nMandatory data in the following cases:\r\n• No identifier where the \"Identifier type\" is \"Business ID\" or \"Finnish Personal Identification Number\" has been specified in the \"Payer identifiers\" data group, and \"Last name\" and \"First name\" have not been specified.\r\n• The value of \"The payer does not have a customer ID\" is \"true\", and \"Last name\" and \"First name\" have not been specified. */\r\n    companyName?: string | null;\r\n    /** Last name\r\n\r\nMandatory data in the following cases:\r\n• No identifier where the \"Identifier type\" is \"Business ID\" or \"Finnish Personal Identification Number\" has been specified in the \"Payer identifiers\" data group, and \"Company name\" has not been specified.\r\n• The value of \"The payer does not have a customer ID\" is \"true\", and \"Company name\" has not been specified.\r\n• The value of \"Payer type\" is \"Temporary employer\", and \"Company name\" has not been specified. */\r\n    lastName?: string | null;\r\n    /** First name\r\n\r\nMandatory data in the following cases:\r\n• No identifier where the \"Identifier type\" is \"Business ID\" or \"Finnish Personal Identification Number\" has been specified in the \"Payer identifiers\" data group, and \"Company name\" has not been specified.\r\n• The value of \"The payer does not have a customer ID\" is \"true\", and \"Company name\" has not been specified.\r\n• The value of \"Payer type\" is \"Temporary employer\", and \"Company name\" has not been specified. */\r\n    firstName?: string | null;\r\n    /** Date of birth\r\n\r\nMandatory data in the following cases:\r\n• No identifier where the \"Identifier type\" is \"Finnish Personal Identification Number\" has been specified in the \"Payer identifiers\" data group, and \"Last name\" and \"First name\" have been specified.\r\n• The value of \"The payer does not have a customer ID\" is \"true\", and \"Last name\" and \"First name\" have been specified.\r\nThe date must not be later than the current date.\r\nThe date must not be earlier than 1 January 1800 */\r\n    birthDate?: string | null;\r\n    /** Contact language */\r\n    language?: Language | null;\r\n}\r\n\r\n/** Address */\r\nexport interface Address {\r\n    /** c/o */\r\n    co?: string | null;\r\n    /** Street address\r\n\r\nIf this data group is included, either \"Street address\" or \"P.O. Box\" must be specified.Both must not be entered. */\r\n    street?: string | null;\r\n    /** P.O. Box\r\n\r\nIf this data group is included, either \"Street address\" or \"P.O. Box\" must be specified.Both must not be entered. */\r\n    poBox?: string | null;\r\n    /** Postal code */\r\n    postalCode?: string | null;\r\n    /** City */\r\n    postOffice?: string | null;\r\n    /** Country code\r\n\r\nA two-character code in accordance with the ISO 3166 country codes.\r\nIf the country is unknown, the value \"99\" is entered. */\r\n    countryCode?: string | null;\r\n    /** Country name\r\n\r\nMandatory data if \"Country code\" is \"99\" */\r\n    countryName?: string | null;\r\n}\r\n\r\n/** Payer's suborganisations */\r\nexport interface SubOrg {\r\n    /** Suborganisation’s identifier type */\r\n    type?: PayerSubOrgType | null;\r\n    /** Suborganisation identifier */\r\n    code?: string | null;\r\n}\r\n\r\n/** Other payer details */\r\nexport interface PayerOther {\r\n    /** Payer types */\r\n    payerTypes?: PayerType[] | null;\r\n}\r\n\r\n/** Substitute payer If substitute payer data is specified, at least the \"Acts as a substitute payer\" and \"Employer identifier\" data must be specified. If the \"Action type\" is \"Replacement report\", the data should match that of the report’s previous version. */\r\nexport interface SubstitutePayer {\r\n    /** Acts as a substitute payer */\r\n    acts?: boolean | null;\r\n    /** Employer identifier */\r\n    employerId?: Id | null;\r\n    /** Employer name\r\n\r\nMandatory data if \"Identifier type\" is other than \"Business ID\" or \"Finnish Personal Identification Number\". */\r\n    employerName?: string | null;\r\n    /** Paid as wage security */\r\n    wageSec?: boolean | null;\r\n}\r\n\r\n/** Service data */\r\nexport interface ReportData {\r\n    /** Action type */\r\n    actionCode?: ActionCode | null;\r\n    /** Incomes Register report reference */\r\n    irReportId?: string | null;\r\n    /** Report reference */\r\n    reportId?: string | null;\r\n    /** Report version number */\r\n    reportVersion?: number | null;\r\n}\r\n\r\n/** Income earner details */\r\nexport interface IncomeEarner {\r\n    /** Income earner identifiers\r\n\r\nMandatory data group, if \"The income earner does not have a customer ID\" has not been specified. \r\nThe data group must not be included, if \"The income earner does not have a customer ID\" has been specified.\r\n\r\nIf the \"Action type\" is \"Replacement report\", the data should match that of the report’s previous version. */\r\n    incomeEarnerIds?: Id[] | null;\r\n    /** Basic income earner details\r\n\r\nMandatory data group in the following cases:\r\n• No identifiers where \"Identifier type\" is \"Business ID\" or \"Finnish Personal Identification Number\" have been specified in the \"Income earner identifiers\" data group. */\r\n    incomeEarnerBasic?: IncomeEarnerBasic | null;\r\n    /** Income earner's addresses\r\n\r\nMandatory data group in the following cases:\r\n• No identifiers where \"Identifier type\" is \"Business ID\" or \"Finnish Personal Identification Number\" have been specified in the \"Income earner identifiers\" data group.\r\n• The value of \"The income earner does not have a customer ID\" is \"true\".\r\n• The value of \"Non-resident taxpayer\" is \"true\". In this case, at least the address in home country (\"Address type\" is \"Address in home country\") must be specified for the income earner */\r\n    addresses?: TypedAddress[] | null;\r\n    /** Income earner's suborganisations */\r\n    subOrgs?: SubOrg[] | null;\r\n    /** Employment relationship data */\r\n    employment?: Employment | null;\r\n    /** Occupation\r\n\r\nThe \"Occupational class or title\" data group must always be specified for an income earner, with the \"Occupational class or title identifier\" in accordance with \"Statistics Finland's classification of occupations\" included, except in the following situations:\r\n\r\na) The report contains no income types that require specification of th \"Occupational class or title\" data group.This takes account of whether the income type is, by default, income subject to accident and occupational disease insurance (see the document, \"Wages – Codes – Income types\") and whether the income type in the report is exceptionally subject to accident and occupational disease insurance.In the report, the exceptions to the income type's default values are specified using the \"Type of insurance information\" and \"Grounds for insurance contribution\" entries. If \"Type of insurance information\" is \"Subject to accident and occupational disease insurance contribution\" and the corresponding \"Grounds for insurance contribution\" value is \"true\"/\"false\", the income type in the report is/is not income subject to accident and occupational disease insurance.\r\n\r\nb) The value of \"Acts as a substitute payer\" is \"true\".\r\n\r\nc) The report includes a \"Type of exception to insurance\" that is one of the following:\r\n• No obligation to provide insurance (earnings-related pension, health, unemployment or accident and occupational disease insurance)\r\n• No obligation to provide insurance(accident and occupational disease insurance)\r\n• Not subject to Finnish social security(earnings-related pension, health, unemployment or accident and occupational disease insurance\r\n• Not subject to Finnish social security(accident and occupational disease insurance)\r\n\r\nThe \"Occupational class or title\" data group must always be specified for an income earner, with the \"Occupational class or title identifier\" in accordance with \"Trafi's titles\" included, if the \"Pension provider code\" is 34.*\r\nThe \"Occupational class or title\" data group must always be specified for an income earner, with the \"Occupational class or title identifier\" in accordance with \"Keva's titles\" included, if the \"Pension provider code\" is 20, 30, 25, 24 or 29.*\r\nThe \"Occupational class or title\" data group must always be specified for an income earner, with the \"Occupational class or title identifier\" in accordance with \"Bank of Finland's titles\" included, if the \"Pension provider code\" is 27.*\r\n\r\n* Exception: The \"Occupational class or title\" data group does not need to be specified, if \"Type of exception to insurance\" with one of the following values has been specified for the income earner:\r\n• No obligation to provide insurance(earnings-related pension, health, unemployment or accident and occupational disease insurance)\r\n• No obligation to provide insurance(earnings-related pension insurance)\r\n• Not subject to Finnish social security(earnings-related pension, health, unemployment or accident and occupational disease insurance)\r\n• Not subject to Finnish social security(earnings-related pension insurance) */\r\n    professions?: Profession[] | null;\r\n    /** Employment registration\r\n\r\nThe \"Grounds for registration\" data group must be specified, with the \"Registration grounds identifier\" in accordance with \"Keva's grounds for registration\" included, if the \"Pension provider code\" is 20, 30, 25, 24 or 29.\r\nThe \"Grounds for registration\" data group must be specified, with the \"Registration grounds identifier\" in accordance with \"Bank of Finland's grounds for registration\" included, if the \"Pension provider code\" is 27 */\r\n    employmentRegs?: EmploymentReg[] | null;\r\n    /** Income earner's place of business\r\n\r\nIf this data group is included, either \"Place of business code\" or address details must be specified.If the address details are specified, they must include at least \"Street address\", \"Postal code\" and \"City\". */\r\n    placeOfBusiness?: PlaceOfBusiness | null;\r\n    /** Earnings-related pension insurance */\r\n    pensionInsurance?: PensionInsurance | null;\r\n    /** Occupational accident insurance */\r\n    accidentInsurance?: AccidentInsurance | null;\r\n    /** Insurance exceptions\r\n\r\nIf the Type of exception to insurance = 11 (Voluntary earnings-related pension) has been specified for the income earner, the values 1, 3, 6 or 7 should not be specified for the Type of exception to insurance in the same report.\r\n\r\nIf the \"Action type\" is \"Replacement report\", the data should match that of the report’s previous version. */\r\n    insuranceExceptions?: ExceptionCode[] | null;\r\n    /** International situations */\r\n    internationalData?: InternationalData | null;\r\n    incomeEarnerOther?: IncomeEarnerOther | null;\r\n}\r\n\r\n/** Income type details */\r\nexport interface Transaction {\r\n    /** General income type details */\r\n    transactionBasic?: TransactionBasic | null;\r\n    /** Insurance information */\r\n    insuranceData?: TransactionInclusion[] | null;\r\n    /** Earnings periods */\r\n    earningPeriods?: EarningPeriod[] | null;\r\n    /** Unit of the wages */\r\n    unitWages?: UnitWage[] | null;\r\n    /** Car benefit */\r\n    carBenefit?: CarBenefit | null;\r\n    /** Meal benefit */\r\n    mealBenefit?: MealBenefit | null;\r\n    /** Other fringe benefit */\r\n    otherBenefit?: BenefitCode[] | null;\r\n    /** Seafarer's income */\r\n    sailorIncome?: SailorIncome | null;\r\n    /** Additional details on recovery */\r\n    recoveryData?: RecoveryData | null;\r\n    /** Daily allowance */\r\n    dailyAllowance?: AllowanceCode[] | null;\r\n    /** Kilometre allowance */\r\n    kmAllowance?: KmAllowance | null;\r\n    /** Six-month rule */\r\n    sixMonthRule?: SixMonthRule | null;\r\n}\r\n\r\n/** Details on foreign leased workforce */\r\nexport interface ForeignLeasedWork {\r\n    /** Representative */\r\n    representative?: Representative | null;\r\n    /** Estimated pay amount\r\n\r\nMandatory data if a form for work abroad where \"Form type\" is \"Employee leasing notice\" has been included in the report.\r\n\r\nThe value must be greater than or equal to 0. */\r\n    estAmount?: number | null;\r\n    /** Finnish employers */\r\n    finServiceRecipient?: FinServiceRecipient | null;\r\n}\r\n\r\n/** Stay periods in Finland */\r\nexport interface StayPeriodsInFinland {\r\n    /** Report contains no stay periods in Finland */\r\n    noStayPeriods?: boolean | null;\r\n    /** Stay periods */\r\n    period?: StayPeriod[] | null;\r\n}\r\n\r\n/** Work period in Finland */\r\nexport interface WorkPeriodInFinland {\r\n    /** Start date\r\n\r\nThe date must not be earlier than 1 January 1800. */\r\n    startDate?: string | null;\r\n    /** End date\r\n\r\nThe date must not be earlier than the \"Start date\". */\r\n    endDate?: string | null;\r\n    /** Number of workdays in Finland\r\n\r\nThe value must be a non-negative integer. */\r\n    workDays?: number | null;\r\n}\r\n\r\n/** Work country */\r\nexport interface WorkCountry {\r\n    /** Code of country of work \r\n\r\nA two-character code inaccordance with the ISO3166 country codes.If the country isunknown, the value \"99\"is entered. */\r\n    workCountryCode?: string | null;\r\n    /** Name of country of work\r\n\r\nMandatory data if \"Country code\" is \"99\". */\r\n    workCountryName?: string | null;\r\n    /** Districts of work */\r\n    workMunicipalities?: string[] | null;\r\n    /** Address in country of work */\r\n    workCountryAddress?: WorkCountryAddress | null;\r\n    /** Principal\r\n\r\nMandatory data group, if a form for work abroad where \"Form type\" is \"NT1\" has been included in the report. */\r\n    serviceRecipient?: ServiceRecipient | null;\r\n    /** Stay periods in country of work\r\n\r\nThere may be several stay periods in the country of work. Mandatory data group, if a form for work abroad where \"Form type\" is \"NT1\" or \"NT2\" has been included in the report */\r\n    stayPeriodsAbroad?: StayPeriod[] | null;\r\n    /** Work periods abroad\r\n\r\nMandatory data group, if a form for work abroad where \"Form type\" is \"NT2\" has been included in the report. */\r\n    workPeriodsAbroad?: Period[] | null;\r\n    /** Country of work has taxing right\r\n\r\nMandatory data if a form for work abroad where \"Form type\" is \"NT1\" or \"NT2\" has been included in the report. */\r\n    taxingRight?: boolean | null;\r\n    /** Pay burdens the result of the employer’s permanent establishment in the country of work\r\n\r\nMandatory data if a form for work abroad where \"Form type\" is \"NT1\" or \"NT2\" has been included in the report. */\r\n    burdensResultOfPE?: boolean | null;\r\n    /** Pay per month\r\n\r\nThis data group may only be used if a form for work abroad, where \"Form type\" is \"NT2\", has been included in the report. */\r\n    wagePerMonth?: number | null;\r\n    /** Other remunerations and benefits\r\n\r\nThis data group may only be used if a form for work abroad, where \"Form type\" is \"NT2\", has been included in the report. */\r\n    remunerations?: RemunerationCode[] | null;\r\n}\r\n\r\n/** Absences If the details on the time period for reporting absences are specified in the data group, both the Start date of the time period for reporting absences and the End date of the time period for reporting absences data items must be specified. */\r\nexport interface Absence {\r\n    /** Start date of the time period for reporting absences\r\n\r\nThe date must not be earlier than 1 January 1800. */\r\n    absenceRepStartDate?: string | null;\r\n    /** End date of the time period for reporting absences\r\n\r\nThe \"End date\" may not be earlier than the \"Start date\". */\r\n    absenceRepEndDate?: string | null;\r\n    /** Unpaid absence\r\n\r\nThere may be several absence periods. */\r\n    unpaidAbsence?: UnpaidAbsence | null;\r\n    /** Paid absence\r\n\r\nThere may be several absence periods. */\r\n    paidAbsence?: PaidAbsence | null;\r\n}\r\n\r\n/** Basic income earner details */\r\nexport interface IncomeEarnerBasic {\r\n    /** The income earner does not have a customer ID */\r\n    missingId?: boolean | null;\r\n    /** Company name */\r\n    companyName?: string | null;\r\n    /** Last name */\r\n    lastName?: string | null;\r\n    /** First name */\r\n    firstName?: string | null;\r\n    /** Date of birth */\r\n    birthDate?: string | null;\r\n    /** Gender */\r\n    gender?: Gender | null;\r\n}\r\n\r\n/** Income earner's address */\r\nexport interface TypedAddress {\r\n    /** Address type */\r\n    addressType?: AddressType | null;\r\n    /** c/o */\r\n    co?: string | null;\r\n    /** Street address\r\n\r\nIf this data group is included, either \"Street address\" or \"P.O. Box\" must be specified.Both must not be entered. */\r\n    street?: string | null;\r\n    /** P.O. Box\r\n\r\nIf this data group is included, either \"Street address\" or \"P.O. Box\" must be specified.Both must not be entered. */\r\n    poBox?: string | null;\r\n    /** Postal code */\r\n    postalCode?: string | null;\r\n    /** City */\r\n    postOffice?: string | null;\r\n    /** Country code\r\n\r\nA two-character code in accordance with the ISO 3166 country codes.\r\nIf the country is unknown, the value \"99\" is entered.\r\n\r\nMandatory data in the following cases:\r\n• No identifier where \"Identifier type\" is \"Business ID\" or \"Finnish Personal Identification Number\" has been specified in the \"Income earner identifiers\" data group.\r\n• The value of \"The income earner does not have a customer ID\" is \"true\".\r\n• The value of \"Non-resident taxpayer\" is \"true\". */\r\n    countryCode?: string | null;\r\n    /** Country name\r\n\r\nMandatory data if \"Country code\" is \"99\". */\r\n    countryName?: string | null;\r\n}\r\n\r\n/** Employment relationship data */\r\nexport interface Employment {\r\n    /** Employed */\r\n    employed?: boolean | null;\r\n    /** Employment type\r\n\r\nMandatory data if a paid absence and the ‘Reimbursement application data’ data group for it are specified in the report, with 2 as the ‘Payment data type (Kela, family leave compensation). */\r\n    employmentCode?: EmploymentCode | null;\r\n    /** Duration of employment */\r\n    termCode?: TermCode | null;\r\n    /** Part-time %\r\n\r\nThe value must be a non-negative decimal number with a maximum value of 100.00. */\r\n    partTime?: number | null;\r\n    /** Regular agreed working hours per week\r\n\r\nThe value must be a non-negative decimal number with a maximum value of 168.00. */\r\n    hoursPerWeek?: number | null;\r\n    /** Forms of payment\r\n\r\nThis data group is mandatory if a paid absence and the ‘Reimbursement application data’ data group for it are specified in the report, with 1 or 2 as the ‘Payment data type’. */\r\n    paymentTypes?: PaymentType[] | null;\r\n    /** Employment period\r\n\r\nMandatory data group, if \"Pension provider code\" is 20, 24, 25, 29 or 30. This data group is mandatory if a paid absence and the ‘Reimbursement application data’ data group for it are specified in the report, with 1 or 2 as the ‘Payment data type’. */\r\n    employmentPeriods?: Period[] | null;\r\n    /** Termination of employment\r\n\r\nMandatory data group, if \"Time of employment\" with an \"End date\" has been specified in the report, and the \"Pension provider code\" is 20, 30, 25, 24, 29 or 29. */\r\n    employmentEndings?: EmploymentEnding[] | null;\r\n}\r\n\r\n/** Occupational class or title */\r\nexport interface Profession {\r\n    /** Type of occupational title or classification */\r\n    type?: ProfessionType | null;\r\n    /** Occupational class or title identifier */\r\n    code?: string | null;\r\n    /** Title (free text) */\r\n    title?: string | null;\r\n}\r\n\r\n/** Grounds for registration An income earner can have several grounds for registration but only one value in accordance with the “Type of registration grounds” data item. */\r\nexport interface EmploymentReg {\r\n    /** Type of registration grounds */\r\n    type?: EmploymentRegType | null;\r\n    /** Registration grounds identifier\r\n\r\nIf \"Type of registration grounds\" is \"Keva's grounds for registration\", the codeset must include the combination(\"Registration grounds identifier\", \"Pension provider code\"), and must be valid on the date that is the value of \"Payment date or other report date\".\r\n\r\nIf \"Type of registration grounds\" is \"Keva's grounds for registration\", and the codeset requires the use of a specific \"Occupational title or classification identifier\" in connection with the specified \"Registration grounds identifier\" value, the codeset must include the combination(\"Registration grounds identifier\", \"Pension provider code\") and must be valid on the date that is the value of \"Payment date or other report date\".\r\n\r\nIf \"Type of registration grounds\" has some other value, it must be included in the specified codeset.If the codeset includes a validity period, the value must be valid on the date that is the value of \"Payment date or other report date\" in the specified codeset */\r\n    code?: string | null;\r\n}\r\n\r\n/** Place of business */\r\nexport interface PlaceOfBusiness {\r\n    /** Place of business code */\r\n    code?: string | null;\r\n    /** Street address */\r\n    street?: string | null;\r\n    /** Postal code */\r\n    postalCode?: string | null;\r\n    /** City */\r\n    postOffice?: string | null;\r\n    /** Country code */\r\n    countryCode?: string | null;\r\n    /** Country name */\r\n    countryName?: string | null;\r\n}\r\n\r\n/** Earnings-related pension insurance This data group is mandatory, except in the following situations: a) The report contains no income types that require specifying a value for \"Earnings-related pension insurance information\". This takes account of whether the income type is, by default, income subject to earningsrelated pension insurance(see the document, \"Wages – Codes – Income types\") and also whether the income type in the report is exceptionally subject to earnings-related pension insurance.In the report, the exceptions to the income type's default values are specified using the \"Type of insurance information\" and \"Grounds for insurance contribution\" entries. If \"Type of insurance information\" is \"Subject to earnings-related pension insurance contribution\" and the corresponding \"Grounds for insurance contribution\" value is \"true\"/\"false\", the income type in the report is/is not income subject to earnings-related pension insurance. b) \"Acts as a substitute payer\" is \"true\". c) \"Type of exception to insurance\" is one of the following: • No obligation to provide insurance(earnings-related pension, health, unemployment or accident and occupational disease insurance) • No obligation to provide insurance(earnings-related pension insurance) • Not subject to Finnish social security (earnings-related pension, health, unemployment or accident and occupational disease insurance) • Not subject to Finnish social security(earnings-related pension insurance) Exception: Although the data group is not mandatory under items a to c, it must always be included if \"Type of exception to insurance\" is \"Voluntary insurance in Finland(earnings-related pension insurance)\". Employee's earnings-related pension insurance If \"Employee's earnings-related pension insurance\" is specified as the value of \"Earnings-related pension insurance information\", values must also be specified for \"Pension provider code\" and \"Pension policy number\". Pension insurance for farmers(MYEL) If \"Pension insurance for farmers (MYEL)\" is specified as the value of \"Earningsrelated pension insurance information\", values must not be specified for \"Pension provider code\" or \"Pension policy number\". Pension insurance for the self-employed(YEL) If \"Pension insurance for the self-employed (YEL)\" is specified as the value of \"Earnings-related pension insurance information\", values must not be specified for \"Pension provider code\" or \"Pension policy number\". If the \"Action type\" is \"Replacement report\", the data should match that of the report’s previous version. */\r\nexport interface PensionInsurance {\r\n    /** Earnings-related pension insurance information */\r\n    pensionActCode?: PensionActCode | null;\r\n    /** Pension provider code */\r\n    pensionProvIdCode?: PensionProvIdCode | null;\r\n    /** Pension policy number */\r\n    pensionPolicyNo?: string | null;\r\n}\r\n\r\n/** Occupational accident insurance If the \"Action type\" is \"Replacement report\", the data should match that of the report’s previous version. */\r\nexport interface AccidentInsurance {\r\n    /** Occupational accident insurance company identifier */\r\n    accInsProvId?: Id | null;\r\n    /** Occupational accident insurance policy number */\r\n    accInsPolicyNo?: string | null;\r\n}\r\n\r\n/** International situations */\r\nexport interface InternationalData {\r\n    /** Social security certificate */\r\n    postedCertCode?: InternationalDataPostedCertCode | null;\r\n    /** Non-resident taxpayer \r\n\r\nIf income type 412 or 362 is specified in the report, the value of the ‘Nonresident taxpayer’ data item must be ‘true’. */\r\n    nonResident?: boolean | null;\r\n    /** Country code of country of residence \r\n\r\nMandatory data, if \"Non-resident taxpayer\" is \"true\". */\r\n    nonResidentCountryCode?: string | null;\r\n    /** Name of country of residence\r\n\r\nMandatory data if \"Country code\" is \"99\". */\r\n    nonResidentCountryName?: string | null;\r\n    /** Income subject to withholding */\r\n    subToWithhold?: boolean | null;\r\n    /** Tax-treaty country code\r\n\r\nMandatory data if the Type of additional income earner data (IncomeEarnerType) = \"Income earner did not stay longer than 183 days in Finland during the Tax-Treaty-defined sojourn period\". This data can only be specified if the Type of additional income earner data is the above-mentioned value.\r\nThe value must be valid on the date specified in the data item \"Payment date or other report date\". */\r\n    taxTreatyCountryCode?: string | null;\r\n    /** Forms for work abroad */\r\n    workForm?: WorkForm[] | null;\r\n}\r\n\r\nexport interface IncomeEarnerOther {\r\n    /** Applicable collective agreement\r\n\r\nThe value must be valid on the date specified in the data item \"Payment date or other report date\". */\r\n    cbaCode?: number | null;\r\n    /** Additional income earner details */\r\n    incomeEarnerTypes?: IncomeEarnerType[] | null;\r\n    /** Payment data */\r\n    payments?: Payment[] | null;\r\n}\r\n\r\n/** General details on the income type */\r\nexport interface TransactionBasic {\r\n    /** Income type code \r\n\r\nIf the ‘Income type code’ is 412 or 362, the value of the ‘Non-resident taxpayer’ data item must be ‘true’.\r\nIf the ‘Income type code’ is 334 (Meal benefit) and the value of the ‘Reimbursement for a meal benefit corresponds to taxable value(TaxValue)’ is ‘true’, and none of the income types 301, 302, 317, 330 or 343 have been specified in the report, the income type 407 must not be specified.\r\nIncome type 407 must not be specified if none of the following income types have been specified in the report: 301, 302, 317, 330 or 334.\r\nIncome type 419 must not be specified if none of the following income types have been specified in the report: 101−106, 201−207, 209-227, 230−239, 308, 315, 316, 320, 326, 336, 339, 351, 353−355, 359. */\r\n    transactionCode?: number | null;\r\n    /** Amount\r\n\r\nIf ‘Income type code’ is 102, 103, 104, 105 or 106, the value must not be greaterthan the amount reported for income type 101.\r\n\r\nThe Wages – Codes – Income types document lists the income types for which anegative Amount can be specified.A negative Amount must not be specified forother income types.\r\n\r\nIf the value of the ‘Reimbursement for a meal benefit corresponds to taxablevalue (TaxValue)’ data item specified for income type 334 is ‘true’, the amountis not mandatory.\r\n\r\nIf ‘Income type code’ is 401 (Compensation collected for car benefit), theamount must not be greater than the amount reported using income type 304(Car benefit).\r\n\r\nIf ‘Income type code’ is 407 (Reimbursement collected for other fringe benefits),the value must not be greater than the amount reported using one of thefollowing income types or the total amount reported using some of thefollowing income types: 301 (Housing benefit), 302 (Interest benefit for ahousing loan), 317 (Other fringe benefit), 330 (Telephone benefit) and 334(Meal benefit).\r\n\r\nIf ‘Income type code’ is 415 (Reimbursement for employer-subsidisedcommuter ticket), the amount must not be higher than the amount reportedusing income type 341 (Employer-subsidised commuter ticket, tax-exemptshare) or income type 342 (Employer-subsidised commuter ticket, taxableshare), or the total amount reported using these income types.\r\n\r\nIf ‘Income type code’ is 419 (Deduction before withholding), the value must notbe greater than the amount reported using one of the following income typesor the total amount reported using some of the following income types:101−106, 201−207, 209-227, 230−239, 308, 315, 316, 320, 326, 336, 339, 351,353−355, 359. */\r\n    amount?: number | null;\r\n    /** Payment other than money */\r\n    noMoney?: boolean | null;\r\n    /** One-off remuneration */\r\n    oneOff?: boolean | null;\r\n    /** Unjust enrichment \r\n\r\nThe Wages – Codes – Income types document lists the income types for which the ‘Unjust enrichment’ data item must not be specified. */\r\n    unjustEnrichment?: boolean | null;\r\n    /** Recovery\r\n\r\nThe Wages – Codes – Income types document lists the income types for which the ‘Recovery’ data item must not be specified. */\r\n    recovery?: boolean | null;\r\n}\r\n\r\n/** Insurance information */\r\nexport interface TransactionInclusion {\r\n    /** Insurance information type */\r\n    insuranceCode?: InsuranceCode | null;\r\n    /** Grounds for insurance contribution */\r\n    included?: boolean | null;\r\n}\r\n\r\n/** Earnings period */\r\nexport interface EarningPeriod {\r\n    /** Start date\r\n\r\nThe date must not be earlier than 1 January 1800 */\r\n    startDate?: string | null;\r\n    /** End date\r\n\r\nThe date must not be earlier than the \"Start date\". */\r\n    endDate?: string | null;\r\n}\r\n\r\n/** Unit wage */\r\nexport interface UnitWage {\r\n    /** Unit price\r\n\r\nThe value must be non-negative. */\r\n    unitPrice?: number | null;\r\n    /** Number of units\r\n\r\nThe value must be non-negative. */\r\n    unitAmount?: number | null;\r\n    /** Unit */\r\n    unitCode?: WageUnitCode | null;\r\n}\r\n\r\n/** Car benefit Mandatory data group, if the income type is \"Car benefit\". This data group may not be used with other income types. */\r\nexport interface CarBenefit {\r\n    /** Car benefit type */\r\n    carBenefitCode?: CarBenefitCode | null;\r\n    /** Car age group */\r\n    ageGroupCode?: AgeGroupCode | null;\r\n    /** Odometer reading\r\n\r\nThe value must be greater than or equal to 0 */\r\n    kilometers?: number | null;\r\n    /** Car emissions value\r\n\r\nThe car emissions value must be greater than or equal to 0, and smaller than or\r\nequal to 100. The car emissions value can only be reported if the payment date\r\nor other reporting date is in 2022–2025. */\r\n    emissionsValue?: number | null;\r\n}\r\n\r\n/** Meal benefit */\r\nexport interface MealBenefit {\r\n    /** Reimbursement for a meal benefit corresponds to taxable value */\r\n    taxValue?: boolean | null;\r\n}\r\n\r\n/** Seafarer's income */\r\nexport interface SailorIncome {\r\n    /** Payment is seafarer's income */\r\n    sailorIncomeProp?: boolean | null;\r\n    /** Time of cross trade\r\n\r\nAllowed valus: 1 - 12 */\r\n    crossTradeTime?: number | null;\r\n    /** Withdrawal period */\r\n    withdrawalPeriod?: WithdrawalPeriod | null;\r\n}\r\n\r\n/** Additional details on recovery */\r\nexport interface RecoveryData {\r\n    /** Recovery date\r\n\r\nThe date must not be earlier than 1 January 1800. */\r\n    recoveryDate?: string | null;\r\n    /** Withholding from the recovered amount */\r\n    withhold?: number | null;\r\n    /** Tax at source from the recovered amount */\r\n    taxAtSource?: number | null;\r\n    /** Original payment periods */\r\n    origPaymentPeriods?: OrigPaymentPeriod[] | null;\r\n}\r\n\r\n/** Kilometre allowance */\r\nexport interface KmAllowance {\r\n    /** Number of kilometres */\r\n    kilometers?: number | null;\r\n}\r\n\r\n/** Six-month rule */\r\nexport interface SixMonthRule {\r\n    /** Six-month rule is applicable */\r\n    applicable?: boolean | null;\r\n    /** Country code\r\n\r\nA two-character code in accordance with the ISO 3166 country codes.\r\nIf the country is unknown, the value \"99\" is entered.\r\n\r\nMandatory data, if \"Six-month rule is applicable\" is \"true\". */\r\n    countryCode?: string | null;\r\n    /** Country name\r\n\r\nMandatory data if \"Country code\" is \"99\". */\r\n    countryName?: string | null;\r\n}\r\n\r\n/** Representative */\r\nexport interface Representative {\r\n    /** Representative identifiers */\r\n    representativeIds?: Id[] | null;\r\n    /** Representative's name */\r\n    name?: string | null;\r\n    /** Representative's address */\r\n    address?: Address | null;\r\n    /** Representative acts as submitter */\r\n    representativeReports?: boolean | null;\r\n}\r\n\r\n/** Finnish employer Mandatory data group if a form for work abroad where \"Form type\" is \"Employee leasing notice\" has been included in the report. */\r\nexport interface FinServiceRecipient {\r\n    /** Employer identifiers */\r\n    finServiceRecipientIds?: Id[] | null;\r\n}\r\n\r\n/** Stay period */\r\nexport interface StayPeriod {\r\n    /** Start date\r\n\r\nThe date must not be earlier than 1 January 1800. */\r\n    startDate?: string | null;\r\n    /** End date\r\n\r\nThe date must not be earlier than the \"Start date\". */\r\n    endDate?: string | null;\r\n}\r\n\r\n/** Address in country of work */\r\nexport interface WorkCountryAddress {\r\n    /** c/o */\r\n    co?: string | null;\r\n    /** Street address\r\n\r\nEither \"Street address\" or \"P.O. Box\" must be specified in this data group. Both must not be entered. */\r\n    street?: string | null;\r\n    /** P.O. Box\r\n\r\nEither \"Street address\" or \"P.O. Box\" must be specified in this data group. Both must not be entered. */\r\n    poBox?: string | null;\r\n    /** Postal code */\r\n    postalCode?: string | null;\r\n    /** City */\r\n    postOffice?: string | null;\r\n    /** Country code\r\n\r\nA two-character code in accordance with the ISO 3166 country codes.\r\nIf the country is unknown, the value \"99\" is entered. */\r\n    countryCode?: string | null;\r\n    /** Country name\r\n\r\nMandatory data if \"Country code\" is \"99\" */\r\n    countryName?: string | null;\r\n}\r\n\r\n/** Principal */\r\nexport interface ServiceRecipient {\r\n    /** Principal identifiers */\r\n    serviceRecipientIds?: Id[] | null;\r\n    /** Principal's name */\r\n    name?: string | null;\r\n    /** Principal's address */\r\n    serviceRecipientAddress?: ServiceRecipientAddress | null;\r\n}\r\n\r\n/** Time of employment */\r\nexport interface Period {\r\n    /** Start date \r\n\r\nThe date must not be more than 45 days later than the current date. The date must not be earlier than 1 January 1800.\r\n\r\nIf a paid absence and the ‘Reimbursement application data’ data group for it are specified in the report, with 1 or 2 as the ‘Payment data type’, the ‘Start date’ of the period of employment must be no earlier than the ‘Start date’ of the period of paid absence in question. */\r\n    startDate?: string | null;\r\n    /** End date\r\n\r\nThe date must not be earlier than the \"Start date\". */\r\n    endDate?: string | null;\r\n}\r\n\r\n/** Unpaid absence */\r\nexport interface UnpaidAbsence {\r\n    /** Absence periods */\r\n    unpaidAbsencePeriods?: UnpaidAbsencePeriod[] | null;\r\n}\r\n\r\n/** Paid absence */\r\nexport interface PaidAbsence {\r\n    /** Absence periods */\r\n    paidAbsencePeriods?: PaidAbsencePeriod[] | null;\r\n}\r\n\r\n/** Reason for the termination of employment An income earner can have several reasons for the termination of employment but only one value in accordance with the “Reason codes for termination of employment” data item. */\r\nexport interface EmploymentEnding {\r\n    /** Reason codes for termination of employment\r\n\r\nIf the value is \"Keva codes\", the \"Pension provider code\" must be 20, 30, 25, 24 or 29.\r\nIf the value is \"Bank of Finland codes\", the \"Pension provider code\" must be 27. */\r\n    type?: EmploymentEndingType | null;\r\n    /** Reason code for termination of employment\r\n\r\nIf \"Keva codes\" are used for the reason codes, the codeset must include the combination(\"Reason code for the termination of employment\", \"Pension provider code\") and it must be valid on the date that is the value of \"Payment date or other report date\". \r\nIf some other reason codeset is used, it must include this data.If the codeset includes a validity period, the value must be valid on the date that is the value of \"Payment date or other report date\" in the specified codeset. */\r\n    code?: string | null;\r\n}\r\n\r\n/** Payment data */\r\nexport interface Payment {\r\n    /** Payment data type */\r\n    paymentType?: RefPaymentType | null;\r\n    /** Payment's reference number \r\n\r\nMandatory data, if \"Payment data type\" is \"Earnings-related pension provider\". */\r\n    paymentRef?: string | null;\r\n    /** Payment specifier */\r\n    paymentSpecifier?: string | null;\r\n}\r\n\r\n/** Withdrawal period */\r\nexport interface WithdrawalPeriod {\r\n    /** Start date\r\n\r\nThe date must not be earlier than 1 January 1800. */\r\n    startDate?: string | null;\r\n    /** End date\r\n\r\nThe date must not be earlier than the \"Start date\". */\r\n    endDate?: string | null;\r\n}\r\n\r\n/** Original payment period */\r\nexport interface OrigPaymentPeriod {\r\n    /** Payment date\r\n\r\nThe date must not be earlier than 1 January 1800. The date must not be later than that of ‘Payment date or other report date’ on the report. */\r\n    paymentDate?: string | null;\r\n    /** Start date\r\n\r\nThe date must not be earlier than 1 January 1800. */\r\n    startDate?: string | null;\r\n    /** End date\r\n\r\nThe \"End date\" may not be earlier than the \"Start date\". */\r\n    endDate?: string | null;\r\n}\r\n\r\nexport interface ServiceRecipientAddress {\r\n    /** c/o */\r\n    co?: string | null;\r\n    /** Street address */\r\n    street?: string | null;\r\n    /** P.O. Box */\r\n    poBox?: string | null;\r\n    /** Postal code */\r\n    postalCode?: string | null;\r\n    /** City */\r\n    postOffice?: string | null;\r\n    /** Country code */\r\n    countryCode?: string | null;\r\n    /** Country name */\r\n    countryName?: string | null;\r\n}\r\n\r\n/** Absence period */\r\nexport interface UnpaidAbsencePeriod {\r\n    /** Start date\r\n\r\nThe date must not be earlier than 1 January 1800. */\r\n    startDate?: string | null;\r\n    /** End date\r\n\r\nThe \"End date\" may not be earlier than the \"Start date\". */\r\n    endDate?: string | null;\r\n    /** Number of days of absence \r\n\r\nThe value must be a non-negative number. */\r\n    absenceDays?: number | null;\r\n    /** Cause of absence */\r\n    causeCode?: UnpaidAbsenceCauseCode | null;\r\n}\r\n\r\n/** Absence period */\r\nexport interface PaidAbsencePeriod {\r\n    /** Start date\r\n\r\nThe date must not be earlier than 1 January 1800. */\r\n    startDate?: string | null;\r\n    /** End date\r\n\r\nThe \"End date\" may not be earlier than the \"Start date”\r\n\r\nMandatory data if 1 or 2 was specified as the ‘Payment data type’ in the ‘Reimbursement application data’ data group.\r\n\r\nThe time period between the ‘Start date’ and ‘End date’ of the absence period must not overlap by a single day with the absence period of another paid absence on the same report (‘Start date’ – ‘End date’).\r\n\r\nThe time period between the ‘Start date’ and ‘End date’ of the absence period must not overlap by a single day with the absence period of an unpaid absence in the same report(‘Start date’ – ‘End date’). */\r\n    endDate?: string | null;\r\n    /** Number of days of absence */\r\n    absenceDays?: number | null;\r\n    /** Absence continues, until when\r\n\r\n\"Absence continues, until when\" may not be earlier than \"Start date\". */\r\n    absenceUntil?: string | null;\r\n    /** Cause of absence */\r\n    causeCode?: PaidAbsenceCauseCode | null;\r\n    /** Pay for period of paid absence\r\n\r\nThe value must be a non-negative number. */\r\n    amount?: number | null;\r\n    /** Reimbursement application data */\r\n    reimbApp?: ReimbPayment[] | null;\r\n    /** Additional reimbursement application data\r\n\r\nYou can enter freeform text as additional information. This information may be entered only when the ‘Reimbursement application data’ data group has been specified in connection with the absence period.In other situations, the additional information must not be specified. */\r\n    paidAbsencePeriodInfo?: string | null;\r\n}\r\n\r\n/** Payment data */\r\nexport interface ReimbPayment {\r\n    /** Payment data type\r\n\r\nIf ‘Payment data type’ = 1 (Kela, daily allowance application), the ‘Reason for unpaid absence’ must only be one of the following: 1 (illness), 3 (maternity, paternity or parental leave), 4 (special maternity leave) or 5 (rehabilitation).\r\n\r\nIf ‘Payment data type’ = 2 (Kela, family leave compensation), the ‘Reason for unpaid absence’ must be 3 (maternity, paternity or parental leave). */\r\n    paymentType?: ReimbPaymentType | null;\r\n    /** Payment's reference number */\r\n    paymentRef?: string | null;\r\n    /** Payment specifier */\r\n    paymentSpecifier?: string | null;\r\n}\r\n\r\n/** Api Schedule Object */\r\nexport interface IrApiScheduleObject {\r\n    /** Id of the object in the data storage to schedule */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    startAt?: string | null;\r\n    /** Schedule action to take. */\r\n    action?: IrScheduleAction | null;\r\n    /** User context information. */\r\n    userContext?: UserContext | null;\r\n}\r\n\r\n/** Current user context. */\r\nexport interface UserContext {\r\n    /** Owner for this data */\r\n    owner?: string | null;\r\n    /** Owner ID for this data */\r\n    ownerId?: string | null;\r\n    /** Partner ID for this data */\r\n    partnerId?: string | null;\r\n    /** Login partner ID for this data */\r\n    loginPartnerId?: string | null;\r\n    /** Credential ID for this data */\r\n    credentialId?: string | null;\r\n    /** Users scope, currently only 'admin' supported. */\r\n    scope?: string | null;\r\n}\r\n\r\n/** Version information for the API object. */\r\nexport interface VersionInfo {\r\n    /** Identifier for the version. */\r\n    versionId?: string | null;\r\n    /** Operation which created the version. */\r\n    operation?: string | null;\r\n    /** Date and time when the version was created. */\r\n    date?: string | null;\r\n    /** User account  who created the version. */\r\n    userAccount?: Avatar | null;\r\n}\r\n\r\nexport interface PageResultOfEarningsPaymentListItem {\r\n    items?: EarningsPaymentListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of earnings payments in the user interface. It contains all essential information of the report and is basis for searching, filtering and sorting. */\r\nexport interface EarningsPaymentListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: EarningsPaymentReportStatus | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: EarningsPaymentData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Object that represents a Salaxy account. */\r\nexport interface AccountInIndex {\r\n    /** Avatar for the account */\r\n    avatar?: Avatar | null;\r\n    /** Official id of the person or company. */\r\n    officialId?: string | null;\r\n    /** Email address. */\r\n    email?: string | null;\r\n    /** Telephone number. */\r\n    telephone?: string | null;\r\n    /** Bank account number (IBAN) */\r\n    ibanNumber?: string | null;\r\n}\r\n\r\n/** Earnings payment specific business data for index. */\r\nexport interface EarningsPaymentData {\r\n    /** Contains the email or id of the responsible for the partner workflow event. */\r\n    partnerMessageAssignedTo?: string | null;\r\n    /** Current status in the Incomes Register. */\r\n    irStatus?: ReportLogEventType | null;\r\n    /** Date and time for the next scheduled delivery of the report. */\r\n    scheduledFor?: string | null;\r\n    /** Date and time for the first delivery of the report. */\r\n    firstDeliveredAt?: string | null;\r\n    /** Date and time for the last delivery of the report. */\r\n    lastDeliveredAt?: string | null;\r\n    /** Partner id for invoicing. */\r\n    partnerId?: string | null;\r\n    /** Service Model id for invoicing. */\r\n    serviceModelId?: string | null;\r\n    /** Payment channel for invoicing. */\r\n    paymentChannel?: EarningsPaymentDataPaymentChannel | null;\r\n    /** Application id for invoicing. */\r\n    applicationId?: string | null;\r\n    /** Assumed earnings payment report date for the report. */\r\n    reportDate?: string | null;\r\n}\r\n\r\nexport interface EarningsPaymentNotification {\r\n    /** Taken schedule action. */\r\n    action?: ReportLogEventType | null;\r\n    /** Status response for the sent request. */\r\n    statusResponse?: StatusResponse | null;\r\n    /** Record data */\r\n    deliveryData?: DeliveryData | null;\r\n    /** Identifier of the object in the data storage. */\r\n    id?: string | null;\r\n}\r\n\r\n/** Processing feedback data */\r\nexport interface StatusResponse {\r\n    /** Record status */\r\n    deliveryDataStatus?: StatusResponseDeliveryDataStatus | null;\r\n    /** Incomes Register record reference\r\n\r\nIf the record has been saved in the Incomes Register, the reference assigned to the record by the Incomes Register is delivered in this element.The Incomes Register record reference uniquely identifies all records submitted to the Incomes Register.\r\nIf the record has not been saved in the Incomes Register, this data is blank. */\r\n    irDeliveryId?: string | null;\r\n    /** Approved items\r\n\r\nThe valid items submitted in the record are returned in this data group. */\r\n    validItems?: Item[] | null;\r\n    /** Rejected items \r\n\r\nThe invalid items submitted in the record and rejected on the basis of itemspecific errors are returned in this data group. If all items in the record are rejected on the basis of record-level errors, the rejected items are not returned in this data group. */\r\n    invalidItems?: Item[] | null;\r\n    /** Message-level errors\r\n\r\nThis data group is used to return technical and authorisation errors.\r\nIf message-level errors are detected in a record submitted to the Incomes Register, the record is not processed further in the Incomes Register. In addition to message-level errors, the processing feedback cannot therefore contain any other errors(record-level errors, and rejected items and the errors related to them). */\r\n    messageErrors?: ErrorInfo[] | null;\r\n    /** Record-level errors\r\n\r\nThis data group is used to return errors related to the contents of record-level data.\r\nRecord-level errors apply to all items in the record.If there are record-level errors in the record, all items of the record are invalid and will not be saved in the Incomes Register.In such a case, the invalid items are not separately delivered in the \"Rejected items\" data group. */\r\n    deliveryErrors?: ErrorInfo[] | null;\r\n    /** Incomes Register message reference */\r\n    irResponseId?: string | null;\r\n    /** Processing feedback timestamp */\r\n    irResponseTimestamp?: string | null;\r\n}\r\n\r\nexport interface Item {\r\n    /** Record submitter's reference\r\n\r\nThis element always appears in the data of an approved item. */\r\n    itemId?: string | null;\r\n    /** Incomes Register reference \r\n\r\nThis element always appears in the data of an approved item. */\r\n    irItemId?: string | null;\r\n    /** Report version number \r\n\r\nThe Incomes Register assigns version number 1 to a new report. The version number of a substitute report is the number of the substituted version + 1. */\r\n    itemVersion?: number | null;\r\n    /** Item Version specified */\r\n    itemVersionSpecified?: boolean | null;\r\n    /** Errors */\r\n    itemErrors?: ErrorInfo[] | null;\r\n}\r\n\r\n/** Error information */\r\nexport interface ErrorInfo {\r\n    /** Error code */\r\n    errorCode?: string | null;\r\n    /** Error code description */\r\n    errorMessage?: string | null;\r\n    /** Error details */\r\n    errorDetails?: string | null;\r\n}\r\n\r\n/** ActionCode enumeration */\r\nexport enum ActionCode {\r\n    NewReport = \"newReport\",\r\n    ReplacementReport = \"replacementReport\",\r\n}\r\n\r\n/** AddressType enumeration */\r\nexport enum AddressType {\r\n    AddressInHomeCountry = \"addressInHomeCountry\",\r\n    AddressInTheCountryOfWork = \"addressInTheCountryOfWork\",\r\n}\r\n\r\n/** AgeGroupCode enumeration */\r\nexport enum AgeGroupCode {\r\n    A = \"a\",\r\n    B = \"b\",\r\n    C = \"c\",\r\n    U = \"u\",\r\n}\r\n\r\n/** AllowanceCode enumeration */\r\nexport enum AllowanceCode {\r\n    MealAllowance = \"mealAllowance\",\r\n    PartialDailyAllowance = \"partialDailyAllowance\",\r\n    FullDailyAllowance = \"fullDailyAllowance\",\r\n    InternationalDailyAllowance = \"internationalDailyAllowance\",\r\n    TaxExemptReimbursementsAbroad = \"taxExemptReimbursementsAbroad\",\r\n}\r\n\r\n/** ApiValidationErrorType enumeration */\r\nexport enum ApiValidationErrorType {\r\n    General = \"general\",\r\n    Required = \"required\",\r\n    Invalid = \"invalid\",\r\n    Warning = \"warning\",\r\n}\r\n\r\n/** BenefitCode enumeration */\r\nexport enum BenefitCode {\r\n    AccommodationBenefit = \"accommodationBenefit\",\r\n    TelephoneBenefit = \"telephoneBenefit\",\r\n    MealBenefit = \"mealBenefit\",\r\n    OtherBenefits = \"otherBenefits\",\r\n}\r\n\r\n/** CalcGroup enumeration */\r\nexport enum CalcGroup {\r\n    Undefined = \"undefined\",\r\n    BaseSalary = \"baseSalary\",\r\n    SalaryAdditions = \"salaryAdditions\",\r\n    Benefits = \"benefits\",\r\n    Expenses = \"expenses\",\r\n    Deductions = \"deductions\",\r\n    OtherNoPayment = \"otherNoPayment\",\r\n    Totals = \"totals\",\r\n    Disabled = \"disabled\",\r\n}\r\n\r\n/** CarBenefitCode enumeration */\r\nexport enum CarBenefitCode {\r\n    LimitedCarBenefit = \"limitedCarBenefit\",\r\n    FullCarBenefit = \"fullCarBenefit\",\r\n}\r\n\r\n/** DeliveryDataType enumeration */\r\nexport enum DeliveryDataType {\r\n    EarningsPaymentReports = \"earningsPaymentReports\",\r\n    EmployersSeparateReports = \"employersSeparateReports\",\r\n    BenefitsPaymentReports = \"benefitsPaymentReports\",\r\n    RecordSubscription = \"recordSubscription\",\r\n    Messages = \"messages\",\r\n    CancellationOfEarningsPaymentReports = \"cancellationOfEarningsPaymentReports\",\r\n    CancellationOfEmployersSeparateReports = \"cancellationOfEmployersSeparateReports\",\r\n    CancellationOfBenefitsPaymentReports = \"cancellationOfBenefitsPaymentReports\",\r\n    CancellationOfARecordSubscription = \"cancellationOfARecordSubscription\",\r\n    CancellationOfARecordContainingEarningsPaymentReports = \"cancellationOfARecordContainingEarningsPaymentReports\",\r\n    CancellationOfARecordContainingEmployersSeparateReports = \"cancellationOfARecordContainingEmployersSeparateReports\",\r\n    CancellationOfARecordContainingBenefitsPaymentReports = \"cancellationOfARecordContainingBenefitsPaymentReports\",\r\n    CancellationOfARecordContainingARecordSubscription = \"cancellationOfARecordContainingARecordSubscription\",\r\n}\r\n\r\n/** EarningsPaymentReportStatus enumeration */\r\nexport enum EarningsPaymentReportStatus {\r\n    New = \"new\",\r\n    Scheduled = \"scheduled\",\r\n    Succeeded = \"succeeded\",\r\n    Canceled = \"canceled\",\r\n    Error = \"error\",\r\n    Invalid = \"invalid\",\r\n}\r\n\r\n/** EmploymentCode enumeration */\r\nexport enum EmploymentCode {\r\n    FullTime = \"fullTime\",\r\n    PartTime = \"partTime\",\r\n    NotAvailable = \"notAvailable\",\r\n}\r\n\r\n/** EmploymentEndingCode enumeration */\r\nexport enum EmploymentEndingCode {\r\n    EmployeesResignation = \"employeesResignation\",\r\n    Other = \"other\",\r\n    TerminationGroundsRelatedToEmployeesPerson = \"terminationGroundsRelatedToEmployeesPerson\",\r\n    FinancialAndProductionRelatedGrounds = \"financialAndProductionRelatedGrounds\",\r\n    JointAgreement = \"jointAgreement\",\r\n    Retirement = \"retirement\",\r\n    TerminationOfaFixedTermEmployment = \"terminationOfaFixedTermEmployment\",\r\n}\r\n\r\n/** EmploymentEndingType enumeration */\r\nexport enum EmploymentEndingType {\r\n    KevaCodes = \"kevaCodes\",\r\n    BankOfFinlandCodes = \"bankOfFinlandCodes\",\r\n    IncomesRegisterCodes = \"incomesRegisterCodes\",\r\n}\r\n\r\n/** EmploymentRegType enumeration */\r\nexport enum EmploymentRegType {\r\n    KevasGroundsForRegistration = \"kevasGroundsForRegistration\",\r\n    BankOfFinlandsGroundsForRegistration = \"bankOfFinlandsGroundsForRegistration\",\r\n}\r\n\r\n/** ExceptionCode enumeration */\r\nexport enum ExceptionCode {\r\n    NoObligationToSocialInsurance = \"noObligationToSocialInsurance\",\r\n    NoObligationToHealthInsurance = \"noObligationToHealthInsurance\",\r\n    NoObligationToEarningsRelatedPensionInsurance = \"noObligationToEarningsRelatedPensionInsurance\",\r\n    NoObligationToAccidentAndOccupationalDiseaseInsurance = \"noObligationToAccidentAndOccupationalDiseaseInsurance\",\r\n    NoObligationToUnemploymentInsurance = \"noObligationToUnemploymentInsurance\",\r\n    NotSubjectToSocialInsurance = \"notSubjectToSocialInsurance\",\r\n    NotSubjectToEarningsRelatedPensionInsurance = \"notSubjectToEarningsRelatedPensionInsurance\",\r\n    NotSubjectToAccidentAndOccupationalDiseaseInsurance = \"notSubjectToAccidentAndOccupationalDiseaseInsurance\",\r\n    NotSubjectToUnemploymentInsurance = \"notSubjectToUnemploymentInsurance\",\r\n    NotSubjectToHealthInsurance = \"notSubjectToHealthInsurance\",\r\n    VoluntaryEarningsRelatedPensionInsurance = \"voluntaryEarningsRelatedPensionInsurance\",\r\n}\r\n\r\n/** FaultyControl enumeration */\r\nexport enum FaultyControl {\r\n    OnlyInvalidItems = \"onlyInvalidItems\",\r\n    EntireRecordIsRejected = \"entireRecordIsRejected\",\r\n}\r\n\r\n/** Gender enumeration */\r\nexport enum Gender {\r\n    Male = \"male\",\r\n    Female = \"female\",\r\n}\r\n\r\n/** IdType enumeration */\r\nexport enum IdType {\r\n    BusinessId = \"businessId\",\r\n    PersonalIdentificationNumber = \"personalIdentificationNumber\",\r\n    Vat = \"vat\",\r\n    Giin = \"giin\",\r\n    TaxIdentificationNumber = \"taxIdentificationNumber\",\r\n    FinnishTradeRegistrationNumber = \"finnishTradeRegistrationNumber\",\r\n    ForeignBusinessRegistrationNumber = \"foreignBusinessRegistrationNumber\",\r\n    ForeignPersonalIdentificationNumber = \"foreignPersonalIdentificationNumber\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** IncomeEarnerType enumeration */\r\nexport enum IncomeEarnerType {\r\n    EmployedByStateEmploymentFund = \"employedByStateEmploymentFund\",\r\n    JointOwnerWithPayer = \"jointOwnerWithPayer\",\r\n    PartialOwner = \"partialOwner\",\r\n    KeyEmployee = \"keyEmployee\",\r\n    LeasedEmployeeLivingAbroad = \"leasedEmployeeLivingAbroad\",\r\n    PersonWorkingInFrontierDistrict = \"personWorkingInFrontierDistrict\",\r\n    PersonWorkingAbroad = \"personWorkingAbroad\",\r\n    Athlete = \"athlete\",\r\n    PerformingArtist = \"performingArtist\",\r\n    RestrictedPeriodInFinland = \"restrictedPeriodInFinland\",\r\n    NetOfTaxContract = \"netOfTaxContract\",\r\n    Organization = \"organization\",\r\n    PersonWorkingOnAlandFerry = \"personWorkingOnAlandFerry\",\r\n    EntrepreneurOrFarmerNoPensionRequired = \"entrepreneurOrFarmerNoPensionRequired\",\r\n    DimplomaticMission = \"dimplomaticMission\",\r\n    Eppo = \"eppo\",\r\n    LightEntrepreneur = \"lightEntrepreneur\",\r\n}\r\n\r\n/** IrScheduleAction enumeration */\r\nexport enum IrScheduleAction {\r\n    Send = \"send\",\r\n    Cancel = \"cancel\",\r\n}\r\n\r\n/** InsuranceCode enumeration */\r\nexport enum InsuranceCode {\r\n    SubjectToSocialInsuranceContributions = \"subjectToSocialInsuranceContributions\",\r\n    SubjectToEarningsRelatedPensionInsuranceContribution = \"subjectToEarningsRelatedPensionInsuranceContribution\",\r\n    SubjectToHealthInsuranceContribution = \"subjectToHealthInsuranceContribution\",\r\n    SubjectToUnemploymentInsuranceContribution = \"subjectToUnemploymentInsuranceContribution\",\r\n    SubjectToAccidentInsuranceAndOccupationalDiseaseInsuranceContribution = \"subjectToAccidentInsuranceAndOccupationalDiseaseInsuranceContribution\",\r\n}\r\n\r\n/** Language enumeration */\r\nexport enum Language {\r\n    Fi = \"fi\",\r\n    Sv = \"sv\",\r\n    En = \"en\",\r\n}\r\n\r\n/** PaidAbsenceCauseCode enumeration */\r\nexport enum PaidAbsenceCauseCode {\r\n    Illness = \"illness\",\r\n    PartTimeSickLeave = \"partTimeSickLeave\",\r\n    ParentalLeave = \"parentalLeave\",\r\n    SpecialMaternityLeave = \"specialMaternityLeave\",\r\n    Rehabilitation = \"rehabilitation\",\r\n    ChildIllness = \"childIllness\",\r\n    PartTimeChildCareLeave = \"partTimeChildCareLeave\",\r\n    Training = \"training\",\r\n    LeaveOfAbsence = \"leaveOfAbsence\",\r\n    MilitaryRefresherTraining = \"militaryRefresherTraining\",\r\n    MidWeekHoliday = \"midWeekHoliday\",\r\n    AccruedHoliday = \"accruedHoliday\",\r\n    OccupationalAccident = \"occupationalAccident\",\r\n    AnnualLeave = \"annualLeave\",\r\n    PartTimeAbsenceDueToRehabilitation = \"partTimeAbsenceDueToRehabilitation\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** PayerSubOrgType enumeration */\r\nexport enum PayerSubOrgType {\r\n    KevasSubmitterCodes = \"kevasSubmitterCodes\",\r\n    PayersOwnCodes = \"payersOwnCodes\",\r\n    GovernmentAgencyIdentifier = \"governmentAgencyIdentifier\",\r\n}\r\n\r\n/** PayerType enumeration */\r\nexport enum PayerType {\r\n    PublicSector = \"publicSector\",\r\n    Household = \"household\",\r\n    TemporaryEmployer = \"temporaryEmployer\",\r\n    ForeignEmployer = \"foreignEmployer\",\r\n    State = \"state\",\r\n    UnincorporatedStateEnterpriseOrGovernmentalInstitution = \"unincorporatedStateEnterpriseOrGovernmentalInstitution\",\r\n    SpecialisedAgency = \"specialisedAgency\",\r\n    ForeignGroupCompany = \"foreignGroupCompany\",\r\n    PoolOfHouseholdEmployers = \"poolOfHouseholdEmployers\",\r\n}\r\n\r\n/** PaymentType enumeration */\r\nexport enum PaymentType {\r\n    Monthly = \"monthly\",\r\n    Hourly = \"hourly\",\r\n    ContractPay = \"contractPay\",\r\n}\r\n\r\n/** PensionActCode enumeration */\r\nexport enum PensionActCode {\r\n    EmployeesEarningsRelatedPensionInsurance = \"employeesEarningsRelatedPensionInsurance\",\r\n    PensionInsuranceForFarmers = \"pensionInsuranceForFarmers\",\r\n    PensionInsuranceForTheSelfEmployed = \"pensionInsuranceForTheSelfEmployed\",\r\n}\r\n\r\n/** PensionProvIdCode enumeration */\r\nexport enum PensionProvIdCode {\r\n    None = \"none\",\r\n    FinnishCentreForPensions = \"finnishCentreForPensions\",\r\n    ClergyOfTheOrthodoxChurch = \"clergyOfTheOrthodoxChurch\",\r\n    KevaMemberOrganisations = \"kevaMemberOrganisations\",\r\n    KevaÅlandLandskapsregeringsPensionssystem = \"kevaÅlandLandskapsregeringsPensionssystem\",\r\n    KevaChurch = \"kevaChurch\",\r\n    BankOfFinland = \"bankOfFinland\",\r\n    KevaKelaEmploymentPensions = \"kevaKelaEmploymentPensions\",\r\n    KevaState = \"kevaState\",\r\n    Seafarers = \"seafarers\",\r\n    Farmers = \"farmers\",\r\n    Alandia = \"alandia\",\r\n    Ilmarinen = \"ilmarinen\",\r\n    Elo = \"elo\",\r\n    Varma = \"varma\",\r\n    Veritas = \"veritas\",\r\n    Etera = \"etera\",\r\n    UPM = \"uPM\",\r\n    Sanoma = \"sanoma\",\r\n    Sandvik = \"sandvik\",\r\n    Kontino = \"kontino\",\r\n    Yleisradio = \"yleisradio\",\r\n    ABB = \"aBB\",\r\n    LFashionGroup = \"lFashionGroup\",\r\n    Honeywell = \"honeywell\",\r\n    Telia = \"telia\",\r\n    YaraSuomi = \"yaraSuomi\",\r\n    Orion = \"orion\",\r\n    Valio = \"valio\",\r\n    OP = \"oP\",\r\n    Verso = \"verso\",\r\n    Apteekkien = \"apteekkien\",\r\n    Viabek = \"viabek\",\r\n    Reka = \"reka\",\r\n}\r\n\r\n/** ProfessionType enumeration */\r\nexport enum ProfessionType {\r\n    StatisticsFinland = \"statisticsFinland\",\r\n    Keva = \"keva\",\r\n    BankOfFinland = \"bankOfFinland\",\r\n    Trafi = \"trafi\",\r\n}\r\n\r\n/** RefPaymentType enumeration */\r\nexport enum RefPaymentType {\r\n    EarningsRelatedPensionProvider = \"earningsRelatedPensionProvider\",\r\n}\r\n\r\n/** ReimbPaymentType enumeration */\r\nexport enum ReimbPaymentType {\r\n    KelaDailyAllowanceApplication = \"kelaDailyAllowanceApplication\",\r\n    KelaFamilyLeaveCompensation = \"kelaFamilyLeaveCompensation\",\r\n}\r\n\r\n/** RemunerationCode enumeration */\r\nexport enum RemunerationCode {\r\n    DailyAllowance = \"dailyAllowance\",\r\n    AccommodationBenefit = \"accommodationBenefit\",\r\n    CarBenefit = \"carBenefit\",\r\n    OtherBenefit = \"otherBenefit\",\r\n}\r\n\r\n/** ReportLogEventType enumeration */\r\nexport enum ReportLogEventType {\r\n    Undefined = \"undefined\",\r\n    Sent = \"sent\",\r\n    Canceled = \"canceled\",\r\n    Error = \"error\",\r\n}\r\n\r\n/** ResponsibilityCode enumeration */\r\nexport enum ResponsibilityCode {\r\n    ContentIssues = \"contentIssues\",\r\n    TechnicalIssues = \"technicalIssues\",\r\n}\r\n\r\n/** TermCode enumeration */\r\nexport enum TermCode {\r\n    UntilFurtherNotice = \"untilFurtherNotice\",\r\n    FixedTerm = \"fixedTerm\",\r\n}\r\n\r\n/** TransactionCode enumeration */\r\nexport enum TransactionCode {\r\n    Unknown = \"unknown\",\r\n    Ignored = \"ignored\",\r\n    TimeRatePay = \"timeRatePay\",\r\n    InitiativeFee = \"initiativeFee\",\r\n    BonusPay = \"bonusPay\",\r\n    ComplementaryWagePaidDuringBenefitPeriod = \"complementaryWagePaidDuringBenefitPeriod\",\r\n    EmergencyWorkCompensation = \"emergencyWorkCompensation\",\r\n    EveningWorkCompensation = \"eveningWorkCompensation\",\r\n    EveningShiftAllowance = \"eveningShiftAllowance\",\r\n    NoticePeriodCompensation = \"noticePeriodCompensation\",\r\n    KilometreAllowanceTaxable = \"kilometreAllowanceTaxable\",\r\n    MeetingFee = \"meetingFee\",\r\n    SaturdayPay = \"saturdayPay\",\r\n    ExtraWorkPremium = \"extraWorkPremium\",\r\n    HolidayBonus = \"holidayBonus\",\r\n    LectureFee = \"lectureFee\",\r\n    CompensationForTrustPosition = \"compensationForTrustPosition\",\r\n    OtherCompensation = \"otherCompensation\",\r\n    WaitingTimeCompensation = \"waitingTimeCompensation\",\r\n    WorkingConditionCompensation = \"workingConditionCompensation\",\r\n    PartialPayDuringSickLeave = \"partialPayDuringSickLeave\",\r\n    Commission = \"commission\",\r\n    SundayWorkCompensation = \"sundayWorkCompensation\",\r\n    BenefitArisingFromSyntheticOption = \"benefitArisingFromSyntheticOption\",\r\n    PerformanceBonus = \"performanceBonus\",\r\n    MonetaryCompensationFromWorkingTimeBank = \"monetaryCompensationFromWorkingTimeBank\",\r\n    CompensationForAccruedTimeOff = \"compensationForAccruedTimeOff\",\r\n    ShareIssueForEmployees = \"shareIssueForEmployees\",\r\n    ContractPay = \"contractPay\",\r\n    DamagesInConjunctionWithTermination = \"damagesInConjunctionWithTermination\",\r\n    StandByCompensation = \"standByCompensation\",\r\n    VoluntaryCompensationInConjunctionWithTermination = \"voluntaryCompensationInConjunctionWithTermination\",\r\n    WeeklyRestCompensation = \"weeklyRestCompensation\",\r\n    ProfitSharingBonus = \"profitSharingBonus\",\r\n    AnnualHolidayCompensation = \"annualHolidayCompensation\",\r\n    OvertimeCompensation = \"overtimeCompensation\",\r\n    NightWorkAllowance = \"nightWorkAllowance\",\r\n    NightShiftCompensation = \"nightShiftCompensation\",\r\n    OtherRegularCompensation = \"otherRegularCompensation\",\r\n    CompensationForUnusedCompensatoryLeave = \"compensationForUnusedCompensatoryLeave\",\r\n    AccommodationBenefit = \"accommodationBenefit\",\r\n    InterestBenefitForHousingLoan = \"interestBenefitForHousingLoan\",\r\n    MealAllowance = \"mealAllowance\",\r\n    CarBenefit = \"carBenefit\",\r\n    CompensationForGoverningBodyMembership = \"compensationForGoverningBodyMembership\",\r\n    ShareOfReserveDrawnFromPersonnelFund = \"shareOfReserveDrawnFromPersonnelFund\",\r\n    MonetaryGiftForEmployees = \"monetaryGiftForEmployees\",\r\n    KilometreAllowanceTaxExempt = \"kilometreAllowanceTaxExempt\",\r\n    TreatmentFeeForMunicipalVeterinarian = \"treatmentFeeForMunicipalVeterinarian\",\r\n    CompensationForUseEarnedIncome = \"compensationForUseEarnedIncome\",\r\n    CompensationForUseCapitalIncome = \"compensationForUseCapitalIncome\",\r\n    OtherTaxableBenefitForEmployees = \"otherTaxableBenefitForEmployees\",\r\n    OtherTaxableIncomeDeemedEarnedIncome = \"otherTaxableIncomeDeemedEarnedIncome\",\r\n    OtherFringeBenefit = \"otherFringeBenefit\",\r\n    KinshipCarersFee = \"kinshipCarersFee\",\r\n    StockOptions = \"stockOptions\",\r\n    WagesPaidBySubstitutePayerIncludingSocialInsurance = \"wagesPaidBySubstitutePayerIncludingSocialInsurance\",\r\n    WagesPaidBySubstitutePayerIncludingEarningsRelatedPensionInsurance = \"wagesPaidBySubstitutePayerIncludingEarningsRelatedPensionInsurance\",\r\n    WagesPaidBySubstitutePayerIncludingUnemploymentInsurance = \"wagesPaidBySubstitutePayerIncludingUnemploymentInsurance\",\r\n    WagesPaidBySubstitutePayerIncludingAccidentAndOccupationalDiseaseInsurance = \"wagesPaidBySubstitutePayerIncludingAccidentAndOccupationalDiseaseInsurance\",\r\n    WagesPaidBySubstitutePayerIncludingHealthInsurance = \"wagesPaidBySubstitutePayerIncludingHealthInsurance\",\r\n    CompensationForEmployeeInvention = \"compensationForEmployeeInvention\",\r\n    ReimbursementOfPrivateCaretakersExpenses = \"reimbursementOfPrivateCaretakersExpenses\",\r\n    PrivateCaretakersFee = \"privateCaretakersFee\",\r\n    ReimbursementOfFamilyDayCareProvidersExpenses = \"reimbursementOfFamilyDayCareProvidersExpenses\",\r\n    TelephoneBenefit = \"telephoneBenefit\",\r\n    DailyAllowance = \"dailyAllowance\",\r\n    CapitalIncomePayment = \"capitalIncomePayment\",\r\n    MealBenefit = \"mealBenefit\",\r\n    ReimbursementOfCostsPaidToConciliator = \"reimbursementOfCostsPaidToConciliator\",\r\n    NonWageCompensationForWork = \"nonWageCompensationForWork\",\r\n    SupplementaryDailyAllowancePaidByEmployerSpecificHealthInsuranceFund = \"supplementaryDailyAllowancePaidByEmployerSpecificHealthInsuranceFund\",\r\n    PensionPaidByEmployer = \"pensionPaidByEmployer\",\r\n    DividendsBasedOnWages = \"dividendsBasedOnWages\",\r\n    DividendsBasedOnNonWage = \"dividendsBasedOnNonWage\",\r\n    EmployerSubsidisedCommuterTicketTaxExempt = \"employerSubsidisedCommuterTicketTaxExempt\",\r\n    EmployerSubsidisedCommuterTicketTaxable = \"employerSubsidisedCommuterTicketTaxable\",\r\n    EmployeeStockOption = \"employeeStockOption\",\r\n    WagesTransferredToAthletesSpecialFund = \"wagesTransferredToAthletesSpecialFund\",\r\n    WagesPaidFromAthletesSpecialFund = \"wagesPaidFromAthletesSpecialFund\",\r\n    WagesForInsurancePurposes = \"wagesForInsurancePurposes\",\r\n    TaxableReimbursementOfExpenses = \"taxableReimbursementOfExpenses\",\r\n    PrivateDayCareAllowanceMunicipalSupplement = \"privateDayCareAllowanceMunicipalSupplement\",\r\n    PrivateDayCareAllowanceWages = \"privateDayCareAllowanceWages\",\r\n    PrivateDayCareAllowanceNonWage = \"privateDayCareAllowanceNonWage\",\r\n    KilometreAllowancePaidByNonProfitOrganisation = \"kilometreAllowancePaidByNonProfitOrganisation\",\r\n    DailyAllowancePaidByNonProfitOrganisation = \"dailyAllowancePaidByNonProfitOrganisation\",\r\n    UnjustEnrichment = \"unjustEnrichment\",\r\n    EmployeeStockOptionLowerMarketPrice = \"employeeStockOptionLowerMarketPrice\",\r\n    RoyaltyPaidToNonResidentTaxpayer = \"royaltyPaidToNonResidentTaxpayer\",\r\n    BicycleBenefitTaxExempt = \"bicycleBenefitTaxExempt\",\r\n    BicycleBenefitTaxable = \"bicycleBenefitTaxable\",\r\n    ConditionalStockOptions = \"conditionalStockOptions\",\r\n    CopyrightRoyaltiesEarnedIncome = \"copyrightRoyaltiesEarnedIncome\",\r\n    StockGrantPaidInMoney = \"stockGrantPaidInMoney\",\r\n    EmployeeStockOptionPaidInMoney = \"employeeStockOptionPaidInMoney\",\r\n    EarningsFromJuELEmployerToLightEntrepreneur = \"earningsFromJuELEmployerToLightEntrepreneur\",\r\n    CompensationCollectedForCarBenefit = \"compensationCollectedForCarBenefit\",\r\n    WithholdingTax = \"withholdingTax\",\r\n    ElectedOfficialFee = \"electedOfficialFee\",\r\n    TaxAtSource = \"taxAtSource\",\r\n    TaxAtSourceDeduction = \"taxAtSourceDeduction\",\r\n    WagesPaid = \"wagesPaid\",\r\n    ReimbursementCollectedForOtherFringeBenefits = \"reimbursementCollectedForOtherFringeBenefits\",\r\n    OtherItemDeductibleFromNetWage = \"otherItemDeductibleFromNetWage\",\r\n    NetWage = \"netWage\",\r\n    EmployerPaidPremiumForCollectiveAdditionalPensionInsurance = \"employerPaidPremiumForCollectiveAdditionalPensionInsurance\",\r\n    EmployerPaidPremiumForCollectiveAdditionalPensionInsuranceEmployeesContribution = \"employerPaidPremiumForCollectiveAdditionalPensionInsuranceEmployeesContribution\",\r\n    EmployeesHealthInsuranceContribution = \"employeesHealthInsuranceContribution\",\r\n    EmployeesPensionInsuranceContribution = \"employeesPensionInsuranceContribution\",\r\n    EmployeesUnemploymentInsuranceContribution = \"employeesUnemploymentInsuranceContribution\",\r\n    ReimbursementForEmployerSubsidisedCommuterTicket = \"reimbursementForEmployerSubsidisedCommuterTicket\",\r\n    TaxPaidAbroad = \"taxPaidAbroad\",\r\n    Distraint = \"distraint\",\r\n    VoluntaryIndividualPensionInsurancePremium = \"voluntaryIndividualPensionInsurancePremium\",\r\n    DeductionBeforeWithholding = \"deductionBeforeWithholding\",\r\n    ReimbursementCollectedForBicycleBenefit = \"reimbursementCollectedForBicycleBenefit\",\r\n}\r\n\r\n/** UnpaidAbsenceCauseCode enumeration */\r\nexport enum UnpaidAbsenceCauseCode {\r\n    Illness = \"illness\",\r\n    PartTimeSickLeave = \"partTimeSickLeave\",\r\n    ParentalLeave = \"parentalLeave\",\r\n    SpecialMaternityLeave = \"specialMaternityLeave\",\r\n    Rehabilitation = \"rehabilitation\",\r\n    ChildIllness = \"childIllness\",\r\n    PartTimeChildCareLeave = \"partTimeChildCareLeave\",\r\n    Training = \"training\",\r\n    JobAlternationLeave = \"jobAlternationLeave\",\r\n    StudyLeave = \"studyLeave\",\r\n    IndustrialAction = \"industrialAction\",\r\n    InterruptionInWorkProvision = \"interruptionInWorkProvision\",\r\n    LeaveOfAbsence = \"leaveOfAbsence\",\r\n    MilitaryRefresherTraining = \"militaryRefresherTraining\",\r\n    MilitaryService = \"militaryService\",\r\n    LayOff = \"layOff\",\r\n    ChildCareLeave = \"childCareLeave\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** WageUnitCode enumeration */\r\nexport enum WageUnitCode {\r\n    Hour = \"hour\",\r\n    Day = \"day\",\r\n    Week = \"week\",\r\n    Period = \"period\",\r\n}\r\n\r\nexport enum EarningsPaymentReportExtensionsPaymentChannel {\r\n  Undefined = \"undefined\",\r\n  Test = \"test\",\r\n  ZeroPayment = \"zeroPayment\",\r\n  External = \"external\",\r\n  PalkkausManual = \"palkkausManual\",\r\n  PalkkausWS = \"palkkausWS\",\r\n  PalkkausPSD = \"palkkausPSD\",\r\n  PalkkausPersonal = \"palkkausPersonal\",\r\n  PalkkausInvoices = \"palkkausInvoices\",\r\n  PalkkausCfaPaytrail = \"palkkausCfaPaytrail\",\r\n  PalkkausCfaReference = \"palkkausCfaReference\",\r\n  PalkkausCfaFinvoice = \"palkkausCfaFinvoice\",\r\n  PalkkausEcfaPaytrail = \"palkkausEcfaPaytrail\",\r\n  PalkkausEcfaReference = \"palkkausEcfaReference\",\r\n  PalkkausEcfaFinvoice = \"palkkausEcfaFinvoice\",\r\n  PalkkausCfaTest = \"palkkausCfaTest\",\r\n  AccountorGo = \"accountorGo\",\r\n  TalenomOnline = \"talenomOnline\",\r\n  TalenomCfa = \"talenomCfa\",\r\n  HolviCfa = \"holviCfa\",\r\n  FinagoSolo = \"finagoSolo\",\r\n  Procountor = \"procountor\",\r\n  Kevytyrittaja = \"kevytyrittaja\",\r\n  VismaNetvisor = \"vismaNetvisor\",\r\n  Askelma = \"askelma\",\r\n  Briox = \"briox\",\r\n  Lemonaid = \"lemonaid\",\r\n  Laskupiste = \"laskupiste\",\r\n  Holvi = \"holvi\",\r\n  Kompassi = \"kompassi\",\r\n  Domus = \"domus\",\r\n  PasseliMerit = \"passeliMerit\",\r\n  Odoo = \"odoo\",\r\n  Ecom = \"ecom\",\r\n  Kitsas = \"kitsas\",\r\n}\r\n\r\nexport enum AvatarEntityType {\r\n    Undefined = \"undefined\",\r\n    Person = \"person\",\r\n    Company = \"company\",\r\n    PersonCreatedByEmployer = \"personCreatedByEmployer\",\r\n    Partner = \"partner\",\r\n}\r\n\r\nexport enum AvatarPictureType {\r\n    Icon = \"icon\",\r\n    Uploaded = \"uploaded\",\r\n    Gravatar = \"gravatar\",\r\n}\r\n\r\nexport enum WorkflowEventUi {\r\n    Default = \"default\",\r\n    Primary = \"primary\",\r\n    Success = \"success\",\r\n    Info = \"info\",\r\n    Warning = \"warning\",\r\n    Danger = \"danger\",\r\n}\r\n\r\nexport enum Features {\r\n    None = \"none\",\r\n    IsActive = \"isActive\",\r\n    IsEditable = \"isEditable\",\r\n    IsRemovable = \"isRemovable\",\r\n    IsOnHold = \"isOnHold\",\r\n}\r\n\r\nexport enum InternationalDataPostedCertCode {\r\n    FromFinlandA1CertificateOrAgreement = \"fromFinlandA1CertificateOrAgreement\",\r\n    ToFinlandA1CertificateOrAgreement = \"toFinlandA1CertificateOrAgreement\",\r\n    NonEUEEACountryOrNonSocialSecurityAgreementCountry = \"nonEUEEACountryOrNonSocialSecurityAgreementCountry\",\r\n}\r\n\r\nexport enum WorkForm {\r\n    NT1 = \"nT1\",\r\n    NT2 = \"nT2\",\r\n    EmployersReportOnPeriodsOfStayInFinland = \"employersReportOnPeriodsOfStayInFinland\",\r\n    EmployeeLeasingNotice = \"employeeLeasingNotice\",\r\n}\r\n\r\nexport enum EarningsPaymentDataPaymentChannel {\r\n  Undefined = \"undefined\",\r\n  Test = \"test\",\r\n  ZeroPayment = \"zeroPayment\",\r\n  External = \"external\",\r\n  PalkkausManual = \"palkkausManual\",\r\n  PalkkausWS = \"palkkausWS\",\r\n  PalkkausPSD = \"palkkausPSD\",\r\n  PalkkausPersonal = \"palkkausPersonal\",\r\n  PalkkausInvoices = \"palkkausInvoices\",\r\n  PalkkausCfaPaytrail = \"palkkausCfaPaytrail\",\r\n  PalkkausCfaReference = \"palkkausCfaReference\",\r\n  PalkkausCfaFinvoice = \"palkkausCfaFinvoice\",\r\n  PalkkausEcfaPaytrail = \"palkkausEcfaPaytrail\",\r\n  PalkkausEcfaReference = \"palkkausEcfaReference\",\r\n  PalkkausEcfaFinvoice = \"palkkausEcfaFinvoice\",\r\n  PalkkausCfaTest = \"palkkausCfaTest\",\r\n  AccountorGo = \"accountorGo\",\r\n  TalenomOnline = \"talenomOnline\",\r\n  TalenomCfa = \"talenomCfa\",\r\n  HolviCfa = \"holviCfa\",\r\n  FinagoSolo = \"finagoSolo\",\r\n  Procountor = \"procountor\",\r\n  Kevytyrittaja = \"kevytyrittaja\",\r\n  VismaNetvisor = \"vismaNetvisor\",\r\n  Askelma = \"askelma\",\r\n  Briox = \"briox\",\r\n  Lemonaid = \"lemonaid\",\r\n  Laskupiste = \"laskupiste\",\r\n  Holvi = \"holvi\",\r\n  Kompassi = \"kompassi\",\r\n  Domus = \"domus\",\r\n  PasseliMerit = \"passeliMerit\",\r\n  Odoo = \"odoo\",\r\n  Ecom = \"ecom\",\r\n  Kitsas = \"kitsas\",\r\n}\r\n\r\nexport enum StatusResponseDeliveryDataStatus {\r\n    Unknown = \"unknown\",\r\n    Received = \"received\",\r\n    InProcess = \"inProcess\",\r\n    Valid = \"valid\",\r\n    RejectedAtReception = \"rejectedAtReception\",\r\n    RejectedDuringProcessing = \"rejectedDuringProcessing\",\r\n    Cancelled = \"cancelled\",\r\n}\r\n\r\n}","//----------------------\r\n// <auto-generated>\r\n//     Generated using the NSwag toolchain v13.20.0.0 (NJsonSchema v10.9.0.0 (Newtonsoft.Json v11.0.0.0)) (http://NSwag.org)\r\n// </auto-generated>\r\n//----------------------\r\n\r\n/* tslint:disable */\r\n/* eslint-disable */\r\n// ReSharper disable InconsistentNaming\r\n\r\nexport module irpsr {\r\n\r\n/** Object that stores National Incomes Register Payer Summary Reports. */\r\nexport interface PayerSummary {\r\n    /** Delivery data from IR Wage Report. */\r\n    deliveryData?: DeliveryData | null;\r\n    /** Salaxy data that can't be stored in Earnings Payment Report */\r\n    info?: PayerSummaryReportExtensions | null;\r\n    /** Validation for the Payer Summary Report */\r\n    validation?: ApiValidation | null;\r\n    /** Status of the Payer Summary Report. */\r\n    status?: PayerSummaryReportStatus | null;\r\n    /** IR Report log. Successfully sent or canceled report ids and time stamps. */\r\n    reportLog?: ReportLogEntry[] | null;\r\n    /** Last errors from IR. */\r\n    irErrors?: ApiValidation | null;\r\n    /** Last successful status in Incomes Register */\r\n    irStatus?: ReportLogEventType | null;\r\n    /** Current schedule for the report. */\r\n    scheduledFor?: string | null;\r\n    /** Timestamp of the last action in IR. */\r\n    lastDeliveredAt?: string | null;\r\n    /** If true, the report has been modified after the last send operation. */\r\n    isModified?: boolean | null;\r\n    /** Readonly workflow data, which is exposed to API. */\r\n    workflowData?: WorkflowData | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Record data */\r\nexport interface DeliveryData {\r\n    /** Time of record creation */\r\n    timestamp?: string | null;\r\n    /** Data source */\r\n    source?: string | null;\r\n    /** Record type */\r\n    deliveryDataType?: DeliveryDataType | null;\r\n    /** Record owner's (payer's) record reference */\r\n    deliveryId?: string | null;\r\n    /** Rule for processing invalid data (reports) */\r\n    faultyControl?: FaultyControl | null;\r\n    /** Production environment */\r\n    productionEnvironment?: boolean | null;\r\n    /** Record owner */\r\n    deliveryDataOwner?: Id | null;\r\n    /** Record creator */\r\n    deliveryDataCreator?: Id | null;\r\n    /** Record submitter */\r\n    deliveryDataSender?: Id | null;\r\n    /** Contact persons for the record */\r\n    contactPersons?: ContactPerson[] | null;\r\n    /** Report date */\r\n    reportDate?: string | null;\r\n    /** Payer details */\r\n    payer?: Payer | null;\r\n    /** Reports data */\r\n    reports?: Report[] | null;\r\n}\r\n\r\n/** Salaxy data that can't be stored in payer summary report */\r\nexport interface PayerSummaryReportExtensions {\r\n    /** Employer's Id */\r\n    employerId?: string | null;\r\n    /** All calculations on which the report is based. */\r\n    calculationIds?: string[] | null;\r\n}\r\n\r\n/** Common base class / interface for data validation. */\r\nexport interface ApiValidation {\r\n    /** If true, the data is valid - no errors. */\r\n    readonly isValid?: boolean | null;\r\n    /** If true, has required fields missing data. */\r\n    readonly hasAllRequiredFields?: boolean | null;\r\n    /** Validation errors on invalid field values. \r\nNote that required fields missing error messages are not here. Only the invalid values. */\r\n    readonly errors?: ApiValidationError[] | null;\r\n}\r\n\r\n/** Log data from the successfull sending or cancellation. */\r\nexport interface ReportLogEntry {\r\n    /** Response date from the Incomes Register. */\r\n    irTimestamp?: string | null;\r\n    /** Event type: Sending or cancellation. */\r\n    eventType?: ReportLogEventType | null;\r\n    /** Our own report id. */\r\n    reportId?: string | null;\r\n    /** Generated id from the Incomes Register. */\r\n    irReportId?: string | null;\r\n    /** Delivery id. */\r\n    irDeliveryId?: string | null;\r\n    /** Response id. */\r\n    irResponseId?: string | null;\r\n    /** Version. */\r\n    irVersion?: number | null;\r\n    /** User who sent the report. */\r\n    user?: string | null;\r\n    /** Credential of the user. */\r\n    credential?: string | null;\r\n    /** Storage version id. */\r\n    versionId?: string | null;\r\n    /** Message for the event. */\r\n    message?: string | null;\r\n}\r\n\r\n/** Defines the data that IWorkflowItem must provide. */\r\nexport interface WorkflowData {\r\n    /** Workflow events for the item. */\r\n    events?: WorkflowEvent[] | null;\r\n}\r\n\r\n/** Employer Identifier */\r\nexport interface Id {\r\n    /** Identifier type */\r\n    type?: IdType | null;\r\n    /** Identifier\r\n\r\nIf the \"Identifier type\" is \"Business ID\", the identifier must exist (according to information from the Business Information System (YTJ)).\r\nIf the \"Identifier type\" is \"Finnish Personal Identification Number\", the identifier must exist (according to information from the Population Information System (VTJ)). */\r\n    code?: string | null;\r\n    /** Country code\r\n\r\nMandatory data if \"Identifier type\" is other than \"Business ID\" or \"Finnish Personal Identification Number\". */\r\n    countryCode?: string | null;\r\n    /** Country name\r\n\r\nMandatory data if \"Country code\" is \"99\". */\r\n    countryName?: string | null;\r\n}\r\n\r\nexport interface ContactPerson {\r\n    /** Name */\r\n    name?: string | null;\r\n    /** Telephone number */\r\n    telephone?: string | null;\r\n    /** E-mail address\r\n\r\nIf the ‘Reimbursement application data’ data group is specified for a paid absence and 1 or 2 as the ‘Payment data type’ even in a single report in a record, you must report at least one ‘Contact person for the record’ for whom the ‘E-mail address’ and ‘Field of responsibility’ data items have been specified. */\r\n    email?: string | null;\r\n    /** Field of responsibility\r\n\r\nIf the ‘Reimbursement application data’ data group is specified for a paid absence and 1 or 2 as the ‘Payment data type’ even in a single report in a record, you must report at least one ‘‘Contact person for the record’ for whom the ‘E-mail address’ and ‘Field of responsibility’ data items have been specified, with ‘Field of responsibility’ having the value 1 (Content issues). */\r\n    responsibilityCode?: ResponsibilityCode | null;\r\n}\r\n\r\n/** Payer details */\r\nexport interface Payer {\r\n    /** Payer identifiers */\r\n    payerIds?: Id[] | null;\r\n    /** Basic payer details */\r\n    payerBasic?: PayerBasic | null;\r\n    /** Payer's address */\r\n    address?: Address | null;\r\n    /** Payer's suborganisations */\r\n    subOrgs?: SubOrg[] | null;\r\n    /** Other payer details */\r\n    payerOther?: PayerOther | null;\r\n    /** Earnings-related pension insurances */\r\n    pensionInsurances?: PensionInsurance[] | null;\r\n    /** Occupational accident insurances */\r\n    accidentInsurances?: AccidentInsurance[] | null;\r\n}\r\n\r\n/** Report data */\r\nexport interface Report {\r\n    /** Service data */\r\n    reportData?: ReportData | null;\r\n    /** Reporting period */\r\n    paymentMonth?: PaymentMonth | null;\r\n    /** Income types */\r\n    transactions?: Transaction[] | null;\r\n}\r\n\r\n/** Validation errors used in API output. */\r\nexport interface ApiValidationError {\r\n    /** Full path to Name of the property / field (Member name in JSON).\r\nThis may be null/empty for type General. */\r\n    key?: string | null;\r\n    /** High level type: Specifies the relation to object and its Member. */\r\n    type: ApiValidationErrorType;\r\n    /** Validation error message in the requested language. */\r\n    msg: string;\r\n    /** Validation error long description in the requested language. */\r\n    description?: string | null;\r\n    /** Some error providers may have a unique technical code for error or validator */\r\n    code?: string | null;\r\n}\r\n\r\n/** Event in the workflow */\r\nexport interface WorkflowEvent {\r\n    /** Event-provider specific identifier for the event.\r\nFor deletable events, this should identify , but do NOT trust this to be 100% unique. */\r\n    id?: string | null;\r\n    /** Type of the event. This typically maps to parent-object specific enumeration. */\r\n    type?: string | null;\r\n    /** Message for backoffice purposes from the User or system that created the event. */\r\n    message?: string | null;\r\n    /** User Interface styling of the event: Indicates the severity for the end-user. */\r\n    ui?: WorkflowEventUi | null;\r\n    /** Features for this event. */\r\n    features?: Features[] | null;\r\n    /** UTC time for when the event occured. */\r\n    time?: string | null;\r\n    /** User or system that created the event. */\r\n    user?: string | null;\r\n    /** Credential of the user which is responsible of the event. */\r\n    assignedTo?: string | null;\r\n    /** Record attached to this event. */\r\n    record?: string | null;\r\n}\r\n\r\n/** Basic payer details */\r\nexport interface PayerBasic {\r\n    /** The payer does not have a customer ID\r\n\r\nMandatory data, if no identifiers have been specified in the \"Payer identifiers\" data group. */\r\n    missingId?: boolean | null;\r\n    /** Company name\r\n\r\nMandatory data in the following cases:\r\n• No identifier where the \"Identifier type\" is \"Business ID\" or \"Finnish Personal Identification Number\" has been specified in the \"Payer identifiers\" data group, and \"Last name\" and \"First name\" have not been specified.\r\n• The value of \"The payer does not have a customer ID\" is \"true\", and \"Last name\" and \"First name\" have not been specified. */\r\n    companyName?: string | null;\r\n    /** Last name\r\n\r\nMandatory data in the following cases:\r\n• No identifier where the \"Identifier type\" is \"Business ID\" or \"Finnish Personal Identification Number\" has been specified in the \"Payer identifiers\" data group, and \"Company name\" has not been specified.\r\n• The value of \"The payer does not have a customer ID\" is \"true\", and \"Company name\" has not been specified.\r\n• The value of \"Payer type\" is \"Temporary employer\", and \"Company name\" has not been specified. */\r\n    lastName?: string | null;\r\n    /** First name\r\n\r\nMandatory data in the following cases:\r\n• No identifier where the \"Identifier type\" is \"Business ID\" or \"Finnish Personal Identification Number\" has been specified in the \"Payer identifiers\" data group, and \"Company name\" has not been specified.\r\n• The value of \"The payer does not have a customer ID\" is \"true\", and \"Company name\" has not been specified.\r\n• The value of \"Payer type\" is \"Temporary employer\", and \"Company name\" has not been specified. */\r\n    firstName?: string | null;\r\n    /** Date of birth\r\n\r\nMandatory data in the following cases:\r\n• No identifier where the \"Identifier type\" is \"Finnish Personal Identification Number\" has been specified in the \"Payer identifiers\" data group, and \"Last name\" and \"First name\" have been specified.\r\n• The value of \"The payer does not have a customer ID\" is \"true\", and \"Last name\" and \"First name\" have been specified.\r\nThe date must not be later than the current date.\r\nThe date must not be earlier than 1 January 1800 */\r\n    birthDate?: string | null;\r\n    /** Contact language */\r\n    language?: Language | null;\r\n}\r\n\r\n/** Address */\r\nexport interface Address {\r\n    /** c/o */\r\n    co?: string | null;\r\n    /** Street address\r\n\r\nIf this data group is included, either \"Street address\" or \"P.O. Box\" must be specified.Both must not be entered. */\r\n    street?: string | null;\r\n    /** P.O. Box\r\n\r\nIf this data group is included, either \"Street address\" or \"P.O. Box\" must be specified.Both must not be entered. */\r\n    poBox?: string | null;\r\n    /** Postal code */\r\n    postalCode?: string | null;\r\n    /** City */\r\n    postOffice?: string | null;\r\n    /** Country code\r\n\r\nA two-character code in accordance with the ISO 3166 country codes.\r\nIf the country is unknown, the value \"99\" is entered. */\r\n    countryCode?: string | null;\r\n    /** Country name\r\n\r\nMandatory data if \"Country code\" is \"99\" */\r\n    countryName?: string | null;\r\n}\r\n\r\n/** Payer's suborganisations */\r\nexport interface SubOrg {\r\n    /** Suborganisation’s identifier type */\r\n    type?: PayerSubOrgType | null;\r\n    /** Suborganisation identifier */\r\n    code?: string | null;\r\n}\r\n\r\n/** Other payer details */\r\nexport interface PayerOther {\r\n    /** Payer types */\r\n    payerTypes?: PayerType[] | null;\r\n}\r\n\r\n/** Earnings-related pension insurances */\r\nexport interface PensionInsurance {\r\n    /** Pension provider code */\r\n    pensionProvIdCode?: PensionProvIdCode | null;\r\n    /** Pension policy number */\r\n    pensionPolicyNo?: string | null;\r\n}\r\n\r\n/** Occupational accident insurance If the \"Action type\" is \"Replacement report\", the data should match that of the report’s previous version. */\r\nexport interface AccidentInsurance {\r\n    /** Occupational accident insurance company identifier */\r\n    accInsProvId?: Id | null;\r\n    /** Occupational accident insurance policy number */\r\n    accInsPolicyNo?: string | null;\r\n}\r\n\r\n/** Service data */\r\nexport interface ReportData {\r\n    /** Action type */\r\n    actionCode?: ActionCode | null;\r\n    /** Incomes Register report reference */\r\n    irReportId?: string | null;\r\n    /** Report reference */\r\n    reportId?: string | null;\r\n    /** Report version number */\r\n    reportVersion?: number | null;\r\n}\r\n\r\n/** Reporting period */\r\nexport interface PaymentMonth {\r\n    /** Payment month */\r\n    month?: number | null;\r\n    /** Payment year */\r\n    year?: number | null;\r\n}\r\n\r\n/** Income type data */\r\nexport interface Transaction {\r\n    /** General details on the income type */\r\n    transactionBasic?: TransactionBasic | null;\r\n}\r\n\r\n/** General details on the income type */\r\nexport interface TransactionBasic {\r\n    /** Income type code */\r\n    summaryTransactionCode?: SummaryTransactionCode | null;\r\n    /** Amount\r\n\r\nMandatory data, if the \"Income type code\" is not \"101\" (No wages payable) */\r\n    amount?: number | null;\r\n}\r\n\r\n/** Api Schedule Object */\r\nexport interface IrApiScheduleObject {\r\n    /** Id of the object in the data storage to schedule */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    startAt?: string | null;\r\n    /** Schedule action to take. */\r\n    action?: IrScheduleAction | null;\r\n    /** User context information. */\r\n    userContext?: UserContext | null;\r\n}\r\n\r\n/** Current user context. */\r\nexport interface UserContext {\r\n    /** Owner for this data */\r\n    owner?: string | null;\r\n    /** Owner ID for this data */\r\n    ownerId?: string | null;\r\n    /** Partner ID for this data */\r\n    partnerId?: string | null;\r\n    /** Login partner ID for this data */\r\n    loginPartnerId?: string | null;\r\n    /** Credential ID for this data */\r\n    credentialId?: string | null;\r\n    /** Users scope, currently only 'admin' supported. */\r\n    scope?: string | null;\r\n}\r\n\r\n/** Version information for the API object. */\r\nexport interface VersionInfo {\r\n    /** Identifier for the version. */\r\n    versionId?: string | null;\r\n    /** Operation which created the version. */\r\n    operation?: string | null;\r\n    /** Date and time when the version was created. */\r\n    date?: string | null;\r\n    /** User account  who created the version. */\r\n    userAccount?: Avatar | null;\r\n}\r\n\r\n/** Defines an avatar for an account, profile etc. - mainly the image that should be shown, names and short description */\r\nexport interface Avatar {\r\n    /** Entity type: person/company */\r\n    entityType?: AvatarEntityType | null;\r\n    /** First name or company name */\r\n    firstName?: string | null;\r\n    /** Last name, for companies, this should be null */\r\n    lastName?: string | null;\r\n    /** Display name. For a person this is 'FirstName LastName' (auto-created). */\r\n    displayName?: string | null;\r\n    /** Sortable name for ordered lists etc. For a person this is 'LastName, FirstName' (auto-created).\r\nDepending on the data storage, this may be all-lowercase for easier sorting and search. */\r\n    sortableName?: string | null;\r\n    /** Type of the Avatar picture. */\r\n    pictureType?: AvatarPictureType | null;\r\n    /** Color - currently only used by type Icon */\r\n    color?: string | null;\r\n    /** Initials - currently only used by type Icon */\r\n    initials?: string | null;\r\n    /** URL of the picture if specified as picture (null in a case of type Icon) */\r\n    url?: string | null;\r\n    /** Short description of the user. \r\nThis may be overriden by a context specific value by the business logic. */\r\n    description?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\nexport interface PageResultOfPayerSummaryListItem {\r\n    items?: PayerSummaryListItem[] | null;\r\n    nextPageLink?: string | null;\r\n    count?: number | null;\r\n}\r\n\r\n/** Represents a single item in a list of payer summaries in the user interface. It contains all essential information of the report and is basis for searching, filtering and sorting. */\r\nexport interface PayerSummaryListItem {\r\n    /** The date when the object was created. */\r\n    createdAt?: string | null;\r\n    /** The time when the object was last updated. \r\nTypically this should be a logical update by user (UserUpdatedAt in DTO), not technical updates. */\r\n    updatedAt?: string | null;\r\n    /** Person GUID for the owner of the object. */\r\n    ownerId?: string | null;\r\n    /** Metadata for the owner */\r\n    ownerInfo?: AccountInIndex | null;\r\n    /** The main status depending on the type of the object. */\r\n    status?: PayerSummaryReportStatus | null;\r\n    /** The back office status depending on the type of the object. */\r\n    backOfficeStatus?: string | null;\r\n    /** When the event started. Typically, this is the CreatedAt date, but it may be something else. */\r\n    startAt?: string | null;\r\n    /** This is the end date of the event.\r\nTypically, it is the UserUpdatedAt date, but it may be something else - e.g PaidAt for the calculation. */\r\n    endAt?: string | null;\r\n    /** Gross salary if that is relevant to the transaction. */\r\n    grossSalary?: number | null;\r\n    /** This is the payment from the Owner point-of-view:\r\nTotal payment for the Employer and Net salary for the Worker in the case of a calculation.\r\nOnly add here the payment, if the payment is really made. */\r\n    payment?: number | null;\r\n    /** Estimated fee of the transaction to Palkkaus.fi. */\r\n    fee?: number | null;\r\n    /** The GUID for the other party. Currently, this is always the PersonID. */\r\n    otherId?: string | null;\r\n    /** The other party (usually a Person) that is involved in the event (e.g Worker if this is a Salary payment by Employer). */\r\n    otherPartyInfo?: AccountInIndex | null;\r\n    /** A very short description describing the object as an event. E.g. \"Paid salary\" */\r\n    shortText?: string | null;\r\n    /** Business object ids related to this object. E.g. calculations and payrolls in the payment. */\r\n    businessObjects?: string[] | null;\r\n    /** This is valid for calculations only. The estimated date of salary in worker. */\r\n    salaryDate?: string | null;\r\n    /** Business data to include further information of the object. */\r\n    data?: PayerSummaryData | null;\r\n    /** Version number. May be used in conflicts */\r\n    versionNumber?: number | null;\r\n    /** Salaxy uri of the resource. */\r\n    uri?: string | null;\r\n    /** Workflow flags for the object.\r\nOnly workflow events with API supported message types are listed. */\r\n    flags?: string[] | null;\r\n    /** Workflow messages for the object.\r\nOnly workflow events with API supported message types are listed.\r\nShown in format \"[MessageType]:[Message] ([User] at [UTC-time])\" */\r\n    messages?: string[] | null;\r\n    /** Sub category for the payload. E.g. Payment Category, MoneyTransfer Source. */\r\n    entityType?: string | null;\r\n    /** The date for the actual period for which this object is done. */\r\n    logicalDate?: string | null;\r\n    /** Reference information. E.g. Payment or MoneyTransfer reference number. */\r\n    reference?: string | null;\r\n    /** External id for the object in 3rd party system. */\r\n    externalId?: string | null;\r\n    /** Identifier of the object. */\r\n    id?: string | null;\r\n    /** Owner ID for this data */\r\n    owner?: string | null;\r\n    /** Indication that for the currently logged-in account, the data is generally read-only. */\r\n    isReadOnly?: boolean | null;\r\n    /** Primary partner information. Automatically updated from the storage container Partner. */\r\n    partner?: string | null;\r\n}\r\n\r\n/** Object that represents a Salaxy account. */\r\nexport interface AccountInIndex {\r\n    /** Avatar for the account */\r\n    avatar?: Avatar | null;\r\n    /** Official id of the person or company. */\r\n    officialId?: string | null;\r\n    /** Email address. */\r\n    email?: string | null;\r\n    /** Telephone number. */\r\n    telephone?: string | null;\r\n    /** Bank account number (IBAN) */\r\n    ibanNumber?: string | null;\r\n}\r\n\r\n/** Payer summary specific business data for index. */\r\nexport interface PayerSummaryData {\r\n    /** Contains the email or id of the responsible for the partner workflow event. */\r\n    partnerMessageAssignedTo?: string | null;\r\n    /** Current status in the Incomes Register. */\r\n    irStatus?: ReportLogEventType | null;\r\n    /** Date and time for the next scheduled delivery of the report. */\r\n    scheduledFor?: string | null;\r\n    /** Date and time for the first delivery of the report. */\r\n    firstDeliveredAt?: string | null;\r\n    /** Date and time for the last delivery of the report. */\r\n    lastDeliveredAt?: string | null;\r\n    /** Reported transaction code. */\r\n    transactionCode?: number | null;\r\n    /** Reported social security. */\r\n    socialSecurity?: number | null;\r\n    /** Reported social security deduction. */\r\n    socialSecurityDeduction?: number | null;\r\n}\r\n\r\nexport interface PayerSummaryNotification {\r\n    /** Taken schedule action. */\r\n    action?: ReportLogEventType | null;\r\n    /** Status response for the sent request. */\r\n    statusResponse?: StatusResponse | null;\r\n    /** Record data */\r\n    deliveryData?: DeliveryData | null;\r\n    /** Identifier of the object in the data storage. */\r\n    id?: string | null;\r\n}\r\n\r\n/** Processing feedback data */\r\nexport interface StatusResponse {\r\n    /** Record status */\r\n    deliveryDataStatus?: StatusResponseDeliveryDataStatus | null;\r\n    /** Incomes Register record reference\r\n\r\nIf the record has been saved in the Incomes Register, the reference assigned to the record by the Incomes Register is delivered in this element.The Incomes Register record reference uniquely identifies all records submitted to the Incomes Register.\r\nIf the record has not been saved in the Incomes Register, this data is blank. */\r\n    irDeliveryId?: string | null;\r\n    /** Approved items\r\n\r\nThe valid items submitted in the record are returned in this data group. */\r\n    validItems?: Item[] | null;\r\n    /** Rejected items \r\n\r\nThe invalid items submitted in the record and rejected on the basis of itemspecific errors are returned in this data group. If all items in the record are rejected on the basis of record-level errors, the rejected items are not returned in this data group. */\r\n    invalidItems?: Item[] | null;\r\n    /** Message-level errors\r\n\r\nThis data group is used to return technical and authorisation errors.\r\nIf message-level errors are detected in a record submitted to the Incomes Register, the record is not processed further in the Incomes Register. In addition to message-level errors, the processing feedback cannot therefore contain any other errors(record-level errors, and rejected items and the errors related to them). */\r\n    messageErrors?: ErrorInfo[] | null;\r\n    /** Record-level errors\r\n\r\nThis data group is used to return errors related to the contents of record-level data.\r\nRecord-level errors apply to all items in the record.If there are record-level errors in the record, all items of the record are invalid and will not be saved in the Incomes Register.In such a case, the invalid items are not separately delivered in the \"Rejected items\" data group. */\r\n    deliveryErrors?: ErrorInfo[] | null;\r\n    /** Incomes Register message reference */\r\n    irResponseId?: string | null;\r\n    /** Processing feedback timestamp */\r\n    irResponseTimestamp?: string | null;\r\n}\r\n\r\nexport interface Item {\r\n    /** Record submitter's reference\r\n\r\nThis element always appears in the data of an approved item. */\r\n    itemId?: string | null;\r\n    /** Incomes Register reference \r\n\r\nThis element always appears in the data of an approved item. */\r\n    irItemId?: string | null;\r\n    /** Report version number \r\n\r\nThe Incomes Register assigns version number 1 to a new report. The version number of a substitute report is the number of the substituted version + 1. */\r\n    itemVersion?: number | null;\r\n    /** Item Version specified */\r\n    itemVersionSpecified?: boolean | null;\r\n    /** Errors */\r\n    itemErrors?: ErrorInfo[] | null;\r\n}\r\n\r\n/** Error information */\r\nexport interface ErrorInfo {\r\n    /** Error code */\r\n    errorCode?: string | null;\r\n    /** Error code description */\r\n    errorMessage?: string | null;\r\n    /** Error details */\r\n    errorDetails?: string | null;\r\n}\r\n\r\n/** ActionCode enumeration */\r\nexport enum ActionCode {\r\n    NewReport = \"newReport\",\r\n    ReplacementReport = \"replacementReport\",\r\n}\r\n\r\n/** AddressType enumeration */\r\nexport enum AddressType {\r\n    AddressInHomeCountry = \"addressInHomeCountry\",\r\n    AddressInTheCountryOfWork = \"addressInTheCountryOfWork\",\r\n}\r\n\r\n/** AgeGroupCode enumeration */\r\nexport enum AgeGroupCode {\r\n    A = \"a\",\r\n    B = \"b\",\r\n    C = \"c\",\r\n    U = \"u\",\r\n}\r\n\r\n/** AllowanceCode enumeration */\r\nexport enum AllowanceCode {\r\n    MealAllowance = \"mealAllowance\",\r\n    PartialDailyAllowance = \"partialDailyAllowance\",\r\n    FullDailyAllowance = \"fullDailyAllowance\",\r\n    InternationalDailyAllowance = \"internationalDailyAllowance\",\r\n    TaxExemptReimbursementsAbroad = \"taxExemptReimbursementsAbroad\",\r\n}\r\n\r\n/** ApiValidationErrorType enumeration */\r\nexport enum ApiValidationErrorType {\r\n    General = \"general\",\r\n    Required = \"required\",\r\n    Invalid = \"invalid\",\r\n    Warning = \"warning\",\r\n}\r\n\r\n/** BenefitCode enumeration */\r\nexport enum BenefitCode {\r\n    AccommodationBenefit = \"accommodationBenefit\",\r\n    TelephoneBenefit = \"telephoneBenefit\",\r\n    MealBenefit = \"mealBenefit\",\r\n    OtherBenefits = \"otherBenefits\",\r\n}\r\n\r\n/** CarBenefitCode enumeration */\r\nexport enum CarBenefitCode {\r\n    LimitedCarBenefit = \"limitedCarBenefit\",\r\n    FullCarBenefit = \"fullCarBenefit\",\r\n}\r\n\r\n/** DeliveryDataType enumeration */\r\nexport enum DeliveryDataType {\r\n    EarningsPaymentReports = \"earningsPaymentReports\",\r\n    EmployersSeparateReports = \"employersSeparateReports\",\r\n    BenefitsPaymentReports = \"benefitsPaymentReports\",\r\n    RecordSubscription = \"recordSubscription\",\r\n    Messages = \"messages\",\r\n    CancellationOfEarningsPaymentReports = \"cancellationOfEarningsPaymentReports\",\r\n    CancellationOfEmployersSeparateReports = \"cancellationOfEmployersSeparateReports\",\r\n    CancellationOfBenefitsPaymentReports = \"cancellationOfBenefitsPaymentReports\",\r\n    CancellationOfARecordSubscription = \"cancellationOfARecordSubscription\",\r\n    CancellationOfARecordContainingEarningsPaymentReports = \"cancellationOfARecordContainingEarningsPaymentReports\",\r\n    CancellationOfARecordContainingEmployersSeparateReports = \"cancellationOfARecordContainingEmployersSeparateReports\",\r\n    CancellationOfARecordContainingBenefitsPaymentReports = \"cancellationOfARecordContainingBenefitsPaymentReports\",\r\n    CancellationOfARecordContainingARecordSubscription = \"cancellationOfARecordContainingARecordSubscription\",\r\n}\r\n\r\n/** EmploymentCode enumeration */\r\nexport enum EmploymentCode {\r\n    FullTime = \"fullTime\",\r\n    PartTime = \"partTime\",\r\n    NotAvailable = \"notAvailable\",\r\n}\r\n\r\n/** EmploymentEndingCode enumeration */\r\nexport enum EmploymentEndingCode {\r\n    EmployeesResignation = \"employeesResignation\",\r\n    Other = \"other\",\r\n    TerminationGroundsRelatedToEmployeesPerson = \"terminationGroundsRelatedToEmployeesPerson\",\r\n    FinancialAndProductionRelatedGrounds = \"financialAndProductionRelatedGrounds\",\r\n    JointAgreement = \"jointAgreement\",\r\n    Retirement = \"retirement\",\r\n    TerminationOfaFixedTermEmployment = \"terminationOfaFixedTermEmployment\",\r\n}\r\n\r\n/** EmploymentEndingType enumeration */\r\nexport enum EmploymentEndingType {\r\n    KevaCodes = \"kevaCodes\",\r\n    BankOfFinlandCodes = \"bankOfFinlandCodes\",\r\n    IncomesRegisterCodes = \"incomesRegisterCodes\",\r\n}\r\n\r\n/** ExceptionCode enumeration */\r\nexport enum ExceptionCode {\r\n    NoObligationToSocialInsurance = \"noObligationToSocialInsurance\",\r\n    NoObligationToHealthInsurance = \"noObligationToHealthInsurance\",\r\n    NoObligationToEarningsRelatedPensionInsurance = \"noObligationToEarningsRelatedPensionInsurance\",\r\n    NoObligationToAccidentAndOccupationalDiseaseInsurance = \"noObligationToAccidentAndOccupationalDiseaseInsurance\",\r\n    NoObligationToUnemploymentInsurance = \"noObligationToUnemploymentInsurance\",\r\n    NotSubjectToSocialInsurance = \"notSubjectToSocialInsurance\",\r\n    NotSubjectToEarningsRelatedPensionInsurance = \"notSubjectToEarningsRelatedPensionInsurance\",\r\n    NotSubjectToAccidentAndOccupationalDiseaseInsurance = \"notSubjectToAccidentAndOccupationalDiseaseInsurance\",\r\n    NotSubjectToUnemploymentInsurance = \"notSubjectToUnemploymentInsurance\",\r\n    NotSubjectToHealthInsurance = \"notSubjectToHealthInsurance\",\r\n    VoluntaryEarningsRelatedPensionInsurance = \"voluntaryEarningsRelatedPensionInsurance\",\r\n}\r\n\r\n/** FaultyControl enumeration */\r\nexport enum FaultyControl {\r\n    OnlyInvalidItems = \"onlyInvalidItems\",\r\n    EntireRecordIsRejected = \"entireRecordIsRejected\",\r\n}\r\n\r\n/** Gender enumeration */\r\nexport enum Gender {\r\n    Male = \"male\",\r\n    Female = \"female\",\r\n}\r\n\r\n/** IdType enumeration */\r\nexport enum IdType {\r\n    BusinessId = \"businessId\",\r\n    PersonalIdentificationNumber = \"personalIdentificationNumber\",\r\n    Vat = \"vat\",\r\n    Giin = \"giin\",\r\n    TaxIdentificationNumber = \"taxIdentificationNumber\",\r\n    FinnishTradeRegistrationNumber = \"finnishTradeRegistrationNumber\",\r\n    ForeignBusinessRegistrationNumber = \"foreignBusinessRegistrationNumber\",\r\n    ForeignPersonalIdentificationNumber = \"foreignPersonalIdentificationNumber\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** InsuranceCode enumeration */\r\nexport enum InsuranceCode {\r\n    SubjectToSocialInsuranceContributions = \"subjectToSocialInsuranceContributions\",\r\n    SubjectToEarningsRelatedPensionInsuranceContribution = \"subjectToEarningsRelatedPensionInsuranceContribution\",\r\n    SubjectToHealthInsuranceContribution = \"subjectToHealthInsuranceContribution\",\r\n    SubjectToUnemploymentInsuranceContribution = \"subjectToUnemploymentInsuranceContribution\",\r\n    SubjectToAccidentInsuranceAndOccupationalDiseaseInsuranceContribution = \"subjectToAccidentInsuranceAndOccupationalDiseaseInsuranceContribution\",\r\n}\r\n\r\n/** IrScheduleAction enumeration */\r\nexport enum IrScheduleAction {\r\n    Send = \"send\",\r\n    Cancel = \"cancel\",\r\n}\r\n\r\n/** Language enumeration */\r\nexport enum Language {\r\n    Fi = \"fi\",\r\n    Sv = \"sv\",\r\n    En = \"en\",\r\n}\r\n\r\n/** PaidAbsenceCauseCode enumeration */\r\nexport enum PaidAbsenceCauseCode {\r\n    Illness = \"illness\",\r\n    PartTimeSickLeave = \"partTimeSickLeave\",\r\n    ParentalLeave = \"parentalLeave\",\r\n    SpecialMaternityLeave = \"specialMaternityLeave\",\r\n    Rehabilitation = \"rehabilitation\",\r\n    ChildIllness = \"childIllness\",\r\n    PartTimeChildCareLeave = \"partTimeChildCareLeave\",\r\n    Training = \"training\",\r\n    LeaveOfAbsence = \"leaveOfAbsence\",\r\n    MilitaryRefresherTraining = \"militaryRefresherTraining\",\r\n    MidWeekHoliday = \"midWeekHoliday\",\r\n    AccruedHoliday = \"accruedHoliday\",\r\n    OccupationalAccident = \"occupationalAccident\",\r\n    AnnualLeave = \"annualLeave\",\r\n    PartTimeAbsenceDueToRehabilitation = \"partTimeAbsenceDueToRehabilitation\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** PayerType enumeration */\r\nexport enum PayerType {\r\n    PublicSector = \"publicSector\",\r\n    Household = \"household\",\r\n    TemporaryEmployer = \"temporaryEmployer\",\r\n    ForeignEmployer = \"foreignEmployer\",\r\n    State = \"state\",\r\n    UnincorporatedStateEnterpriseOrGovernmentalInstitution = \"unincorporatedStateEnterpriseOrGovernmentalInstitution\",\r\n    SpecialisedAgency = \"specialisedAgency\",\r\n    ForeignGroupCompany = \"foreignGroupCompany\",\r\n    PoolOfHouseholdEmployers = \"poolOfHouseholdEmployers\",\r\n}\r\n\r\n/** PayerSubOrgType enumeration */\r\nexport enum PayerSubOrgType {\r\n    KevasSubmitterCodes = \"kevasSubmitterCodes\",\r\n    PayersOwnCodes = \"payersOwnCodes\",\r\n    GovernmentAgencyIdentifier = \"governmentAgencyIdentifier\",\r\n}\r\n\r\n/** PayerSummaryReportStatus enumeration */\r\nexport enum PayerSummaryReportStatus {\r\n    New = \"new\",\r\n    Scheduled = \"scheduled\",\r\n    Succeeded = \"succeeded\",\r\n    Canceled = \"canceled\",\r\n    Error = \"error\",\r\n    Invalid = \"invalid\",\r\n}\r\n\r\n/** PaymentType enumeration */\r\nexport enum PaymentType {\r\n    Monthly = \"monthly\",\r\n    Hourly = \"hourly\",\r\n    ContractPay = \"contractPay\",\r\n}\r\n\r\n/** PensionActCode enumeration */\r\nexport enum PensionActCode {\r\n    EmployeesEarningsRelatedPensionInsurance = \"employeesEarningsRelatedPensionInsurance\",\r\n    PensionInsuranceForFarmers = \"pensionInsuranceForFarmers\",\r\n    PensionInsuranceForTheSelfEmployed = \"pensionInsuranceForTheSelfEmployed\",\r\n}\r\n\r\n/** PensionProvIdCode enumeration */\r\nexport enum PensionProvIdCode {\r\n    None = \"none\",\r\n    FinnishCentreForPensions = \"finnishCentreForPensions\",\r\n    ClergyOfTheOrthodoxChurch = \"clergyOfTheOrthodoxChurch\",\r\n    KevaMemberOrganisations = \"kevaMemberOrganisations\",\r\n    KevaÅlandLandskapsregeringsPensionssystem = \"kevaÅlandLandskapsregeringsPensionssystem\",\r\n    KevaChurch = \"kevaChurch\",\r\n    BankOfFinland = \"bankOfFinland\",\r\n    KevaKelaEmploymentPensions = \"kevaKelaEmploymentPensions\",\r\n    KevaState = \"kevaState\",\r\n    Seafarers = \"seafarers\",\r\n    Farmers = \"farmers\",\r\n    Alandia = \"alandia\",\r\n    Ilmarinen = \"ilmarinen\",\r\n    Elo = \"elo\",\r\n    Varma = \"varma\",\r\n    Veritas = \"veritas\",\r\n    Etera = \"etera\",\r\n    UPM = \"uPM\",\r\n    Sanoma = \"sanoma\",\r\n    Sandvik = \"sandvik\",\r\n    Kontino = \"kontino\",\r\n    Yleisradio = \"yleisradio\",\r\n    ABB = \"aBB\",\r\n    LFashionGroup = \"lFashionGroup\",\r\n    Honeywell = \"honeywell\",\r\n    Telia = \"telia\",\r\n    YaraSuomi = \"yaraSuomi\",\r\n    Orion = \"orion\",\r\n    Valio = \"valio\",\r\n    OP = \"oP\",\r\n    Verso = \"verso\",\r\n    Apteekkien = \"apteekkien\",\r\n    Viabek = \"viabek\",\r\n    Reka = \"reka\",\r\n}\r\n\r\n/** ProfessionType enumeration */\r\nexport enum ProfessionType {\r\n    StatisticsFinland = \"statisticsFinland\",\r\n    Keva = \"keva\",\r\n    BankOfFinland = \"bankOfFinland\",\r\n    Trafi = \"trafi\",\r\n}\r\n\r\n/** RefPaymentType enumeration */\r\nexport enum RefPaymentType {\r\n    EarningsRelatedPensionProvider = \"earningsRelatedPensionProvider\",\r\n}\r\n\r\n/** ReimbPaymentType enumeration */\r\nexport enum ReimbPaymentType {\r\n    KelaDailyAllowanceApplication = \"kelaDailyAllowanceApplication\",\r\n    KelaFamilyLeaveCompensation = \"kelaFamilyLeaveCompensation\",\r\n}\r\n\r\n/** RemunerationCode enumeration */\r\nexport enum RemunerationCode {\r\n    DailyAllowance = \"dailyAllowance\",\r\n    AccommodationBenefit = \"accommodationBenefit\",\r\n    CarBenefit = \"carBenefit\",\r\n    OtherBenefit = \"otherBenefit\",\r\n}\r\n\r\n/** ReportLogEventType enumeration */\r\nexport enum ReportLogEventType {\r\n    Undefined = \"undefined\",\r\n    Sent = \"sent\",\r\n    Canceled = \"canceled\",\r\n    Error = \"error\",\r\n}\r\n\r\n/** ResponsibilityCode enumeration */\r\nexport enum ResponsibilityCode {\r\n    ContentIssues = \"contentIssues\",\r\n    TechnicalIssues = \"technicalIssues\",\r\n}\r\n\r\n/** SummaryTransactionCode enumeration */\r\nexport enum SummaryTransactionCode {\r\n    Undefined = \"undefined\",\r\n    NoWagesPayable = \"noWagesPayable\",\r\n    EmployersHealthInsuranceContribution = \"employersHealthInsuranceContribution\",\r\n    DeductionsToBeMadeFromTheEmployersHealthInsuranceContribution = \"deductionsToBeMadeFromTheEmployersHealthInsuranceContribution\",\r\n}\r\n\r\n/** TermCode enumeration */\r\nexport enum TermCode {\r\n    UntilFurtherNotice = \"untilFurtherNotice\",\r\n    FixedTerm = \"fixedTerm\",\r\n}\r\n\r\n/** TransactionCode enumeration */\r\nexport enum TransactionCode {\r\n    Unknown = \"unknown\",\r\n    Ignored = \"ignored\",\r\n    TimeRatePay = \"timeRatePay\",\r\n    InitiativeFee = \"initiativeFee\",\r\n    BonusPay = \"bonusPay\",\r\n    ComplementaryWagePaidDuringBenefitPeriod = \"complementaryWagePaidDuringBenefitPeriod\",\r\n    EmergencyWorkCompensation = \"emergencyWorkCompensation\",\r\n    EveningWorkCompensation = \"eveningWorkCompensation\",\r\n    EveningShiftAllowance = \"eveningShiftAllowance\",\r\n    NoticePeriodCompensation = \"noticePeriodCompensation\",\r\n    KilometreAllowanceTaxable = \"kilometreAllowanceTaxable\",\r\n    MeetingFee = \"meetingFee\",\r\n    SaturdayPay = \"saturdayPay\",\r\n    ExtraWorkPremium = \"extraWorkPremium\",\r\n    HolidayBonus = \"holidayBonus\",\r\n    LectureFee = \"lectureFee\",\r\n    CompensationForTrustPosition = \"compensationForTrustPosition\",\r\n    OtherCompensation = \"otherCompensation\",\r\n    WaitingTimeCompensation = \"waitingTimeCompensation\",\r\n    WorkingConditionCompensation = \"workingConditionCompensation\",\r\n    PartialPayDuringSickLeave = \"partialPayDuringSickLeave\",\r\n    Commission = \"commission\",\r\n    SundayWorkCompensation = \"sundayWorkCompensation\",\r\n    BenefitArisingFromSyntheticOption = \"benefitArisingFromSyntheticOption\",\r\n    PerformanceBonus = \"performanceBonus\",\r\n    MonetaryCompensationFromWorkingTimeBank = \"monetaryCompensationFromWorkingTimeBank\",\r\n    CompensationForAccruedTimeOff = \"compensationForAccruedTimeOff\",\r\n    ShareIssueForEmployees = \"shareIssueForEmployees\",\r\n    ContractPay = \"contractPay\",\r\n    DamagesInConjunctionWithTermination = \"damagesInConjunctionWithTermination\",\r\n    StandByCompensation = \"standByCompensation\",\r\n    VoluntaryCompensationInConjunctionWithTermination = \"voluntaryCompensationInConjunctionWithTermination\",\r\n    WeeklyRestCompensation = \"weeklyRestCompensation\",\r\n    ProfitSharingBonus = \"profitSharingBonus\",\r\n    AnnualHolidayCompensation = \"annualHolidayCompensation\",\r\n    OvertimeCompensation = \"overtimeCompensation\",\r\n    NightWorkAllowance = \"nightWorkAllowance\",\r\n    NightShiftCompensation = \"nightShiftCompensation\",\r\n    OtherRegularCompensation = \"otherRegularCompensation\",\r\n    CompensationForUnusedCompensatoryLeave = \"compensationForUnusedCompensatoryLeave\",\r\n    AccommodationBenefit = \"accommodationBenefit\",\r\n    InterestBenefitForHousingLoan = \"interestBenefitForHousingLoan\",\r\n    MealAllowance = \"mealAllowance\",\r\n    CarBenefit = \"carBenefit\",\r\n    CompensationForGoverningBodyMembership = \"compensationForGoverningBodyMembership\",\r\n    ShareOfReserveDrawnFromPersonnelFund = \"shareOfReserveDrawnFromPersonnelFund\",\r\n    MonetaryGiftForEmployees = \"monetaryGiftForEmployees\",\r\n    KilometreAllowanceTaxExempt = \"kilometreAllowanceTaxExempt\",\r\n    TreatmentFeeForMunicipalVeterinarian = \"treatmentFeeForMunicipalVeterinarian\",\r\n    CompensationForUseEarnedIncome = \"compensationForUseEarnedIncome\",\r\n    CompensationForUseCapitalIncome = \"compensationForUseCapitalIncome\",\r\n    OtherTaxableBenefitForEmployees = \"otherTaxableBenefitForEmployees\",\r\n    OtherTaxableIncomeDeemedEarnedIncome = \"otherTaxableIncomeDeemedEarnedIncome\",\r\n    OtherFringeBenefit = \"otherFringeBenefit\",\r\n    KinshipCarersFee = \"kinshipCarersFee\",\r\n    StockOptions = \"stockOptions\",\r\n    WagesPaidBySubstitutePayerIncludingSocialInsurance = \"wagesPaidBySubstitutePayerIncludingSocialInsurance\",\r\n    WagesPaidBySubstitutePayerIncludingEarningsRelatedPensionInsurance = \"wagesPaidBySubstitutePayerIncludingEarningsRelatedPensionInsurance\",\r\n    WagesPaidBySubstitutePayerIncludingUnemploymentInsurance = \"wagesPaidBySubstitutePayerIncludingUnemploymentInsurance\",\r\n    WagesPaidBySubstitutePayerIncludingAccidentAndOccupationalDiseaseInsurance = \"wagesPaidBySubstitutePayerIncludingAccidentAndOccupationalDiseaseInsurance\",\r\n    WagesPaidBySubstitutePayerIncludingHealthInsurance = \"wagesPaidBySubstitutePayerIncludingHealthInsurance\",\r\n    CompensationForEmployeeInvention = \"compensationForEmployeeInvention\",\r\n    ReimbursementOfPrivateCaretakersExpenses = \"reimbursementOfPrivateCaretakersExpenses\",\r\n    PrivateCaretakersFee = \"privateCaretakersFee\",\r\n    ReimbursementOfFamilyDayCareProvidersExpenses = \"reimbursementOfFamilyDayCareProvidersExpenses\",\r\n    TelephoneBenefit = \"telephoneBenefit\",\r\n    DailyAllowance = \"dailyAllowance\",\r\n    CapitalIncomePayment = \"capitalIncomePayment\",\r\n    MealBenefit = \"mealBenefit\",\r\n    ReimbursementOfCostsPaidToConciliator = \"reimbursementOfCostsPaidToConciliator\",\r\n    NonWageCompensationForWork = \"nonWageCompensationForWork\",\r\n    SupplementaryDailyAllowancePaidByEmployerSpecificHealthInsuranceFund = \"supplementaryDailyAllowancePaidByEmployerSpecificHealthInsuranceFund\",\r\n    PensionPaidByEmployer = \"pensionPaidByEmployer\",\r\n    DividendsBasedOnWages = \"dividendsBasedOnWages\",\r\n    DividendsBasedOnNonWage = \"dividendsBasedOnNonWage\",\r\n    EmployerSubsidisedCommuterTicketTaxExempt = \"employerSubsidisedCommuterTicketTaxExempt\",\r\n    EmployerSubsidisedCommuterTicketTaxable = \"employerSubsidisedCommuterTicketTaxable\",\r\n    EmployeeStockOption = \"employeeStockOption\",\r\n    WagesTransferredToAthletesSpecialFund = \"wagesTransferredToAthletesSpecialFund\",\r\n    WagesPaidFromAthletesSpecialFund = \"wagesPaidFromAthletesSpecialFund\",\r\n    WagesForInsurancePurposes = \"wagesForInsurancePurposes\",\r\n    TaxableReimbursementOfExpenses = \"taxableReimbursementOfExpenses\",\r\n    PrivateDayCareAllowanceMunicipalSupplement = \"privateDayCareAllowanceMunicipalSupplement\",\r\n    PrivateDayCareAllowanceWages = \"privateDayCareAllowanceWages\",\r\n    PrivateDayCareAllowanceNonWage = \"privateDayCareAllowanceNonWage\",\r\n    KilometreAllowancePaidByNonProfitOrganisation = \"kilometreAllowancePaidByNonProfitOrganisation\",\r\n    DailyAllowancePaidByNonProfitOrganisation = \"dailyAllowancePaidByNonProfitOrganisation\",\r\n    UnjustEnrichment = \"unjustEnrichment\",\r\n    EmployeeStockOptionLowerMarketPrice = \"employeeStockOptionLowerMarketPrice\",\r\n    RoyaltyPaidToNonResidentTaxpayer = \"royaltyPaidToNonResidentTaxpayer\",\r\n    BicycleBenefitTaxExempt = \"bicycleBenefitTaxExempt\",\r\n    BicycleBenefitTaxable = \"bicycleBenefitTaxable\",\r\n    ConditionalStockOptions = \"conditionalStockOptions\",\r\n    CopyrightRoyaltiesEarnedIncome = \"copyrightRoyaltiesEarnedIncome\",\r\n    StockGrantPaidInMoney = \"stockGrantPaidInMoney\",\r\n    EmployeeStockOptionPaidInMoney = \"employeeStockOptionPaidInMoney\",\r\n    EarningsFromJuELEmployerToLightEntrepreneur = \"earningsFromJuELEmployerToLightEntrepreneur\",\r\n    CompensationCollectedForCarBenefit = \"compensationCollectedForCarBenefit\",\r\n    WithholdingTax = \"withholdingTax\",\r\n    ElectedOfficialFee = \"electedOfficialFee\",\r\n    TaxAtSource = \"taxAtSource\",\r\n    TaxAtSourceDeduction = \"taxAtSourceDeduction\",\r\n    WagesPaid = \"wagesPaid\",\r\n    ReimbursementCollectedForOtherFringeBenefits = \"reimbursementCollectedForOtherFringeBenefits\",\r\n    OtherItemDeductibleFromNetWage = \"otherItemDeductibleFromNetWage\",\r\n    NetWage = \"netWage\",\r\n    EmployerPaidPremiumForCollectiveAdditionalPensionInsurance = \"employerPaidPremiumForCollectiveAdditionalPensionInsurance\",\r\n    EmployerPaidPremiumForCollectiveAdditionalPensionInsuranceEmployeesContribution = \"employerPaidPremiumForCollectiveAdditionalPensionInsuranceEmployeesContribution\",\r\n    EmployeesHealthInsuranceContribution = \"employeesHealthInsuranceContribution\",\r\n    EmployeesPensionInsuranceContribution = \"employeesPensionInsuranceContribution\",\r\n    EmployeesUnemploymentInsuranceContribution = \"employeesUnemploymentInsuranceContribution\",\r\n    ReimbursementForEmployerSubsidisedCommuterTicket = \"reimbursementForEmployerSubsidisedCommuterTicket\",\r\n    TaxPaidAbroad = \"taxPaidAbroad\",\r\n    Distraint = \"distraint\",\r\n    VoluntaryIndividualPensionInsurancePremium = \"voluntaryIndividualPensionInsurancePremium\",\r\n    DeductionBeforeWithholding = \"deductionBeforeWithholding\",\r\n    ReimbursementCollectedForBicycleBenefit = \"reimbursementCollectedForBicycleBenefit\",\r\n}\r\n\r\n/** UnpaidAbsenceCauseCode enumeration */\r\nexport enum UnpaidAbsenceCauseCode {\r\n    Illness = \"illness\",\r\n    PartTimeSickLeave = \"partTimeSickLeave\",\r\n    ParentalLeave = \"parentalLeave\",\r\n    SpecialMaternityLeave = \"specialMaternityLeave\",\r\n    Rehabilitation = \"rehabilitation\",\r\n    ChildIllness = \"childIllness\",\r\n    PartTimeChildCareLeave = \"partTimeChildCareLeave\",\r\n    Training = \"training\",\r\n    JobAlternationLeave = \"jobAlternationLeave\",\r\n    StudyLeave = \"studyLeave\",\r\n    IndustrialAction = \"industrialAction\",\r\n    InterruptionInWorkProvision = \"interruptionInWorkProvision\",\r\n    LeaveOfAbsence = \"leaveOfAbsence\",\r\n    MilitaryRefresherTraining = \"militaryRefresherTraining\",\r\n    MilitaryService = \"militaryService\",\r\n    LayOff = \"layOff\",\r\n    ChildCareLeave = \"childCareLeave\",\r\n    Other = \"other\",\r\n}\r\n\r\n/** WageUnitCode enumeration */\r\nexport enum WageUnitCode {\r\n    Hour = \"hour\",\r\n    Day = \"day\",\r\n    Week = \"week\",\r\n    Period = \"period\",\r\n}\r\n\r\nexport enum WorkflowEventUi {\r\n    Default = \"default\",\r\n    Primary = \"primary\",\r\n    Success = \"success\",\r\n    Info = \"info\",\r\n    Warning = \"warning\",\r\n    Danger = \"danger\",\r\n}\r\n\r\nexport enum Features {\r\n    None = \"none\",\r\n    IsActive = \"isActive\",\r\n    IsEditable = \"isEditable\",\r\n    IsRemovable = \"isRemovable\",\r\n    IsOnHold = \"isOnHold\",\r\n}\r\n\r\nexport enum AvatarEntityType {\r\n    Undefined = \"undefined\",\r\n    Person = \"person\",\r\n    Company = \"company\",\r\n    PersonCreatedByEmployer = \"personCreatedByEmployer\",\r\n    Partner = \"partner\",\r\n}\r\n\r\nexport enum AvatarPictureType {\r\n    Icon = \"icon\",\r\n    Uploaded = \"uploaded\",\r\n    Gravatar = \"gravatar\",\r\n}\r\n\r\nexport enum StatusResponseDeliveryDataStatus {\r\n    Unknown = \"unknown\",\r\n    Received = \"received\",\r\n    InProcess = \"inProcess\",\r\n    Valid = \"valid\",\r\n    RejectedAtReception = \"rejectedAtReception\",\r\n    RejectedDuringProcessing = \"rejectedDuringProcessing\",\r\n    Cancelled = \"cancelled\",\r\n}\r\n\r\n}","/**\r\n * Type of authorizatiopn PDF file\r\n */\r\nexport enum AuthorizationPdfType  {\r\n  /**\r\n   * Generic PDF template for Employer / Worker\r\n   */\r\n  Person = \"person\",\r\n  /**\r\n   * Company authorization (employer).\r\n   */\r\n  Company = \"company\"\r\n}","/** Type of the account to be created. */\r\nexport enum WebSiteAccountType {\r\n  None = \"none\",\r\n  Household = \"household\",\r\n  Worker = \"worker\",\r\n  Company = \"company\"\r\n}","/** TimesheetInput modification status */\r\nexport enum TimesheetInputModification {\r\n  /** modification status create */\r\n  CREATE  = \"create\",\r\n  /** modification status update */\r\n  UPDATE = \"update\",\r\n  /** modification status delete */\r\n  DELETE = \"delete\"\r\n}","/* eslint-disable */\r\n\r\n\r\n/**\r\n * Income types code-generated from the server.\r\n *\r\n * @generator https://test-ir.salaxy.com/v01/api/codes/incometype\r\n * Fetch this data from https://test-ir.salaxy.com/v01/api/codes/incometype\r\n * There is no automatic fetching because the data updated quite seldomly\r\n */\r\nexport const incomeTypeCodes =\r\n[\r\n  {\r\n    \"code\": 101,\r\n    \"nameEn\": \"Total wages\",\r\n    \"nameFi\": \"Palkka yhteissumma\",\r\n    \"nameSv\": \"Lön totalt\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": null,\r\n    \"notSupportedError\": \"Reporting method 1 (codes 101-106) is not supported in this version\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Ei käytössä: Palkkaus.fi-palvelussa ei käytetä ilmoitustapaa 1.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 102,\r\n    \"nameEn\": \"Total wages subject to earnings-related pension insurance contribution \",\r\n    \"nameFi\": \"Palkkasumma, joka on työeläkevakuutusmaksun alainen \",\r\n    \"nameSv\": \"Lönesumma som omfattas av arbetspensionsförsäkringsavgiften \",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": null,\r\n    \"notSupportedError\": \"Reporting method 1 (codes 101-106) is not supported in this version\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Ei käytössä: Palkkaus.fi-palvelussa ei käytetä ilmoitustapaa 1.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 103,\r\n    \"nameEn\": \"Total wages subject to social insurance contributions\",\r\n    \"nameFi\": \"Palkkasumma, joka on sosiaalivakuutusmaksujen alainen\",\r\n    \"nameSv\": \"Lönesumma som omfattas av socialförsäkringsavgifter\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": null,\r\n    \"notSupportedError\": \"Reporting method 1 (codes 101-106) is not supported in this version\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Ei käytössä: Palkkaus.fi-palvelussa ei käytetä ilmoitustapaa 1.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 104,\r\n    \"nameEn\": \"Total wages subject to health insurance contribution\",\r\n    \"nameFi\": \"Palkkasumma, joka on sairausvakuutusmaksun alainen\",\r\n    \"nameSv\": \"Lönesumma som omfattas av sjukförsäkringsavgiften\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": null,\r\n    \"notSupportedError\": \"Reporting method 1 (codes 101-106) is not supported in this version\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Ei käytössä: Palkkaus.fi-palvelussa ei käytetä ilmoitustapaa 1.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 105,\r\n    \"nameEn\": \"Total wages subject to unemployment insurance contribution\",\r\n    \"nameFi\": \"Palkkasumma, joka on työttömyysvakuutusmaksun alainen\",\r\n    \"nameSv\": \"Lönesumma som omfattas av arbetslöshetsförsäkringsavgiften\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": null,\r\n    \"notSupportedError\": \"Reporting method 1 (codes 101-106) is not supported in this version\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Ei käytössä: Palkkaus.fi-palvelussa ei käytetä ilmoitustapaa 1.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 106,\r\n    \"nameEn\": \"Total wages subject to accident and occupational disease insurance contribution\",\r\n    \"nameFi\": \"Palkkasumma, joka on työtapaturma- ja ammattitautivakuutusmaksun alainen\",\r\n    \"nameSv\": \"Lönesumma som omfattas av arbetsolycksfalls- och yrkessjukdomsförsäkringsavgiften\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": null,\r\n    \"notSupportedError\": \"Reporting method 1 (codes 101-106) is not supported in this version\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Ei käytössä: Palkkaus.fi-palvelussa ei käytetä ilmoitustapaa 1.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 201,\r\n    \"nameEn\": \"Time-rate pay\",\r\n    \"nameFi\": \"Aikapalkka\",\r\n    \"nameSv\": \"Tidlön\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"timeRatePay\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Wages paid based on the time worked. Time-rate\\r\\npay can be defined for a calendar month, for example.\",\r\n    \"descriptionFi\": \"Palkka, jota maksetaan työhön käytetyn ajan perusteella. Aikapalkka voidaan määritellä esimerkiksi kalenterikuukaudelle.\",\r\n    \"descriptionSv\": \"Lön som betalas på basis av arbetstiden. Tidlön kan fastställas t.ex. för en kalendermånad.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and employer's social insurance\\r\\ncontributions paid from time-rate pay.\",\r\n    \"taxAndSideCostsDescrFi\": \"Aikapalkasta toimitetaan ennakonpidätys ja maksetaan työnantajan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"På tidlön verkställs förskottsinnehållning och betalas arbetsgivares socialförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/wages\"\r\n    ],\r\n    \"calcGrouping\": \"baseSalary\"\r\n  },\r\n  {\r\n    \"code\": 202,\r\n    \"nameEn\": \"Initiative fee\",\r\n    \"nameFi\": \"Aloitepalkkio\",\r\n    \"nameSv\": \"Initiativarvode\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"initiativeFee\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"One-off remuneration paid to the originator of an initiative related to the development of operations or\\r\\na product, for example.\",\r\n    \"descriptionFi\": \"Kertapalkkio, joka maksetaan aloitteen tekijälle esimerkiksi toiminnan tai tuotteen kehittämiseen liittyvästä aloitteesta.\",\r\n    \"descriptionSv\": \"Engångsersättning som betalas till initiativtagare t.ex. i samband med utveckling av verksamheten eller produkter\",\r\n    \"taxAndSideCostsDescrEn\": \"If the initiative fee is related to work agreed in the\\r\\nemployment contract, the fee is treated as wages,\\r\\ni.e., in addition to withholding, social insurance contributions are paid from the fee.\\r\\nIf the recipient of the initiative fee is not employed\\r\\nby the payer, or the initiative is not related to the\\r\\nwork agreed in the employee's employment contract, no social insurance contributions are paid for\\r\\nthe fee. In this kind of situation, tax is withheld from\\r\\nthe initiative fee, unless the recipient of the initiative\\r\\nfee is registered in the Prepayment Register.\\r\\nBy default, this income type is subject to social insurance contributions.\\r\\nIn an exceptional case where the initiative fee is\\r\\nnot subject to the above-mentioned contributions,\\r\\nthe payer reports the insurance information separately.\",\r\n    \"taxAndSideCostsDescrFi\": \"Jos aloitepalkkio liittyy työsopimuksessa sovittuun työhön, palkkiota käsitellään palkkana eli ennakonpidätyksen toimittamisen lisäksi palkkiosta maksetaan sosiaalivakuutusmaksut.\\r\\n\\r\\nJos aloitepalkkion saaja ei ole palvelussuhteessa palkkion maksajaan tai aloite ei liity työntekijän työsopimuksessa sovittuun työhön, palkkiosta ei makseta sosiaalivakuutusmaksuja. Tällöin aloitepalkkiosta toimitetaan ennakonpidätys, ellei aloitepalkkion saaja kuulu ennakkoperintärekisteriin.\\r\\n\\r\\nOletuksena tulolajissa on, että se on sosiaalivakuutusmaksujen alainen.\\r\\n\\r\\nJos poikkeuksellisesti aloitepalkkio ei olisikaan edellä mainittujen maksujen alainen, suorituksen maksaja ilmoittaa vakuuttamistiedon erillisenä tietona.\",\r\n    \"taxAndSideCostsDescrSv\": \"Om förslagsbelöningen anknyter till arbete som avtalats i arbetsavtalet, behandlas arvodet som lön, dvs. utöver att förskottsinnehållning verkställs, betalas även socialförsäkringsavgifter på arvodet. Om mottagaren av förslagsbelöning inte står i anställningsförhållande till den som betalar belöningen eller förslaget inte anknyter till det arbete som avtalats i arbetstagarens arbetsavtal, betalas inga socialförsäkringsavgifter på belöningen. På förslagsbelöningen verkställs då förskottsinnehållning, om mottagaren av förslagsbelöningen inte är införd i förskottsuppbördsregistret. I inkomstslaget är det förvalt att inkomsten är underställd socialförsäkringsavgifter. Om förslagsbelöningen undantagsvis inte är underställd ovan nämnda avgifter, anmäler betalaren försäkringsuppgiften separat. Se anvisningen Anmälan av information till inkomstregistret: uppgifter i anslutning till försäkrande.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/renumeration\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 203,\r\n    \"nameEn\": \"Bonus pay\",\r\n    \"nameFi\": \"Bonuspalkka\",\r\n    \"nameSv\": \"Bonuslön\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"bonusPay\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"One-off remuneration, the amount of which is partially or fully determined by how well the work result\\r\\nset as the target is achieved. The performance\\r\\nmetric can be volume, quality, or some other performance factor.\\r\\nBonus pay differs from commission by being oneoff in nature, while a commission is a remuneration\\r\\nof a continuous nature. Both of these are based on\\r\\nachieving a pre-set target for a person or a group.\\r\\nBonus pay differs from profit-sharing bonus in that\\r\\nthe profit-sharing bonus is paid without a plan agreed in advance, based on the company's profit.\",\r\n    \"descriptionFi\": \"Kertaluonteinen palkkiopalkka, jonka suuruus määräytyy kokonaan tai osittain sen mukaan, kuinka hyvin tavoitteeksi asetettu työtulos saavutetaan. Työtuloksen mittana voi olla määrä, laatu tai jokin muu tulostekijä.\\r\\n\\r\\nBonuspalkka eroaa provisiopalkasta siten, että bonuspalkka on kertaluonteinen ja provisio on jatkuvaluonteinen palkkiopalkka. Kumpikin näistä perustuu henkilön tai ryhmän ennalta asetetun tavoitteen saavuttamiseen. Bonuspalkka eroaa voittopalkkiosta siten, että voittopalkkio maksetaan ilman ennalta sovittua suunnitelmaa, yrityksen voiton perusteella.\",\r\n    \"descriptionSv\": \"Premielön av engångsnatur, vars storlek bestäms helt eller delvis utifrån hur väl det arbetsresultat som ställts upp som mål uppnås. Arbetsresultatet kan mätas med mängd, kvalitet eller någon annan resultatfaktor. Bonuslön skiljer sig från provisionslön på så sätt,\\r\\natt bonuslön är en premielön av engångsnatur och provision är en premielön av kontinuerlig karaktär.\\r\\nDessa två baserar sig på att nå målsättningen som\\r\\nställts på förhand åt personen eller gruppen.\\r\\nBonuslön skiljer sig från vinstarvoden på så sätt, att\\r\\nvinstarvode betalas utan en på förhand avtalad\\r\\nplan och som bildas utifrån företagets vinst.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and employer's social insurance contributions are paid from the bonus pay.\",\r\n    \"taxAndSideCostsDescrFi\": \"Bonuspalkasta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på bonuslön och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/renumeration\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 204,\r\n    \"nameEn\": \"Complementary wage/salary paid during benefit period\",\r\n    \"nameFi\": \"Etuusajalta maksettu täydennyspalkka\",\r\n    \"nameSv\": \"Kompletteringslön för förmånstid\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"complementaryWagePaidDuringBenefitPeriod\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Wages paid to an employee receiving a benefit that\\r\\ncover the difference between full wages and the\\r\\nbenefit paid.\\r\\nSuch a benefit could be a daily sickness allowance\\r\\npaid by Kela. If the employer pays complementary\\r\\nwages during the benefit period, Kela pays the\\r\\nbenefit directly to the employee, not the employer.\",\r\n    \"descriptionFi\": \"Etuutta saavalle työntekijälle maksettu palkka, joka kattaa täyden palkan ja maksetun etuuden välisen erotuksen.\\r\\n\\r\\nMaksettu etuus voi olla esimerkiksi Kelan maksama sairauspäiväraha. Kun työnantaja maksaa etuusajalta täydennyspalkkaa, Kela maksaa etuuden suoraan työntekijälle, ei työnantajalle.\",\r\n    \"descriptionSv\": \"Lön som betalas till en arbetstagare som erhåller en förmån och som täcker differensen mellan den fulla lönen och den utbetalda förmånen. Den betalda förmånen kan även vara\\r\\nsjukdagpenning som betalas av FPA. När\\r\\narbetsgivaren betalar kompletteringslön för\\r\\nförmånstid, betalar FPA förmånen direkt till\\r\\narbetstagaren, inte till arbetsgivaren.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and employer's social insurance\\r\\ncontributions are paid out of the complementary\\r\\nwages paid during the benefit period.\",\r\n    \"taxAndSideCostsDescrFi\": \"Etuusajalta maksetusta täydennyspalkasta toimitetaan ennakonpidätys ja maksetaan työnantajan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"På kompletteringslön för förmånstiden verkställs förskottsinnehållning och betalas arbetsgivarens socialförsäkringsavgifter\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/sickness\"\r\n    ],\r\n    \"calcGrouping\": \"baseSalary\"\r\n  },\r\n  {\r\n    \"code\": 205,\r\n    \"nameEn\": \"Emergency work compensation\",\r\n    \"nameFi\": \"Hätätyökorvaus\",\r\n    \"nameSv\": \"Ersättning för nödarbete\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"emergencyWorkCompensation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Working time compensation paid for emergency\\r\\nwork. Emergency work means work assigned in an\\r\\nemergency situation outside regular working hours.\",\r\n    \"descriptionFi\": \"Työaikakorvaus, joka maksetaan hätätyöstä. Hätätyöllä tarkoitetaan hätätilanteessa säännöllisen työajan ylittävänä aikana teetettävää työtä.\",\r\n    \"descriptionSv\": \"Arbetstidsersättning för nödarbete. Med nödarbete avses arbete som utförs i nödsituationer under tid som överskrider ordinarie arbetstid.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and employer's social insurance\\r\\ncontributions are paid from emergency work compensation.\",\r\n    \"taxAndSideCostsDescrFi\": \"Hätätyökorvauksesta toimitetaan ennakonpidätys ja maksetaan työnantajan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"På nödarbete verkställs förskottsinnehållning och betalas arbetsgivares socialförsäkringsavgift\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/workingTimeCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 206,\r\n    \"nameEn\": \"Evening work compensation\",\r\n    \"nameFi\": \"Iltatyökorvaus\",\r\n    \"nameSv\": \"Kvällsersättning\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"eveningWorkCompensation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Working time compensation paid for evening work.\\r\\nEvening work compensation can be paid for regular\\r\\nworking hours, or for time exceeding regular working hours.\",\r\n    \"descriptionFi\": \"Työaikakorvaus, joka maksetaan iltatyöstä. Iltatyökorvausta voidaan maksaa säännölliseltä työajalta tai säännöllisen työajan ylittävältä ajalta.\",\r\n    \"descriptionSv\": \"Arbetstidsersättning för kvällsarbete. Kvällsersättning kan betalas för ordinarie arbetstid eller den tid som överskrider ordinarie arbetstid\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and employer's social insurance\\r\\ncontributions are paid from evening work compensation.\",\r\n    \"taxAndSideCostsDescrFi\": \"Iltatyökorvauksesta toimitetaan ennakonpidätys ja maksetaan työnantajan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"På kvällsersättning verkställs förskottsinnehållning och betalas arbetsgivares socialförsäkringsavgift.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/workingTimeCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 207,\r\n    \"nameEn\": \"Evening shift allowance\",\r\n    \"nameFi\": \"Iltavuorolisä\",\r\n    \"nameSv\": \"Kvällsskiftstillägg\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"eveningShiftAllowance\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Shift work compensation paid for an evening shift\",\r\n    \"descriptionFi\": \"Vuorotyökorvaus, joka maksetaan iltavuorosta.\",\r\n    \"descriptionSv\": \"Ersättning för skiftarbete som betalas för kvällsskift\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and employer's social insurance\\r\\ncontributions are paid from the evening shift allowance.\",\r\n    \"taxAndSideCostsDescrFi\": \"Iltavuorolisästä toimitetaan ennakonpidätys ja maksetaan työnantajan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"På kostnadsersättningar verkställs förskottsinnehållning och betalas arbetsgivares socialförsäkringsavgift.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/workingTimeCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 208,\r\n    \"nameEn\": \"Notice period compensation\",\r\n    \"nameFi\": \"Irtisanomisajan korvaus\",\r\n    \"nameSv\": \"Ersättning för uppsägningstid\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"noticePeriodCompensation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Compensation paid by an employer to an employee when employment is terminated without a notice period, i.e., when the notice period is disregarded and the employment is terminated with immediate effect (Employment\\r\\nContracts Act 6:4). This income type is also\\r\\nused when reporting a compensation paid by\\r\\nthe employer, when an employee gives notice\\r\\ndue to a lay-off that has lasted over 200 days, and when the employer terminates an employee who has been laid off. \\r\\n\\r\\nThis income type is used to report only those items\\r\\npaid when employment is terminated without a notice period. The wages paid for the notice period are reported using other income types, such as the Total\\r\\nwages or Time-rate pay income types.\",\r\n    \"descriptionFi\": \"Korvaus, jonka työnantaja maksaa työntekijälle palvelussuhteen päättyessä ilman irtisanomisaikaa eli tilanteessa, jossa jätetään irtisanomisaika noudattamatta ja työsuhde päättyy heti (TSL 6:4). Tulolajilla ilmoitetaan myös korvaus, jonka työnantaja maksaa, kun työntekijä irtisanoutuu yli 200 päivää kestäneen lomautuksen johdosta sekä, kun työnantaja irtisanoo lomautettuna olevan työntekijän.\\r\\n\\r\\nTulolajilla ilmoitetaan vain sellaiset erät, jotka maksetaan työsuhteen päättyessä ilman irtisanomisaikaa. Irtisanomisajalta maksettu palkka ilmoitetaan muilla palkan suorituslajeilla, esim. Palkka yhteissumma- tai Aikapalkka-tulolajeilla.\",\r\n    \"descriptionSv\": \"En ersättning som arbetsgivaren betalar till arbetstagaren när anställningsförhållandet upphör utan uppsägningstid, dvs. i en situation där uppsägningstiden inte iakttas och anställningsförhållandet upphör omedelbart (AAL 6:4). Med inkomstslaget\\r\\nanmäls även ersättning som arbetsgivaren\\r\\nbetalar när arbetstagaren säger upp sig på\\r\\ngrund av permittering som pågått i över 200\\r\\ndagar samt när arbetsgivaren säger upp en\\r\\npermitterad arbetstagare. Med inkomstslaget anmäls endast sådana poster som\\r\\nbetalas när anställningsförhållandet upphör utan\\r\\nuppsägningstid. Lön för uppsägningstiden anmäls\\r\\nmed andra prestationsbetalningsslag, t.ex.\\r\\ninkomstslagen lön totalt eller tidlön.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld but social insurance contributions\\r\\nare not paid from notice period compensation.\",\r\n    \"taxAndSideCostsDescrFi\": \"Irtisanomisajan korvauksesta toimitetaan ennakonpidätys, mutta ei makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"På ersättning för uppsägningstiden verkställs förskottsinnehållning, men inga socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/employmentTermination\"\r\n    ],\r\n    \"calcGrouping\": \"baseSalary\"\r\n  },\r\n  {\r\n    \"code\": 209,\r\n    \"nameEn\": \"Kilometre allowance (taxable)\",\r\n    \"nameFi\": \"Kilometrikorvaus (veronalainen)\",\r\n    \"nameSv\": \"Kilometerersättning (skattepliktig)\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"kilometreAllowanceTaxable\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Kilometre allowance that does not meet the requirements set for tax-exemption.\\r\\nA taxable kilometre allowance can be paid to both employees and other persons. There are several criteria\\r\\nfor the taxability of kilometre allowances. The Tax Administration has defined\\r\\na maximum amount for the tax-exempt kilometre allowances paid by an employer to an employee;\\r\\nthe part exceeding this amount is taxable income. Kilometre allowances paid to a commissioned person\\r\\nare taxable income in their entirety.\\r\\nThis income type is used only to report taxable\\r\\nkilometre allowances paid to employees. If a\\r\\ntaxable kilometre allowance is paid to a commissioned person or organisation, the allowance is reported as non-wage compensation for work and the\\r\\ncost is added to the amount of non-wage compensation for work (see the description of the Nonwage compensation for work income type).\",\r\n    \"descriptionFi\": \"Kilometrikorvaus, joka ei täytä verovapaudelle asetettuja vaatimuksia.\\r\\n\\r\\nVeronalaista kilometrikorvausta voidaan maksaa sekä palvelussuhteessa oleville että muille henkilöille. Kilometrikorvauksen veronalaisuudelle on useita perusteita. Verohallinto on määrittänyt työnantajan palvelussuhteessa maksamille verovapaille kilometrikorvauksille enimmäismäärän, jonka ylittävältä osalta kilometrikorvaus on veronalaista ansiotuloa. Henkilölle toimeksiantosuhteessa maksettava kilometrikorvaus on kokonaan veronalaista ansiotuloa.\\r\\n\\r\\n**Tulolajilla ilmoitetaan vain palvelussuhteessa oleville maksetut veronalaiset kilometrikorvaukset.** Jos veronalainen kilometrikorvaus maksetaan toimeksiantosuhteessa olevalle henkilölle tai yhteisölle, korvaus ilmoitetaan työkorvauksena ja lisätään kustannus työkorvauksen määrää (ks. Työkorvaus-tulolajin selite).\",\r\n    \"descriptionSv\": \"På ersättning för uppsägningstiden verkställs förskottsinnehållning, men inga socialförsäkringsavgifter betalas.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld from the income. The default of the\\r\\nincome type is that it is subject to social insurance\\r\\ncontributions. I\",\r\n    \"taxAndSideCostsDescrFi\": \"Tulosta toimitetaan ennakonpidätys ja se on sosiaalivakuutusmaksujen alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på inkomsten. Det förvalda värdet i inkomstslaget är att den omfattas av socialförsäkringsavgifter. Om kilometerersättningen som betalas inte omfattas av någon socialförsäkringsavgift, ska prestationsbetalaren med uppgiften Typ av försäkringsuppgift ange vilken försäkringsavgift inkomsten inte omfattas av\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/expenses\",\r\n      \"https://palkkaus.fi/usecases/2019/travelExpenses\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 210,\r\n    \"nameEn\": \"Meeting fee\",\r\n    \"nameFi\": \"Kokouspalkkio\",\r\n    \"nameSv\": \"Mötesarvode\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"meetingFee\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A fee paid for participating in a meeting.\",\r\n    \"descriptionFi\": \"Palkkio, joka maksetaan kokoukseen osallistumisesta.\",\r\n    \"descriptionSv\": \"Arvode som betalas för deltagande i möte\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld from a meeting fee.\\r\\nIf the payment of the meeting fee is based on work\\r\\nperformed in an employment relationship, social insurance contributions are paid from the meeting\\r\\nfee.\\r\\nIf the recipient is not in an employment relationship,\\r\\nthe obligation to pay earnings-related pension insurance contribution, the employer's health insurance contribution, and the employee's daily allowance contribution of health insurance from the fee\\r\\nwill vary according to the applicable law. If the payment of the meeting fee is not based on work performed in an employment relationship, the employer can, if it so desires, voluntarily take out pension insurance for the income earner.\\r\\nBy default, this income type is not subject to social\\r\\ninsurance contributions.\\r\\nIf the meeting fee is subject to a social insurance\\r\\ncontribution, the payer must use the separate Type\\r\\nof insurance information entry to report that the income is subject to a specified insurance contribution.\",\r\n    \"taxAndSideCostsDescrFi\": \"Kokouspalkkiosta toimitetaan ennakonpidätys.\\r\\n\\r\\nJos kokouspalkkion maksaminen perustuu palvelussuhteessa tehtyyn työhön, kokouspalkkiosta maksetaan sosiaalivakuutusmaksut. Jos kokouspalkkion saaja ei ole palvelussuhteessa, palkkion työeläkevakuutusmaksun ja työnantajan sairausvakuutusmaksun sekä työntekijän sairausvakuutuksen päivärahamaksun maksamisvelvollisuus vaihtelevat sovellettavan lain mukaan. Jos kokouspalkkion maksaminen ei perustu palvelusuhteessa tehtyyn työhön, työnantaja voi halutessaan vakuuttaa tulonsaajan vapaaehtoisesti eläkevakuutuksen osalta.\\r\\n\\r\\nOletuksena tulolajissa on, että se ei ole sosiaalivakuutusmaksujen alainen.\\r\\n\\r\\nJos kokouspalkkio on jonkun sosiaalivakuutusmaksun alainen, suorituksen maksaja ilmoittaa erillistä Vakuuttamistiedon tyyppi- tietoa käyttäen, että tulo on ilmoitetun vakuutusmaksun alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"På mötesarvode verkställs förskottsinnehållning. Om betalningen av mötesarvode baserar sig på arbete i anställningsförhållande, betalas socialförsäkringsavgifter för mötesarvodet. Om mottagaren av mötesarvodet inte är i anställningsförhållande, varierar skyldigheten att betala arbetspensionsavgift och arbetsgivarens sjukförsäkringsavgift samt dagpenningsavgift för arbetstagarens sjukförsäkring med den lag som tillämpas. Om mötesarvodet inte baserar sig på arbete i anställningsförhållande, kan arbetsgivaren teckna en frivillig pensionsförsäkring åt inkomsttagaren. I inkomstslaget är det förvalt att inkomsten inte är underställd socialförsäkringsavgifter. Om mötesarvodet är underställt någon socialförsäkringsavgift, anmäler betalaren med hjälp av den separata uppgiften Typ av försäkringsuppgift att inkomsten är underställd den angivna försäkringsavgiften.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/board\",\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"baseSalary\"\r\n  },\r\n  {\r\n    \"code\": 211,\r\n    \"nameEn\": \"Saturday pay\",\r\n    \"nameFi\": \"Lauantaityökorvaus\",\r\n    \"nameSv\": \"Ersättning för lördagsarbete\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"saturdayPay\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Working time compensation paid for work on a Saturday. Saturday pay can be paid for regular working hours or for time exceeding regular working\\r\\nhours.\",\r\n    \"descriptionFi\": \"Työaikakorvaus, joka maksetaan lauantaityöstä. Lauantaityökorvausta voidaan maksaa säännölliseltä työajalta tai säännöllisen työajan ylittävältä ajalta.\",\r\n    \"descriptionSv\": \"Arbetstidsersättning för lördagsarbete. Ersättning för lördagsarbete kan betalas för ordinarie arbetstid eller den tid som överskrider ordinarie arbetstid.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\nare paid from the pay.\",\r\n    \"taxAndSideCostsDescrFi\": \"Korvauksesta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på ersättningen och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/workingTimeCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 212,\r\n    \"nameEn\": \"Extra work premium\",\r\n    \"nameFi\": \"Lisätyökorvaus\",\r\n    \"nameSv\": \"Ersättning för mertidsarbete\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"extraWorkPremium\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Working time compensation paid for extra work.\",\r\n    \"descriptionFi\": \"Työaikakorvaus, joka maksetaan lisätyöstä.\",\r\n    \"descriptionSv\": \"Arbetstidsersättning för mertidsarbete.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and the employer's social insurance\\r\\ncontributions are paid from the pay.\",\r\n    \"taxAndSideCostsDescrFi\": \"Korvauksesta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på ersättningen och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/workingTimeCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 213,\r\n    \"nameEn\": \"Holiday bonus\",\r\n    \"nameFi\": \"Lomaraha\",\r\n    \"nameSv\": \"Semesterpenning\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"holidayBonus\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A bonus paid in addition to annual holiday pay based\\r\\non an employment contract or collective agreement,\\r\\nthe amount of which is determined according to the\\r\\ncollective agreement applicable in the field or the\\r\\nnumber of holiday days earned during the previous\\r\\nholiday credit year.\",\r\n    \"descriptionFi\": \"Työsopimuksen tai työ- tai virkaehtosopimuksen perusteella vuosilomapalkan lisäksi maksettava suoritus, jonka suuruus määräytyy alalla sovellettavan työehtosopimuksen tai edellisenä lomanmääräytymisvuonna ansaittujen lomapäivien lukumäärän mukaan.\\r\\n\\r\\nVuosilomapalkan lisää koskee erittely- ja ilmoitusvelvollisuus riippumatta siitä, käytetäänkö kyseisestä erästä nimitystä lomaraha. Tällainen erittely tarvitaan esimerkiksi Kelaa ja työttömyyskassaa sekä työtapaturman korvauskäsittelyä varten.\",\r\n    \"descriptionSv\": \"En prestation som betalas på basis av arbetskollektiveller tjänstekollektivavtalet utöver semesterlönen, vars storlek bestäms enligt det tillämpliga kollektivavtalet eller antalet intjänade semesterdagar under föregående kvalifikationsår. Tillägg till semesterlön omfattas av specificeringsoch anmälningsskyldighet, oavsett om\\r\\nbenämningen semesterpenning används om denna\\r\\npost. En sådan specifikation behövs till exempel för\\r\\nFPA och arbetslöshetskassan samt handläggning\\r\\nav ersättning för arbetsolycka\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\nare paid from the holiday bonus.\",\r\n    \"taxAndSideCostsDescrFi\": \"Lomarahasta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på semesterpenning och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/holidays\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 214,\r\n    \"nameEn\": \"Lecture fee\",\r\n    \"nameFi\": \"Luentopalkkio\",\r\n    \"nameSv\": \"Föreläsningsarvode\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"lectureFee\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A fee paid for giving a lecture.\",\r\n    \"descriptionFi\": \"Palkkio, joka maksetaan luennon pitämisestä.\",\r\n    \"descriptionSv\": \"Arvode som betalas för att hålla föreläsning\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld from the lecture fee.\\r\\nIf the payment of the lecture fee is based on work\\r\\nperformed in an employment relationship, social insurance contributions are paid from the lecture fee.\\r\\nIf the recipient is not in an employment relationship,\\r\\nthe obligation to pay a earnings-related pension insurance contribution, the employer's health insurance contribution, and the employee's daily allowance contribution of health insurance from the fee\\r\\nvary according to the applicable law.\\r\\nBy default, this income type is not subject to social\\r\\ninsurance contributions.\\r\\nIf the lecture fee is subject to a social insurance\\r\\ncontribution, the payer must use the separate Type\\r\\nof insurance information entry to report that the income is subject to a specified insurance contribution.\",\r\n    \"taxAndSideCostsDescrFi\": \"Luentopalkkiosta toimitetaan ennakonpidätys. \\r\\n\\r\\nJos luentopalkkion maksaminen perustuu palvelussuhteessa tehtyyn työhön, luentopalkkiosta maksetaan sosiaalivakuutusmaksut. \\r\\n\\r\\nJos luentopalkkion saaja ei ole palvelussuhteessa, palkkion työeläkevakuutusmaksun ja työnantajan sairausvakuutusmaksun sekä työntekijän sairausvakuutuksen päivärahamaksun maksamisvelvollisuus vaihtelevat sovellettavan lain mukaan.\\r\\n\\r\\nOletuksena tulolajissa on, että se ei ole sosiaalivakuutusmaksujen alainen.\\r\\n\\r\\nJos luentopalkkio on jonkun sosiaalivakuutusmaksun alainen, suorituksen maksaja ilmoittaa erillistä Vakuuttamistiedon tyyppi- tietoa käyttäen, että tulo on ilmoitetun vakuutusmaksun alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"På föreläsningsarvode verkställs förskottsinnehållning. Om betalningen av föreläsningsarvode baserar sig på arbete i anställningsförhållande, betalas socialförsäkringsavgifter för föreläsningsarvodet. Om mottagaren av föreläsningsarvodet inte är i anställningsförhållande, varierar skyldigheten att betala arbetspensionsförsäkringsavgift och arbetsgivares sjukförsäkringsavgift samt arbetstagares sjukförsäkringsdagpenning efter vilken lag som tillämpas. I inkomstslaget är det förvalt att inkomsten inte är underställd socialförsäkringsavgifter. Om föreläsningsarvodet är underställt någon socialförsäkringsavgift, anmäler betalaren med hjälp av den separata uppgiften Typ av försäkringsuppgift att inkomsten är underställd den angivna försäkringsavgiften.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"baseSalary\"\r\n  },\r\n  {\r\n    \"code\": 215,\r\n    \"nameEn\": \"Compensation for acting in a position of trust\",\r\n    \"nameFi\": \"Luottamustoimipalkkio\",\r\n    \"nameSv\": \"Arvode för förtroendeuppdrag\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"compensationForTrustPosition\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Remuneration paid for acting in a position of trust,\\r\\nwith the exception of participating in meetings.\",\r\n    \"descriptionFi\": \"Palkkio, joka maksetaan muusta luottamustoimen hoitamisesta kuin kokouksiin osallistumisesta.\",\r\n    \"descriptionSv\": \"Arvode som betalas för annan skötsel av förtroendeuppdrag än deltagande i möten\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld from compensation for acting in a\\r\\nposition of trust.\\r\\nWhen compensation for acting in a position of trust\\r\\nis paid, the recipient is not usually in an employment relationship with the payer; in such cases, social insurance contributions are not paid from the\\r\\ncompensation.\\r\\nIn the private sector, however, the health insurance\\r\\ncontribution is paid from the compensation, for acting in a position of trust. Additionally, the pension\\r\\ninsurance contribution is paid, if the payer has\\r\\ntaken out voluntary earnings-related pension insurance for the person acting in a position of trust.\\r\\nAn earnings-related pension contribution is paid for\\r\\ncertain types of public sector compensation for acting in a position of trust.\\r\\nAs a default, this income type is subject to the employer's health insurance contribution and the employee's daily allowance contribution of health insurance. However, as a default, the income is not subject to pension insurance contribution, unemployment insurance contribution or accident and\\r\\noccupational disease insurance contribution.\\r\\nIf compensation for acting in a position of trust is,\\r\\nfor example, subject to pension and unemployment\\r\\ninsurance contributions, the payer should report the\\r\\ninsurance information separately for these contributions. Similarly, the payer should use the Type of\\r\\ninsurance information entry to report if the compensation is not subject to a health insurance contribution.\",\r\n    \"taxAndSideCostsDescrFi\": \"Luottamustoimipalkkiosta toimitetaan ennakonpidätys.\\r\\n\\r\\nLuottamustoimipalkkiota maksettaessa palkkion saaja ei yleensä ole palvelussuhteessa palkkion maksajaan, eikä palkkiosta näissä tapauksissa makseta sosiaalivakuutusmaksuja.\\r\\n\\r\\nYksityisellä sektorilla luottamustoimipalkkiosta maksetaan kuitenkin sairausvakuutusmaksu. Lisäksi maksetaan eläkevakuutusmaksu, jos palkkion maksaja on ottanut luottamustoimen hoitajalle vapaaehtoisen työeläkevakuutuksen. Tietyistä julkisen sektorin luottamustoimipalkkioista maksetaan työeläkevakuutusmaksu.\\r\\n\\r\\nOletuksena tulolajissa on, että se on työnantajan sairausvakuutusmaksun alainen ja työntekijän sairausvakuutuksen päivärahamaksun alainen. Sitä vastoin oletuksena on, että tulo ei ole eläkevakuutusmaksun, työttömyysvakuutusmaksun eikä työtapaturma- ja ammattitautivakuutusmaksun alainen.\\r\\n\\r\\nJos luottamustoimipalkkio on esimerkiksi eläke- ja työttömyysvakuutusmaksun alainen, suorituksen maksaja ilmoittaa vakuuttamistiedon erillisenä tietona näiden maksujen osalta. Samoin ilmoitetaan Vakuuttamistiedon tyyppi –tietoa käyttäen, jos luottamustoimipalkkio ei poikkeuksellisesti olisikaan sairausvakuutusmaksun alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"På arvode för förtroendeuppdrag verkställs. förskottsinnehållning.\\r\\nVid betalning av arvode för förtroendeuppdrag står\\r\\nmottagaren av arvodet i allmänhet inte i\\r\\nanställningsförhållande till den som betalar arvodet,\\r\\noch inga socialförsäkringsavgifter behöver betalas\\r\\npå arvoden i dessa fall.\\r\\nInom den privata sektorn betalas dock\\r\\nsjukförsäkringsavgift för arvode för\\r\\nförtroendeuppdrag. Dessutom betalas\\r\\npensionsförsäkringsavgift om betalaren har tecknat\\r\\nfrivillig arbetspensionsförsäkring åt\\r\\nförtroendepersonen.\\r\\nPå vissa arvoden för förtroendeuppdrag inom den\\r\\noffentliga sektorn betalas\\r\\narbetspensionsförsäkringsavgift.\\r\\nDet förvalda alternativet i inkomstslaget är att den\\r\\när underställd arbetsgivarens sjukförsäkringsavgift\\r\\noch dagpenningsavgiften för arbetstagarens\\r\\nsjukförsäkring. Däremot är det förvalt att inkomsten\\r\\ninte är underställd pensions-, arbetslöshets,\\r\\narbetsolycksfalls- eller\\r\\nyrkesjukdomsförsäkringsavgifter.\\r\\nOm arvodet för förtroendeuppdrag är t.ex.\\r\\nunderställt pensions- och\\r\\narbetslöshetsförsäkringsavgift, anmäler betalaren\\r\\nförsäkringsuppgiften separat när det gäller dessa\\r\\navgifter. Likaså anmäler man med hjälp uppgiften\\r\\nom typ av försäkringsuppgift, om arvodet för\\r\\nförtroendeuppdraget undantagsvis inte är\\r\\nunderställd sjukförsäkringsavgift.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/board\",\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"baseSalary\"\r\n  },\r\n  {\r\n    \"code\": 216,\r\n    \"nameEn\": \"Other compensation\",\r\n    \"nameFi\": \"Muu maksettu lisä\",\r\n    \"nameSv\": \"Annat betalt tillägg\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"otherCompensation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"The total amount of working time and exceptional\\r\\nsituation compensations not paid regularly and not\\r\\nincluded in the earnings from regular working time.\\r\\nThese include midweek holiday compensation,\\r\\nstart-up grants and any other compensation and\\r\\nbonuses paid in accordance with collective agreements or employment contracts.\",\r\n    \"descriptionFi\": \"Muiden maksettujen työaika- ja poikkeustilakorvausten yhteissumma. Näitä ovat mm. aattotyökorvaukset, arkipyhäkorvaukset ja muut mahdolliset työehtosopimusten tai työsopimusten perusteella maksettavat korvaukset ja lisät.\",\r\n    \"descriptionSv\": \"Totalbeloppet av sådana arbetstids- och undantagssituationsersättningar som inte betalas ut regelbundet och inte räknas till lönen för ordinarie arbetstid. Hit hör bl.a. söckenhelgsersättningar, startpeng samt övriga eventuella ersättningar och tillägg som betalas med stöd av kollektivavtal eller arbetsavtal.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\npaid from the compensation paid.\",\r\n    \"taxAndSideCostsDescrFi\": \"Muista maksetuista lisistä toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på övriga betalda tillägg och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/workingTimeCompensation\",\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 217,\r\n    \"nameEn\": \"Waiting time compensation\",\r\n    \"nameFi\": \"Odotusajan korvaus\",\r\n    \"nameSv\": \"Lön för väntetid\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"waitingTimeCompensation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Compensation to which an employee is entitled if\\r\\nthe payment of their wages is delayed after the end\\r\\nof the employment relationship. Unless otherwise\\r\\nagreed, the wages must be paid on the last day of\\r\\nthe pay period. Waiting time compensation can be\\r\\npaid for no more than six days.\",\r\n    \"descriptionFi\": \"Korvaus, johon työntekijällä on oikeus, jos palkanmaksu viivästyy työsuhteen päätyttyä. Ellei toisin sovita, palkka tulee maksaa palkanmaksukauden viimeisenä päivänä. Odotusajan korvausta voidaan maksaa enintään kuudelta päivältä.\",\r\n    \"descriptionSv\": \"Ersättning som arbetstagaren är berättigad till om löneutbetalningen fördröjs när anställningsförhållandet avslutats Om inte annat avtalas, ska lönen betalas den sista dagen i löneutbetalningsperioden . Lön för väntetid kan betalas för högst sex dagar.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld but social insurance payments are\\r\\nnot paid from waiting time compensation.\",\r\n    \"taxAndSideCostsDescrFi\": \"Odotusajan korvauksesta toimitetaan ennakonpidätys, mutta ei makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"På lön för väntetid verkställs förskottsinnehållning, men inga socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/workingTimeCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 218,\r\n    \"nameEn\": \"Working condition compensation\",\r\n    \"nameFi\": \"Olosuhdelisä\",\r\n    \"nameSv\": \"Miljötillägg\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"workingConditionCompensation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A wage supplement paid based on the conditions\\r\\nat the location where the work is performed. Working condition compensation is, for example, a supplement paid based on a collective agreement or\\r\\nan employment agreement such as a foaming supplement, cold region bonus and archipelago bonus.\",\r\n    \"descriptionFi\": \"Palkanlisä, joka maksetaan työn tekemispaikan olosuhteiden perusteella. Olosuhdelisiä ovat esimerkiksi työehtosopimuksen tai työsopimuksen perusteella maksettavat lisä, kuten vaahdotuslisä, kylmänalueenlisä ja saaristolisä.\",\r\n    \"descriptionSv\": \"Lönetillägg som betalas på grund av förhållandena på platsen för arbetets utförande. Miljötillägg är till exempel tillägg som betalas med stöd av kollektivavtal eller arbetsavtal så som flotationstillägg, kallområdestillägg och skärgårdstillägg.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\nare paid from working condition compensation.\",\r\n    \"taxAndSideCostsDescrFi\": \"Olosuhdelisästä toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på miljötillägg och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/workingTimeCompensation\",\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 219,\r\n    \"nameEn\": \"Partial pay during sick leave\",\r\n    \"nameFi\": \"Sairausajan osapalkka\",\r\n    \"nameSv\": \"Dellön för sjuktiden\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"partialPayDuringSickLeave\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Wages for the duration of illness reduced in accordance with the law or a collective agreement. The\\r\\nshare of income the person has received, in a reduced amount, during their illness is reported as\\r\\npartial pay during sick leave.\",\r\n    \"descriptionFi\": \"Lain tai työ- tai virkaehtosopimukseen mukaisesti alennettu sairausajan palkka. Sairausajan osapalkkana ilmoitetaan se osa tuloista, jonka henkilö on saanut sairaana ollessaan alennettuna.\",\r\n    \"descriptionSv\": \"Enligt lagen eller kollektivavtal eller tjänstekollektivavtal nedsatt lön för sjukdomstid. Som dellön för sjuktiden anmäls den andel av inkomsterna som personen fått som sänkt lön under sjuktiden\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\npaid from partial pay during sick leave.\",\r\n    \"taxAndSideCostsDescrFi\": \"Sairausajan osapalkasta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\\r\\n\\r\\nJos osapalkkana maksetaan sellaisia eriä, jotka eivät ole sosiaalivakuutusmaksujen alaisia (esimerkiksi vahingonkorvaus päättämistilanteessa), suorituksen maksaja ilmoittaa vakuuttamistiedon erillistä Vakuuttamistiedon tyyppi –tietoa käyttäen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på dellön för sjuktiden och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/sickness\"\r\n    ],\r\n    \"calcGrouping\": \"baseSalary\"\r\n  },\r\n  {\r\n    \"code\": 220,\r\n    \"nameEn\": \"Commission\",\r\n    \"nameFi\": \"Provisiopalkka\",\r\n    \"nameSv\": \"Provisionslön\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"commission\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Remuneration of a continuous nature forming a\\r\\npermanent part of the wages, the amount of which is agreed in the employment contract.\",\r\n    \"descriptionFi\": \"Pysyvän palkan osan muodostava jatkuvaluonteinen palkkiopalkka, jonka määrästä on sovittu työsopimuksessa.\",\r\n    \"descriptionSv\": \"Kontinuerlig premielön som utgör en bestående del av lönen och vars belopp har avtalats i arbetsavtalet.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\nare paid from the commission.\",\r\n    \"taxAndSideCostsDescrFi\": \"Provisiopalkasta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på provisionslön och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/renumeration\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 221,\r\n    \"nameEn\": \"Sunday work compensation\",\r\n    \"nameFi\": \"Sunnuntaityökorvaus\",\r\n    \"nameSv\": \"Ersättning för söndagsarbete\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"sundayWorkCompensation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Working time compensation paid for work on a\\r\\nSunday. Sunday pay can be paid for regular working hours, or for time exceeding regular working\\r\\nhours.\",\r\n    \"descriptionFi\": \"Sunnuntaityöstä maksettava työaikakorvaus. Sunnuntaityökorvausta voidaan maksaa säännölliseltä työajalta tai säännöllisen työajan ylittävältä ajalta.\",\r\n    \"descriptionSv\": \"Arbetstidsersättning som betalas för söndagsarbete. Ersättning för söndagsarbete kan betalas för ordinarie arbetstid eller den tid som överskrider ordinarie arbetstid.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\npaid from the pay.\",\r\n    \"taxAndSideCostsDescrFi\": \"Korvauksesta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på ersättningen och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/workingTimeCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 222,\r\n    \"nameEn\": \"Benefit arising from synthetic option\",\r\n    \"nameFi\": \"Synteettinen optio\",\r\n    \"nameSv\": \"Syntetisk option\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"benefitArisingFromSyntheticOption\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A privilege based on which the income earner is not\\r\\nentitled to subscribe shares underlying the option at\\r\\nthe strike price; instead, the income earner receives\\r\\nthe difference between the strike price and the share\\r\\nvalue as money (net value settlement) at the time of\\r\\nexecution. A synthetic option does not affect the subscription of shares.\\r\\nIn practice, a synthetic option concerns a monetary\\r\\npayment, the amount of which is determined by the\\r\\ndevelopment of the employer company's share price.\\r\\nInstead of a synthetic option, this arrangement may be\\r\\ncalled a share-based bonus or reward system.\",\r\n    \"descriptionFi\": \"Optio-oikeus, jonka perusteella tulonsaaja ei ole oikeutettu merkitsemään option kohde-etuutena olevia osakkeita option toteutushintaan, vaan hän saa toteutushinnan ja toteuttamishetken mukaisen osakkeen arvon erotuksen rahana (nettoarvon tilitys). Synteettinen optio ei oikeuta osakemerkintään.\\r\\n\\r\\nKäytännössä synteettisessä optiossa on kyse rahasuorituksesta, jonka suuruus määräytyy työnantajayhtiön osakekurssin kehityksen perusteella. Synteettinen optio -nimityksen sijaan järjestelyä saatetaan kutsua osakeperusteiseksi bonukseksi tai palkitsemisjärjestelmäksi.\",\r\n    \"descriptionSv\": \"Optionsrätt utifrån vilken inkomsttagaren inte är berättigad att teckna de aktier som utgör den underliggande tillgången till inlösningspriset, utan får skillnaden mellan inlösningspriset och värdet på\\r\\naktien vid inlösningstidpunkten i kontanter\\r\\n(redovisning av nettovärdet). En syntetisk option\\r\\nberättigar inte till aktieteckning.\\r\\nI praktiken handlar en syntetisk option om en\\r\\npenningbetalning vars belopp fastställs enligt\\r\\nutvecklingen för arbetsgivarbolages aktiekurs.\\r\\nI stället för Syntetisk option kan arrangemanget gå\\r\\nunder namnet aktiebaserad bonus eller\\r\\nbelöningssystem.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld from a benefit arising from an option,\\r\\nbut no social insurance contributions are paid.\",\r\n    \"taxAndSideCostsDescrFi\": \"Optiona saatavasta edusta toimitetaan ennakonpidätys, mutta ei makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"På förmån för option verkställs förskottsinnehållning, men socialförsäkringsavgifter betalas inte.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/enterprise\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 223,\r\n    \"nameEn\": \"Performance bonus\",\r\n    \"nameFi\": \"Tulospalkkio\",\r\n    \"nameSv\": \"Resultatpremie\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"performanceBonus\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Remuneration paid based on meeting or exceeding\\r\\nthe organisation's performance target agreed in advance.\",\r\n    \"descriptionFi\": \"Palkka, joka maksetaan organisaation ennalta sovitun tulostavoitteen täyttymisen tai ylittymisen perusteella.\",\r\n    \"descriptionSv\": \"Lön som betalas utifrån huruvida ett på förhand avtalat resultatmål inom organisationen uppfylls eller överskrids.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\npaid from a performance bonus.\",\r\n    \"taxAndSideCostsDescrFi\": \"Tulospalkkiosta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på resultatpremie och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/renumeration\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 224,\r\n    \"nameEn\": \"Monetary compensation from a working time bank\",\r\n    \"nameFi\": \"Työaikapankin rahakorvaus\",\r\n    \"nameSv\": \"Penningersättning från arbetstidsbank\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"monetaryCompensationFromWorkingTimeBank\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Wages paid based on the time saved in a working\\r\\ntime bank.\\r\\nWithdrawing wages from a working time bank\\r\\ntends only to be possible in exceptional situations,\\r\\nsuch as upon termination of employment or when\\r\\nthe working time bank is dissolved. In some working time banks, it is also possible to withdraw\\r\\nwages or free time on credit.\",\r\n    \"descriptionFi\": \"Palkka, joka maksetaan työaikapankkiin säästetyn ajan perusteella.\\r\\n\\r\\nTyöaikapankista voi yleensä nostaa palkkaa vain poikkeustapauksissa kuten palvelussuhteen päättyessä tai työaikapankkia purettaessa. Joissakin työaikapankeissa on mahdollista nostaa palkkaa tai\\r\\nvapaa-aikaa myös velaksi.\",\r\n    \"descriptionSv\": \"Lön som betalas på basis av tid som sparats i arbetstidsbanken. I allmänhet kan lön tas ut från arbetstidsbanken endast i undantagsfall, till exempel när anställningsförhållandet avslutas eller när arbetstidsbanken upphör. I vissa arbetstidsbanker kan lön eller ledighet tas ut även på kredit.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\npaid from monetary compensation from a working\\r\\ntime bank.\",\r\n    \"taxAndSideCostsDescrFi\": \"Työaikapankin rahakorvauksesta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på penningersättning från arbetstidsbank och socialförsäkringsavgifter betalas\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/employmentTermination\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 225,\r\n    \"nameEn\": \"Compensation for accrued time off\",\r\n    \"nameFi\": \"Työajantasauskorvaus\",\r\n    \"nameSv\": \"Ersättning för arbetstidsutjämning\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"compensationForAccruedTimeOff\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Working time compensation paid from the loss of\\r\\nearnings caused by the equalisation of working\\r\\ntime with the average weekly working time. Compensation for accrued time off is paid for regular working hours. The accrued holiday compensation is an example of compensation for accrued\\r\\ntime off.\",\r\n    \"descriptionFi\": \"Työaikakorvaus, joka maksetaan ansionvähentymisestä, joka aiheutuu työajan tasaamisesta keskimääräiseen viikkotyöaikaan. \\r\\n\\r\\nTyöajantasauskorvausta maksetaan säännölliseltä työajalta. Esimerkiksi niin sanottu pekkaskorvaus on työajantasauskorvaus.\",\r\n    \"descriptionSv\": \"Arbetstidsersättning som betalas för minskade förtjänster och som orsakas av att arbetstiden jämnas ut till genomsnittlig veckoarbetstid Ersättning för arbetstidsutjämning betalas för ordinarie arbetstid. Till exempel är den s.k. Pekkanen-ersättningen är en ersättning för arbetstidsutjämning.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\npaid from such compensation.\",\r\n    \"taxAndSideCostsDescrFi\": \"Korvauksesta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på ersättningen och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 226,\r\n    \"nameEn\": \"Share issue for employees\",\r\n    \"nameFi\": \"Työsuhteeseen perustuva osakeanti\",\r\n    \"nameSv\": \"Aktieemission som grundar sig på arbetsförhållande\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"shareIssueForEmployees\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A share issue targeted at the company's personnel.\\r\\nThe benefit that arises from the right to subscribe\\r\\nthe employer company's shares based on an employment relationship is taxable income.\\r\\nThe income type is only used to report the amount\\r\\nof the benefit regarded as taxable earned income.\\r\\nTax is withheld from a share issue for employees,\\r\\nbut the income is not subject to social insurance\\r\\ncontributions.\",\r\n    \"descriptionFi\": \"Yhtiön omalle henkilökunnalle suunnattu osakeanti. Etu työsuhteeseen perustuvasta oikeudesta merkitä työnantajayrityksen osakkeita on veronalaista ansiotuloa.\\r\\n\\r\\nJos etu on henkilökunnan enemmistön käytettävissä, tulolajilla ilmoitetaan ainoastaan 10 %:n alennuksen ylittävä osuus. Jos etu ei ole henkilökunnan enemmistön käytettävissä, saatava alennus on palkkaa koko määrältään. Tällöin suorituksen ilmoittamisessa käytetään palkan muita tulolajeja.\\r\\n\\r\\nMerkintäetu koskee myös yhteisön osuuksia.\",\r\n    \"descriptionSv\": \"Aktieemission som riktas till bolagets egen personal. En förmån som uppstår på en anställningsförhållande baserad rätt att teckna aktier i arbetsgivarföretaget är skattepliktig\\r\\nförvärvsinkomst. Teckningsförmånen gäller även andelar i samfund.\",\r\n    \"taxAndSideCostsDescrEn\": \"If the benefit is not available to the majority of the\\r\\npersonnel, the entire discount received is regarded\\r\\nas wages subject to social insurance contributions.\\r\\nIn this case, the payer reports the entire amount of\\r\\nthe payment using the income type Share issue for\\r\\nemployees (226) and specifies that the payment is\\r\\nsubject to social insurance contributions with the\\r\\nhelp of the Type of insurance information data related to the income type. \\r\\n\\r\\nThe subscription benefit also applies to shares in\\r\\nan organisation.\",\r\n    \"taxAndSideCostsDescrFi\": \"Työsuhteeseen perustuvasta osakeannista toimitetaan ennakonpidätys, mutta tulo ei ole sosiaalivakuutusmaksujen alainen.\\r\\n\\r\\nJos työsuhteeseen perustuva osakeanti on edellä mainittujen maksujen alainen, suorituksen maksaja ilmoittaa vakuuttamistiedon erillistä Vakuuttamistiedon tyyppi- tietoja käyttäen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Medinkomstslaget anmäls endast det\\r\\nförmånsbelopp som utgör skattepliktig\\r\\nförvärvsinkomst. Förskottsinnehållning verkställs\\r\\npå aktieemission som baserar sig på\\r\\nanställningsförhållande, men inkomsten är inte\\r\\nunderställd socialförsäkringsavgifter.\\r\\nOm förmånen inte är tillgänglig för majoriteten av\\r\\npersonalen, är den erhållna rabatten lön som\\r\\nomfattas av socialförsäkringsavgifter till sitt fulla\\r\\nbelopp. Då anmäler betalaren hela\\r\\nprestationsbeloppet med inkomstslaget\\r\\nAktieemission som grundar sig på\\r\\narbetsförhållande (226) och anmäler med uppgiften\\r\\nTyp av försäkringsuppgift som hänför sig till\\r\\ninkomstslaget att inkomsten omfattas av\\r\\nsocialförsäkringsavgifter\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/renumeration\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 227,\r\n    \"nameEn\": \"Contract pay \",\r\n    \"nameFi\": \"Urakkapalkka \",\r\n    \"nameSv\": \"Ackordslön \",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"contractPay\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Performance pay, paid based on the performance\\r\\nof a work contract agreed in advance. Contract pay\\r\\nincludes both a fixed and variable component.\",\r\n    \"descriptionFi\": \"Suorituspalkka, joka maksetaan ennalta sovitun työkokonaisuuden suorittamisen perusteella. Urakkapalkkaan sisältyy sekä kiinteä että muuttuva osa.\",\r\n    \"descriptionSv\": \"Prestationslön som betalas på basis av utförande av en på förhand avtalad arbetshelhet. I prestationslön ingår en fast och en rörlig del\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\nare paid from contract pay.\",\r\n    \"taxAndSideCostsDescrFi\": \"Urakkapalkasta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på prestationslön och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/wages\"\r\n    ],\r\n    \"calcGrouping\": \"baseSalary\"\r\n  },\r\n  {\r\n    \"code\": 229,\r\n    \"nameEn\": \"Damages in conjunction with termination and lay-off\",\r\n    \"nameFi\": \"Vahingonkorvaus päättämis- ja lomautustilanteissa\",\r\n    \"nameSv\": \"Skadestånd vid avslutande av ett anställningsförhållande eller permittering\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"damagesInConjunctionWithTermination\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Compensation that the employer is obligated to pay\\r\\nafter terminating an employment relationship in violation of the Employment Contracts Act, Act on Civil\\r\\nServants in Local Government or State Civil Servants'\\r\\nAct. Compensation for the cancellation of an employment contract (ECA 8:1, 55/2001) and compensation\\r\\nfor unjustified lay-off are also reported in this section.\\r\\nDamages to be paid due to the groundless termination\\r\\nof an employment relationship can be based on a decision by a court, a reconciliation confirmed by a court, a result of negotiations between the associations representing the parties to the employment relationship,\\r\\nor an agreement between the parties to the employment relationship.\\r\\nDamages in conjunction with termination of employment or lay-off or other comparable compensation are\\r\\nnot taxable income, unless they have been received\\r\\ninstead of taxable income or as compensation for reduced subsistence. Neither is compensation for neglect of co-operation procedure obligations, as defined\\r\\nin more detail in the related legislation, regarded as\\r\\ntaxable income.\\r\\nThis income type is used only to report taxable\\r\\namounts, i.e., not the tax-exempt compensation paid\\r\\nunder the Act on Co-operation within Undertakings or\\r\\nthe Equality Act. Tax-exempt damages are not reported to the Incomes Register.\\r\\nThis income type is not used to report compensation\\r\\nbased on the performance of work paid in connection\\r\\nwith the termination; instead, it is reported using other\\r\\nincome types, such as the Total wages or Time-rate\\r\\npay income types.\",\r\n    \"descriptionFi\": \"Korvaus, jota työnantaja on velvollinen maksamaan, kun työnantaja on päättänyt palvelussuhteen henkilön työsopimuslain, kunnallisesta viranhaltijasta annetun lain tai valtion virkamieslain vastaisesti. Kohdassa ilmoitetaan myös korvaus työsuhteen purkamisesta (TSL 8:1, 55/2001) sekä korvaus perusteettomasta lomauttamisesta.\\r\\n\\r\\nPalvelussuhteen perusteettoman päättämisen johdosta maksettava korvaus voi perustua tuomioistuimen tuomioon, tuomioistuimen vahvistamaan sovintoon, palvelussuhteen osapuolia edustavien järjestöjen väliseen neuvottelutulokseen tai palvelussuhteen osapuolten väliseen sopimukseen.\\r\\n\\r\\nVahingonkorvaus päättämis- tai lomautustilanteessa tai muu siihen verrattava korvaus ei ole veronalaista tuloa, ellei sitä ole saatu veronalaisen tulon sijaan tai korvaukseksi elatuksen vähentymisestä. Veronalaista tuloa eivät myöskään ole laissa tarkemmin määritellyt hyvitykset yhteistoimintavelvoitteiden laiminlyönneistä.\\r\\n\\r\\nTulolajilla ilmoitetaan vain veronalaiset määrät eli esimerkiksi ei yhteistoimintalain tai tasa-arvolain nojalla maksettuja verovapaita hyvityksi. Verovapaita vahingonkorvauksia ei ilmoiteta tulorekisteriin.\\r\\n\\r\\nTulolajilla ei ilmoiteta irtisanomisen yhteydessä maksettavia työsuoritukseen perustuvia korvauksia vaan ne ilmoitetaan muilla palkan suorituslajeilla, esim. Palkka yhteissumma- tai Aikapalkka-tulolajeilla.\",\r\n    \"descriptionSv\": \"En ersättning som arbetsgivaren är skyldig att betala när arbetsgivaren har avslutat ett anställningsförhållande för en person i strid med arbetsavtalslagen, lagen om kommunala tjänsteinnehavare eller statstjänstemannalagen. I punkten anmäls även ersättning för hävning av anställningsförhållande (AAL 8:1, 55/2001) samt ersättning för ogrundad permittering. Ersättning som betalas på grund av ogrundat avslutande av anställningsförhållande kan basera sig på dom av en domstol, förlikning som stadfästs av en domstol, resultat av förhandlingar som förts av organisationer som företräder parterna i anställningsförhållandet eller avtal mellan parterna. Skadestånd vid avslutande av ett\\r\\nanställningsförhållande eller permittering är inte skattepliktiga inkomst, om det inte har erhållits i stället\\r\\nför skattepliktig inkomst eller som ersättning för\\r\\nminskade inkomster eller försämrad utkomst.\\r\\nSkattepliktig inkomst är inte heller de i lagen närmare\\r\\ndefinierade gottgörelser för försummelse av\\r\\nsamarbetsskyldigheter. Med inkomstslaget anmäls endast skattepliktiga\\r\\nbelopp, inte t.ex. skattefria gottgörelser med stöd av\\r\\nsamarbetslagen eller jämställdhetslagen. Skattefria\\r\\nskadestånd anmäls inte till inkomstregistret.\\r\\nMed inkomstslaget anmäls inte ersättningar baserade\\r\\npå arbetsprestation som betalas i samband med\\r\\nuppsägning, utan dessa anmäls med andra\\r\\nlönebetalningsslag, t.ex. inkomstslagen Lön totalt eller\\r\\nTidlön.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld, but social insurance payments are\\r\\nnot paid from taxable damages.\",\r\n    \"taxAndSideCostsDescrFi\": \"Veronalaisesta vahingonkorvauksesta toimitetaan ennakonpidätys, mutta ei makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"På skattepliktigt skadestånd verkställs förskottsinnehållning, men socialförsäkringsavgifter betalas inte.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/employmentTermination\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 230,\r\n    \"nameEn\": \"Stand-by compensation\",\r\n    \"nameFi\": \"Varallaolokorvaus\",\r\n    \"nameSv\": \"Beredskapsersättning\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"standByCompensation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Wages paid to the employee for being available for\\r\\ncall-out to work, if required by the employer, to perform duties under their employment.\",\r\n    \"descriptionFi\": \"Palkka, joka maksetaan siitä, että työntekijä on tavoitettavissa ja työnantaja voi tarvittaessa kutsua hänet hoitamaan palvelussuhteeseen kuuluvia tehtäviä.\",\r\n    \"descriptionSv\": \"Lön som betalas för att arbetstagaren är nåbar och arbetsgivaren vid behov kan kalla honom eller henne för att sköta uppgifter som hör till anställningsförhållandet\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\npaid from stand-by compensation.\",\r\n    \"taxAndSideCostsDescrFi\": \"Varallaolokorvauksesta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på beredskapsersättning och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/workingTimeCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 231,\r\n    \"nameEn\": \"Voluntary compensation in conjunction with termination of employment\",\r\n    \"nameFi\": \"Vapaaehtoinen korvaus päättämistilanteessa\",\r\n    \"nameSv\": \"Frivillig ersättning vid avslutande av ett anställningsförhållande\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"voluntaryCompensationInConjunctionWithTermination\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Compensation voluntarily paid by the employer\\r\\nwhen employment is terminated or dissolved, or\\r\\nended by agreement.\\r\\nIn situations where employment is terminated, voluntary compensation paid includes CEO's severance compensation (so-called golden parachutes),\\r\\nseverance compensation, severance pay, and severance packages. Such compensation can also be\\r\\nnon-monetary.\",\r\n    \"descriptionFi\": \"Korvaus, jonka työnantaja maksaa vapaaehtoisesti irtisanomis- tai purkamistilanteessa tai silloin, kun palvelussuhde päätetään sopimalla.\\r\\n\\r\\nPäättämistilanteessa maksettavia vapaaehtoisia korvauksia ovat esimerkiksi toimitusjohtajan erokorvaus (niin sanottu kultainen kädenpuristus), erokorvaus, eroraha ja tukipaketti. Korvaus voidaan\\r\\nmyöntää myös muuna kuin rahana.\",\r\n    \"descriptionSv\": \"Ersättning som arbetsgivaren frivilligt betalar när ett anställningsförhållande sägs upp eller upplöses genom avtal Frivillig ersättning vid avslutande av ett anställningsförhållande är till exempel avgångsvederlag till verkställande direktör (s.k. gyllene fallskärm), avgångsvederlag, avgångspenning och stödpaket. Ersättningen kan även betalas i någon annan form än pengar.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld but social insurance payments are\\r\\nnot paid from the compensation.\",\r\n    \"taxAndSideCostsDescrFi\": \"Päättämiskorvauksesta toimitetaan ennakonpidätys, mutta ei makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"På ersättning vid avslutande verkställs förskottsinnehållning, men socialförsäkringsavgifter betalas inte.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/employmentTermination\"\r\n    ],\r\n    \"calcGrouping\": \"baseSalary\"\r\n  },\r\n  {\r\n    \"code\": 232,\r\n    \"nameEn\": \"Weekly rest compensation\",\r\n    \"nameFi\": \"Viikkolepokorvaus\",\r\n    \"nameSv\": \"Ersättning för veckovila\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"weeklyRestCompensation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Working time compensation paid for work performed during weekly rest times.\",\r\n    \"descriptionFi\": \"Työaikakorvaus, jota maksetaan viikkolevon aikana tehdystä työstä.\",\r\n    \"descriptionSv\": \"Arbetstidsersättning som betalas för utfört arbete under veckovila\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\nare paid from weekly rest compensation.\",\r\n    \"taxAndSideCostsDescrFi\": \"Viikkolepokorvauksesta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på ersättning för veckovila och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/workingTimeCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 233,\r\n    \"nameEn\": \"Profit-sharing bonus\",\r\n    \"nameFi\": \"Voittopalkkio\",\r\n    \"nameSv\": \"Vinstarvode\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"profitSharingBonus\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Remuneration distributed among employees without an advance plan, by a decision of the annual\\r\\ngeneral meeting and determined based in the company's profits.\",\r\n    \"descriptionFi\": \"Työntekijöille ilman ennalta sovittua suunnitelmaa yhtiökokouksen päätöksellä jaettava palkkio, joka muodostuu yrityksen voiton perusteella.\",\r\n    \"descriptionSv\": \"Premie som utdelas till arbetstagarna genom bolagsstämmans beslut utan en på förhand avtalad plan och som bildas utifrån företagets vinst\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld from all profit-sharing bonuses other\\r\\nthan those transferred into a personnel fund. No\\r\\nsocial insurance contributions are paid from a\\r\\nprofit-sharing bonus paid by the company into a\\r\\npersonnel fund, or profit-sharing bonuses directly\\r\\nwithdrawn by the employee as cash in accordance\\r\\nwith the personnel fund rules.\\r\\nIf the company does not have a personnel fund as\\r\\ndefined in the Act on Personnel Funds, no social insurance contributions are paid from the profit-sharing bonus if it is paid to the employee on the basis\\r\\nof a decision by the annual general meeting as a\\r\\nprofit distribution or cash profit-sharing bonus, on\\r\\ncondition that the profit-sharing bonus is paid to all\\r\\npersonnel and is not intended to replace a wage\\r\\nsystem required under a collective agreement or\\r\\nemployment contract. Furthermore, the basis for\\r\\ndetermining a cash bonus must be in accordance\\r\\nwith section 70, subsection 3(10) of the Employees'\\r\\nPensions Act and section 2, items 2 and 3 of the\\r\\nAct on Personnel Funds, and the amount of the\\r\\ncompany's free capital must be larger than the total\\r\\namount of the cash-based profit-sharing bonus and\\r\\nthe dividend paid to shareholders as decided by\\r\\nthe Annual General Meeting. The Act on Financing of Unemployment Benefits includes a similar provision, as does the Occupational Accidents, Injuries\\r\\nand Diseases Act.\\r\\nBy default, this income type is not subject to social\\r\\ninsurance contributions.\\r\\nIf the profit-sharing bonus is subject to the abovementioned contributions, the payer reports the insurance details using the separate Type of insurance information data group.\",\r\n    \"taxAndSideCostsDescrFi\": \"Muista kuin henkilöstörahastoon siirrettävistä voittopalkkiosta toimitetaan ennakonpidätys. Yrityksen henkilöstörahastoon maksamasta voittopalkkiosta tai henkilöstörahastosääntöjen mukaan työntekijän suoraan käteisenä nostamasta voittopalkkiosta ei makseta sosiaalivakuutusmaksuja.\\r\\n\\r\\nJos yrityksessä ei ole henkilöstörahastolain mukaista henkilöstörahastoa, voittopalkkiosta ei makseta sosiaalivakuutusmaksuja, jos voittopalkkio maksetaan työntekijälle yhtiökokouksen päätöksen perusteella voitonjakona tai käteisenä voittopalkkiona edellyttäen, että käteinen voittopalkkio maksetaan koko henkilöstölle eikä sillä pyritä korvaamaan työehtosopimuksen tai työsopimuksen edellyttämää palkkausjärjestelmää. Lisäksi edellytetään, että käteisen palkkion määräytymisperusteet ovat työntekijän eläkelain 70 §:n 3 momentin 10 kohdan ja henkilöstörahastolain 2 §:n 2 ja 3 kohdan mukaiset ja että yhtiön vapaan pääoman määrä on suurempi kuin yhtiökokouksessa päätettävän käteisen voittopalkkion ja osakkeenomistajille maksettavien osinkojen yhteismäärä. Laissa työttömyysetuuksien rahoituksesta on vastaavanlainen säännös, samoin työtapaturma- ja ammattitautilaissa.\\r\\n\\r\\nOletuksena tulolajissa on, ettei se ole sosiaalivakuutusmaksujen alainen. \\r\\n\\r\\nJos voittopalkkio on edellä mainittujen maksujen alainen, suorituksen maksaja ilmoittaa vakuuttamistiedon erillistä Vakuuttamistiedon tyyppi- tietoryhmää käyttäen.\",\r\n    \"taxAndSideCostsDescrSv\": \"På andra vinstpremier än sådana som överförs till en personalfond verkställs förskottsinnehållning. På de vinstpremier som företaget betalat till personalfonden eller vinstpremier som arbetstagaren direkt lyft kontant enligt personalfondsstadgarna betalas inte socialförsäkringsavgifter. Om företaget inte har en personalfond som avses i lagen om personalfonder, betalas inte socialförsäkringsavgifter för vinstpremier, om vinstpremien betalas till arbetstagaren med stöd av bolagsstämmans beslut som vinstutdelning eller kontant förutsatt att vinstpremien betalas till hela personalen och syftet inte är att ersätta ett lönesystem som kollektiv- eller arbetsavtalet förutsätter. Dessutom förutsätts att grunderna för fastställandet av kontantpremien är förenliga med 70 § 3 mom. 10 punkten i pensionslagen för arbetstagare och 2 § 2 och 3 punkten i lagen om personalfonder och att bolagets fria egna kapital är större än det sammanlagda beloppet av kontantpremien och dividenden till aktieägarna och som fastställs på bolagsstämman. I lagen om finansiering av arbetslöshetsförmåner och lagen om olycksfall i arbetet och om yrkessjukdomar\\r\\nfinns motsvarande bestämmelser.\\r\\nI inkomstslaget är det förvalt att den inte är\\r\\nunderställd socialförsäkringsavgifter.\\r\\nOm vinstarvodet är underställd ovan nämnda\\r\\navgifter, anmäler betalaren försäkringsuppgiften\\r\\nseparat med hjälp av uppgiftsgruppen Typ av\\r\\nförsäkringsuppgift.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/renumeration\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 234,\r\n    \"nameEn\": \"Annual holiday compensation\",\r\n    \"nameFi\": \"Vuosilomakorvaus\",\r\n    \"nameSv\": \"Semesterersättning\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"annualHolidayCompensation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Monetary compensation paid instead of granting an\\r\\nannual holiday. Annual holiday compensation may\\r\\nbe paid during an employment relationship or when\\r\\nan employment relationship ends.\\r\\nThis income type is also used to report the construction sector's holiday bonus. In the collective agreement, the holiday compensation, holiday\\r\\npay and holiday bonus are combined into a single\\r\\ncompensation called holiday bonus, amounting to\\r\\n18.5% of the earnings from the holiday credit year.\\r\\nAs a rule, one third of the construction sector's holiday bonus is a holiday bonus and two thirds holiday pay or holiday compensation, depending on\\r\\nwhether the employment relationship continues or\\r\\nwas terminated.\\r\\nCompensation for additional days off supplementing the annual holiday is reported using income\\r\\ntype Other compensation (216)).\",\r\n    \"descriptionFi\": \"Vuosiloman antamisen sijaan suoritettava rahallinen korvaus. Vuosilomakorvausta voidaan maksaa työsuhteen aikana tai työsuhteen päättyessä.\\r\\n\\r\\nTulolajilla ilmoitetaan myös **rakennusalan lomaraha**. Työehtosopimuksessa lomakorvaus, lomapalkka ja lomaraha on yhdistetty lomaraha-nimiseksi korvaukseksi, joka on 18,5 % lomanmääräytymisvuoden ansioista. Pääsääntöisesti rakennusalan lomakorvauksessa on 1/3 lomarahaa ja 2/3 lomapalkkaa tai lomakorvausta riippuen siitä, jatkuuko työsuhde vai päättyikö se.\",\r\n    \"descriptionSv\": \"Penningersättning som betalas i stället för att ge semester Semesterersättning kan betalas under anställningsförhållandet eller när anställningsförhållandet avslutas. Med inkomstslaget anmäls också byggbranschens semesterpenning. I kollektivavtalet har semesterersättning, semesterlön och semesterpenning alla sammanslagits till en ersättning, semesterpenning, som är 18,5 % utgående från kvalifikationsårets förtjänst. I regel är 1/3 av byggbranschens semesterersättning semesterpenning och 2/3 semesterlön eller semesterersättning beroende på om arbetsavtalsförhållandet fortsätter eller upphör. Ersättning för extra lediga dagar som kompletterar semestern anmäls med inkomstslaget Annat betalt tillägg (216).\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\nare paid from annual holiday compensation.\",\r\n    \"taxAndSideCostsDescrFi\": \"Vuosilomakorvauksesta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på semesterersättning och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/holidays\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 235,\r\n    \"nameEn\": \"Overtime compensation\",\r\n    \"nameFi\": \"Ylityökorvaus\",\r\n    \"nameSv\": \"Övertidsersättning\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"overtimeCompensation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Working time compensation paid for overtime work.\\r\\nWork that is performed at the initiative of the employer during working time exceeding the agreed\\r\\novertime limit is deemed to be overtime work.\",\r\n    \"descriptionFi\": \"Ylityöstä maksettava työaikakorvaus. Ylityönä pidetään työtä, joka tehdään työnantajan aloitteesta sovitun ylityöaikarajan ylittävänä aikana.\",\r\n    \"descriptionSv\": \"Arbetstidsersättning som betalas för övertidsarbete. Som övertid betraktas ett arbete, som utförs på arbetsgivarens initiativ under den tid som överskrider den avtalade övertidsgränsen.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\nare paid from overtime compensation\",\r\n    \"taxAndSideCostsDescrFi\": \"Ylityökorvauksesta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på övertidsersättning och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/workingTimeCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 236,\r\n    \"nameEn\": \"Night work allowance\",\r\n    \"nameFi\": \"Yötyökorvaus\",\r\n    \"nameSv\": \"Nattersättning\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"nightWorkAllowance\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Working time compensation paid for night work\",\r\n    \"descriptionFi\": \"Työaikakorvaus, jota maksetaan yötyöstä.\",\r\n    \"descriptionSv\": \"Arbetstidsersättning för nattarbete.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\nare paid from the night work allowance.\",\r\n    \"taxAndSideCostsDescrFi\": \"Yötyökorvauksesta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på nattersättning och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/workingTimeCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 237,\r\n    \"nameEn\": \"Night shift compensation\",\r\n    \"nameFi\": \"Yövuorolisä\",\r\n    \"nameSv\": \"Nattskiftstillägg\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"nightShiftCompensation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Shift work compensation paid for a night shift.\",\r\n    \"descriptionFi\": \"Vuorotyökorvaus, joka maksetaan yövuorosta.\",\r\n    \"descriptionSv\": \"Ersättning för skiftarbete som betalas för nattskift\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\npaid from night shift compensation.\",\r\n    \"taxAndSideCostsDescrFi\": \"Ylivuorolisästä toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på nattskiftstillägg och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/workingTimeCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 238,\r\n    \"nameEn\": \"Other regular compensation\",\r\n    \"nameFi\": \"Muu säännöllinen lisä\",\r\n    \"nameSv\": \"Annat regelbundet tillägg \",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"otherRegularCompensation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Sellaisten työaika- ja poikkeustilakorvausten yhteissumma, joita maksetaan säännöllisesti ja jotka lasketaan säännöllisen työajan ansioon. Muita säännöllisiä lisiä ovat mm. luontoisedusta maksetut rahakorvaukset, aattotyökorvaukset ja muut mahdolliset työehtosopimusten tai työsopimusten perusteella säännöllisesti maksettavat korvaukset ja lisät, kuten kielilisä. Myös harvoin maksettava lisä katsotaan säännölliseksi, jos se kuuluu säännöllisen työajan ansioon.\",\r\n    \"descriptionSv\": \"Totalbeloppet av sådana arbetstids- och undantagssituationsersättningar som betalas ut regelbundet och räknas till lönen för ordinarie arbetstid. Andra regelbundna tillägg är t.ex. penningersättningar för naturaförmåner, ersättningar för helgaftonsarbete och andra eventuella regelbundna ersättningar och tillägg som betalas ut på basis av villkoren i kollektivavtal eller arbetsavtal, såsom språktillägg. Ett tillägg som betalas ut sporadiskt betraktas också som ett regelbundet tillägg, om tillägget ingår i lönen för ordinarie arbetstid.\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"Säännöllisistä lisistä toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"På regelbundna tillägg ska förskottsinnehållning verkställas och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 239,\r\n    \"nameEn\": \"Compensation for unused compensatory leave\",\r\n    \"nameFi\": \"Vastikevapaan korvaus\",\r\n    \"nameSv\": \"Ersättning för kompensationsledighet \",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"compensationForUnusedCompensatoryLeave\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Compensation used in certain sectors, paid at the\\r\\nend of employment for unused days off. In certain sectors, working accumulates compensatory leave\\r\\nfor the worker, allowing the worker to take days off\\r\\nduring employment. If the employee has not used\\r\\ntheir compensatory leave at the end of their employment, compensation is paid for the unused\\r\\nleave.\\r\\nMonetary compensation paid instead of granting an\\r\\nannual holiday is reported using the Annual holiday\\r\\ncompensation (234) income type.\",\r\n    \"descriptionFi\": \"Tietyillä aloilla käytössä oleva korvaus, jota maksetaan työsuhteen päättyessä pitämättömistä vapaapäivistä. Tietyillä aloilla tehty työ kerryttää tekijälleen vastikevapaata, jota työsuhteen kuluessa pidetään vapaana. Jos työntekijä ei ole pitänyt vapaapäiviä, kun työsuhde päättyy, niistä maksetaan korvausta.\\r\\n\\r\\nVuosiloman antamisen sijaan suoritettava rahallinen korvaus ilmoitetaan tulolajilla Vuosilomakorvaus (234).\",\r\n    \"descriptionSv\": \"En ersättning som används i vissa branscher som betalas ut vid arbetsförhållandets upphörande för lediga dagar som inte tagits ut. Arbete som utförts i vissa branscher ackumulerar\\r\\nkompensationsledighet till arbetsutföraren. Under\\r\\narbetsförhållandet tar man ut\\r\\nkompensationsledigheten som ledighet. Om\\r\\narbetstagaren vid arbetsförhållandets upphörande\\r\\ninte har tagit ut sina lediga dagar, betalas\\r\\nersättning för dessa dagar till arbetstagaren.\\r\\nPenningersättning som betalas i stället för att ge\\r\\nsemester anmäls med inkomstslaget\\r\\nSemesterersättning (234).\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\npaid from the compensation for unused compensatory leave.\",\r\n    \"taxAndSideCostsDescrFi\": \"Vastikevapaan korvauksesta toimitetaan ennakon-pidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"På ersättningen för kompensationsledigheten ska förskottsinnehållning verkställas och socialförsäkringsavgifter betalas\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 301,\r\n    \"nameEn\": \"Accommodation benefit\",\r\n    \"nameFi\": \"Asuntoetu\",\r\n    \"nameSv\": \"Bostadsförmån\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"accommodationBenefit\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A fringe benefit established by the employer,\\r\\nproviding the employee with an apartment the\\r\\nemployer owns or possesses based on a lease\\r\\nrelationship related to the employment, or as a\\r\\nbenefit included in the pay.\\r\\nAn accommodation benefit can be reported separately, but the received benefit must be reported, as\\r\\nat least a total sum, using the Other fringe benefit\\r\\nincome type. In such a case, Type of benefit additional data related to the Other fringe benefit income type must be used to report that the income\\r\\nreported with the Other fringe benefit income type\\r\\nincludes an accommodation benefit.\\r\\nIf the benefit is reported separately, it should not be\\r\\nadded to the income reported using the Other\\r\\nfringe benefit income type.\\r\\nThe amount of the accommodation benefit must be\\r\\nreported in full, even when the employee has paid\\r\\na reimbursement for the benefit to the employer\\r\\nequalling the monetary value of the accommodation benefit, with no taxable benefit remaining.\",\r\n    \"descriptionFi\": \"Luontoisetu, joka syntyy, kun työnantaja antaa työntekijän käyttöön omistamansa tai hallitsemansa asunnon palvelussuhteeseen liittyvän vuokrasuhteen perusteella tai palkkaan sisältyvänä etuna.\\r\\n\\r\\nPalkkaus.fi-palvelussa asuntoetu ilmoitetaan aina tällä tulolajilla, ei koskaan 'Muu luontoisetu'-tulolajilla.\",\r\n    \"descriptionSv\": \"Naturaförmån som uppkommer när arbetsgivaren låter arbetstagaren använda en bostad som arbetsgivaren äger eller besitter enligt ett hyresförhållande baserat på anställningsförhållande eller som en förmån som ingår i lönen Bostadsförmån kan anmälas separat, men den beviljade förmånen ska åtminstone anges som total summa med inkomstslaget Övriga naturaförmåner. Då ska man dessutom med hjälp tilläggsuppgiften Typ av förmån relaterad till inkomstslaget Övriga naturaförmåner anmäla att inkomsten som anmälts med inkomstslaget Övriga naturaförmåner innehåller bostadsförmån. Om förmånen anmäls separat läggs den inte till inkomster som anmäls med inkomstslaget Övriga naturaförmåner. Beloppet av bostadsförmånen ska anmälas till sitt fulla belopp även om arbetstagaren har betalat en ersättning till arbetsgivaren som motsvarar bostadsförmånens penningvärde, och ingen beskattningsbar förmån återstår.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\nare paid from the accommodation benefit.\",\r\n    \"taxAndSideCostsDescrFi\": \"Asuntoedusta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på bostadsförmån och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/benefits\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 302,\r\n    \"nameEn\": \"Interest benefit for a housing loan\",\r\n    \"nameFi\": \"Asuntolainan korkoetu\",\r\n    \"nameSv\": \"Ränteförmån för bostadslån\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"interestBenefitForHousingLoan\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A taxable personnel benefit established when\\r\\nthe employer collects annual interest from a\\r\\nhousing loan it has granted to an employee that\\r\\nis lower than the reference interest rate commonly used in the market.\",\r\n    \"descriptionFi\": \"Veronalainen henkilökuntaetu, joka muodostuu silloin, kun työnantaja perii työntekijälle myöntämästään asuntolainasta vuotuista korkoa, joka on alempi kuin yleisesti markkinoilla käytössä oleva viitekorko.\",\r\n    \"descriptionSv\": \"En skattepliktig personalförmån som uppstår när arbetsgivaren tar ut en årlig ränta på ett bostadslån som arbetsgivaren beviljat arbetstagaren och som är lägre än den referensränta som används allmänt\\r\\npå marknaden\",\r\n    \"taxAndSideCostsDescrEn\": \"Interest benefit for a housing loan is subject to\\r\\nwithholding but not to social insurance contributions.\",\r\n    \"taxAndSideCostsDescrFi\": \"Asuntolainan korkoetu on ennakonpidätyksen alainen, mutta siitä ei makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"Ränteförmån för bostadslån är förskottsinnehållningspliktig, men inga socialförsäkringsavgifter betalas för den.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/enterprise\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 303,\r\n    \"nameEn\": \"Meal allowance\",\r\n    \"nameFi\": \"Ateriakorvaus\",\r\n    \"nameSv\": \"Måltidsersättning\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"mealAllowance\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Tax-exempt compensation of meal expenses\\r\\nthat are due to a business trip.\\r\\nThe meal allowance can be paid exempt from\\r\\ntax, if the employee does not have the opportunity to have a meal at their normal eatingplace during their lunch break and the meal has\\r\\nnot been arranged, for example, as a meal that\\r\\nforms part of the course package paid for by the\\r\\nemployer. A tax-exempt meal allowance cannot\\r\\nbe paid together with a tax-exempt daily allowance for the same business trip.\\r\\nThe decisions issued annually by the Tax Administration on tax-exempt allowances for business travel lay down the grounds for meal allowances and their tax-exempt maximum amounts.\\r\\nReport only the amounts of tax-exempt meal allowances here. If the paid allowance exceeds\\r\\nthe maximum amounts defined in the decision\\r\\nby the Tax Administration, or is paid in deviation\\r\\nfrom the grounds laid down in the decision, the\\r\\npayment should be reported as wages subject\\r\\nto social insurance contributions.\\r\\nA meal allowance can be reported separately, but\\r\\nthe received allowance must be reported as at\\r\\nleast a total sum, using the Daily allowance income\\r\\ntype. In such a case, the payer must also use the\\r\\nType of other reimbursement or benefit additional\\r\\ndata related to the income type to report that the allowance reported with the Daily allowance income\\r\\ntype includes a meal allowance.\\r\\nIf the meal allowance is reported separately, it\\r\\nshould not be added to the amounts reported using\\r\\nthe Daily allowance income type.\",\r\n    \"descriptionFi\": \"Verovapaa kustannusten korvaus ateriointikuluista, jotka johtuvat työmatkasta.\\r\\n\\r\\nAteriakorvaus voidaan maksaa verovapaasti, jos työntekijällä ei ole mahdollisuutta aterioida ruokailutauon aikana tavanomaisella ruokailupaikallaan, eikä ruokailua ole järjestetty esimerkiksi kurssipakettiin kuuluvana työnantajan kustantamana ruokailuna. **Verovapaata ateriakorvausta ei voi maksaa samasta työmatkasta yhtä aikaa verovapaan päivärahan kanssa.**\\r\\n\\r\\nAteriakorvauksen perusteista ja verovapaista enimmäismääristä säädetään vuosittain annettavissa Verohallinnon päätöksissä verovapaista matkakustannusten korvauksista.\\r\\n\\r\\nKohdassa ilmoitetaan vain verovapaiden ateriakorvausten määrät. Jos maksettu korvaus ylittää Verohallinnon päätöksen enimmäismäärät tai maksetaan vastoin päätöksessä säädettyjä perusteita, suoritus ilmoitetaan sosiaalivakuutusmaksujen alaisena palkkana.\\r\\n\\r\\nAteriakorvaus voidaan ilmoittaa erikseen, mutta saatu korvaus on ilmoitettava vähintään yhteissummana Päiväraha -tulolajilla. Tällöin on lisäksi ilmoitettava tulolajiin liittyvän Korvauksen tyyppi-lisätiedon avulla, että Päiväraha-tulolajilla ilmoitettu korvaus sisältää ateriakorvauksen.\\r\\n\\r\\nJos ateriakorvaus ilmoitetaan erikseen, sitä ei lisätä enää Päiväraha -tulolajilla ilmoitettaviin määriin.\",\r\n    \"descriptionSv\": \"Skattefri kostnadsersättning för måltidskostnader som förorsakas av arbetsresa Måltidsersättningen kan betalas skattefritt om det inte är möjligt för arbetstagaren att inta måltid under matrasten på sitt sedvanliga matställe och måltid har inte ordnats till exempel såsom i ett kurspaket ingående måltid som arbetsgivaren bekostar. Skattefri måltidsersättning kan inte betalas för samma arbetsresa samtidigt med skattefritt dagtraktamente. Bestämmelser om grunderna för måltidsersättning för arbetsresa och skattefria maximibelopp ges årligen i Skatteförvaltningens beslut om skattefria resekostnadsersättningar. I punkten anges endast beloppen av skattefria måltidsersättningar. Om den betalda ersättningen överstiger det maximala beloppet enligt Skatteförvaltningens beslut eller om den betalas i strid med grunderna enligt beslutet, anmäls prestationen som lön underställd socialförsäkringsavgifter. Måltidsersättning kan anmälas separat, men den beviljade ersättningen ska åtminstone anges som total summa med inkomstslaget Dagtraktamenten. Då ska man dessutom med hjälp tilläggsuppgiften Typ av ersättning relaterad till inkomstslaget anmäla att ersättningen som anmälts med inkomstslaget Dagtraktamenten innehåller måltidsersättning. Om måltidsersättningen anmäls separat läggs den inte till belopp som anmäls med inkomstslaget Dagtraktamenten.\",\r\n    \"taxAndSideCostsDescrEn\": \"No tax is withheld or social insurance contributions are paid from a tax-exempt meal allowance.\",\r\n    \"taxAndSideCostsDescrFi\": \"Verovapaasta ateriakorvauksesta ei toimiteta ennakonpidätystä eikä makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs inte på skattefria måltidsersättningar och inte heller socialförsäkringsavgifter ska betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/travelExpenses\"\r\n    ],\r\n    \"calcGrouping\": \"expenses\"\r\n  },\r\n  {\r\n    \"code\": 304,\r\n    \"nameEn\": \"Car benefit\",\r\n    \"nameFi\": \"Autoetu\",\r\n    \"nameSv\": \"Bilförmån\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"carBenefit\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A fringe benefit established by the employer,\\r\\nproviding the employee or their family with a car\\r\\nthat the employer owns or possesses and allowing its private use.\\r\\nThe car benefit must be reported even if the employee has paid the employer compensation for the fringe benefit equal to or exceeding the\\r\\nmonetary value of the fringe benefit, with no remaining amount to be added to the wages. The\\r\\ncollected amount is reported separately using\\r\\nthe Compensation collected for car benefit itemisation type.\",\r\n    \"descriptionFi\": \"Luontoisetu, joka syntyy, kun työnantaja antaa työntekijän tai tämän perheen käyttöön omistamansa tai hallitsemansa auton, jonka yksityiskäyttö on sallittu.\\r\\n\\r\\nAutoetu on ilmoitettava siinäkin tapauksessa, että työntekijä on maksanut luontoisedusta työnantajalle luontoisedun raha-arvoa vastaavan tai sitä suuremman korvauksen, eikä palkkaan lisättävää määrää ole jäänyt lainkaan. Peritty summa ilmoitetaan erikseen Autoedusta peritty korvaus- erittelylajilla.\",\r\n    \"descriptionSv\": \"Naturaförmån som uppkommer när arbetsgivaren ställer till förfogande för en arbetstagare eller dennes familj en bil som arbetsgivaren äger och som det är tillåtet att använda för privat bruk Bilförmån ska anmälas även om arbetstagaren betalat arbetsgivaren ett belopp som motsvarar naturaförmånens penningvärde eller en större ersättning, och ingenting återstår att lägga till lönen. Summan anmäls separat med specificeringsslaget Debiterad ersättning för bilförmån.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions\\r\\nare paid from the car benefit.\",\r\n    \"taxAndSideCostsDescrFi\": \"Autoedusta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på bilförmån och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/carBenefit\",\r\n      \"https://palkkaus.fi/usecases/2019/benefits\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 308,\r\n    \"nameEn\": \"Compensation for membership of a governing body\",\r\n    \"nameFi\": \"Hallintoelimen jäsenyydestä maksettu palkkio\",\r\n    \"nameSv\": \"Arvode för medlemskap i förvaltningsorgan\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"compensationForGoverningBodyMembership\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Compensation for acting in a position of trust,\\r\\npaid based on being a member of the company's board of directors or an equivalent governing body.\",\r\n    \"descriptionFi\": \"Luottamustoimipalkkio, joka maksetaan yhteisön hallituksen tai vastaavan hallintoelimen jäsenyyden perusteella.\\r\\n\\r\\nJos henkilölle maksetaan palkkiota hallintoelimen jäsenyydestä, hänelle voidaan maksaa myös verovapaita matkakustannusten korvauksia työmatkasta aiheutuneiden kulujen perusteella, jos verovapaiden korvausten muut edellytykset täyttyvät.\",\r\n    \"descriptionSv\": \"Arvode för förtroendeuppdrag som betalas på grund av medlemskap i ett samfunds styrelse eller motsvarande förvaltningsorgan.\",\r\n    \"taxAndSideCostsDescrEn\": \"If the recipient of compensation paid for membership of a governing body is not in an employment relationship, the payment of earnings-related pension insurance contributions from such compensation is voluntary in the private sector. However, in the public sector, compensation paid for membership of a governing body is subject to social insurance contributions. If, based on the compensation, the employee's earningsrelated pension contribution does not have to be paid according to employment pension legislation, the employer's health insurance contribution and the employee's daily allowance contribution are not paid from the compensation, even if an earnings-related pension insurance contribution was paid voluntarily. This compensation is subject to the accident and occupational disease insurance contribution, if it is paid to a person in an employment relationship. Tax is withheld from compensation paid for membership of a governing body. By default, this income type is compensation paid for membership of a governing body, where such compensation is not subject to social insurance contributions. In sectors other than the public sector, the essential factor with regard to the contribution obligation is whether the compensation was paid in an employment relationship. If the recipient of the compensation is in an employment relationship and the compensation is subject to a social insurance contribution, the payer must use the separate Type of insurance information entry to report that the income is subject to the specified insurance contribution.\",\r\n    \"taxAndSideCostsDescrFi\": \"Jos hallintoelimen jäsenestä maksettavan palkkion saaja ei ole palvelussuhteessa, työeläkevakuutusmaksujen maksaminen palkkiosta on yksityisellä sektorilla vapaaehtoista. Julkisella alalla hallintoelimen jäsenyydestä maksettavista palkkioista suoritetaan tällöinkin sosiaalivakuutusmaksut. Jos palkkion perusteella ei henkilöön sovellettavien työeläkelakien mukaan ole tarvinnut maksaa työntekijän työeläkemaksua, suorituksesta ei makseta työnantajan sairausvakuutusmaksua eikä työntekijän päivärahamaksua, vaikka työeläkevakuutusmaksu olisikin maksettu vapaaehtoisesti. Palkkio on työtapaturma- ja ammattitautivakuutusmaksun alainen, jos se maksetaan palvelussuhteessa olevalle.\\r\\n\\r\\nHallintoelimen jäsenyydestä maksettavasta palkkiosta toimitetaan ennakonpidätys.\\r\\n\\r\\nOletuksena tulolajissa on, että hallintoelimen jäsenyydestä maksettu palkkio ei ole sosiaalivakuutusmaksujen alainen. Olennaista maksuvelvollisuuden kannalta muilla kuin julkisella alalla on se, onko palkkio maksettu työ- tai muussa palvelussuhteessa.\\r\\n\\r\\nJos palkkionsaaja on palvelusuhteessa ja palkkio on jonkun sosiaalivakuutusmaksun alainen, suorituksen maksaja ilmoittaa erillistä Vakuuttamistiedon tyyppitietoa käyttäen, että tulo on ilmoitetun vakuutusmaksun alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Om mottagaren av arvode för medlemskap i förvaltningsorgan inte är i anställningsförhållande, är det inom den privata sektorn frivilligt att betala arbetspensionsförsäkringsavgifter på arvodet. På ett arvode för medlemskap i förvaltningsorgan inom den offentliga sektorn betalas då också socialförsäkringsavgifter. Om man enligt de arbetspensionslagar som på basis av arvodet tillämpar på personen inte behöver betala arbetstagarens arbetspensionsavgift, betalas inte arbetsgivarens sjukförsäkringsavgift och inte arbetstagarens dagpenningsavgift för arvodet, även om arbetspensionsförsäkringsavgiften betalats frivilligt. Arvodet är underställt arbetsolycksfallsoch yrkessjukdomsförsäkringsavgift, om det betalas till en person i anställningsförhållande. På ett arvode för medlemskap i förvaltningsorgan verkställs förskottsinnehållning. I inkomstslaget är det förvalt att arvodet för medlemskap i förvaltningsorgan inte är underställt socialförsäkringsavgifter. Det väsentliga med tanke på betalningsskyldigheten i andra sektorer än den offentliga sektorn är om arvodet betalats i arbetseller annat tjänsteförhållande. Om mottagaren av arvodet är i tjänsteförhållande och arvodet är underställt någon socialförsäkringsavgift, anmäler betalaren med hjälp av den separata uppgiften Typ av försäkringsuppgift att inkomsten är underställd den angivna försäkringsavgiften. Om arvode för medlemskap i förvaltningsorgan\\r\\nbetalas till en person, kan till personen även\\r\\nbetalas skattefria ersättningar för resekostnader\\r\\nutifrån de kostnader som arbetsresan förorsakat,\\r\\nförutsatt att de övriga förutsättningarna för\\r\\nskattefria ersättningar uppfylls.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/board\",\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"baseSalary\"\r\n  },\r\n  {\r\n    \"code\": 309,\r\n    \"nameEn\": \"Share of reserve and surplus drawn from personnel fund (taxable 80%)\",\r\n    \"nameFi\": \"Henkilöstörahastosta nostettu rahasto-osuus ja ylijäämä (veronalainen 80%)\",\r\n    \"nameSv\": \"Fondandel och överskott som tagits ut ur en personalfond (skattepliktig till 80 %)\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"shareOfReserveDrawnFromPersonnelFund\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A fund unit paid to an employee from a personnel fund. Funds allocated to personnel funds are\\r\\ndivided into items withdrawable as fund units\\r\\nand items withdrawable in cash.\\r\\n20% of a fund unit withdrawn from a personnel\\r\\nfund is tax-exempt, and tax is withheld from the\\r\\n80% share of taxable income. For taxation purposes, surplus withdrawn from a personnel fund\\r\\nis treated in the same way as a fund unit withdrawn from a personnel fund. Ks. See the Tax\\r\\nAdministration's instructions Taxation of income\\r\\nfrom a personnel fund\\r\\n(VH/3038/00.01.00./2018).\",\r\n    \"descriptionFi\": \"Rahasto-osuus, joka maksetaan työntekijälle henkilöstörahastosta. Henkilörahastoon osoitetut varat jaetaan rahasto-osuutena nostettaviin eriin ja käteisenä nostettaviin eriin.\\r\\n\\r\\nHenkilöstörahastosta nostetusta rahasto-osuudesta 20 % on verovapaata ja 80 %:n veronalaisesta ansiotulo-osuudesta toimitetaan ennakonpidätys. Henkilöstörahastosta nostettua ylijäämää kohdellaan verotuksessa samalla tavalla kuin henkilöstörahastosta nostettua rahasto-osuutta. Ks. Verohallinnon ohje Henkilöstörahastosta saatavien tulojen verotus (A69/200/2014).\\r\\n\\r\\nTulolajilla ilmoitetaan vain veronalainen osuus.\",\r\n    \"descriptionSv\": \"Fondandel som betalas till arbetstagaren ur en personalfond. Medel som anvisats till personalfond delas in i poster som tas ut som fondandelar och poster som tas ut kontant. Av inkomst som erhållits från en personalfond är 20 % skattefri och på andelen på 80 % som utgör skattepliktig förvärvsinkomst verkställs förskottsinnehållning. Överskott som lyfts från en personalfond behandlas i beskattningen på samma sätt som en fondandel som lyfts från en personalfond. Se Se Skatteförvaltningens anvisning Beskattning av inkomster från personalfonder (VH/3038/00.01.00./2018). Endast den skattepliktiga andelen anges för inkomstslaget.\",\r\n    \"taxAndSideCostsDescrEn\": \"This income type is used to report only the taxable share.\\r\\nTax is withheld, but social insurance payments\\r\\nare not paid from a withdrawn fund unit. However, social insurance contributions are paid\\r\\nfrom a fund unit withdrawn for a person in cash\\r\\nrather than paying it into the personnel fund, i.e.,\\r\\nthe employer does not pay the amount into the\\r\\nfund but directly to a member.\\r\\nOnly items withdrawn from a fund as fund units\\r\\nare reported in this section. If the payment was\\r\\nwithdrawn in cash, it is reported as regular\\r\\nwages.\",\r\n    \"taxAndSideCostsDescrFi\": \"Nostetusta rahasto-osuudesta toimitetaan ennakonpidätys, mutta ei makseta sosiaalivakuutusmaksuja. Sitä vastoin henkilöstörahastoon maksamisen sijaan suoraan henkilölle käteisenä nostetusta rahastoosuudesta, jota ei makseta rahastoon vaan työnantaja maksaa sen suoraan jäsenelle, maksetaan sosiaalivakuutusmaksut. Kohdassa ilmoitetaan vain rahastosta rahasto-osuutena nostetut erät. Jos suoritus on nostettu käteisenä, se ilmoitetaan tavallisena palkkana.\",\r\n    \"taxAndSideCostsDescrSv\": \"På uttagna fondandelar verkställs förskottsinnehållning, men inga socialförsäkringsavgifter betalas. I motsats till betalning till personalfonden betalas socialförsäkringsavgifter för fondandelar som en person tar ut kontant. I punkten anges endast poster som tagits ut ur fonden som fondandelar. Om det är kontantuttag anmäls det som vanlig lön.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 310,\r\n    \"nameEn\": \"Monetary gift for employees\",\r\n    \"nameFi\": \"Henkilöstölle annettu rahalahja\",\r\n    \"nameSv\": \"Penninggåva till personalen\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"monetaryGiftForEmployees\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A gift received from the employer as money or a\\r\\ncomparable payment.\",\r\n    \"descriptionFi\": \"Työnantajalta rahana tai siihen verrattavana suorituksena saatu lahja.\",\r\n    \"descriptionSv\": \"Penninggåva eller motsvarande prestation av arbetsgivaren.\",\r\n    \"taxAndSideCostsDescrEn\": \"A monetary gift is considered to be taxable income from which tax must be withheld but which\\r\\nis not subject to social insurance contributions, if\\r\\nthe monetary gift was given due to an anniversary concerning the employee.\\r\\nIf the monetary gift was given for a reason other\\r\\nthan such an anniversary, social insurance contributions must be paid based on the gift.\\r\\nBy default, this income type is subject to social\\r\\ninsurance contributions. If the monetary gift is not subject to social insurance contributions, the payer should report the\\r\\ninsurance details separately using the Type of\\r\\ninsurance information data group.\",\r\n    \"taxAndSideCostsDescrFi\": \"Rahalahja katsotaan veronalaiseksi tuloksi, josta on toimitettava ennakonpidätys, mutta josta ei makseta sosiaalivakuutusmaksuja, jos rahalahja on annettu työntekijän merkkipäivän johdosta.\\r\\n\\r\\nJos rahalahja on annettu muutoin kuin työntekijän omana merkkipäivänä, maksetaan suorituksesta sosiaalivakuutusmaksut.\\r\\n\\r\\nOletuksena tulolajissa on, että tulo on sosiaalivakuutusmaksujen alainen. \\r\\n\\r\\nJos annettu rahalahja ei ole sosiaalivakuutusmaksujen alainen, suorituksen maksaja ilmoittaa vakuuttamistiedon erikseen Vakuuttamistiedon tyyppi- tietoryhmää käyttäen.\",\r\n    \"taxAndSideCostsDescrSv\": \"En penninggåva anses vara skattepliktig inkomst på vilken förskottsinnehållning ska verkställas, men för vilken socialförsäkringsavgifter inte betalas, om penninggåvan har getts med anledning av arbetstagarens bemärkelsedag. Om penninggåvan ges på någon annan dag betalas socialförsäkringsavgifter för betalningen. I inkomstslaget är det förvalt att inkomsten är underställd socialförsäkringsavgifter. Om penninggåvan inte är underställd socialförsäkringsavgifter, anmäler betalaren\\r\\nförsäkringsuppgiften separat med hjälp av\\r\\nuppgiftsgruppen Typ av försäkringsuppgift.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 311,\r\n    \"nameEn\": \"Kilometre allowance (tax-exempt)\",\r\n    \"nameFi\": \"Kilometrikorvaus (verovapaa)\",\r\n    \"nameSv\": \"Kilometerersättning (skattefri)\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"kilometreAllowanceTaxExempt\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A kilometre allowance fulfilling the requirements\\r\\nset for tax exemption, paid to a person for their\\r\\nuse of a vehicle they own or possess.\\r\\nTax-exempt kilometre allowance can be paid to\\r\\npersons who are in an employment relationship\\r\\nand to persons who are not in an employment\\r\\nrelationship but who are paid wages in accordance with tax legislation, for example as meeting fees.\\r\\nIn certain cases, the kilometre allowance paid\\r\\nfor the use of a private car can be increased.\\r\\nThe grounds for the increase are laid down in\\r\\nsection 9(1) of the Tax Administration's decision\\r\\non expenses. This income type is used to report\\r\\nthe total amount of allowances paid, including\\r\\nthe increases.\\r\\nIf the kilometre allowance has been paid against\\r\\nthe criteria prescribed by law or set by a decision of the Tax Administration, no part of it is\\r\\ntax-exempt.\\r\\nIf the kilometre allowance has been paid in accordance with a decision by the Tax Administration, but in a larger amount than specified as\\r\\ntax-exempt in the decision, some of the allowance is taxable and some is tax-exempt. Taxable kilometre allowances are reported separately using their own income type or the income\\r\\ntypes for wages.\\r\\nCompensation paid to an income earner for\\r\\ntravel expenses based on a certificate (e.g. a\\r\\ntrain ticket) issued by a transport operator is taxexempt, and is not reported.\\r\\nReport only the amounts of tax-exempt kilometre allowances here. No tax is withheld or social\\r\\ninsurance contributions are paid from these\\r\\namounts. \\r\\n\\r\\nReimbursement of travel expenses between\\r\\nresidence and place of work in the construction\\r\\nsector\",\r\n    \"descriptionFi\": \"Henkilön oman tai hänen hallinnassaan olevan kulkuneuvon käytöstä suoritettava kilometrikorvaus, joka täyttää verovapaudelle asetetut vaatimukset.\\r\\n\\r\\nVerovapaata kilometrikorvausta voidaan maksaa palvelussuhteessa oleville ja henkilöille, jotka eivät ole palvelussuhteessa, mutta joille maksetaan verolainsäädännön mukaista palkkaa, esimerkiksi kokouspalkkion yhteydessä.\\r\\n\\r\\nJos kilometrikorvaus on maksettu vastoin Verohallinnon päätöksen mukaisia aika- ja kilometrirajoja, ne eivät ole miltään osin verovapaita.\\r\\n\\r\\nJos kilokorvaukset on maksettu Verohallinnon päätöksen mukaan, mutta suurempina kuin päätöksessä on määrätty verovapaaksi, osa korvauksista on veronalaista ja osa verovapaata. Veronalaiset kilometrikorvaukset ilmoitetaan erikseen omalla tulolajillaan tai palkan tulolajeilla.\\r\\n\\r\\nLiikenteenharjoittajan antaman tositteen (esimerkiksi junalipun) perusteella tulonsaajalle maksetut matkustamiskustannusten korvaukset ovat verovapaita, eikä niitä ilmoiteta.\\r\\n\\r\\n**Rakennusalalla maksettavat asunnon ja työpaikan väliset matkakustannusten korvaukset**\\r\\n\\r\\nRakennusalan työehtosopimuksen mukaan päivittäisistä asunnon ja erityisen työntekemispaikan välisistä matkoista maksetaan matkakustannusten korvausta (”tossurahaa”) erityisen taulukon mukaan eikä Verohallinnon päätöksen mukaisina kilometrikorvauksina. Työehtosopimuksen mukainen korvaus on kuitenkin pienempi kuin Verohallinnon päätöksen mukaiset kilometrikorvaukset, joten korvaus on verovapaata. \\r\\n\\r\\nRakennusalan tossurahan yhteydessä ei tarvitse ilmoittaa kilometrimäärää.\",\r\n    \"descriptionSv\": \"Kilometerersättning som betalas för användning av ett fordon som personen äger eller disponerar över och som uppfyller kraven på skattefrihet. Skattefri kilometerersättning kan betalas till personer i anställningsförhållande och till personer som inte är i anställningsförhållande, men till vilka annan lön i enlighet med skattelagstiftningen betalas exempelvis i samband med mötesarvode. Kilometerersättningen som betalas för användning av egen bil kan höjas i vissa fall. Grunderna för höjningen beskrivs i 9 § 1 mom. i Skatteförvaltningens kostnadsbeslut. Med inkomstslaget anmäls det totala beloppet av betalda ersättningar jämte förhöjningar. Om kilometerersättningar betalats i strid med lagen eller grunderna i Skatteförvaltningens beslut, är de inte skattefria till någon del. Om kilometerersättningar betalats ut enligt Skatteförvaltningens beslut, men till ett belopp som överstiger skattefriheten enligt beslutet, är en del av ersättningarna skattepliktig och en del skattefri. Skattepliktiga kilometerersättningar anmäls separat under eget inkomstslag eller under inkomstslag för lön. Ersättningar för resekostnader som betalats till inkomsttagaren på basis av ett verifikat (t.ex. tågbiljett) av en trafikant är skattefria och anmäls inte\",\r\n    \"taxAndSideCostsDescrEn\": \"According to the collective agreement of the construction sector, daily travel expenses between residence and place of work are reimbursed according\\r\\nto a special table, not as kilometre allowances set\\r\\nby a decision of the Tax Administration. However,\\r\\nthe reimbursement paid according to the collective\\r\\nagreement is lower than the kilometre allowances\\r\\nset by the decision of the Tax Administration, so\\r\\nthe reimbursement is tax-exempt. The number of\\r\\nkilometres does not need to be reported in connection with travel expense reimbursements in the\\r\\nconstruction sector.\",\r\n    \"taxAndSideCostsDescrFi\": \"Kohdassa ilmoitetaan vain verovapaiden kilometrikorvausten määrät. Summasta ei toimiteta ennakonpidätystä eikä makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"I punkten anges endast beloppen av skattefria kilometerersättningar. På summan verkställs inte förskottsinnehållning och betalas inte heller socialförsäkringsavgifter\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/travelExpenses\"\r\n    ],\r\n    \"calcGrouping\": \"expenses\"\r\n  },\r\n  {\r\n    \"code\": 312,\r\n    \"nameEn\": \"Treatment fee for municipal veterinarian\",\r\n    \"nameFi\": \"Kunnaneläinlääkärin toimenpidepalkkio\",\r\n    \"nameSv\": \"Åtgärdsarvode för kommunal veterinär\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"treatmentFeeForMunicipalVeterinarian\",\r\n    \"notSupportedError\": \"Not supported for companies / associations\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Vain kunnat käyttävät tätä tulolajia.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 313,\r\n    \"nameEn\": \"Compensation for use, earned income\",\r\n    \"nameFi\": \"Käyttökorvaus ansiotuloa\",\r\n    \"nameSv\": \"Bruksersättning som förvärvsinkomst\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"compensationForUseEarnedIncome\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Compensation paid for the assignation or right\\r\\nto use a copyright, an industrial property right, or\\r\\ninformation on industrial, commercial or scientific experience.\",\r\n    \"descriptionFi\": \"Korvaus, joka suoritetaan tekijänoikeuden, teollisoikeuden tai teollisia, kaupallisia tai tieteellisiä kokemuksia koskevien tietojen luovuttamisesta tai käyttöoikeudesta.\",\r\n    \"descriptionSv\": \"En ersättning som betalas för överlåtelse av eller nyttjanderätt till upphovsrätt, industriell äganderätt eller för uppgifter om industriella, kommersiella eller vetenskapliga rön\",\r\n    \"taxAndSideCostsDescrEn\": \"Compensation for use can be paid to recipients\\r\\nregardless of whether or not they are registered\\r\\nin the prepayment register. Compensation for\\r\\nuse is taxable income, and tax is withheld from\\r\\nthis if the recipient is not registered in the prepayment register.\\r\\nAll compensation for use from which tax has\\r\\nbeen withheld must be reported using this income type. Compensation for use paid to natural persons must be reported, even if tax has not\\r\\nbeen withheld from it. Compensation for use\\r\\npaid to natural persons registered in the prepayment register must also be reported.\\r\\nThis income type is also used to report the compensation for use paid to a consortium, organisation or joint venture.\\r\\nNo social insurance contributions are paid on\\r\\ncompensation for use.\",\r\n    \"taxAndSideCostsDescrFi\": \"Käyttökorvausta voidaan maksaa ennakkoperintärekisteriin kuuluvalle tai kuulumattomalle korvauksen saajalle. Käyttökorvaus on veronalaista ansiotuloa ja siitä toimitetaan ennakonpidätys, jos korvauksen saaja ei kuulu ennakkoperintärekisteriin.\\r\\n\\r\\nTulolajilla on ilmoitettava kaikki käyttökorvaukset, joista on toimitettu ennakonpidätys. Luonnollisille henkilöille maksetut käyttökorvaukset on ilmoitettava, vaikka niistä ei ole toimitettu ennakonpidätystä. Myös ennakkoperintärekisteriin merkitylle luonnolliselle henkilölle maksetut käyttökorvaukset on ilmoitettava.\\r\\n\\r\\nTulolajilla ilmoitetaan myös yhtymän, yhteisön tai yhteenliittymän saamat käyttökorvaukset (mutta niitä ei voi ilmoittaa Palkkaus.fi-palvelussa).\\r\\n\\r\\nTulolajilla ilmoitetaan lisäksi rajoitetusti verovelvolliselle maksetut rojalti. Jos rojalti eli käyttökorvaus on maksettu rajoitetusti verovelvolliselle luonnolliselle henkilölle, tiedot on ilmoitettava tulorekisteriin, vaikka tulonsaaja olisikin ennakkoperintärekisterissä eikä suorituksesta olisi peritty lähdeveroa.\\r\\n\\r\\nKäyttökorvauksesta ei makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"Bruksersättning kan betalas till en mottagare som finns införd iförskottsuppbördsregistret eller som inte finns införd i det. Bruksersättning utgör skattepliktig förvärvsinkomst på vilken förskottsinnehållning ska verkställas, om mottagaren inte är införd i förskottsuppbördsregistret. Alla bruksersättningar på vilka förskottsinnehållning verkställts ska anmälas för inkomstslaget. Bruksersättningar till fysiska personer ska anmälas även om förskottsinnehållning inte verkställts. Även bruksersättningar till fysiska personer som införts i förskottsuppbördsregistret ska anmälas. Med inkomstslaget anmäls också bruksersättningar som en sammanslutning, ett samfund eller ett konsortium fått. På bruksersättning betalas inte socialförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 314,\r\n    \"nameEn\": \"Compensation for use, capital income\",\r\n    \"nameFi\": \"Käyttökorvaus pääomatuloa\",\r\n    \"nameSv\": \"Bruksersättning som kapitalinkomst\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"compensationForUseCapitalIncome\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Compensation paid for the assignation or right\\r\\nto use a copyright, an industrial property right, or\\r\\ninformation on industrial, commercial or scientific experience.\\r\\nIf a copyright has been transferred as an inheritance or through a last will and testament, or\\r\\nacquired for a payment, compensation received\\r\\nfrom its use is deemed capital income for the\\r\\nperson, in the form of income received from Finland, regardless of the prepayment register entry.\",\r\n    \"descriptionFi\": \"Korvaus, joka suoritetaan tekijänoikeuden, teollisoikeuden tai teollisia, kaupallisia tai tieteellisiä kokemuksia koskevien tietojen luovuttamisesta tai käyttöoikeudesta.\\r\\n\\r\\nJos tekijänoikeus on siirtynyt perintönä tai testamentilla tai se on hankittu vastiketta vastaan, sen käyttämisestä saatu korvaus on henkilölle Suomesta saatuna tulona ennakonpidätyksenalaista pääomatuloa ennakkoperintärekisterimerkinnästä huolimatta.\",\r\n    \"descriptionSv\": \"En ersättning som betalas för överlåtelse av eller nyttjanderätt till upphovsrätt, industriell äganderätt eller för uppgifter om industriella, kommersiella eller vetenskapliga rön Om upphovsrätten har överförts som arv eller genom testamente eller skaffats mot vederlag, utgör den ersättning som utgått för användningen av denna, då den är inkomst som erhållits i Finland, innehållspliktig kapitalinkomst trots anteckning i förskottsuppbördsregistret.\",\r\n    \"taxAndSideCostsDescrEn\": \"All compensation for use from which tax has been withheld is reported using this income\\r\\ntype. Compensation for use paid to natural persons must be reported, even if tax has not been\\r\\nwithheld from it. Compensation for use paid to\\r\\nnatural persons registered in the prepayment\\r\\nregister must also be reported.\\r\\nNo social insurance contributions are paid on\\r\\ncompensation for use\",\r\n    \"taxAndSideCostsDescrFi\": \"Tulolajilla ilmoitetaan kaikki käyttökorvaukset, joista on toimitettu ennakonpidätys. Luonnollisille henkilöille maksetut käyttökorvaukset on ilmoitettava, vaikka niistä ei ole toimitettu ennakonpidätystä. Myös ennakkoperintärekisteriin merkitylle luonnolliselle henkilölle maksetut käyttökorvaukset on ilmoitettava.\\r\\n\\r\\nKäyttökorvauksesta ei makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"Alla bruksersättningar på vilka förskottsinnehållning verkställts ska anmälas för inkomstslaget. Bruksersättningar till fysiska personer ska anmälas även om förskottsinnehållning inte verkställts. Även bruksersättningar till fysiska personer som införts i förskottsuppbördsregistret ska anmälas. På bruksersättning betalas inte socialförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 315,\r\n    \"nameEn\": \"Other taxable benefit for employees\",\r\n    \"nameFi\": \"Muu henkilöstölle suunnattu veronalainen etu\",\r\n    \"nameSv\": \"Annan skattepliktig förmån till personalen\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"otherTaxableBenefitForEmployees\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A non-monetary taxable benefit collectively\\r\\ngranted by the employer to personnel. A benefit\\r\\ngranted for voluntary exercise and culture exceeding the statutory maximum amount of EUR\\r\\n400 is considered taxable benefit, for example.\",\r\n    \"descriptionFi\": \"Työnantajan henkilökunnalle kollektiivisesti myöntämä muu kuin rahana annettava veronalainen etu.\\r\\n\\r\\nVeronalaisena etuna pidetään esimerkiksi vuosittain laissa säädetyn enimmäismäärän 400 euroa ylittävää omaehtoiseen liikuntaan ja kulttuuriin annettua etua.\",\r\n    \"descriptionSv\": \"En förmån som arbetsgivaren kollektivt beviljar personalen som något annat än pengar. Som skattepliktig förmån betraktas t.ex. förmån för motion och kultur på eget initiativ som överstiger\\r\\ndet lagstadgade högsta beloppet på 400 euro om\\r\\nåret.\",\r\n    \"taxAndSideCostsDescrEn\": \"If the benefit has been granted collectively to all\\r\\npersonnel, it is not subject to social insurance\\r\\ncontributions. By default, for this income type\\r\\nthe benefit is not subject to social insurance\\r\\ncontributions.\\r\\nIf the benefit has only been granted to some\\r\\npersonnel, it is taxable in its entirety and subject\\r\\nto social insurance contributions. The payer\\r\\nthen reports the insurance details using the separate Type of insurance information data group.\",\r\n    \"taxAndSideCostsDescrFi\": \"Jos etu on annettu kollektiivisesti koko henkilökunnalle, etu ei ole sosiaalivakuutusmaksujen alainen.\\r\\n\\r\\nOletuksena tulolajissa on, ettei etu ole sosiaalivakuutusmaksujen alainen.\\r\\n\\r\\nJos etu on annettu vain osalle henkilökuntaa, etu on kokonaisuudessaan veronalainen ja etu on sosiaalivakuutusmaksujen alainen. Tällöin suorituksen maksaja ilmoittaa vakuuttamistiedon erillistä Vakuuttamistiedon tyyppi- tietoryhmää käyttäen.\\r\\n\\r\\nTulolajia käytetään myös tilanteessa, jossa työnantaja maksaa työntekijälle päivärahaa Verohallinnon päätöstä lievemmin perustein. Tällöin vakuuttamistiedon tyyppi-tiedon avulla voidaan ilmoittaa, jos työnantaja maksaa työntekijälle päivärahaa työehtosopimuksen perusteella Verohallinnon päätöstä lievemmin perustein, jolloin tulo ei ole työeläke-, työttömyyseikä työtapaturma- ja ammattitautivakuutusmaksun alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Om förmånen har beviljats kollektivt till hela personalen är förmånen inte underställd socialförsäkringsavgifter. I inkomstslaget är det förvalt att förmånen inte är underställd socialförsäkringsavgifter. Om förmånen endast har beviljats till en del av personalen är hela förmånen skattepliktig och underställd socialförsäkringsavgifter. Då anmäler betalaren försäkringsuppgiften separat med hjälp av uppgiftsgruppen Typ av försäkringsuppgift.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/benefits\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 316,\r\n    \"nameEn\": \"Other taxable income deemed earned income\",\r\n    \"nameFi\": \"Muu veronalainen ansiotulo\",\r\n    \"nameSv\": \"Övriga skattepliktiga förvärvsinkomster\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"otherTaxableIncomeDeemedEarnedIncome\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"This income type is used to report the total\\r\\namount of other payments constituting taxable\\r\\nearned income.\\r\\nThis income type is used to report taxable occasional remunerations and rewards when the recipient is not in an employment relationship with the\\r\\npayer and the payment is not compensation for\\r\\nwork. These include, for example, a benefit\\r\\ngranted to a member of a customer company's personnel (e.g. a trip, gift voucher or object), a finder's\\r\\nfee, a so-called vigilance fee paid by a bank, a\\r\\nprize from an art competition, and a competition\\r\\nprize worth over EUR 100 not based on an employment relationship. In the case of a competition\\r\\nprize received for sports, the income is reported\\r\\nusing income type: Non-wage compensation for\\r\\nwork. Additionally, report Athlete as the type of additional income earner data if the recipient of the\\r\\nprize is not in an employment relationship. For\\r\\nmore information on reporting competition prizes,\\r\\nsee the instructions Reporting data to the Incomes\\r\\nRegister: rewarding employees, payments made to an entrepreneur and other special circumstances,\\r\\nSection 5.14.\",\r\n    \"descriptionFi\": \"Tulolajilla ilmoitetaan muiden veronalaisten ansiotuloa olevien suoritusten yhteissumma.\\r\\n\\r\\nTulolajilla ilmoitetaan veronalaiset satunnaiset palkkiot ja palkinnot silloin, kun saaja ei ole työsuhteessa antajaan eikä suoritus ole työkorvausta. Tällaisia ovat esimerkiksi työsuhteeseen perustumaton kilpailupalkinto, asiakasyrityksen henkilökuntaan kuuluvalle tai muutoin asiakassuhteen perusteella annettu etu (esimerkiksi matka, lahjakortti tai esine), löytöpalkkio, pankin maksama niin sanottu tarkkaavaisuuspalkkio, taidekilpailun palkinto sekä kunnan asukkailleen maksama matkakorvaus.\",\r\n    \"descriptionSv\": \"Med inkomstslaget anmäls den totala summan av övriga skattepliktiga förvärvsinkomster. Med inkomstslaget anmäls extraordinära arvoden och belöningar när mottagaren inte står i anställningsförhållande till betalaren och prestationen inte är arbetsersättning. Exempel på sådana är förmån till anställd i ett kundföretag (t.ex. resa, presentkort eller föremål), hittelön, s.k. alerthetsbelöning av en bank, pris i konsttävling och ett tävlingspris på över 100 euro som inte grundar sig på ett anställningsförhållande.\",\r\n    \"taxAndSideCostsDescrEn\": \"Other taxable income deemed as earned income is subject to withholding but not to social insurance contributions. From the perspective of reporting, it does not matter whether or not tax could be withheld from the income. Taxes need not be withheld from competition prizes if they cannot be deemed to be wages, nonwage compensation for work or compensation for use referred to in the tax prepayment act (ennakkoperintälaki 1118/1996) or athlete's fee.\",\r\n    \"taxAndSideCostsDescrFi\": \"Muu veronalainen ansiotulo on ennakonpidätyksen alainen, mutta siitä ei makseta sosiaalivakuutusmaksuja. Merkitystä ilmoittamisen kannalta ei ole sillä, onko tulosta voitu toimittaa ennakonpidätys vai ei.\",\r\n    \"taxAndSideCostsDescrSv\": \"Övrig skattepliktig förvärvsinkomst är förskottsinnehållningspliktig, men inga socialförsäkringsavgifter betalas för den. Det saknar betydelse med tanke på anmälan om förskottsinnehållning har verkställts på inkomsten.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 317,\r\n    \"nameEn\": \"Other fringe benefit\",\r\n    \"nameFi\": \"Muu  luontoisetu\",\r\n    \"nameSv\": \"Övriga naturaförmåner\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"otherFringeBenefit\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"This income type is used to report non-monetary\\r\\ntaxable benefits granted by the employer, such\\r\\nas the total amount of accommodation, telephone and meal benefits, unless these benefits\\r\\nhave not been itemised in their own income\\r\\ntypes using complementary income types. Other\\r\\nbenefits reported using this income type include\\r\\ngarage, motorcycle and boat benefit, life and\\r\\npension insurance premiums deemed as pay,\\r\\nbenefit from a non-personalised gift voucher,\\r\\nand fringe benefits received by a person working as a seafarer.\\r\\nIf compensation for the benefit is collected from\\r\\nthe income earner, the value of the fringe benefit is reported in full using this income type before the collected compensation is deducted.\\r\\nThis means that the amount of a fringe benefit\\r\\nmust be reported in full, even when the employee has paid or the employer otherwise collected a reimbursement for the fringe benefit\\r\\nequalling the monetary value of the fringe benefit, with no taxable benefit remaining. The reimbursement collected for a fringe benefit reduces\\r\\nthe amount of taxable income and the amount of\\r\\nearnings from work on which the social insurance contributions are based.\\r\\nFringe benefits included in the paid amount\\r\\nmust be reported in connection with the Other\\r\\nfringe benefit income type. Select from the following alternatives: accommodation benefit, telephone benefit, meal benefit, other benefits.\\r\\nA meal benefit must be reported with its own income type if the employer collects a reimbursement for the meal benefit from the employee\\r\\nmatching its taxable value. In such a case, the meal benefit is not reported using the Other\\r\\nfringe benefit income type.\\r\\nThe taxable share of an employer-subsidised\\r\\ncommuter ticket must be reported using its own\\r\\nincome type, and it cannotbe reported together\\r\\nwith other fringe benefits under the Other fringe\\r\\nbenefit income type. Correspondingly, a car\\r\\nbenefit, bicycle benefit and interest benefit for a\\r\\nhousing loan must be reported separately using\\r\\ntheir own income types.\\r\\nIf an accommodation benefit, a telephone benefit or a meal benefit is reported separately using\\r\\ntheir own income types, such benefits are not\\r\\nadded to the income reported using the Other\\r\\nfringe benefit income type.\\r\\nIf the taxable value has not been separately\\r\\nconfirmed in a decision issued by the Tax Administration, the value of the fringe benefit is its\\r\\nfair value. The benefit must be reported, even if\\r\\nthe employee is not paid monetary wages at all,\\r\\nor the monetary wages are not sufficient for the\\r\\npayment of withholding tax in full.\",\r\n    \"descriptionFi\": \"Tulolajilla ilmoitetaan työnantajan muuna kuin rahana antamat verotettavat edut, esimeriksi autotalli-, moottoripyörä- ja vene-etu, palkaksi katsotut henki- ja eläkevakuutusmaksut, yksilöimättömästä lahjakortista syntyvä etu ja merimiespalveluksessa olevan henkilön merimiehenä saama luontoisetu.\\r\\n\\r\\nPalkkaus.fi-palvelussa asunto-, auto-, puhelin- ja ravintoetu sekä työsuhdematkalipun erät tulee aina ilmoittaa omalla tulolajillaan. Niitä ei lisätä 'Muu luontoisetu' kohtaan.\\r\\n\\r\\nJos tulonsaajalta peritään korvaus edusta, luontoisedun arvo ilmoitetaan täysimääräisenä tulolajilla ennen perityn korvauksen vähentämistä.\\r\\n\\r\\nJos verotusarvoa ei ole erikseen vahvistettu Verohallinnon antamassa päätöksessä, luontoisedun arvo on sen käypä arvo. Etu on ilmoitettava, vaikka työntekijälle ei maksettaisi lainkaan rahapalkkaa tai rahapalkka ei riittäisi ennakonpidätyksen täysimääräiseen toimittamiseen.\",\r\n    \"descriptionSv\": \"Med inkomstslaget anmäls skattepliktiga förmåner som arbetsgivaren beviljat i annan form än pengar, t.ex. totalt belopp av bostads-, telefon- och kostförmåner, såvida dessa inte har specificerats som separata inkomstslag med hjälp av kompletterande inkomstslag. Övriga förmåner som anmäls för inkomstslaget är t.ex. garage- och båtförmån, liv- och pensionsförsäkringspremier som betraktas som lön, förmåner baserade på ospecificerade presentkort, naturaförmåner till sjömän i sjömanstjänst. Om man av inkomsttagaren tar ut ersättning för en förmån anmäls naturaförmånens värde till fullt belopp med inkomstslaget innan den debiterade ersättningen avdras. Beloppet av naturaförmånen ska anmälas till sitt fulla belopp även om arbetstagaren har betalat eller arbetsgivaren har tagit ut en ersättning för naturaförmånen som motsvarar naturaförmånens penningvärde, och ingen beskattningsbar förmån återstår. Ersättning för naturaförmånen sänker beloppet på arbetsinkomsten som ligger till grund för socialförsäkringsavgifter och beskattningsbara inkomsten.\",\r\n    \"taxAndSideCostsDescrEn\": \"Fringe benefits are subject to withholding and to\\r\\nsocial insurance contributions. If tax could not\\r\\nbe withheld from the benefit due to the small\\r\\namount of monetary wages, withholding is not\\r\\nreported if the payer has not actually withheld\\r\\nthe tax.\\r\\nIf, exceptionally, the fringe benefit is not subject\\r\\nto the above-mentioned contributions, the payer\\r\\nreports the insurance details using the separate\\r\\nType of insurance information data group.This\\r\\nsituation occurs, for example, when the employer has paid an employee's pension or unemployment insurance contributions on the employee's behalf, in which case a fringe benefit is\\r\\nestablished for the income earner with regard to\\r\\nthe contributions paid by the employer. However, the income is not deemed income from\\r\\nwork on which the pension and unemployment\\r\\ninsurance contributions are based. Even then,\\r\\nthe benefit is subject to a health insurance contribution. See further information about the use\\r\\nof insurance information: Reporting data to the\\r\\nIncomes Register: insurance-related information\\r\\nIf the employer has paid the employee contributions on behalf of the employee, and the income\",\r\n    \"taxAndSideCostsDescrFi\": \"Luontoisedut ovat ennakonpidätyksen alaisia ja niistä maksetaan sosiaalivakuutusmaksut. Jos edusta ei ole voitu toimittaa ennakonpidätystä rahapalkan vähyyden vuoksi, ennakonpidätystä ei ilmoiteta, jos maksaja ei ole todella perinyt veroa.\\r\\n\\r\\nJos luontoisetu ei poikkeuksellisesti olisikaan edellä mainittujen maksujen alainen, suorituksen maksaja ilmoittaa vakuuttamistiedon erillistä Vakuuttamistiedon tyyppi -tietoryhmää. Tällainen tilanne on esimerkiksi silloin, kun työnantaja on maksanut työntekijän puolesta tämän eläke- tai työttömyysvakuutusmaksut, jolloin tulonsaajalle muodostuu luontoisetu työantajan maksamien maksujen osalta. Tuloa ei kuitenkaan pidetä eläke- eikä työttömyysvakuutusmaksun perusteena olevana työtulona. Etu on tällöinkin sairausvakuutusmaksun alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Naturaförmåner är förskottsinnehållningspliktiga, och socialförsäkringsavgifter betalas för dem. Om förskottsinnehållning inte har kunnat verkställas på förmånen på grund av att penninglönen är för liten anmäls förskottsinnehållningen inte om betalaren de facto inte har debiterat skatt. Om naturaförmånen undantagsvis inte är underställd ovan nämnda avgifter, anmäler betalaren försäkringsuppgiften med hjälp av den separata uppgiftsgruppen Försäkringsuppgiftens typ. En sådan situation uppstår om t.ex. arbetsgivaren för arbetstagarens räkning har betalat dennes pensions- eller arbetslöshetsförsäkringsavgifter, varvid en naturaförmån uppstår för de avgifter som arbetsgivaren betalat. Inkomsten betraktas dock inte som arbetsinkomst som utgör grund för pensions- eller arbetslöshetsförsäkringsavgiften. Även då är förmånen underställd sjukförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/benefits\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 319,\r\n    \"nameEn\": \"Kinship carer's fee\",\r\n    \"nameFi\": \"Omaishoitajan palkkio\",\r\n    \"nameSv\": \"Arvode för närståendevårdare\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"kinshipCarersFee\",\r\n    \"notSupportedError\": \"Not supported for companies / associations\",\r\n    \"descriptionEn\": \"Fee paid by the municipality to a kinship carer\\r\\nfor arranging treatment and care for an elderly,\\r\\ndisabled or ill person at home.\",\r\n    \"descriptionFi\": \"Vain kunnat käyttävät tätä tulolajia.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 320,\r\n    \"nameEn\": \"Stock options and grants\",\r\n    \"nameFi\": \"Osakepalkkio\",\r\n    \"nameSv\": \"Aktiepremie\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"stockOptions\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Remuneration paid in shares of the employer\\r\\ncompany or, instead of the agreed remuneration, an amount paid in euros that equals the\\r\\nvalue of the shares\",\r\n    \"descriptionFi\": \"Palkkio, joka annetaan työnantajayrityksen osakkeina tai sovitun palkkion sijaan rahasummana, joka vastaa osakkeiden arvoa.\",\r\n    \"descriptionSv\": \"Ett arvode som ges i aktier i arbetsgivarföretaget eller i stället för avtalat arvode som ett penningbelopp som motsvarar värdet av aktierna\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld from the remuneration, but no\\r\\nsocial insurance contributions are paid, if the\\r\\nemployee has the possibility, based on an incentive system, to receive the employer company's listed shares (or those of another company\\r\\nin the same group, or a company in some other\\r\\nequivalent financial consortium) and the value of\\r\\nthe benefit depends on the development of the\\r\\nvalue of the shares in question over a period of\\r\\nmore than one year in length after the remuneration has been promised. Otherwise, the remuneration is income subject to social insurance\\r\\ncontributions.\\r\\nThis income type is used to report both the\\r\\namount granted as shares and the amount paid\\r\\nin money. If part of the stock options and grants\\r\\nis paid in money, the share of the stock options\\r\\nand grants that was not paid in money is reported as a separate amount, with the additional\\r\\ninformation Payment other than money – Yes.\\r\\nBy default, this income type is subject to the\\r\\npension insurance contribution but not to other\\r\\nsocial insurance contributions.\\r\\nIf the remuneration in stock is subject to social\\r\\ninsurance contributions or not subject to the\\r\\npension insurance contribution, the payer reports the insurance information using the separate Type of insurance information data group.\",\r\n    \"taxAndSideCostsDescrFi\": \"Osakepalkkiosta toimitetaan ennakonpidätys, mutta ei makseta sosiaalivakuutusmaksuja, jos työntekijällä on kannustinjärjestelmän perusteella mahdollisuus saada työnantajayrityksen (tai sen kanssa samaan konserniin kuuluvan yhtiön tai muuhun vastaavaan taloudelliseen yhteenliittymään kuuluvan yhtiön) arvopaperipörssissä noteerattuja osakkeita ja edun arvo riippuu kyseisten osakkeiden arvon kehityksestä palkkion lupaamisen jälkeisenä, yli vuoden mittaisena aikana. Muussa kuin edellä mainituissa tapauksissa osakepalkkio on sosiaalivakuutusmaksujen alaista tuloa.\\r\\n\\r\\nOletuksena tulolajissa on, että se on eläkevakuutusmaksun alainen, mutta ei muiden sosiaalivakuutusmaksujen alainen.\\r\\n\\r\\nJos osakepalkkio on sosiaalivakuutusmaksujen alainen tai ei ole eläkevakuutusmaksun alainen, suorituksen maksaja ilmoittaa vakuuttamistiedon erillistä Vakuuttamistiedon tyyppi- tietoa käyttäen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Med inkomstslaget anmäls både beloppet av aktiepremien som ges i aktier samt det belopp som betalats ut i pengar. Om en del av aktiepremien betalas ut i pengar anges den andel av aktiepremien som inte betalats ut i pengar som ett skilt belopp med tilläggsuppgiften Betalats i annan form än pengar – Ja. I inkomstslaget är det förvalt att inkomsten är underställd pensionsförsäkringsavgift men inte andra socialförsäkringsavgifter. Om aktiearvodet är underställt socialförsäkringsavgifter men inte pensionsförsäkringsavgift, anmäler betalaren försäkringsuppgiften separat med hjälp av uppgiften Typ av försäkringsuppgift.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 321,\r\n    \"nameEn\": \"Wages paid by substitute payer: the employer pays for the employer's social insurance contributions (earnings-related pension, health, unemployment, and accident and occupational disease insurance)\",\r\n    \"nameFi\": \"Sijaismaksajan maksama palkka, josta työnantaja maksaa työnantajan sosiaalivakuutusmaksut (työeläke-, sairaus-, työttömyys- sekä työtapaturma- ja ammattitautivakuutus)\",\r\n    \"nameSv\": \"Lön som betalats av ställföreträdande betalare för vilken arbetsgivaren betalar arbetsgivarens socialförsäkringsavgifter (arbetspensions-, sjuk-, arbetslöshets- samt arbetsolycksfalls- och yrkessjukdomsförsäkringsavgift)\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"wagesPaidBySubstitutePayerIncludingSocialInsurance\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"The actual employer reports the total wages on\\r\\nwhich social insurance contributions are based,\\r\\nwhich the substitute payer has paid and for\\r\\nwhich the substitute payer has withheld tax.\\r\\nFor taxation purposes, the income does not\\r\\ncount as income for the income earner on the\\r\\nbasis of data provided by the actual employer;\\r\\nsuch data is required income-earner specifically,\\r\\nbecause the person accrues pension based on\\r\\nit.\\r\\nThis income type is also used when the actual\\r\\nemployer pays the employer's social insurance\\r\\ncontributions, based on wages paid as wage security.\\r\\nAlthough the substitute payer has paid the\\r\\nwages to the income earner, the actual employer is responsible for paying the employer's social insurance contributions. For this reason,\\r\\nthe actual employer must report the wages paid\\r\\nby the substitute payer income earner specifically, using the so-called info income types specifically intended for situations involving a substitute payer.\\r\\nFor its part, the substitute payer reports the information to the Incomes Register using other\\r\\nincome types and the Substitute payer – Yes\\r\\nentry. Tax on the income is levied from the income earner, based on the information provided\\r\\nby the substitute payer. The contributions collected from the employee are levied and paid\\r\\nbased on the wages paid by the substitute\\r\\npayer. As a rule, the substitute payer does not\\r\\npay the employer's social insurance contributions; the actual employer is responsible for paying them.\\r\\nParties that can be substitute payers include enforcement agencies, Kela, municipalities, Centres for Economic Development, Transport and\\r\\nthe Environment, bankruptcy estates and guarantors.\\r\\nThe reporting procedure is described in more\\r\\ndetail in the instructions Reporting data to the\\r\\nIncomes Register: payments made by substitute\\r\\npayer.\",\r\n    \"descriptionFi\": \"Varsinainen työnantaja ilmoittaa sellaiset sosiaalivakuutusmaksujen perusteena olevat palkat yhteensä, jotka sijaismaksaja on maksanut ja joista sijaismaksaja on toimittanut ennakonpidätyksen.\\r\\n\\r\\nHUOM: Kotitalous ilmoittaa Yksityisen hoidon tuen tällä tulolajilla!\\r\\n\\r\\nVarsinaisen työnantajan antaman tiedon perusteella tuloa ei lueta tulonsaajalle verotuksessa tuloksi, mutta tieto tarvitaan tulonsaajakohtaisesti, koska henkilölle karttuu eläkettä maksetun tulon perusteella.\\r\\n\\r\\nTulolajia käytetään myös silloin, kun varsinainen työnantaja maksaa palkkaturvana maksettujen palkkojen perusteella työnantajan sosiaalivakuutusmaksut.\\r\\n\\r\\nVaikka sijaismaksaja on maksanut palkan tulonsaajille, varsinainen työnantaja on vastuussa työnantajan sosiaalivakuutusmaksujen maksamisesta. Tämän vuoksi varsinaisen työnantajan on ilmoitettava sijaismaksajan maksamat palkat tulonsaajakohtaisesti käyttäen erityisesti sijaismaksajatilanteita varten tarkoitettuja niin sanottuja infotulolajeja.\\r\\n\\r\\nSijaismaksaja ilmoittaa tiedot omalta osaltaan tulorekisteriin käyttäen muita tulolajeja sekä ohjaustietoa ”Sijaismaksaja – Kyllä”. Sijaismaksajan tiedon perusteella tulo verotetaan tulonsaajalla. Työntekijältä perittävät maksut peritään ja maksetaan sijaismaksajan maksaman palkan perusteella. Sijaismaksaja ei pääsääntöisesti kuitenkaan maksa työnantajan sosiaalivakuutusmaksuja, vaan niiden maksamisesta on vastuussa varsinainen työnantaja.\\r\\n\\r\\nSijaismaksajia voivat olla esimerkiksi ulosottovirastot, Kela, kunnat, Elinkeino-. liikenne- ja ympäristökeskukset, konkurssipesät ja takaajat. Ilmoittamista on kuvattu tarkemmin asiakasohjeessa\\r\\nTietojen ilmoittaminen tulorekisteriin: sijaismaksajan maksamat suoritukset.\",\r\n    \"descriptionSv\": \"Den egentliga arbetsgivaren anmäler det totala beloppet av sådana löner som utgör grund för socialförsäkringsavgifter och som den ställföreträdande betalaren har betalat och verkställt förskottsinnehållning på. Utifrån de uppgifter som den egentliga arbetsgivaren inlämnat räknas inkomsten inte som inkomst för inkomsttagaren i beskattningen, men uppgifterna behövs inkomsttagarspecifikt, eftersom personen intjänar pension på basis av den betalda inkomsten. Inkomstslaget används också när den egentliga arbetsgivaren betalar arbetsgivarens socialförsäkringsavgifter för löner som betalats som lönegaranti. Även om den ställföreträdande betalaren har betalat lönen till inkomsttagarna ansvarar den egentliga arbetsgivaren för betalningen av arbetsgivarens socialförsäkringsavgifter. Därför ska den egentliga arbetsgivaren anmäla de löner som den ställföreträdande betalaren betalat inkomsttagarspecifikt med hjälp av s.k. infoinkomstslag som uttryckligen är avsedda för dessa situationer. Den ställföreträdande betalaren anmäler uppgifterna för sin del med hjälp av övriga inkomstslag och styruppgiften Ställföreträdande betalare – Ja. På basis av den ställföreträdande\\r\\nbetalaren beskattas inkomsten inkomsttagaren.\\r\\nArbetstagarens avgifter debiteras och betalas på\\r\\nbasis av den lön som den ställföreträdande\\r\\nbetalaren betalat. Den ställföreträdande betalaren\\r\\nbetalar i regel dock inte arbetsgivarens\\r\\nsocialskyddsavgifter, utan den egentliga\\r\\narbetsgivaren ansvarar för dem.\\r\\nStällföreträdande betalare kan vara till exempel\\r\\nutsökningsverk, FPA, kommuner, närings-, trafikoch miljöcentraler, konkursbon och borgensmän.\",\r\n    \"taxAndSideCostsDescrEn\": \"This income type is subject to employer's social\\r\\ninsurance contributions.\",\r\n    \"taxAndSideCostsDescrFi\": \"Tulolaji on työnantajan sosiaalivakuutusmaksujen alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Inkomstslaget är underställt arbetsgivarens socialförsäkringsavgifter\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/substitutePayer\"\r\n    ],\r\n    \"calcGrouping\": \"otherNoPayment\"\r\n  },\r\n  {\r\n    \"code\": 322,\r\n    \"nameEn\": \"Wages paid by substitute payer: employer pays for employer's earnings-related pension insurance contribution\",\r\n    \"nameFi\": \"Sijaismaksajan maksama palkka, josta työnantaja maksaa työnantajan työeläkevakuutusmaksun\",\r\n    \"nameSv\": \"Lön som ställföreträdande betalare betalat och för vilken arbetsgivaren betalar arbetsgivarens arbetspensionsförsäkringsavgift\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"wagesPaidBySubstitutePayerIncludingEarningsRelatedPensionInsurance\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"The actual employer reports the total wages on\\r\\nwhich pension insurance contributions are\\r\\nbased and that the substitute payer has paid\\r\\nand for which the substitute payer has withheld\\r\\ntax, but the employer is responsible for the related pension insurance contribution.\\r\\nThis income type is also used when the actual\\r\\nemployer pays the employer's pension insurance contribution based on wages paid as wage\\r\\nsecurity.\\r\\nParties that can be substitute payers include enforcement agencies, Kela, municipalities, Centres for Economic Development, Transport and\\r\\nthe Environment, bankruptcy estates and guarantors.\",\r\n    \"descriptionFi\": \"Varsinainen työnantaja ilmoittaa sellaiset eläkevakuutusmaksujen perusteena olevat palkat yhteensä, jotka sijaismaksaja on maksanut ja joista sijaismaksaja on toimittanut ennakonpidätyksen, mutta joista työnantaja vastaa eläkevakuutusmaksusta. \\r\\n\\r\\nTulolajia käytetään myös silloin, kun varsinainen työnantaja maksaa palkkaturvana maksettujen palkkojen perusteella työnantajan eläkevakuutusmaksun. Sijaismaksajia voivat olla esimerkiksi ulosottovirastot, Kela, kunnat, Elinkeino-. liikenne- ja ympäristökeskukset, konkurssipesät ja takaajat.\",\r\n    \"descriptionSv\": \"Den egentliga arbetsgivaren anmäler det totala beloppet av sådana löner som utgör grund för pensionsförsäkringsavgifter och som den ställföreträdande betalaren har betalat och verkställt förskottsinnehållning på, men arbetsgivaren ansvarar för pensionsförsäkringsavgifterna. Inkomstslaget används också i situationer där den egentliga arbetsgivaren betalar arbetsgivarens pensionsförsäkringsavgift för löner som betalats som lönegaranti. Ställföreträdande betalare kan vara till exempel utsökningsverk, FPA, kommuner, närings-, trafikoch miljöcentraler, konkursbon och borgensmän.\",\r\n    \"taxAndSideCostsDescrEn\": \"This income type is used only when the paid income has been subject solely to the pension insurance contribution.\",\r\n    \"taxAndSideCostsDescrFi\": \"Tulolajia käytetään vain silloin, jos maksettu tulo on ollut vain eläkevakuutusmaksun alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Inkomstslaget används bara när inkomsten endast varit underställt pensionsförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/substitutePayer\"\r\n    ],\r\n    \"calcGrouping\": \"otherNoPayment\"\r\n  },\r\n  {\r\n    \"code\": 323,\r\n    \"nameEn\": \"Wages paid by substitute payer: employer pays for employer's unemployment insurance contribution\",\r\n    \"nameFi\": \"Sijaismaksajan maksama palkka, josta työnantaja maksaa työnantajan työttömyysvakuutusmaksun\",\r\n    \"nameSv\": \"Lön som ställföreträdande betalare betalat och för vilken arbetsgivaren betalar arbetsgivarens arbetslöshetsförsäkringsavgift\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"wagesPaidBySubstitutePayerIncludingUnemploymentInsurance\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"The actual employer reports the total wages on\\r\\nwhich unemployment insurance contributions\\r\\nare based, which the substitute payer has paid\\r\\nand for which the substitute payer has withheld\\r\\ntax, but the employer is responsible for the unemployment insurance contribution.\\r\\nThis income type is also used when the actual\\r\\nemployer pays the employer's unemployment insurance contribution based on wages paid as\\r\\nwage security.\\r\\nParties that can be substitute payers include enforcement agencies, Kela, municipalities, Centres for Economic Development, Transport and\\r\\nthe Environment, bankruptcy estates and guarantors.\",\r\n    \"descriptionFi\": \"Varsinainen työnantaja ilmoittaa sellaiset työttömyysvakuutusmaksujen perusteena olevat palkat yhteensä, jotka sijaismaksaja on maksanut ja joista sijaismaksaja on toimittanut ennakonpidätyksen, mutta joista työnantaja vastaa työttömyysvakuutusmaksusta.\\r\\n\\r\\nTulolajia käytetään myös silloin, kun varsinainen työnantaja maksaa palkkaturvana maksettujen palkkojen perusteella työnantajan työttömyysvakuutusmaksun.\\r\\n\\r\\nSijaismaksajia voivat olla esimerkiksi ulosottovirastot, Kela, kunnat, Elinkeino-. liikenne- ja ympäristökeskukset, konkurssipesät ja takaajat.\",\r\n    \"descriptionSv\": \"Den egentliga arbetsgivaren anmäler det totala beloppet av sådana löner som utgör grund för arbetslöshetsförsäkringsavgifter och som den ställföreträdande betalaren har betalat och\\r\\nverkställt förskottsinnehållning på, men\\r\\narbetsgivaren ansvarar för\\r\\narbetslöshetsförsäkringsavgifterna.\\r\\nInkomstslaget används också i situationer där den\\r\\negentliga arbetsgivaren betalar arbetsgivarens\\r\\narbetslöshetsförsäkringsavgifter för löner som\\r\\nbetalats som lönegaranti.\\r\\nStällföreträdande betalare kan vara till exempel\\r\\nutsökningsverk, FPA, kommuner, närings-, trafikoch miljöcentraler, konkursbon och borgensmän\",\r\n    \"taxAndSideCostsDescrEn\": \"This income type is used only when the paid income has been subject solely to the unemployment insurance contribution.\",\r\n    \"taxAndSideCostsDescrFi\": \"Tulolajia käytetään vain silloin, jos maksettu tulo on ollut vain työttömyysvakuutusmaksun alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Inkomstslaget används bara när inkomsten endast varit underställt arbetslöshetsförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/substitutePayer\"\r\n    ],\r\n    \"calcGrouping\": \"otherNoPayment\"\r\n  },\r\n  {\r\n    \"code\": 324,\r\n    \"nameEn\": \"Wages paid by substitute payer, employer pays for accident and occupational disease insurance contribution\",\r\n    \"nameFi\": \"Sijaismaksajan maksama palkka, josta työnantaja maksaa työtapaturma- ja ammattitautivakuutusmaksun\",\r\n    \"nameSv\": \"Lön som ställföreträdande betalare betalat och för vilken arbetsgivaren betalar arbetsolycksfalls- och yrkessjukdomsförsäkringsavgiften\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"wagesPaidBySubstitutePayerIncludingAccidentAndOccupationalDiseaseInsurance\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"The actual employer reports the total wages on\\r\\nwhich accident and occupational disease insurance contributions are based, which the substitute payer has paid and for which the substitute\\r\\npayer has withheld tax, but the employer is responsible for the accident and occupational disease insurance contribution.\\r\\nThis income type is also used when the actual employer pays the accident and occupational\\r\\ndisease insurance contribution based on wages\\r\\npaid as wage security.\\r\\nParties that can be substitute payers include enforcement agencies, Kela, municipalities, Centres for Economic Development, Transport and\\r\\nthe Environment, bankruptcy estates and guarantors.\",\r\n    \"descriptionFi\": \"Varsinainen työnantaja ilmoittaa sellaiset työtapaturma- ja ammattitautivakuutusmaksujen perusteena olevat palkat yhteensä, jotka sijaismaksaja on maksanut ja joista sijaismaksaja on toimittanut ennakonpidätyksen, mutta joista työnantaja vastaa työtapaturma- ja ammattitautivakuutusmaksusta.\\r\\n\\r\\nTulolajia käytetään myös silloin, kun varsinainen työnantaja maksaa palkkaturvana maksettujen palkkojen perusteella työtapaturma- ja ammattitautivakuutusmaksun.\\r\\n\\r\\nSijaismaksajia voivat olla esimerkiksi ulosottovirastot, Kela, kunnat, Elinkeino-. liikenne- ja ympäristökeskukset, konkurssipesät ja takaajat.\",\r\n    \"descriptionSv\": \"Den egentliga arbetsgivaren anmäler det totala beloppet av sådana löner som utgör grund för arbetsolycksfalls- och yrkessjukdomsförsäkringsavgifter och som den ställföreträdande betalaren har betalat och verkställt förskottsinnehållning på, men arbetsgivaren ansvarar för arbetsolycksfalls- och yrkessjukdomsförsäkringsavgifterna. Inkomstslaget används också när den egentliga arbetsgivaren betalar arbetsgivarens arbetsolycksfalls- och yrkessjukdomsförsäkringsavgifter för löner som betalats som lönegaranti. Ställföreträdande betalare kan vara till exempel utsökningsverk, FPA, kommuner, närings-, trafikoch miljöcentraler, konkursbon och borgensmän.\",\r\n    \"taxAndSideCostsDescrEn\": \"This income type is used only when the paid income has been subject solely to the accident\\r\\nand occupational disease insurance contribution.\",\r\n    \"taxAndSideCostsDescrFi\": \"Tulolajia käytetään vain silloin, jos maksettu tulo on ollut vain työtapaturma- ja ammattitautivakuutusmaksun alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Inkomstslaget används bara när inkomsten endast varit underställt arbetsolycksfalls- och yrkessjukdomsförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/substitutePayer\"\r\n    ],\r\n    \"calcGrouping\": \"otherNoPayment\"\r\n  },\r\n  {\r\n    \"code\": 325,\r\n    \"nameEn\": \"Wages paid by substitute payer, employer pays for employer's health insurance contribution\",\r\n    \"nameFi\": \"Sijaismaksajan maksama palkka, josta työnantaja maksaa työnantajan sairausvakuutusmaksun\",\r\n    \"nameSv\": \"Lön som ställföreträdande betalare betalat och för vilken arbetsgivaren betalar arbetsgivarens sjukförsäkringsavgift\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"wagesPaidBySubstitutePayerIncludingHealthInsurance\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"The actual employer reports the total wages on\\r\\nwhich health insurance contributions are based\\r\\nand that the substitute payer has paid and for\\r\\nwhich the substitute payer has withheld tax, but\\r\\nthe employer is responsible for the employer's\\r\\nhealth insurance contribution.\\r\\nThis income type is also used when the actual\\r\\nemployer pays the employer's health insurance\\r\\ncontribution based on wages paid as wage security.\\r\\nParties that can be substitute payers include enforcement agencies, Kela, municipalities, Centres for Economic Development, Transport and\\r\\nthe Environment, bankruptcy estates and guarantors.\",\r\n    \"descriptionFi\": \"Varsinainen työnantaja ilmoittaa sellaiset sairausvakuutusmaksujen perusteena olevat palkat yhteensä, jotka sijaismaksaja on maksanut ja joista sijaismaksaja on toimittanut ennakonpidätyksen, mutta joista työnantaja vastaa työnantajan sairausvakuutusmaksusta.\\r\\n\\r\\nTulolajia käytetään myös silloin, kun varsinainen työnantaja maksaa palkkaturvana maksettujen palkkojen perusteella työnantajan sairausvakuutusmaksun.\\r\\n\\r\\nSijaismaksajia voivat olla esimerkiksi ulosottovirastot, Kela, kunnat, Elinkeino-. liikenne- ja ympäristökeskukset, konkurssipesät ja takaajat.\",\r\n    \"descriptionSv\": \"Den egentliga arbetsgivaren anmäler det totala beloppet av sådana löner som utgör grund för sjukförsäkringsavgifter och som den ställföreträdande betalaren har betalat och verkställt förskottsinnehållning på, men arbetsgivaren ansvarar för arbetsgivarens sjukförsäkringsavgifter. Inkomstslaget används också i situationer där den egentliga arbetsgivaren betalar arbetsgivarens sjukförsäkringsavgift för löner som betalats som lönegaranti. Ställföreträdande betalare kan vara till exempel utsökningsverk, FPA, kommuner, närings-, trafikoch miljöcentraler, konkursbon och borgensmän.\",\r\n    \"taxAndSideCostsDescrEn\": \"This income type is used only when the paid income has been subject solely to the health insurance contribution.\",\r\n    \"taxAndSideCostsDescrFi\": \"Tulolajia käytetään vain silloin, jos maksettu tulo on ollut vain sairausvakuutusmaksun alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Inkomstslaget används bara när inkomsten endast varit underställt sjukförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/substitutePayer\"\r\n    ],\r\n    \"calcGrouping\": \"otherNoPayment\"\r\n  },\r\n  {\r\n    \"code\": 326,\r\n    \"nameEn\": \"Compensation for employee invention\",\r\n    \"nameFi\": \"Palkkio työsuhdekeksinnöstä\",\r\n    \"nameSv\": \"Arvode för arbetstagares uppfinning\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"compensationForEmployeeInvention\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Compensation paid for an employee invention.\",\r\n    \"descriptionFi\": \"Palkkio, joka maksetaan työsuhdekeksinnöstä.\",\r\n    \"descriptionSv\": \"Ett arvode som betalas för arbetstagares uppfinning\",\r\n    \"taxAndSideCostsDescrEn\": \"If the duties of the employee who receives the\\r\\nfee do not include inventions, compensation for\\r\\nthe employee invention is handled as compensation for use, i.e., no social insurance contributions are paid from the compensation. In such a situation, tax is withheld from the compensation\\r\\nfor the employee invention, unless the recipient\\r\\nof the compensation is registered in the prepayment register.\\r\\nIf the income earner's duties agreed in the employment contract include inventions, the compensation is treated as wages, i.e., in addition to\\r\\ntax being withheld, in addition to which social insurance contributions are paid from the compensation.\\r\\nBy default, this income type is not subject to social insurance contributions.\\r\\nIf compensation for an employee invention is\\r\\nsubject to a social insurance contribution, the\\r\\npayer must use the separate Type of insurance\\r\\ninformation entry to report that the income is\\r\\nsubject to the specified insurance contribution.\",\r\n    \"taxAndSideCostsDescrFi\": \"Jos palkkion saajan työsuhteeseen kuuluviin tehtäviin ei kuulu keksiminen, palkkiota työsuhdekeksinnöstä käsitellään käyttökorvauksena eli palkkiosta ei makseta sosiaalivakuutusmaksuja. Tällöin työsuhdekeksinnöstä maksettavasta palkkiosta toimitetaan ennakonpidätys, ellei palkkion saaja kuulu ennakkoperintärekisteriin.\\r\\n\\r\\nJos tulonsaajan työsopimuksessa sovittuihin työtehtäviin kuuluu keksiminen, palkkiota käsitellään palkkana, eli palkkiosta maksetaan ennakonpidätyksen toimittamisen lisäksi sosiaalivakuutusmaksut.\\r\\n\\r\\nOletuksena tulolajissa on, että se ei ole sosiaalivakuutusmaksujen alainen. \\r\\n\\r\\nJos palkkio työsuhdekeksinnöstä on jonkun sosiaalivakuutusmaksun alainen, suorituksen maksaja ilmoittaa erillistä Vakuuttamistiedon tyyppi- tietoa käyttäen, että tulo on ilmoitetun vakuutusmaksun alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Om uppgifterna i ersättningsmottagarens anställningsförhållande inte omfattar uppfinning, behandlas ersättningen för arbetstagares uppfinning som bruksersättning, dvs. socialförsäkringsavgifter betalas inte på ersättningen. På ersättningen för arbetstagares uppfinning verkställs förskottsinnehållning, om inte mottagaren av belöningen är införd i förskottsuppbördsregistret. Om uppfinning ingår i de arbetsuppgifter som avtalats i inkomsttagarens arbetsavtal, behandlas ersättningen som lön, dvs. utöver att förskottsinnehållning verkställs, betalas också socialförsäkringsavgifter på belöningen. I inkomstslaget är det förvalt att inkomsten inte är underställd socialförsäkringsavgifter. Om arvodet för en uppfinning i anställningsförhållande är underställt någon socialförsäkringsavgift, anmäler betalaren med hjälp av den separata uppgiften Typ av försäkringsuppgift att inkomsten är underställd den angivna försäkringsavgiften.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 327,\r\n    \"nameEn\": \"Reimbursement of private caretaker's expenses\",\r\n    \"nameFi\": \"Perhehoitajan kustannusten korvaus\",\r\n    \"nameSv\": \"Kostnadsersättning för familjevårdare\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"reimbursementOfPrivateCaretakersExpenses\",\r\n    \"notSupportedError\": \"Not supported for companies / associations\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Vain kunnat käyttävät tätä tulolajia.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 328,\r\n    \"nameEn\": \"Private caretaker's fee\",\r\n    \"nameFi\": \"Perhehoitajan palkkio\",\r\n    \"nameSv\": \"Arvode för familjevårdare\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"privateCaretakersFee\",\r\n    \"notSupportedError\": \"Not supported for companies / associations\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Vain kunnat käyttävät tätä tulolajia.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 329,\r\n    \"nameEn\": \"Reimbursement of family day care provider's expenses\",\r\n    \"nameFi\": \"Perhepäivähoitajan kustannusten korvaus\",\r\n    \"nameSv\": \"Kostnadsersättning för familjedagvårdare\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"reimbursementOfFamilyDayCareProvidersExpenses\",\r\n    \"notSupportedError\": \"Not supported for companies / associations\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Vain kunnat käyttävät tätä tulolajia.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 330,\r\n    \"nameEn\": \"Telephone benefit\",\r\n    \"nameFi\": \"Puhelinetu\",\r\n    \"nameSv\": \"Telefonförmån\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"telephoneBenefit\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A fringe benefit, established by the employer's\\r\\npayment of the employer's telephone subscription expenses incurred during private use outside working hours.\\r\\nA telephone benefit can be reported separately, but\\r\\nthe received benefit must at least be reported as a\\r\\ntotal sum, using the Other fringe benefit income\\r\\ntype. In such a case, the Type of benefit additional\\r\\ndata related to the Other fringe benefit income type\\r\\nmust be used to report that the income reported\\r\\nusing the Other fringe benefit includes a telephone\\r\\nbenefit.\\r\\nIf the telephone benefit is reported separately, it\\r\\nshould not be added to the income reported using\\r\\nthe Other fringe benefit income type.\\r\\nThe amount of the telephone benefit must be reported in full, even when the employee has paid a\\r\\nreimbursement for the benefit to the employer equalling the monetary value of the telephone benefit, with no taxable benefit remaining.\",\r\n    \"descriptionFi\": \"Luontoisetu, joka syntyy, kun työnantaja maksaa työntekijän puhelinliittymän kulut vapaa-ajalla tapahtuvan yksityiskäytön osalta.\\r\\n\\r\\nPalkkaus.fi-palvelussa puhelinetu ilmoitetaan aina tällä tulolajilla, ei koskaan 'Muu luotoisetu'-tulolajilla.\",\r\n    \"descriptionSv\": \"Naturaförmån som uppkommer när arbetsgivaren betalar kostnaderna för arbetstagarens telefonabonnemang för privat bruk under fritiden. Telefonförmån kan anmälas separat, men den beviljade förmånen ska åtminstone anges som total summa med inkomstslaget Övriga naturaförmåner. Då ska man dessutom med hjälp tilläggsuppgiften Typ av förmån relaterad till inkomstslaget Övriga naturaförmåner anmäla att inkomsten som anmälts med inkomstslaget Övriga naturaförmåner innehåller telefonförmån. Om telefonförmånen anmäls separat läggs den inte till inkomster som anmäls med inkomstslaget Övriga naturaförmåner. Beloppet av telefonförmånen ska anmälas till sitt fulla belopp även om arbetstagaren har betalat en ersättning till arbetsgivaren som motsvarar telefonförmånens penningvärde, och ingen beskattningsbar förmån återstår.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions paid from the telephone benefit.\",\r\n    \"taxAndSideCostsDescrFi\": \"Puhelinedusta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på telefonförmån och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/benefits\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 331,\r\n    \"nameEn\": \"Daily allowance\",\r\n    \"nameFi\": \"Päiväraha\",\r\n    \"nameSv\": \"Dagtraktamente \",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"dailyAllowance\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A daily allowance is a tax-exempt reimbursement of a reasonable increase in meal and other\\r\\nliving costs incurred by the recipient due to a\\r\\nbusiness trip.\\r\\nEnter the total amount of tax-exempt daily allowances and meal allowances here.Income reported using the Daily allowance income type\\r\\ncan be\\r\\n• meal allowance,\\r\\n• domestic full daily allowance,\\r\\n• domestic partial daily allowance,\\r\\n• international daily allowance, or\\r\\n• tax-exempt reimbursements of expenses\\r\\nrelated to work abroad.\\r\\nIf reimbursements of expenses related to work\\r\\nabroad have been entered as the type of the\\r\\ndaily allowance, enter the following tax-exempt\\r\\nbenefits received by the income earner related\\r\\nto work abroad in this section:\\r\\n• the moving and travel costs of the taxpayer and their family member to the\\r\\ncountry of work and back;\\r\\n• regular private household staff abroad,\\r\\npaid for by the employer; and\\r\\n• primary and secondary education for\\r\\nchildren, paid for by the employer.\\r\\nThis income type is not used to report night\\r\\ntravel allowance or border-crossing allowance.\\r\\nThese items are not reported to the Incomes\\r\\nRegister.\\r\\nEnter only the total amount of tax-exempt daily\\r\\nallowances and meal allowances here. Each\\r\\nyear, the Tax Administration will confirm the taxexempt amounts in the decision it issues on taxexempt reimbursements of travel expenses.\\r\\nMeal allowances are entered here only if their\\r\\nown, separate Meal allowance income type was\\r\\nnot used for their reporting. If the daily allowances or other allowances mentioned here have been paid on more lenient\\r\\ngrounds than the decision by the Tax Administration, the compensation is reported using the\\r\\nTotal wages or Other compensation income\\r\\ntype, in which case it is also subject to social insurance contributions.\\r\\nIf compensation paid on more lenient grounds\\r\\nhas been agreed in a collective agreement, it is\\r\\nnot subject to pension, unemployment or accident and occupational disease insurance contributions. In such cases, the payer reports the income using the Total wages income type or\\r\\nOther compensation, while also reporting what\\r\\npart of the payment is subject to earnings-related pension, unemployment, accident, and occupational disease insurance contributions.\\r\\nAdditional information on the different daily allowances the total amount includes must be provided in connection with the income type.\",\r\n    \"descriptionFi\": \"Päiväraha on verovapaa kustannusten korvaus kohtuullisesta ruokailu- ja muiden elantokustannusten lisäyksestä, joka korvauksen saajalle aiheutuu työmatkasta.\\r\\n\\r\\nKohtaan merkitään verovapaiden päivärahojen ja ateriakorvausten yhteismäärä. Päiväraha-tulolajilla ilmoitettu tulo voi olla:\\r\\n\\r\\n- kotimaan kokopäiväraha,\\r\\n- kotimaan osapäiväraha,\\r\\n- ulkomaan päiväraha tai \\r\\n- ulkomaan työskentelyyn liittyvät verovapaat kustannusten korvaukset.\\r\\n\\r\\nPalkkaus.fi-palvelussa Ateriakorvaukset ilmoitetaan aina erillisellä Ateriakorvaus-tulolajia.\\r\\n\\r\\nJos päivärahan tyypiksi on merkitty ulkomaan työskentelyyn liittyvät kustannusten korvaukset, kohtaan merkitään seuraavat tulonsaajan saamat verovapaat edut, jotka liittyvät ulkomaan työskentelyyn:\\r\\n\\r\\n- verovelvollisen ja hänen perheenjäsenensä muutto- ja matkakustannukset työntekovaltioon ja takaisin\\r\\n- työnantajan ulkomailla kustantama tavanomainen yksityinen palveluhenkilöstö\\r\\n- työnantajan kustantama lasten perus- ja lukiotason koulutus.\\r\\n\\r\\nTulolajilla ei ilmoiteta yömatkarahaa eikä rajanylitysrahaa. Näitä eriä ei ilmoiteta tulorekisteriin.\\r\\n\\r\\nKohtaan merkitään vain verovapaiden päivärahojen ja ateriakorvausten yhteismäärä. Verohallinto vahvistaa vuosittain verovapaat määrät antamallaan päätöksellä verovapaista matkakustannusten korvauksista.\\r\\n\\r\\nJos päivärahat tai muut kohdassa mainitut korvaukset on maksettu Verohallinnon päätöstä lievemmin perustein, korvaukset ilmoitetaan tulolajilla Palkka yhteissumma tai Muu maksettu lisä, jolloin ne ovat myös sosiaalivakuutusmaksujen alaisia.\\r\\n\\r\\nJos lievemmin perustein maksetuista korvauksista on sovittu työehtosopimuksella, korvaus ei ole eläke-, työttömyys- eikä työtapaturma- ja ammattitautivakuutusmaksun alainen. Näissä tilanteissa suorituksen\\r\\nmaksaja ilmoittaa tulon Palkka yhteissumma-tulolajilla tai Muu henkilöstölle suunnattu veronalainen etu, ja samalla ilmoittaa, mikä osuus suorituksesta on eläkevakuutusmaksun, työttömyysvakuutusmaksun sekä työtapaturma- ja ammattitautivakuutusmaksun alainen.\\r\\n\\r\\nTulolajin yhteydessä on annettava lisätiedot, mitä eri päivärahoja yhteissumma sisältää.\",\r\n    \"descriptionSv\": \"Dagtraktamente är en skattefri kostnadsersättning för skäliga måltids- och andra levnadskostnader som förorsakas ersättningsmottagaren för arbetsresa. I punkten anges det totala beloppet av skattefria dagtraktamenten och måltidsersättningar. Dagtraktamente kan vara • måltidsersättning, • inrikes heldagstraktamente, • inrikes partiellt dagtraktamente, • utlandsdagtraktamente eller • skattefria ersättningar relaterade till arbete i utlandet. Om man valt som typ av dagtraktamente kostnadsersättningar relaterade till utlandsarbete, anges i punkten anges också följande skattefria förmåner relaterade till arbete i utlandet: • den skattskyldiges och familjemedlemmarnas flytt- och resekostnader till arbetsstaten och tillbaka  sedvanlig privat servicepersonal som\\r\\narbetsgivaren bekostar utomlands\\r\\n• utbildning av barn på grundskole- och\\r\\ngymnasienivå som arbetsgivaren\\r\\nbekostar.\\r\\nMed inkomstslaget anmäls inte nattresepenning\\r\\neller gränsöverskridningspenning. Dessa poster\\r\\nanmäls inte till inkomstregistret.\\r\\nI punkten anges endast det totala beloppet av\\r\\nskattefria dagtraktamenten och måltidsersättningar.\\r\\nSkatteförvaltningen fastställer årligen de skattefria\\r\\nbeloppen genom ett beslut om ersättning för\\r\\nskattefria resekostnader.\\r\\nMåltidsersättningar anges i punkten endast om de\\r\\ninte anmälts separat med inkomstslaget\\r\\nMåltidsersättningar.\\r\\nOm dagtraktamenten eller andra ersättningar som\\r\\nnämns i punkten har betalats på lindrigare grunder\\r\\nän enligt Skatteförvaltningens beslut ska de\\r\\nanmälas med inkomstslagen Lön totalt eller Annat\\r\\nbetalt tillägg, varvid de också är underställda\\r\\nsocialförsäkringsavgifter.\\r\\nOm bestämmelser på lindrigare grunder finns i\\r\\nkollektivavtal är ersättningen inte underställd\\r\\npensionsförsäkringsavgifter,\\r\\narbetslöshetsförsäkringspremier eller\\r\\nförsäkringspremie för arbetsolycksfalls- och\\r\\nyrkessjukdomsförsäkring. I dessa situationer\\r\\nanmäler betalaren inkomsten med inkomstslaget\\r\\nLön totalt eller Annan betald tillägg, och anmäler\\r\\nsamtidigt vilken andel av betalningen som är\\r\\nunderställd pensionsförsäkringsavgiften,\\r\\narbetslöshetsförsäkringspremien samt\\r\\nförsäkringspremien för arbetsolycksfalls- och\\r\\nyrkessjukdomsförsäkring.\\r\\nI samband med inkomstslaget ska man ange\\r\\ntilläggsuppgifter om vilka olika dagtraktamenten\\r\\nden totala summan innehåller\",\r\n    \"taxAndSideCostsDescrEn\": \"Daily allowances are not subject to social insurance contributions.\",\r\n    \"taxAndSideCostsDescrFi\": \"Päivärahat eivät ole sosiaalivakuutusmaksun alaisia.\",\r\n    \"taxAndSideCostsDescrSv\": \"Dagtraktamenten är inte underställda socialförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/travelExpenses\"\r\n    ],\r\n    \"calcGrouping\": \"expenses\"\r\n  },\r\n  {\r\n    \"code\": 332,\r\n    \"nameEn\": \"Capital income payment\",\r\n    \"nameFi\": \"Pääomatuloa oleva suoritus\",\r\n    \"nameSv\": \"Prestation i form av kapitalinkomst\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"capitalIncomePayment\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A payment that is capital income for its recipient.\\r\\nFor example, interest paid to an employer or a\\r\\nshareholder, such as interest on late payment of\\r\\nwages receivable or a guarantee commission\\r\\nthat is capital income.\",\r\n    \"descriptionFi\": \"Suoritus, joka on saajalleen pääomatuloa. Tällainen on esimerkiksi työntekijälle tai osakkaalle maksettu korko, kuten palkkasaatavan korko tai pääomatuloa oleva takausprovisio.\",\r\n    \"descriptionSv\": \"En prestation som är kapitalinkomst för mottagaren. T.ex. ränta på lönefordran eller garantiprovision\",\r\n    \"taxAndSideCostsDescrEn\": \"Payments are subject to withholding but not to\\r\\nsocial insurance contributions. Late-payment interest has been exempted from withholding by\\r\\nthe Finnish Tax Administration's decision\\r\\nVH/2593/00.01.00/2019).\",\r\n    \"taxAndSideCostsDescrFi\": \"Suoritukset ovat ennakonpidätyksen alaisia, mutta eivät sosiaalivakuutusmaksun alaisia. \\r\\nViivästyskorko on vapautettu Verohallinnon päätöksellä (A136/200/2016) ennakonpidätyksen toimittamisesta.\",\r\n    \"taxAndSideCostsDescrSv\": \"Prestationerna är underställda förskottsinnehållning men inte socialförsäkringsavgifter. Dröjsmålsränta\\r\\nhar befriats från förskottsinnehållning genom\\r\\nSkatteförvaltningens beslut\\r\\n(VH/2593/00.01.00/2019)\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 334,\r\n    \"nameEn\": \"Meal benefit\",\r\n    \"nameFi\": \"Ravintoetu\",\r\n    \"nameSv\": \"Kostförmån\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"mealBenefit\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A fringe benefit established when an employer\\r\\noffers meals to its employee. An employer can\\r\\nsubsidise meal costs with a meal ticket or other,\\r\\nsimilar targeted means of payment, or by arranging catering.\\r\\nThe taxable value of a meal benefit is determined as an annually confirmed value in accordance with the decision by the Tax Administration.\\r\\nA meal benefit can be reported separately, but the\\r\\nreceived benefit must be reported as at least a total\\r\\nsum using the Other fringe benefit income type. In\\r\\nsuch a case, the Type of benefit additional data related to the Other fringe benefit income type must be used to report that the income reported using\\r\\nthe Other fringe benefit includes a meal benefit.\\r\\nIf the meal benefit is reported separately, it should\\r\\nnot be added to the income reported using the\\r\\nOther fringe benefit income type.\\r\\nIf the employer collects a reimbursement corresponding to the taxable value of the meal benefit\\r\\nfrom the employee, the employer must report the\\r\\nfollowing information to the Incomes Register: Reimbursement for a meal benefit corresponds to taxable value: Yes. In this case, the payer does not\\r\\nneed to report the amount of the meal benefit or, if\\r\\nthey wish, they can report the taxable value of the\\r\\nmeal benefit as the amount. However, the recommendation is that the data item Amount is not reported if a reimbursement equalling the benefit's\\r\\ntaxable value has been collected for the meal benefit. If a reimbursement equalling the taxable value\\r\\nof the meal benefit is collected from the employee,\\r\\nthe Other fringe benefit income type must not be\\r\\nused.\",\r\n    \"descriptionFi\": \"Luontoisetu, joka syntyy, kun työnantaja tarjoaa työntekijälleen aterian. Työnantaja voi tukea ruokailukustannuksia ruokailulipukkeella tai muulla kohdennetulla maksuvälineellä taikka järjestämällä työpaikkaruokailun.\\r\\n\\r\\nRavintoedun verotusarvo määräytyy Verohallinnon päätöksen mukaisena vuosittain vahvistettavana arvona.\\r\\n\\r\\nPalkkaus.fi-palvelussa ravintoetu ilmoitetaan aina tällä tulolajilla, ei koskaan 'Muu luotoisetu'-tulolajilla.\\r\\n\\r\\nJos työnantaja perii työntekijältä ravintoedusta sen verotusarvoa vastaavan korvauksen, tulorekisteriin ilmoitetaan tieto Ravintoedusta peritty korvaus vastaa verotusarvoa: Kyllä.\",\r\n    \"descriptionSv\": \"Naturaförmån som uppkommer när arbetsgivaren erbjuder arbetstagaren en måltid. Arbetsgivaren kan subventionera måltidskostnader med en måltidsbiljett eller andra riktade betalinstrument eller genom att ordna måltider på arbetsplatsen. Beskattningsvärdet på kostförmånen fastställs årligen av Skatteförvaltningen. Kostförmån kan anmälas separat, men den beviljade förmånen ska åtminstone anges som total summa med inkomstslaget Övriga naturaförmåner. Då ska man dessutom med hjälp tilläggsuppgiften Typ av förmån relaterad till inkomstslaget Övriga naturaförmåner anmäla att inkomsten som anmälts med inkomstslaget Övriga naturaförmåner innehåller kostförmån. Om kostförmånen anmäls separat läggs den inte till inkomster som anmäls med inkomstslaget Övriga naturaförmåner. Om arbetsgivaren tar ut en ersättning för kostförmånen som motsvarar beskattningsvärdet, anmäls till inkomstregistret ”Ersättningen för kostförmån motsvarar beskattningsvärdet: Ja. Betalaren kan då låta bli att anmäla beloppet på kostförmånen eller anmäla kostförmånens beskattningsvärde som belopp. Det rekommenderas emellertid att uppgiften Belopp inte anmäls, om en ersättning som motsvarar beskattningsvärdet har tagits ut för kostförmånen. Om arbetsgivaren tar ut en ersättning för kostförmånen som motsvarar beskattningsvärdet kan inkomstslaget Övriga naturaförmåner inte användas.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld and social insurance contributions are paid from a meal benefit.\",\r\n    \"taxAndSideCostsDescrFi\": \"Ravintoedusta toimitetaan ennakonpidätys ja maksetaan sosiaalivakuutusmaksut.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på kostförmån och socialförsäkringsavgifter betalas.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/benefits\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 335,\r\n    \"nameEn\": \"Reimbursement of costs, paid to conciliator\",\r\n    \"nameFi\": \"Sovittelijan kulukorvaus\",\r\n    \"nameSv\": \"Kostnadsersättning för medlare\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"reimbursementOfCostsPaidToConciliator\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Taxable reimbursement of costs paid to a voluntary conciliator to cover the costs incurred from\\r\\nthe conciliation process.\\r\\nConciliator's reimbursement of costs is taxable\\r\\nearned income that is taken into consideration\\r\\nas an equal-amount deduction in the recipient's\\r\\ntaxation, without a separate account being\\r\\nmade by the recipient.\",\r\n    \"descriptionFi\": \"Veronalainen kustannusten korvaus, joka maksetaan vapaaehtoiselle sovittelijalle sovittelusta aiheutuneista kustannuksista.\\r\\n\\r\\nSovittelijan kulukorvaus on veronalaista ansiotuloa, joka otetaan huomioon suorituksen saajan verotuksessa saman suuruisena vähennyksenä ilman suorituksen saajan esittämää eri selvitystä.\",\r\n    \"descriptionSv\": \"Skattepliktig kostnadsersättning som betalas till en frivillig medlare för kostnader som förorsakats av medlingen Kostnadsersättning för medlare är skattepliktig förvärvsinkomst som beaktas i betalningsmottagarens beskattning som ett motsvarande avdrag utan separat utredning av betalningsmottagaren.\",\r\n    \"taxAndSideCostsDescrEn\": \"No tax is withheld or social insurance contributions are paid from the reimbursement of expenses.\",\r\n    \"taxAndSideCostsDescrFi\": \"Kulukorvauksista ei toimiteta ennakonpidätystä eikä makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"På kostnadsersättningen verkställs inte förskottsinnehållning och betalas inte socialförsäkringsavgifter\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/expenses\"\r\n    ],\r\n    \"calcGrouping\": \"expenses\"\r\n  },\r\n  {\r\n    \"code\": 336,\r\n    \"nameEn\": \"Non-wage compensation for work\",\r\n    \"nameFi\": \"Työkorvaus\",\r\n    \"nameSv\": \"Arbetsersättning\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"nonWageCompensationForWork\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Remuneration paid or agreed to be paid for\\r\\nwork performed in a non-employment relationship, from which tax must be withheld if the recipient is not registered in the prepayment register, but from which social insurance contributions are not paid as a rule.\\r\\nNon-wage compensation for work can be paid to\\r\\nrecipients regardless of whether or not they are\\r\\nregistered in the prepayment register. Non-wage\\r\\ncompensation for work is taxable income, and\\r\\ntax is withheld from it if the recipient is not registered in the prepayment register. . Compensation paid to a support person is an example of\\r\\nnon-wage compensation for work. Compensation paid to a support family is reported using income type Private caretaker's fee (328). Nonwage compensation for work is commonly called\\r\\na fee.\\r\\nNon-wage compensation for work must be reported if the income earner is not registered in\\r\\nthe prepayment register.\\r\\nBecause a report must be submitted always\\r\\nwhen the income earner is not registered in the\\r\\nprepayment register, the recipient may also be\\r\\nother than a natural person, such as an association, limited liability company, general partnership or limited partnership.\\r\\nA report must also be submitted for the nonwage compensation for work when the payer is\\r\\ncovered by the public sector pensions act\\r\\n(julkisten alojen eläkelaki 81/2016), and the income earner is a natural person who is registered in the prepayment register but does not\\r\\nhave insurance under the self-employed persons' pensions act (yrittäjän eläkelaki\\r\\n1272/2006). \\r\\n\\r\\nNon-wage compensation for work paid to a\\r\\ncompany with a limited tax liability must be reported, if the payer has collected tax at source\\r\\nfrom the company. Non-wage compensation for\\r\\nwork paid to a natural person with a limited tax\\r\\nliability must always be reported regardless of\\r\\nwhether or not tax at source has been collected.\\r\\nFor example, a fee paid to an athlete or artist\\r\\nwho is a non-resident taxpayer must always be\\r\\nreported.\\r\\nAs a rule, no social insurance contributions are\\r\\npaid from non-wage compensation for work. An\\r\\nemployer subject to public sector pension legislation pays earnings-related pension insurance\\r\\ncontributions based on a private person's commissioning contract, if the commissioned person\\r\\nis not self-employed, i.e., does not have insurance in accordance with the Self-Employed Persons' Pensions Act. Furthermore, the income\\r\\nearner pays the employee's daily allowance\\r\\ncontribution of health insurance from non-wage\\r\\ncompensation for work. By default, this income\\r\\ntype is not subject to social insurance contributions.\\r\\nIf the non-wage compensation for work is subject to any social insurance contribution, the\\r\\npayer must use the separate Type of insurance\\r\\ninformation entry to report that the income is\\r\\nsubject to the specified insurance contribution.\\r\\nSee the instructions Reporting data to the Incomes Register: insurance-related data.\\r\\nReimbursement of expenses related to nonwage compensation for work\\r\\nIf the fee or other remuneration has been paid as\\r\\nnon-wage compensation for work, the recipient\\r\\ncannot be paid reimbursements of expenses that\\r\\nwould be included in tax-exempt expenses.\\r\\nReimbursements of expenses related to nonwage compensation for work are added to the\\r\\namount of income as a lump sum with the other\\r\\nremuneration. Reimbursements of expenses\\r\\npaid in connection with non-wage compensation\\r\\nfor work are not tax-exempt. If a taxable kilometre allowance is paid to a commissioned person\\r\\nor organisation, the allowance is reported as non-wage compensation for work, and the income type Kilometre allowance (taxable) may\\r\\nnot be used.\\r\\nIf, in connection with non-wage compensation\\r\\nfor work, a payer covered by the public sector\\r\\npensions act pays reimbursements of expenses\\r\\nto a natural person who does not have an insurance under self-employed persons’ pensions\\r\\nacts, the payer must report the reimbursement\\r\\nof expenses, in addition to the fee, on a separate earnings payment report using income type\\r\\nNon-wage compensation for work if the recipient is not registered in the prepayment register.\\r\\nIn this case, the fee reported as non-wage compensation for work and the reimbursements of\\r\\nexpenses can be reported on a single report,\\r\\nbut the share of the fee must be itemised separately on the report and the income type must\\r\\ninclude the type of insurance information “Subject to pension insurance contribution: Yes'. The\\r\\nshare of reimbursement of expenses does not\\r\\nneed to be reported if the recipient is registered\\r\\nin the prepayment register.\\r\\nA recipient of non-wage compensation for work\\r\\ncan request that travel expenses be deducted\\r\\non the pre-completed tax return form. However,\\r\\nbusiness operators must deduct travel expenses\\r\\nin their accounting.\",\r\n    \"descriptionFi\": \"Muussa kuin palvelussuhteessa tehdystä työstä maksettava tai maksettavaksi sovittu vastike, josta tulee toimittaa ennakonpidätys, jos saaja ei ole ennakkoperintärekisterissä, mutta josta ei pääsääntöisesti makseta sosiaalivakuutusmaksuja.\\r\\n\\r\\nTyökorvausta voidaan maksaa ennakkoperintärekisteriin kuuluvalle tai kuulumattomalle työn suorittajalle. Työkorvaus on veronalaista ansiotuloa ja siitä toimitetaan ennakonpidätys, jos saaja ei kuulu ennakkoperintärekisteriin. Työkorvausta on esimerkiksi tukiperheelle maksettu korvaus.\\r\\n\\r\\nTyökorvauksesta on annettava ilmoitus, jos tulonsaaja ei kuulu ennakkoperintärekisteriin tai, jos maksajana on julkisten alojen eläkelakien piiriin (JuEL) kuuluva suorituksen maksaja ja tulonsaaja on luonnollinen henkilö, joka kuuluu ennakkoperintärekisteriin, mutta hänellä ei ole yrittäjän eläkelakien mukaista vakuutusta. Koska ilmoitus tehdään aina, kun tulonsaaja ei kuulu ennakkoperintärekisteriin, saajana voi olla myös muu kuin luonnollinen henkilö, kuten yhdistys, osakeyhtiö, avoin yhtiö tai kommandiittiyhtiö. Näitä maksuja ei kuitenkaan voi tehdä Palkkaus.fi-palvelun kautta.\\r\\n\\r\\nRajoitetusti verovelvolliselle yritykselle maksetut työkorvaukset on ilmoitettava, jos maksaja on perinyt yritykseltä lähdeveron. Rajoitetusti verovelvolliselle luonnolliselle henkilölle maksettu työkorvaus on ilmoitettava aina riippumatta siitä, onko lähdeveroa peritty, esimerkiksi rajoitetusti verovelvollisen urheilijan ja taiteilijan saama palkkio on ilmoitettava.\\r\\n\\r\\n**Työkorvauksiin liittyvät kustannusten korvaukset**\\r\\n\\r\\nJos palkkio tai muu suorituksen määrä on maksettu työkorvauksena, saajalla ei voi olla verovapaisiin kuluihin merkittäviä kustannusten korvauksia.\\r\\n\\r\\nTyökorvauksiin liittyvät kustannusten korvaukset lisätään tulon määrään yhtenä summana muun palkkion kanssa. Työkorvauksen yhteydessä maksetut kustannusten korvaukset eivät ole verovapaita. Jos veronalainen kilometrikorvaus maksetaan toimeksiantosuhteessa olevalle henkilölle tai yhteisölle, korvaus ilmoitetaan työkorvauksena, eikä tulolajia kilometrikorvaus (veronalainen) saa käyttää.\\r\\n\\r\\nTyökorvauksen saaja voi vaatia matkakustannuksia vähennettäväksi esitäytetyllä veroilmoituksellaan. Elinkeinotoiminnan harjoittaja vähentää kuitenkin matkakustannukset kirjanpidossaan.\\r\\n\\r\\nTyökorvauksesta ei yleensä voi ennen ennakonpidätyksen toimittamista vähentää työstä aiheutuneita kustannusten korvauksia. Poikkeuksena ovat vain luonnollisille henkilöille työmatkasta maksetut kustannusten korvaukset, joista ei tarvitse toimittaa ennakonpidätystä, jos niiden perusteet ja määrät ovat sen mukaisia kuin Verohallinnon vuosittain antamassa päätöksessä verovapaista matkakustannusten korvauksista on määrätty. Nämäkään korvaukset eivät ole verovapaita, joten ne ilmoitetaan työkorvauksen yhteissummassa.\",\r\n    \"descriptionSv\": \"Vederlag som betalas eller som avtalats att ska betalas för arbete som utförts i annat än anställningsförhållande, på vilket förskottsinnehållning ska verkställas, om mottagaren inte har införts i förskottsuppbördsregistret, men på vilket i regel inte betalas socialförsäkringsavgifter. Arbetsersättning kan betalas till en person som utför arbetet som finns införd i förskottsuppbördsregistret eller som inte finns införd i förskottsuppbördsregistret. Arbetsersättning är skattepliktig förvärvsinkomst på vilken förskottsinnehållning ska verkställas, om mottagaren inte finns införd i förskottsuppbördsregistret. Arbetsersättning är till exempel ersättning som betalats till en stödperson. Arbetsersättning är till exempel ersättning som betalats till en stödperson. Ersättningar som betalats till stödfamiljer anmäls med inkomstslaget Arvode för familjevårdare (328). I allmänspråk\\r\\nanvänds ofta benämningen arvode.\\r\\nArbetsersättning ska anmälas om inkomsttagaren\\r\\ninte är införd i förskottsuppbördsregistret.\\r\\nEftersom anmälan alltid lämnas in då\\r\\ninkomsttagaren inte är införd i\\r\\nförskottsuppbördsregistret, kan mottagaren även\\r\\nvara annan än en fysisk person, så som en\\r\\nförening, ett aktiebolag, ett öppet bolag eller ett\\r\\nkommanditbolag.\\r\\nArbetsersättning ska anmälas om betalaren är en\\r\\nprestationsbetalare som omfattas av\\r\\npensionslagarna för den offentliga sektorn (OffPL)\\r\\noch inkomsttagaren är en fysisk person som är\\r\\ninförd i förskottsuppbördsregistret men saknar\\r\\nförsäkring enligt pensionslagarna för företagare.\\r\\nArbetsersättningar till ett begränsat skattskyldigt\\r\\nföretag ska anmälas, om betalaren debiterat\\r\\nföretaget källskatt. Arbetsersättning till en\\r\\nbegränsat skattskyldig fysisk person ska alltid\\r\\nanmälas oberoende av om källskatt debiterats, till\\r\\nexempel ett arvode som en begränsat skatteskyldig\\r\\nidrottare eller artist fått.\",\r\n    \"taxAndSideCostsDescrEn\": \"Before tax is withheld, reimbursements of expenses incurred from work cannot, in general,\\r\\nbe deducted from non-wage compensation for\\r\\nwork. The only exception is the reimbursement\\r\\nof travel expenses paid to natural persons, from\\r\\nwhich tax does not need to be withheld if the\\r\\ngrounds and amounts of the travel expenses are\\r\\nin accordance with the tax-exempt allowances\\r\\nfor business travel laid down in the annual decision issued by the Tax Administration. These allowances are not tax-exempt either, so they are\\r\\nreported in the total amount of the non-wage\\r\\ncompensation for work.\",\r\n    \"taxAndSideCostsDescrFi\": \"Työkorvauksesta ei pääsääntöisesti makseta sosiaalivakuutusmaksuja. Julkisten alojen eläkelakien piiriin kuuluva työnantaja maksaa yksityishenkilön toimeksiantosopimuksen perusteella työeläkevakuutusmaksut, jos toimeksisaaja ei toimi yrittäjänä eli hänellä ei ole yrittäjän eläkelain mukaista vakuutusta. Lisäksi tulonsaaja maksaa työkorvauksesta työntekijän sairausvakuutuksen päivärahamaksun. Oletuksena tulolajissa on, ettei tulo ole sosiaalivakuutusmaksujen alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"På arbetsersättning betalas i regel inte socialförsäkringsavgifter. En arbetsgivare som omfattas av pensionslagen för den offentliga sektorn betalar utifrån ett uppdragsavtal arbetspensionsförsäkringsavgift på arbetsersättning, om uppdragstagaren inte är företagare, dvs. saknar en försäkring i enlighet med lagen om pension för företagare. Dessutom betalar inkomsttagaren dagpenningsavgift för arbetstagarens sjukförsäkring. I inkomstslaget är det förvalt att inkomsten inte är underställd socialförsäkringsavgifter\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/wages\"\r\n    ],\r\n    \"calcGrouping\": \"baseSalary\"\r\n  },\r\n  {\r\n    \"code\": 337,\r\n    \"nameEn\": \"Supplementary daily allowance paid by employer-specific health insurance fund\",\r\n    \"nameFi\": \"Työnantajakohtaisen sairaskassan maksama täydennyspäiväraha\",\r\n    \"nameSv\": \"Kompletteringsdagpenning som betalats av en arbetsgivarspecifik sjukkassa\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"supplementaryDailyAllowancePaidByEmployerSpecificHealthInsuranceFund\",\r\n    \"notSupportedError\": \"Not supported for companies / associations\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Vain sairauskassat käyttävät tätä tulolajia\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 338,\r\n    \"nameEn\": \"Pension paid by employer\",\r\n    \"nameFi\": \"Työnantajan maksama eläke\",\r\n    \"nameSv\": \"Pension som arbetsgivaren betalat ut\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"pensionPaidByEmployer\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Pension paid by an employer to a former employee or their beneficiary on the basis of a previous employment relationship.\",\r\n    \"descriptionFi\": \"Eläke, jonka työnantaja maksaa entiselle työntekijälleen tai tämän edunsaajalle aiemman palvelussuhteen perusteella.\",\r\n    \"descriptionSv\": \"Pension som arbetsgivaren betalar till en tidigare arbetstagare eller dennes förmånstagare på basis av anställningsförhållande.\",\r\n    \"taxAndSideCostsDescrEn\": \"Such income is subject to withholding. No social\\r\\ninsurance contributions are paid from the pension paid by an employer.\",\r\n    \"taxAndSideCostsDescrFi\": \"Tulo on ennakonpidätyksen alainen. Työnantajan maksamasta eläkkeestä ei makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"Inkomsten är förskottsinnehållningspliktig. På pension som arbetsgivaren betalar betalas inte socialförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/employmentTermination\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 339,\r\n    \"nameEn\": \"Dividends/profit surplus based on work effort (wages)\",\r\n    \"nameFi\": \"Työpanokseen perustuva osinko tai ylijäämä (palkka)\",\r\n    \"nameSv\": \"Dividend eller överskott (lön) som baserar sig på arbetsinsats\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"dividendsBasedOnWages\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Dividends paid to a shareholder as wages, the\\r\\ndistribution basis of which is the work effort of\\r\\nthe recipient of the dividends or of a person in\\r\\ntheir sphere of interest.\",\r\n    \"descriptionFi\": \"Osakkaalle palkkana maksettava osinko, jonka jakoperusteena on osingonsaajan tai tämän intressipiiriin kuuluvan henkilön työpanos.\",\r\n    \"descriptionSv\": \"Dividend som betalas till aktieägare som lön, där grunden för utdelningen är en arbetsinsats som dividendtagaren eller någon inom denna persons intressesfär har gjort.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld from dividends based on work\\r\\neffort. Dividends paid to a company shareholder\\r\\nare subject to social insurance contributions.\\r\\nThe amount of the dividends acts as the basis of\\r\\nthe employee's daily allowance contribution of\\r\\nhealth insurance.\",\r\n    \"taxAndSideCostsDescrFi\": \"Työpanokseen perustuvasta osingosta toimitetaan ennakonpidätys. Yhtiön osakkaalle jaettavasta osingosta ei makseta työeläkevakuutus-, työttömyysvakuutus- eikä työtapaturma- ja ammattitautivakuutuksen maksua, vaikka osinko katsottaisiin työpanokseen perustuvaa osinkoa koskevien erityissäännösten perusteella verotuksessa palkaksi. Työpanokseen perustuvasta osingosta maksetaan työnantajan sairausvakuutusmaksu ja osingon määrä on työntekijän sairausvakuutuksen päivärahamaksun perusteena.\",\r\n    \"taxAndSideCostsDescrSv\": \"På dividend som grundar sig på arbetsinsats verkställs förskottsinnehållning. På dividend som utdelas till bolagets aktieägare betalas socialförsäkringsavgifter. Dividendbeloppet utgör grund för sjukförsäkringens dagpenningsavgift.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 340,\r\n    \"nameEn\": \"Dividends/profit surplus (wages) based on work effort (non-wage)\",\r\n    \"nameFi\": \"Työpanokseen perustuva osinko tai ylijäämä (työkorvaus)\",\r\n    \"nameSv\": \"Dividend eller överskott (arbetsersättning) som baserar sig på arbetsinsats\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"dividendsBasedOnNonWage\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Dividends paid to a shareholder as non-wage\\r\\ncompensation for work, the distribution basis of\\r\\nwhich is the work effort of the recipient of the\\r\\ndividends or a person in their sphere of interest.\\r\\nA report must be submitted for dividends/profit\\r\\nsurplus based on work effort taxed as non-wage\\r\\ncompensation for work, even when the recipient\\r\\nis registered in the prepayment register.\",\r\n    \"descriptionFi\": \"Osakkaalle työkorvauksena maksettava osinko, jonka jakoperusteena on osingonsaajan tai tämän intressipiiriin kuuluvan henkilön työpanos.\\r\\n\\r\\nIlmoitus on annettava työkorvauksena verotettavasta työpanokseen perustuvasta osingosta tai ylijäämästä siinäkin tapauksessa, että saaja on merkitty ennakkoperintärekisteriin.\",\r\n    \"descriptionSv\": \"Dividend som betalas till aktieägare som arbetsersättning, där grunden för utdelningen är en arbetsinsats som dividendtagaren eller någon inom denna persons intressesfär har gjort. En årsanmälan ska lämnas om en arbetsinsatsdividend eller överskott som beskattas som arbetsersättning också i det fall att mottagaren har införts i förskottsuppbördsregistret.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld from the dividends based on\\r\\nwork effort (non-wage), unless the recipient is\\r\\nregistered in the prepayment register. No social\\r\\ninsurance contributions are paid from the payment. However, the income is subject to the employee's daily allowance contribution of health\\r\\ninsurance.\",\r\n    \"taxAndSideCostsDescrFi\": \"Työpanokseen perustuvasta osingosta (työkorvausta) toimitetaan ennakonpidätys, ellei saaja ole ennakkoperintärekisterissä. Suorituksesta ei makseta sosiaalivakuutusmaksuja. Tulo on kuitenkin työntekijän sairausvakuutuksen päivärahamaksun alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på dividend som baserar sig på arbetsinsats (arbetsersättning), om mottagaren inte är införd i förskottsuppbördsregistret. På prestationen betalas inte socialförsäkringsavgifter. Inkomsten är dock underställd dagpenningsavgiften för arbetstagarens sjukförsäkring.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 341,\r\n    \"nameEn\": \"Employer-subsidised commuter ticket, tax-exempt share\",\r\n    \"nameFi\": \"Työsuhdematkalipun verovapaa osuus\",\r\n    \"nameSv\": \"Skattefri andel av personalbiljett\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"employerSubsidisedCommuterTicketTaxExempt\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"This income type is used to report the tax-exempt share of a personal public transport ticket paid for an employee by an employer.\\r\\nPart of the value of the employer-subsidised commuter ticket is tax-exempt and part is taxable. The taxable share of the employer-subsidised commuter ticket is a fringe benefit. A personal public transport ticket with a value of no more than EUR 3400, provided by the employer to the employee for commuting between the employee's residence and place of work, is tax-exempt income. If an employee has both an employer-subsidised commuter ticket and a bicycle benefit, their total tax-exempt amount can be at most EUR 3,400.\\r\\nIf a tax-exempt employer-subsidised commuter ticket benefit is provided by deducting the benefit from the employee’s monetary wages, the earnings-related pension and unemployment insurance contributions and the accident and occupational disease insurance contributions are calculated based on the amount of the wages before the value of the fringe benefit is deducted. A report must always be submitted for an employer-subsidised commuter ticket, including when there is no taxable benefit or deductible amount.\\r\\nIf the income earner buys the ticket themselves, and the employer pays the price of the ticket or part of it to the employee, the entirety of the compensation paid by the employer is considered to be the employee's wages. In such a case, the price of the ticket paid to the employee is reported as wages only.\\r\\nThe employer-subsidised commuter ticket mustbe reported as income for the pay period in which the benefit was handled in the payroll accounting for the employee. If a tax-exempt employer-subsidised commuter ticket benefit is not handled in the payroll system at all, the tax-exempt employer-subsidised commuter ticket benefit can be reported once a year. However, the recommendation is that the benefit is reported in the report for the month in which it was given.\\r\\nIn the case of employer-subsidised commuter tickets, the amounts of taxable and tax-exempt benefit are estimated on an annual level unlike with other fringe benefits, which are valuated on a monthly level as a rule. If an employer-subsidised commuter ticket is granted once per year, for example at the start of the year, and a reimbursement is collected regularly throughout the entire year, the person would, in practice, incur a taxable benefit at the start of the year, as the payer has not yet had time to collect more than the first month's reimbursement for the benefit.\\r\\nSo that the payer does not need to correct submitted reports in a situation described above, the payer can anticipate the situation in advance and divide the tax-exempt share over the entire year, reporting it monthly to the Incomes Register together with the collected reimbursement.\\r\\nIf an employer-subsidised commuter ticket is given at the beginning of the year for the entire year and the employment relationship ends during the year, the payer must correct the previously submitted reports. In this case, only the share allocated to the employment period is an employer-subsidised commuter ticket benefit. The payer must enter the share of the ticket not based on an employment relationship as wages, unless a reimbursement is collected for the ticket from the income earner.\",\r\n    \"descriptionFi\": \"Tulolajilla ilmoitetaan työnantajan työntekijälle kustantaman julkisen liikenteen henkilökohtainen joukkoliikennelipun verovapaa osuus.\\r\\nOsa työsuhdematkalipun arvosta on verovapaata ja osa veronalaista. Veronalainen osuus työsuhdematkalipusta on luontoisetua. Työnantajan työntekijälle antama enintään 3 400 euron arvoinen joukkoliikenteen henkilökohtainen matkalippu asunnon ja työpaikan välistä matkaa varten on verovapaata tuloa. Jos työntekijä saa sekä työsuhdematkalipun että polkupyöräedun, niiden verovapaa määrä voi olla yhteensä korkeintaan 3 400 euroa.\\r\\nJos verovapaa työsuhdematkalippuetu annetaan alentamalla työntekijän rahapalkkaa, työeläke- ja työttömyysvakuutusmaksut sekä työtapaturma- ja ammattitautivakuutusmaksu lasketaan palkasta, josta ei ole vähennetty luontoisedun arvoa.\\r\\nTyösuhdematkalipusta on aina annettava ilmoitus, myös silloin kun verotettavaa etua tai vähennettävää määrää ei ole.\\r\\nJos palkansaaja ostaa matkalipun itse ja työnantaja maksaa työntekijälle matkalipun hinnan tai osan siitä, työnantajan maksama korvaus katsotaan kokonaisuudessaan työntekijän palkaksi. Tällöin työntekijälle maksettu lipun hinta ilmoitetaan vain palkkana.\\r\\nTyösuhdematkalippu ilmoitetaan sen palkanmaksukauden tulona, jona etu on käsitelty työntekijän palkanlaskennassa. Jos verovapaata työsuhdematkalippuetua ei käsitellä palkanlaskentajärjestelmässä lainkaan, voi verovapaan työsuhdematkalippuedun ilmoittaa kerran vuodessa. Suosituksena kuitenkin on, että etu ilmoitetaan sen kuukauden ilmoituksella, jonka aikana se annetaan.\\r\\nTyösuhdematkalipussa veronalaisen ja verovapaan edun määriä arvioidaan vuositasolla, toisin kuin muissa luontoiseduissa, joissa arvostus tapahtuu pääsääntöisesti kuukausitasolla. Jos työsuhdematkalippu annetaan kerran vuodessa, esimerkiksi vuoden alussa ja korvausta peritään säännöllisesti koko vuosi, käytännössä vuoden alussa olisi tilanne, että henkilölle muodostuisi veronalainen etu, koska maksaja ei ole vielä ehtinyt periä kuin ensimmäisen kuukauden korvauksen edusta. Jotta maksajan ei tarvitsisi korjata annettuja ilmoituksia edellä kuvatussa tilanteessa, maksaja voi jo etukäteen ennakoida tilanteen ja jakaa verovapaan osuuden koko vuodelle ja ilmoittaa sen kuukausittain tulorekisteriin samassa yhteydessä perimänsä korvauksen kanssa.\\r\\nJos työsuhdematkalippuetu on annettu vuoden alussa koko vuodeksi ja työsuhde päättyy kesken vuotta, maksajan on korjattava antamansa ilmoitukset. Tällöin työsuhdematkalippuetua on vain se osuus, joka kohdistuu työssäoloaikaan. Maksajan on merkittävä palkaksi se osuus lipusta, joka ei perustu työsuhteeseen, ellei lipuista peritä tulonsaajalta korvausta.\",\r\n    \"descriptionSv\": \"Med inkomstslaget anmäls den skattefria andelen av en personlig kollektivtrafikbiljett som arbetsgivaren betalat för arbetstagaren.\\r\\nEn del av personalbiljettens värde är skattefritt och en del är skattepliktigt. Den skattepliktiga andelen av personalbiljetten är en naturaförmån. En personlig kollektivtrafikbiljett som arbetsgivaren ger arbetstagaren för resor mellan bostaden och arbetsplatsen är skattefri inkomst till ett värde av högst 3 400 euro. Om arbetstagaren får både personalbiljett och cykelförmån, kan det skattefria beloppet för dem sammanlagt vara högst 3 400 euro.\\r\\nOm en personalbiljett ges genom att sänka arbetstagarens penninglön, räknas arbetspensions- och arbetslöshetsförsäkringsavgifterna och arbetsolycksfalls- och yrkessjukdomsförsäkringsavgiften utifrån lönen före avdrag av värdet på naturaförmånen.\\r\\nUppgifter om personalbiljetter ska alltid anmälas även om det inte uppkommit någon beskattningsbar förmån eller något avdragbart belopp.\\r\\nOm löntagaren köper biljetten själv och arbetsgivaren betalar biljettpriset eller en del därav till arbetstagaren, anses andelen som arbetsgivaren betalat i sin helhet utgöra arbetstagarens lön. Då anmäls biljettpriset endast som lön.\\r\\nEn personalbiljett anmäls som inkomst för den löneutbetalningsperiod då förmånen behandlats i arbetstagarens löneberäkning. Om\\r\\nskattefria personalbiljettförmåner inte överhuvudtaget behandlas i löneberäkningssystemet kan skattefria personalbiljettförmåner anmälas en gång om året. Det rekommenderas emellertid att förmånen anmäls med anmälan för den månad under vilken den beviljas.\\r\\nPersonalbiljettens skattefria och skattepliktiga belopp beräknas på årsnivå i motsats till övriga naturaförmåner, där värderingen i regel sker på månadsnivå. Om en personalbiljett ges en gång per år i början av året och ersättning tas ut regelbundet under hela året, skulle personen i praktiken få en skattepliktig förmån i början av året, eftersom betalaren inte har hunnit debitera mer än en månads ersättning för förmånen. För att betalaren inte ska behöva korrigera inlämnade anmälningar i ovan beskrivna fall, kan betalaren redan på förhand förutse situationen och fördela den skattefria andelen på hela året och anmäla den varje månad till inkomstregistret tillsammans med den ersättning som debiterats.\\r\\nOm en personalbiljettförmån har getts i början av året för hela året och anställningsförhållandet upphör under året, ska betalaren korrigera de anmälningar som hen lämnat in. I dessa fall utgörs personalbiljettförmånen endast av den andel som hänför sig till anställningstiden. Betalaren ska anteckna den andel av biljetten som inte baserar sig på ett anställningsförhållande som lön, om man inte tar ut ersättning av inkomsttagaren för biljetterna.\",\r\n    \"taxAndSideCostsDescrEn\": \"No tax is withheld or social insurance contributions are paid from the tax-exempt share.\\r\\nIf the tax-exempt share of the employer-subsidised commuter ticket benefit is subject to a social insurance contribution, the payer must use the separate\\r\\n‘Type of insurance information’ entry to report that the income is subject to the specified insurance contribution. This applies, for example, when an employer provides a benefit by deducting it from the employee’s monetary wages.\",\r\n    \"taxAndSideCostsDescrFi\": \"Verovapaasta osuudesta ei toimiteta ennakonpidätystä eikä makseta sosiaalivakuutusmaksuja.\\r\\nJos työsuhdematkalipun verovapaa osuus on jonkin sosiaalivakuutusmaksun alainen, suorituksen maksaja ilmoittaa erillistä Vakuuttamistiedon tyyppi -tietoa käyttäen, että tulo on ilmoitetun vakuutusmaksun alainen. Tällainen tilanne on kyseessä silloin kun työnantaja antaa edun rahapalkkaa alentamalla.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs inte på den skattefria andelen och socialförsäkringsavgifter betalas inte.\\r\\nOm den skattefria andelen av personalbiljetten är underställd någon socialförsäkringsavgift, anmäler betalaren med hjälp av den separata uppgiften\\r\\nTyp av försäkringsuppgift att inkomsten är underställd den angivna försäkringsavgiften. Det är fråga om en sådan situation då arbetsgivaren ger förmånen genom att sänka penninglönen.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/subsidisedCommute\",\r\n      \"https://palkkaus.fi/usecases/2019/benefits\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 342,\r\n    \"nameEn\": \"Employer-subsidised commuter ticket, taxable share\",\r\n    \"nameFi\": \"Työsuhdematkalipun palkaksi katsottu osuus\",\r\n    \"nameSv\": \"Andel av personalbiljett som betraktas som lön\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"employerSubsidisedCommuterTicketTaxable\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"This income type is used to report the taxable share of a personal public transport ticket paid for an employee by an employer and deemed to be wages.\\r\\nPart of the value of the employer-subsidised commuter ticket is tax-exempt and part is taxable. The taxable share of the employer-subsidised commuter ticket is a fringe benefit. A personal public transport ticket with a value of no more than EUR 3400, provided by the employer to the employee for commuting between the employee's residence and place of work, is tax-exempt income. If an employee has both an employer-subsidised commuter ticket and a bicycle benefit, their total tax-exempt amount can be at most EUR 3,400. Any share in excess of this amount is a taxable fringe benefit deemed to be wages. A report must always be submitted for an employer-subsidised commuter ticket, including when there is no taxable benefit.\\r\\nEmployer-subsidised commuter ticket benefits must be reported as income for the pay period in which the benefit was handled in the payroll accounting for the employee. The taxable and tax-exempt shares of an employer-subsidised commuter ticket must be itemised, because they affect the deductibility of the employee's travel expenses between home and work.\\r\\nThe reporting of an employer-subsidised commuter ticket differs from other fringe benefits, similarly to the reporting of a bicycle benefit, because the payer must deduct the reimbursement collected from the employee from the share deemed to be wages. The share of the benefit value from which the employer has already deducted a reimbursement it has possibly collected from the income earner is reported as the share deemed to be wages.\\r\\nIf the income earner buys the ticket themselves, and the employer pays the price of the ticket or part of it to the employee, the entirety of the compensation paid by the employer is considered to be the employee's wages. In such a case, the price of the ticket paid to the employee is reported as wages only.\\r\\nThe bicycle benefit reduces the maximum taxexempt amount of an employer-subsidised commuter ticket. If an employee has both an employer-subsidised commuter ticket and a bicycle benefit, their total tax-exempt amount can be at most EUR 3,400.\\r\\nThe taxable share of an employer-subsidised commuter ticket, deemed to be wages, must only be reported using its own income type. It cannot be reported together with other fringe benefits using the income type of Other fringe benefit.\",\r\n    \"descriptionFi\": \"Tulolajilla ilmoitetaan työnantajan työntekijälle kustantaman julkisen liikenteen henkilökohtainen joukkoliikennelipun palkaksi katsottava osuus.\\r\\nOsa työsuhdematkalipun arvosta on verovapaata ja osa veronalaista. Veronalainen osuus työsuhdematkalipusta on luontoisetua. Työnantajan työntekijälle antama enintään 3 400 euron arvoinen joukkoliikenteen henkilökohtainen matkalippu asunnon ja työpaikan välistä matkaa varten on verovapaata tuloa. Jos työntekijä saa sekä työsuhdematkalipun että polkupyöräedun, niiden verovapaa määrä voi olla yhteensä korkeintaan 3 400euroa. Ylimenevä osuus on palkaksi katsottavaa luontoisetua. Työsuhdematkalipusta on aina annettava ilmoitus, myös silloin kun verotettavaa etua ei muodostu.\\r\\nTyösuhdematkalippuetu ilmoitetaan sen palkanmaksukauden tulona, jona etu on käsitelty työntekijän palkanlaskennassa. Työsuhdematkalipun palkaksi katsottava osuus ja verovapaa osuus on eriteltävä, koska ne vaikuttavat työntekijän kodin ja työpaikan välisten matkakulujen vähennyskelpoisuuteen.\\r\\nTyösuhdematkalipun ilmoittaminen poikkeaa muista luontoiseduista samalla tavalla kuin polkupyöräedun ilmoittaminen, koska maksajan on vähennettävä palkaksi katsottavasta osuudesta työntekijältä perimänsä korvaus. Palkaksi katsottavana osuutena ilmoitetaan se osuus edun arvosta, josta työnantaja on jo vähentänyt mahdollisesti tulonsaajalta perimänsä korvauksen.\\r\\nJos palkansaaja ostaa matkalipun itse ja työnantaja maksaa työntekijälle matkalipun hinnan tai osan siitä, työnantajan maksama korvaus katsotaan kokonaisuudessaan työntekijän palkaksi. Tällöin työntekijälle maksettu lipun hinta ilmoitetaan vain palkkana.\\r\\nPolkupyöräetu vähentää työsuhdematkalipun verovapaata enimmäismäärää. Jos työntekijä saa sekä työsuhdematkalipun että polkupyöräedun, niiden verovapaa määrä voi olla yhteensä korkeintaan 3 400 euroa.\\r\\nTyösuhdematkalipun palkaksi katsottu osuus ilmoitetaan ainoastaan omalla tulolajillaan. Sitä ei voi ilmoittaa yhdessä muiden luontoisetujen kanssa Muu luontoisetu-tulolajilla.\",\r\n    \"descriptionSv\": \"Med inkomstslaget anmäls den andel av den personliga kollektivtrafikbiljetten som arbetsgivaren betalat för arbetstagaren som anses vara lön.\\r\\nEn del av personalbiljettens värde är skattefritt och en del är skattepliktigt. Den skattepliktiga andelen av personalbiljetten är en naturaförmån. En personlig kollektivtrafikbiljett som arbetsgivaren ger arbetstagaren för resor mellan bostaden och arbetsplatsen är skattefri inkomst till ett värde av högst 3 400 euro. Om arbetstagaren får både personalbiljett och cykelförmån, kan det skattefria beloppet för dem sammanlagt vara högst 3 400 euro. Den överstigande delen är en naturaförmån som kan betraktas som lön. Uppgifter om personalbiljetter ska alltid anmälas även om det inte uppkommit någon beskattningsbar förmån.\\r\\nEn personalbiljettförmån anmäls som inkomst för den löneutbetalningsperiod då förmånen behandlats i arbetstagarens löneberäkning.\\r\\nDen andel av personalbiljetten som anses vara lön och den skattefria andelen ska specificeras, eftersom detta påverkar avdragsgiltigheten för arbetstagarens kostnader för resor mellan hemmet och arbetsplatsen.\\r\\nAnmälan av personalbiljett skiljer sig från övriga naturaförmåner på samma sätt som anmälan av cykelförmån, eftersom betalaren ska dra av den ersättning som tas ut av arbetstagaren från den andel som betraktas som lön. Som den andel som betraktas som lön anmäls den andel av värdet på förmånen, från vilken arbetsgivaren redan har avdragit en eventuell ersättning som debiterats inkomsttagaren.\\r\\nOm löntagaren köper biljetten själv och arbetsgivaren betalar biljettpriset eller en del därav till arbetstagaren, anses andelen som arbetsgivaren betalat i sin helhet utgöra arbetstagarens lön. Då anmäls biljettpriset endast som lön.\\r\\nCykelförmånen minskar det maximala skattefria beloppet för personalbiljetten. Om arbetstagaren får både personalbiljett och cykelförmån, kan det skattefria beloppet för dem sammanlagt vara högst 3 400 euro.\\r\\nDen andel av personalbiljetten som betraktas som lön anmäls endast med ett eget inkomstslag. Den kan inte anmälas tillsammans med andra naturaförmåner med inkomstslaget Övriga naturaförmåner.\",\r\n    \"taxAndSideCostsDescrEn\": \"The share regarded as wages is subject to withholding and social insurance contributions.\",\r\n    \"taxAndSideCostsDescrFi\": \"Palkaksi katsottu osuus on ennakonpidätyksen ja sosiaalivakuutusmaksujen alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Den andel som betraktas som lön är underställd förskottsinnehållning och socialförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/subsidisedCommute\",\r\n      \"https://palkkaus.fi/usecases/2019/benefits\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 343,\r\n    \"nameEn\": \"Employee stock option\",\r\n    \"nameFi\": \"Työsuhdeoptio\",\r\n    \"nameSv\": \"Anställningsoption\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"employeeStockOption\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Remuneration given in the form of the employer\\r\\ncompany's stock option.\",\r\n    \"descriptionFi\": \"Palkkio, joka annetaan työnantajayrityksen option muodossa.\",\r\n    \"descriptionSv\": \"Arvode som ges i form av en option i arbetsgivarföretaget.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld from the benefit received from\\r\\nthe employee stock option.\\r\\nThe employee stock option is subject to income\\r\\ntaxation when the option is exercised. No social\\r\\ninsurance contributions are collected from an\\r\\nemployee stock option when it is exercised. Even if the subscription price was significantly\\r\\nlower than the fair value, but the employee stock\\r\\noption is only exercised more than one year after its issuance, the payment is not deemed to\\r\\nbe earnings from work on which social insurance contributions are based. A stock option exercised after more than one year is reported using income type Employee stock option.\",\r\n    \"taxAndSideCostsDescrFi\": \"Työsuhdeoptiosta saatavasta edusta toimitetaan ennakonpidätys.\\r\\n\\r\\nTyösuhdeoptio on tuloverotuksen kohteena optiota käytettäessä. Työsuhdeoptiosta ei mene sosiaalivakuutusmaksuja sitä käytettäessä.\",\r\n    \"taxAndSideCostsDescrSv\": \"På förmånen som fås från anställningsoptioner verkställs förskottsinnehållning. Anställningsoptionen är föremål för inkomstbeskattning när optionen används. Socialförsäkringsavgifter betalas inte för en anställningsoption när den används. Även om teckningspriset skulle vara betydligt lägre än det gängse värdet, men anställningsoptionen används först när över ett år har gått från det att anställningsoptionen har erhållits, utgör prestationen inte förvärvsinkomst som utgör grund för socialförsäkringsavgift. Om det är fråga om en option som använts först när över ett år har gått anmäls optionen med inkomstslaget Anställningsoption.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 350,\r\n    \"nameEn\": \"Wages transferred to athletes' special fund\",\r\n    \"nameFi\": \"Urheilijarahastoon siirretty palkka\",\r\n    \"nameSv\": \"Lön som överförs till en idrottsfond\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"wagesTransferredToAthletesSpecialFund\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Transfer of income from sports to an athletes'\\r\\nspecial fund for the deferral of income. An athlete is entitled to transfer some of their income\\r\\nfrom sports to an athletes' special fund. Such\\r\\nfunding is agreed between the athlete, employer and, possibly, the sponsor.\\r\\nIncome from sports can comprise the athlete's\\r\\nwages or fees. This income type is used only to\\r\\nreport the wages transferred to the fund. The\\r\\ntransfer to the athletes' special fund is intended\\r\\nto secure the athlete's post-career livelihood.\",\r\n    \"descriptionFi\": \"Urheilutulon siirtäminen urheilijarahastoon tulojen jaksottamista varten. Urheilijalla on oikeus siirtää osa urheilutulosta urheilijarahastoon. Rahastoinnista sovitaan urheilijan, työnantajan ja mahdollisesti sponsorin kesken.\\r\\n\\r\\nUrheilutulo voi muodostua urheilijan palkasta tai palkkiosta. Tulolajilla ilmoitetaan vain rahastoon siirretty palkka. Siirto urheilurahastoon on tarkoitettu urheiluajan jälkeisen toimeentulon turvaamiseen.\",\r\n    \"descriptionSv\": \"Överföring av idrottsinkomst till en idrottsfond för periodisering av inkomsterna. Idrottsutövaren har rätt att överföra en del av idrottsinkomsten till en idrottsfond. Om fonderingen avtalas mellan idrottsutövaren, arbetsgivaren och en eventuell sponsor. Idrottsinkomst kan bestå av lön eller arvode för idrottsmän. Med inkomstslaget anmäls endast lön som överförts till fonden. Överföringen till idrottsfonden är avsedd att trygga utkomsten efter tiden för idrottsutövande.\",\r\n    \"taxAndSideCostsDescrEn\": \"The employer's health insurance contribution is\\r\\npaid from the wages of the athlete that are\\r\\ntransferred to the fund. The athlete does not pay\\r\\ntax for the income until the income is paid out\\r\\nfrom the fund. Tax is not withheld from the\\r\\nfunded wages and the health insurance daily allowance contribution paid until the wages are\\r\\npaid to the athlete from the fund.\\r\\nThe funding of income from sports does not affect the payment of the insurance premiums\\r\\nspecified in the act on accident and pension provision for athletes (laki urheilijan tapaturma- ja\\r\\neläketurvasta 276/2009).\",\r\n    \"taxAndSideCostsDescrFi\": \"Urheilijan palkasta maksetaan työnantajan sairausvakuutusmaksu rahastoon siirrettävän palkan osalta. Urheilija maksaa tulosta veroa vasta silloin, kun tulo\\r\\nmaksetaan hänelle rahastosta. Rahastoitavasta palkasta toimitetaan ennakonpidätys ja maksetaan sairausvakuutuksen päivärahamaksu vasta silloin, kun\\r\\npalkka maksetaan rahastosta urheilijalle.\\r\\n\\r\\nUrheilutulon rahastointi ei vaikuta urheilijan tapaturma- ja eläketurvasta annetussa laissa eriteltyjen\\r\\nvakuutusmaksujen maksamiseen.\",\r\n    \"taxAndSideCostsDescrSv\": \"På lön för idrottsman betalas arbetsgivares sjukförsäkringsavgift för den del som överförs till fonden. Idrottaren betalar skatt på inkomsten först när den betalas från fonden. På den lön som fonderas verkställs förskottsinnehållning och betalas sjukförsäkringens dagpenningspremie först när lönen betalas från fonden till idrottaren. Fonderingen av idrottsinkomst påverkar inte betalningen av de försäkringspremier som\\r\\nspecificeras i lagen om olycksfalls- och\\r\\npensionsskydd för idrottsutövare.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/athlete\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 351,\r\n    \"nameEn\": \"Wages paid from athletes' special fund\",\r\n    \"nameFi\": \"Urheilijarahastosta maksettu palkka\",\r\n    \"nameSv\": \"Lön från en idrottsfond\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"wagesPaidFromAthletesSpecialFund\",\r\n    \"notSupportedError\": \"Not supported for companies / associations\",\r\n    \"descriptionEn\": \"Withdrawal of sports income from the athletes'\\r\\nspecial fund for the athlete. The fund withholds\\r\\ntax from the athlete's wages and fees withdrawn\\r\\nfrom the athletes' special fund when the athlete\\r\\nmakes a withdrawal.\",\r\n    \"descriptionFi\": \"Vain urheilijarahaston käyttöön: Tulolajilla ilmoitetaan vain rahastosta maksettu palkka.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 352,\r\n    \"nameEn\": \"Wages for insurance purposes\",\r\n    \"nameFi\": \"Vakuutuspalkka\",\r\n    \"nameSv\": \"Försäkringslön\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"wagesForInsurancePurposes\",\r\n    \"notSupportedError\": \"TODO: Check\",\r\n    \"descriptionEn\": \"Calculated wages that would have to be paid, if\\r\\nwork corresponding to work performed abroad\\r\\nwere to be performed in Finland. Wages for insurance purposes for work abroad is used as\\r\\nthe basis of the determination of contributions\\r\\nand benefits in social insurance, instead of actual wages.\\r\\nDifferent actors have different rules on when wages for insurance purposes are used to determine contributions and benefits, and when\\r\\nactual wages paid are used instead.\\r\\nFor more detailed instructions on this topic, see\\r\\nthe application instructions of the Finnish Centre\\r\\nfor Pensions: Wages for insurance purposes as\\r\\nearnings from work on which pension is based.\",\r\n    \"descriptionFi\": \"HUOM: Palkkaus.fi-perusversio ei tue kaikkia kansainvälisiä tilanteita oikein! Jos maksat palkkoja ulkomailla työskentelevälle henkilölle, ota ensin yhteyttä asiakaspalveluun.\\r\\n\\r\\nLaskennallinen palkka, joka olisi maksettava, jos ulkomailla tehtyä työtä vastaava työ tehtäisiin Suomessa. Vakuutuspalkkaa ulkomaantyössä käytetään sosiaalivakuuttamisessa maksujen ja etuuksien määräytymisen perusteena todellisen palkan sijaan.\\r\\n\\r\\nEri toimijoiden kesken on omat sääntönsä siitä, milloin määräytymisen perusteena käytetään vakuutuspalkkaa ja milloin todellista maksettua palkkaa. Aiheeseen liittyvä tarkempi ohje löytyy Eläketurvakeskuksen soveltamisohjeista: Vakuutuspalkka eläkkeen perusteena olevana työansiona.\",\r\n    \"descriptionSv\": \"Kalkylmässig lön som skulle betalas om det arbete som motsvarar arbete som utförts utomlands utfördes i Finland. Försäkringslön vid utlandsarbete används vid socialförsäkring som grund för att bestämma avgifter och förmåner i stället för den verkliga lönen. Olika aktörer har olika regler för när försäkringslön och när verklig utbetald lön används som bestämningsgrund. En detaljerad anvisning finns i Pensionsskyddscentralens tillämpningsanvisningar: Försäkringslön som grund för pension. I inkomstslaget är det förvalt att inkomsten inte är underställd socialförsäkringsavgifter\",\r\n    \"taxAndSideCostsDescrEn\": \"By default, this income type is subject to social\\r\\ninsurance contributions.\\r\\nIf, exceptionally, the wages for insurance purposes are not subject to one or more social insurance contributions, the payer must report the\\r\\ninsurance information using the separate Type\\r\\nof insurance information data item.\",\r\n    \"taxAndSideCostsDescrFi\": \"Oletuksena tulolajissa on, että se on sosiaalivakuutusmaksujen alainen.\\r\\n\\r\\nJos vakuutuspalkka ei poikkeuksellisesti olisikaan jonkun tai joidenkin sosiaalivakuutusmaksujen alainen, suorituksen maksaja ilmoittaa vakuuttamistiedon erillistä Vakuuttamistiedon tyyppi- tietoa käyttäen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Om försäkringslönen undantagsvis inte är underställt socialförsäkringsavgifter anmäler betalaren försäkringsuppgiften separat med hjälp av uppgiften Försäkringsuppgiftens typ.\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 353,\r\n    \"nameEn\": \"Taxable reimbursement of expenses\",\r\n    \"nameFi\": \"Veronalainen kustannusten korvaus\",\r\n    \"nameSv\": \"Skattepliktig kostnadsersättning\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"taxableReimbursementOfExpenses\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Taxable reimbursement of expenses means the\\r\\ntaxable reimbursement of expenses incurred by\\r\\na person in the performance of their work. This\\r\\nincome type is used to report the total amount of\\r\\ntaxable reimbursements of expenses that are\\r\\nnot itemised using other income types.\\r\\nUse this income type to report only reimbursements of expenses directly incurred by the income earner in the performance of their work,\\r\\nwhen the employer has not included these reimbursements in the amount of wages when withholding taxes (section 15 of the tax prepayment\\r\\nact (ennakkoperintälaki 1118/1996). This income type is also used to report the corresponding reimbursement of expenses paid to an athlete. Additionally, this income type is used to report the telephone expenses and other such taxable reimbursements of expenses paid to persons participating in unpaid volunteer work for a\\r\\nnon-profit organisation or a public sector payer.\\r\\nThe employer can reimburse the income earner\\r\\nfor expenses directly incurred in the performance of work. Such expenses include expenses incurred in the acquisition of tools and\\r\\nmaterials, supplies and protective clothing. In\\r\\nthe construction industry, for instance, a tool allowance based on a collective agreement is\\r\\npaid.\",\r\n    \"descriptionFi\": \"Veronalaisilla kustannusten korvauksilla tarkoitetaan työn suorittajalle työtehtävien hoitamisesta aiheutuneista kustannuksista maksettavaa veronalaista korvausta. Tulolajilla ilmoitetaan kaikkien sellaisten veronalaisten kustannusten korvausten yhteissumma, jota ei eritellä muilla tulolajeilla.\\r\\n\\r\\nKohdassa ilmoitetaan vain palkansaajalle maksettuja välittömästi työstä aiheutuneita kustannusten korvauksia, joita työnantaja ei ole lukenut mukaan palkan määrään toimittaessaan ennakonpidätystä (ennakkoperintälain 15 §).\\r\\n\\r\\nTyönantaja voi korvata palkansaajalle työstä välittömästi aiheutuneet kustannukset. Tällaisia ovat muun muassa kustannukset, jotka ovat aiheutuneet työvälineiden ja materiaalin hankkimisesta, tarveaineista ja suoja-asujen hankkimisesta aiheutuvat kustannukset. Esimerkiksi rakennusalalla maksetaan työehtosopimukseen perustuvaa työvälinekorvausta.\\r\\n\\r\\nTyönantaja ei toimita veronalaisista kustannusten korvauksista ennakonpidätystä eikä maksa sosiaalivakuutusmaksuja. Korvaukset ovat kuitenkin palkansaajan veronalaista tuloa. Palkansaajan tulee vaatia todelliset kustannukset vähennettäviksi esitäytetyllä veroilmoituksellaan.\\r\\n\\r\\nJos työntekijä on hankkinut työnantajan puolesta työvälineitä ja työmateriaaleja, niiden kustannuksia ei ilmoiteta, jos työnantaja on korvannut ne työntekijälle tositetta vastaan.\",\r\n    \"descriptionSv\": \"Med skattepliktiga kostnadsersättningar avses skattepliktig ersättning för kostnader för skötseln av arbetet som orsakats den som utfört arbetet. Med inkomstslaget anmäls den totala summan av alla sådana skattepliktiga kostnadsersättningar som inte specificeras med andra inkomstslag. Med inkomstslaget anmäls kostnadsersättningar som betalats till löntagaren och som omedelbart orsakats av arbetet och som arbetsgivaren inte inkluderat i lönen i förskottsinnehållningen (lag om förskottsuppbörd 15 §). Med inkomstslaget anmäls också motsvarande kostnadsersättningar som betalats till idrottare. Med inkomstslaget anmäls dessutom telefonkostnader eller övriga motsvarande skattepliktiga kostnadsersättningar som ett allmännyttigt eller offentligt samfund ersatt för dem som deltar i frivilligarbete utan ersättning. Arbetsgivaren kan till löntagaren ersätta kostnader som omedelbart förorsakats av arbetet. Exempel på sådana kostnader är anskaffning av arbetsredskap och material, ämnen och skyddsdräkter. T.ex. i byggbranschen betalas ersättning för arbetsredskap enligt kollektivavtalet.\",\r\n    \"taxAndSideCostsDescrEn\": \"The employer does not withhold tax or pay social\\r\\ninsurance contributions from taxable reimbursements of expenses.\\r\\nHowever, reimbursements are taxable income for\\r\\nthe income earner. The income earner must request the deduction of the actual expenses on their\\r\\npre-completed tax return form.\\r\\nIf an employee has acquired tools and work materials on behalf of the employer, their expenses\\r\\nare not reported if the employer has reimbursed\\r\\nthe employee for them against a receipt.\",\r\n    \"taxAndSideCostsDescrFi\": \"Työnantaja ei toimita veronalaisista kustannusten korvauksista ennakonpidätystä eikä maksa sosiaalivakuutusmaksuja.\\r\\n\\r\\nKorvaukset ovat kuitenkin palkansaajan veronalaista tuloa. Palkansaajan tulee vaatia todelliset kustannukset vähennettäviksi esitäytetyllä veroilmoituksellaan.\\r\\n\\r\\nJos työntekijä on hankkinut työnantajan puolesta työvälineitä ja työmateriaaleja, niiden kustannuksia ei ilmoiteta, jos työnantaja on korvannut ne työntekijälle tositetta vastaan.\",\r\n    \"taxAndSideCostsDescrSv\": \"Arbetsgivaren verkställer inte förskottsinnehållning på skattepliktiga kostnadsersättningar och betalar inte socialförsäkringsavgifter. Ersättningarna är dock skattepliktig inkomst för löntagaren. Löntagaren bör yrka på avdrag för de faktiska kostnaderna på den förhandsifyllda skattedeklarationen. Om en arbetstagare har skaffat arbetsredskap och material för arbetsgivarens räkning ska kostnaderna för dem inte anmälas, om arbetsgivaren har ersatt dem till arbetstagaren mot verifikat.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/expenses\"\r\n    ],\r\n    \"calcGrouping\": \"expenses\"\r\n  },\r\n  {\r\n    \"code\": 354,\r\n    \"nameEn\": \"Private day care allowance municipal supplement\",\r\n    \"nameFi\": \"Yksityisen hoidon tuen kuntalisä\",\r\n    \"nameSv\": \"Kommuntillägg till stöd för privat vård\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"privateDayCareAllowanceMunicipalSupplement\",\r\n    \"notSupportedError\": \"Not supported for companies / associations\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Vain kunnat käyttävät tätä tulolajia.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 355,\r\n    \"nameEn\": \"Private day care allowance (wages)\",\r\n    \"nameFi\": \"Yksityisen hoidon tuki (palkka)\",\r\n    \"nameSv\": \"Stöd för privat vård (lön)\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"privateDayCareAllowanceWages\",\r\n    \"notSupportedError\": \"Not supported for companies / associations\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Vain Kela käyttää tätä tulolajia.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 356,\r\n    \"nameEn\": \"Private day care allowance (non-wage)\",\r\n    \"nameFi\": \"Yksityisen hoidon tuki (työkorvaus)\",\r\n    \"nameSv\": \"Stöd för privat vård (arbetsersättning)\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"privateDayCareAllowanceNonWage\",\r\n    \"notSupportedError\": \"Not supported for companies / associations\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Vain Kela käyttää tätä tulolajia.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 357,\r\n    \"nameEn\": \"Kilometre allowance paid by non-profit organisation\",\r\n    \"nameFi\": \"Yleishyödyllisen yhteisön maksama kilometrikorvaus\",\r\n    \"nameSv\": \"Kilometerersättning som betalats ut av ett allmännyttigt samfund\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"kilometreAllowancePaidByNonProfitOrganisation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A kilometre allowance paid by a non-profit or\\r\\npublic sector organisation to a person participating in voluntary work for no remuneration.\\r\\nAs of 2019, this income type is also used when\\r\\na public sector payer (such as the state, a municipality or a parish) pays kilometre allowances\\r\\nto a person participating in volunteer work.\\r\\nTravel for the benefit of and commissioned by a\\r\\nnon-profit or public sector organisation is equivalent to business travel, even when the recipient\\r\\nof the allowance is not in an employment relationship with the payer or otherwise receives\\r\\nwages for the work to which the travel is related.\\r\\nThis income type is only used to report the reimbursements paid to persons participating in volunteer work. If the tax-exempt reimbursements\\r\\nare connected to the wages paid by the organisation, they are reported using income-type Kilometre allowance (tax-exempt) (311).\\r\\nThis income type is used to report only the taxexempt kilometre allowances defined in section\\r\\n71(3) of the income tax act (tuloverolaki\\r\\n1535/1992). According to the related legal provision, the following is tax-exempt income from a\\r\\nreimbursement of travel expenses paid by a\\r\\nnon-profit or public sector organisation:\\r\\n• reimbursement of travel expenses that\\r\\ncan also be paid for a trip made from\\r\\nthe taxpayer's residence. A maximum\\r\\nof EUR 3,000 per calendar year of the\\r\\nreimbursement of travel expenses using means other than public transport\\r\\nis tax-exempt.\\r\\nThis income type is used to report only the tax-exempt amounts. If a non-profit or public sector organisation pays more kilometre allowances than stipulated in section 71 (3) of the income tax act\\r\\n(tuloverolaki 1535/1992), the extraneous part is reported as non-wage compensation for work.\\r\\nIn certain cases, the payer can increase the kilometre allowance paid for the use of a private\\r\\ncar. The grounds for the increase are laid down\\r\\nin section 9(1) of the Tax Administration's decision on expenses. This income type is used to\\r\\nreport the total amount of the payment, including\\r\\nthe increases.\\r\\nTax-exempt reimbursements of travel expenses\\r\\ncan be paid to recipients of an athlete's or competition judge's fees based on the above-mentioned grounds and limitations, even if they also\\r\\nreceive a separate fee as a non-wage compensation for work. The competition or event must\\r\\nbe related to the activities of the non-profit organisation. The tax-exempt kilometre allowances paid are reported using income-type Kilometre allowance paid by non-profit organisation.\\r\\nThe taxable amount exceeding the tax-exempt\\r\\nkilometre allowance is reported to the Incomes\\r\\nRegister as non-wage compensation for work\\r\\nusing income-type Non-wage compensation\\r\\nfor work.\",\r\n    \"descriptionFi\": \"Kilometrikorvaus, jonka yleishyödyllinen yhteisö maksaa korvauksettomaan vapaaehtoistyöhön osallistuvalle.\\r\\n\\r\\nYleishyödyllisen yhteisön hyväksi sen toimeksiannosta tehty matka rinnastetaan työmatkaan silloinkin, kun suorituksen saaja ei ole palvelussuhteessa maksajaan eikä muutoin saa palkkaa työstä, johon matka liittyy.\\r\\n\\r\\nTulolajilla ilmoitetaan vain vapaaehtoistyöhön osallistuville maksetut korvaukset. Jos verovapaat korvaukset liittyvät yhteisön maksamaan palkkaan, ne ilmoitetaan tulolajilla Kilometrikorvaus (verovapaa) (311).\\r\\n\\r\\nTulolajilla ilmoitetaan vain tuloverolain (1535/1992) 71 § 3 momentin mukaiset verovapaat kilometrikorvaukset. Lainkohdan mukaan matkakustannusten korvauksesta, jonka yleishyödyllinen yhteisö maksaa, on verovapaata tuloa: matkustamiskustannusten korvaus, jota voidaan suorittaa myös verovelvollisen asunnolta tehdystä matkasta. Matkustamiskustannusten korvauksesta muulla kuin julkisella kulkuneuvolla tehdystä matkasta on verovapaata enintään 2 000 euroa kalenterivuodelta.\\r\\n\\r\\nTulolajilla ilmoitetaan vain verovapaat määrät. Jos yleishyödyllinen yhteisö maksaa kilometrikorvauksia enemmän kuin tuloverolain 71 § 3 momentissa säädetään, ylimenevä osa ilmoitetaan työkorvauksena.\",\r\n    \"descriptionSv\": \"Kilometerersättning som ett allmännyttigt eller offentligt samfund betalar till dem som deltar i frivilligarbete utan ersättning. Från och med 2019 används inkomstslaget även om ett offentligt samfund (bl.a. staten, kommunen eller församlingen) betalar kilometerersättning till dem som deltar i frivilligarbete utan ersättning. Resor som gjorts på uppdrag av allmännyttiga eller offentliga samfund jämställs med arbetsresa även när betalningsmottagaren inte står i anställningsförhållande till betalaren eller i övrigt får lön för det arbete som resan hänför sig till. Med inkomstslaget anmäls endast de ersättningar\\r\\nsom betalats åt frivilligarbetare. Om skattefria\\r\\nersättningar hänför sig till löner som samfundet betalat, anmäls de med inkomstslaget\\r\\nKilometerersättning (skattefri) (311).\\r\\nMed inkomstslaget anmäls endast skattefria\\r\\nkilometerersättningar enligt 71 § 3 mom. i\\r\\ninkomstskattelagen (1535/1992). Enligt\\r\\nbestämmelsen är resekostnadsersättning som ett\\r\\nallmännyttigt eller offentligt samfund betalar\\r\\nskattefri inkomst:\\r\\n• resekostnadsersättning som kan betalas\\r\\nockså för en resa fån den skattskyldiges\\r\\nbostad. Om ersättningen betalas för en\\r\\nresa som har gjorts med något annat än\\r\\nett allmänt fortskaffningsmedel, uppgår\\r\\nden skattefria andelen till högst 3 000\\r\\neuro per kalenderår.\\r\\nEndast den skattefria andelen anges för\\r\\ninkomstslaget. Om ett allmännyttigt eller offentligt\\r\\nsamfund betalar mer kilometerersättningar än vad\\r\\nsom föreskrivs i 71 § 3 mom. i inkomstskattelagen\\r\\nanmäls den överstigande delen som arbetsersättning.\\r\\nKilometerersättningen som betalas för användning\\r\\nav egen bil kan höjas i vissa fall. Grunderna för\\r\\nhöjningen beskrivs i 9 § 1 mom. i\\r\\nSkatteförvaltningens kostnadsbeslut. Med\\r\\ninkomstslaget anmäls det totala beloppet av\\r\\nbetalda ersättningar jämte förhöjningar.\\r\\nDet är möjligt att till tävlingsdomare och mottagare\\r\\nav arvode för idrottare betala skattefria ersättningar\\r\\nför resekostnader på ovan nämnda grunder och\\r\\nmed ovan nämnda begränsningar, även om\\r\\nmottagaren också får ett separat arvode som\\r\\narbetsersättning. Tävlingen eller evenemanget ska\\r\\nha en koppling till det allmännyttiga samfundets\\r\\nverksamhet. Betalda skattefria\\r\\nkilometerersättningar anmäls med inkomstslaget\\r\\nKilometerersättning som betalats ut av ett\\r\\nallmännyttigt samfund. Det skattepliktiga\\r\\nbeloppet som överstiger den skattefria\\r\\nkilometerersättningen anmäls till inkomstregistret\\r\\nsom arbetsersättning med inkomstslaget\\r\\nArbetsersättning.\",\r\n    \"taxAndSideCostsDescrEn\": \"No social insurance contributions are paid from the\\r\\nallowance.\",\r\n    \"taxAndSideCostsDescrFi\": \"Korvauksesta ei makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"På ersättning betalas inte socialförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/nonProfitOrg\"\r\n    ],\r\n    \"calcGrouping\": \"expenses\"\r\n  },\r\n  {\r\n    \"code\": 358,\r\n    \"nameEn\": \"Daily allowance paid by non-profit organisation\",\r\n    \"nameFi\": \"Yleishyödyllisen yhteisön maksama päiväraha\",\r\n    \"nameSv\": \"Dagtraktamente som betalats ut av ett allmännyttigt samfund\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"dailyAllowancePaidByNonProfitOrganisation\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A daily allowance for business travel paid by a\\r\\nnon-profit or public sector organisation to a person participating in voluntary work for no remuneration.\\r\\nAs of 2019, this income type is also used when\\r\\na public sector payer (such as the state, a municipality or a parish) pays daily allowances to a\\r\\nperson participating in volunteer work.\\r\\nThis income type is only used to report the daily\\r\\nallowances paid to persons participating in volunteer work. If the tax-exempt daily allowance is\\r\\nconnected to the wages paid by the organisation, it is reported using income type Daily allowance (331).\\r\\nIn this section, report only the tax-exempt allowances defined in section 71(3) of the income tax\\r\\nact (tuloverolaki 1535/1992). According to the\\r\\nrelated legal provision, the following is tax-ex empt income from a reimbursement of travel expenses paid by a non-profit or public sector organisation:\\r\\n• daily allowance for no more than 20\\r\\ndays per calendar year\\r\\n• accommodation allowance.\\r\\nThis income type is used to report only the tax-exempt amounts. If a non-profit or public sector organisation pays more daily allowances than stipulated in section 71(7) of the income tax act (tuloverolaki 1535/1992), the extraneous part is reported\\r\\nas non-wage compensation for work.\\r\\nTax-exempt reimbursements of travel expenses\\r\\ncan be paid to recipients of an athlete's or competition judge's fees based on the above-mentioned\\r\\ngrounds and limitations, even if they also receive a\\r\\nseparate fee as a non-wage compensation for\\r\\nwork. The competition or event must be related to\\r\\nthe activities of the non-profit organisation. The taxexempt daily allowances paid are reported using\\r\\nincome-type Daily allowance paid by non-profit organisation. The taxable amount exceeding the taxexempt daily allowance is reported to the Incomes\\r\\nRegister as non-wage compensation for work using\\r\\nincome-type Non-wage compensation for work.\",\r\n    \"descriptionFi\": \"Työmatkapäiväraha, jonka yleishyödyllinen yhteisö maksaa korvauksettomaan vapaaehtoistyöhön osallistuvalle.\\r\\n\\r\\nTulolajilla ilmoitetaan vain vapaaehtoistyöhön osallistuville maksetut päivärahat. Jos verovapaa päiväraha liittyy yhteisön maksamaan palkkaan, se ilmoitetaan tulolajilla Päiväraha (331).\\r\\n\\r\\nKohdassa ilmoitetaan vain tuloverolain 71 § 3 momentin mukaiset verovapaat korvaukset. Lainkohdan mukaan matkakustannusten korvauksesta, jonka yleishyödyllinen yhteisö maksaa, on verovapaata tuloa:\\r\\n\\r\\n- päiväraha enintään 20 päivältä kalenterivuodessa\\r\\n- majoittumiskorvaus.\\r\\n\\r\\nTulolajilla ilmoitetaan vain verovapaat määrät. Jos yleishyödyllinen yhteisö maksaan päivärahaa enemmän kuin tuloverolain 7 § momentissa säädetään, ylimenevä osa ilmoitetaan työkorvauksena.\",\r\n    \"descriptionSv\": \"Dagtraktamente för arbetsresa som ett allmännyttigt eller offentligt samfund betalar till den som deltar i frivilligarbete utan ersättning. Från och med 2019 används inkomstslaget även\\r\\nom ett offentligt samfund (bl.a. staten, kommunen\\r\\neller församlingen) betalar kilometerersättning till\\r\\ndem som deltar i frivilligarbete utan ersättning.\\r\\nMed inkomstslaget anmäls endast de ersättningar\\r\\nsom betalats åt frivilligarbetare. Om skattefria\\r\\nersättningar hänför sig till löner som samfundet\\r\\nbetalat, anmäls de med inkomstslaget\\r\\nDagtraktamente (331).\\r\\nI punkten anges endast skattefria ersättningar\\r\\nenligt 71 § 3 mom. i inkomstskattelagen. Enligt\\r\\nbestämmelsen är resekostnadsersättning som ett\\r\\nallmännyttigt eller offentligt samfund betalar\\r\\nskattefri inkomst:\\r\\n• dagtraktamente för högst 20 dagar per\\r\\nkalenderår\\r\\n• logiersättning.\\r\\nEndast den skattefria andelen anges för\\r\\ninkomstslaget. Om ett allmännyttigt samfund eller\\r\\noffentligt samfund betalar mer dagtraktamenten än\\r\\nvad som föreskrivs i 7 § i inkomstskattelagen anmäls\\r\\nden överstigande delen som arbetsersättning.\\r\\nDet är möjligt att till tävlingsdomare och mottagare av\\r\\narvode för idrottare betala skattefria ersättningar för\\r\\nresekostnader på ovan nämnda grunder och med\\r\\novan nämnda begränsningar, även om mottagaren\\r\\nockså får ett separat arvode som arbetsersättning.\\r\\nTävlingen eller evenemanget ska ha en koppling till\\r\\ndet allmännyttiga samfundets verksamhet. Betalda\\r\\nskattefria dagtraktamente anmäls med inkomstslaget\\r\\nDagtraktamente som betalats ut av ett\\r\\nallmännyttigt samfund. Det skattepliktiga beloppet\\r\\nsom överstiger det skattefria beloppet anmäls till\\r\\ninkomstregistret som arbetsersättning med\\r\\ninkomstslaget Arbetsersättning.\",\r\n    \"taxAndSideCostsDescrEn\": \"No social insurance contributions are paid from the\\r\\ndaily allowance\",\r\n    \"taxAndSideCostsDescrFi\": \"Päivärahasta ei makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"På dagtraktamente betalas inte socialförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/nonProfitOrg\"\r\n    ],\r\n    \"calcGrouping\": \"expenses\"\r\n  },\r\n  {\r\n    \"code\": 359,\r\n    \"nameEn\": \"Unjust enrichment\",\r\n    \"nameFi\": \"Perusteeton etu\",\r\n    \"nameSv\": \"Ogrundad förmån\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"unjustEnrichment\",\r\n    \"notSupportedError\": \"Not supported: Does not fit Palkkaus.fi-process.\",\r\n    \"descriptionEn\": \"Mistakenly paid payment or benefit to which the\\r\\nincome earner is not entitled. An unjust enrichment occurs when, for example, a payment has\\r\\nbeen made on incorrect grounds, to the wrong\\r\\nperson, or in an incorrect amount.\",\r\n    \"descriptionFi\": \"Perusteeton etu -tulolajia käytetään vain, jos aiheettomasti maksettu suoritus havaitaan ennen ensimmäisen ilmoituksen lähettämistä, eikä tuloa ole aiemmin ilmoitettu muuna tulona tulorekisteriin.\\r\\n\\r\\nTämä ei tyypillisesti ole mahdollista Palkkaus.fi-maksuprosessissa. Ota yhteys asiakaspalveluun, jos haluat oikeasti käyttää tätä tyyppiä.\",\r\n    \"descriptionSv\": \"Prestation eller förmån som betalats utan grund och som inkomsttagaren inte är berättigad till. Ogrundad förmån uppstår till exempel när prestationen har gjorts på felaktiga grunder, till fel person eller till fel belopp. Det separata inkomstslaget Ogrundad förmån används endast om den ogrundade prestationen upptäcks innan den första anmälan inlämnas, och inkomsten inte tidigare anmälts som annan inkomst till inkomstregistret. Om en ogrundad förmån tidigare felaktigt har anmälts t.ex. med inkomstslaget Lön totalt, ska uppgiften korrigeras med inkomstslaget Lön totalt samtidigt som den separata uppgiften Ogrundad förmån anges.\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"Socialförsäkringsavgifter betalas inte för ogrundad förmån.\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 361,\r\n    \"nameEn\": \"Employee stock option with a subscription price lower than the market price at the time of issue\",\r\n    \"nameFi\": \"Työsuhdeoptio, jonka merkintähinta on luovutusajankohtana alhaisempi kuin markkinahinta\",\r\n    \"nameSv\": \"Anställningsoption vars teckningspris är lägre än marknadspriset vid överlåtelsetidpunkten\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"employeeStockOptionLowerMarketPrice\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Remuneration that is given in the form of the employer company’s stock option and where the subscription price of the option charged from the employee is clearly lower that the market price of the\\r\\nshare on the option issuance date.\\r\\nAn undervalued employee stock option is only\\r\\ndeemed to be earnings from work on which social\\r\\ninsurance contributions are based when the option\\r\\nis exercised within one year after the issuance of\\r\\nthe employee stock option. In these situations, the\\r\\nbenefit granted is reported to the Incomes Register\\r\\nusing income type Employee stock option with a\\r\\nsubscription price lower than market price at the\\r\\ntime of issue. This situation concerns employee\\r\\nstock option benefits in which both the granting and\\r\\nexercise of the stock option take place while the\\r\\nnew provision is in effect, i.e. on 1 January 2021 or\\r\\nlater.\\r\\nThe difference between the subscription price and\\r\\nthe market price on the option issuance date must\\r\\nbe reported as the benefit value. The amount of the\\r\\nbenefit generated from an undervalued employee\\r\\nstock option is estimated on the option right’s issuance date, but it must be reported to the Incomes\\r\\nRegister when the option is exercised.\",\r\n    \"descriptionFi\": \"Palkkio, joka annetaan työnantajayrityksen option muodossa ja jossa työntekijältä peritty option merkintähinta option luovutusajankohtana on selvästi alhaisempi kuin osakkeen markkinahinta.\\r\\n\\r\\nKäytettäessä optiota etu ilmoitetaan tulolajilla Työsuhdeoptio.\",\r\n    \"descriptionSv\": \"Arvode som ges i form av en option i arbetsgivarföretaget och där det teckningspris som debiterats av arbetstagaren för optionen är betydligt lägre än aktiens marknadspris vid överlåtelsetidpunkten för optionen. Underpris för anställningsoption anses vara\\r\\narbetsinkomst som ligger till grund för\\r\\nsocialförsäkringsavgift endast när optionen används\\r\\ninom ett år från det att anställningsoptionen har getts.\\r\\nI dessa situationer anmäls den erhållna förmånen till\\r\\ninkomstregistret med inkomstslaget Anställningsoption\\r\\nvars teckningspris är lägre än marknadspriset vid\\r\\növerlåtelsetidpunkten. Detta gäller\\r\\nanställningsoptioner där både erhållandet av\\r\\noptionsrätten och dess användning sker medan den\\r\\nnya bestämmelsen är i kraft, dvs. 1.1.2021 eller\\r\\ndärefter.\\r\\nSom värde för förmånen anmäls skillnaden mellan\\r\\nteckningspriset och marknadspriset vid\\r\\növerlåtelsetidpunkten för optionen. Förmånsbeloppet\\r\\nsom uppkommer av en anställningsoption till underpris\\r\\nbedöms vid överlåtelsetidpunkten för optionsrätten,\\r\\nmen det anmäls till inkomstregistret när\\r\\nanställningsoptionen används.\",\r\n    \"taxAndSideCostsDescrEn\": \"The income is subject to social insurance contributions. No tax is withheld from the income.\\r\\nWhen the option is exercised, the benefit obtained\\r\\nfrom exercising it must be reported using the Employee stock option income type.\",\r\n    \"taxAndSideCostsDescrFi\": \"Tulo on työeläke-, työttömyys- sekä työtapaturma- ja ammattitautivakuutusmaksun alainen.\\r\\n\\r\\nTyösuhdeoptioetu ei ole optio-oikeutta luovutettaessa tuloverotuksen alaista eikä siitä määrätä työnantajan sairausvakuutusmaksua. \\r\\n\\r\\nKäytettäessä optiota etu ilmoitetaan tulolajilla Työsuhdeoptio.\",\r\n    \"taxAndSideCostsDescrSv\": \"Inkomsten omfattas av socialförsäkringsavgifter. Ingen förskottsinnehållning verkställs på inkomsten. När optionen används, anmäls den förtjänst som fås av användningen dessutom med inkomstslaget Anställningsoption\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 362,\r\n    \"nameEn\": \"Royalty paid to a non-resident taxpayer\",\r\n    \"nameFi\": \"Rajoitetusti verovelvolliselle maksettu rojalti\",\r\n    \"nameSv\": \"Royalty som betalats till en begränsat skattskyldig\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"royaltyPaidToNonResidentTaxpayer\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Compensation paid to a person or an organisation\\r\\nthat is a non-resident taxpayer for the use of or\\r\\nright to use a copyright, an industrial property right\\r\\nor other right, or for information on industrial, commercial or scientific experiences.\\r\\nThe royalty can be based on\\r\\n• the copyright of a literary, artistic or scientific work;\\r\\n• the right to a photograph;\\r\\n• the use or right to use a patent, a trademark, model, form, drawing, secret formula\\r\\nor manufacturing method; or\\r\\n• information on industrial, commercial or scientific experience.\",\r\n    \"descriptionFi\": \"Rajoitetusti verovelvolliselle henkilölle tai yhteisölle maksettava korvaus tekijänoikeuden, teollisoikeuden tai muun oikeuden käyttämisestä tai käyttöoikeudesta tai teollisia, kaupallisia tai tieteellisiä kokemuksia koskevista tiedoista.\\r\\n\\r\\nRojaltin perusteena voi olla\\r\\n\\r\\n- kirjallisen, taiteellisen tai tieteellisen teoksen tekijänoikeus\\r\\n- oikeus valokuvaan\\r\\n- patentin, tavaramerkin, mallin, muotin, piirustuksen, salaisen kaavan tai valmistustavan käyttäminen tai käyttöoikeus\\r\\n- teollisia, kaupallisia tai tieteellisiä kokemuksia koskevat tiedot.\",\r\n    \"descriptionSv\": \"En ersättning som betalas till en begränsat skattskyldig person eller ett begränsat skattskyldigt samfund för användning eller nyttjanderätt av upphovsrätt, industriell äganderätt eller annan rättighet eller för uppgifter om industriella, kommersiella eller vetenskapliga rön. Grunden för royalty kan vara• upphovsrätt till litterärt, konstnärligt eller\\r\\nvetenskapligt verk\\r\\n• rätt till ett fotografi\\r\\n• nyttjande av eller rätt att nyttja patent,\\r\\nvarumärke, mönster eller modell, ritning,\\r\\nhemligt recept eller hemlig tillverkningsmetod\\r\\n• uppgifter om industriella, kommersiella eller\\r\\nvetenskapliga rön.\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax at source is collected from the royalty, unless\\r\\ntax at source has been waived for the income by a\\r\\ntax treaty. The royalty must be reported to the Incomes Register even if no tax at source has been\\r\\ncollected from it.\\r\\nRoyalties are not subject to social insurance contributions.\",\r\n    \"taxAndSideCostsDescrFi\": \"Rojaltista peritään lähdevero, jollei tuloa ole verosopimuksella vapautettu lähdeverosta. Rojalti on ilmoitettava tulorekisteriin, vaikka siitä ei olisi peritty lähdeveroa.\\r\\n\\r\\nRojalti ei ole sosiaalivakuutusmaksujen alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Källskatt tas ut på royaltyn om inkomsten inte genom ett skatteavtal har undantagits från källskatt. Royaltyn ska anmälas till inkomstregistret även om någon källskatt inte skulle ha tagits ut på den. Royaltyn omfattas inte av socialförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 363,\r\n    \"nameEn\": \"Tax-exempt share of bicycle benefit\",\r\n    \"nameFi\": \"Polkupyöräedun verovapaa osuus\",\r\n    \"nameSv\": \"Skattefri andel av cykelförmånen\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"bicycleBenefitTaxExempt\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"This income type is used to report the tax-exempt share of a bicycle benefit granted for an\\r\\nemployee by an employer and deemed to be\\r\\nwages. A bicycle benefit is created when an employer gives a bicycle they own or control to an\\r\\nemployee for private use or otherwise provides\\r\\nan employee with an opportunity to use a bicycle outside working hours.\\r\\nA bicycle benefit is tax-exempt if the value of the\\r\\nbenefit is at most EUR 1,200 per year. Any\\r\\nshare in excess of this amount is a taxable\\r\\nfringe benefit. If an employee has both a bicycle\\r\\nbenefit and an employer-subsidised commuter\\r\\nticket, their total tax-exempt amount can be at\\r\\nmost EUR 3,400.\\r\\nIf a tax-exempt bicycle benefit is provided by deducting the benefit from the employee’s monetary wages, the earnings-related pension and\\r\\nunemployment insurance contributions and the\\r\\naccident and occupational disease insurance\\r\\ncontributions for 2021 are calculated based on\\r\\nthe amount of the wages before the value of the\\r\\nfringe benefit is deducted. Fringe benefits\\r\\ngranted as deductions from monetary wages are\\r\\nreported using income types 322–324 in 2021.\\r\\nSee more detailed reporting guidanceReporting\\r\\ndata to the Incomes Register: fringe benefits\\r\\nand reimbursements of expenses.\\r\\nA report must always be submitted for a bicycle\\r\\nbenefit, even when there is no taxable benefit. The taxable and tax-exempt amounts of a bicycle benefit are assessed at an annual level. For\\r\\nthe calculation of the benefit amount, see the\\r\\nTax Administration Guidelines Fringe benefits in\\r\\ntaxation (available in Finnish and Swedish, link\\r\\nto Finnish).\\r\\nA tax-exempt bicycle benefit must be reported\\r\\nas income for the pay period in which the benefit\\r\\nwas handled in the payroll accounting for the\\r\\nemployee. If a tax-exempt bicycle benefit is not\\r\\nhandled in the payroll system at all, the tax-exempt bicycle benefit can only be reported once\\r\\na year. However, the recommendation is that\\r\\nthe benefit is reported in the report for the month\\r\\nin which it was given.\",\r\n    \"descriptionFi\": \"Tulolajilla ilmoitetaan työnantajan työntekijälle antaman polkupyöräedun verovapaa osuus. Polkupyöräetu syntyy, kun työnantaja antaa omistamansa tai hallitsemansa polkupyörän työntekijän yksityiskäyttöön tai muulla vastaavalla tavalla järjestää työntekijälle mahdollisuuden käyttää polkupyörää vapaaajallaan.\\r\\n\\r\\nPolkupyöräetu on verovapaa, jos edun arvo on enintään 1 200 euroa vuodessa. Ylimenevä osuus on veronalaista luontoisetua. Jos työntekijä saa sekä polkupyöräedun että työsuhdematkalipun, niiden verovapaa määrä voi olla yhteensä korkeintaan 3 400 euroa.\\r\\n\\r\\nPolkupyöräedusta on aina annettava ilmoitus, myös silloin kun verotettavaa etua ei ole.\",\r\n    \"descriptionSv\": \"Med detta inkomstslag anmäls den skattefria andelen av en cykelförmån som arbetsgivaren ger en arbetstagare. En cykelförmån uppkommer när arbetsgivaren ställer en cykel som arbetsgivaren äger eller besitter till förfogande för en arbetstagare för privat bruk eller på ett annat motsvarande sätt gör det möjligt för arbetstagaren att använda cykeln på sin fritid. Cykelförmånen är befriad från skatt om förmånens värde inte överstiger 1 200 euro per år. Den överstigande delen är en skattepliktig naturaförmån. Om arbetstagaren får både cykelförmån och personalbiljett, kan det skattefria beloppet för dem sammanlagt vara högst 3 400 euro. Om en skattefri cykelförmån ges genom att sänka\\r\\narbetstagarens penninglön, räknas arbetspensionsoch arbetslöshetsförsäkringsavgifterna och\\r\\narbetsolycksfalls- och\\r\\nyrkessjukdomsförsäkringsavgiften utifrån lönen före\\r\\navdrag av värdet på naturaförmånen. En förmån\\r\\nsom ges genom att sänka penninglönen meddelas\\r\\når 2021 i inkomstslagen 322–324. Se den närmare\\r\\nanmälningsanvisningen: Anmälan av information till\\r\\ninkomstregistret: naturaförmåner och\\r\\nkostnadsersättningar\\r\\nDet ska alltid lämnas in en anmälan om\\r\\ncykelförmånen, även när ingen beskattningsbar\\r\\nförmån existerar.\\r\\nExempel: En arbetsgivare har gett en arbetstagare en\\r\\ncykelförmån värd 600 euro. Ingen skattepliktig naturaförmån\\r\\nuppkommer.\\r\\n• Med inkomstslaget 363 Skattefri andel av\\r\\ncykelförmån anmäls 600 euro.\\r\\nDe skattepliktiga och skattefria beloppen i en\\r\\ncykelförmån bedöms per år. Hur förmånsbeloppet\\r\\nräknas ut beskrivs i Skatteförvaltningens anvisning\\r\\nNaturaförmåner i beskattningen.\\r\\nEn skattefri cykelförmån anmäls som inkomst för\\r\\nden löneutbetalningsperiod då förmånen\\r\\nbehandlats i löneberäkningen för arbetstagaren.\\r\\nOm skattefria cykelförmåner inte över huvud taget\\r\\nbehandlas i löneräkningssystemet, kan skattefria\\r\\ncykelförmåner anmälas en gång om året. Det\\r\\nrekommenderas emellertid att förmånen anmäls\\r\\nmed anmälan för den månad under vilken den\\r\\nbeviljas.\\r\\nExempel: Arbetsgivaren ger arbetstagaren en cykelförmån\\r\\ni maj. Förmånens årliga värde är 1 000 euro. Om lön som\\r\\nflutit in under maj emellertid betalas ut i juni, kan\\r\\ncykelförmånen anmälas i maj samtidigt med\\r\\nlöneutbetalningen för juni eller separat den 5 juli:\\r\\n• 363 Skattefri andel av cykelförmån: 1 000,00\",\r\n    \"taxAndSideCostsDescrEn\": \"No tax is withheld or social insurance contributions are paid from the tax-exempt share.\",\r\n    \"taxAndSideCostsDescrFi\": \"Verovapaasta osuudesta ei toimiteta ennakonpidätystä eikä makseta sosiaalivakuutusmaksuja.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs inte på den skattefria andelen och socialförsäkringsavgifter betalas inte.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 364,\r\n    \"nameEn\": \"Bicycle benefit, taxable share\",\r\n    \"nameFi\": \"Polkupyöräedun palkaksi katsottu osuus\",\r\n    \"nameSv\": \"Andel av cykelförmånen som betraktas som lön\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"bicycleBenefitTaxable\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"This income type is used to report the taxable\\r\\nshare of a bicycle benefit granted to an employee by an employer and deemed to be\\r\\nwages. A bicycle benefit is created when an employer gives a bicycle they own or control to an\\r\\nemployee for private use or otherwise provides\\r\\nan employee with an opportunity to use a bicycle outside working hours.\\r\\nEUR 1,200 of the bicycle benefit is tax-exempt\\r\\nand any amount in excess of this limit is a taxable fringe benefit. For the calculation of the benefit amount, see the Tax Administration Guidelines Fringe benefits in taxation (available in\\r\\nFinnish and Swedish, link to Finnish).\\r\\nThe taxable share of a bicycle benefit regarded\\r\\nas wages must be reported over the months,\\r\\nduring which the employee had access to the\\r\\nbenefit.\\r\\nThe taxable and tax-exempt shares of a bicycle\\r\\nbenefit must be itemised, because they affect\\r\\nthe deductibility of the employee’s travel expenses between home and work. \\r\\n\\r\\nThe reporting of a bicycle benefit differs from\\r\\nother fringe benefits, similarly to the reporting of\\r\\nan employer-subsidised commuter ticket, because the payer must deduct the reimbursement\\r\\ncollected from the employee from the share\\r\\ndeemed to be wages. The share of the benefit value from which the employer has already deducted a reimbursement it has possibly collected from the income earner is reported as the\\r\\nshare deemed to be wages.\\r\\nThe taxable share of the bicycle benefit,\\r\\ndeemed to be wages, must only be reported using its own income type. It cannot be reported\\r\\ntogether with other fringe benefits using the income type of Other fringe benefit.\",\r\n    \"descriptionFi\": \"Tulolajilla ilmoitetaan työnantajan työntekijälle antaman polkupyöräedun palkaksi katsottava osuus. Polkupyöräetu syntyy, kun työnantaja antaa omistamansa tai hallitsemansa polkupyörän työntekijän yksityiskäyttöön tai muulla vastaavalla tavalla järjestää työntekijälle mahdollisuuden käyttää polkupyörää vapaaajallaan.\\r\\n\\r\\nPolkupyöräedusta 1 200 euroa on verovapaata ja loput veronalaista luontoisetua.\\r\\n\\r\\nPalkaksi katsottu osuus polkupyöräedusta ilmoitetaan niiltä kuukausilta, kun etu on ollut työntekijän käytettävissä.\\r\\n\\r\\nPolkupyöräedun palkaksi katsottava osuus ja verovapaa osuus on eriteltävä, koska ne vaikuttavat työntekijän kodin ja työpaikan välisten matkakulujen vähennyskelpoisuuteen.\",\r\n    \"descriptionSv\": \"Med detta inkomstslag anmäls den andel av en cykelförmån som betraktas som lön och som arbetsgivaren ger en arbetstagare. En cykelförmån uppkommer när arbetsgivaren ställer en cykel som arbetsgivaren äger eller besitter till förfogande för en arbetstagare för privat bruk eller på ett annat motsvarande sätt gör det möjligt för arbetstagaren att använda cykeln på sin fritid. Av cykelförmånen är 1 200 euro skattefritt och resterande del skattepliktig naturaförmån. Hur förmånsbeloppet räknas ut beskrivs i Skatteförvaltningens anvisning Naturaförmåner i beskattningen. Den andel av cykelförmånen som betraktas som lön anmäls för de månader som arbetstagaren haft tillgång till förmånen. Den andel av cykelförmånen som betraktas som lön och den skattefria andelen ska specificeras, eftersom detta påverkar avdragsgiltigheten för arbetstagarens kostnader för resor mellan hemmet och arbetsplatsen. Exempel: En arbetsgivare har gett en arbetstagare en\\r\\ncykelförmån värd 1 500 euro. Arbetsgivaren tar inte ut\\r\\nnågon ersättning av arbetstagaren för värdet på förmånen.\\r\\nArbetstagaren har tillgång till cykeln hela året. Eftersom\\r\\ncykelförmånen är skattepliktig till den del förmånens värde\\r\\növerskrider 1 200 euro per år, uppstår en skattepliktig\\r\\nnaturaförmån värd 300 euro. Arbetsgivaren anmäler varje\\r\\nmånad 25 euro som det belopp som ska betraktas som lön\\r\\noch 100 euro som en skattefri cykelförmån:\\r\\n• 363 Skattefri andel av cykelförmån: 100,00\\r\\n• 364 Andel av cykelförmån som betraktas som lön:\\r\\n25,00\\r\\nAnmälan av cykelförmån skiljer sig från övriga\\r\\nnaturaförmåner på samma sätt som anmälan av\\r\\npersonalbiljett, eftersom betalaren ska dra av den\\r\\nersättning som tagits ut av arbetstagaren från den\\r\\nandel som betraktas som lön. Som den andel som\\r\\nbetraktas som lön anmäls den andel av värdet på\\r\\nförmånen, från vilken arbetsgivaren redan har\\r\\navdragit en eventuell ersättning som debiterats\\r\\ninkomsttagaren.\\r\\nDen andel av cykelförmån som betraktas som lön\\r\\nanmäls endast med ett eget inkomstslag. Den kan\\r\\ninte anmälas tillsammans med andra\\r\\nnaturaförmåner med inkomstslaget Övriga\\r\\nnaturaförmåner.\",\r\n    \"taxAndSideCostsDescrEn\": \"The share regarded as wages is subject to withholding and social insurance contributions.\",\r\n    \"taxAndSideCostsDescrFi\": \"Palkaksi katsottu osuus on ennakonpidätyksen ja so-siaalivakuutusmaksujen alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Den andel som betraktas som lön är underställd förskottsinnehållning och socialförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 365,\r\n    \"nameEn\": \"Conditional stock options and grants\",\r\n    \"nameFi\": \"Ehdollinen osakepalkkio\",\r\n    \"nameSv\": \"Villkorlig aktiepremie\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": true,\r\n    \"unemploymentInsurance\": true,\r\n    \"healthInsurance\": true,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"conditionalStockOptions\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A stock option which involves a share assignment restriction and a conditional refund obligation or which has generated income subject to \\r\\nsocial insurance contributions. In this case, the\\r\\nvalue of the benefit received from the stock option does not depend, deviating from the original\\r\\nplan, on the development of the value of the\\r\\nshares between promising and transferring,\\r\\nwhich is at most one year in duration.\\r\\nSuch a situation may arise if the conditions\\r\\nchange, for example, in such a way that an employee’s employment relationship ends during\\r\\nthe period of one year and they can keep part of\\r\\nthe shares. At the same time, an obligation to\\r\\npay social insurance contributions arises.\\r\\nSuch a stock option is considered to have been\\r\\ngiven, from the perspective of social insurance\\r\\ncontributions, when burdens concerning the\\r\\nstock option end and the stock option remains in\\r\\nthe person’s ownership or is otherwise made\\r\\navailable to them. Considering taxation, a conditional stock option is, however, considered to\\r\\nhave been given already when the person receives the right of ownership to the shares.\\r\\nThe amount of the stock option must be reported\\r\\nusing the “Conditional stock option” income type for\\r\\ndetermining social insurance contributions. The\\r\\nstock option to be reported using this income type\\r\\nis not income paid to the income earner in concrete\\r\\nterms, but this information is used as the basis of\\r\\nsocial insurance contributions. The benefit received\\r\\nby the income earner and the tax withheld from it\\r\\nwere already reported using the “Stock options and\\r\\ngrants” (320) income type when the income earner\\r\\nreceived the right of ownership to the stock option.\\r\\nThis information is used in taxation, for example. The “Conditional stock option” income type is only\\r\\nused when the stock option involves both a share assignment restriction and a conditional refund obligation. If the stock option only involves one of\\r\\nthese two burdens, it must be reported similarly to\\r\\nregular stock options using the “Stock options and\\r\\ngrants” (320) income type.\",\r\n    \"descriptionFi\": \"Osakepalkkio, johon on liittynyt osakkeiden luovutusrajoitus ja ehdollinen palautusvelvollisuus ja josta on syntynyt sosiaalivakuutusmaksujen alaista tuloa. Tässä tilanteessa palkkiosta saatavan edun arvo ei siis alkuperäisestä suunnitelmasta poiketen riipukaan osakkeiden arvon kehityksestä osakepalkkion lupaamisen ja antamisen välisenä, vähintään vuoden pituisena aikana.\\r\\n\\r\\nTällainen tilanne voi syntyä olosuhteiden muuttuessa esimerkiksi niin, että työntekijän työsuhde päättyy vuoden määräaikana ja hän saa pitää osan osak-keista. Samalla syntyy velvollisuus maksaa sosiaali-vakuutusmaksut.\\r\\nTällainen osakepalkkio katsotaan sosiaalivakuutus-maksujen näkökulmasta annetuksi silloin, kun palk-kiota koskevat rasitteet päättyvät ja osakepalkkio jää henkilön omistukseen ja vallintaan. Verotuksen kan-nalta ehdollinenkin osakepalkkio katsotaan kuitenkin annetuksi jo silloin, kun henkilö saa omistusoikeuden osakkeisiin.\\r\\n\\r\\nPalkkion määrä ilmoitetaan tulolajilla Ehdollinen osakepalkkio sosiaalivakuutusmaksujen määräämistä varten. Tulolajilla ilmoitettava osakepalkkio ei ole tulonsaajalle konkreettisesti maksettavaa tuloa, vaan tietoa käytetään sosiaalivakuutusmaksujen perusteena. Tulonsaajan saama etu ja siitä tehty ennakonpidätys on ilmoitettu tulolajilla Osakepalkkio (320) jo silloin, kun tulonsaaja on saanut omistusoikeuden osakepalkkioon. Tätä tietoa käytetään esimerkiksi verotuksessa.\\r\\n\\r\\nTulolajia Ehdollinen osakepalkkio käytetään vain silloin, kun palkkioon on liittynyt sekä osakkeiden luovutusrajoitus että ehdollinen palautusvelvollisuus. Jos palkkioon on liittynyt vain toinen rasitteista, se ilmoitetaan kuten tavallinen osakepalkkio tulolajilla Osakepalkkio (320).\",\r\n    \"descriptionSv\": \"En aktiepremie som omfattas av en överlåtelsebegränsning och en villkorlig återbetalningsskyldighet och som gett inkomst som socialförsäkringsavgifter ska betalas för. Värdet på den förmån som fås från premien i denna situation är inte, till skillnad från den ursprungliga planen, beroende av hur värdet på aktierna utvecklas under en period på minst ett år från det att premien utlovats till det att den getts. En sådan situation kan uppstå om omständigheterna till exempel förändras så att arbetstagarens anställningsförhållande upphör under tidsfristen på ett år och arbetstagaren får behålla en del av aktierna. Samtidigt uppstår en skyldighet att betala socialförsäkringsavgifter. Med tanke på socialförsäkringsavgifterna anses en sådan aktiepremie ha getts när servituten gällande premien upphör och personen äger aktiepremien och kan förfoga över den. Med tanke på beskattningen anses även en villkorlig aktiepremie emellertid ha getts redan när personen erhåller äganderätt till aktierna. Premiens belopp anmäls med inkomstslaget Villkorlig aktiepremie för fastställande av socialförsäkringsavgifter. Den aktiepremie som anmäls med inkomstslaget är inte en konkret inkomst som betalas till inkomsttagaren, utan uppgiften används som grund för socialförsäkringsavgifter. Den förmån som inkomsttagaren erhållit och förskottsinnehållningen på förmånen har anmälts med inkomstslaget Aktiepremie (320) redan när inkomsttagaren har fått äganderätt till aktiepremien.\\r\\nDenna uppgift används exempelvis vid beskattningen.\\r\\nInkomstslaget Villkorlig aktiepremie används endast\\r\\nnär premien omfattas av såväl en\\r\\növerlåtelsebegränsning som en villkorlig\\r\\nåterbetalningsskyldighet. Om premien endast\\r\\nomfattas av ett av dessa servitut, anmäls den som en\\r\\nvanlig aktiepremie med inkomstslaget Aktiepremie\\r\\n(320).\",\r\n    \"taxAndSideCostsDescrEn\": \"This income type is subject to social insurance\\r\\ncontributions.\",\r\n    \"taxAndSideCostsDescrFi\": \"Tulolaji on sosiaalivakuutusmaksujen alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Socialförsäkringsavgifter ska betalas för inkomstslaget.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 366,\r\n    \"nameEn\": \"Copyright royalties, earned income\",\r\n    \"nameFi\": \"Tekijänoikeuskorvaus ansiotuloa\",\r\n    \"nameSv\": \"Ersättning för upphovsrätt som förvärvsinkomst\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"copyrightRoyaltiesEarnedIncome\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Compensation paid for the transfer of a copyright to a written or artistic work or for the right to use the object of a copyright. Compensation can also be paid for the transfer of a right related to a copyright or for the use of an object protected by related rights. A copyright can be transferred in full or in part based on an agreement.\",\r\n    \"descriptionFi\": \"Korvaus, joka maksetaan kirjallisen tai taiteellisen teoksen tekijänoikeuden luovuttamisesta tai tekijänoikeuden kohteen käyttöoikeudesta. Korvaus voidaan maksaa myös tekijänoikeuden lähioikeuden luovuttamisesta tai lähioikeuksilla suojatun kohteen käyttämisestä. Tekijänoikeus voidaan luovuttaa sopimuksen perusteella osittain tai kokonaan.\",\r\n    \"descriptionSv\": \"En ersättning som betalas för överlåtelse av upphovsrätt för ett litterärt eller konstnärligt verk eller nyttjanderätt till objektet för upphovsrätten. Ersättningen kan betalas också för överlåtelse av närstående rättigheter till upphovsrätten eller för användning av ett objekt som skyddats med närstående rättigheter. Upphovsrätten kan överlåtas utifrån ett avtal helt eller delvis.\",\r\n    \"taxAndSideCostsDescrEn\": \"Copyright royalties constitute taxable income, and tax is withheld from them if the recipient is not registered in the prepayment register. \\r\\nSocial insurance contributions are not usually paid on copyright royalties. However, if such compensation is based on a copyright established in an employment relationship and the compensation is subject to a social insurance contribution, the payer must indicate this by providing insurance information in conjunction with the income type.\",\r\n    \"taxAndSideCostsDescrFi\": \"Tekijänoikeuskorvaus on veronalaista ansiotuloa ja siitä toimitetaan ennakonpidätys, jos korvauksen saaja ei kuulu ennakkoperintärekisteriin. \\r\\nTekijänoikeuskorvauksesta ei yleensä makseta sosiaalivakuutusmaksuja. Jos korvaus kuitenkin perustuu palvelussuhteessa syntyneeseen tekijänoikeuteen ja korvaus on jonkin sosiaalivakuutusmaksun alainen, suorituksen maksaja ilmoittaa siitä antamalla tulolajin yhteydessä lisäksi vakuuttamistiedon.\",\r\n    \"taxAndSideCostsDescrSv\": \"En ersättning för upphovsrätt utgör skattepliktig förvärvsinkomst på vilken förskottsinnehållning ska verkställas, om mottagaren inte är införd i förskottsuppbördsregistret. \\r\\nSocialförsäkringsavgifter betalas i allmänhet inte för en ersättning för upphovsrätt. Om ersättningen dock baserar sig på en upphovsrätt som uppkommit i ett anställningsförhållande och ersättningen är underställd socialförsäkringsavgifter, anmäler utbetalaren av prestationen den genom att i samband med inkomstslaget också uppge försäkringsuppgiften.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 367,\r\n    \"nameEn\": \"Stock grant paid in money\",\r\n    \"nameFi\": \"Rahana maksettu osakepalkkio\",\r\n    \"nameSv\": \"Aktiepremie som betalats ut i pengar \",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"stockGrantPaidInMoney\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A stock grant that is paid in money.\\r\\nThe income type is used to report the part of stock grants that is paid in money. The part received in shares must be reported using the income type Stock options and grants (320).\",\r\n    \"descriptionFi\": \"Osakepalkkio, joka maksetaan rahana.\\r\\nTulolajilla ilmoitetaan vain se osuus osakepalkkiosta, joka maksetaan rahana. Osakkeina annettava osuus ilmoitetaan tulolajilla Osakepalkkio (320).\",\r\n    \"descriptionSv\": \"Aktiepremie som betalats ut i pengar.\\r\\nEndast den andel av aktiepremien som betalats ut i pengar anges för inkomstslaget. Den andel som ges i aktier anges för inkomstslaget Aktiepremie (320).\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld from the stock grant paid in money.\\r\\nBy default, this income type is subject to the pension insurance contribution but not to other social insurance contributions.\\r\\nIf a payment reported using this income type differs from the default, the payer must report it by specifying insurance information in conjunction with the income type.\",\r\n    \"taxAndSideCostsDescrFi\": \"Rahana maksetusta osakepalkkiosta toimitetaan ennakonpidätys.\\r\\nOletuksena tulolajissa on, että se on eläkevakuutusmaksun alainen, mutta ei muiden sosiaalivakuutusmaksujen alainen. Jos tulolajilla ilmoitettu suoritus poikkeaa oletuksesta, suorituksen maksaja ilmoittaa siitä antamalla tulolajin yhteydessä lisäksi vakuuttamistiedon.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på aktiepremier som betalats ut i pengar.\\r\\nI inkomstslaget är det förvalt att inkomsten är underställd pensionsförsäkringsavgift men inte andra socialförsäkringsavgifter.\\r\\nOm en prestation som anmälts med ett inkomstslag avviker från det förvalda alternativet anmäler prestationsbetalaren detta genom att dessutom ge en försäkringsuppgift i samband med inkomstslaget.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 368,\r\n    \"nameEn\": \"Employee stock option paid in money\",\r\n    \"nameFi\": \"Rahana maksettu työsuhdeoptio\",\r\n    \"nameSv\": \"Anställningsoption som betalats ut i pengar\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 1,\r\n    \"transactionCode\": \"employeeStockOptionPaidInMoney\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"An employee stock option that is paid in money.\\r\\nThe income type is used to report the part of an employee stock option that is paid in money. The part given in other than money must be reported using the income type Employee stock option (343). If required, the income type Employee stock option with a subscription price lower than the market price at the time of issue (361) can also be used.\",\r\n    \"descriptionFi\": \"Työsuhdeoptio, joka maksetaan rahana.\\r\\nTulolajilla ilmoitetaan vain se osuus työsuhdeoptiosta, joka maksetaan rahana. Muuna kuin rahana annettava osuus ilmoitetaan tulolajilla Työsuhdeoptio (343). Tarvittaessa käytetään myös tulolajia Työsuhdeoptio, jonka merkintähinta on luovutusajankohtana alempi kuin markkinahinta (361).\",\r\n    \"descriptionSv\": \"Anställningsoption som betalats ut i pengar.\\r\\nEndast den andel av anställningsoptionen som betalats ut i pengar anges för inkomstslaget. Den andel som inte ges i pengar anges för inkomstslaget Anställningsoption (343). Vid behov används även inkomstslagen En anställningsoption vars teckningspris är lägre än marknadspriset vid överlåtelsetidpunkten (361).\",\r\n    \"taxAndSideCostsDescrEn\": \"Tax is withheld from an employee stock option paid in money. The employee stock option is subject to income taxation when the option is exercised.\\r\\nNo social insurance contributions are collected from an employee stock option when it is exercised. Even if the subscription price was significantly lower than the fair value, but the employee stock option is only exercised more than one year after its issuance, the payment is not deemed to be earnings from work on which social insurance contributions are based. A stock option exercised after more than one year is reported using income type Employee stock option.\",\r\n    \"taxAndSideCostsDescrFi\": \"Rahana maksetusta työsuhdeoptiosta toimitetaan ennakonpidätys. Työsuhdeoptio on tuloverotuksen kohteena optiota käytettäessä.\\r\\nTyösuhdeoptiosta ei mene sosiaalivakuutusmaksuja sitä käytettäessä. Vaikka merkintähinta olisi merkittävästi alhaisempi kuin käypä arvo, mutta työsuhdeoptio käytetään vasta yli vuoden kuluttua sen antamisesta, ei suoritus ole sosiaalivakuutusmaksujen perusteena olevaa työansiota. Jos kyse on yli vuoden kuluttua käytetystä optiosta, se ilmoitetaan tulolajilla Työsuhdeoptio.\",\r\n    \"taxAndSideCostsDescrSv\": \"Förskottsinnehållning verkställs på anställningsoption som betalats ut i pengar. Anställningsoptionen är föremål för inkomstbeskattning när optionen används.\\r\\nSocialförsäkringsavgifter betalas inte för en anställningsoption när den används. Även om teckningspriset skulle vara betydligt lägre än det gängse värdet, men anställningsoptionen används först när över ett år har gått från det att anställningsoptionen har erhållits, utgör prestationen inte förvärvsinkomst som utgör grund för socialförsäkringsavgift. Om det är fråga om en option som använts först när över ett år har gått anmäls optionen med inkomstslaget Anställningsoption.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/otherCompensation\"\r\n    ],\r\n    \"calcGrouping\": \"salaryAdditions\"\r\n  },\r\n  {\r\n    \"code\": 369,\r\n    \"nameEn\": \"Earnings from work paid by a JuEL employer to a worker-client of an invoicing service\",\r\n    \"nameFi\": \"JuEL-työnantajan maksama työansio, jonka työn suorittaja on laskuttanut laskutuspalveluyrityksen kautta\",\r\n    \"nameSv\": \"Förvärvsinkomst som en arbetsgivare som omfattas av OffPL betalat och som arbetets utförare har fakturerat via ett faktureringsföretag\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": true,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"earningsFromJuELEmployerToLightEntrepreneur\",\r\n    \"notSupportedError\": \"The JuEL payer that commissioned the work  reports the income separately using this info income type.\",\r\n    \"descriptionEn\": \"Earnings from such work which a payer within the scope of the public sector pensions act (julkisten alojen eläkelaki (JuEL) 81/2016) has commissioned from the individual and which the individual performing the work invoices from the JuEL payer through an invoicing service company. In these situations, the individual performing the work is often called a self-employed “light entrepreneur”. This income type is only used when the individual performing the work has no YEL or MYEL insurance, and they are insured in accordance with JuEL.\",\r\n    \"descriptionFi\": \"Työansio sellaisesta työstä, jonka on henkilöltä tilannut julkisten alojen eläkelain (JuEL) piiriin kuuluva maksaja ja jonka henkilö eli työn suorittaja laskuttaa JuEL-maksajalta laskutuspalveluyrityksen kautta. Näissä tilanteissa työn suorittajaa kutsutaan usein kevytyrittäjäksi. Tulolajia käytetään vain silloin, kun työn suorittajalla ei ole omaa YEL- tai MYEL-vakuutusta ja hänet vakuutetaan JuEL:n mukaan.\",\r\n    \"descriptionSv\": \"Arbetsinkomst för arbete som en betalare som omfattas av pensionslagen för den offentliga sektorn (OffPL) har beställt hos en person och för vilken personen, det vill säga den som utför arbetet, fakturerar OffPL-betalaren via ett faktureringsföretag. I en sådan situation kallas den som utför arbetet ofta för lättföretagare. Inkomstslaget används endast när den som utför arbetet inte har en egen FöPL-försäkring eller LFöPL-försäkring och hen försäkras enligt OffPL.\",\r\n    \"taxAndSideCostsDescrEn\": \"The income type is subject to pension insurance contributions.\",\r\n    \"taxAndSideCostsDescrFi\": \"Tulolaji on eläkevakuutusmaksun alainen.\",\r\n    \"taxAndSideCostsDescrSv\": \"Pensionsförsäkringspremie ska betalas för inkomstslaget.\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 401,\r\n    \"nameEn\": \"Compensation collected for car benefit\",\r\n    \"nameFi\": \"Autoedusta peritty korvaus\",\r\n    \"nameSv\": \"Ersättning för bilförmån\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": -1,\r\n    \"transactionCode\": \"compensationCollectedForCarBenefit\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"The deductible of a fringe benefit paid by the\\r\\nemployee from the taxable value of the car\\r\\nbenefit.\\r\\nThe deductible of the car benefit decreases\\r\\nthe amount of earnings and taxable benefit on\\r\\nwhich social insurance contributions are\\r\\nbased or eliminates it entirely. If the deductible of the car benefit is lower than the taxable value of the car benefit, the difference between the value of the car benefit and the\\r\\ncompensation collected for the car benefit is\\r\\ntaxable wages of the employee. If the deductible is equal to the taxable value of the car\\r\\nbenefit, no taxable benefit is established.\\r\\nEven then, the collected compensation must\\r\\nbe reported. The amount of the benefit must\\r\\nalso be reported using the ‘Car benefit’ income type.\\r\\nThe amount of the car benefit is reported in\\r\\nfull using the Car benefit income type, and\\r\\nthe deductible collected from the employee is\\r\\nreported using the Compensation collected\\r\\nfor car benefit income type.\\r\\nThe car benefit must be reported even if the\\r\\npayer has collected from the income earner\\r\\ncompensation for the fringe benefit equal to\\r\\nor exceeding the monetary value of the fringe\\r\\nbenefit, with no remaining amount to be\\r\\nadded to the wages.\",\r\n    \"descriptionFi\": \"Luontoisedun omavastuuosuus, jonka työntekijä maksaa autoedun verotusarvosta.\\r\\n\\r\\nAutoedun omavastuuosuus alentaa verotettavaa etua tai poistaa sen kokonaan. Jos autoedun omavastuuosuus on autoedun verotusarvoa alempi, autoedun arvon ja autoedusta perityn korvauksen erotus on työntekijän veronalaista palkkaa. Jos omavastuuosuus vastaa autoedun verotusarvoa, verotettavaa etua ei synny. Tällöinkin peritty korvaus on ilmoitettava. Tällöin on lisäksi ilmoitettava edun määrä Autoetu-tulolajilla.\\r\\n\\r\\nAutoedun arvo ilmoitetaan täysimääräisenä Autoetu-tulolajilla ja Autoedusta peritty korvaustulolajilla työntekijältä perityn omavastuuosuuden määrä. \\r\\n\\r\\nAutoetu on ilmoitettava siinäkin tapauksessa, että suorituksen maksaja on perinyt tulonsaajalta luontoisedusta luontoisedun rahaarvoa vastaavan tai sitä suuremman korvauksen, eikä palkkaan lisättävää määrää ole jäänyt lainkaan.\\r\\n\\r\\nTyönantaja voi periä autoedun omavastuuosuuden työntekijän nettopalkasta.\",\r\n    \"descriptionSv\": \"Självriskandel av naturaförmån som arbetstagaren betalar för penningvärdet av bilförmån. Självriskandelen av bilförmånen minskar den arbetsinkomst som ligger till grund för socialförsäkringsavgifter och det beskattningsbara förmånsbeloppet eller avlägsnar den helt. Om självriskandelen av bilförmånen är lägre än bilförmånens beskattningsvärde, utgör differensen mellan beskattningsvärdet och den ersättning som tas ut för bilförmånen skattepliktig lön för arbetstagaren. Om självriskandelen motsvarar beskattningsvärdet av bilförmånen, uppkommer ingen beskattningsbar förmån. Även då ska ersättningen anmälas. Då ska dessutom ersättningen anmälas med inkomstslaget Bilförmån. Värdet på bilförmånen anmäls till fullt belopp med inkomstslaget Bilförmån och Ersättning för bilförmån anmäls den självriskandel som debiterats arbetstagaren. Bilförmån ska anmälas även i det fall att arbetsgivaren tagit ut av arbetstagaren ett belopp på naturaförmånen som motsvarar naturaförmånens penningvärde eller en större ersättning, och ingenting återstår att lägga till lönen.\",\r\n    \"taxAndSideCostsDescrEn\": \"The employer may collect the deductible of\\r\\nthe car benefit from the net wages of the employee.\",\r\n    \"taxAndSideCostsDescrFi\": \"Ilmoitettu summa vähentää ennakonpidätyksen ja sosiaalimaksujen pohjana olevaa palkkaa ja vähennetään oletuksena asiakasvaratilin kautta maksetusta palkasta.\",\r\n    \"taxAndSideCostsDescrSv\": \"Arbetsgivaren kan debitera självriskandelen för bilförmånen av arbetstagarens nettolön.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": -1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/carBenefit\",\r\n      \"https://palkkaus.fi/usecases/2019/benefits\"\r\n    ],\r\n    \"calcGrouping\": \"deductions\"\r\n  },\r\n  {\r\n    \"code\": 402,\r\n    \"nameEn\": \"Withholding tax\",\r\n    \"nameFi\": \"Ennakonpidätys\",\r\n    \"nameSv\": \"Förskottsinnehållning\",\r\n    \"isNegativeSupported\": true,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"withholdingTax\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A prepayment whereby the payer deducts the\\r\\ntax calculated according to the withholding\\r\\ntax rate from the monetary amount paid to a\\r\\ntaxpayer.\\r\\nThe withholding tax can be reported as a total\\r\\namount in the report, even if several income\\r\\ntypes were reported.\",\r\n    \"descriptionFi\": \"Ennakkoperintä, jossa suorituksen maksaja vähentää verovelvolliselle maksettavasta rahamäärästä ennakonpidätysprosentin mukaan lasketun veron.\\r\\n\\r\\nEnnakonpidätys voidaan ilmoittaa ilmoituksella yhteissummana, vaikka tulolajeja olisi ilmoitettu useita.\",\r\n    \"descriptionSv\": \"Förskottsuppbörd där betalaren drar av skatt som beräknats enligt förskottsinnehållningsprocenten från det belopp som betalas till den skattskyldige. Förskottsinnehållning kan anmälas som total summa, även om flera inkomstslag anmälts.\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 403,\r\n    \"nameEn\": \"Elected official fee\",\r\n    \"nameFi\": \"Luottamushenkilömaksu\",\r\n    \"nameSv\": \"Avgift för förtroendevald\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"electedOfficialFee\",\r\n    \"notSupportedError\": \"Not supported for companies / associations\",\r\n    \"descriptionEn\": \"A fee that can be collected from the meeting\\r\\nfees of elected municipal officials to be paid to\\r\\npolitical parties.\",\r\n    \"descriptionFi\": \"Luottamushenkilömaksua voivat ilmoittaa vain kunta ja kuntayhtymä.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 404,\r\n    \"nameEn\": \"Tax at source\",\r\n    \"nameFi\": \"Lähdevero\",\r\n    \"nameSv\": \"Källskatt\",\r\n    \"isNegativeSupported\": true,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"taxAtSource\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"The final tax collected from a payment made to a non-resident taxpayer that the payer is obligated to collect from the income in connection with its payment.\",\r\n    \"descriptionFi\": \"Lopullinen rajoitetusti verovelvolliselle maksetusta suorituksesta perittävä vero, jonka tulon maksaja on velvollinen perimään tulosta sen maksamisen yhteydessä.\",\r\n    \"descriptionSv\": \"En slutgiltig skatt på betalning till en begränsat skattskyldig som den som betalar inkomsten är skyldig att bära upp på inkomsten när den betalas.\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"deductions\"\r\n  },\r\n  {\r\n    \"code\": 405,\r\n    \"nameEn\": \"Tax at source deduction\",\r\n    \"nameFi\": \"Lähdeverovähennys\",\r\n    \"nameSv\": \"Källskatteavdrag\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"taxAtSourceDeduction\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A deduction made from the total amount of monetary wages and fringe benefits before tax at source is collected.\",\r\n    \"descriptionFi\": \"Rahapalkan ja luontoisetujen yhteismäärästä ennen lähdeveron perimistä tehtävä vähennys.\",\r\n    \"descriptionSv\": \"Avdrag som görs på det sammanlagda beloppet på penninglön och naturaförmåner innan källskatten tas ut.\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 406,\r\n    \"nameEn\": \"Wages paid\",\r\n    \"nameFi\": \"Maksettava palkka\",\r\n    \"nameSv\": \"Lön som ska betalas ut\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"wagesPaid\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Cash wages paid to the employee after withholding tax, the employer's social insurance\\r\\ncontributions and other deductible items have\\r\\nbeen deducted.\\r\\nThe other deductible items may include reimbursement collected from the employee for\\r\\nfringe benefits, unemployment fund and trade\\r\\nunion membership fees collected by the employer, and enforcement payments.\\r\\nExpense items that are the employer's responsibility, such as hotel payments on business travel, ticket expenses or any occupational health care payments, are not reported\\r\\nusing the Wages paid income type.\",\r\n    \"descriptionFi\": \"Rahapalkka, joka maksetaan ennakonpidätyksen, työntekijän sosiaalivakuutusmaksujen ja muiden vähennettävien erien vähentämisen jälkeen työntekijälle.\\r\\n\\r\\nMuihin vähennettäviin eriin voivat kuulua esimerkiksi luontoiseduista työntekijältä perittävät maksut, työnantajan pidättämät työttömyyskassan ja ammattiliiton jäsenmaksut sekä ulosottomaksut.\\r\\n\\r\\nTyönantajalle kuuluvia kulueriä, kuten esim. työmatkoilta maksettavia hotellimaksuja, matkalippukuluja tai mahdollisia työterveydenhuollon maksuja ei ilmoiteta Maksettava palkka-tulolajilla.\",\r\n    \"descriptionSv\": \"Penninglön som betalas efter förskottsinnehållning, arbetstagarens socialförsäkringsavgifter och andra andelar som ska dras av till arbetstagaren. Övriga andelar som ska dras av kan omfatta till exempel avgifter som tas ut av arbetstagaren för naturaförmåner, medlemsavgifter som arbetsgivaren innehåller för arbetslöshetskassa och fackavgifter samt utsökningsavgifter. Kostnader som hör till arbetsgivaren, såsom hotellavgifter, biljettkostnader eller eventuella företagshälsovårdsavgifter anmäls inte med inkomstslaget Lön som ska betalas ut.\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 407,\r\n    \"nameEn\": \"Reimbursement collected for other fringe benefits\",\r\n    \"nameFi\": \"Muista luontoiseduista peritty korvaus\",\r\n    \"nameSv\": \"Ersättning för andra naturaförmåner\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": -1,\r\n    \"transactionCode\": \"reimbursementCollectedForOtherFringeBenefits\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"The share of the value of a fringe benefit paid\\r\\nby the employee.\\r\\nIn this section, report the amount collected\\r\\nfrom the employee for fringe benefits other\\r\\nthan a car benefit or employer-subsidised\\r\\ncommuter ticket benefit.\\r\\nThe amount of the fringe benefit is reported in\\r\\nfull using the appropriate income type, and\\r\\nthe deductible collected from the employee is\\r\\nreported using the ‘Reimbursement collected\\r\\nfor other fringe benefits’ income type.\\r\\nEven if the employer has collected or the employee otherwise has paid a reimbursement\\r\\nfor a fringe benefit to the employer equalling\\r\\nthe monetary value of the fringe benefit, the\\r\\nfringe benefit and the reimbursement collected must be separately reported to the Incomes Register in full. The reimbursement\\r\\ncollected for a fringe benefit reduces the\\r\\namount of taxable income and the amount of\\r\\nearnings from work on which the social insurance contributions are based. If the reimbursement collected for a meal benefit equals the taxable value, the collected reimbursement is not reported using the itemisation type Reimbursement collected for other\\r\\nfringe benefits. In such a case, only the\",\r\n    \"descriptionFi\": \"Osuus luontoisedun arvosta, jonka työntekijä maksaa itse.\\r\\n\\r\\nKohdassa ilmoitetaan summa, joka työntekijältä on peritty muista luontoiseduista kuin autoedusta tai työsuhdematkalippuedusta.\\r\\n\\r\\nLuontoisedun arvo ilmoitetaan täysimääräisenä omalla tulolajillaan ja Muista luontoiseduista peritty korvaus-tulolajilla työntekijältä perityn omavastuuosuuden määrä.\\r\\n\\r\\nJos ravintoedusta peritty korvaus vastaa verotusarvoa, perittyä korvausta ei ilmoiteta Muusta luontoisedusta peritty korvaus-erittelylajilla. Tällöin käytetään vain tietoa Ravintoedusta peritty korvaus vastaa verotusarvoa – ”Kyllä (true)”.\\r\\n\\r\\nTyönantaja voi periä korvauksen luontoiseduista työntekijän nettopalkasta.\",\r\n    \"descriptionSv\": \"Andel av naturaförmånens värde som arbetstagaren betalar själv I punkten anges den summa som av arbetstagaren tagits ut för andra naturaförmåner än bilförmån eller personalbiljett. Värdet på naturaförmånen anmäls till fullt belopp med eget inkomstslag och med inkomstslaget Ersättning för andra naturaförmåner anmäls den självriskandel som debiterats arbetstagaren. Även om arbetsgivaren debiterat eller arbetstagaren annars betalat till arbetsgivaren ett belopp som motsvarar naturaförmånens penningvärde anmäls naturaförmånen och den debiterade ersättningen separat till sitt fulla belopp till inkomstregistret. Ersättning för naturaförmånen sänker beloppet på arbetsinkomsten som ligger till grund för socialförsäkringsavgifter och beskattningsbara inkomsten. Exempel: Arbetstagaren har fått ladda sin elbil under arbetsdagen i arbetsgivarens parkeringshall på arbetsgivarens bekostnad. Detta utgör en månatlig förmån på 30 euro för arbetstagaren. Arbetsgivaren tar ut från arbetstagarens nettolön det belopp som motsvarar förmånens beskattningsvärde, 30 euro. Betalaren anmäler till inkomstregistret: • 317 Övriga naturaförmåner 30.00 o Typ av förmån: Annan förmån • 407 Ersättning för andra naturaförmåner 30.00 Om ersättningen för kostförmånen motsvarar\\r\\nbeskattningsvärdet anmäls den debiterade\\r\\nersättningen inte med specifikationsslaget\\r\\nErsättning som debiterats övriga\\r\\nnaturaförmåner. Då används endast uppgiften\\r\\nErsättningen för kostförmånen motsvarar\\r\\nbeskattningsvärdet - ”Ja (true)”.\\r\\nArbetsgivaren kan debitera ersättningen för\\r\\nnaturaförmåner av arbetstagarens nettolön.\",\r\n    \"taxAndSideCostsDescrEn\": \"Reimbursement for meal benefit corresponds to\\r\\nthe taxable value – Yes (true) entry is made.\\r\\nThe employer may collect the reimbursement\\r\\nfor fringe benefits from the net wages of the\\r\\nemployee.\\r\\nIf a fringe benefit reported using income type\\r\\nOther fringe benefit is not subject to social insurance contributions, and the payer has reported this using the Type of insurance information data group, the corresponding Type of\\r\\ninsurance information data must also be\\r\\nadded to the Reimbursement collected for\\r\\nother fringe benefits income type to the extent\\r\\nthe collected reimbursement targets the part not\\r\\nsubject to social insurance contributions. Although the default assumption for this income\\r\\ntype is that it is not subject to social insurance\\r\\ncontributions, the payer must confirm the data on\\r\\nthe report in the manner described above.\",\r\n    \"taxAndSideCostsDescrFi\": \"Ilmoitettu summa vähentää oletuksena ennakonpidätyksen ja sosiaalimaksujen pohjana olevaa palkkaa ja vähennetään asiakasvaratilin kautta maksetusta palkasta.\\r\\n\\r\\nJos Muu luontoisetu -tulolajilla ilmoitettu luontoisetu ei ole sosiaalivakuutusmaksujen alainen ja suorituksen maksaja on ilmoittanut tämän käyttämällä Vakuuttamistiedon tyyppi - tietoryhmää, vastaava Vakuuttamistiedon tyyppi -tieto on lisättävä myös Muista luontoiseduista peritty korvaus -tulolajiin siltä osin, kun peritty korvaus kohdistuu siihen osaan etua, joka ei ole sosiaalivakuutusmaksujen alainen, ks. asiakasohje Tietojen ilmoittaminen tulorekisteriin: luontoisedut ja kustannusten korvaukset.\",\r\n    \"taxAndSideCostsDescrSv\": \"Om naturaförmånen som anmälts med inkomstslaget Övriga naturaförmåner inte är underställd socialförsäkringsavgifter och prestationsbetalaren har anmält detta med uppgiftsgruppen Försäkringsuppgiftens typ, måste den motsvarande uppgiften Försäkringsuppgiftens typ läggas till inkomstslaget Ersättning för andra naturaförmåner till den del som ersättningen hänför sig till del av förmånen som inte är underställd socialförsäkringsavgifter. Även om förvalet för inkomstslaget är att prestationen inte är underställd socialförsäkringsavgifter, ska betalaren med anmälan bekräfta uppgifterna på ovannämnda sättet.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": -1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/benefits\"\r\n    ],\r\n    \"calcGrouping\": \"deductions\"\r\n  },\r\n  {\r\n    \"code\": 408,\r\n    \"nameEn\": \"Other item deductible from net wage or salary\",\r\n    \"nameFi\": \"Nettopalkasta vähennettävä muu erä\",\r\n    \"nameSv\": \"Övriga poster som ska dras av från nettolönen\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"otherItemDeductibleFromNetWage\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Items the payer deducts from the net wage or\\r\\nsalary before paying it to the income earner.\\r\\nItems may be deducted from the net wage by\\r\\nlaw or agreement. Deductions made by law\\r\\ninclude debt recovery payments. The employer may set off its own receivables from\\r\\nthe employee's wages. Fees may be deducted from the employee's net wages, if the\\r\\nemployer and employee have agreed on their\\r\\ncollection. Items deductible from a net wage\\r\\ninclude unemployment fund and trade union\\r\\nmembership fees, and parking garage fees.\",\r\n    \"descriptionFi\": \"Erät, jotka palkan maksaja vähentää nettopalkasta ennen kuin maksaa suorituksen tulonsaajalle.\\r\\n\\r\\nNettopalkasta voidaan vähentää suorituksia lain tai sopimuksen perusteella. Lain perusteella tehtäviä vähennyksiä ovat esimeriksi ulosmittaukset. Työnantaja voi kuitata omia saataviaan työntekijän palkasta. Työntekijän nettopalkasta voidaan vähentää maksuja, joiden perimisestä on työnantajan ja työntekijän kesken sovittu. Nettopalkasta vähennettäviä eriä ovat esim. työttömyyskassan ja ammattiyhdistysten jäsenmaksut sekä pysäköintihallimaksut.\\r\\n\\r\\nJos ulosmittaus on jo ilmoitettu erikseen, ei sitä ilmoiteta enää tällä erittelylajilla yhteissummassa.\",\r\n    \"descriptionSv\": \"Poster som lönebetalaren avdrar från nettolönen innan prestationen betalas till inkomsttagaren. Prestationer kan avdras från nettolönen med stöd av lag eller avtal. Lagstadgade avdrag är t.ex. utmätningar. Arbetsgivaren kan kvitta egna fordringar mot arbetstagarens lön. Från arbetstagarens nettolön kan avdras betalningar som arbetsgivaren och arbetstagaren avtalat om. Poster som avdras från nettolönen är t.ex. medlemsavgifter till arbetslöshetskassa och fackförening samt parkeringshallsavgifter.\",\r\n    \"taxAndSideCostsDescrEn\": \"If the debt recovery payment has already\\r\\nbeen separately reported, it is not included in\\r\\nthe total amount of this itemisation type.\",\r\n    \"taxAndSideCostsDescrFi\": \"Vähennetään nettopalkasta - ei vaikuta ennakonpidätykseen tai sosiaalimaksuihin.\",\r\n    \"taxAndSideCostsDescrSv\": \"Om utmätning redan anmälts separat, anmäls den i den totala summan med detta specifikationsslag.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": -1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/deductions\"\r\n    ],\r\n    \"calcGrouping\": \"deductions\"\r\n  },\r\n  {\r\n    \"code\": 409,\r\n    \"nameEn\": \"Net wage or salary\",\r\n    \"nameFi\": \"Nettopalkka\",\r\n    \"nameSv\": \"Nettolön\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"netWage\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Wages from which tax has been withheld and\\r\\nthe employee's social insurance contributions\\r\\nhave been paid.\\r\\nThe net wage is different to the wage paid to\\r\\nthe employee.\",\r\n    \"descriptionFi\": \"Palkka, josta on toimitettu ennakonpidätys ja maksettu työntekijän sosiaalivakuutusmaksut. \\r\\n\\r\\nNettopalkka on eri asia kuin työntekijälle maksettava palkka.\",\r\n    \"descriptionSv\": \"Lön på vilken förskottsinnehållning har verkställts och arbetstagarens socialförsäkringsavgifter har betalats. Med nettolön avses inte samma sak som med lön som betalas till arbetstagaren.\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 410,\r\n    \"nameEn\": \"Employer-paid premium for collective additional pension insurance\",\r\n    \"nameFi\": \"Työnantajan maksaman kollektiivisen lisäeläkevakuutuksen maksu\",\r\n    \"nameSv\": \"Kollektiv tilläggspensionsförsäkringsavgift som betalats av arbetsgivaren\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"employerPaidPremiumForCollectiveAdditionalPensionInsurance\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"The employer's share of the additional pension insurance premium paid to cover a collective additional pension.\\r\\nThe premium is reported only if the employee\\r\\npays part of the premiums. If the employer pays the collective additional pension insurance premiums in full, this information is not\\r\\nreported on the earnings payment report.\\r\\nOnly the premiums of collective additional\\r\\npension insurance policies taken out on 6\\r\\nMay 2004 or later are reported here. If the\\r\\nemployee has been insured prior to 6 May\\r\\n2004, the premiums collected are reported\\r\\nonly in the Employee's earnings-related pension insurance contribution section.\\r\\nThe contributions are also reported in that\\r\\nsection when a new employee has joined a\\r\\ncollective insurance policy after 6 May 2004,\\r\\nbut the employer has taken the policy out\\r\\nprior to that date.\",\r\n    \"descriptionFi\": \"Työnantajan osuus kollektiivisen lisäeläkkeen kattamiseksi maksettavasta lisäeläkevakuutuksen maksusta.\\r\\n\\r\\nMaksu ilmoitetaan vain, jos työntekijä maksaa itse osan maksuista. Jos työnantaja maksaa kollektiivisen lisäeläketurvan maksut kokonaan, tietoja ei ilmoiteta laisinkaan palkkatietoilmoituksella. \\r\\n\\r\\nKohdassa ilmoitetaan vain 6.5.2004 tai sen jälkeen otetun kollektiivisen lisäeläketurvan maksut. Jos työntekijä on ollut vakuutettuna ennen 6.5.2004, häneltä perityt maksut ilmoitetaan vain Työntekijän työeläkevakuutusmaksu-kohdassa.\\r\\n\\r\\nMaksut ilmoitetaan tässä kohdassa myös silloin, kun uusi työntekijä on tullut 6.5.2004 jälkeen mukaan työnantajan ennen tuota päivää ottamaan kollektiiviseen vakuutusjärjestelmään.\",\r\n    \"descriptionSv\": \"Arbetsgivarens andel av avgiften för tilläggspensionsförsäkring för att täcka den kollektiva tilläggspensionen Avgiften anmäls endast om arbetstagaren betalar en del av den. Om arbetsgivaren betalar hela avgiften för kollektivt tilläggspensionsskydd anmäls uppgiften inte anmälan om löneuppgifter. I punkten anges endast avgifter för kollektivt tilläggspensionsskydd som tecknats 6.5.2004 eller därefter. Om arbetstagaren har varit försäkrad före 6.5.2004, anmäls avgifter som arbetstagaren debiterats endast i punkten\\r\\nArbetstagarens arbetspensionsförsäkringsavgift.\\r\\nAvgifterna anmäls i punkten också när en ny\\r\\narbetstagare blir delaktig av en kollektiv\\r\\nförsäkring som arbetsgivaren tecknat före\\r\\n6.5.2004.\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/pension\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 411,\r\n    \"nameEn\": \"Employer-paid premium for collective additional pension insurance, employee's contribution\",\r\n    \"nameFi\": \"Työnantajan maksaman kollektiivisen lisäeläkevakuutuksen työntekijältä peritty osuus\",\r\n    \"nameSv\": \"Andel av kollektiv tilläggspensionsförsäkringsavgift som betalats av arbetsgivaren och som debiteras arbetstagaren\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"employerPaidPremiumForCollectiveAdditionalPensionInsuranceEmployeesContribution\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"The employee's share of the additional pension insurance premium paid to cover a collective additional pension.\\r\\nThe premium is reported only if the employee\\r\\npays part of the premiums. If the employer\\r\\npays the collective additional pension insurance premiums in full, this data is not reported on the earnings payment report.\\r\\nOnly the premiums of collective additional\\r\\npension insurance policies taken out on 6\\r\\nMay 2004 or later are reported here. If the\\r\\nemployee has been insured prior to 6 May\\r\\n2004, the premiums collected are reported\\r\\nonly in the Employee's earnings-related pension insurance contributions section. \\r\\nThe contributions are also reported in that\\r\\nsection when a new employee has joined a\\r\\ncollective insurance policy after 6 May 2004,\\r\\nbut the employer has taken the policy out\\r\\nprior to that date.\",\r\n    \"descriptionFi\": \"Työntekijän osuus kollektiivisen lisäeläkkeen kattamiseksi maksettavasta lisäeläkevakuutuksen maksusta.\\r\\n\\r\\nMaksu ilmoitetaan vain, jos työntekijä maksaa itse osan maksuista. Jos työnantaja maksaa kollektiivisen lisäeläketurvan maksut kokonaan, tietoja ei ilmoiteta lainkaan palkkatietoilmoituksella. \\r\\n\\r\\nKohdassa ilmoitetaan vain 6.5.2004 tai sen jälkeen otetun kollektiivisen lisäeläketurvan maksut. Jos työntekijä on ollut vakuutettuna ennen 6.5.2004, häneltä perityt maksut ilmoitetaan vain Työntekijän työeläkevakuutusmaksut-kohdassa.\\r\\n\\r\\nMaksut ilmoitetaan kohdassa myös silloin, kun uusi työntekijä on tullut 6.5.2004 jälkeen mukaan työnantajan ennen tuota päivää ottamaan kollektiiviseen vakuutusjärjestelmään.\",\r\n    \"descriptionSv\": \"Arbetstagarens andel av avgiften för tilläggspensionsförsäkring för att täcka den kollektiva tilläggspensionen. Avgiften anmäls endast om arbetstagaren betalar en del av den. Om arbetsgivaren betalar hela avgiften för kollektivt tilläggspensionsskydd anmäls uppgiften inte anmälan om löneuppgifter. I punkten anges endast avgifter för kollektivt tilläggspensionsskydd som tecknats 6.5.2004 eller därefter. Om arbetstagaren har varit försäkrad före 6.5.2004, anmäls avgifter som arbetstagaren debiterats endast i punkten arbetstagarens arbetspensionsförsäkringsavgift. Avgifterna anmäls i punkten också när en ny arbetstagare blir delaktig av en kollektiv försäkring som\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"Vähennetään oletuksena nettopalkasta. Ei vaikuta ennakonpidätykseen tai sosiaalimaksuihin.\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": -1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/pension\"\r\n    ],\r\n    \"calcGrouping\": \"deductions\"\r\n  },\r\n  {\r\n    \"code\": 412,\r\n    \"nameEn\": \"Employee's health insurance contribution\",\r\n    \"nameFi\": \"Työntekijän sairausvakuutusmaksu\",\r\n    \"nameSv\": \"Arbetstagarens sjukförsäkringsavgift\",\r\n    \"isNegativeSupported\": true,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"employeesHealthInsuranceContribution\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A share of the health insurance premium via which the employee participates in financing earned income insurance.\\r\\nIn the case of resident taxpayers, the health insurance contribution is always included in withholding tax, and the employee's health insurance contribution should not be separately\\r\\nreported for resident taxpayers. The health insurance contribution of a non-resident taxpayer must be collected separately in addition to tax at source, unless the\\r\\nnon-resident taxpayer wants to be taxed in accordance with the Tax Procedure Act, in which case the health insurance contribution is included in the withholding tax or prepayment of tax.\\r\\nThe employee's health insurance contribution includes the daily allowance contribution of health insurance and the health care contribution of health insurance. The amounts of the\\r\\ncontributions are confirmed annually by Government decree.\",\r\n    \"descriptionFi\": \"Yleisesti verovelvollisella tulonsaajalla sairausvakuutusmaksu sisältyy aina ennakonpidätykseen, eikä yleisesti verovelvollisten osalta tule ilmoittaa erikseen työntekijän sairausvakuutusmaksua.\\r\\n\\r\\nRajoitetusti verovelvollisen sairausvakuutusmaksu on perittävä erikseen lähdeveron lisäksi, ellei rajoitetusti verovelvollinen ole hakeutunut verotusmenettelystä annetun lain mukaiseen verotukseen, jolloin sairausvakuutusmaksu sisältyy ennakonpidätykseen tai ennakkoveroon.\",\r\n    \"descriptionSv\": \"En del av sjukförsäkringsavgiften med vilken arbetstagaren deltar i finansieringen av arbetsinkomstförsäkringen. Sjukförsäkringsavgift för allmänt skattskyldiga inkomsttagare ingår alltid i förskottsinnehållningen, och arbetstagarens sjukförsäkringsavgift ska inte anmälas separat för allmänt skattskyldiga. Sjukförsäkringspremien för begränsat skattskyldiga ska tas ut separat utöver källskatt om inte den begränsat skattskyldige har sökt sig till beskattning i enlighet med lagen om beskattningsförfarande, då beskattningen ingår i förskottsuppbörden. I arbetstagarens sjukförsäkringsavgift ingår sjukförsäkringens dagpenningsavgift och sjukförsäkringens sjukvårdsavgift. Beloppen fastställs årligen genom statsrådets förordning.\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"deductions\"\r\n  },\r\n  {\r\n    \"code\": 413,\r\n    \"nameEn\": \"Employee's pension insurance contribution\",\r\n    \"nameFi\": \"Työntekijän työeläkevakuutusmaksu\",\r\n    \"nameSv\": \"Arbetspensionsförsäkringsavgift för arbetstagare\",\r\n    \"isNegativeSupported\": true,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"employeesPensionInsuranceContribution\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Earnings-related pension insurance contribution determined based on the gross wage,\\r\\nthrough which the employee participates in\\r\\nthe financing of the earnings-related pension.\\r\\nThe employee's earnings-related pension insurance contribution is deducted from the employee's net wages.\",\r\n    \"descriptionFi\": \"Bruttopalkan perusteella määräytyvä työeläkevakuutusmaksu, jolla työntekijä osallistuu työeläkevakuutuksen rahoittamiseen.\\r\\n\\r\\nTyöntekijän työeläkevakuutusmaksu vähennetään työntekijän nettopalkasta.\",\r\n    \"descriptionSv\": \"Arbetspensionsförsäkringsavgift som bestäms enligt bruttolönen, med vilken arbetstagaren\\r\\ndeltar i finansieringen av\\r\\narbetspensionsförsäkringen.\\r\\nArbetstagarens arbetspensionsförsäkringsavgift\\r\\ndras av från arbetstagarens nettolön.\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 414,\r\n    \"nameEn\": \"Employee's unemployment insurance contribution\",\r\n    \"nameFi\": \"Työntekijän työttömyysvakuutusmaksu\",\r\n    \"nameSv\": \"Arbetstagarens arbetslöshetsförsäkringsavgift\",\r\n    \"isNegativeSupported\": true,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"employeesUnemploymentInsuranceContribution\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"An unemployment insurance contribution determined based on the gross wage, through\\r\\nwhich the employee participates in the financing of the unemployment insurance.\\r\\nThe employee's unemployment insurance\\r\\ncontribution is deducted from the employee's\\r\\nnet wages.\",\r\n    \"descriptionFi\": \"Bruttopalkan perusteella määräytyvä työttömyysvakuutusmaksu, jolla työntekijä osallistuu työttömyysvakuutuksen rahoittamiseen.\\r\\n\\r\\nTyöntekijän työttömyysvakuutusmaksu vähennetään työntekijän nettopalkasta.\",\r\n    \"descriptionSv\": \"Arbetslöshetsförsäkringsavgift som bestäms enligt bruttolönen, med vilken arbetstagaren deltar i finansieringen av arbetslöshetsförsäkringen. Arbetstagarens arbetslöshetsförsäkringspremie dras av från arbetstagarens nettolön.\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 415,\r\n    \"nameEn\": \"Reimbursement for employer-subsidised commuter ticket\",\r\n    \"nameFi\": \"Työsuhdematkalipusta peritty korvaus\",\r\n    \"nameSv\": \"Ersättning för personalbiljett\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"reimbursementForEmployerSubsidisedCommuterTicket\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"The deductible of a fringe benefit paid by the employee from the euro value of an employer-subsidised commuter ticket.\\r\\nPart of the value of the employer-subsidised commuter ticket is tax-exempt and part is taxable. The taxable share of the employer-subsidised commuter ticket is a fringe benefit. A personal public transport ticket with a value of no more than EUR 3400, provided by the employer to the employee for commuting between the employee's residence and place of work, is tax-exempt income. A report must always be submitted for an employer-subsidised commuter ticket, including when there is no taxable benefit.If the income earner buys the ticket themselves, and the employer pays the price of the ticket or part of it to the employee, the entirety of the compensation paid by the employer is considered to be the employee's wages. In such a case, the price of the ticket paid to the employee is reported as wages only.\\r\\nThe employer may collect the deductible of the employer-subsidised commuter ticket from the net wages of the employee.\\r\\nThe employer must deduct the reimbursement collected from the employee from the taxable share of the employer-subsidised commuter ticket deemed to be wages. The remaining amount must be reported as the taxable share deemed to be wages.\\r\\nIf no benefit deemed to be wages is created, the employer must deduct the reimbursement collected from the employee from the tax-exempt share of the employer-subsidised commuter ticket. The remaining amount must be reported as the tax-exempt share of the employer-subsidised commuter ticket.\\r\\nIn the case of employer-subsidised commuter tickets, the amounts of taxable and tax-exempt benefit are estimated on an annual level unlike other fringe benefits, which are valuated on a monthly level. If an employer-subsidised commuter ticket is granted once per year, for example at the start of the year, and a reimbursement is collected regularly throughout the entire year, the person would, in practice, incur a taxable benefit at the start of the year, as the payer has not yet had time to collect more than the first month's reimbursement for the benefit. So that the payer does not need to correct submitted reports in a situation described above, the payer can anticipate the situation in advance and divide the tax-exempt share over the entire year, reporting it monthly to the Incomes Register together with the collected reimbursement.\",\r\n    \"descriptionFi\": \"Luontoisedun omavastuuosuus, jonka työntekijä maksaa työsuhdematkalipun euromääräisestä arvosta.\\r\\nOsa työsuhdematkalipun arvosta on verovapaata ja osa veronalaista. Veronalainen osuus työsuhdematkalipusta on luontoisetua.\\r\\nTyönantajan työntekijälle antama enintään 3 400 euron arvoinen joukkoliikenteen henkilökohtainen matkalippu asunnon ja työpaikan välistä matkaa varten on verovapaata tuloa. Työsuhdematkalipusta on aina annettava ilmoitus, myös silloin kun verotettavaa etua ei ole.\\r\\nJos palkansaaja ostaa matkalipun itse ja työnantaja maksaa työntekijälle matkalipun hinnan tai osan siitä, työnantajan maksama korvaus katsotaan kokonaisuudessaan työntekijän palkaksi. Tällöin työntekijälle maksettu lipun hinta ilmoitetaan vain palkkana. Työnantaja voi periä työsuhdematkalipun omavastuuosuuden työntekijän nettopalkasta.\\r\\nTyönantajan on vähennettävä työsuhdematkalipun palkaksi katsottavasta osuudesta työntekijältä perimänsä korvaus. Palkaksi katsottavana osuutena ilmoitetaan jäljelle jäävä määrä.\\r\\nJos palkaksi katsottavaa etua ei muodostu, työnantajan on vähennettävä työntekijältä perimänsä korvaus työsuhdematkalipun verovapaasta osuudesta. Työsuhdematkalipun verovapaana osuutena ilmoitetaan jäljelle jäävä määrä.\\r\\nTyösuhdematkalipussa veronalaisen ja verovapaan edun määriä arvioidaan vuositasolla, toisin kuin muissa luontoiseduissa, joissa arvostus tapahtuu kuukausitasolla. Jos työsuhdematkalippu annetaan kerran vuodessa, esimerkiksi vuoden alussa ja korvausta peritään säännöllisesti koko vuosi, käytännössä vuoden alussa olisi tilanne, että henkilölle muodostuisi veronalainen etu, koska maksaja ei ole vielä ehtinyt periä kuin ensimmäisen kuukauden korvauksen edusta. Jotta maksajan ei tarvitsisi korjata annettuja ilmoituksia edellä kuvatussa tilanteessa, maksaja voi jo etukäteen ennakoida tilanteen ja jakaa verovapaan osuuden koko vuodelle ja ilmoittaa sen kuukausittain tulorekisteriin samassa yhteydessä perimänsä korvauksen kanssa.\",\r\n    \"descriptionSv\": \"Självriskandel av naturaförmån som arbetstagaren betalar för penningvärdet av personalbiljett.\\r\\nEn del av personalbiljettens värde är skattefritt och en del är skattepliktigt. Den skattepliktiga andelen av personalbiljetten är en naturaförmån.\\r\\nEn personlig kollektivtrafikbiljett som arbetsgivaren ger arbetstagaren för resor mellan bostaden och arbetsplatsen är skattefri inkomst till ett värde av högst 3 400 euro. Uppgifter om personalbiljetter ska alltid anmälas även om det inte uppkommit någon beskattningsbar förmån.\\r\\nOm löntagaren köper biljetten själv och arbetsgivaren betalar biljettpriset eller en del därav till arbetstagaren, anses andelen som arbetsgivaren betalat i sin helhet utgöra arbetstagarens lön. Då anmäls biljettpriset endast som lön.\\r\\nArbetsgivaren kan debitera självriskandelen för personalbiljetten av arbetstagarens nettolön.\\r\\nArbetsgivaren ska dra av den ersättning som debiterats av arbetstagaren från den andel av personalbiljetten som betraktas som lön. Som andel som betraktas som lön anmäls det återstående beloppet.\\r\\nOm ingen förmån som kan betraktas som lön uppkommer, ska arbetsgivaren dra av den ersättning som debiteras av arbetstagaren från personalbiljettens skattefria andel. Som personalbiljettens skattefria andel anmäls det återstående beloppet.\\r\\nPersonalbiljettens skattefria och skattepliktiga belopp beräknas på årsnivå i motsats till övriga naturaförmåner, där värderingen i regel sker på månadsnivå. Om en personalbiljett ges en gång per år i början av året och ersättning tas ut regelbundet under hela året, skulle personen i praktiken få en skattepliktig förmån i början av året, eftersom betalaren inte har hunnit debitera mer än en månads ersättning för förmånen. För att betalaren inte ska behöva korrigera inlämnade anmälningar i ovan beskrivna fall, kan betalaren redan på förhand förutse situationen och fördela den skattefria andelen på hela året och anmäla den varje månad till inkomstregistret tillsammans med den ersättning som debiterats.\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": -1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/subsidisedCommute\",\r\n      \"https://palkkaus.fi/usecases/2019/benefits\"\r\n    ],\r\n    \"calcGrouping\": \"deductions\"\r\n  },\r\n  {\r\n    \"code\": 416,\r\n    \"nameEn\": \"Tax paid abroad\",\r\n    \"nameFi\": \"Ulkomaille maksettu vero\",\r\n    \"nameSv\": \"Skatt som betalats till utlandet\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"taxPaidAbroad\",\r\n    \"notSupportedError\": \"International scenarios are not supported inthis version.\",\r\n    \"descriptionEn\": \"\",\r\n    \"descriptionFi\": \"Palkkaus.fi-perusversio ei tue kaikkia kansainvälisiä tilanteita oikein! Jos maksat palkkoja ulkomailla työskentelevälle henkilölle, ota ensin yhteyttä asiakaspalveluun.\",\r\n    \"descriptionSv\": \"\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": false,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [],\r\n    \"calcGrouping\": \"disabled\"\r\n  },\r\n  {\r\n    \"code\": 417,\r\n    \"nameEn\": \"Distraint\",\r\n    \"nameFi\": \"Ulosmittaus\",\r\n    \"nameSv\": \"Utmätning\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"distraint\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"An amount withheld in order to make a debt\\r\\nrecovery payment. The garnished amount is\\r\\ncalculated from net income.\",\r\n    \"descriptionFi\": \"Perittäväksi tulleen velan maksamiseksi tehtävä pidätys. Ulosmitattava määrä lasketaan nettotulosta.\\r\\n\\r\\nUlosmitattaessa velallisen ja hänen perheensä toimeentuloa varten tulee kuitenkin jättää suojaosuus.\",\r\n    \"descriptionSv\": \"Innehållning som görs för skuld som ska indrivas Det belopp som utmäts beräknas utifrån nettoinkomsten. Vid utmätning ska dock ett skyddat belopp\\r\\nlämnas kvar för gäldenärens och hans eller\\r\\nhennes familjs utkomst.\",\r\n    \"taxAndSideCostsDescrEn\": \"However, a protected share must be left during garnishment for the livelihood of the\\r\\ndebtor and their family.\",\r\n    \"taxAndSideCostsDescrFi\": \"Vähennetään oletuksena nettopalkasta. Ei vaikuta ennakonpidätykseen tai sosiaalimaksuihin.\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": -1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/deductions\"\r\n    ],\r\n    \"calcGrouping\": \"deductions\"\r\n  },\r\n  {\r\n    \"code\": 418,\r\n    \"nameEn\": \"Voluntary individual pension insurance premium\",\r\n    \"nameFi\": \"Vapaaehtoisen yksilöllisen eläkevakuutuksen maksu\",\r\n    \"nameSv\": \"Försäkringsavgift för en individuell, frivillig pensionsförsäkring\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"voluntaryIndividualPensionInsurancePremium\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"Premium of a pension insurance taken out for\\r\\na specific person to complement statutory\\r\\npension provision. The voluntary individual\\r\\npension insurance premium may be continuous or a one-off payment.\\r\\nEnter the premiums of the voluntary individual\\r\\npension insurance taken for the employee\\r\\nhere. Similarly, also report the premiums of\\r\\nan individual pension insurance taken out for\\r\\na partner in a general partnership, a general\\r\\npartner in a limited partnership, or a shareholder in a limited liability company that does\\r\\nnot have an earnings-related pension insurance.\\r\\nIf the premiums of voluntary individual pension insurance taken out by the employer exceed EUR 8,500, they are taxable income\\r\\nfrom which the employer's social insurance\\r\\ncontributions are also paid. If the premiums\\r\\nexceed EUR 8,500 per year, the payer reports the extraneous premiums as other\\r\\nfringe benefits.\\r\\nExample: The employer pays EUR 12,000 per year\\r\\nin premiums for voluntary individual pension insurance it has taken out for an employee. The employee\\r\\nreports the information as follows:\\r\\n• Voluntary individual pension insurance premium EUR 8,500.\\r\\n• Other taxable fringe benefits EUR 3,500.\\r\\nEnter only the premiums of the voluntary individual pension insurance here. If, on the employee's behalf, the employer has paid the\\r\\nemployee's mandatory pension insurance\\r\\ncontributions, unemployment insurance contributions and the premiums of voluntary pension insurance taken out by the employee,\\r\\nthese are reported using the ‘Other fringe benefits’ income type.\",\r\n    \"descriptionFi\": \"Lakisääteistä eläketurvaa täydentävän tietylle henkilölle kohdistetun eläkevakuutuksen maksu. Vapaaehtoisen yksilöllisen eläkevakuutuksen maksu voi olla jatkuva tai kertamaksullinen.\\r\\n\\r\\nKohtaan merkitään työntekijälle otetun vapaaehtoisen yksilöllisen eläkevakuutuksen maksut. Samoin ilmoitetaan myös sellaisen yksilöllisen eläkevakuutuksen maksut, joka on otettu avoimen yhtiön yhtiömiehelle, kommandiittiyhtiön vastuunalaiselle yhtiömiehelle tai sellaisen osakeyhtiön osakkaalle, joka ei ole työeläkevakuutettu.\\r\\n\\r\\nJos työnantajan ottaman vapaaehtoisen yksilöllisen eläkevakuutuksen maksut ylittävät 8 500 euroa, ne ovat veronalaista tuloa, joista maksetaan myös työnantajan sosiaalivakuutusmaksut. Jos maksut ylittävät 8 500 euroa vuodessa, suorituksen maksaja ilmoittaa ylimenevät maksut muuna luontoisetuina. \\r\\n\\r\\nEsimerkki: Työnantaja maksaa työntekijälle ottamansa vapaaehtoisen yksilöllisen eläkevakuutuksen maksuja vuodessa 12000 euroa. Työnantaja ilmoittaa tiedot seuraavasti:\\r\\n\\r\\n- Vapaaehtoisen yksilöllisen eläkevakuutuksen maksu 8 500 euroa.\\r\\n- Muu verotettava luontoisetu 3 500 euroa.\\r\\n\\r\\nKohtaan merkitään vain vapaaehtoisen yksilöllisen eläkevakuutuksen maksut. Jos työnantaja on maksanut työntekijän puolesta työntekijän pakollisia eläkevakuutusmaksuja, työttömyysvakuutusmaksuja ja työntekijän itsensä ottaman vapaaehtoisen eläkevakuutuksen maksuja, nämä ilmoitetaan Muu luontoisetu-tulolajilla.\",\r\n    \"descriptionSv\": \"Premie för en pensionsförsäkring som kompletterar det lagstadgade pensionsskyddet och som riktas till en bestämd person. Försäkringspremien för en individuell, frivillig pensionsförsäkring kan vara kontinuerlig eller betalas en gång. I punkten anges avgifterna för en individuell, frivillig pensionsförsäkring som tecknats för arbetstagaren. Dessutom anges avgifterna för sådana individuella pensionsförsäkringar som tecknats för bolagsman i öppet bolag, ansvarig bolagsman i kommanditbolag eller delägare i ett aktiebolag som inte har arbetspensionsförsäkring. Om arbetsgivarens avgifter för den frivilliga individuella pensionsförsäkringen överstiger 8 500 euro, är de skattepliktig inkomst för vilken även arbetsgivarens socialförsäkringsavgifter\\r\\nska betalas. Om avgifterna överstiger 8 500\\r\\neuro om året anmäler betalaren de överstigande\\r\\navgifterna som övriga naturaförmåner.\\r\\nExempel: Arbetsgivaren betalar 12 000 euro om året för\\r\\nen individuell, frivillig pensionsförsäkring som tecknats\\r\\nför en arbetstagare. Arbetsgivaren anmäler uppgifterna\\r\\npå följande sätt:\\r\\n• Försäkringsavgift för en individuell, frivillig\\r\\npensionsförsäkring 8 500 euro.\\r\\n• Annan skattepliktig naturaförmån 3 500 euro.\\r\\nI punkten anges endast avgifterna för den\\r\\nindividuella, frivilliga pensionsförsäkringen. Om\\r\\narbetsgivaren för arbetstagarens räkning betalat\\r\\narbetstagarens obligatoriska\\r\\npensionsförsäkringsavgifter,\\r\\narbetslöshetsförsäkringsavgifter och avgifter för\\r\\nen frivillig pensionsförsäkring som arbetstagaren\\r\\nsjälv tecknat anmäls dessa med inkomstslaget\\r\\nÖvriga naturaförmåner.\",\r\n    \"taxAndSideCostsDescrEn\": \"\",\r\n    \"taxAndSideCostsDescrFi\": \"\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/pension\"\r\n    ],\r\n    \"calcGrouping\": \"benefits\"\r\n  },\r\n  {\r\n    \"code\": 419,\r\n    \"nameEn\": \"Deduction before withholding\",\r\n    \"nameFi\": \"Vähennys ennen ennakonpidätystä\",\r\n    \"nameSv\": \"Avdrag före förskottsinnehållning\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": true,\r\n    \"taxDefault\": -1,\r\n    \"transactionCode\": \"deductionBeforeWithholding\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"A direct expense incurred when performing\\r\\nwork, which is paid by the employee and deducted from gross wages by the employer before determining the withholding tax. Such expenses include expenses paid by the income\\r\\nearner that are incurred from the use of a\\r\\nchainsaw, and other expenses arising from\\r\\ntools. Similarly, business travel expenses are\\r\\nsuch expenses, if the employer does not pay\\r\\ntax-exempt allowance for them in addition to\\r\\nwages.\\r\\nThe maximum amount of deduction that can\\r\\nbe reported is the amount of the payment.\\r\\nEnter the deduction made before withholding\\r\\ntax in this section. The share of the deductions must also be included in the wages reported using an income type.\\r\\nExample: The employee has paid EUR 4,500 in expenses incurred from the use of a chainsaw. The annual wages paid to the employee are EUR 20,000, of\\r\\nwhich the share of work performed with a chainsaw\\r\\nis EUR 14,000. The employee has requested the deduction of operating expenses according to the 40%\\r\\nrule, before the collection of tax to be prepaid from\\r\\nthe wages paid for work performed with a chainsaw,\\r\\ni.e., EUR 5,600. Tax has been withheld from EUR\\r\\n14,400 (20,000 - 5,600) in accordance with section\\r\\n15 of the tax prepayment act (ennakkoperintälaki\\r\\n1118/1996).\\r\\nEUR 20,000 is reported using the Wages income\\r\\ntype, and EUR 5,600 is reported using the itemisation type Deduction before withholding. The employee must request a chainsaw deduction on their\\r\\npre-completed tax return form, and provide an account of the amount of wages paid for work performed with a chainsaw. In final taxation, the deduction is calculated from the share of the wages paid\\r\\nfor work performed with a chainsaw (EUR 14,000).\\r\\nIf the employer has paid the expenses incurred by\\r\\nthe use of a chainsaw, see the instructions for reporting this in the section: Taxable reimbursement of expenses.\\r\\nExample: A folk musician is promised EUR 200 for a\\r\\ngig. Travel and travel expenses do not affect the\\r\\ngross amount paid. The travel expenses are thus not\\r\\nreimbursed.\\r\\nThe employer can calculate the amount from which\\r\\nto withhold tax by deducting the same amount as the tax-exempt reimbursable amount, based on an account given by the employee. For example, amounts\\r\\ncorresponding to travel expenses of 51 km x 43\\r\\ncents per kilometre, or 21.93 cents, and a partial\\r\\ndaily allowance of EUR 20, leaving EUR 158.07 as\\r\\nthe amount subject to withholding. The employer's\\r\\nhealth insurance contribution is also paid from the\\r\\nsame amount.\\r\\nEUR 200 is reported using the Wages income type,\\r\\nand EUR 41.93 is reported using the itemisation type\\r\\nDeduction before withholding. No entries are made\\r\\nusing the income types of tax-exempt reimbursements of travel expenses.\\r\\nThe employee must request the deductions in their\\r\\ntax return, and the deduction is usually lower than in\\r\\nconnection with withholding.\\r\\nIn certain situations laid down in the law, the\\r\\npayer can also deduct such costs from the\\r\\nathlete's fee before withholding that were paid\\r\\nby the athlete himself or herself and that were\\r\\ndirectly incurred from sports. Such a deduction made by the payer is reported using the\\r\\nincome type Deduction before withholding.\\r\\nThe share of the deductions must also be included in the fee reported using the Nonwage compensation for work income type.\\r\\nThe maximum amount of deduction that can\\r\\nbe reported is the amount of the payment\\r\\neven if the expenses incurred by the athlete\\r\\nare greater than the fee.\\r\\nIf the payer makes the deduction from income\\r\\nthat is not subject to social insurance contributions, the payer must submit the Type of insurance information entry for the Deduction before withholding income type. The default for\\r\\nthe Deduction before withholding income type is\\r\\nthat it is not subject to social insurance contributions. Regardless of this, the payer must provide\\r\\nthe Type of insurance information entry (Subject\\r\\nto social insurance contributions: No) if the deduction is made from income that is not subject\\r\\nto social insurance contributions.\\r\\nExample: A third-party lecturer is paid a lecture fee of\\r\\nEUR 1,000. The lecture fee is not subject to social insurance contributions. The lecturer has incurred EUR 150\\r\\nin travel expenses. The payer does not separately reimburse the expenses; instead, the payer deducts the\\r\\namount of the expenses before withholding taxes. The\\r\\nperson's withholding rate is 30%. The payer withholds\\r\\ntaxes from EUR 850 and reports the data to the Incomes\\r\\nRegister as follows: • 214 Lecture fee: 1000.00\\r\\n• 402 Withholding tax: 255.00\\r\\n• 419 Deduction before withholding: 150.00\\r\\no Type of insurance information: Subject\\r\\nto social insurance contributions –\\r\\nGrounds for insurance contribution: No\\r\\nIf a single transaction includes the payment of\\r\\nwages subject to social insurance contributions and such wages in accordance with section 13 of the tax prepayment act (ennakkoperintälaki 1118/1996) on which social insurance contributions are not based, and expenses which are deducted before withholding are allocated to either income, the payer\\r\\nmust specify the Type of insurance information. This allows the deduction to be allocated to the correct income type.\\r\\nIf, in a single transaction, the payer deducts expenses from income subject to social insurance\\r\\ncontributions and income from which no social\\r\\ninsurance contributions are paid, the payer must\\r\\nreport the deductions separately. Type of insurance information (Subject to social insurance\\r\\ncontributions: No) must be specified for the deduction made from income from which no social\\r\\ninsurance contributions are paid.\\r\\nExample: A person is paid EUR 2,900 in monthly wages\\r\\nand EUR 300 in waiting time compensation. The waiting\\r\\ntime compensation is not subject to social insurance\\r\\ncontributions. The person's withholding rate is 20%. The\\r\\nperson has EUR 45 in expenses allocated to the waiting\\r\\ntime compensation and EUR 100 in expenses allocated\\r\\nto the time-rate pay. The employer deducts both parts\\r\\nfrom the person's income prior to withholding taxes. The\\r\\npayer reports the data to the Incomes Register as follows:\\r\\n• 201 Time-rate pay: 2900.00\\r\\n• 217 Waiting time compensation: 300.00\\r\\n• 402 Withholding tax: 611.00\\r\\n• 419 Deduction before withholding: 100.00\\r\\n• 419 Deduction before withholding: 45.00\\r\\no Type of insurance information: Subject\\r\\nto social insurance contributions –\\r\\nGrounds for insurance contribution: No\",\r\n    \"descriptionFi\": \"Työntekijän itsensä maksama työn tekemisestä aiheutunut välitön kustannus, jonka työnantaja vähentää bruttopalkasta ennen ennakonpidätyksen osuuden määrittämistä. Tällaisia kustannuksia ovat muun muassa palkansaajan maksamat kustannukset moottorisahan käytöstä ja muut työvälineistä aiheutuneet kustannukset. Samoin tällaisia kustannuksia ovat myös menot työmatkoista, jos työnantaja ei maksa niistä verovapaita korvauksia palkan lisäksi.\\r\\n\\r\\nKohtaan merkitään vähennys, joka on tehty ennen ennakonpidätyksen toimittamista. Vähennysten osuuden tulee sisältyä myös tulolajilla ilmoitettuun palkkaan.\\r\\n\\r\\n**Esimerkki**: Työntekijä on maksanut itse moottorisahan käytöstä aiheutuneet 4 500 euron kustannukset. Työntekijälle maksettu koko vuoden palkka on 20 000 euroa, josta sahatyön osuus on 14 000 euroa. Työntekijä on vaatinut ennakkoperinnässä vähennystä käyttökustannuksista 40 %:n mukaisesti sahatyöstä maksetun palkan määrästä eli 5 600 euroa. Ennakonpidätys on toimitettu ennakkoperintälain (1118/1996) 15 § mukaisesti 14 400 eurosta (20 000 - 5 600).\\r\\n\\r\\nPalkan tulolajilla ilmoitetaan 20 000 euroa ja Vähennys ennen ennakonpidätystä -erittelylajilla ilmoitetaan 5 600 euroa. Työntekijän tulee vaatia esitäytetyllä veroilmoituksellaan moottorisahavähennystä ja selvittää sahatyöstä maksetun palkan määrä. Lopullisessa verotuksessa vähennys lasketaan sahatyöstä maksetun palkan (14 000 euroa) osuudesta.\\r\\n\\r\\nJos työnantaja on maksanut moottorisahan käytöstä aiheutuneet kustannukset, katso ilmoittaminen kohdasta: Veronalaiset kustannusten korvaukset. \\r\\n\\r\\n**Esimerkki**: Pelimannille luvataan soittokeikasta 200 euroa. Matkustaminen ja matkustamisen kustannukset eivät vaikuta maksettavaan bruttomäärään. Matkakustannuksia ei siis korvata.\\r\\n\\r\\nTyönantaja voi laskea määrän, josta toimittaa ennakonpidätyksen siten, että vähentää työntekijän antaman selvityksen perusteella saman määrän, jonka voisi korvata verovapaasti. Esimerkiksi matkustamiskustannuksia 51 km x 41 snt/km eli 20,91 snt ja osapäivärahan 19 euroa vastaavat määrät, jolloin pidätyksenalaiseksi määräksi jää 160,09 euroa. Samasta määrästä maksetaan myös työnantajan sairausvakuutusmaksu. \\r\\n\\r\\nPalkan tulolajilla ilmoitetaan 200 euroa, Vähennys ennen ennakonpidätystä -erittelylajilla ilmoitetaan 39,91 euroa. Verovapaiden matkakustannusten korvausten tulolajeilla ei tehdä merkintöjä. \\r\\n\\r\\nTyöntekijän on vaadittava vähennyksiä veroilmoituksessaan ja vähennys on yleensä alempi kuin ennakonpidätyksen yhteydessä.\",\r\n    \"descriptionSv\": \"Direkt kostnad för utförande av arbetet som arbetstagaren betalar själv och som arbetsgivaren drar av från bruttolönen innan förskottsinnehållningens andel bestäms. Exempel på sådana kostnader är kostnader som löntagaren betalat för användning av motorsåg och andra arbetsredskap. Kostnader av den här typen är också utgifter för arbetsresor, om arbetsgivaren inte betalar skattefria ersättningar för dem utöver lönen. Som avdragsbelopp kan man anmäla ett belopp som är högst lika stor som prestationen. I punkten antecknas det avdrag som gjorts före verkställandet av förskottsinnehållningen. Avdragens andel ska även ingå i lönen som anmälts med inkomstslaget. Exempel: En arbetstagare har själv betalat kostnader på 4 500 euro som åsamkats honom för användningen av motorsåg. Arbetstagarens lön för hela året är 20 000 euro, varav sågarbetets andel är 14 000 euro. Arbetstagaren har yrkat på avdrag för driftskostnaderna vid förskottsuppbörden enligt 40 procent av den lön som betalats för sågarbetet, dvs. 5 600 euro. I enlighet med 15 § i lagen om förskottsuppbörd (1118/1996) har förskottsinnehållning verkställts på 14 400 euro (20 000 – 5 600). Med inkomstslaget Lön anmäls 20 000 euro och med\\r\\nspecifikationsslaget Avdrag före förskottsinnehållning 5\\r\\n600 euro. Arbetstagaren bör yrka på avdrag för\\r\\nanvändningen av motorsågen på den förhandsifyllda\\r\\nskattedeklarationen och redogöra för beloppet av den\\r\\nlön som betalats för sågarbetet. I den slutliga\\r\\nbeskattningen beräknas avdraget på den andel av lönen\\r\\nsom betalats för sågarbetet (14 000 euro).\\r\\nOm arbetsgivaren har betalat kostnaderna för\\r\\nanvändningen av motorsågen, kan du ta del av punkten:\\r\\nSkattepliktiga kostnadsersättningar.\\r\\nExempel: En musiker utlovas 200 euro för en spelning.\\r\\nResorna och resekostnaderna påverkar inte det betalda\\r\\nbruttobeloppet. Resekostnader ersätts med andra ord\\r\\ninte.\\r\\nArbetsgivaren kan räkna ut det belopp på vilket\\r\\nförskottsinnehållning verkställs så att den på basis av\\r\\narbetstagarens utredning avdrar samma belopp som\\r\\nkan ersättas skattefritt. T.ex. belopp som motsvarar\\r\\nresekostnader 51 km x 43 cent/km dvs. 21,93 cent och\\r\\npartiellt dagtraktamente 20 euro, varvid\\r\\ninnehållningsbeloppet är 158,07 euro. Av detta belopp\\r\\nbetalas också arbetsgivarens sjukförsäkringsavgift.\\r\\nMed inkomstslaget Lön anmäls 200 euro och med\\r\\nspecifikationsslaget Avdrag före förskottsinnehållning\\r\\n41,93 euro. Inga anteckningar görs i inkomstslagen för\\r\\nersättningar för skattefria resekostnader.\\r\\nArbetstagaren ska yrka på avdragen i sin\\r\\nskattedeklaration, och avdraget är i allmänhet lägre än i\\r\\nsamband med förskottsinnehållningen.\\r\\nBetalaren kan i vissa lagstadgade situationer dra\\r\\nav från en idrottares arvoden innan\\r\\nförskottsinnehållningen verkställs sådana\\r\\nkostnader som idrottaren själv har betalat och\\r\\nsom har direkt orsakats av idrott. Ett sådant\\r\\navdrag som betalaren genomfört anmäls med\\r\\ninkomstslaget Avdrag före förskottsinnehållning.\\r\\nAvdragens andel ska även ingå i lönen som\\r\\nanmälts med inkomstslaget Arbetsersättning.\\r\\nSom avdragsbelopp kan man anmäla ett belopp\\r\\nsom är högst lika stor som prestationen, även\\r\\nom de kostnader som åsamkats idrottaren skulle\\r\\nvara högre än arvodet.\",\r\n    \"taxAndSideCostsDescrEn\": \"If the deduction before withholding is made from\\r\\nincome subject to all social insurance contributions, the payer does not need to specify the\\r\\nType of insurance information unless the payer also pays some other income not subject to social insurance contributions in the same transaction.\\r\\nExample: A person is paid EUR 3,500 as monthly\\r\\nwages. Her withholding rate is 25%. In her work, she\\r\\nuses her own tools for which the employer does not pay\\r\\na separate compensation. The payer deducts EUR 30\\r\\nfor the use of the employee's own tools before withholding and withholds taxes from EUR 3,470. Because the\\r\\nmonthly wages paid are subject to all social insurance\\r\\ncontributions, the payer does not need to specify the\\r\\nType of insurance information.\\r\\nThe payer reports the data to the Incomes Register as\\r\\nfollows:\\r\\n• 201 Time-rate pay: 3500.00\\r\\n• 402 Withholding tax: 867.50\\r\\n• 419 Deduction before withholding: 30.00\",\r\n    \"taxAndSideCostsDescrFi\": \"Ilmoitettu summa vähentää ennakonpidätyksen ja sosiaalimaksujen pohjana olevaa palkkaa ja vähennetään oletuksena asiakasvaratilin kautta maksetusta palkasta.\\r\\n\\r\\nJos samalla maksukerralla maksetaan sosiaalivakuutusmaksun alaista palkkaa ja sellaista EPL 13 §:n muista palkkaa, joka ei ole sosiaalivakuutusmaksujen perusteena ja jompaankumpaan tuloon kohdistuu kuluja, jotka vähennetään ennen ennakonpidätyksen toimittamista, maksajan on annettava tiedot palkoista kahdella eri ilmoituksella ja eriteltävä, kumpaan tuloon vähennys kohdistuu.\",\r\n    \"taxAndSideCostsDescrSv\": \"Om betalaren gör ett avdrag från en sådan inkomst som inte är underställd socialförsäkringsavgifter, ska betalaren ange uppgiften Typ av försäkringsuppgift för inkomstslaget Avdrag före förskottsinnehållning. Det förvalda värdet för inkomstslaget Avdrag före förskottsinnehållning är att inkomstslaget inte är underställd socialförsäkringsavgifter. Trots det ska betalaren ange uppgiften Typ av försäkringsuppgift\\r\\n(Underställd socialförsäkringsavgifter: Nej), om\\r\\navdraget görs från inkomst som inte är underställd\\r\\nsocialförsäkringsavgifter.\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": 0,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/deductions\"\r\n    ],\r\n    \"calcGrouping\": \"deductions\"\r\n  },\r\n  {\r\n    \"code\": 420,\r\n    \"nameEn\": \"Reimbursement collected for bicycle benefit\",\r\n    \"nameFi\": \"Polkupyöräedusta peritty korvaus\",\r\n    \"nameSv\": \"Ersättning för cykelförmån\",\r\n    \"isNegativeSupported\": false,\r\n    \"pensionInsurance\": false,\r\n    \"accidentInsurance\": false,\r\n    \"unemploymentInsurance\": false,\r\n    \"healthInsurance\": false,\r\n    \"insuranceInformationAllowed\": false,\r\n    \"taxDefault\": 0,\r\n    \"transactionCode\": \"reimbursementCollectedForBicycleBenefit\",\r\n    \"notSupportedError\": null,\r\n    \"descriptionEn\": \"The deductible of a fringe benefit paid by the\\r\\nemployee from the euro value of a bicycle\\r\\nbenefit.\\r\\nPart of the value of the bicycle benefit is taxexempt and part is taxable. EUR 1,200 of the\\r\\nbicycle benefit is tax-exempt and any amount\\r\\nin excess of this limit is a taxable fringe benefit. A report must always be submitted for a bicycle benefit, even when there is no taxable\\r\\nbenefit. Reimbursement collected for the benefit reduces the taxable amount of the benefit.\\r\\nThe employer may collect the deductible ofthe bicycle benefit from the net wages of the\\r\\nemployee.\\r\\nThe reporting of a bicycle benefit differs from\\r\\nother fringe benefits, similarly to the reporting\\r\\nof an employer-subsidised commuter ticket,\\r\\nbecause the employer must deduct the reimbursement collected from the employee from\\r\\nthe share deemed to be wages. The remaining amount must be reported as the taxable\\r\\nshare deemed to be wages.\",\r\n    \"descriptionFi\": \"Luontoisedun omavastuuosuus, jonka työntekijä maksaa polkupyöräedun euromääräisestä arvosta.\\r\\n\\r\\nOsa polkupyöräedun arvosta on verovapaata ja osa veronalaista. Polkupyöräedusta 1 200 euroa on verovapaata, ja ylittävä osa on veronalaista luontoisetua. Polkupyöräedusta on aina annettava ilmoitus, myös silloin kun verotettavaa etua ei ole. Edusta peritty korvaus alentaa verotettavan edun määrää.\\r\\n\\r\\nTyönantaja voi periä polkupyöräedun omavastuuosuuden työntekijän nettopalkasta.\\r\\n\\r\\nPolkupyöräedun ilmoittaminen poikkeaa muista luontoiseduista samalla tavalla kuin työsuhdematkalipun ilmoittaminen, koska työnantajan on vähennettävä polkupyöräedun palkaksi katsottavasta osuudesta työntekijältä perimänsä korvaus. Palkaksi katsottavana osuutena ilmoitetaan jäljelle jäävä määrä.\",\r\n    \"descriptionSv\": \"Självriskandel för naturaförmån som arbetstagaren betalar för penningvärdet av cykelförmånen. En del av cykelförmånens värde är skattefritt och en del är skattepliktigt. Av cykelförmånen är 1 200 euro skattefritt och den överstigande delen skattepliktig naturaförmån. Det ska alltid lämnas in en anmälan om cykelförmånen, även när ingen beskattningsbar förmån existerar. Den ersättning som debiterats för förmånen minskar det beskattningsbara förmånsbeloppet. Arbetsgivaren kan ta ut självriskandelen för cykelförmånen av arbetstagarens nettolön. Anmälan av cykelförmån skiljer sig från övriga\\r\\nnaturaförmåner på samma sätt som anmälan av\\r\\npersonalbiljett, eftersom arbetsgivaren ska dra\\r\\nav den ersättning som tas ut av arbetstagaren\\r\\nfrån den andel av cykelförmånen som betraktas\\r\\nsom lön. Som andel som betraktas som lön\\r\\nanmäls det återstående beloppet.\",\r\n    \"taxAndSideCostsDescrEn\": \"If no benefit deemed to be wages is created,\\r\\nthe employer must deduct the reimbursement\\r\\ncollected from the employee from the tax-exempt share of the bicycle benefit. The remaining amount must be reported as the tax-exempt share of the bicycle benefit.\",\r\n    \"taxAndSideCostsDescrFi\": \"Vähennetään oletuksena nettopalkasta. Ei vaikuta ennakonpidätykseen tai sosiaalimaksuihin, sillä summa pitää olla jo vähennetty kohdasta 364 'Polkupyöräedun palkaksi katsottu osuus'.\",\r\n    \"taxAndSideCostsDescrSv\": \"\",\r\n    \"isSupported\": true,\r\n    \"paymentDefault\": -1,\r\n    \"usecases\": [\r\n      \"https://palkkaus.fi/usecases/2019/benefits\"\r\n    ],\r\n    \"calcGrouping\": \"deductions\"\r\n  }\r\n];\r\n","const fi = {\"SALAXY\":{\"CORE\":{\"CalculationMappers\":{\"preview\":\"Esikatselu\",\"defaultMaterial\":\"Vakioaineisto\"},\"Taxcard2019Logic\":{\"netSalary\":\"Käteen jäävä osuus\",\"checkNewTaxcard\":\"Tarkista uusi verokortti\",\"addNewTaxcard\":\"Uusi verokortti\",\"noTaxcard\":\"Ei verokorttia\",\"taxPercentBasic\":\"perusprosentti\",\"taxPercentAdditional\":\"lisäprosentti\",\"chartTitle\":\"Maksetut palkat ja vuosikohtainen tuloraja\"},\"WorkerTimeline\":{\"shortMessages\":{\"calculation\":{\"workerRequested\":\"Lähetit palkkapyynnön työnantajalle {{name}}\",\"workerRequestDeclined\":\"{{name}} hylkäsi lähettämäsi palkkalaskelman\",\"workerRequestAccepted\":\"{{name}} hyväksyi lähettämäsi palkkalaskelman\",\"draft\":\"Loit palkkalaskelman luonnoksen\",\"paymentWorkerCopy\":\"{{name}} maksoi sinulle palkkaa\",\"default\":\"TODO: calculation status {{status}}\"},\"personAccount\":\"Loit tunnuksen Palkkaus.fi-palveluun\",\"employmentDefault\":\"{{name}} lisäsi sinut työntekijäksi\",\"taxcard\":{\"shared\":\"Jaoit verokortin\",\"sharedApproved\":\"{{name}} hyväksyi jakamasi verokortin\",\"sharedRejected\":\"{{name}} hylkäsi jakamasi verokortin\",\"sharedWaiting\":\"{{name}} katsoi jakamasi verokortin (odottaa hyväksyntää)\",\"approved\":\"{{name}} lisäsi uuden verokortin\",\"verifiedVero\":\"Työnantajalle {{name}} haettiin verokortti verottajalta\",\"default\":\"Verokortti: {{status}}\"},\"workerInvitation\":\"Palkanmaksu odottaa verokorttiasi.\",\"timelineType\":\"Tietue: {{type}}\"}},\"HolidaysLogic\":{\"draft\":\"Luonnos\",\"paid\":\"Maksettu\",\"bonus\":\"Lomaraha\",\"salaryPeriod\":\"Palkkakausi\",\"startSaldo\":{\"displayName\":\"Käytettävissä olevat\",\"description\":\"Lomanmääräytymisvuodella kertyneet lomat\"},\"total\":{\"displayName\":\"Yhteensä\",\"description\":\"Käytetyt/maksetut lomat\"},\"endSaldo\":{\"displayName\":\"Maksettavaa tai siirrettävää\",\"description\":\"Seuraavalle lomavuodelle tai maksettavaa\"},\"bonusStartSaldo\":{\"displayName\":\"Käytettävissä olevat\",\"description\":\"Lomanmääräytymisvuodella kertyneet lomat\"},\"bonusTotal\":{\"displayName\":\"Yhteensä\",\"description\":\"Käytetyt/maksetut lomarahat\"},\"bonusEndSaldo\":{\"displayName\":\"Maksettavaa\",\"description\":\"Maksettavaa lomarahaa\"},\"holidayYear\":{\"day\":\"pv\",\"accrualEndSaldo\":\"Lomapäivien kertymä\",\"plannedSummerLeaves\":\"Kesälomat\",\"plannedWinterLeaves\":\"Talvilomat\",\"paidHolidays\":\"Lomapalkat ja -rahat\"}},\"IncomeTypesLogic\":{\"incomeTypeMetaData\":{\"desription\":\"Tätä riviä ei ilmoiteta tulorekisteriin. Tällaisia rivejä ovat esimerkiksi palkan yhteydessä.\",\"taxAndSidecostsDescr\":\"Rivin summasta ai vähennetä ennakonpidätystä eikä työnantajan sosiaalivakuutusmaksuja.\"}},\"WorkerMappers\":{\"preview\":\"Esikatselu\",\"defaultMaterial\":\"Vakioaineisto\"},\"CalcWorktime\":{\"salaryPeriod\":\"Palkkakausi\",\"startAndEndDates\":\"Alku- ja loppupäivät\"},\"Usecases\":{\"travel\":{\"shortText\":\"Matkalasku\",\"description\":\"Matkalasku km-korvauksineen ja päivärahoineen niin, että tiedot ilmoitetaan automaattisesti tulorekisteriin ja kirjanpitoon.\",\"legend\":\"Matkalaskun tiedot\",\"startDate\":\"Matkan alku\",\"endDate\":\"Matkan loppu\",\"status\":\"Tila\",\"rows\":\"Matkalaskun rivit\",\"addRow\":\"Liää matkalaskun rivi\"},\"history\":{\"shortText\":\"Palkkahistoria\",\"title\":\"Muualla maksettu palkka\",\"introText\":\"Tällä lomakkeella lisätä tai muokata muissa palkanmaksuohjelmissa laskettu ja maksettuja palkkoja, jotka on jo ilmoitettu tulorekisteriin.\",\"description\":\"Muussa palkanmaksuohjelmissa laskettu ja maksettu palkka, joka on jo ilmoitettu tulorekisteriin.\",\"legend\":\"Palkka-aineiston tiedot\",\"status\":\"Tila\",\"rows\":\"Palkkarivit\",\"tableLegend\":\"Kumulatiivisen palkkalaskelman rivit\",\"tableDescription\":{\"html\":\"Alla näet kumulatiivisen palkkalaskelman rivit <strong>Vuoden alusta</strong>. Tähdellä* merkityt ovat näkyvissä myös edelliselle vuodelle.\"},\"totalGrossSalary\":\"Bruttopalkka ilman luontoisetuja\",\"benefits\":\"Luontoisedut\",\"holidayCompensation\":\"Lomakorvaus\",\"holidayBonus\":\"Lomaraha\",\"holidaySalary\":\"Loma-ajan palkka\",\"totalTaxable\":\"Ennakonpid. alainen ansio\",\"tax\":\"Ennakonpidätys\",\"pension\":\"Työeläkemaksu\",\"unemploymentInsurance\":\"Työttömyysvakuutusmaksu\",\"deductions\":\"Kaikki vähennykset palkasta\",\"totalExpenses\":\"Verovapaat kustannukset\",\"salaryPayment\":\"Rahana maksettu palkka\"},\"expenses\":{\"title\":\"Kulukorvaus\",\"shortText\":\"Kulukorvaukset\",\"description\":\"Maksa kulukorvaus km-korvauksineen ja päivärahoineen niin, että tiedot ilmoitetaan automaattisesti tulorekisteriin ja kirjanpitoon.\",\"legend\":\"Kuluaineiston tiedot\",\"startDate\":\"Periodin alku\",\"endDate\":\"Periodin loppu\",\"status\":\"Tila\",\"rows\":\"Kilukorvauksen rivit\",\"addRow\":\"Liää Kilukorvauksen rivi\"},\"calcRow\":{\"shortText\":\"Pikalaskuri\",\"description\":\"Nopea rivipohjainen laskuri - kun tiedät mitä olet tekemässä.\",\"legend\":\"Palkka-aineiston tiedot\",\"rows\":\"Palkkarivit\"},\"default\":{\"shortText\":\"Ohjaava laskuri\",\"description\":\"Perinteinen peruslaskuri, joka ohjaa läpi palkkalaskelman luomisen 4 helpolla askeleella.\"}},\"yearlyTaxfreeYears\":{\"milage\":{\"car\":\"Auto\",\"carLimitedBenefit\":\"Auto, käyttöetu\",\"custom\":\"Muu korvaus\",\"carAdditions\":{\"trailer\":\"Perävaunu\",\"caravan\":\"Asuntovaunu\",\"canteen\":\"Taukotupa\",\"largeMachinery\":\"Suuret koneet\",\"docInTheCar\":\"Koira autossa\",\"contstructionSite\":\"Metsäautotie tms. suljettu työmaa\"},\"other\":{\"motorboatUpTo50Hp\":\"Moottorivene, enintään 50 hv\",\"motorboatOver50Hp\":\"Moottorivene, yli 50 hv\",\"snowMobile\":\"Moottorikelkka\",\"quadbike\":\"Mönkijä\",\"motorcycle\":\"Moottoripyörä\",\"moped\":\"Mopo\",\"otherTransport\":\"Muu kulkuneuvo\"}},\"countries\":{\"Afghanistan\":\"Afganistan\",\"Albania\":\"Albania\",\"Algeria\":\"Algeria\",\"Andorra\":\"Andorra\",\"Angola\":\"Angola\",\"AntiquaAndBarbuda\":\"Antigua ja Barbuda\",\"Argentina\":\"Argentiina\",\"Armenia\":\"Armenia\",\"Aruba\":\"Aruba\",\"Australia\":\"Australia\",\"Austria\":\"Itävalta\",\"Azerbaidzhan\":\"Azerbaidžan\",\"Azores\":\"Azorit\",\"Bahamas\":\"Bahama\",\"Bahrain\":\"Bahrain\",\"Bangladesh\":\"Bangladesh\",\"Barbados\":\"Barbados\",\"Belarus\":\"Valko-Venäjä\",\"Belgium\":\"Belgia\",\"Belize\":\"Belize\",\"Benin\":\"Benin\",\"Bermuda\":\"Bermuda\",\"Bhutan\":\"Bhutan\",\"Bolivia\":\"Bolivia\",\"BosniaAndHercegovina\":\"Bosnia ja Hertsegovina\",\"Botswana\":\"Botswana\",\"Brazil\":\"Brasilia\",\"Brunei\":\"Brunei\",\"Bulgaria\":\"Bulgaria\",\"BurkinaFaso\":\"Burkina Faso\",\"Burundi\":\"Burundi\",\"Cambodia\":\"Kambodža\",\"Cameroon\":\"Kamerun\",\"Canada\":\"Kanada\",\"CanaryIslands\":\"Kanarian saaret\",\"CapeVerde\":\"Kap Verde\",\"CentralAfricanRepublic\":\"Keski-Afrikan tasavalta\",\"Chad\":\"Tšad\",\"Chile\":\"Chile\",\"China\":\"Kiina\",\"HongKong\":\"Kiina: Hongkong\",\"Colombia\":\"Kolumbia\",\"Comoros\":\"Komorit\",\"CongoBrazzaville\":\"Kongo (Kongo-Brazzaville)\",\"CongoKinshasa\":\"Kongon demokraattinen tasavalta (Kongo-Kinshasa)\",\"CookIslands\":\"Cookinsaaret\",\"CostaRica\":\"Costa Rica\",\"Croatia\":\"Kroatia\",\"Cuba\":\"Kuuba\",\"Curaçao\":\"Curaçao\",\"Cyprus\":\"Kypros\",\"CzechRepublic\":\"Tšekki\",\"Denmark\":\"Tanska\",\"Djibouti\":\"Djibouti\",\"Dominica\":\"Dominica\",\"DominicanRepublic\":\"Dominikaaninen tasavalta\",\"EastTimor\":\"Itä-Timor\",\"Ecuador\":\"Ecuador\",\"Egypt\":\"Egypti\",\"ElSalvador\":\"El Salvador\",\"Eritrea\":\"Eritrea\",\"Estonia\":\"Viro\",\"Eswatini\":\"Eswatini\",\"Ethiopia\":\"Etiopia\",\"FaroeIslands\":\"Färsaaret\",\"Fiji\":\"Fidži\",\"France\":\"Ranska\",\"Gabon\":\"Gabom\",\"Gambia\":\"Gambia\",\"Georgia\":\"Georgia\",\"Germany\":\"Saksa\",\"Ghana\":\"Ghana\",\"Greece\":\"Kreikka\",\"Greenland\":\"Grönlanti\",\"Grenada\":\"Grenada\",\"Guadeloupe\":\"Guadeloupe\",\"Guatemala\":\"Guatemala\",\"Guinea\":\"Guinea\",\"GuineaBissau\":\"Guinea-Bissau\",\"Guyana\":\"Guyana\",\"Haiti\":\"Haiti\",\"Honduras\":\"Honduras\",\"Hungary\":\"Unkari\",\"Iceland\":\"Islanti\",\"India\":\"Intia\",\"Indonesia\":\"Indonesia\",\"Iran\":\"Iran\",\"Iraq\":\"Irak\",\"Ireland\":\"Irlanti\",\"Israel\":\"Israel\",\"Italy\":\"Italia\",\"IvoryCoast\":\"Norsunluurannikko\",\"Jamaica\":\"Jamaika\",\"Japan\":\"Japani\",\"Jordania\":\"Jordania\",\"Kazakhstan\":\"Kazakstan\",\"Kenya\":\"Kenia\",\"NorthKorea\":\"Korean demokraattinen kansantasavalta(Pohjois-Korea)\",\"SouthKorea\":\"Korean tasavalta (Etelä-Korea)\",\"Kosovo\":\"Kosovo\",\"Kuwait\":\"Kuwait\",\"Kyrgystan\":\"Kirgisia\",\"Laos\":\"Laos\",\"Latvia\":\"Latvia\",\"Lebanon\":\"Libanon\",\"Lesotho\":\"Lesotho\",\"Liberia\":\"Liberia\",\"Libya\":\"Libya\",\"Liechtenstein\":\"Liechtenstein\",\"Lithuania\":\"Liettua\",\"Luxembourg\":\"Luxemburg\",\"Madagascar\":\"Madagaskar\",\"Madeira\":\"Madeira\",\"Malawi\":\"Malawi\",\"Malaysia\":\"Malesia\",\"Maldives\":\"Malediivit\",\"Mali\":\"Mali\",\"Malta\":\"Malta\",\"MarshallIslands\":\"Marshallinsaaret\",\"Martinique\":\"Martinique\",\"Mauritania\":\"Mauritania\",\"Mauritius\":\"Mauritius\",\"Mexico\":\"Meksiko\",\"Micronesia\":\"Mikronesia\",\"Moldova\":\"Moldova\",\"Monaco\":\"Monaco\",\"Mongolia\":\"Mongolia\",\"Montenegro\":\"Montenegro\",\"Morocco\":\"Marokko\",\"Mozambique\":\"Mosambik\",\"Myanmar\":\"Myanmar (Burma)\",\"Namibia\":\"Namibia\",\"Nepal\":\"Nepal\",\"Netherlands\":\"Alankomaat\",\"NewZealand\":\"Uusi-Seelanti\",\"Nicaragua\":\"Nicaragua\",\"Niger\":\"Niger\",\"Nigeria\":\"Nigeria\",\"NorthMacedonia\":\"Pohjois-Makedonia\",\"Norway\":\"Norja\",\"Oman\":\"Oman\",\"Pakistan\":\"Pakistan\",\"Palau\":\"Palau\",\"Palestinianterritory\":\"Palestiinalaisalue\",\"Panama\":\"Panama\",\"PapuaNewGuinea\":\"Papua-Uusi-Guinea\",\"Paraguay\":\"Paraguay\",\"Peru\":\"Peru\",\"Philippines\":\"Filippiinit\",\"Poland\":\"Puola\",\"Portugal\":\"Portugal\",\"PuertoRico\":\"Puerto Rico\",\"Qatar\":\"Qatar\",\"Romania\":\"Romania\",\"RussianFederation\":\"Venäjä\",\"Moscow\":\"Venäjä: Moskova\",\"StPetersburg\":\"Venäjä: Pietari\",\"Rwanda\":\"Ruanda\",\"SaintKittsAndNevis\":\"Saint Kitts ja Nevis\",\"SaintLucia\":\"Saint Lucia\",\"SaintVincentAndTheGrenadines\":\"Saint Vincent ja Grenadiinit\",\"Samoa\":\"Samoa\",\"SanMarino\":\"San Marino\",\"SaoTomeAndPrincipe\":\"São Tomé ja Príncipe\",\"SaudiArabia\":\"Saudi-Arabia\",\"Senegal\":\"Senegal\",\"Serbia\":\"Serbia\",\"Seychelles\":\"Seychellit\",\"SierraLeone\":\"Sierra Leone\",\"Singapore\":\"Singapore\",\"Slovakia\":\"Slovakia\",\"Slovenia\":\"Slovenia\",\"SolomonIslands\":\"Salomonsaaret\",\"Somalia\":\"Somalia\",\"SouthAfrica\":\"Etelä-Afrikka\",\"SouthSudan\":\"Etelä-Sudan\",\"Spain\":\"Espanja\",\"SriLanka\":\"Sri Lanka\",\"Sudan\":\"Sudan\",\"Suriname\":\"Suriname\",\"Sweden\":\"Ruotsi\",\"Switzerland\":\"Sveitsi\",\"Syria\":\"Syria\",\"Tadzhikistan\":\"Tadžikistan\",\"Taiwan\":\"Taiwan\",\"Tanzania\":\"Tansania\",\"Thailand\":\"Thaimaa\",\"Togo\":\"Togo\",\"Tonga\":\"Tonga\",\"TrinidadAndTobago\":\"Trinidad ja Tobago\",\"Tunisia\":\"Tunisia\",\"Turkey\":\"Turkki\",\"Istanbul\":\"Turkki: Istanbul\",\"Turkmenistan\":\"Turkmenistan\",\"Uganda\":\"Uganda\",\"Ukraine\":\"Ukraina\",\"UnitedArabEmirates\":\"Arabiemiirikunnat\",\"UnitedKingdom\":\"Britannia\",\"LondonAndEdinburgh\":\"Britannia: Lontoo ja Edinburgh\",\"UnitedStates\":\"Yhdysvallat\",\"NewYorkLosAngelesWashington\":\"Yhdysvallat: New York, Los Angeles, Washington\",\"Uruguay\":\"Uruguay\",\"Uzbekistan\":\"Uzbekistan\",\"Vanuatu\":\"Vanuatu\",\"Venezuela\":\"Venezuela\",\"Vietnam\":\"Vietnam\",\"VirginIslands\":\"Neitsytsaaret (USA)\",\"Yemen\":\"Jemen\",\"Zimbabwe\":\"Zimbabwe\",\"Zambia\":\"Sambia\",\"Other\":\"Maa, jota ei ole erikseen mainittu\"}}},\"DOCS\":{\"authorization\":{\"common\":{\"headerTitle\":\"Palkkaus.fi-palvelun valtakirja\",\"title\":\"Valtakirja\",\"authorizer\":\"Valtuuttaja\",\"name\":\"Nimi\",\"personalId\":\"Henkilötunnus\",\"telephone\":\"Puhelinnumero\",\"email\":\"Sähköpostiosoite\",\"proxy\":\"Valtuutettu\",\"payrollFinland\":{\"officialName\":\"Suomen Palkanlaskenta Oy\",\"serviceName\":\"Palkkaus.fi\",\"address\":\"Kirkkokatu 1\",\"zip\":\"00170\",\"city\":\"Helsinki\",\"companyIdLabel\":\"Y-tunnus\",\"customerServiceLabel\":\"Asiakaspalvelu\",\"customerServiceEmail\":\"aspa@palkkaus.fi\"},\"companyId\":\"Y-tunnus\",\"contanctInfoSeeBelow\":\"Yhteystiedot valtakirjan alareunassa\",\"body\":{\"introPersonal\":\"Valtuutettu voi hoitaa puolestani palkkaamiseen, palkanmaksuun ja mahdollisesti saamiini palkkoihin liittyviä velvoitteita ja maksuja suhteessa viranomaisiin ja muihin tahoihin kuten esimerkiksi\",\"introCompany\":\"Valtuutettu voi hoitaa valtuuttajan puolesta palkkaamiseen, palkanmaksuun ja palkkoihin liittyviä velvoitteita ja maksuja suhteessa viranomaisiin ja muihin palkkaamiseen liittyviin tahoihin kuten\",\"subjects\":{\"workers\":\"Työntekijät\",\"workerAndEmployer\":\"Työntekijä ja työnantaja\",\"tax\":\"Verohallinto ja tulorekisteri\",\"taxHousehold\":\"Verohallinto ja tulorekisteri (sisältäen myös kotitalousvähennys)\",\"pension\":\"Työeläkeyhtiöt\",\"insurance\":\"Vakuutusyhtiöt\",\"unemployment\":\"Työllisyysrahasto\",\"unemploymentFunds\":\"Työttömyyskassat\",\"banks\":\"Pankit ja maksuvälittäjät (liittyen tarvittaviin tilityksiin ja maksuihin)\",\"union\":\"Työntekijäjärjestöt (työntekijän jäsenmaksu)\"},\"validIndefinitely\":\"Valtuutus on voimassa toistaiseksi alkaen\",\"validIndefinitelyCompany\":\"Allekirjoituksellani vakuutan, että minulla on oikeus antaa tämä valtuutus valtuutetulle. Valtuutus on voimassa toistaiseksi alkaen\",\"validIndefinitelyPrint\":\"Valtuutus on voimassa toistaiseksi.\",\"signedAtPalkkaus\":\"Palkkaus.fi-palvelussa\",\"signaturePrint\":\"Allekirjoitus (aika, paikka, nimenselvennys)\"}},\"palkkamylly\":{\"headerTitle\":\"Palkkamyllyn valtakirja\",\"signedAtPalkkamylly\":\"Palkkamylly.fi-sivustolla\"}}},\"EMAIL\":{\"MailAfterPaymentHandledEmployer\":{\"body\":\"Hei!\\r\\n\\r\\nTyöntekijäsi on nyt saanut palkkansa, palkkalaskelma on täällä:\\r\\n\\r\\n[{0}]({0})\\r\\n\\r\\nJos koet, että Palkkaus.fi on hyvä juttu, kerro meistä ystävillesi.\\r\\n\\r\\nVoit mennä [Facebook-sivuillemme tästä](https://www.facebook.com/Palkkaus). Twitterissä [olemme täällä](https://twitter.com/Palkkaus).\\r\\n\\r\\n[www.palkkaus.fi](https://www.palkkaus.fi)\",\"subject\":\"Maksoit palkan työntekijällesi\"},\"MailAfterPaymentHandledWorker\":{\"body\":\"Hei!\\r\\n\\r\\nSinulle on juuri maksettu palkkaa!\\r\\n\\r\\nTyönantajasi {0} {1} on maksanut palkan ja voit hakea sähköisen palkkatositteen Palkkaus.fi-palvelusta täältä:\\r\\n\\r\\n[{2}]({2})\\r\\n\\r\\nNettopalkka on pankkitililläsi palkkatositteessa ilmoitettuna palkkapäivänä. \\r\\nJos et pääse itse hakemaan palkkatositetta palvelusta, työnantajasi voi toimittaa sen sinulle.\\r\\n\\r\\n[www.palkkaus.fi](https://www.palkkaus.fi)\",\"subject\":\"Sinulle on juuri maksettu palkkaa!\"},\"MailAfterPaymentHandledWorkerNew\":{\"body\":\"Hei!\\r\\n\\r\\nSinulle on juuri maksettu palkkaa!\\r\\n\\r\\nTyönantajasi {0} {1} on maksanut palkan. Voit hakea palkkatositteen sähköisesti Palkkaus.fi-palvelusta täältä. Palvelun käyttäminen tietoturvallisesti edellyttää kirjautumista ja tunnistautumista pankkitunnuksilla:\\r\\n\\r\\n[{2}]({2})\\r\\n\\r\\nNettopalkka on pankkitililläsi palkkatositteessa ilmoitettuna palkkapäivänä.\\r\\nJos et pääse itse hakemaan palkkatositetta palvelusta, työnantajasi voi toimittaa sen sinulle.\\r\\n\\r\\n[www.palkkaus.fi](https://www.palkkaus.fi)\",\"subject\":\"Sinulle on juuri maksettu palkkaa!\"},\"SalaryRequestSentWorkerPalkkamylly\":{\"body\":\"{0} on lähettänyt sinulle palkkalaskelman Palkkamylly-palveluun.\\r\\n\\r\\n{5}\\r\\n\\r\\nPalkkamyllyssä voit hyväksyä ja kuitata maksetuksi työntekijän toimittaman palkkalaskelman työnantajana. Palkkamyllyn kautta hoituu työnantajasuoritukset kätevästi: nettopalkka työntekijälle, ennakonpidätys Verohallinnolle, työeläkemaksut työeläkeyhtiölle ja työttömyysvakuutusmaksut Työllisyysrahastolle. Tieto maksetuista palkoista siirtyy Tulorekisteriin Palkkamyllyn kautta automaattisesti, kun palkkalaskelma on kuitattu maksetuksi. Maksut maksetaan asiakkaan oman verkkopankin kautta.\\r\\n\\r\\nKirjaudu Palkkamylly-palveluun tästä linkistä:\\r\\n\\r\\n[{4}]({4})\\r\\n\\r\\nJos et ole käyttänyt Palkkamyllyä työnantajana, valitse ensin Luo Tunnus.  \\r\\nKun kirjaudut Palkkamyllyyn, löydät palkkalaskelman etusivulta kohdasta \\\"Saapuneet palkkalaskelmat\\\". \\r\\n\\r\\nLue tästä linkistä, miten palkanmaksu Palkkamyllyssä toimii:\\r\\n\\r\\n[{6}]({6})\",\"subject\":\"Työntekijäsi on lähettänyt palkkalaskelman\"},\"SalaryRequestSentWorkerCompany\":{\"body\":\"{0} on lähettänyt sinulle palkkalaskelman Palkkaus.fi-palvelusta.\\r\\n\\r\\n- Palkkalaskelmassa bruttopalkka on {1} euroa.\\r\\n- Kokonaiskustannus sinulle työnantajana on {2} euroa.\\r\\n- Bruttopalkasta maksetaan verot, vähennykset ja korvaukset, jolloin työntekijälle maksetaan {3} euroa.\\r\\n\\r\\n{5}\\r\\n\\r\\nVoit hyväksyä palkkalaskelman työnantajana ja maksaa sen suoraan palvelussa.\\r\\n\\r\\nKirjaudu Palkkaus.fi-palveluun tästä linkistä:\\r\\n\\r\\n[{4}]({4})\\r\\n\\r\\nKun kirjaudut Palkkaus.fi-tilillesi, löydät palkkalaskelman palvelusta valitsemalla\\r\\ntyöpöydältä Palkkalaskelmat -> Vastaanotetut.  \\r\\n\\r\\nLue täältä ohje palkan maksamiseen Palkkaus.fi:ssä:  \\r\\n\\r\\n[Palkkalaskelman vastaanottaminen yrityksenä](https://help.palkkaus.fi/hc/fi/articles/360008942318)\",\"subject\":\"Työntekijäsi on lähettänyt palkkalaskelman\"},\"MailMonthlyReports\":{\"body\":\"<p></p>\\r\\n<p><b><span>Kirjanpitoraportit palkoista {0} - Palkkaus.fi: {3}</span></b></p>\\r\\n<p><span>Hyvä asiakkaamme,</span></p>\\r\\n<p>Liitteenä raportti {1}n palkkojen osalta toimitettavaksi kirjanpitoosi. Raportilla on Palkkaus.fi:n kautta maksettujen palkkojen kirjanpidon erittelyt.</p>\\r\\n<p>Kuukausiraportit on ladattu myös palvelun Raportit-osioon.</p>\\r\\n<p>Lähetämme raportit yhteysosoitteeksi merkittyyn sähköpostiin sekä kirjanpitäjällesi, mikäli yhteystiedot on laitettu palveluumme.</p>\\r\\n<p>\\r\\n    <b>Lähetämme raportin valitun oletustilikartan mukaisesti Excel-muodossa. Palkkaus.fi-oletusraportti pohjaa liikekirjuriin. Voit halutessasi vaihtaa oletustilikartan ohjelman asetuksissa, ja käytössäsi on useiden eri kirjanpito-ohjelmien tilikartat.</b>\\r\\n</p>\\r\\n<p>Ohjeet löytyvät tukisivustolta: <a href=\\\"https://help.palkkaus.fi/hc/fi/articles/4419457954961\\\"\\r\\n        target=\\\"_blank\\\">Oletustilikartan vaihtaminen yrityksen asetuksissa</a></p>\\r\\n<p>Muut raportit, kuten palkanmaksujen erittelyt, löydät myös Raportit-osiosta.</p>\\r\\n<p>&nbsp;</p>\\r\\n<p>\\r\\n    <b><span>Tulorekisteri</span></b>\\r\\n</p>\\r\\n<p>Palkkaus.fi tekee automaattisesti palkkatietoilmoituksen tulorekisteriin\\r\\n    palvelussa maksetuista palkoista. Teemme myös erillisilmoituksen kuukausittain automaattisesti.</p>\\r\\n<p>Jos\\r\\n    yrityksesi on työnantajarekisterissä, teemme myös Ei palkanmaksua -ilmoituksen niiltä kuukausilta, jolloin et ole\\r\\n    maksanut palkkaa palvelussamme. Voit halutessasi muuttaa erillisilmoitusten lähettämisen asetuksia\\r\\n    palvelussa.</p>\\r\\n<p>Huomaathan, että tulorekisteri-ilmoitus tehdään sen päivän perusteella, jolloin nettopalkka maksetaan työntekijälle (palkkapäivä). Kirjanpitoraportit puolestaan muodostuvat sen perusteella, milloin palkan kokonaiskustannus on maksettu palvelussa (maksupäivä).</p>\\r\\n<p>&nbsp;</p>\\r\\n<p>\\r\\n    <b><span>Tilitoimistosi kannattaa ottaa Palkkaus.fi käyttöön</span></b>\\r\\n</p>\\r\\n<p>Myös tilitoimisto voi käyttää Palkkaus.fi:tä ja hallinnoida omien asiakkaidensa palkkatietoja. Tilitoimisto näkee asiakkaan maksamat palkat ohjelmasta, voi laskea palkkoja itse ja saa haettua tarvitsemansa raportit itselleen sopivaan aikaan.</p>\\r\\n<p>Lue lisää <a href=\\\"https://www.palkkaus.fi/tilitoimisto\\\" target=\\\"_blank\\\"> tilitoimiston\\r\\n        palvelusta</a></p>\\r\\n<p></p>\\r\\n<p><span>Ystävällisin terveisin</span></p>\\r\\n<p>\\r\\n    <span>Palkkaus.fi<span> -tiimi</span></span>\\r\\n</p>\\r\\n<p></p>\\r\\n<div>\\r\\n    <font face=\\\"Times New Roman,serif\\\" size=\\\"3\\\"> <span style=\\\"font-size:12pt\\\">\\r\\n            <font face=\\\"Calibri,sans-serif\\\" size=\\\"2\\\" color=\\\"#1F497D\\\"><span style=\\\"font-size:11pt\\\">--</span>\\r\\n            </font>\\r\\n        </span></font>\\r\\n</div>\\r\\n<div>\\r\\n    <font face=\\\"Times New Roman,serif\\\" size=\\\"3\\\"><span style=\\\"font-size:12pt\\\">\\r\\n            <font face=\\\"Calibri,sans-serif\\\" size=\\\"2\\\" color=\\\"#1F497D\\\"><span style=\\\"font-size:11pt\\\">Palkkaus.fi /\\r\\n                    Asiakaspalvelu</span></font>\\r\\n        </span></font>\\r\\n</div>\\r\\n<div>\\r\\n    <font face=\\\"Times New Roman,serif\\\" size=\\\"3\\\"><span style=\\\"font-size:12pt\\\"><a href=\\\"mailto:aspa@palkkaus.fi\\\"\\r\\n                target=\\\"_blank\\\">\\r\\n                <font face=\\\"Calibri,sans-serif\\\" size=\\\"2\\\"><span style=\\\"font-size:11pt\\\">aspa@palkkaus.fi</span>\\r\\n                </font>\\r\\n            </a></span></font>\\r\\n</div>\\r\\n<div>\\r\\n    <font face=\\\"Times New Roman,serif\\\" size=\\\"3\\\"> <span style=\\\"font-size:12pt\\\"> <a href=\\\"http://www.palkkaus.fi/\\\"\\r\\n                target=\\\"_blank\\\">\\r\\n                <font face=\\\"Calibri,sans-serif\\\" size=\\\"2\\\"><span style=\\\"font-size:11pt\\\">www.palkkaus.fi</span>\\r\\n                </font>\\r\\n            </a>\\r\\n            <font face=\\\"Calibri,sans-serif\\\" size=\\\"2\\\" color=\\\"#1F497D\\\"> <span style=\\\"font-size:11pt\\\"> &nbsp;–\\r\\n                    Uuden sukupolven palkanmaksuohjelma </span> </font>\\r\\n        </span> </font>\\r\\n</div>\",\"subject\":\"Kirjanpitoraportit palkoista {0} - Palkkaus.fi: {1}\"},\"SmsVerification\":{\"body\":\"Vahvistuskoodi {0}\",\"subject\":\"Puhelinnumeron todennus\"},\"MessageFromEmployee\":{\"body\":\"Viesti työntekijältä\"},\"SharedCalcReminderPalkkamylly\":{\"body\":\"Hei!\\r\\n\\r\\nSinulla on hyväksymättömiä tai maksamattomia palkkalaskelmia Palkkamyllyssä.\\r\\n\\r\\nKirjaudu käyttäjätilillesi ja hoida palkkalaskelmat.\\r\\n\\r\\nTerveisin,\\r\\n\\r\\nPalkkamylly-palkanmaksupalvelu\\r\\n\",\"subject\":\"Palkkamyllyssä on palkkalaskelmia käsittelemättä\"},\"EprReminderPalkkamylly\":{\"body\":\"Hei!\\r\\n\\r\\nMaksoit palkkaa Palkkamylly-palvelulla {0}. Palvelu tekee tulorekisteriin palkanmaksuun liittyvät tulorekisteri-ilmoitukset ylihuomenna.\\r\\n\\r\\nJos et vielä tehnyt Palkkamyllystä saamiasi maksuja verkkopankissasi, kirjaudu välittömästi Palkkamyllyyn ja tee palkanmaksuun liittyvät maksut heti.\\r\\n\\r\\nJos olet jo maksanut palkkaan liittyvät laskut, niin sinun ei tarvitse enää tehdä mitään.\\r\\n\\r\\nTerveisin,\\r\\n\\r\\nPalkkamylly-palkanmaksupalvelu\\r\\n\",\"subject\":\"Viranomaisilmoitukset palkoista lähetetään kohta!\"}},\"ENUM\":{\"ApiItemType\":{\"undefined\":{\"label\":\"Valitse...\"},\"calculation\":{\"label\":\"Laskelma\"},\"calculationPaid\":{\"label\":\"Maksettu laskelma\"},\"payrollDetails\":{\"label\":\"Palkkalista\"},\"invoice\":{\"label\":\"Lasku / palkanmaksu\"},\"earningsPaymentReport\":{\"label\":\"Palkkatietoilmoitus tulorekisteriin\"},\"payerSummaryReport\":{\"label\":\"Kuukausi-ilmoitus tulorekisteriin\"},\"employment\":{\"label\":\"Työsuhde\"},\"messageThread\":{\"label\":\"Viestiketju\"},\"calendarEvent\":{\"label\":\"Kalenteritapahtuma\"},\"listItems\":{\"label\":\"Lista (OData)\"}},\"CalendarActionType\":{\"undefined\":{\"label\":\"Valitse...\"},\"display\":{\"label\":\"Notifikaatio\"},\"email\":{\"label\":\"Sähköposti\"},\"audio\":{\"label\":\"Ei käytössä: Ääniviesti\"},\"createItem\":{\"label\":\"Tietueen luonti\"},\"script\":{\"label\":\"Automaattinen skripti\"},\"paymentDate\":{\"label\":\"Palkkapäivä\"}},\"Weekday\":{\"day1\":{\"label\":\"Maanantai\",\"short\":\"Ma\"},\"day2\":{\"label\":\"Tiistai\",\"short\":\"Ti\"},\"day3\":{\"label\":\"Keskiviikko\",\"short\":\"Ke\"},\"day4\":{\"label\":\"Torstai\",\"short\":\"To\"},\"day5\":{\"label\":\"Perjantai\",\"short\":\"Pe\"},\"day6\":{\"label\":\"Lauantai\",\"short\":\"La\"},\"day7\":{\"label\":\"Sunnuntai\",\"short\":\"Su\"}},\"CalendarMonth\":{\"month1\":{\"label\":\"Tammikuu\",\"short\":\"tammi\"},\"month2\":{\"label\":\"Helmikuu\",\"short\":\"helmi\"},\"month3\":{\"label\":\"Maaliskuu\",\"short\":\"maalis\"},\"month4\":{\"label\":\"Huhtikuu\",\"short\":\"huhti\"},\"month5\":{\"label\":\"Toukokuu\",\"short\":\"touko\"},\"month6\":{\"label\":\"Kesäkuu\",\"short\":\"kesä\"},\"month7\":{\"label\":\"Heinäkuu\",\"short\":\"heinä\"},\"month8\":{\"label\":\"Elokuu\",\"short\":\"elo\"},\"month9\":{\"label\":\"Syyskuu\",\"short\":\"syys\"},\"month10\":{\"label\":\"Lokakuu\",\"short\":\"loka\"},\"month11\":{\"label\":\"Marraskuu\",\"short\":\"marras\"},\"month12\":{\"label\":\"Joulukuu\",\"short\":\"joulu\"}},\"AbcSection\":{\"association\":{\"label\":\"Yhdistyksille\"},\"blog\":{\"label\":\"Blogi\"},\"businessOwner\":{\"label\":\"Yrittäjä\"},\"documentTemplates\":{\"label\":\"Dokumenttipohjat ja lomakkeet\"},\"doNotShow\":{\"label\":\"Ei näytetä käyttäjälle (vain Admin)\"},\"employee\":{\"label\":\"Työntekijä\"},\"employment\":{\"label\":\"Työsuhde ja työsopimus\"},\"entrepreneur\":{\"label\":\"Yritys tai yhteisö\"},\"examples\":{\"label\":\"Esimerkkejä palkkaustilanteista\"},\"householdEmployer\":{\"label\":\"Kotitalous\"},\"instructionsAndExamples\":{\"label\":\"Käyttöohjeet\"},\"insurance\":{\"label\":\"Vakuutukset ja eläke\"},\"palkkausGeneral\":{\"label\":\"Tietoa Palkkaus.fi -palvelusta\"},\"palkkausInstructions\":{\"label\":\"Käyttöohjeita\"},\"personEmployer\":{\"label\":\"Kotitalous työnantajana\"},\"press\":{\"label\":\"Tiedotteet ja materiaali\"},\"productLongDescription\":{\"label\":\"Tuotekuvaus\"},\"salary\":{\"label\":\"Palkanlaskenta ja palkanmaksu\"},\"undefined\":{\"label\":\"Uudet artikkelit / ei määritetty\"},\"worker\":{\"label\":\"Työntekijälle\"}},\"AbsenceCauseCode\":{\"undefined\":{\"label\":\"Ei määritetty\"},\"accruedHoliday\":{\"label\":\"Pekkasvapaa\"},\"annualLeave\":{\"label\":\"Vuosiloma\"},\"childCareLeave\":{\"label\":\"Hoitovapaa\"},\"childIllness\":{\"label\":\"Lapsen sairaus tai pakottava perhesyy\"},\"illness\":{\"label\":\"Sairaus\"},\"industrialAction\":{\"label\":\"Lakko tai työsulku\"},\"interruptionInWorkProvision\":{\"label\":\"Työtarjonnan keskeytyminen\"},\"jobAlternationLeave\":{\"label\":\"Vuorotteluvapaa\"},\"layOff\":{\"label\":\"Lomautus\"},\"leaveOfAbsence\":{\"label\":\"Virkavapaa\"},\"midWeekHoliday\":{\"label\":\"Arkipyhä\"},\"militaryRefresherTraining\":{\"label\":\"Kertausharjoitus\"},\"militaryService\":{\"label\":\"Varusmiespalvelus tai siviilipalvelus\"},\"occupationalAccident\":{\"label\":\"Työtapaturma\"},\"other\":{\"label\":\"Muu syy\"},\"parentalLeave\":{\"label\":\"Äitiys-, isyys- ja vanhempainvapaa\"},\"partTimeAbsenceDueToRehabilitation\":{\"label\":\"Osittainen poissaolo kuntoutuksen vuoksi\"},\"partTimeChildCareLeave\":{\"label\":\"Osittainen hoitovapaa\"},\"partTimeSickLeave\":{\"label\":\"Osa-aikainen sairauspoissaolo\"},\"personalReason\":{\"label\":\"Henkilökohtainen muu syy\"},\"rehabilitation\":{\"label\":\"Kuntoutus\"},\"specialMaternityLeave\":{\"label\":\"Erityisäitiysvapaa\"},\"studyLeave\":{\"label\":\"Opintovapaa\"},\"training\":{\"label\":\"Koulutus\"},\"unpaidLeave\":{\"label\":\"Palkaton loma / vapaa\"}},\"AgeGroupCode\":{\"a\":{\"label\":\"Ikäryhmä A\"},\"b\":{\"label\":\"Ikäryhmä B\"},\"c\":{\"label\":\"Ikäryhmä C\"},\"u\":{\"label\":\"Ikäryhmä U\"}},\"AgeRange\":{\"age_15\":{\"label\":\"-15v\"},\"age16\":{\"label\":\"16v\"},\"age17\":{\"label\":\"17v\"},\"age18_52\":{\"label\":\"18-52v\"},\"age53_62\":{\"label\":\"53-62v\"},\"age63_64\":{\"label\":\"63-64v\"},\"age65_67\":{\"label\":\"65-67v\"},\"age68AndOVer\":{\"label\":\"68v-\"},\"unknown\":{\"label\":\"Ei tiedossa\"}},\"AllowanceCode\":{\"expensesWorkingAbroad\":{\"label\":\"Ulkomaan työskentelyyn liittyvät verovapaat korvaukset\"},\"fullDailyAllowance\":{\"label\":\"Kokopäiväraha\"},\"internationalDailyAllowance\":{\"label\":\"Ulkomaan päiväraha\"},\"mealAllowance\":{\"label\":\"Ateriakorvaus\"},\"partialDailyAllowance\":{\"label\":\"Osapäiväraha\"}},\"AnnualLeavePaymentKind\":{\"draftCalc\":{\"description\":\"Palkkalaskelman luonnos, jossa lomaan liittyviä maksuja\",\"label\":\"Palkkalaskelman luonnos\"},\"endSaldo\":{\"description\":\"Seuraavalle lomavuodelle tai maksettavaa\",\"label\":\"Maksettavaa tai siirrettävää\"},\"info\":{\"description\":\"Lomavuodella ei ole maksuja\",\"label\":\"Ei rivejä\"},\"manualBonus\":{\"description\":\"Lomaraha maksettuna erikseen erillisenä korjauksena\",\"label\":\"Lomaraha\"},\"manualCompensation\":{\"description\":\"Korvattavat lomapäivät ja niiden korvaus manuaalisena korjauksena\",\"label\":\"Lomakorvaus\"},\"manualSalary\":{\"description\":\"Pidetyt lomapäivät ja niiden palkka manuaalisena korjauksena\",\"label\":\"Loma-ajan palkka\"},\"paidCalc\":{\"description\":\"Palkkaus.fi-palvelussa maksettu palkka, jossa lomaan liittyviä maksuja\",\"label\":\"Maksettu palkkalaskelma\"},\"startSaldo\":{\"description\":\"Lomanmääräytymisvuodella kertyneet lomat\",\"label\":\"Käytettävissä olevat\"},\"total\":{\"description\":\"Käytetyt/maksetut lomapäivät, -rahat ja korvaukset\",\"label\":\"Yhteensä\"},\"undefined\":{\"description\":\"Rivin tyyppiä ei ole valittu\",\"label\":\"Valitse...\"}},\"ApiTestErrorType\":{\"default\":{\"label\":\"Oletus\"},\"userFriendly\":{\"label\":\"User Friendly\"}},\"ApiValidationErrorType\":{\"general\":{\"label\":\"Yleisvirhe\"},\"invalid\":{\"label\":\"Virhe\"},\"required\":{\"label\":\"Arvo puuttuu\"},\"warning\":{\"label\":\"Varoitus\"}},\"AuthenticationMethod\":{\"auth0Database\":{\"label\":\"Sähköpostitunnistus\"},\"emailPwdLocal\":{\"label\":\"Tietokanta\"},\"facebook\":{\"label\":\"Facebook -tili\"},\"google\":{\"label\":\"Google / Gmail authentication\"},\"internalLocalhost\":{},\"linkedIn\":{\"label\":\"LinkedIn authentication\"},\"microsoft\":{\"label\":\"Microsoft -tili\"},\"salaxy\":{\"label\":\"Salaxy\"},\"test\":{},\"undefined\":{\"label\":\"Tuntematon\"},\"x509\":{\"label\":\"Sertifikaatti\"},\"webAuthn\":{\"label\":\"Pääsyavain\"},\"googleOAuth\":{\"label\":\"Google\"},\"microsoftOAuth\":{\"label\":\"Microsoft\"}},\"AuthorizationStatus\":{\"accessDenied\":{\"label\":\"Pääsy kielletty\"},\"expiredOauthToklabel\":\"Istunto vanheutunut\",\"invalidOAuthToklabel\":\"Virhe tunnistuksessa\",\"noOauthToklabel\":\"Virhe tunnistuksessa (ei tokenia)\",\"undefined\":{\"label\":\"Ei määritetty\"}},\"AuthorizationType\":{\"companyContract\":{\"label\":\"Työnantajan sopimus\"},\"employerAuthorization\":{\"label\":\"Valtakirja\"},\"manual\":{\"label\":\"Valtakirja toimitettu erikseen\"},\"none\":{\"label\":\"Ei tunnistettu\"},\"temporary\":{\"label\":\"Temp tunnistus\"},\"workerContract\":{\"label\":\"Työntekijän sopimus\"},\"partnerContract\":{\"label\":\"Kumppanin hyväksymä työnantajan sopimus\"}},\"AvatarPictureType\":{\"icon\":{\"label\":\"Kuvake\"},\"uploaded\":{\"label\":\"Kuva omalta koneelta\"}},\"BlobFileType\":{\"authorizationPdf\":{\"label\":\"Valtakirja\"},\"avatar\":{\"label\":\"Ikoni\"},\"calcReport\":{},\"expensesReceipt\":{\"label\":\"Kulukuitti\"},\"monthlyReport\":{\"label\":\"Kuukausiraportti\"},\"raksaloki\":{\"label\":\"Kulukuitti\"},\"taxCard\":{\"label\":\"Verokortti\"},\"template\":{\"label\":\"Kaavain\"},\"unknown\":{},\"yearlyReport\":{\"label\":\"Vuosiraportti\"}},\"BlobRepository\":{\"cdnImages\":{\"label\":\"Content Delivery Network (CDN)\"},\"fileSystemContent\":{\"label\":\"Content in local file system (localhost/dev/test only)\"},\"gitContent\":{\"label\":\"Content in GIT\"},\"payload\":{\"label\":\"Payload of large objects\"},\"reports\":{\"label\":\"Backoffice reports\"},\"systemFiles\":{\"label\":\"System Files\"},\"userFiles\":{\"label\":\"User Files\"},\"versionHistory\":{\"label\":\"Version History\"}},\"BoardKind\":{\"undefined\":{\"description\":\"Oletusarvo\",\"label\":\"Oletusarvo\"}},\"BootstrapStyle\":{\"default\":{\"label\":\"Oletus\"},\"primary\":{\"label\":\"Aktiivinen\"},\"success\":{\"label\":\"Valmis\"},\"info\":{\"label\":\"Tiedoksi\"},\"warning\":{\"label\":\"Varoitus\"},\"danger\":{\"label\":\"Virhe\"}},\"CalculationFlag\":{\"accidentInsurance\":{\"label\":\"Työtapaturma- ja ammattitautivakuutusmaksun alainen\"},\"cfDeduction\":{\"label\":\"Vähennetään maksusta asiakasvaratililla\"},\"cfDeductionAtSalaxy\":{\"label\":\"Vähennetään nettomaksusta asiakasvaratililtä työntekijälle\"},\"cfNoPayment\":{\"label\":\"Ei makseta asiakasvaratilin kautta\"},\"cfPayment\":{\"label\":\"Maksetaan asiakasvaratilin kautta\"},\"exclude\":{\"label\":\"Ei käytetä laskelmalla\"},\"healthInsurance\":{\"label\":\"Sairausvakuutusmaksun alainen\"},\"noTax\":{\"label\":\"Ei vaikuta ennakonpidätykseen\"},\"pensionInsurance\":{\"label\":\"Työeläkevakuutusmaksun alainen\"},\"tax\":{\"label\":\"Lasketaan ennakonpidätykseen\"},\"taxDeduction\":{\"label\":\"Vähentää ennakonpidätrystä\"},\"unemploymentInsurance\":{\"label\":\"Työttömyysvakuutusmaksun alainen\"}},\"CalculationRowSource\":{\"undefined\":{\"label\":\"Oletusrivi\"},\"disabled\":{\"label\":\"Ei käytössä\"},\"manualRow\":{\"label\":\"Käsin lisätty rivi\"},\"worktimeImport\":{\"label\":\"Työtuntien tuonti\"},\"priceEmployment\":{\"label\":\"Hinta (työsuhteen oletus)\"},\"priceCompany\":{\"label\":\"Hinta (yhtiön oletus)\"},\"copyEmployment\":{\"label\":\"Kopioi työsuhteesta\"},\"copyCompany\":{\"label\":\"Kopioi yhtiön asetuksista\"},\"customRowtype\":{\"label\":\"Räätälöity palkkalaji\"}},\"CalculationRowType\":{\"absencePeriod\":{\"description\":\"Poissaolo\",\"iconText\":\"PO\",\"label\":\"Poissaolo\"},\"accomodationBenefit\":{\"amountLabel\":\"Kuukausia\",\"description\":\"Työnantajan maksaman asunnon verotusarvo.\",\"iconText\":\"as\",\"label\":\"Asuntoetu\",\"priceLabel\":\"Asuntoetu / kk\"},\"advance\":{\"description\":\"Palkasta on saatettu jo maksaa ennakkoa. Tällöin tämä osuus vähennetään maksettavasta nettomaksusta.\",\"iconText\":\"adv\",\"label\":\"Palkkaennakko\",\"priceLabel\":\"Maksettu ennakko\"},\"bicycleBenefit\":{\"description\":\"Polkupyöräetu vähennyksineen\",\"iconText\":\"bic\",\"label\":\"Polkupyöräetu\",\"moreInfo\":\"Polkupyöräetu muodostuu, kun työnantaja antaa polkupyörän työntekijän yksityiskäyttöön. Pyörä voi olla työnantajan omistama tai hankittu leasingsopimuksella. Polkupyöräedusta on kyse myös silloin, jos työnantaja muulla vastaavalla tavalla järjestää työntekijälle mahdollisuuden käyttää polkupyörää vapaa-ajallaan. Polkupyöräedusta 1 200 euroa vuodessa on verovapaata tuloa, ja loput veronalaista luontoisetua.\",\"priceLabel\":\"Polkupyöräedun arvo\"},\"board\":{\"description\":\"Hallintoelimen jäsenyydestä maksettu palkkio\",\"iconText\":\"hal\",\"label\":\"Hallituspalkkio\",\"moreInfo\":\"Luottamustoimipalkkio, joka maksetaan yhteisön hallituksen tai vastaavan hallintoelimen jäsenyyden perusteella. \"},\"carBenefit\":{\"description\":\"Autoetu lisätietoineen ja vähennyksineen\",\"iconText\":\"auto\",\"label\":\"Autoetu\",\"moreInfo\":\"Autoedulla tarkoitetaan verotettavaa etua, jonka työntekijä saa, jos saa käyttää työnantajan omistamaa tai hallinnoimaa (esim. leasing-auto) autoa työajojen lisäksi yksityisajoihin.\\r\\n\\r\\nAutoetu on palkanlisänä tiukasti säännelty. Sen arvo lasketaan verottajan laskentakaavalla ja sekä arvo että laskennan perusteet tulee ilmoittaa tulorekisteriin. Ilmoitus pitää tehdä myös silloin, jos työntekijä maksaa verotusarvosta korvauksen, jolloin verotettavaa tuloa ei synny. Ilmoitus tehdään lähtökohtaisesti palkkakausittain tai vähintään kuukausittain, jos muuta palkkaa ei makseta. Kilometrikohtaisessa laskennassa ilmoituksen saa vaihtoehtoisesti tehdä vain vuoden lopussa.\\r\\n\\r\\nLaskentakaava perustuu kahteen luokkaan: vapaa autoetu ja käyttöetu:\\r\\n\\r\\n- Vapaassa autoedussa työnantaja huolehtii kaikista auton käyttöön liittyvistä kustannuksista, kuten polttonesteistä, vakuutuksista, veroista, huolloista ja korjauksista.\\r\\n- Käyttöedussa auton käyttäjä maksaa yksityisajojensa polttoainekustannukset, sopimuksen mukaan mahd. myös muita kustannuksia.\\r\\n\\r\\nLisäksi laskentakaavaan tarvitaan auton hinta, lisävarusteiden hinta sekä ikäryhmä A, B tai C. Tyypillisesti arvo lasketaan kiinteällä 18 000 kilometrin vuosittaisella yksityisajolla. Jos yksityisajot ovat ilmiselvästi suuremmat, tulisi käyttää kilometreihin perustuvaa menetelmää. \\r\\n\\r\\nAutoedun verotusarvon laskuri löytyy osoitteesta: https://www.vero.fi/autoetulaskuri\\r\\n\\r\\nVaihtoehtoisesti verotusarvon voi laskea kilometripohjaisesti. Tämä on edullisempaa, jos yksityisajon kilometrit ovat vähäiset, mutta erittäin työlästä, koska silloin yksityisajoista tulee pitää ajopäiväkirjaa ja nämä kilometrit pitää raportoida verottajalle. Jos käytetään kilometrikohtaista laskentaa, autoedun voi ilmoittaa vain kerran vuodessa: tyypillisesti vuoden viimeisellä palkkalaskelmalla.\",\"priceLabel\":\"Autoedun verotusarvo\"},\"chainsawReduction\":{\"description\":\"Moottorisahavähennys erikoistapauksena (Ennakkoperintälaki 15 §, Ennakkoperintäasetus 18 §)\",\"label\":\"Valitse...\",\"priceLabel\":\"Määrä\"},\"childCareSubsidy\":{\"description\":\"KELA:n ja kuntien työntekijälle suoraan maksama tuki lastenhoidosta.\",\"iconText\":\"Kela\",\"label\":\"Yksityisen hoidon tuki\",\"moreInfo\":\"KELA:n maksama yksityisen hoidon tuki vaikuttaa sivukuihin, sillä työnantaja maksaa esim. työeläkkeen myös siltä osin. Tämä summa tulee riveinä työnantajan maksaman palkan päälle.\",\"priceLabel\":\"KELA maksaa\"},\"compensation\":{\"description\":\"Työstä, tehtävästä tai palveluksesta maksettu korvaus, joka ei ole palkkaa.\",\"iconText\":\"T\",\"label\":\"Työkorvaus\",\"priceLabel\":\"Työkorvaus\"},\"dailyAllowance\":{\"amountLabel\":\"Päiviä\",\"description\":\"Päiväraha: kokopäiväraha (oletus) sekä muut päivärahat\",\"iconText\":\"pv\",\"label\":\"Päiväraha\",\"moreInfo\":\"Päiväraha on korvaus kohtuullisesta ruokailu- ja muiden elinkustannusten lisäyksestä, jotka palkansaajalle aiheutuu työmatkasta. Kuitenkaan näihin kustannuksiin ei kuulu matkustamisesta (liput, kilometrit) eikä majoittumisesta aiheutuvia kustannuksia: Ne maksetaan tyypillisesti erikseen kuittien perusteella tai kilometrikorvauksina.\\r\\n\\r\\nVerohallinto määrittää päivärahan enimmäismäärät vuosittain. Usein käytetään näitä enimmäismääriä, mutta tämä ei ole mikään yleispätevä sääntö. Verottoman enimmäismäärän yrittävät summat tulee maksaa verotettavana palkkana tai työkorvauksena.\\r\\n\\r\\nPäivärahan saaminen edellyttää työ- tai virkamatkaa, joka suuntautuu yli 15 kilometriä työpaikalta tai kotoa riippuen siitä, kummasta alkaen matka tehdään. Osapäivärahaa maksetaan kotimaassa yli kuusi tuntia ja kokopäivärahaa yli 10 tuntia kestävältä työmatkalta. Päivärahan sijaan on myös mahdollista maksaa ateriakorvausta. Ateriakorvauksen saamisen edellytyksenä on, ettei matka oikeuta päivärahaan tai sitä ei muutoin makseta.\",\"priceLabel\":\"Euroa / päivä\",\"btnText\":\"Päiväraha\"},\"dailyAllowanceHalf\":{\"amountLabel\":\"Päiviä\",\"description\":\"Päiväraha, kun työmatka on yli 6-10 tuntia.\",\"iconText\":\"20\",\"label\":\"Osapäiväraha\",\"moreInfo\":\"Päivärahaa maksetaan 19 euroa, jos työmatka on yli 6 tuntia. Matkakohde pitää olla 15 km päässä joko asunnosta tai varsinaisesta työpaikasta.\",\"priceLabel\":\"Euroa / päivä\"},\"deductibleOfExerciseAndCultureBenefit\":{\"description\":\"Liikunta- ja kulttuuri-edun omavastuu (vähennetään nettopalkasta)\",\"iconText\":\"cul\",\"label\":\"Liikunta- ja kulttuuri -edun omavastuu\",\"priceLabel\":\"Vähennys\",\"moreInfo\":\"Erät, jotka palkan maksaja vähentää nettopalkasta ennen kuin maksaa suorituksen tulonsaajalle.\\r\\n\\r\\nNettopalkasta voidaan vähentää suorituksia lain tai sopimuksen perusteella. Lain perusteella tehtäviä vähennyksiä ovat esimeriksi ulosmittaukset. Työnantaja voi kuitata omia saataviaan työntekijän palkasta. Työntekijän nettopalkasta voidaan vähentää maksuja, joiden perimisestä on työnantajan ja työntekijän kesken sovittu. Nettopalkasta vähennettäviä eriä ovat esim. työttömyyskassan ja ammattiyhdistysten jäsenmaksut sekä pysäköintihallimaksut.\\r\\n\\r\\nJos ulosmittaus on jo ilmoitettu erikseen, ei sitä ilmoiteta enää tällä erittelylajilla yhteissummassa.\\nVähennetään nettopalkasta - ei vaikuta ennakonpidätykseen tai sosiaalimaksuihin.\"},\"employmentTermination\":{\"description\":\"Tulorekisterin tulolajeissa oleva työsuhteen päättämiseen liittyvä korvaus\",\"iconText\":\"off\",\"label\":\"Työsuhteen päättäminen\"},\"eveningAddition\":{\"amountLabel\":\"Tuntia\",\"description\":\"Korvaus iltatyöstä työsopimuksen tai työehtosopimuksen mukaan.\",\"iconText\":\"ilta\",\"label\":\"Iltalisä\",\"priceLabel\":\"Lisä (per tunti)\"},\"expenses\":{\"description\":\"Kulukorvaukset (esim. taksi, tarvikkeet) maksetaan yleensä kuittien perusteella.\",\"iconText\":\"kulu\",\"label\":\"Kulukorvaus\",\"priceLabel\":\"Kulukorvaus\",\"btnText\":\"Kulu\"},\"foreclosure\":{\"description\":\"Työnantajan suoraan ulosottomiehelle maksama ulosottopidätys. Tehdään palkasta maksukiellon perusteella.\",\"iconText\":\"ulos\",\"label\":\"Ulosmittaus (työnantaja)\",\"moreInfo\":\"Velallisen suojaosuuteen, 33,03 euroa päivässä, lisätään 9,65 euroa päivässä jokaisen hänen elatuksensa varassa olevan henkilön osalta (2026). Velallisen elatuksen varassa olevien henkilöiden lukumäärä on mainittu maksukiellossa, jonka ulosottoviranomainen on lähettänyt palkan tai muun tulon maksajalle.\\r\\nSuojaosuus lasketaan kertomalla päiväkohtainen suojaosuus palkanmaksukauden päivien lukumäärällä. Jos palkka tai muu tulo maksetaan kalenterikuukaudelta, päivien lukumäärä on aina 30.\\r\\nUlosmitattava määrä:\\r\\n1. Jos palkka on pienempi kuin suojaosuus, siitä ei ulosmitata mitään.\\r\\n2. Jos palkka ylittää suojaosuuden, mutta on enintään kaksi kertaa suojaosuus, ulosmitataan suojaosuuden ylittävästä palkasta kaksi kolmasosaa (tulorajaulosmittaus 2/3 x (palkka – suojaosuus)).\\r\\n3. Jos palkka on suurempi kuin kaksi kertaa suojaosuus, mutta enintään neljä kertaa suojaosuus, ulosmitataan nettopalkasta yksi kolmasosa (1/3).\\r\\n4. Jos palkka on suurempi kuin neljä kertaa velallisen suojaosuuden määrä ulosmitataan yksi kolmasosa neljä kertaa velallisen suojaosuuden määrää vastaavasta palkanosasta ja lisäksi neljä viidesosaa sen ylittävästä palkanosasta. Palkasta ulosmitataan kuitenkin enintään puolet.\\r\\n\",\"priceLabel\":\"Summa\"},\"foreclosureByPalkkaus\":{\"description\":\"Palkkaus.fi-palvelun maksama ulosottopidätys. Tehdään palkasta ulosottomiehen lähettämän maksukiellon perusteella.\",\"label\":\"Ulosmittaus (Palkkaus.fi)\"},\"holidayBonus\":{\"amountLabel\":\"Prosentti\",\"description\":\"Työehtosopimuksissa (TES) määritetty lomaraha (ent. lomaltapaluuraha).\",\"iconText\":\"bonus\",\"label\":\"Lomaraha\",\"priceLabel\":\"Loma-ajan palkka\"},\"holidayCompensation\":{\"amountLabel\":\"Prosentti\",\"description\":\"Korvaus loma-ajan palkasta, jos lomaa ei pidetä.\",\"iconText\":\"%\",\"label\":\"Lomakorvaus\",\"priceLabel\":\"Palkkasumma\"},\"holidaySalary\":{\"description\":\"Palkka loma-ajalta.\",\"iconText\":\"loma\",\"label\":\"Loma-ajan palkka\",\"priceLabel\":\"Loma-ajan palkka\"},\"hourlySalary\":{\"amountLabel\":\"Tunteja\",\"description\":\"Palkanmaksu tehtyjen tuntien perusteella.\",\"iconText\":\"h\",\"label\":\"Tuntipalkka\",\"priceLabel\":\"Tuntipalkka\"},\"hourlySalaryWithWorkingTimeCompensation\":{\"amountLabel\":\"Tunteja\",\"description\":\"Tuntipalkka ja lisä tehtyjen tuntien perusteella.\",\"iconText\":\"h%\",\"label\":\"Tuntipalkka ja lisä\",\"priceLabel\":\"Tuntipalkka\"},\"irIncomeType\":{\"description\":\"Erikseen syötetty tulorekisterin tulolaji, mikä ei sisälly muihin laskelman riveihin.\",\"iconText\":\"katre\",\"label\":\"Muu tulorekisterin tulolaji\",\"moreInfo\":\"Laskelma luo automaattisesti tulorekisterin tulolajit kullekin riville rivin tyypin perusteella. Tällä palkkalajilla voi erikseen syöttää tulorekisterin tulolajin, mikä ei sisälly muihin laskelman riveihin.\"},\"mealBenefit\":{\"amountLabel\":\"Aterioita\",\"description\":\"Työnantaja työntekijälleen tarjoama ateria. Myös lounassetelit.\",\"iconText\":\"rav\",\"label\":\"Ravintoetu\",\"moreInfo\":\"Ravintoetu on luontoisetu, joka syntyy, kun työnantaja tarjoaa työntekijälleen aterian. Työnantaja voi tukea ruokailukustannuksia ruokailulipukkeella (Lounasseteli) tai muulla kohdennetulla maksuvälineellä taikka järjestämällä työpaikkaruokailun (sopimusruokailu).\\r\\n\\r\\nRavintoedun verotusarvo määräytyy Verohallinnon päätöksen mukaisena vuosittain vahvistettavana arvona.\\r\\n\\r\\nVaihtoehtona ravintoedulle on ateriakorvaus, joka maksetaan työmatkalla. Sen maksaminen edellyttää, että työmatkasta ei suoriteta päivärahaa ja että palkansaajalla ei työn vuoksi ole mahdollisuutta ruokailutauon aikana aterioida tavanomaisella ruokailupaikallaan. Ateriakorvaus on veroton etu (maksetaan työntekijälle), kun erilaiset ravintoedut ovat luontoisetuja (yritys maksaa kulun ja siitä osa on työntekijältä verotettavaa tuloa).\\r\\n\\r\\nJos työntekijän palkanmaksupäivä on esimerkiksi kuukauden puolivälissä, tieto ravintoedun määrästä annetaan tulorekisteriin ennen kuin on varmuutta ravintoedun kokonaismäärästä kyseisenä kuukautena (esimerkiksi mahdolliset poissaolot eivät ole työnantajan tiedossa). Tämän vuoksi on katsottu riittäväksi, että ravintoetu täsmäytetään oikean suuruiseksi viimeistään seuraavalla palkkatietoilmoituksella. \\r\\n\\r\\nJoulukuun ravintoedun määrä on korjattava antamalla joulukuulle korvaava ilmoitus, jotta ravintoedun määrä korjaantuu oikealle verovuodelle. Tästä täsmäyksestä Palkkaus.fi antaa erillinen ohjeistuksen ennen vuodenvaihdetta.\\r\\n\\r\\nJos ravintoetu toteutetaan saldoon perustuvaa maksuvälinettä käyttäen (esimerkiksi maksukortti), täsmäytys on tehtävä vähintään vuoden viimeisellä palkkatietoilmoituksella.\",\"priceLabel\":\"Arvo\"},\"mealCompensation\":{\"amountLabel\":\"Päiviä\",\"description\":\"Ateriakorvauksen voi maksaa työmatkoilta, joilta ei makseta päivärahaa.\",\"iconText\":\"ater\",\"label\":\"Ateriakorvaus\",\"priceLabel\":\"Korvaus / päivä\"},\"milageDaily\":{\"amountLabel\":\"Päiviä\",\"description\":\"Kilometrikorvaus määritetään monissa TES:ssa päiväkohtaisina summina.\",\"iconText\":\"km\",\"label\":\"Kilometrikorvaus, päiväkohtainen\",\"moreInfo\":\"Esim. Rakennusalan työehtosopimuksissa on päiväkohtaiset taulukot, joiden perusteella maksetaan kilometrikorvauksia.\",\"priceLabel\":\"Korvaus / päivä\"},\"milageOther\":{\"amountLabel\":\"Päiviä\",\"description\":\"Kilometrikorvaus jollain muulla perusteella.\",\"iconText\":\"km\",\"label\":\"Kilometrikorvaus, muu peruste\",\"priceLabel\":\"Korvaus / päivä\"},\"milageOwnCar\":{\"amountLabel\":\"Kilometriä\",\"description\":\"Kilometrikorvaus oman auton käytöstä.\",\"iconText\":\"km\",\"label\":\"Kilometrikorvaus, oma auto\",\"priceLabel\":\"Korvaus / km\",\"btnText\":\"Kilometrikorvaus\"},\"monthlySalary\":{\"amountLabel\":\"Kuukausia\",\"description\":\"Kiinteä kuukausipalkka.\",\"iconText\":\"kk\",\"label\":\"Kuukausipalkka\",\"priceLabel\":\"Kuukausipalkka\"},\"nightimeAddition\":{\"amountLabel\":\"Tuntia\",\"description\":\"Korvaus yötyöstä työsopimuksen tai työehtosopimuksen mukaan.\",\"iconText\":\"YÖ\",\"label\":\"Yölisä\",\"priceLabel\":\"Lisä (per tunti)\"},\"nonProfitOrg\":{\"description\":\"Yleishyödylliset yhteisön vapaaehtoistyöhön osallistuvalle maksama päiväraha tai kilometrikorvaus.\",\"iconText\":\"NPO\",\"label\":\"Yleishyödyllisen yhteisön päiväraha ja km-korvaus\",\"moreInfo\":\"Yleishyödylliset yhteisöt voivat maksaa korvauksettomaan vapaaehtoistyöhön osallistuvalle päivärahaa tai kilometrikorvausta.\\r\\n\\r\\nHUOM: Tällä käyttöliittymällä ilmoitetaan vain vapaaehtoistyöhön liittyvät korvaukset. Jos korvaukset liittyvät työsuhteeseen / palkkaan, korvaukset tulee ilmoittaa erikseen kohdissa Kilometrikorvaus ja Päiväraha (kokopäiväraha tai osapäiväraha). Jos yhdistys ei ole verottajan määrittelemällä tavalla yleishyödyllinen, työsuhteen ulkopuoliset korvaukset, myös vapaaehtoistyöstä, tulee tilittää ennakonpidätyksen alaisena työkorvauksena. Vastaanottaja voi sitten vähentää ne omassa verotuksessaan.\\r\\n\\r\\nIlmoitettava tulo on määritetty tuloverolain 71 § 3 momentissa: \\r\\n\\r\\nPäivärahan voi maksaa enintään 20 päivältä per kalenterivuosi ja lisäksi majoittumiskorvaus (tositteen perusteella).\\r\\n\\r\\nKilometrikorvausten osalta voidaan maksaa matkustamiskustannusten korvaus. Toisin kuin tavallisessa kilometrikorvauksessa, tämä voidaan maksaa myös verovelvollisen asunnolta tehdystä matkasta. Muulla kuin julkisella kulkuneuvolla tehdystä matkasta on verovapaata enintään 3 000 euroa kalenterivuodelta.\\r\\n\\r\\nTässä kohdassa ilmoitetaan vain verovapaat määrät. Jos yleishyödyllinen yhteisö maksaan päivärahaa enemmän kuin yllä, ylimenevä osa ilmoitetaan työkorvauksena. Palkkaus.fi ei tarkkaile näitä rajoja, vaan työnantajan tulee huolehtia tästä itse.\"},\"otherAdditions\":{\"description\":\"Muut sovitut aikaperusteiset lisät.\",\"iconText\":\"lis\",\"label\":\"Muut lisät\",\"priceLabel\":\"Euroa\"},\"otherBenefit\":{\"amountLabel\":\"Kuukausia\",\"description\":\"Muu työnantajan maksama verotettava etu.\",\"iconText\":\"etu\",\"label\":\"Muu etu\",\"priceLabel\":\"Muu etu € / kk\"},\"otherCompensation\":{\"description\":\"Tulorekisterin tulolajeissa oleva muu korvaus tai palkkio\",\"iconText\":\"muu\",\"label\":\"Muu palkkio tai korvaus\"},\"otherDeductions\":{\"description\":\"Muu vähennys, joka pienentää työntekijälle maksettavan nettopalkan määrää.\",\"iconText\":\"muu\",\"label\":\"Muu vähennys\",\"priceLabel\":\"Vähennys\"},\"overtime\":{\"amountLabel\":\"Prosentti\",\"description\":\"Ylityökorvaukset\",\"iconText\":\"yli\",\"label\":\"Ylityöt\",\"priceLabel\":\"Palkkasumma\"},\"paidSickLeave\":{\"description\":\"Sairausajan palkka\",\"iconText\":\"Sp\",\"label\":\"Palkallinen sairauspoissaolo\"},\"paidSickLeaveHourlySalary\":{\"amountLabel\":\"Tunteja\",\"description\":\"Sairausajan palkka, palkanmaksu tehtyjen tuntien perusteella.\",\"iconText\":\"Sh\",\"label\":\"Palkallinen sairauspoissaolo, tuntipalkka\",\"priceLabel\":\"Tuntipalkka\"},\"paidSickLeaveMonthlySalary\":{\"amountLabel\":\"Kuukausia\",\"description\":\"Sairausajan palkka, kiinteä kuukausipalkka.\",\"iconText\":\"Skk\",\"label\":\"Palkallinen sairauspoissaolo, kuukausipalkka\",\"priceLabel\":\"Kuukausipalkka\"},\"paidSickLeaveSalary\":{\"description\":\"Sairausajan palkka, kertakorvaus.\",\"iconText\":\"Sp\",\"label\":\"Palkallinen sairauspoissaolo, kertakorvaus\",\"priceLabel\":\"Palkka tai palkkio\"},\"payStats\":{\"amountLabel\":\"Määrä\",\"description\":\"Laskennallinen ansio\",\"iconText\":\"Avg\",\"label\":\"Laskennallinen ansio\",\"priceLabel\":\"Arvo\"},\"phoneBenefit\":{\"amountLabel\":\"Kuukausia\",\"description\":\"Puhelimen verotusarvo, jonka verottaja määrittää vuosittain.\",\"iconText\":\"20\",\"label\":\"Puhelinetu\",\"priceLabel\":\"Puhelinetu / kk\"},\"prepaidExpenses\":{\"description\":\"Kulukorvaus, mikä on jo maksettu ennakkoon työntekijälle. Vähentää työntekijälle maksettavien kulukorvausten määrää.\",\"iconText\":\"ek\",\"label\":\"Ennakkoon maksettu kulukorvaus\",\"priceLabel\":\"Maksettu ennakko\"},\"remuneration\":{\"description\":\"Tulorekisterin tulolajeissa oleva kertaluonteinen palkkio\",\"iconText\":\"ker\",\"label\":\"Kertaluonteinen palkkio\"},\"salary\":{\"description\":\"Kertakorvaus työstä. Suorituspalkka, joka maksetaan ennalta sovitun työkokonaisuuden suorittamisen perusteella. Urakkapalkkaan sisältyy sekä kiinteä että muuttuva osa.\",\"iconText\":\"P\",\"label\":\"Urakkapalkka (palkka tai palkkio)\",\"priceLabel\":\"Palkka tai palkkio\",\"btnText\":\"Palkkio\"},\"saturdayAddition\":{\"amountLabel\":\"Prosentti\",\"description\":\"Lisä lauantaina tehdystä työstä työ- tai työehtosopimuksen mukaan.\",\"iconText\":\"LA\",\"label\":\"Lauantailisä\",\"priceLabel\":\"Palkkasumma\"},\"service\":{\"description\":\"Erillinen palvelumaksu\",\"iconText\":\"P\",\"label\":\"Palvelumaksu\",\"priceLabel\":\"Palvelumaksu\"},\"script\":{\"description\":\"Laskukaava\",\"iconText\":\"JS\",\"label\":\"Laskukaava\"},\"subsidisedCommute\":{\"description\":\"Työnantajan työntekijälle kustantaman ja hankkima julkisen liikenteen henkilökohtainen joukkoliikennelippu, josta osa on verovapaata.\",\"iconText\":\"bus\",\"label\":\"Työsuhdematkalippu\",\"moreInfo\":\"Työsuhdematkalippu on työnantajan työntekijälle kustantaman ja hankkima julkisen liikenteen henkilökohtainen joukkoliikennelippu. Osa työsuhdematkalipun arvosta on verovapaata ja osa veronalaista: Verovapaata on 0 - 3 400€ vuonna 2022. Palkkaus.fi-palvelu laskee verovapaan ja veronalaisen palkan lipun hinnan perusteella. Lisäksi otetaan huomioon työntekijän mahdollisesti työnantajalle maksama korvaus. Kaikki nämä tiedot täytyy ilmoittaa erikseen verottajalle / tulorekisteriin. \\r\\n\\r\\nJos palkansaaja ostaa matkalipun itse ja työnantaja maksaa työntekijälle matkalipun hinnan tai osan siitä, työnantajan maksama korvaus katsotaan kokonaisuudessaan työntekijän palkaksi. Tällöin työntekijälle maksettu lipun hinta ilmoitetaan vain palkkana.\\r\\n\\r\\nMatkalippu on yleensä voimassa vuoden ja siksi työsuhdematkalipussa veronalaisen ja verovapaan edun määriä arvioidaan vuositasolla (toisin kuin muissa luontoiseduissa kuukausitasolla). \\r\\n\\r\\nJos kuitenkin korvausta peritään työntekijän palkasta säännöllisesti koko vuosi (esim. kerran kuussa) voi maksaja jo etukäteen ennakoida tilanteen ja jakaa verovapaan osuuden koko vuodelle ja ilmoittaa sen kuukausittain tulorekisteriin samassa yhteydessä perimänsä korvauksen kanssa. Tämä siitä huolimatta, että työsuhdematkalippu annettaisiin kerran vuodessa.\\r\\n\\r\\nJos haluat toteuttaa tämän jaon, sinun tulee asettaa kohta ”Jaetaanko korvaus palkkajaksoihin?” arvoksi Kyllä ja määrittää jaksojen määrä (oletus 12 kuukautta). Palkkaus.fi-palvelu ei tässä versiossa tarkkaile, että vuodessa kaikki jaksot tulee ilmoitettua oikein, joten sinun tulee vuoden lopussa tarkistaa, että kaikki työsuhdematkalipun osat on ilmoitettu. Erityisen huolellisesti pitää tarkistaa, jos vaihdat jaksojen määrää kesken vuotta (ei suositeltavaa). Ota tarvittaessa yhteyttä Palkanlaskijaasi tai Palkkaus.fi-asiakaspalveluun.\",\"priceLabel\":\"Lipun hinta\"},\"sundayWork\":{\"description\":\"Lain määrittämä 100% korotus sunnuntailta ja pyhäpäiviltä.\",\"iconText\":\"SU\",\"label\":\"Sunnuntai- / pyhätyö\",\"priceLabel\":\"Palkkasumma\"},\"tesWorktimeShortening\":{\"amountLabel\":\"Prosentti\",\"description\":\"Erillinen palkanosa on määritetty rakennusalan työehtosopimuksissa.\",\"iconText\":\"TES\",\"label\":\"Erillinen palkan osa (Raksa)\",\"moreInfo\":\"Ne ovat pääosin yleissitovia ja koskevat myös yksityishenkilöä. Entinen työajan lyhennysraha / \\\"pekkaset\\\".\",\"priceLabel\":\"Palkkasumma\"},\"timeRatePay\":{\"amountLabel\":\"Aika\",\"description\":\"Palkka, jota maksetaan työhön käytetyn ajan perusteella\",\"iconText\":\"t\",\"label\":\"Aikapalkka\",\"priceLabel\":\"Hinta\"},\"toolCompensation\":{\"amountLabel\":\"Päiviä\",\"description\":\"Työvälinekorvaus on määritetty joissakin työehtosopimuksissa (esim. Raksa TES).\",\"iconText\":\"tool\",\"label\":\"Työvälinekorvaus\",\"priceLabel\":\"Korvaus / päivä\"},\"totalEmployerPayment\":{\"description\":\"Laskee palkan kokonaiskustannuksena: Mitä palkanmaksu maksaa sivukuluineen työnantajalle. Lopputulos on kertakorvaus.\",\"iconText\":\"sum\",\"label\":\"Kokonaiskustannus\"},\"totals\":{\"label\":\"Yhteensä\"},\"totalWorkerPayment\":{\"description\":\"Palkan laskenta annetun summan perusteella\",\"iconText\":\"net\",\"label\":\"Nettopalkka\",\"moreInfo\":\"Palkan laskenta annetun summan perusteella\"},\"training\":{\"description\":\"Koulutusajan palkka\",\"iconText\":\"Kp\",\"label\":\"Koulutus\"},\"trainingHourlySalary\":{\"amountLabel\":\"Tunteja\",\"description\":\"Koulutusajan palkka, palkanmaksu tehtyjen tuntien perusteella.\",\"iconText\":\"Kh\",\"label\":\"Koulutusaika, tuntipalkka\",\"priceLabel\":\"Tuntipalkka\"},\"trainingMonthlySalary\":{\"amountLabel\":\"Kuukausia\",\"description\":\"Koulutusajan palkka, kiinteä kuukausipalkka.\",\"iconText\":\"Kkk\",\"label\":\"Koulutusaika, kuukausipalkka\",\"priceLabel\":\"Kuukausipalkka\"},\"trainingSalary\":{\"description\":\"Koulutusajan palkka, kertakorvaus.\",\"iconText\":\"Kp\",\"label\":\"Koulutusaika, kertakorvaus\",\"priceLabel\":\"Palkka tai palkkio\"},\"unionPayment\":{\"description\":\"Työnantajan tulee maksaa AY-jäsenmaksu suoraan liitolle, jos työntekijä näin toivoo.\",\"iconText\":\"AY\",\"label\":\"Ay-jäsenmaksu\",\"moreInfo\":\"Työnantaja voi vähentää AY-jäsenmaksun suoraan työntekijän palkasta ja tilittää sen ammattiliitolle. Vähentäminen tapahtuu työntekijän pyynnöstä / suostumuksella. AY jäsenmaksu vähennetään työntekijän nettopalkasta.\\n\\nMenettelystä on saatettu sopia työehtosopimuksessa, jolloin AY-jäsenmaksun tilittäminen saattaa olla työnantajan velvollisuus. Siitä, koskeeko velvollisuus vain järjestäytyneitä työnantajia, ei tätä kirjoitettaessa ole täyttä varmuutta: Asiasta on eri mielipiteitä ja siitä ei ole oikeustapausta.\\n\\nTyypillisesti tilanne on Palkkaus.fi-asiakkailla (pienillä yrityksillä) harvinainen ja siksi AY-jäsenmaksuja ei toistaiseksi hoideta Palkkaus.fi-palvelun kautta: Työnantajan tulee itse hoitaa jäsenmaksun tilitys suoraan liittoon. Näin vähennettävä summa vähennetään Palkkaus.fi-palvelun asiakasvaratilille maksettavasta summasta. Lisätietoja ilmoittamisesta ja maksamisesta saat kyseisestä liitosta.\"},\"unknown\":{\"amountLabel\":\"Määrä\",\"description\":\"Rivin tyyppiä ei ole vielä määritetty.\",\"iconText\":\"?\",\"label\":\"Valitse...\",\"priceLabel\":\"Hinta\"},\"workingTimeCompensation\":{\"description\":\"Tulorekisterin tulolajeissa oleva aikaperusteinen lisä \",\"iconText\":\"lisä\",\"label\":\"Aikaperusteinen lisä\"},\"taxAtSource\":{\"description\":\"Lähdevero ja lähdeverovähennys (rajoitetusti verovelvollinen)\",\"iconText\":\"tax\",\"label\":\"Lähdevero\",\"priceLabel\":\"Palkkasumma\",\"amountLabel\":\"Prosentti\"},\"taxWithholding\":{\"description\":\"Ennakkoperintä, jossa suorituksen maksaja vähentää verovelvolliselle maksettavasta rahamäärästä ennakonpidätysprosentin mukaan lasketun veron.\",\"iconText\":\"tax\",\"label\":\"Ennakonpidätys\"}},\"CalculationRowUnit\":{\"count\":{\"label\":\"kpl\"},\"days\":{\"label\":\"päivää\"},\"kilometers\":{\"label\":\"km\"},\"percent\":{\"label\":\"%\"},\"undefined\":{\"label\":\"-\"},\"hours\":{\"label\":\"h\"},\"weeks\":{\"label\":\"vko\"},\"months\":{\"label\":\"kk\"}},\"CalculationStatus\":{\"draft\":{\"label\":\"Luonnos\"},\"paymentCanceled\":{\"label\":\"Maksu peruttu\"},\"paymentError\":{\"label\":\"Virheitä\"},\"paymentRefunded\":{\"label\":\"Maksu palautettu\"},\"paymentStarted\":{\"label\":\"Maksu aloitettu\"},\"paymentSucceeded\":{\"label\":\"Maksettu\"},\"paymentWorkerCopy\":{\"label\":\"Työntekijän kopio\"},\"payrollDraft\":{\"label\":\"Luonnos\"},\"proDraft\":{\"label\":\"Oma luonnos (pro)\"},\"sharedApproved\":{\"label\":\"Hyväksytty jaettu laskelma\"},\"sharedRejected\":{\"label\":\"Hylätty jaettu laskelma\"},\"sharedWaiting\":{\"label\":\"Vastaanotettu jaettu laskelma\"},\"history\":{\"label\":\"Palkkahistoria (muualla laskettu)\"},\"template\":{\"label\":\"Toistuva laskelma\"},\"workerRequestAccepted\":{\"label\":\"Työntekijän tekemä, hyväksytty\"},\"workerRequestDeclined\":{\"label\":\"Työntekijän tekemä, hylätty\"},\"workerRequested\":{\"label\":\"Työntekijän tekemä\"},\"waitingApproval\":{\"label\":\"Yrityksen tarkistuksessa\"},\"repair\":{\"label\":\"Laskelman korjaus\"},\"paymentRepairCopy\":{\"label\":\"Laskelman aiempi versio\"}},\"CarBenefitCode\":{\"fullCarBenefit\":{\"label\":\"Vapaa autoetu\"},\"limitedCarBenefit\":{\"label\":\"Käyttöetu\"}},\"CarBenefitKind\":{\"fullCarBenefit\":{\"description\":\"Työnantaja huolehtii kaikista auton käyttöön liittyvistä kustannuksista\",\"label\":\"Vapaa autoetu\"},\"limitedCarBenefit\":{\"description\":\"Auton käyttäjä maksaa yksityisajojensa polttoainekustannukset\",\"label\":\"Käyttöetu\"},\"undefined\":{\"description\":\"Autoedun tyypin valinta on pakollinen\",\"label\":\"Ei valintaa\"}},\"CompanyType\":{\"fiOy\":{\"label\":\"Osakeyhtiö, myös asunto-osakeyhtiö ja Oyj\"},\"fiRy\":{\"label\":\"Yhdistys\"},\"fiTm\":{\"label\":\"Yksityinen elinkeinonharjoittaja tai Maatalousyrittäjä\"},\"fiYy\":{\"label\":\"Muu, esim. Kommandiittiyhtiö, Avoin yhtiö,\"},\"unknown\":{}},\"ContractPartyType\":{\"customContact\":{\"label\":\"Custom Contact\"}},\"DailyAllowanceKind\":{\"fullDailyAllowance\":{\"description\":\"Päiväraha, kun työmatka on yli 10 tuntia.\",\"label\":\"Kokopäiväraha\"},\"internationalDailyAllowance\":{\"description\":\"Päiväraha ulkomaanmatkoilla\",\"label\":\"Ulkomaan päiväraha\"},\"mealAllowance\":{\"description\":\"Ateriakorvauksen voi maksaa työmatkoilta, joilta ei makseta päivärahaa. Ateriakorvauksen enimmäismäärä on 10,75€ per ateria, 2 ateriaa per päivä (21,50 € per päivä).\",\"label\":\"Ateriakorvaus\"},\"partialDailyAllowance\":{\"description\":\"Päiväraha, kun työmatka on 6-10 tuntia.\",\"label\":\"Osapäiväraha\"},\"undefined\":{\"description\":\"Ei valintaa, oletus kokopäiväraha\",\"label\":\"Ei valintaa\"}},\"DateOfBirthAccuracy\":{\"ageBased\":{\"label\":\"Iän perusteella\"},\"ageGroupBased\":{\"label\":\"Ikäluokan perusteella\"},\"assumption\":{\"label\":\"Oletus\"},\"exact\":{\"label\":\"Täsmällinen päivämäärä\"},\"monthCorrect\":{\"label\":\"Kuukausi oikea\"},\"verified\":{\"label\":\"Vahvistettu\"}},\"EmployerType\":{\"fullTimeEmployer\":{\"label\":\"Jatkuva sopimus tai yli 8178€ / 6kk\"},\"miniEmployer\":{\"label\":\"Alle 1500€ / vuosi\"},\"smallEmployer\":{\"label\":\"Väh. 1500€ / vuosi\"},\"tyelOwnContractEmployer\":{\"label\":\"TyEL-vuosisopimus tai hoitaa itse.\"},\"unknown\":{\"label\":\"Ei tiedossa\"}},\"EmploymentContract\":{\"annualLeave\":{\"label\":\"Vuosiloma\"},\"benefitsException\":{\"label\":\"Benefits\"},\"noticeException\":{\"label\":\"Irtisanomisaika\"},\"otherTerms\":{\"label\":\"Muut sopimusehdot\"}},\"EmploymentRelationTaxcard\":{\"undefined\":{\"label\":\"Ei valintaa\"},\"manual\":{\"label\":\"Syötä verokortin tiedot käsin\"},\"auto\":{\"label\":\"Hae automaattisesti verottajalta (API)\"},\"latest\":{\"label\":\"Käytä viimeisintä lisättyä verokorttia\"},\"taxAtSource\":{\"label\":\"Lähdevero\"},\"noTaxCard\":{\"label\":\"Ei verokorttia (60%)\"}},\"EmploymentRelationType\":{\"athlete\":{\"label\":\"Urheilija\",\"salaryRowMessage\":\"Urheilijan palkka\"},\"boardMember\":{\"label\":\"Hallituksen jäsen\"},\"compensation\":{\"label\":\"Suoritus työkorvauksena\"},\"employedByStateEmploymentFund\":{\"label\":\"Valtion työllisyysmäärärahoilla työllistetty (palkkatuki)\"},\"entrepreneur\":{\"label\":\"Yrittäjä tai yrittäjän perheenjäsen\"},\"entrepreneurNew\":{\"label\":\"Yrittäjä, osaomistaja tai yrittäjän perheenjäsen\"},\"farmer\":{\"label\":\"Maatalousyrittäjä tai perheenjäsen\"},\"hourlySalary\":{\"label\":\"Tuntipalkkainen työntekijä\"},\"foreignWorker\":{\"label\":\"Ulkomainen työntekijä (Suomessa)\"},\"workingAbroad\":{\"label\":\"Lähetetty työntekijä (Ulkomailla)\"},\"monthlySalary\":{\"label\":\"Kuukausipalkkainen työntekijä\"},\"performingArtist\":{\"label\":\"Esiintyvä taiteilija\"},\"salary\":{\"label\":\"Keikkatyöntekijä (kertaluonteinen työ)\"},\"undefined\":{\"label\":\"Muu\"}},\"EmploymentRelationStatus\":{\"unknown\":{\"label\":\"Tuntematon\"},\"primary\":{\"label\":\"Ensisijainen\"},\"secondaryCurrent\":{\"label\":\"Toissijainen\"},\"archived\":{\"label\":\"Arkistoitu\"}},\"EmploymentSalaryType\":{\"hourlyPay\":{\"label\":\"tuntipalkka\",\"metricAbbrev\":\"/h\"},\"montlyPay\":{\"label\":\"kuukausipalkka\",\"metricAbbrev\":\"/kk\"},\"otherPay\":{\"label\":\"muu\"},\"unknown\":{\"label\":\"Valitse...\"}},\"EmploymentTerminationKind\":{\"monetaryWorkingTimeBankCompensation\":{\"description\":\"Palkka, joka maksetaan työaikapankkiin säästetyn ajan perusteella.\",\"label\":\"Työaikapankin rahakorvaus\"},\"noticePeriodCompensation\":{\"description\":\"Korvaus, jonka työnantaja maksaa työntekijälle palvelussuhteen päättyessä ilman irtisanomisaikaa eli tilanteessa, jossa jätetään irtisanomisaika noudattamatta ja työsuhde päättyy heti (TSL 6:4). Tulolajilla ilmoitetaan myös korvaus, jonka työnantaja maksaa, kun työntekijä irtisanoutuu yli 200 päivää kestäneen lomautuksen johdosta sekä, kun työnantaja irtisanoo lomautettuna olevan työntekijän.\",\"label\":\"Irtisanomisajan korvaus\"},\"pensionPaidByEmployer\":{\"description\":\"Eläke, jonka työnantaja maksaa entiselle työntekijälleen tai tämän edunsaajalle aiemman palvelussuhteen perusteella.\",\"label\":\"Työnantajan maksama eläke\"},\"terminationAndLayOffDamages\":{\"description\":\"Korvaus, jota työnantaja on velvollinen maksamaan, kun työnantaja on päättänyt palvelussuhteen henkilön työsopimuslain, kunnallisesta viranhaltijasta annetun lain tai valtion virkamieslain vastaisesti. Kohdassa ilmoitetaan myös korvaus työsuhteen purkamisesta (TSL 8:1, 55/2001) sekä korvaus perusteettomasta lomauttamisesta.\",\"label\":\"Vahingonkorvaus päättämis- ja lomautustilanteissa\"},\"undefined\":{\"description\":\"Ei valintaa\",\"label\":\"Ei valintaa\"},\"voluntaryTerminationCompensation\":{\"description\":\"Korvaus, jonka työnantaja maksaa vapaaehtoisesti irtisanomis- tai purkamistilanteessa tai silloin, kun palvelussuhde päätetään sopimalla.\",\"label\":\"Vapaaehtoinen korvaus päättämistilanteessa\"}},\"EmploymentType\":{\"fullTime\":{\"label\":\"Toistaiseksi voimassaoleva\"},\"job\":{\"label\":\"Kertaluonteinen työ\"},\"partTime\":{\"label\":\"Määräaikainen\"},\"unknown\":{\"label\":\"Valitse...\"}},\"EmploymentWorkHoursType\":{\"hourPerThreeWeeks\":{\"label\":\"3 viikon jaksossa\"},\"hourPerTwoWeeks\":{\"label\":\"2 viikon jaksossa\"},\"hoursPerDay\":{\"label\":\"tuntia/vuorokaudessa\"},\"hoursPerWeek\":{\"label\":\"tuntia/viikkossa\"}},\"ExportMethod\":{\"fileExcel\":{\"label\":\"Excel-tiedosto\",\"workflowMessage\":\"Excel tiedostoon\"},\"fileCsv\":{\"label\":\"Csv-tiedosto\",\"workflowMessage\":\"Csv tiedostoon\"},\"filePdf\":{\"label\":\"Pdf-tiedosto\",\"workflowMessage\":\"Pdf / tuloste\"},\"fileText\":{\"label\":\"Tekstitiedosto\",\"workflowMessage\":\"Teksti tiedostoon\"},\"copyExcel\":{\"label\":\"Excel copy-paste\",\"workflowMessage\":\"Excel leikepöydälle\"},\"copyCsv\":{\"label\":\"Csv copy-paste\",\"workflowMessage\":\"Csv leikepöydälle\"},\"copyText\":{\"label\":\"Tekstin copy-paste\",\"workflowMessage\":\"Teksti leikepöydälle\"},\"paymentChannel\":{\"label\":\"Maksukanava\"},\"api\":{\"label\":\"Rajapinta\"},\"fileSepa\":{\"label\":\"S€PA-tiedosto v02\",\"workflowMessage\":\"Sepa-tiedosto v02\"},\"fileSepaV03\":{\"label\":\"S€PA-tiedosto v03\",\"workflowMessage\":\"Sepa-tiedosto v03\"},\"copySepa\":{\"label\":\"S€PA copy-paste v02\",\"workflowMessage\":\"Sepa copy-paste v02\"},\"copySepaV03\":{\"label\":\"S€PA copy-paste v03\",\"workflowMessage\":\"Sepa copy-paste v03\"},\"finvoiceFile\":{\"label\":\"Finvoice-tiedosto\",\"workflowMessage\":\"Finvoice-tiedosto\"}},\"ForeclosureKind\":{\"fixed\":{\"description\":\"Ulosottoon tilitetään kiinteä summa\",\"label\":\"Ulosmittaus, kiinteä summa\"},\"periodic\":{\"description\":\"Ulosottoon tilitettävä määrä lasketaan määräajoin maksettavan palkan perusteella\",\"label\":\"Ulosmittaus, määräajoin maks. palkka\"},\"nonPeriodic\":{\"description\":\"Ulosottoon tilitettävä määrä lasketaan muuten kuin määräajoin maksettavan palkan perusteella\",\"label\":\"Ulosmittaus, ei määräajoin maks. palkka\"},\"undefined\":{\"description\":\"Ei valintaa, oletus kiinteä summa\",\"label\":\"Ei valintaa\"}},\"FrameworkAgreement\":{\"childCare\":{\"description\":\"Jatkuva lastenhoitaja ja siihen liittyvät tuet\",\"label\":\"Muu lastenhoito\"},\"cleaning\":{\"description\":\"Siivous- ja kiinteistöalan työ\",\"label\":\"Siivous- ja kiinteistöala\"},\"construction\":{\"description\":\"Työtä rakennusalan työehtosopimuksen mukaan\",\"label\":\"Rakennus- ja remonttityö\"},\"entrepreneur\":{\"description\":\"Yrittäjän oma palkka\",\"label\":\"Yrittäjä\"},\"mll\":{\"description\":\"MLL:n lastenhoitajan palkka\",\"label\":\"MLL suositukset\"},\"notDefined\":{\"description\":\"Työehtosopimusta tai suositusta ei ole määritetty\",\"label\":\"Ei määritetty\"},\"other\":{\"description\":\"Muu työ - ei työehtosopimusta\",\"label\":\"Muu työ\"},\"santaClaus\":{\"description\":\"Joulupukin kotikäynti jouluaattona\",\"label\":\"Joulupukki kotiin\"}},\"Gender\":{\"female\":{\"label\":\"Nainen\"},\"male\":{\"label\":\"Mies\"},\"unknown\":{\"label\":\"-\"}},\"HelttiIndustry\":{\"i\":{\"label\":\"Majoitus- ja ravitsemistoiminta\"},\"j\":{\"label\":\"Informaatio ja viestintä\"},\"k\":{\"label\":\"Rahoitus- ja vakuutustoiminta\"},\"m\":{\"label\":\"Ammatillinen, tieteellinen ja tekninen toiminta\"},\"n\":{\"label\":\"Hallinto- ja tukipalvelutoiminta\"},\"notDefined\":{\"label\":\"Ei valintaa\"},\"o\":{\"label\":\"Julkinen hallinto ja maanpuolustus\"},\"other\":{\"label\":\"Muu toimiala\"},\"q\":{\"label\":\"Terveys- ja sosiaalipalvelut\"},\"r\":{\"label\":\"Taiteet, viihde ja virkistys\"},\"s\":{\"label\":\"Muu palvelutoiminta\"}},\"HelttiProductPackage\":{\"large\":{\"label\":\"Tuloskunto\"},\"medium\":{\"label\":\"Kasvuyritys\"},\"notDefined\":{\"label\":\"Ei sopimusta\"},\"small\":{\"label\":\"Start-up\"}},\"HolidayAccrualKind\":{\"calculation\":{\"label\":\"Palkkalaskelma\"},\"holiday\":{\"label\":\"Pidetty loma\"},\"holidayCompensated\":{\"label\":\"Lomakorvaus\"},\"manual\":{\"label\":\"Käsin syötetty kuukausikertymä\"},\"saldo\":{\"label\":\"Lomavuoden alku- tai loppusaldo\"}},\"HolidayBonusPaymentMethod\":{\"none\":{\"label\":\"Ei lomarahaa\"},\"pay24Days\":{\"label\":\"Kesäloma 24 päivää (ei huomioi lomasuunnitelmia)\"},\"payAllBonus\":{\"label\":\"Kaikki kerralla (kesäloman yhteydessä)\"},\"payForHolidaySalary\":{\"label\":\"Maksetun loma-ajan palkan mukaan (oletus)\"},\"paySummerBonus\":{\"label\":\"Suunnitellut kesälomat (max 24pv)\"},\"paySelectedDays\":{\"label\":\"Maksetaan valituilta päiviltä\"}},\"HolidayCode\":{\"holidayCompensation\":{\"description\":\"Lomia ei kerrytetä, vaan lomakorvaus (+mahd. lomaraha) maksetaan heti palkan yhteydessä. Tyypillistä rakennusalalla ja muissa keikkatöissä.\",\"label\":\"Lomakorvaus palkanmaksun yhteydessä\"},\"holidayCompensationIncluded\":{\"description\":\"Lomia ei kerrytetä, vaan lomakorvaus on sovittu osaksi kokonaispalkkaa. Tämä on mahdollista vain poikkeustilanteissa, lähinnä kotitalouksilla.\",\"label\":\"Lomakorvaus osa kokonaispalkkaa\"},\"noHolidays\":{\"description\":\"Maksun saajalla ei ole lomaoikeutta. Esim. hallituksen jäsen, työkorvauksella työskentelevät, joskus toimitusjohtaja.\",\"label\":\"Ei lomaoikeutta\"},\"permanent14Days\":{\"description\":\"Työntekijä työskentelee työsopimuksen mukaan kaikkina kuukausina vähintään 14 päivää / kk\",\"label\":\"14 päivän sääntö\"},\"permanent35Hours\":{\"description\":\"Työntekijä työskentelee vähintään yhtenä kuukautena vuodessa 35 tuntia / kk, mutta ei kuulu 14 päivän säännön piiriin.\",\"label\":\"35 tunnin sääntö\"},\"temporaryTimeOff\":{\"description\":\"Työntekijä ei kuulu 14 päivän tai 35 tunnin säännön piiriin.\",\"label\":\"Vapaan ansaintasääntö\"},\"undefined\":{\"description\":\"Loma-ajan kertymistä ei ole määritetty\",\"label\":\"Lisää lomakirjanpito\"},\"other\":{\"description\":\"Kertymä päivitetään käsin tai integraatiolla toisesta järjestelmästä.\",\"label\":\"Manuaalinen\"},\"script\":{\"description\":\"Lomakertymä lasketaan erillisellä kaavalla.\",\"label\":\"Kaavalla laskettava kertymä\"}},\"HolidayPayCalculation\":{\"normalMonthlyPay\":{\"label\":\"Kuukausipalkka\",\"description\":\"Kuukausipalkkaan perustuva vuosilomapalkka\"},\"averageDailyPay\":{\"label\":\"Keskipäiväpalkka (loma KPA)\",\"description\":\"Keskipäiväpalkkaan perustuva vuosilomapalkka\"},\"percentageBasedPay\":{\"label\":\"Prosenttiperusteinen\",\"description\":\"Prosenttiperusteinen vuosilomapalkka\"},\"averageHourlyPay\":{\"label\":\"Keskituntiansio (loma KTA)\",\"description\":\"Tuntipalkkaan perustuva vuosilomapalkka\"},\"holidayCompensation\":{\"label\":\"Lomakorvaus\",\"description\":\"Lomakorvaukseen perustuva vuosilomapalkka\"},\"otherPay\":{\"label\":\"Manuaalinen\",\"description\":\"\"},\"undefined\":{\"label\":\"Valitse...\"},\"scriptPay\":{\"label\":\"Kaava\",\"description\":\"Vuosilomapalkka lasketaan kaavalla\"}},\"HolidayYearInitType\":{\"createEmpty\":{\"label\":\"Luo uusi tyhjä lomavuosi\"},\"createFromCalcs\":{\"label\":\"Luo lomavuosi ja lisää lomapäivät maksettujen laskelmien perusteella\"},\"createMonths\":{\"label\":\"Luo lomavuosi ja lisää kaikki kuukaudet\"},\"ignore\":{\"label\":\"Älä lisää tai poista lomavuotta\"}},\"HouseHoldUseCaseTree\":{\"childCare\":{\"description\":\"Tilapäinen tai jatkuva\",\"kela\":{\"description\":\"Lastenhoitaja kotona.\",\"label\":\"Yksityisen hoidon tuki\"},\"label\":\"Lastenhoito\",\"mll\":{\"description\":\"Palkka MLL:n suosituksen mukaan.\",\"label\":\"Tilapäinen lastenhoito\"},\"other\":{\"description\":\"Muu jatkuva tai tilapäinen lastenhoito\",\"label\":\"Muu lastenhoito\"}},\"cleaning\":{\"51530\":{\"description\":\"Kiinteistöhuollon työntekijät\",\"label\":\"Kiinteistöhuolto\"},\"53221\":{\"description\":\"Kotityöpalvelutyöntekijän työ\",\"label\":\"Kotityöpalvelu\"},\"61132\":{\"description\":\"Puutarha- ja kasvihuonetyöntekijät\",\"label\":\"Puutarhanhoito\"},\"91110\":{\"description\":\"Siivoustyö tai kotiapulainen\",\"label\":\"Kotisiivous tai kotiapulainen\"},\"description\":\"Kodin siivous ja kunnossapito\",\"label\":\"Kotisiivous\",\"other\":{\"description\":\"Kodin muut työt\",\"label\":\"Muut\"}},\"construction\":{\"label\":\"Rakennus- ja remonttityö\",\"description\":\"Rakennusalan työehtosopimus.\",\"carpenter\":{\"description\":\"Kirvesmiehet, muurarit, laattatyöt, kattotyöt\",\"label\":\"Talonrakennus\"},\"floor\":{\"description\":\"Lattianpäällystys\",\"label\":\"Lattiatyöt\"},\"new\":{\"description\":\"Uudisrakennukset, ei kotital.vähennystä\",\"label\":\"Uudisrakentaminen\"},\"painter\":{\"description\":\"Rakennusmaalarit ym.\",\"label\":\"Maalaaminen\"},\"renovation\":{\"description\":\"Kotital.vähennyksen alainen remontointi\",\"label\":\"Remontointi\"},\"other\":{\"description\":\"Muu kuin yllä kuvattu työ\",\"label\":\"Muu työ\"}},\"other\":{\"51530\":{\"label\":\"Kiinteistöhuollon työntekijät\"},\"53112\":{\"label\":\"Perhepäivähoitajat (sis. kotitalousten lastenhoitajat)\"},\"53212\":{\"label\":\"Kehitysvammaisten hoitajat\"},\"53213\":{\"label\":\"Sosiaalialan hoitajat\"},\"53221\":{\"label\":\"Kotityöpalvelutyöntekijät\"},\"53222\":{\"label\":\"Henkilökohtaiset avustajat, omaishoitajat ym.\"},\"61112\":{\"label\":\"Peltoviljelytyönjohtajat ja -työntekijät\"},\"61132\":{\"label\":\"Puutarha- ja kasvihuonetyönjohtajat ja - työntekijät\"},\"62100\":{\"label\":\"Metsurit ja metsätyöntekijät\"},\"71110\":{\"label\":\"Talonrakentajat (sis. remonttimiehet)\"},\"71150\":{\"label\":\"Kirvesmiehet ja rakennuspuusepät\"},\"71210\":{\"label\":\"Kattoasentajat ja -korjaajat\"},\"71310\":{\"label\":\"Rakennusmaalarit ym.\"},\"91110\":{\"label\":\"Kotiapulaiset ja -siivoojat\"},\"description\":\"Yleinen palkkalaskuri\",\"label\":\"Muu työ\",\"undefined\":{\"label\":\"Muu työ\"}}},\"HouseholdYearStatus\":{\"undefined\":{\"label\":\"Ei tarkistettu\"},\"ok\":{\"label\":\"Hyväksytty\"},\"okWithModifications\":{\"label\":\"Puutteita/virheitä\"},\"willHandleMyself\":{\"label\":\"Hoidan itse\"}},\"HouseholdYearProcessingStatus\":{\"open\":{\"label\":\"Avoin\"},\"closed\":{\"label\":\"Lukittu\"},\"printed\":{\"label\":\"Tulostettu\"}},\"InsuranceCompany\":{\"aktia\":{\"label\":\"Aktia\"},\"alandia\":{\"label\":\"Alandia\"},\"aVakuutus\":{\"label\":\"A-Vakuutus\"},\"fennia\":{\"label\":\"Fennia\"},\"folksam\":{\"label\":\"Folksam\"},\"if\":{\"label\":\"If\"},\"lähiTapiola\":{\"label\":\"LähiTapiola\"},\"none\":{\"label\":\"Ei yhtiötä\"},\"other\":{\"label\":\"Muu vakuutusyhtiö\"},\"pohjantähti\":{\"label\":\"Pohjantähti\"},\"pohjola\":{\"label\":\"OP Vakuutus\"},\"redarnas\":{\"label\":\"Redarnas\"},\"tryg\":{\"label\":\"Tryg\"},\"turva\":{\"label\":\"Turva\"},\"ålands\":{\"label\":\"Ålands Ömsesidiga Försäkringsbolag\"},\"protector\":{\"label\":\"Protector\"},\"pending\":{\"label\":\"Pending\"}},\"InvoiceStatus\":{\"canceled\":{\"description\":\"Lasku on peruttu\",\"label\":\"Peruttu\"},\"error\":{\"description\":\"Maksujärjestelmä on merkinnyt maksun virheelliseksi\",\"label\":\"Virhetila\"},\"forecast\":{\"description\":\"Tämä lasku on Palkkaus.fi arvio: Varsinainen lasku tulee muusta kanavasta.\",\"label\":\"Arvio\"},\"paid\":{\"description\":\"Maksukanava on antanut maksukuittauksen.\",\"label\":\"Maksettu\"},\"paymentStarted\":{\"description\":\"Maksuprosessi on aloitettu, esim. maksu on lähetetty pankkiin.\",\"label\":\"Maksu aloitettu\"},\"preview\":{\"description\":\"Esikatselulasku on tämänhetkinen tilanne. Laskuun saattaa olla tulossa vielä uusia eriä.\",\"label\":\"Esikatselu\"},\"read\":{\"description\":\"Lasku on lähetetty maksujärjestelmään\",\"label\":\"Käsittelyssä\"},\"undefined\":{\"description\":\"Luonnos, ei maksujonossa\",\"label\":\"Valitse...\"},\"unread\":{\"description\":\"Laskua ei vielä ole lähetetty maksujärjestelmään\",\"label\":\"Ei käsitelty\"},\"waitingConfirmation\":{\"description\":\"Odottaa maksun manuaalista vahvistusta yrittäjältä / tilitoimistolta. Tulorekisteri-ilmoitus lähetetään vasta tämän jälkeen.\",\"label\":\"Odottaa vahvistusta\"},\"waitingPalkkaus\":{\"description\":\"Palkkalaskelma on otettu tarkistukseen, koska siinä saattaa olla virheitä. Maksu lähtee tarkistuksen jälkeen, yleensä seuraavana arkipäivänä.\",\"label\":\"Tarkistuksessa\"}},\"InvoiceType\":{\"net\":{\"label\":\"Palkka\"},\"tax\":{\"label\":\"Työnantajasuoritus (vero)\"},\"taxWithholding\":{\"label\":\"Ennakonpidätys\"},\"taxSocialSecurity\":{\"label\":\"SAVA-maksu\"},\"unemployment\":{\"label\":\"Työttömyysvakuutusmaksu\"},\"pension\":{\"label\":\"Työeläkemaksu\"},\"union\":{\"label\":\"AY-jäsenmaksu\"},\"foreclosure\":{\"label\":\"Ulosmittaus\"},\"gross\":{\"label\":\"Palkkaus.fi - palkanmaksu\"},\"verification\":{\"label\":\"Avausmaksu\"},\"payroll\":{\"label\":\"Palkkaus.fi - palkkiot ja palvelumaksut\"},\"fee\":{\"label\":\"Palkkaus.fi - palkkio\"},\"service\":{\"label\":\"Palkkaus.fi - palvelumaksu\"}},\"IrFlags\":{\"noMoney\":{\"label\":\"Maksettu muuna kuin rahana (NoMoney)\"},\"oneOff\":{\"label\":\"Kertakorvaus (OneOff)\"},\"unjustEnrichment\":{\"label\":\"Perusteeton etu (UnjustEnrichment)\"}},\"IrInsuranceExceptions\":{\"excludeAccidentInsurance\":{\"label\":\"Poista työtapaturma- ja ammattitautivakuutusmaksun alaisuus\"},\"excludeAll\":{\"label\":\"Poista kaikkien sosiaalivakuutusmaksujen alaisuus\"},\"excludeHealthInsurance\":{\"label\":\"Poista sairausvakuutusmaksun alaisuus\"},\"excludePension\":{\"label\":\"Poista työeläkevakuutusmaksun alaisuus\"},\"excludeUnemployment\":{\"label\":\"Poista työttömyysvakuutusmaksun alaisuus\"},\"includeAccidentInsurance\":{\"label\":\"Lisää työtapaturma- ja ammattitautivakuutusmaksun alaisuus\"},\"includeAll\":{\"label\":\"Lisää kaikkien sosiaalivakuutusmaksujen alaisuus\"},\"includeHealthInsurance\":{\"label\":\"Lisää sairausvakuutusmaksun alaisuus\"},\"includePension\":{\"label\":\"Lisää työeläkevakuutusmaksun alaisuus\"},\"includeUnemployment\":{\"label\":\"Lisää työttömyysvakuutusmaksun alaisuus\"}},\"Language\":{\"default\":{\"label\":\"Oletus (yhtiön kieli)\"},\"fi\":{\"label\":\"Suomi\"},\"en\":{\"label\":\"English\"},\"sv\":{\"label\":\"Svenska\"}},\"LegalEntityType\":{\"company\":{\"label\":\"Y-tunnus\"},\"partner\":{\"label\":\"Kumppani\"},\"person\":{\"label\":\"Henkilö\"},\"personCreatedByEmployer\":{\"label\":\"Työntekijä (TA:n)\"},\"undefined\":{\"label\":\"Tuntematon\"}},\"MealBenefitKind\":{\"cateringContract\":{\"description\":\"Työnantajan järjestämä sopimusruokailu, jonka kustannus työnantajalle on verottajan vuosittain määrittämissä rajoissa (vuonna 2021/2022 6,90€ - 10,90€/7,15€ - 11,30€). Arvostetaan verotuksessa 6,80€/6,90€ per ruokailu.\",\"label\":\"Sopimusruokailu\",\"descriptionWithYearlyNumbers\":\"Työnantajan järjestämä sopimusruokailu, jonka kustannus työnantajalle on verottajan vuosittain määrittämissä rajoissa (vuonna {{previous.year}} / {{current.year}} {{previous.sideCosts.mealTicketLowerLimitFormatted}} - {{previous.sideCosts.mealTicketUpperLimitFormatted}} / {{current.sideCosts.mealTicketLowerLimitFormatted}} - {{current.sideCosts.mealTicketUpperLimitFormatted}}). Arvostetaan verotuksessa {{previous.sideCosts.mealBenefitCateringContractFormatted}} / {{current.sideCosts.mealBenefitCateringContractFormatted}} per ruokailu.\"},\"institute\":{\"description\":\"Sairaalan, koulun, päiväkodin tai muun vastaavan laitoksen henkilökuntaan kuuluvan laitosruokailun yhteydessä saaman ravintoedun raha-arvona pidetään 2021/2022 5,18€/5,36€ ateriaa kohden.\",\"label\":\"Sairaalan, koulun, päiväkodin tms. ruokailu\",\"descriptionWithYearlyNumbers\":\"Sairaalan, koulun, päiväkodin tai muun vastaavan laitoksen henkilökuntaan kuuluvan laitosruokailun yhteydessä saaman ravintoedun raha-arvona pidetään {{previous.year}} / {{current.year}} {{previous.sideCosts.mealBenefitInstituteFormatted}} / {{current.sideCosts.mealBenefitInstituteFormatted}} ateriaa kohden.\"},\"mealAllowance\":{\"description\":\"Ateriakorvauksen on veroton korvaus (muut tämän sivun valinnat ovat ravintoetuja / luontoisetuja). Sen maksaminen edellyttää, että työmatkasta ei suoriteta päivärahaa ja että palkansaajalla ei työn vuoksi ole mahdollisuutta ruokailutauon aikana aterioida tavanomaisella ruokailupaikallaan. \\nLuonnollisesti näiltä päiviltä ei voi käyttää muuta ravintoetua. Ateriakorvauksen enimmäismäärä on 2021/2022 11,00€/11,25€ per ateria, 2 ateriaa per päivä (22,00€/22,50€ per päivä).\",\"label\":\"Ateriakorvaus\",\"descriptionWithYearlyNumbers\":\"Ateriakorvauksen on veroton korvaus (muut tämän sivun valinnat ovat ravintoetuja / luontoisetuja). Sen maksaminen edellyttää, että työmatkasta ei suoriteta päivärahaa ja että palkansaajalla ei työn vuoksi ole mahdollisuutta ruokailutauon aikana aterioida tavanomaisella ruokailupaikallaan. \\nLuonnollisesti näiltä päiviltä ei voi käyttää muuta ravintoetua. Ateriakorvauksen enimmäismäärä on {{previous.year}} / {{current.year}} {{previous.sideCosts.taxFreeMealAllowanceFormatted}} / {{current.sideCosts.taxFreeMealAllowanceFormatted}} per ateria, 2 ateriaa per päivä (22,00€/22,50€ per päivä).\"},\"mealTicket\":{\"description\":\"Ruokailulipuke (Lounasseteli tai vast.) tai maksukortille ladattava tapahtuma, jonka kustannus työnantajalle on verottajan vuosittain määrittämissä rajoissa (vuonna 2021/2022 6,90€ - 10,90€/7,15€ - 11,30€). Arvostetaan verotuksessa 75 % nimellisarvosta.\",\"label\":\"Ruokailulipuke\",\"descriptionWithYearlyNumbers\":\"Ruokailulipuke (Lounasseteli tai vast.) tai maksukortille ladattava tapahtuma, jonka kustannus työnantajalle on verottajan vuosittain määrittämissä rajoissa (vuonna {{previous.year}} / {{current.year}} {{previous.sideCosts.mealTicketLowerLimitFormatted}} - {{previous.sideCosts.mealTicketUpperLimitFormatted}} / {{current.sideCosts.mealTicketLowerLimitFormatted}} - {{current.sideCosts.mealTicketUpperLimitFormatted}}). Arvostetaan verotuksessa 75 % nimellisarvosta.\"},\"restaurantWorker\":{\"description\":\"Hotelli- ja ravintola-alan henkilökunnan ja lentohenkilöstön lennon aikana saaman ravintoedun raha-arvona pidetään 2021/2022 5,87€/6,08€ ateriaa kohden.\",\"label\":\"Hotelli- ja ravintola-alan ravintoetu\",\"descriptionWithYearlyNumbers\":\"Hotelli- ja ravintola-alan henkilökunnan ja lentohenkilöstön lennon aikana saaman ravintoedun raha-arvona pidetään {{previous.year}} / {{current.year}} {{previous.sideCosts.mealBenefitRestaurantWorkerFormatted}} / {{current.sideCosts.mealBenefitRestaurantWorkerFormatted}} ateriaa kohden.\"},\"taxableAmount\":{\"description\":\"Jos ravintoedun hankkimisesta työnantajalle aiheutuneiden kustannusten määrä on yli tai alle verottajan vuosittain määrittämien rajojen (2021/2022 6,90€ - 10,90€/7,15€ - 11,30€) tai jos etu muuten ylittää rajata (esim. enemmän ruokailuja kuin työpäiviä), edun arvona pidetään suoria kustannuksia / nimellisarvoa.\\nKäytä tätä valintaa myös, jos et halua käyttää automaattista verotusarvon laskentaa muissa kohdissa.\",\"label\":\"Ravintoetu, verotusarvo\",\"descriptionWithYearlyNumbers\":\"Jos ravintoedun hankkimisesta työnantajalle aiheutuneiden kustannusten määrä on yli tai alle verottajan vuosittain määrittämien rajojen ( {{previous.year}} / {{current.year}} {{previous.sideCosts.mealTicketLowerLimitFormatted}} - {{previous.sideCosts.mealTicketUpperLimitFormatted}} / {{current.sideCosts.mealTicketLowerLimitFormatted}} - {{current.sideCosts.mealTicketUpperLimitFormatted}}) tai jos etu muuten ylittää rajata (esim. enemmän ruokailuja kuin työpäiviä), edun arvona pidetään suoria kustannuksia / nimellisarvoa.\\nKäytä tätä valintaa myös, jos et halua käyttää automaattista verotusarvon laskentaa muissa kohdissa.\"},\"teacher\":{\"description\":\"Koulun, päiväkodin tai vastaavan laitoksen henkilökunnan oppilaiden tai hoidettavien ruokailun valvonnan yhteydessä saaman ravintoedun arvo on 2021/2022 4,14€/4,29€ ateriaa kohden.\",\"label\":\"Ruokailu valvonnan yhteydessä\",\"descriptionWithYearlyNumbers\":\"Koulun, päiväkodin tai vastaavan laitoksen henkilökunnan oppilaiden tai hoidettavien ruokailun valvonnan yhteydessä saaman ravintoedun arvo on {{previous.year}} / {{current.year}} {{previous.sideCosts.mealBenefitTeacherFormatted}} / {{current.sideCosts.mealBenefitTeacherFormatted}} ateriaa kohden.\"},\"collectedReimbursement\":{\"description\":\"Jos ravintoedun hankkimisesta työnantajalle aiheutuneiden kustannusten määrä on yli tai alle verottajan vuosittain määrittämien rajojen (2021/2022 6,90€ - 10,90€/7,15€ - 11,30€) tai jos etu muuten ylittää rajata (esim. enemmän ruokailuja kuin työpäiviä), edun arvona pidetään suoria kustannuksia / nimellisarvoa.\\nKäytä tätä valintaa myös, jos et halua käyttää automaattista verotusarvon laskentaa muissa kohdissa.\",\"label\":\"Vain verotusarvoa vastaava vähennys palkasta\",\"descriptionWithYearlyNumbers\":\"Jos ravintoedun hankkimisesta työnantajalle aiheutuneiden kustannusten määrä on yli tai alle verottajan vuosittain määrittämien rajojen ( {{previous.year}} / {{current.year}} {{previous.sideCosts.mealTicketLowerLimitFormatted}} - {{previous.sideCosts.mealTicketUpperLimitFormatted}} / {{current.sideCosts.mealTicketLowerLimitFormatted}} - {{current.sideCosts.mealTicketUpperLimitFormatted}}) tai jos etu muuten ylittää rajata (esim. enemmän ruokailuja kuin työpäiviä), edun arvona pidetään suoria kustannuksia / nimellisarvoa.\\nKäytä tätä valintaa myös, jos et halua käyttää automaattista verotusarvon laskentaa muissa kohdissa.\"},\"undefined\":{\"description\":\"Ei valintaa, oletus \\\"Verotusarvo\\\".\",\"label\":\"Ei valintaa\",\"descriptionWithYearlyNumbers\":\"Ei valintaa\"}},\"MessageType\":{\"email\":{\"label\":\"Sähköposti\"},\"sms\":{\"label\":\"Tekstiviesti\"}},\"NonProfitOrgKind\":{\"accomodationAllowance\":{\"description\":\"Majoittumiskorvaus (tositteen perusteella). \",\"label\":\"Majoittumiskorvaus\"},\"dailyAllowance\":{\"description\":\"Päivärahan voi maksaa enintään 20 päivältä per kalenterivuosi ja lisäksi majoittumiskorvaus (kts alla).\",\"label\":\"Päiväraha\"},\"kilometreAllowance\":{\"description\":\"Matkakustannusten korvaus. Muulla kuin julkisella kulkuneuvolla tehdystä matkasta on verovapaata enintään 3 000 euroa kalenterivuodelta.\",\"label\":\"Kilometrikorvaus\"},\"undefined\":{\"description\":\"Tyyppiä ei määritetty, oletus kilometrikorvaus\",\"label\":\"Tyyppiä ei määritetty\"}},\"OnboardingStatus\":{\"created\":{\"label\":\"Luotu\"},\"done\":{\"label\":\"Valmis\"},\"oplabel\":\"Käynnissä\"},\"OtherCompensationKind\":{\"accruedTimeOffCompensation\":{\"description\":\"Työaikakorvaus, joka maksetaan ansionvähentymisestä, joka aiheutuu työajan tasaamisesta keskimääräiseen viikkotyöaikaan.\",\"label\":\"Työajantasauskorvaus\"},\"capitalIncomePayment\":{\"description\":\"Suoritus, joka on saajalleen pääomatuloa. Tällainen on esimerkiksi työntekijälle tai osakkaalle maksettu korko, kuten palkkasaatavan korko tai pääomatuloa oleva takausprovisio.\",\"label\":\"Pääomatuloa oleva suoritus\"},\"employeeInventionCompensation\":{\"description\":\"Palkkio, joka maksetaan työsuhdekeksinnöstä.\",\"label\":\"Palkkio työsuhdekeksinnöstä\"},\"employeeStockOption\":{\"description\":\"Palkkio, joka annetaan työnantajayrityksen option muodossa.\",\"label\":\"Työsuhdeoptio\"},\"employeeStockOptionWithLowerPrice\":{\"description\":\"Palkkio, joka annetaan työnantajayrityksen option muodossa ja jossa työntekijältä peritty option merkintähinta option luovutusajankohtana on selvästi alhaisempi kuin osakkeen markkinahinta.\",\"label\":\"Työsuhdeoptio, jonka merkintähinta on luovutusajankohtana alhaisempi kuin markkinahinta\"},\"lectureFee\":{\"description\":\"Palkkio, joka maksetaan luennon pitämisestä.\",\"label\":\"Luentopalkkio\"},\"meetingFee\":{\"description\":\"Palkkio, joka maksetaan kokoukseen osallistumisesta.\",\"label\":\"Kokouspalkkio\"},\"membershipOfGoverningBodyCompensation\":{\"description\":\"Luottamustoimipalkkio, joka maksetaan yhteisön hallituksen tai vastaavan hallintoelimen jäsenyyden perusteella.\",\"label\":\"Hallintoelimen jäsenyydestä maksettu palkkio\"},\"monetaryGiftForEmployees\":{\"description\":\"Työnantajalta rahana tai siihen verrattavana suorituksena saatu lahja.\",\"label\":\"Henkilöstölle annettu rahalahja\"},\"otherTaxableIncomeAsEarnedIncome\":{\"description\":\"Tulolajilla ilmoitetaan muiden veronalaisten ansiotuloa olevien suoritusten yhteissumma.\",\"label\":\"Muu veronalainen ansiotulo\"},\"positionOfTrustCompensation\":{\"description\":\"Palkkio, joka maksetaan muusta luottamustoimen hoitamisesta kuin kokouksiin osallistumisesta.\",\"label\":\"Luottamustoimipalkkio\"},\"stockOptionsAndGrants\":{\"description\":\"Palkkio, joka annetaan työnantajayrityksen osakkeina tai sovitun palkkion sijaan rahasummana, joka vastaa osakkeiden arvoa.\",\"label\":\"Osakepalkkio\"},\"undefined\":{\"description\":\"Ei valintaa\",\"label\":\"Ei valintaa\"},\"useCompensationAsCapitalIncome\":{\"description\":\"Korvaus, joka suoritetaan tekijänoikeuden, teollisoikeuden tai teollisia, kaupallisia tai tieteellisiä kokemuksia koskevien tietojen luovuttamisesta tai käyttöoikeudesta.\",\"label\":\"Käyttökorvaus pääomatuloa\"},\"useCompensationAsEarnedIncome\":{\"description\":\"Korvaus, joka suoritetaan tekijänoikeuden, teollisoikeuden tai teollisia, kaupallisia tai tieteellisiä kokemuksia koskevien tietojen luovuttamisesta tai käyttöoikeudesta.\",\"label\":\"Käyttökorvaus ansiotuloa\"},\"workEffortBasedDividendsAsNonWage\":{\"description\":\"Osakkaalle työkorvauksena maksettava osinko, jonka jakoperusteena on osingonsaajan tai tämän intressipiiriin kuuluvan henkilön työpanos.\",\"label\":\"Työpanokseen perustuva osinko tai ylijäämä (työkorvaus)\"},\"workEffortBasedDividendsAsWage\":{\"description\":\"Osakkaalle palkkana maksettava osinko, jonka jakoperusteena on osingonsaajan tai tämän intressipiiriin kuuluvan henkilön työpanos.\",\"label\":\"Työpanokseen perustuva osinko tai ylijäämä (palkka)\"},\"copyrightRoyaltiesEarnedIncome\":{\"description\":\"Korvaus, joka maksetaan kirjallisen tai taiteellisen teoksen tekijänoikeuden luovuttamisesta tai tekijänoikeuden kohteen käyttöoikeudesta. Korvaus voidaan maksaa myös tekijänoikeuden lähioikeuden luovuttamisesta tai lähioikeuksilla suojatun kohteen käyttämisestä. Tekijänoikeus voidaan luovuttaa sopimuksen perusteella osittain tai kokonaan.\",\"label\":\"Tekijänoikeuskorvaus ansiotuloa\"},\"stockGrantPaidInMoney\":{\"description\":\"Osakepalkkio, joka maksetaan rahana. Tulolajilla ilmoitetaan vain se osuus osakepalkkiosta, joka maksetaan rahana. Osakkeina annettava osuus ilmoitetaan tulolajilla Osakepalkkio (320).\",\"label\":\"Rahana maksettu osakepalkkio\"},\"employeeStockOptionPaidInMoney\":{\"description\":\"Työsuhdeoptio, joka maksetaan rahana. Tulolajilla ilmoitetaan vain se osuus työsuhdeoptiosta, joka maksetaan rahana. Muuna kuin rahana annettava osuus ilmoitetaan tulolajilla Työsuhdeoptio (343). Tarvittaessa käytetään myös tulolajia Työsuhdeoptio, jonka merkintähinta on luovutusajankohtana alempi kuin markkinahinta (361).\",\"label\":\"Rahana maksettu työsuhdeoptio\"}},\"PalkkausCampaignPricing\":{\"campaignAfterFirstUse\":{\"label\":\"Campaign After First Use\"},\"campaignFirstUse\":{\"label\":\"Campaign First Use\"},\"companyFreeTrial\":{\"label\":\"Company Free Trial\"}},\"PartnerSite\":{\"careDotCom\":{\"label\":\"Care Dot Com\"},\"palkkaapakolainlabel\":\"Palkkaapakolainen\",\"palkkausEmployerFillIn\":{\"label\":\"Palkkaus Employer Fill In\"},\"palkkausIdentified\":{\"label\":\"Palkkaus Identified\"},\"refugeeJobs\":{\"label\":\"Refugee Jobs\"}},\"PaymentChannel\":{\"undefined\":{\"description\":\"Maksutapaa ei ole määritetty. Tyypillisesti tämä on virhetilanne.\",\"label\":\"Valitse maksutapa...\"},\"test\":{\"description\":\"Maksumenetelmä testaamiseen. Erilliset laskut (nettopalkka, ennakonpidätys jne.) Toimii vain testiympäristössä.\",\"label\":\"Testimaksu\"},\"zeroPayment\":{\"description\":\"Maksun summa on nolla. Tätä maksua ei lähetetä maksukanavaan, vaan se merkitään suoraan maksetuksi.\",\"label\":\"Nollamaksu (ei maksettavaa)\"},\"external\":{\"description\":\"Maksu on jo maksettu Palkkaus.fi palvelun ulkopuolella (tai tullaan maksamaan). Maksusta tehdään kuitenkin ilmoitus tulorekisteriin.\",\"label\":\"Jo maksettu / ulkopuolinen\"},\"palkkausManual\":{\"description\":\"Maksuaineisto luodaan erillisinä laskuina Maksut-listaan. Sieltä ne voidaan tulostaa PDF-tiedostona, kopoida verkkopankkiin tai ladata SEPA-maksuaineistona.\",\"label\":\"Maksuaineiston luonti\"},\"palkkausWS\":{\"description\":\"Palkasta, ennakonpidätyksestä jne. luodaan erilliset laskut ja ne lähetetään pankkien WS-kanavaan. Vaatii sopimuksen pankin kanssa.\",\"label\":\"Maksut suoraan pankkiin\"},\"palkkausPSD\":{\"description\":\"Palkasta, ennakonpidätyksestä jne. luodaan erilliset PSD maksut.\",\"label\":\"PSD maksut\"},\"palkkausPersonal\":{\"description\":\"Maksut luodaan erillisinä laskuina Maksut-listaan. Sieltä ne voidaan tulostaa PDF-tiedostona tai kopioida verkkopankkiin.\",\"label\":\"Maksujen luonti\"},\"palkkausInvoices\":{\"description\":\"Laskujen luonti palkkalaskelmista.\",\"label\":\"Laskujen luonti\"},\"kitsas\":{\"description\":\"Laskujen luonti palkkalaskelmista.\",\"label\":\"Kitsas\"},\"palkkausCfaPaytrail\":{\"description\":\"Nettopalkka ja ennakonpidätys yhdellä helpolla verkkomaksulla Palkkaus.fi-asiakasvaratilin kautta.\",\"label\":\"Paytrail verkkomaksu (yksi maksu)\"},\"palkkausCfaReference\":{\"description\":\"PDF-paperilasku, jonka voit maksaa missä tahansa verkkopankissa tai ohjelmassa. Nettopalkka ja ennakonpidätys yhdessä laskussa Palkkaus.fi-asiakasvaratilin kautta.\",\"label\":\"Yksi tilisiirto viitenumerolla\"},\"palkkausCfaFinvoice\":{\"description\":\"Lähetä itsellesi verkkolasku, jossa palkka ja ennakonpidätys on yhdessä helpossa laskussa. Maksa esim. kirjanpito-ohjelmassasi. Maksu tapahtuu Palkkaus.fi:n asiakasvaratilin kautta.\",\"label\":\"Verkkolasku (yksi maksu)\"},\"palkkausEcfaPaytrail\":{\"description\":\"Nettopalkka ja ennakonpidätys yhdellä helpolla verkkomaksulla Palkkaus.fi-asiakasvaratilin kautta.\",\"label\":\"Paytrail verkkomaksu (yksi maksu)\"},\"palkkausEcfaReference\":{\"description\":\"PDF-paperilasku, jonka voit maksaa missä tahansa verkkopankissa tai ohjelmassa. Nettopalkka ja ennakonpidätys yhdessä laskussa Palkkaus.fi-asiakasvaratilin kautta.\",\"label\":\"Yksi tilisiirto viitenumerolla\"},\"palkkausEcfaFinvoice\":{\"description\":\"Lähetä itsellesi verkkolasku, jossa palkka ja ennakonpidätys on yhdessä helpossa laskussa. Maksa esim. kirjanpito-ohjelmassasi. Maksu tapahtuu Palkkaus.fi:n asiakasvaratilin kautta.\",\"label\":\"Verkkolasku (yksi maksu)\"},\"palkkausCfaTest\":{\"description\":\"Testimaksu asiakasvaratilin kautta (yksi maksu). Toimii vain testiympäristössä.\",\"label\":\"Asiakasvaratilin testimaksu\"},\"accountorGo\":{\"description\":\"Laskujen lähetys suoraan Accountor Go -palveluun. Käytössä vain Accountor Go -palvelun kautta.\",\"label\":\"Accountor Go\"},\"talenomCfa\":{\"description\":\"Laskujen lähetys Talenom Online -palveluun verkkolaskuna. Käytössä vain Talenom Online -palvelun kautta.\",\"label\":\"Talenom verkkolasku\"},\"talenomOnline\":{\"description\":\"Laskujen lähetys suoraan Easor App -sovellukseen. Käytössä vain Easor App -sovelluksen kautta.\",\"label\":\"Easor App\"},\"holviCfa\":{\"description\":\"Palkka, ennakonpidätys ja työeläke yhdellä helpolla Holvi-maksulla Palkkaus.fi asiakasvaratilin kautta. Käytössä vain Holvi-palvelun kautta.\",\"label\":\"Holvi\"},\"finagoSolo\":{\"description\":\"Laskujen lähetys Finago Soloon. Käytössä vain Finago Solo -palvelun kautta.\",\"label\":\"Finago Solo\"},\"procountor\":{\"description\":\"Laskujen lähetys Procountoriin\",\"label\":\"Procountor\"},\"kevytyrittaja\":{\"description\":\"Laskujen lähetys Talenom Kevytyrittäjä -palveluun. Käytössä vain Talenom Kevytyrittäjä -sovelluksen kautta.\",\"label\":\"Kevytyrittäjä\"},\"vismaNetvisor\":{\"description\":\"Laskujen lähetys Visma Netvisor -ohjelmistoon\",\"label\":\"Visma Netvisor\"},\"askelma\":{\"description\":\"Laskujen lähetys Askelma -ohjelmistoon\",\"label\":\"Askelma\"},\"briox\":{\"description\":\"Laskujen lähetys Briox -ohjelmistoon\",\"label\":\"Briox\"},\"lemonaid\":{\"description\":\"Laskujen lähetys Lemonaid -ohjelmaan\",\"label\":\"Lemonaid\"},\"laskupiste\":{\"description\":\"Laskujen lähetys Laskupisteelle\",\"label\":\"Laskupiste\"},\"passeliMerit\":{\"description\":\"Laskujen lähetys Passeli Meritiin\",\"label\":\"Passeli Merit\"},\"odoo\":{\"description\":\"Laskujen lähetys Odoon\",\"label\":\"Odoo\"},\"hausvise\":{\"description\":\"Hausvise maksuaineiston luonti\",\"label\":\"Hausvise\"},\"ecom\":{\"description\":\"Laskujen lähetys Ecomiin\",\"label\":\"Ecom\"},\"kompassi\":{\"description\":\"Laskujen lähetys Kompassiin\",\"label\":\"Kompassi\"},\"domus\":{\"description\":\"Laskujen lähetys Domukseen\",\"label\":\"Domus\"},\"holvi\":{\"description\":\"Laskujen lähetys Holviin\",\"label\":\"Holvi-tili\"},\"talenomManual\":{\"description\":\"Maksuaineisto luodaan erillisinä laskuina Maksut-listaan. Sieltä ne voidaan tulostaa PDF-tiedostona, kopoida verkkopankkiin tai ladata SEPA-maksuaineistona.\",\"label\":\"Easor maksuaineiston luonti\"}},\"PaymentStatus\":{\"bankDelivered\":{\"label\":\"Pankki hyväksynyt\"},\"bankError\":{\"label\":\"Virhe pankissa\"},\"bankPartialError\":{\"label\":\"Virhe pankissa\"},\"bankTechApproval\":{\"label\":\"Pankki vastaanottanut\"},\"cancelled\":{\"label\":\"Peruttu\"},\"new\":{\"label\":\"Uusi\"},\"paid\":{\"label\":\"Maksettu\"},\"sentToBank\":{\"label\":\"Lähetetty pankkiin\"},\"unknown\":{\"label\":\"Tuntematon\"}},\"PayrollStatus\":{\"draft\":{\"label\":\"Luonnos\"},\"paymentCanceled\":{\"label\":\"Maksu peruttu\"},\"paymentError\":{\"label\":\"Virheitä\"},\"paymentStarted\":{\"label\":\"Maksu aloitettu\"},\"paymentSucceeded\":{\"label\":\"Maksettu\"},\"template\":{\"label\":\"Toistuva palkkalista\"},\"handled\":{\"label\":\"Hoidettu\"},\"waitingApproval\":{\"label\":\"Yrityksen tarkistuksessa\"},\"paymentAllowed\":{\"label\":\"Valmis maksuun\"},\"waitingPartnerApproval\":{\"label\":\"Tilitoimiston käsittelyssä\"}},\"PensionCalculation\":{\"athlete\":{\"label\":\"Urheilijan eläke\",\"labelWithEnumLabel\":\"Työeläkesopimus: Urheilijan eläke\",\"labelForIncome\":\"Urheilijan eläkkeen alaista\"},\"boardRemuneration\":{\"label\":\"Hallituspalkkio\",\"labelWithEnumLabel\":\"Työeläkesopimus: Ei (hallituspalkkio)\",\"labelForIncome\":\"Hallituspalkkio\"},\"compensation\":{\"label\":\"Työkorvaus\",\"labelWithEnumLabel\":\"Työeläkesopimus: Ei (työkorvaus)\",\"labelForIncome\":\"Työkorvaus\"},\"employee\":{\"label\":\"TyEL\",\"labelWithEnumLabel\":\"Työeläkesopimus: TyEL\",\"labelForIncome\":\"TyEL:n alaista\"},\"entrepreneur\":{\"label\":\"YEL\",\"labelWithEnumLabel\":\"Työeläkesopimus: YEL\",\"labelForIncome\":\"YEL:n alaista\"},\"farmer\":{\"label\":\"MYEL\",\"labelWithEnumLabel\":\"Työeläkesopimus: MyEL\",\"labelForIncome\":\"MYEL:n alaista\"},\"partialOwner\":{\"description\":\"Osaomistajan palkka\\r\\nYrityksen osaomistajat maksavat pienempää palkansaajan työttömyysvakuutusmaksua kuin työntekijät.\\r\\n•\\tOsaomistajan työnantajan työttömyysvakuutusmaksu on 0,5 % palkkasummasta.\\r\\n•\\tPalkansaajan, joka on myös osaomistaja, työttömyysvakuutusmaksuprosentti on 0,78 %. Työnantaja pidättää sen palkasta palkanmaksun yhteydessä.\\r\\nJos et ole ole yrityksessä johtavassa asemassa, mutta työskentelet yrityksessä tai yhteisössä, olet osaomistaja, jos jokin seuraavista ehdoista täyttyy: \\r\\n•\\tsinulla itselläsi on vähintään 50 % kyseisen yrityksen tai yhteisön osakepääomasta, äänivallasta tai muusta määräämisvallasta \\r\\n•\\tperheenjäsenelläsi on vähintään 50 % kyseisen yrityksen tai yhteisön osakepääomasta, äänivallasta tai muusta määräämisvallasta\\r\\n•\\tsinulla on yhdessä perheenjäsentesi kanssa vähintään 50 % osakepääomasta, äänivallasta tai muusta määräämisvallasta. \\r\\nJos olet johtavassa asemassa mutta et ole yrittäjä, voit olla työttömyysturvalain mukaan osaomistaja, jos työskentelet yrityksessä ja jompikumpi seuraavista ehdoista täyttyy:\\r\\n•\\tsinulla on vähintään 15 % osakepääomasta, äänivallasta tai muusta määräämisvallasta\\r\\n•\\tperheenjäsenilläsi tai teillä yhdessä on vähintään 30 % osakepääomasta, äänivallasta tai muusta määräämisvallasta\\r\\nTyöllisyysrahaston sivulla voi testata onko osaomistaja vai palkansaaja\\r\\nhttps://www.tyollisyysrahasto.fi/tyottomyysvakuusmaksut/tyottomyysvakuutusmaksuvelvollisuus/#osaomistaja\\r\\nOsaomistajan käsite on määritelty työttömyysturvalaissa (1290/2002). \\r\\n\",\"label\":\"TyEL, osaomistaja\",\"labelWithEnumLabel\":\"Työeläkesopimus: TyEL, osaomistaja\",\"labelForIncome\":\"TyEL:n alaista, osaomistaja\"},\"smallEntrepreneur\":{\"description\":\"Valitse sovellettavan eläketurvan tavaksi “YEL, ei vakuuttamisvelvollisuutta”, jos olet yrittäjä, mutta sinulla ei ole velvoitetta ottaa YEL-vakuutusta. Tällöin ei myöskään makseta palkan sivukuluja, kuten sairausvakuutusmaksua. Jos et tiedä oletko YEL-velvollinen, voit kysyä sitä suoraan työeläkeyhtiöltä.\",\"label\":\"YEL, ei vakuuttamisvelvollisuutta\",\"labelWithEnumLabel\":\"Työeläkesopimus: YEL, ei vakuuttamisvelvollisuutta\",\"labelForIncome\":\"YEL, ei vakuuttamisvelvollisuutta\"},\"smallFarmer\":{\"description\":\"Tulonsaaja täyttää maatalousyrittäjän eläkelain 3 §:ssä säädetyt edellytykset, mutta jolla ei ole mainitun lain perusteella vakuuttamisvelvollisuutta.\\n\\nVakuuttamisvelvollisuus ei koske:\\n1) maatalousyrittäjän toimintaa ennen 18 vuoden iän täyttämistä seuraavan kalenterikuukauden alkua eikä toimintaa, joka jatkuu sen kalenterikuukauden jälkeen, jolloin vuonna 1957 tai sitä ennen syntynyt maatalousyrittäjä täyttää 68 vuotta, vuosina 1958–1961 syntynyt maatalousyrittäjä täyttää 69 vuotta ja vuonna 1962 ja sen jälkeen syntynyt maatalousyrittäjä täyttää 70 vuotta (vakuuttamisvelvollisuuden yläikäraja); (29.1.2016/75)\\n2) maatalousyrittäjän toimintaa, joka ei ole jatkunut 18 vuoden iän täyttämistä seuraavan kalenterikuukauden alun jälkeen yhdenjaksoisesti vähintään neljää kuukautta;\\n3) maatalousyrittäjän toimintaa, joka on alkanut tai jatkunut sen jälkeen, kun hän on siirtynyt työeläkelakien mukaiselle vanhuuseläkkeelle;\\n4) maatalousyrittäjää, jonka työtulo tässä laissa tarkoitetusta maatalousyrittäjätoiminnasta on arvioitava pienemmäksi kuin 2 752,07 euroa vuodessa;\\n5) maatilatalouden, kalastuksen tai poronhoidon yhteydessä harjoitettua toimintaa, jota on pidettävä eri yrityksenä;\\n6) ansiotyötä, jonka perusteella maatalousyrittäjällä on oikeus eläkkeeseen muun työeläkelain mukaan; eikä\\n7) maatalousyrittäjää, johon ei sovelleta Suomen lainsäädäntöä EU:n sosiaaliturvan perusasetuksen tai sosiaaliturvasopimuksen sovellettavaa lainsäädäntöä koskevien määräysten perusteella. (14.5.2010/357)\\n\\nVakuuttamisvelvollisuus ei koske apurahansaajan työtä:\\n1) ennen 18 vuoden iän täyttämistä seuraavan kalenterikuukauden alkua, eikä työtä, joka jatkuu sen kalenterikuukauden jälkeen, jolloin vuonna 1957 tai sitä ennen syntynyt apurahansaaja täyttää 68 vuotta, vuosina 1958–1961 syntynyt apurahansaaja täyttää 69 vuotta ja vuonna 1962 ja sen jälkeen syntynyt apurahansaaja täyttää 70 vuotta (vakuuttamisvelvollisuuden yläikäraja); (29.1.2016/75)\\n2) joka ei ole jatkunut 18 vuoden iän täyttämistä seuraavan kalenterikuukauden alun jälkeen yhdenjaksoisesti vähintään neljä kuukautta;\\n3) joka on alkanut tai jatkunut sen jälkeen, kun hän on siirtynyt työeläkelakien mukaiselle vanhuuseläkkeelle;\\n4) ajalta, jona apurahansaajalle arvioitava vuotuinen työtulo on pienempi kuin 2 752,07 euroa;\\n5) jos apurahansaajaan ei sovelleta Suomen sosiaaliturvalainsäädäntöä EU:n sosiaaliturvan perusasetuksen tai sosiaaliturvasopimuksen sovellettavaa lainsäädäntöä koskevien määräysten perusteella. (14.5.2010/357)\",\"label\":\"MYEL, ei vakuuttamisvelvollisuutta\",\"labelWithEnumLabel\":\"Työeläkesopimus: MYEL, ei vakuuttamisvelvollisuutta\",\"labelForIncome\":\"MYEL, ei vakuuttamisvelvollisuutta\"},\"publicSector\":{\"label\":\"JuEL\",\"labelWithEnumLabel\":\"Työeläkesopimus: JuEL\",\"labelForIncome\":\"JuEL:n alaista\"},\"undefined\":{\"label\":\"(Ei valittu vielä)\",\"labelWithEnumLabel\":\"Työeläkesopimus: Ei valittu\",\"labelForIncome\":\"Ei eläkevalintaa\"}},\"PensionCompany\":{\"apteekkien\":{\"label\":\"Apteekkien Eläkekassa\"},\"elo\":{\"label\":\"Elo\"},\"etera\":{\"label\":\"Etera\"},\"ilmarinen\":{\"label\":\"Ilmarinen\"},\"none\":{\"label\":\"Ei yhtiötä\"},\"other\":{\"label\":\"Muu yhtiö\"},\"pensionsAlandia\":{\"label\":\"Alandia\"},\"valio\":{\"label\":\"Valion Eläkekassa\"},\"varma\":{\"label\":\"Varma\"},\"veritas\":{\"label\":\"Veritas\"},\"verso\":{\"label\":\"Verso\"},\"kevaMunicipal\":{\"label\":\"Keva - kunta\"},\"kevaAland\":{\"label\":\"Keva - Ahvenanmaa\"},\"kevaChurch\":{\"label\":\"Keva - kirkko\"},\"kevaKela\":{\"label\":\"Keva - Kela\"},\"kevaState\":{\"label\":\"Keva - valtio\"}},\"PeriodType\":{\"custom\":{\"label\":\"Muu periodi\"},\"month\":{\"label\":\"Kuukausi\"},\"quarter\":{\"label\":\"Neljännesvuosi\"},\"year\":{\"label\":\"Kalenterivuosi\"}},\"PricingModel\":{\"fixedFee\":{\"label\":\"Kiinteä palkkio\"},\"noFee\":{\"label\":\"Ei palkkiota\"},\"palkkausFee\":{\"label\":\"Palkkaus.fi-palkkio\"}},\"Product\":{\"accounting\":{\"description\":\"Palkkalaskelmien tiedot helposti kirjanpitäjälle\",\"label\":\"Kirjanpitoraportit\",\"status\":\"Ei käytössä\"},\"baseService\":{\"description\":\"Digiajan palkanmaksupalvelu\",\"label\":\"Palkkaus.fi-tili\",\"status\":\"Palkkaamisen peruspalvelut\"},\"healthCareHeltti\":{\"description\":\"Tuottavammat ja terveemmät työntekijät\",\"label\":\"Työterveyshuolto\",\"status\":\"Ei sopimusta\"},\"insurance\":{\"description\":\"Tapaturmavakuutus vakuuttaa työntekijäsi\",\"label\":\"Työtapaturmavakuutus\",\"status\":\"Ei sopimusta. HUOM: työnantajan 1500 € :n vuosisääntö!\"},\"pension\":{\"description\":\"TyEL-vakuutus on työntekijän eläketurva\",\"label\":\"TyEL-eläkevakuutus\",\"status\":\"Ei sopimusta: TyEL maksetaan tilapäisenä työnantajana\"},\"pensionEntrepreneur\":{\"description\":\"YEL-vakuutus on yrittäjän eläketurva\",\"label\":\"Yrittäjän eläke\",\"status\":\"Ei YEL-sopimusta\"},\"tax\":{\"description\":\"Ennakonpidätykset ja sava-maksu\",\"label\":\"Yhteydet verottajaan\",\"status\":\"Ennakonpidätys ja ilmoitukset\"},\"taxCard\":{\"description\":\"Työntekijän verokortti ja sen käsittely\",\"label\":\"Verokortti (TT)\",\"status\":\"Ei verokorttia\"},\"unemployment\":{\"description\":\"Työttömyysturva rahoitetaan TVR-maksuilla\",\"label\":\"Työttömyysvakuutus (TVR)\",\"status\":\"Ilmoitukset TVR:lle\",\"statusTVR\":\"Ilmoitukset TVR:lle\"}},\"ProductListFilter\":{\"all\":{\"label\":\"All products, even the currently non-available.\"},\"available\":{\"label\":\"Available products for this user\"}},\"RemunerationKind\":{\"bonusPay\":{\"description\":\"Kertaluonteinen palkkiopalkka, jonka suuruus määräytyy kokonaan tai osittain sen mukaan, kuinka hyvin tavoitteeksi asetettu työtulos saavutetaan. Työtuloksen mittana voi olla määrä, laatu tai jokin muu tulostekijä.\",\"label\":\"Bonuspalkka\"},\"commission\":{\"description\":\"Pysyvän palkan osan muodostava jatkuvaluonteinen palkkiopalkka, jonka määrästä on sovittu työsopimuksessa.\",\"label\":\"Provisiopalkka\"},\"initiativeFee\":{\"description\":\"Kertapalkkio, joka maksetaan aloitteen tekijälle esimerkiksi toiminnan tai tuotteen kehittämiseen liittyvästä aloitteesta.\",\"label\":\"Aloitepalkkio\"},\"performanceBonus\":{\"description\":\"Palkka, joka maksetaan organisaation ennalta sovitun tulostavoitteen täyttymisen tai ylittymisen perusteella.\",\"label\":\"Tulospalkkio\"},\"profitSharingBonus\":{\"description\":\"Työntekijöille ilman ennalta sovittua suunnitelmaa yhtiökokouksen päätöksellä jaettava palkkio, joka muodostuu yrityksen voiton perusteella.\",\"label\":\"Voittopalkkio\"},\"shareIssueForEmployees\":{\"description\":\"Yhtiön omalle henkilökunnalle suunnattu osakeanti. Etu työsuhteeseen perustuvasta oikeudesta merkitä työnantajayrityksen osakkeita on veronalaista ansiotuloa.\",\"label\":\"Työsuhteeseen perustuva osakeanti\"},\"undefined\":{\"description\":\"Ei valintaa\",\"label\":\"Ei valintaa\"}},\"ReportType\":{\"employerReport\":{\"label\":\"Työnantajan laskelma\"},\"employmentContract\":{\"label\":\"Työsopimus\"},\"example\":{\"label\":\"Esimerkki\"},\"householdDeduction\":{\"label\":\"Kotitalousvähennys\"},\"insurance\":{\"label\":\"Vakuutus\"},\"monthlyDetails\":{\"label\":\"Kuukausittaisia tietoja\"},\"monthlyLiikekirjuri\":{},\"monthlyPension\":{\"label\":\"Kuukausittainen eläke\"},\"monthlyRapko\":{},\"paymentReport\":{\"label\":\"Maksuraportti\"},\"paymentSummaryReport\":{\"label\":\"Maksuraportti (kooste)\"},\"salarySlip\":{\"label\":\"Työntekijän palkkalaskelma\"},\"salarySlipPaid\":{\"label\":\"Työntekijän palkkalaskelma, maksettu\"},\"taxHouseholdDeduction14B\":{},\"taxHouseholdDeduction14BSpouseA\":{},\"taxHouseholdDeduction14BSpouseB\":{},\"taxMonthly4001\":{\"label\":\"Kuukausittainen vero\"},\"taxYearly7801\":{\"label\":\"Vuosittainen vero\"},\"undefined\":{\"label\":\"Ei määritelty\"},\"unemployment\":{\"label\":\"Työttömyys\"},\"yearEndReport\":{\"label\":\"Loppuvuoden raportti\"},\"yearlyDetails\":{\"label\":\"Vuosittaisia tietoja\"},\"yearlyWorkerSummary\":{},\"accountingReport\":{\"label\":\"Kirjanpitoaineisto\"},\"eSalarySpecification\":{\"label\":\"Verkkopalkka\"},\"totalsReport\":{\"label\":\"Tarkastusraportti\"}},\"SalaryKind\":{\"compensation\":{\"label\":\"Korvaus\",\"labels\":{\"household\":\"Työkorvaus\"}},\"fixedSalary\":{\"label\":\"Kiinteä palkka\"},\"hourlySalary\":{\"label\":\"Tuntipalkka\"},\"monthlySalary\":{\"label\":\"Kuukausipalkka\"},\"salary\":{\"label\":\"Urakkapalkka\"},\"totalEmployerPayment\":{},\"totalWorkerPayment\":{},\"undefined\":{\"label\":\"Ei määritelty\"}},\"SalaryPeriod\":{\"notDefined\":{\"label\":\"Not Defined\"}},\"SalaryPerMonthRange\":{\"noPensionRequired\":{\"label\":\"Alle 57,10 €\"},\"normal\":{\"label\":\"57,10 € tai yli\"},\"unknown\":{\"label\":\"Ei tiedossa\"}},\"SalaryPerYearRange\":{\"noMonthlyReporting\":{\"label\":\"201 - 1500 €\"},\"noReportingNecessary\":{\"label\":\"1 - 200 €\"},\"normal\":{\"label\":\"Yli 1500 €\"},\"zeroSalary\":{}},\"ServiceModel\":{\"partnerOnly\":{\"label\":\"Tilitoimistokäyttö\"},\"shared\":{\"label\":\"Yhteiskäyttö\"}},\"SubsidisedCommuteKind\":{\"noDeduction\":{\"description\":\"Ei vähennystä työntekijän palkasta\",\"label\":\"Ei vähennystä\"},\"periodicalDeduction\":{\"description\":\"Vähennys työntekijän palkasta jaetaan palkkakausiin (oletus 12 kuukautta).\",\"label\":\"Vähennys jaetaan palkkakausille\"},\"singleDeduction\":{\"description\":\"Vähennys työntekijän palkasta otetaan kerralla (tästä palkkalaskelmasta)\",\"label\":\"Vähennys palkasta kerralla\"},\"undefined\":{\"description\":\"Ei valintaa, oletus \\\"Ei vähennystä\\\"\",\"label\":\"Ei valintaa\"}},\"BicycleBenefitKind\":{\"noDeduction\":{\"description\":\"Ei vähennystä työntekijän palkasta\",\"label\":\"Ei vähennystä\"},\"periodicalDeduction\":{\"description\":\"Vähennys työntekijän palkasta jaetaan palkkakausiin (oletus 12 kuukautta).\",\"label\":\"Vähennys jaetaan palkkakausille\"},\"singleDeduction\":{\"description\":\"Vähennys työntekijän palkasta otetaan kerralla (tästä palkkalaskelmasta)\",\"label\":\"Vähennys palkasta kerralla\"},\"undefined\":{\"description\":\"Ei valintaa, oletus \\\"Ei vähennystä\\\"\",\"label\":\"Ei valintaa\"}},\"TaxCardIncomeType\":{\"externalSalaries\":{\"label\":\"Ulkopuoliset palkat\"},\"previousEmployerSalaries\":{\"description\":\"Merkitse tähän työntekijän edellisten työnantajien kuluvana verovuonna maksamat palkat yhteensä euroina.\",\"label\":\"Edellisten työnantajien maksamat palkat\"},\"salaxyCalculation\":{\"label\":\"Salaxy laskelma\"},\"unknown\":{\"label\":\"Tuntematon\"}},\"TaxcardKind\":{\"defaultYearly\":{\"label\":\"Alkuperäinen verokortti\"},\"auto\":{\"label\":\"Automaattisesti päivittyvä verokortti\"},\"historical\":{\"label\":\"Vanha verokortti\"},\"noTaxCard\":{\"label\":\"Ei verokorttia (60%)\"},\"noWithholdingHousehold\":{\"label\":\"Ei ennakonpidätystä (alle 1500€)\"},\"others\":{\"label\":\"Muu verokortti\"},\"replacement\":{\"label\":\"Muutosverokortti\"},\"undefined\":{\"label\":\"Verokorttia ei ole määritetty\"}},\"TaxcardState\":{\"employerAdded\":{\"label\":\"Työnantajan lisäämä\"},\"expired\":{\"label\":\"Vanhentunut\"},\"new\":{\"label\":\"Uusi verokortti\"},\"replaced\":{\"label\":\"Korvattu (ei käytössä)\"},\"shared\":{\"label\":\"Työntekijän jakama\"},\"sharedApproved\":{\"label\":\"Työnantajan hyväksymä\"},\"sharedRejected\":{\"label\":\"Työnantaja hylännyt\"},\"sharedRejectedWithoutOpen\":{\"label\":\"Työnantaja hylännyt avaamatta\"},\"sharedWaiting\":{\"label\":\"Odottaa hyväksyntää\"},\"verifiedVero\":{\"label\":\"Haettu Verolta\"}},\"TaxcardValidity\":{\"expired\":{\"label\":\"Vanhentunut\"},\"future\":{\"label\":\"Tuleva\"},\"undefined\":{\"label\":\"Virhe\"},\"valid\":{\"label\":\"Voimassa\"},\"validJanuary\":{\"label\":\"Tammikuun voimassa\"}},\"TaxDeductionWorkCategories\":{\"carework\":{\"label\":\"Hoiva- tai hoitotyö\"},\"homeImprovement\":{\"label\":\"Asunnon kunnossapito- tai perusparannustyö\"},\"householdwork\":{\"label\":\"Kotitaloustyö\"},\"none\":{\"label\":\"Ei valintaa\"},\"ownPropety\":{\"label\":\"Omassa käytössä oleva asunto tai vapaa-ajan asunto\"},\"relativesProperty\":{\"label\":\"Vanhempien, isovanhempien yms. käytössä oleva asunto tai vapaa-ajan asunto.\"}},\"TesSubtype\":{\"constructionCarpenter\":{\"label\":\"Construction Carpenter\"},\"constructionFloor\":{\"label\":\"Construction Floor\"},\"constructionFreeContract\":{\"label\":\"Construction Free Contract\"},\"constructionOther\":{\"label\":\"Construction Other\"},\"notSelected\":{\"label\":\"Not Selected\"}},\"TestEnum\":{\"valueEight\":{\"label\":\"Value Eight\"},\"valueFive\":{\"label\":\"Value Five\"},\"valueFour\":{\"label\":\"Value Four\"},\"valueNine\":{\"label\":\"Value Nine\"},\"valueOne\":{\"label\":\"Value One\"},\"valueSevlabel\":\"Value Seven\",\"valueSix\":{\"label\":\"Value Six\"},\"valueThree\":{\"label\":\"Value Three\"},\"valueTlabel\":\"Value Ten\",\"valueTwo\":{\"label\":\"Value Two\"},\"valueZero\":{\"label\":\"Value Zero\"}},\"UnionPaymentKind\":{\"fixed\":{\"description\":\"Yleinen kiinteä AY-jäsenmaksu.\",\"label\":\"AY-jäsenmaksu, kiinteä summa\"},\"percentage\":{\"description\":\"Yleinen jäsenmaksu, lasketaan %-osuudella palkasta.\",\"label\":\"AY-jäsenmaksu, %-osuus palkasta\"},\"percentageAndLimits\":{\"description\":\"Yleinen jäsenmaksu, lasketaan %-osuudella palkasta annetuissa rajoissa.\",\"label\":\"AY-jäsenmaksu, %-osuus palkasta annetuissa rajoissa\"},\"other\":{\"description\":\"Muu liitto\",\"label\":\"AY-jäsenmaksu, muu liitto\"},\"raksaNormal\":{\"description\":\"Rakennusliiton normaalijäsenyys\",\"label\":\"AY-jäsenmaksu, Rakennusliitto A-jäsen\"},\"raksaUnemploymentOnly\":{\"description\":\"Rakennusliiton jäsenyys vain työttömyyskassassa\",\"label\":\"AY-jäsenmaksu, Rakennusliitto OA- tai TA-jäsen\"},\"undefined\":{\"description\":\"AY-jäsenmaksun tyyppiä ei valittu\",\"label\":\"Ei jäsenyyttä\"}},\"UnionPaymentType\":{\"notSelected\":{\"label\":\"Ei jäsenyyttä\"},\"other\":{\"label\":\"Muu liitto...\"},\"raksaNormal\":{\"label\":\"Rakennusliitto, A-jäsen\"},\"raksaUnemploymentOnly\":{\"label\":\"Rakennusliitto, OA- tai TA-jäsen\"}},\"WageBasis\":{\"hourly\":{\"label\":\"Tuntipalkka\"},\"monthly\":{\"label\":\"Kuukausipalkka\"},\"other\":{\"label\":\"Muu\"},\"performanceBased\":{\"label\":\"Suorituspalkka\"},\"undefined\":{\"label\":\"Valitse...\"}},\"WebSiteUserRole\":{\"company\":{\"label\":\"Yrittäjä\"},\"household\":{\"label\":\"Työnantaja (kotitalous)\"},\"none\":{\"label\":\"Valitse rooli...\"},\"worker\":{\"label\":\"Työntekijä\"}},\"TotalWorkerPaymentKind\":{\"totalWorkerPayment\":{\"description\":\"Rahapalkka ja kulukorvaukset\",\"label\":\"Rahapalkka ja kulukorvaukset\"},\"totalWorkerWorkerPaymentExcludingExpenses\":{\"description\":\"Rahapalkka, ei sisällä kulukorvauksia\",\"label\":\"Rahapalkka, ei sisällä kulukorvauksia\"},\"totalWorkerPaymentAndTax\":{\"description\":\"Rahapalkka ja ennakonpidätys\",\"label\":\"Rahapalkka ja ennakonpidätys\"},\"totalWorkerWorkerPaymentAndTaxExcludingExpenses\":{\"description\":\"Rahapalkka ja ennakonpidätys, ei sisällä kulukorvauksia\",\"label\":\"Rahapalkka ja ennakonpidätys, ei sisällä kulukorvauksia\"},\"undefined\":{\"description\":\"Ei valintaa\",\"label\":\"Ei valintaa\"}},\"WorkingTimeCompensationKind\":{\"emergencyWorkCompensation\":{\"description\":\"Työaikakorvaus, joka maksetaan hätätyöstä. Hätätyöllä tarkoitetaan hätätilanteessa säännöllisen työajan ylittävänä aikana teetettävää työtä.\",\"label\":\"Hätätyökorvaus\"},\"eveningShiftAllowance\":{\"description\":\"Vuorotyökorvaus, joka maksetaan iltavuorosta.\",\"label\":\"Iltavuorolisä\"},\"eveningWorkCompensation\":{\"description\":\"Työaikakorvaus, joka maksetaan iltatyöstä. Iltatyökorvausta voidaan maksaa säännölliseltä työajalta tai säännöllisen työajan ylittävältä ajalta.\",\"label\":\"Iltatyökorvaus\"},\"extraWorkPremium\":{\"description\":\"Työaikakorvaus, joka maksetaan lisätyöstä.\",\"label\":\"Lisätyökorvaus\"},\"nightShiftCompensation\":{\"description\":\"Vuorotyökorvaus, joka maksetaan yövuorosta.\",\"label\":\"Yövuorolisä\"},\"nightWorkAllowance\":{\"description\":\"Työaikakorvaus, jota maksetaan yötyöstä.\",\"label\":\"Yötyökorvaus\"},\"otherCompensation\":{\"description\":\"Muiden maksettujen työaika- ja poikkeustilakorvausten yhteissumma. Näitä ovat mm. aattotyökorvaukset, arkipyhäkorvaukset ja muut mahdolliset työehtosopimusten tai työsopimusten perusteella\\n maksettavat korvaukset ja lisät.\",\"label\":\"Muu maksettu lisä\"},\"overtimeCompensation\":{\"description\":\"Ylityöstä maksettava työaikakorvaus. Ylityönä pidetään työtä, joka tehdään työnantajan aloitteesta sovitun ylityöaikarajan ylittävänä aikana.\",\"label\":\"Ylityökorvaus\"},\"saturdayPay\":{\"description\":\"Työaikakorvaus, joka maksetaan lauantaityöstä.\\n Lauantaityökorvausta voidaan maksaa säännölliseltä työajalta tai säännöllisen työajan ylittävältä ajalta.\",\"label\":\"Lauantaityökorvaus\"},\"standByCompensation\":{\"description\":\"Palkka, joka maksetaan siitä, että työntekijä on tavoitettavissa ja työnantaja voi tarvittaessa kutsua hänet hoitamaan palvelussuhteeseen kuuluvia tehtäviä.\",\"label\":\"Varallaolokorvaus\"},\"sundayWorkCompensation\":{\"description\":\"Sunnuntaityöstä maksettava työaikakorvaus. Sunnuntaityökorvausta voidaan maksaa säännölliseltä työajalta tai säännöllisen työajan ylittävältä ajalta.\",\"label\":\"Sunnuntaityökorvaus\"},\"undefined\":{\"description\":\"Ei valintaa\",\"label\":\"Ei valintaa\"},\"waitingTimeCompensation\":{\"description\":\"Korvaus, johon työntekijällä on oikeus, jos palkanmaksu viivästyy työsuhteen päätyttyä. Ellei toisin sovita, palkka tulee maksaa palkanmaksukauden\\n viimeisenä päivänä. Odotusajan korvausta voidaan\\n maksaa enintään kuudelta päivältä.\",\"label\":\"Odotusajan korvaus\"},\"weeklyRestCompensation\":{\"description\":\"Työaikakorvaus, jota maksetaan viikkolevon aikana tehdystä työstä.\",\"label\":\"Viikkolepokorvaus\"}},\"YtjCompanyType\":{\"alandFederation\":{\"label\":\"Ahvenanmaan liikelaitos\"},\"asoAssociation\":{\"label\":\"Asumisoikeusyhdistys\"},\"association\":{\"label\":\"Aatteellinen yhdistys\"},\"condominium\":{\"label\":\"Asunto-osakeyhtiö\"},\"cooperativeBank\":{\"label\":\"Osuuspankki\"},\"europeanCooperative\":{\"label\":\"Eurooppaosuuskunta\"},\"europeanCooperativeBank\":{\"label\":\"Eurooppaosuuspankki\"},\"federationOfMunicipalitiesEstablishment\":{\"label\":\"Kuntainliiton liikelaitos\"},\"financialAssociation\":{\"label\":\"Taloudellinen yhdistys\"},\"forestCareAssociation\":{\"label\":\"Metsänhoitoyhdistys\"},\"foundation\":{\"label\":\"Säätiö\"},\"housingCooperative\":{\"label\":\"Asunto-osuuskunta\"},\"hypoAssociation\":{\"label\":\"Hypoteekkiyhdistys\"},\"insuranceAssociation\":{\"label\":\"Vakuutusyhdistys\"},\"ky\":{\"label\":\"Kommandiittiyhtiö\"},\"municipalEstablishment\":{\"label\":\"Kunnallinen liikelaitos\"},\"mutualInsuranceAssociation\":{\"label\":\"Keskinäinen vahinkovak.yhdistys\"},\"noCompanyType\":{\"label\":\"Ei yritysmuotoa\"},\"openCompany\":{\"label\":\"Avoin yhtiö\"},\"otherAssociation\":{\"label\":\"Muu yhdistys\"},\"otherFinancialAssociation\":{\"label\":\"Muu taloudellinen yhdistys\"},\"oy\":{\"label\":\"Osakeyhtiö\"},\"privateEntrepreneur\":{\"label\":\"Yksityinen elinkeinonharjoittaja l. toiminimi\"},\"reindeerHerdingCooperative\":{\"label\":\"Paliskunta\"},\"savingsBank\":{\"label\":\"Säästöpankki\"},\"specialPurposeAssociation\":{\"label\":\"Erityislainsäädäntöön perustuva yhdistys\"},\"stateEstablishment\":{\"label\":\"Valtion liikelaitos\"},\"unknown\":{\"label\":\"Tuntematon yritysmuoto\"}},\"Holiday\":{},\"IncomeEarnerType\":{\"athlete\":{\"label\":\"Urheilija\"},\"employedByStateEmploymentFund\":{\"label\":\"Valtion työllisyysmäärärahoilla työllistetty\"},\"entrepreneurOrFarmerNoPensionRequired\":{\"label\":\"Yrittäjä, ei YEL- tai MYEL-vakuuttamisvelvollisuutta\"},\"jointOwnerWithPayer\":{\"label\":\"Osakasasemassa maksajaan\"},\"keyEmployee\":{\"label\":\"Avainhenkilö\"},\"leasedEmployeeLivingAbroad\":{\"label\":\"Ulkomailla asuva vuokratyöntekijä\"},\"netOfTaxContract\":{\"label\":\"Työnantaja maksaa työntekijän puolesta verot (nettopalkkasopimus)\"},\"organization\":{\"label\":\"Yhteisö\"},\"partialOwner\":{\"label\":\"Osaomistaja\"},\"performingArtist\":{\"label\":\"Esiintyvä taiteilija\"},\"personWorkingAbroad\":{\"label\":\"Ulkomailla työskentelevä henkilö\"},\"personWorkingInFrontierDistrict\":{\"label\":\"Rajakunnassa työskentelevä henkilö\"},\"personWorkingOnAlandFerry\":{\"label\":\"Ahvenanmaan maantielautalla työskentelevä henkilö\"},\"restrictedPeriodInFinland\":{\"label\":\"Tulonsaaja on oleskellut Suomessa enintään 183 päivää verosopimuksessa tarkoitettuna ajanjaksona\"},\"dimplomaticMission\":{\"label\":\"Diplomaattisen edustuston maksamaa palkkaa saava henkilö\"},\"eppo\":{\"label\":\"EPPO-lain mukaista vakuutuspalkkaa saava henkilö\"},\"lightEntrepreneur\":{\"label\":\"Kevytyrittäjä. Laskutuspalvelua käyttävä henkilö, jolla ei ole Y-tunnusta\"}},\"OAuthError\":{\"<any>access_denied\":{\"label\":\"Access_denied\"},\"<any>invalid_request\":{\"label\":\"Invalid_request\"},\"<any>invalid_scope\":{\"label\":\"Invalid_scope\"},\"<any>server_error\":{\"label\":\"Server_error\"},\"<any>temporarily_unavailable\":{\"label\":\"Temporarily_unavailable\"},\"<any>unauthorized_client\":{\"label\":\"Unauthorized_client\"},\"<any>undefined\":{\"label\":\"Undefined\"},\"<any>unsupported_response_type\":{\"label\":\"Unsupported_response_type\"}},\"OAuthGrantType\":{\"<any>authorization_code\":{\"label\":\"Authorization_code\"},\"<any>client_credentials\":{\"label\":\"Client_credentials\"},\"<any>jwtBearer\":{\"label\":\"JwtBearer\"},\"<any>password\":{\"label\":\"Password\"},\"<any>refresh_token\":{\"label\":\"Refresh_token\"},\"<any>undefined\":{\"label\":\"Undefined\"}},\"OAuthResponseType\":{\"<any>code\":{\"label\":\"Code\"},\"<any>token\":{\"label\":\"Token\"},\"<any>undefined\":{\"label\":\"Undefined\"}},\"OAuthSalaxyAuthorizeMode\":{\"<any>sign_in\":{\"label\":\"Sign_in\"},\"<any>sign_up\":{\"label\":\"Sign_up\"},\"<any>undefined\":{\"label\":\"Undefined\"}},\"OAuthTokenType\":{\"<any>bearer\":{\"label\":\"Bearer\"},\"<any>mac\":{\"label\":\"Mac\"},\"<any>undefined\":{\"label\":\"Undefined\"}},\"SettingsStatus\":{\"checked\":{\"label\":\"Ok\"},\"pending\":{\"label\":\"Käsittelyssä\"},\"undefined\":{\"label\":\"-\"}},\"TaxReportHandling\":{\"always\":{\"label\":\"Palkkaus.fi lähettää työnantajan erillisilmoituksen siinäkin tapauksessa, jossa työnantaja ei ole maksanut palkkoja viimeisen 12 kuukauden aikana\"},\"default\":{\"label\":\"Palkkaus.fi lähettää kaikki ilmoitukset. Ei palkanmaksua -ilmoitus lähetetään 12 kuukauden ajan viimeisimmästä palkanmaksusta.\"},\"noMonthlyReport\":{\"label\":\"Palkkaus.fi ei lähetä työnantajan erillisilmoitusta\"},\"noZeroSalaryReport\":{\"label\":\"Palkkaus.fi ei lähetä Nollailmoitusta\"}},\"WorkerSalaryNotification\":{\"always\":{\"label\":\"Työntekijälle lähetetään aina sähköpostilla viesti palkanmaksusta.\"},\"silent\":{\"label\":\"Työntekijälle ei lähetetä viestiä palkanmaksusta.\"}},\"WorkerSalarySlipDeliveryMethod\":{\"default\":{\"label\":\"Oletus: PDF-tiedosto Palkkaus.fi -palvelussa.\"},\"payslip\":{\"label\":\"Verkkopalkan lähetys työntekijän pankkiin\"},\"omapalkka\":{\"label\":\"Palkkalaskelmien lähetys Omapalkkaan\"}},\"Unit\":{\"hours\":{\"label\":\"Tuntia\",\"shortIndicator\":\"h\"},\"days\":{\"label\":\"Päivää\",\"shortIndicator\":\"pv\"},\"weeks\":{\"label\":\"Viikkoa\",\"shortIndicator\":\"vko\"},\"period\":{\"label\":\"Jakso\",\"shortIndicator\":\"jakso\"},\"one\":{\"label\":\"Yksi\",\"shortIndicator\":\"\"},\"count\":{\"label\":\"Määrä\",\"shortIndicator\":\"kpl\"},\"percent\":{\"label\":\"Prosenttia\",\"shortIndicator\":\"%\"},\"kilometers\":{\"label\":\"Kilometriä\",\"shortIndicator\":\"km\"},\"euro\":{\"label\":\"Euroa\",\"shortIndicator\":\"€\"}},\"UsecaseStatus\":{\"undefined\":{\"label\":\"Ei arvoa\"},\"default\":{\"label\":\"Oletus ja voimassa\"},\"active\":{\"label\":\"Voimassa\"},\"inactive\":{\"label\":\"Ei voimassa\"}},\"UnemploymentPayrollLimitStatus\":{\"default\":{\"label\":\"Palkkasummarajaa ei ole ylitetty\"},\"higher\":{\"label\":\"Palkkasummaraja korotetulle prosentille on ylittynyt\"}},\"MessageThreadStatus\":{\"draft\":{\"label\":\"Muokattavissa\"},\"active\":{\"label\":\"Lähetetty\"},\"approved\":{\"label\":\"Hyväksytty\"},\"rejected\":{\"label\":\"Hylätty\"},\"archived\":{\"label\":\"Arkistoitu\"},\"template\":{\"label\":\"Viestipohja\"}},\"ThreadedMessageType\":{\"timer\":{\"label\":\"Kellokortti\"},\"hourlyReport\":{\"label\":\"Tuntiraportti\"},\"timeReport\":{\"label\":\"Työaikaraportti\"},\"annualLeave\":{\"label\":\"Vuosiloma\"},\"absence\":{\"label\":\"Poissaolo\"},\"calcRow\":{\"label\":\"Palkkalaskelmarivi\"},\"travel\":{\"label\":\"Matkalasku\"},\"expense\":{\"label\":\"Kulukorvaus\"}},\"EmploymentRelationSalaryPaymentMethod\":{\"bankAccount\":{\"label\":\"Maksu työntekijän pankkitilille\"},\"external\":{\"label\":\"Maksetaan Palkkaus-palvelun ulkopuolella\"}},\"CostAccountingDimensionScope\":{\"none\":{\"label\":\"Ei rajoitettu\"},\"calculation\":{\"label\":\"Käytetään vain laskelmilla\"},\"row\":{\"label\":\"Käytetään vain riveillä\"},\"hidden\":{\"label\":\"Piilotettu\"}},\"PeriodDateKind\":{\"paidAtDate\":{\"label\":\"Työnantajan suoritus\"},\"salaryDate\":{\"label\":\"Työntekijän palkkapäivä\"},\"workDate\":{\"label\":\"Työn palkkakausi\"},\"workDateStart\":{\"label\":\"Työn palkkakauden alkupäivä\"},\"workDateEnd\":{\"label\":\"Työn palkkakauden loppupäivä\"}},\"Culture\":{\"fi\":{\"label\":\"Suomalainen\",\"description\":\"Suomalainen (12,34 / 1.2.2020)\"},\"en\":{\"label\":\"Kansainvälinen\",\"description\":\"Kansainvälinen (12.34 / 2020-02-01)\"}},\"FormsParty\":{\"undefined\":{\"label\":\"Ei arvoa\"},\"worker\":{\"label\":\"Työntekijä\"},\"employer\":{\"label\":\"Työnantaja\"},\"accountant\":{\"label\":\"Tilitoimisto\"}},\"FormsWorkflowRole\":{\"undefined\":{\"label\":\"Ei arvoa\"},\"initiator\":{\"label\":\"Aloittaja\"},\"approvaer\":{\"label\":\"Hyväksyjä\"},\"payer\":{\"label\":\"Maksaja\"}},\"PensionRule\":{\"default\":{\"label\":\"Oletus\"},\"monthlyLowerLimit\":{\"label\":\"Huomioi laskelmakohtainen ansion alaraja\"}},\"SitemapVisibility\":{\"default\":{\"label\":\"Oletus\"},\"visible\":{\"label\":\"Näkyvissä\"},\"hidden\":{\"label\":\"Piilotettu\"},\"readOnly\":{\"label\":\"Vain luku\"},\"hiddenReadOnly\":{\"label\":\"Piilotettu ja vain luku\"},\"disabled\":{\"label\":\"Pois käytöstä\"}},\"Role\":{\"undefined\":{\"label\":\"Ei määritelty\"},\"accountant\":{\"label\":\"Tilitoimisto\"},\"trustedPartner\":{\"label\":\"Luotettu kumppani\"},\"accountantCandidate\":{\"label\":\"Vahvistamaton tilitoimisto\"},\"pricingPartner\":{\"label\":\"Hinnoittelukumppani\"},\"sepaPartner\":{\"label\":\"SEPA-sopimuskumppani\"}},\"IdentityVerification\":{\"employerAuthorization\":{\"label\":\"Valtakirja\"},\"workerContract\":{\"label\":\" TT-sopimus\"},\"manual\":{\"label\":\"Manual valtakirja\"},\"temporary\":{\"label\":\"Temp tunnistus\"},\"siirto\":{\"label\":\"Siirto valtuutus\"}},\"ExpensesVatRate\":{\"undefined\":{\"label\":\"Arvonlisäveroa ei määritetty\"},\"tax255\":{\"label\":\"25,5 % - Yleinen verokanta\",\"description\":\"Yleinen verokanta. Tämä on useimpien tavaroiden ja palveluiden verokanta.\"},\"tax24\":{\"label\":\"24 % - Yleinen verokanta\",\"description\":\"Yleinen verokanta. Tämä on useimpien tavaroiden ja palveluiden verokanta.\"},\"tax14\":{\"label\":\"14 % - Elintarvikkeet, ravintola- ja ateriapalvelut\",\"description\":\"Elintarvikkeet, rehut, ravintola- ja ateriapalvelut. Huomaa, että alempi 14 %:n verokanta ei koske alkoholijuomien ja tupakkatuotteiden myyntiä eikä tarjoilua.\"},\"tax135\":{\"label\":\"13,5 % - Elintarvikkeet, ravintola- ja ateriapalvelut\",\"description\":\"Elintarvikkeet, rehut, ravintola- ja ateriapalvelut. Huomaa, että alempi 13,5 %:n verokanta ei koske alkoholijuomien ja tupakkatuotteiden myyntiä eikä tarjoilua.\"},\"tax10\":{\"label\":\"10 % - Kirjat, kulttuuri, henkilökuljetus ja majoitus\",\"description\":\"Kirjat, sanoma- ja aikakauslehdet, lääkkeet, liikuntapalvelut, elokuvanäytökset, kulttuuri- ja viihdetilaisuuksien sisäänpääsymaksut, henkilökuljetukset, majoituspalvelut, televisio- ja yleisradiotoiminnasta saadut korvaukset.\"},\"tax0\":{\"label\":\"0 % - Nollaverokanta\",\"description\":\"Arvonlisäverottomien vesialusten myynti, vuokraus ja rahtaus sekä näihin aluksiin kohdistuvat työsuoritukset, jäsenlehtien ja mainosten veroton myynti yleishyödyllisille yhteisöille, varastointimenettelyihin liittyvä veroton myynti (verovarasto alvissa), vienti EU-alueen ulkopuolelle, tavaran myynti EU-maihin arvonlisäverovelvollisille ostajille (ohje alv eu-tavarakaupassa), muut kansainväliseen kauppaan liittyvät tavaroiden ja palvelujen myynnit, esim. veroton myynti diplomaateille ja kansainvälisille järjestöille.\"},\"none\":{\"label\":\"Ei ALV:tä\"},\"other\":{\"label\":\"Muu ALV-prosentti\"},\"multiple\":{\"label\":\"Useita ALV-kantoja\"}},\"VatRate\":{\"none\":{\"label\":\"Ei ALV:tä\"},\"vat2550\":{\"label\":\"25,5 %\"},\"vat2400\":{\"label\":\"24 %\"},\"vat1400\":{\"label\":\"14 %\"},\"vat1350\":{\"label\":\"13,5 %\"},\"vat1000\":{\"label\":\"10 %\"},\"vat0000\":{\"label\":\" 0 %\"},\"other\":{\"label\":\"Muu\"}},\"PaidSickLeaveKind\":{\"undefined\":{\"description\":\"Ei valintaa\",\"label\":\"Ei valintaa\"},\"paidSickLeaveSalary\":{\"description\":\"Sairausajan palkka, kertakorvaus.\",\"label\":\"Palkallinen sairauspoissaolo, kertakorvaus\"},\"paidSickLeaveHourlySalary\":{\"description\":\"Sairausajan palkka, palkanmaksu tehtyjen tuntien perusteella.\",\"label\":\"Palkallinen sairauspoissaolo, tuntipalkka\"},\"paidSickLeaveMonthlySalary\":{\"description\":\"Sairausajan palkka, kiinteä kuukausipalkka.\",\"label\":\"Palkallinen sairauspoissaolo, kuukausipalkka\"}},\"TrainingKind\":{\"undefined\":{\"description\":\"Ei valintaa\",\"label\":\"Ei valintaa\"},\"trainingSalary\":{\"description\":\"Koulutusajan palkka, kertakorvaus.\",\"label\":\"Koulutusaika, kertakorvaus\"},\"trainingHourlySalary\":{\"description\":\"Koulutusajan palkka, palkanmaksu tehtyjen tuntien perusteella.\",\"label\":\"Koulutusaika, tuntipalkka\"},\"trainingMonthlySalary\":{\"description\":\"Koulutusajan palkka, kiinteä kuukausipalkka.\",\"label\":\"Koulutusaika, kuukausipalkka\"}},\"InternationalSocialSecurityType\":{\"default\":{\"label\":\"Suomen sosiaaliturva\"},\"foreign\":{\"label\":\"Ei suomen sosiaaliturvassa\"},\"mixed\":{\"label\":\"Osittainen Suomen sosiaaliturva\"}},\"InternationalSocialSecurityException\":{\"notSubjectToEarningsRelatedPensionInsurance\":{\"label\":\"Työeläkevakuutus: Ei kuulu Suomen sosiaaliturvan soveltamispiiriin\"},\"notSubjectToAccidentAndOccupationalDiseaseInsurance\":{\"label\":\"Työtapaturma- ja ammattitautivakuutus: Ei kuulu Suomen sosiaaliturvan soveltamispiiriin\"},\"notSubjectToUnemploymentInsurance\":{\"label\":\"Työttömyysvakuutus: Ei kuulu Suomen sosiaaliturvan soveltamispiiriin\"},\"notSubjectToHealthInsurance\":{\"label\":\"Sairausvakuutus: Ei kuulu Suomen sosiaaliturvan soveltamispiiriin\"},\"voluntaryEarningsRelatedPensionInsurance\":{\"label\":\"Vapaaehtoinen vakuuttaminen Suomessa (työeläkevakuutus)\"},\"noObligationToHealthInsuranceDailyAllowanceContribution\":{\"label\":\"Päivärahamaksu (sairausvakuutus): Ei vakuuttamisvelvollisuutta\"}},\"Country\":{\"fi\":{\"label\":\"Suomi\"},\"ae\":{\"label\":\"Arabiemiraatit\"},\"at\":{\"label\":\"Itävalta\"},\"ba\":{\"label\":\"Bosnia ja Hertsegovina\"},\"bg\":{\"label\":\"Bulgaria\"},\"by\":{\"label\":\"Valko-Venäjä\"},\"cn\":{\"label\":\"Kiina\"},\"de\":{\"label\":\"Saksa\"},\"eg\":{\"label\":\"Egypti\"},\"fr\":{\"label\":\"Ranska\"},\"gg\":{\"label\":\"Guernsey\"},\"hr\":{\"label\":\"Kroatia\"},\"ie\":{\"label\":\"Irlanti\"},\"in\":{\"label\":\"Intia\"},\"je\":{\"label\":\"Jersey\"},\"kr\":{\"label\":\"Korean tasavalta\"},\"lk\":{\"label\":\"Sri Lanka\"},\"lv\":{\"label\":\"Latvia\"},\"me\":{\"label\":\"Montenegro\"},\"mx\":{\"label\":\"Meksiko\"},\"no\":{\"label\":\"Norja\"},\"pk\":{\"label\":\"Pakistan\"},\"rs\":{\"label\":\"Serbia\"},\"sg\":{\"label\":\"Singapore\"},\"th\":{\"label\":\"Thaimaa\"},\"tr\":{\"label\":\"Turkki\"},\"us\":{\"label\":\"Amerikan yhdysvallat\"},\"vg\":{\"label\":\"Brittiläiset Neitsytsaaret\"},\"zm\":{\"label\":\"Sambia\"},\"am\":{\"label\":\"Armenia\"},\"au\":{\"label\":\"Australia\"},\"bb\":{\"label\":\"Barbados\"},\"bm\":{\"label\":\"Bermuda\"},\"ca\":{\"label\":\"Kanada\"},\"cy\":{\"label\":\"Kypros\"},\"dk\":{\"label\":\"Tanska\"},\"es\":{\"label\":\"Espanja\"},\"gb\":{\"label\":\"Iso-Britannia\"},\"gr\":{\"label\":\"Kreikka\"},\"hu\":{\"label\":\"Unkari\"},\"il\":{\"label\":\"Israel\"},\"is\":{\"label\":\"Islanti\"},\"jp\":{\"label\":\"Japani\"},\"ky\":{\"label\":\"Caymansaaret\"},\"lt\":{\"label\":\"Liettua\"},\"ma\":{\"label\":\"Marokko\"},\"mk\":{\"label\":\"Makedonia\"},\"my\":{\"label\":\"Malesia\"},\"nz\":{\"label\":\"Uusi-Seelanti\"},\"pl\":{\"label\":\"Puola\"},\"ru\":{\"label\":\"Venäjä\"},\"si\":{\"label\":\"Slovenia\"},\"tj\":{\"label\":\"Tadžikistan\"},\"tz\":{\"label\":\"Tansania\"},\"uy\":{\"label\":\"Uruguay\"},\"vn\":{\"label\":\"Vietnam\"},\"ar\":{\"label\":\"Argentiina\"},\"az\":{\"label\":\"Azerbaidžan\"},\"be\":{\"label\":\"Belgia\"},\"br\":{\"label\":\"Brasilia\"},\"ch\":{\"label\":\"Sveitsi\"},\"cz\":{\"label\":\"Tšekki\"},\"ee\":{\"label\":\"Viro\"},\"ge\":{\"label\":\"Georgia\"},\"hk\":{\"label\":\"Hongkong\"},\"id\":{\"label\":\"Indonesia\"},\"im\":{\"label\":\"Mansaari\"},\"it\":{\"label\":\"Italia\"},\"kg\":{\"label\":\"Kirgisia\"},\"kz\":{\"label\":\"Kazakstan\"},\"lu\":{\"label\":\"Luxemburg\"},\"md\":{\"label\":\"Moldova\"},\"mt\":{\"label\":\"Malta\"},\"nl\":{\"label\":\"Alankomaat\"},\"ph\":{\"label\":\"Filippiinit\"},\"ro\":{\"label\":\"Romania\"},\"se\":{\"label\":\"Ruotsi\"},\"sk\":{\"label\":\"Slovakia\"},\"tm\":{\"label\":\"Turkmenistan\"},\"ua\":{\"label\":\"Ukraina\"},\"uz\":{\"label\":\"Uzbekistan\"},\"za\":{\"label\":\"Etelä-Afrikka\"},\"other\":{\"label\":\"Muu...\"}},\"TaxAtSourceKind\":{\"label\":\"Lähdevero\",\"description\":\"Lähdevero ja lähdeverovähennys (rajoitetusti verovelvollinen)\",\"undefined\":{\"label\":\"Valitse...\"},\"noDeduction\":{\"label\":\"Ei vähennystä\"},\"monthlyDeduction\":{\"label\":\"Vähennys, euroa kuukaudessa\"},\"dailyDeduction\":{\"label\":\"Vähennys, euroa päivässä\"},\"fixedValues\":{\"label\":\"Kiinteät arvot\"}},\"InternationalIdentifier\":{\"undefined\":{\"label\":\"Valitse...\"},\"taxIdentificationNumber\":{\"label\":\"Verotunniste (TIN)\"},\"foreignPersonalIdentificationNumber\":{\"label\":\"Ulkomainen henkilötunnus\"},\"other\":{\"label\":\"Muu tunnus\"}},\"TaxWithholdingKind\":{\"label\":\"Ennakonpidätyksen laskentatapa\",\"undefined\":{\"label\":\"Valitse...\"},\"percentage\":{\"label\":\"Ennnakonpidätysprosentti\"},\"fixedValue\":{\"label\":\"Kiinteä ennakonpidätyksen määrä\"}},\"SalaryDateKind\":{\"default\":{\"label\":\"Normaali palkanmaksu\",\"description\":\"Nettopalkkaa ei ole vielä maksettu työntekijälle.\",\"descriptionCfa\":\"<p>Nettopalkkaa ei ole vielä maksettu työntekijälle.</p><ul> <li ><b>Tulorekisteri:</b> Palkka ilmoitetaan tulorekisteriin valitulle palkkapäivälle, kun maksu Palkkaus.fi:lle on tehty.</li> <li ><b>Nettopalkka ja veromaksut:</b> Jos maksu Palkkaus.fi:lle sisältää nettopalkkoja, työnantajasuorituksia (verot ja sairausvakuutusmaksut) tai eläkemaksuja, Palkkaus.fi tilittää ne asianomaisille tahoille. Muussa tapauksessa työnantajan pitää itse maksaa ne, jolloin lasku työnantajasuorituksista on Omaverossa.</li> <li ><b>Muut sivukulut:</b> Työttömyysvakuutusmaksuista aina ja mahdollisista eläkemaksuista yhtiöt lähettävät erikseen laskut palkkatietoilmoituksen perusteella, jos näitä eriä ei ole maksussa mukana.</li></ul>\",\"descriptionNonCfa\":\"<p>Nettopalkkaa ei ole vielä maksettu työntekijälle. Kun palkan nettopalkkalasku kuitataan maksetuksi</p><ul> <li ><b>Tulorekisteri:</b> Palkka ilmoitetaan tulorekisteriin valitulle palkkapäivälle.</li> <li ><b>Veromaksut:</b> Työnantajasuorituksista (verot ja sairausvakuutusmaksut) muodostuu lasku palkkapäivää seuraavan kuun 6. päivä. Työnantajasuoritusten lasku näkyy myös Omaverossa.</li> <li ><b>Muut sivukulut:</b> Mahdollisista työeläkemaksuista ja työttömyysvakuutusmaksuista yhtiöt lähettävät erikseen laskut palkkatietoilmoituksen perusteella.</li></ul>\"},\"inPast\":{\"label\":\"Takautuva palkka\",\"description\":\"Nettopalkka on jo maksettu työntekijälle. Palkka ilmoitetaan tulorekisteriin valitulle palkkapäivälle. Huomioithan, että myöhässä tehdystä ilmoituksesta voi seurata myöhästymismaksuja eri viranomaisilta.\",\"descriptionCfa\":\"<p>Nettopalkka on jo maksettu työntekijälle.</p><ul> <li ><b>Tulorekisteri:</b> Palkka ilmoitetaan tulorekisteriin valitulle palkkapäivälle, kun maksu Palkkaus.fi:lle on tehty.</li> <li ><b>Veromaksut:</b> Työnantajasuoritusten (verot ja sairausvakuutusmaksut) lasku näkyy vain Omaverossa.</li> <li ><b>Muut sivukulut:</b> Mahdollisista eläkemaksuista ja työttömyysvakuutusmaksuista yhtiöt lähettävät erikseen laskut palkkatietoilmoituksen perusteella.</li> <li >Huomioithan, että myöhässä tehdystä ilmoituksesta voi seurata myöhästymismaksuja eri viranomaisilta.</li></ul>\",\"descriptionNonCfa\":\"<p>Nettopalkka on jo maksettu työntekijälle. Palkan nettopalkkalasku kuitataan kuitataan automaattisesti maksetuksi</p><ul> <li ><b>Tulorekisteri:</b> Palkka ilmoitetaan tulorekisteriin valitulle palkkapäivälle.</li> <li ><b>Veromaksut:</b> Jos palkkapäivä on kuluvalla tai vielä raportoimattomalla edellisellä kuulla (ennen kuluvan kuun 5. päivää), työnantajasuorituksista (verot ja sairausvakuutusmaksut) muodostuu lasku normaaliin tapaan. Muussa tapauksessa työnantajasuoritusten lasku näkyy vain Omaverossa.</li> <li ><b>Muut sivukulut:</b> Mahdollisista työeläkemaksuista ja työttömyysvakuutusmaksuista yhtiöt lähettävät erikseen laskut palkkatietoilmoituksen perusteella.</li> <li >Huomioithan, että myöhässä tehdystä ilmoituksesta voi seurata myöhästymismaksuja eri viranomaisilta.</li></ul>\"}},\"CalcGroup\":{\"baseSalary\":{\"label\":\"Rahapalkka\"},\"salaryAdditions\":{\"label\":\"Lisät\"},\"benefits\":{\"label\":\"Edut\"},\"deductions\":{\"label\":\"Vähennykset\"},\"expenses\":{\"label\":\"Kulukorvaukset\"}},\"SystemMessage\":{\"reportChecked\":{\"label\":\"Uusi\"},\"reportInvalid\":{\"label\":\"Epäkelpo\"},\"reportScheduled\":{\"label\":\"Ajastettu\"},\"reportDelivered\":{\"label\":\"Ilmoitettu\"},\"reportCanceled\":{\"label\":\"Peruttu\"},\"reportError\":{\"label\":\"Virhe\"},\"issue\":{\"label\":\"Virhe\"}},\"PayStatsKind\":{\"undefined\":{\"label\":\"Ei valintaa\",\"description\":\"Ei valintaa\"},\"averageHourlyPay\":{\"label\":\"Keskituntiansio (KTA)\",\"description\":\"Laskelma, joka sisältää työntekijän keskimääräisen tuntiansion. Laskelma perustuu työntekijän palkanmaksukauden pituuteen ja palkkaan.\"},\"script\":{\"label\":\"Kaava\",\"description\":\"Ansion laskenta tehdään kaavalla\"}},\"PayStatsPeriodLength\":{\"undefined\":{\"label\":\"Ei valintaa\"},\"month\":{\"label\":\"Kuukausi\"},\"quarter\":{\"label\":\"Neljännes\"},\"halfYear\":{\"label\":\"Puolivuosi\"},\"year\":{\"label\":\"Vuosi\"},\"lastPayPeriod\":{\"label\":\"Edellinen palkkajakso\"},\"other\":{\"label\":\"Muu kausi\"}},\"TimeRatePayKind\":{\"undefined\":{\"label\":\"Ei valintaa\",\"description\":\"Ei valintaa\"},\"default\":{\"label\":\"Aikapalkka\",\"description\":\"Normaali palkka, joka maksetaan työntekijälle hänen työaikansa perusteella.\"},\"paidSickLeave\":{\"label\":\"Sairausajan palkka\",\"description\":\"Palkka maksetaan sairauspoissaolon ajalta.\"},\"training\":{\"label\":\"Koulutusajan palkka\",\"description\":\"Palkka maksetaan koulutuksen ajalta.\"},\"military\":{\"label\":\"Kertausharjoituspalkka\",\"description\":\"Palkka maksetaan kertausharjoituksen ajalta.\"},\"travel\":{\"label\":\"Matkustusajan palkka\",\"description\":\"Palkka maksetaan matkan ajalta.\"}}},\"ENUM_IR\":{\"EarningsPaymentReportStatus\":{\"new\":{\"label\":\"Uusi\"},\"succeeded\":{\"label\":\"Onnistuneesti lähetetty\"},\"canceled\":{\"label\":\"Mitätöity\"},\"error\":{\"label\":\"Virheellinen\"},\"invalid\":{\"label\":\"Tarkastettava\"},\"scheduled\":{\"label\":\"Ajastettu\"}},\"PayerSummaryReportStatus\":{\"new\":{\"label\":\"Uusi\"},\"succeeded\":{\"label\":\"Onnistuneesti lähetetty\"},\"canceled\":{\"label\":\"Mitätöity\"},\"error\":{\"label\":\"Virheellinen\"},\"invalid\":{\"label\":\"Tarkastettava\"},\"scheduled\":{\"label\":\"Ajastettu\"}},\"SummaryTransactionCode\":{\"noWagesPayable\":{\"label\":\"Ei palkanmaksua\",\"description\":\"Tieto annetaan, jos maksajalla ei ole kyseisen kuukauden aikana ollut laisinkaan palkanmaksua. Jos maksaja on maksanut palkkaa ko. kuukauden aikana, tietoa ei anneta. Ei palkanmaksua -tieto voidaan ilmoittaa kuudelta kalenterikuukaudelta etukäteen, jos tiedetään, ettei seuraavan puolen vuoden aikana ole tarkoitus palkata ketään. Tieto on annettava vain, jos maksaja on rekisteröitynyt säännöllisesti palkkoja maksavaksi työnantajaksi Verohallinnon työnantajarekisteriin. Ei palkanmaksua-tietoa ei voida antaa aliorganisaatioittain. Tieto annetaan vain, jos suorituksen maksaja ei ole maksanut miltään osin palkkaa ko. kuukauden aikana.\"},\"employersHealthInsuranceContribution\":{\"label\":\"Sairausvakuutusmaksu\",\"description\":\"Maksaja ilmoittaa kyseisen kuukauden aikana maksamisensa palkkojen perusteella laskemansa työnantajan sairausvakuutusmaksun määrän. Kohdassa ei ilmoiteta palkkojen yhteismäärää, vaan palkoista lasketun työnantajan sairausvakuutusmaksun yhteismäärä ilmoituskuukauden ajalta. Summasta ei vähennetä Työnantajan sairausvakuutusmaksusta tehtävät vähennykset -tulolajilla ilmoitettuja vähennyksiä.\"},\"deductionsToBeMadeFromTheEmployersHealthInsuranceContribution\":{\"label\":\"Vähennykset SAVA-maksusta\",\"description\":\"Tiedossa ilmoitetaan maksajan oma-aloitteisesti sairausvakuutusmaksuista tehdyt vähennykset. Työnantaja voi tehdä vähennyksen esimerkiksi silloin, jos se on maksanut työntekijälle palkkaa ja samaan aikaan työnantajalle on maksettu lakiin perustuvaa eläkettä, päivärahaa tai muuta ansionmenetystä korvaavaa etuutta, joka on myönnetty työntekijälle. Työnantajalla on oikeus saada maksamansa työnantajan sairausvakuutusmaksu Verohallinnolta takaisin siltä osin, kuin se vastaa työnantajalle maksettua suoritusta.\"}},\"ReportLogEventType\":{\"undefined\":{\"label\":\"Määrittämätön\"},\"sent\":{\"label\":\"Lähetetty\"},\"canceled\":{\"label\":\"Mitätöity\"},\"error\":{\"label\":\"Virheellinen\"}},\"DeliveryDataType\":{\"earningsPaymentReports\":{\"label\":\"Palkkatietoilmoitukset\"},\"employersSeparateReports\":{\"label\":\"Työnantajan erillisilmoitukset\"},\"benefitsPaymentReports\":{\"label\":\"Etuustietoilmoitukset\"},\"recordSubscription\":{\"label\":\"Aineistotilaus\"},\"cancellationOfEarningsPaymentReports\":{\"label\":\"Palkkatietoilmoitusten mitätöiminen\"},\"cancellationOfEmployersSeparateReports\":{\"label\":\"Työnantajan erillisilmoitusten mitätöiminen\"},\"cancellationOfBenefitsPaymentReports\":{\"label\":\"Etuustietoilmoitusten mitätöiminen\"},\"cancellationOfARecordSubscription\":{\"label\":\"Aineistotilauksen mitätöiminen\"},\"cancellationOfARecordContainingEarningsPaymentReports\":{\"label\":\"Palkkatietoilmoituksia sisältävän aineiston mitätöiminen\"},\"cancellationOfARecordContainingEmployersSeparateReports\":{\"label\":\"Työnantajan erillisilmoituksia sisältävän aineiston mitätöiminen\"},\"cancellationOfARecordContainingBenefitsPaymentReports\":{\"label\":\"Etuustietoilmoituksia sisältävän aineiston mitätöiminen\"},\"cancellationOfARecordContainingARecordSubscription\":{\"label\":\"Aineistotilauksen sisältävän aineiston mitätöiminen\"}},\"IdType\":{\"businessId\":{\"label\":\"Y-tunnus\"},\"personalIdentificationNumber\":{\"label\":\"Henkilötunnus (suomalainen)\"},\"vat\":{\"label\":\"Alv-tunniste (VAT)\"},\"giin\":{\"label\":\"GIIN-tunniste\"},\"taxIdentificationNumber\":{\"label\":\"Verotunniste(TIN)\"},\"finnishTradeRegistrationNumber\":{\"label\":\"Kaupparekisteritunnus\"},\"foreignBusinessRegistrationNumber\":{\"label\":\"Ulkomainen yritystunnus\"},\"foreignPersonalIdentificationNumber\":{\"label\":\"Ulkomainen henkilötunnus\"},\"other\":{\"label\":\"Muu tunnus\"}},\"ResponsibilityCode\":{\"contentIssues\":{\"label\":\"Sisällölliset asiat\"},\"technicalIssues\":{\"label\":\"Tekniset asiat\"}},\"PayerType\":{\"publicSector\":{\"label\":\"Julkisyhteisö\"},\"household\":{\"label\":\"Kotitalous\"},\"temporaryEmployer\":{\"label\":\"Tilapäinen työnantaja\"},\"foreignEmployer\":{\"label\":\"Ulkomainen työnantaja\"},\"state\":{\"label\":\"Valtio\"},\"unincorporatedStateEnterpriseOrGovernmentalInstitution\":{\"label\":\"Valtion liikelaitos tai erillishallinnollinen valtion laitos\"},\"specialisedAgency\":{\"label\":\"Kansainvälinen erityisjärjestö\"},\"foreignGroupCompany\":{\"label\":\"Ulkomainen konserniyhtiö\"},\"poolOfHouseholdEmployers\":{\"label\":\"Kotitalouksien työnantajarinki\"}},\"PayerSubOrgType\":{\"kevasSubmitterCodes\":{\"label\":\"Kevan ilmoittajakoodisto\"},\"payersOwnCodes\":{\"label\":\"Maksajan oma koodisto\"},\"governmentAgencyIdentifier\":{\"label\":\"Virastotunniste\"}},\"AddressType\":{\"addressInHomeCountry\":{\"label\":\"Osoite kotivaltiossa\"},\"addressInTheCountryOfWork\":{\"label\":\"Osoite työskentelyvaltiossa\"}},\"ProfessionType\":{\"statisticsFinland\":{\"label\":\"Tilastokeskuksen ammattiluokitus (TK10)\"},\"keva\":{\"label\":\"Kevan nimikkeistö\"},\"bankOfFinland\":{\"label\":\"Suomen Pankin nimikkeistö\"},\"trafi\":{\"label\":\"Trafin nimikkeistö\"}},\"EmploymentCode\":{\"fullTime\":{\"label\":\"Kokoaikainen\"},\"partTime\":{\"label\":\"Osa-aikainen\"},\"notAvailable\":{\"label\":\"Tietoa ei ole saatavilla\"}},\"TermCode\":{\"untilFurtherNotice\":{\"label\":\"Toistaiseksi voimassa oleva\"},\"fixedTerm\":{\"label\":\"Määräaikainen\"}},\"PaymentType\":{\"monthly\":{\"label\":\"Kuukausipalkka\"},\"hourly\":{\"label\":\"Tuntipalkka\"},\"contractPay\":{\"label\":\"Urakkapalkka\"}},\"EmploymentEndingType\":{\"kevaCodes\":{\"label\":\"Kevan koodisto\"},\"bankOfFinlandCodes\":{\"label\":\"Suomen Pankin koodisto\"},\"incomesRegisterCodes\":{\"label\":\"Tulorekisterin koodisto\"}},\"EmploymentRegType\":{\"kevasGroundsForRegistration\":{\"label\":\"Kevan rekisteröinnin peruste\"},\"bankOfFinlandsGroundsForRegistration\":{\"label\":\"Suomen Pankin rekisteröinnin peruste\"}},\"PensionActCode\":{\"employeesEarningsRelatedPensionInsurance\":{\"label\":\"Työntekijän työeläkevakuutus\"},\"pensionInsuranceForFarmers\":{\"label\":\"Maatalousyrittäjän eläkevakuutus (MYEL)\"},\"pensionInsuranceForTheSelfEmployed\":{\"label\":\"Yrittäjän eläkevakuutus (YEL)\"}},\"PensionProvIdCode\":{\"none\":{\"label\":\"Ei valintaa\"},\"finnishCentreForPensions\":{\"label\":\"Eläketurvakeskus\"},\"clergyOfTheOrthodoxChurch\":{\"label\":\"Ortodoksisen kirkon papiston eläkekassa\"},\"kevaMemberOrganisations\":{\"label\":\"Kevan jäsenyhteisöt\"},\"kevaÅlandLandskapsregeringsPensionssystem\":{\"label\":\"Keva - Åland landskapsregerings pensionssystem\"},\"kevaChurch\":{\"label\":\"Keva - kirkko\"},\"bankOfFinland\":{\"label\":\"Suomen Pankki\"},\"kevaKelaEmploymentPensions\":{\"label\":\"Keva - Kelan toimisuhde-eläkkeet\"},\"kevaState\":{\"label\":\"Keva - valtio\"},\"seafarers\":{\"label\":\"Merimieseläkekassa\"},\"farmers\":{\"label\":\"Maatalousyrittäjien eläkelaitos\"},\"alandia\":{\"label\":\"Ålandia\"},\"ilmarinen\":{\"label\":\"Keskinäinen Eläkevakuutusyhtiö Ilmarinen\"},\"elo\":{\"label\":\"Keskinäinen Työeläkevakuutusyhtiö Elo\"},\"varma\":{\"label\":\"Keskinäinen työeläkevakuutusyhtiö Varma\"},\"veritas\":{\"label\":\"Eläkevakuutusosakeyhtiö Veritas\"},\"uPM\":{\"label\":\"UPM Sellutehtaiden eläkesäätiö\"},\"sanoma\":{\"label\":\"Sanoman Eläkesäätiö\"},\"sandvik\":{\"label\":\"Sandvik Eläkesäätiö\"},\"kontino\":{\"label\":\"Kontinon yhteiseläkesäätiö\"},\"yleisradio\":{\"label\":\"Yleisradion eläkesäätiö\"},\"aBB\":{\"label\":\"ABB Eläkesäätiö\"},\"lFashionGroup\":{\"label\":\"L-Fashion Group Oy:n eläkesäätiö\"},\"honeywell\":{\"label\":\"Honeywell Oy:n Henkilökunnan Eläkesäätiö\"},\"telia\":{\"label\":\"Telian Eläkesäätiö\"},\"yaraSuomi\":{\"label\":\"Yara Suomen Eläkesäätiö\"},\"orion\":{\"label\":\"Orionin Eläkesäätiö\"},\"valio\":{\"label\":\"Valion Eläkekassa\"},\"oP\":{\"label\":\"OP-Eläkekassa\"},\"verso\":{\"label\":\"Eläkekassa Verso\"},\"apteekkien\":{\"label\":\"Apteekkien Eläkekassa\"},\"viabek\":{\"label\":\"Liikennepalvelualojen Eläkekassa Viabek\"},\"reka\":{\"label\":\"Reka Eläkekassa\"}},\"PaidAbsenceCauseCode\":{\"illness\":{\"label\":\"Sairaus\"},\"partTimeSickLeave\":{\"label\":\"Osa-aikainen sairauspoissaolo\"},\"parentalLeave\":{\"label\":\"Äitiys-, isyys- ja vanhempainvapaa\"},\"specialMaternityLeave\":{\"label\":\"Erityisäitiysvapaa\"},\"rehabilitation\":{\"label\":\"Kuntoutus\"},\"childIllness\":{\"label\":\"Lapsen sairaus tai pakottava perhesyy\"},\"partTimeChildCareLeave\":{\"label\":\"Osittainen hoitovapaa\"},\"training\":{\"label\":\"Koulutus\"},\"leaveOfAbsence\":{\"label\":\"Virkavapaa\"},\"militaryRefresherTraining\":{\"label\":\"Kertausharjoitus\"},\"midWeekHoliday\":{\"label\":\"Arkipyhä\"},\"accruedHoliday\":{\"label\":\"Pekkasvapaa\"},\"occupationalAccident\":{\"label\":\"Työtapaturma\"},\"annualLeave\":{\"label\":\"Vuosiloma\"},\"partTimeAbsenceDueToRehabilitation\":{\"label\":\"Osittainen poissaolo kuntoutuksen vuoksi\"},\"other\":{\"label\":\"Muu syy\"}},\"UnpaidAbsenceCauseCode\":{\"illness\":{\"label\":\"Sairaus\"},\"partTimeSickLeave\":{\"label\":\"Osa-aikainen sairauspoissaolo\"},\"parentalLeave\":{\"label\":\"Äitiys-, isyys- ja vanhempainvapaa\"},\"specialMaternityLeave\":{\"label\":\"Erityisäitiysvapaa\"},\"rehabilitation\":{\"label\":\"Kuntoutus\"},\"childIllness\":{\"label\":\"Lapsen sairaus tai pakottava perhesyy\"},\"partTimeChildCareLeave\":{\"label\":\"Osittainen hoitovapaa\"},\"training\":{\"label\":\"Koulutus\"},\"jobAlternationLeave\":{\"label\":\"Vuorotteluvapaa\"},\"studyLeave\":{\"label\":\"Opintovapaa\"},\"industrialAction\":{\"label\":\"Lakko tai työsulku\"},\"interruptionInWorkProvision\":{\"label\":\"Työtarjonnan keskeytyminen\"},\"leaveOfAbsence\":{\"label\":\"Virkavapaa\"},\"militaryRefresherTraining\":{\"label\":\"Kertausharjoitus\"},\"militaryService\":{\"label\":\"Varusmiespalvelus tai siviilipalvelus\"},\"layOff\":{\"label\":\"Lomautus\"},\"childCareLeave\":{\"label\":\"Hoitovapaa\"},\"other\":{\"label\":\"Muu syy\"}},\"AllowanceCode\":{\"mealAllowance\":{\"label\":\"Ateriakorvaus\"},\"partialDailyAllowance\":{\"label\":\"Osapäiväraha\"},\"fullDailyAllowance\":{\"label\":\"Kokopäiväraha\"},\"internationalDailyAllowance\":{\"label\":\"Ulkomaan päiväraha\"},\"taxExemptReimbursementsAbroad\":{\"label\":\"Ulkomaan työskentelyyn liittyvät verovapaat korvaukset\"}},\"BenefitCode\":{\"accommodationBenefit\":{\"label\":\"Asuntoetu\"},\"telephoneBenefit\":{\"label\":\"Puhelinetu\"},\"mealBenefit\":{\"label\":\"Ravintoetu\"},\"otherBenefits\":{\"label\":\"Muut edut\"}},\"InsuranceCode\":{\"subjectToSocialInsuranceContributions\":{\"label\":\"Sosiaalivakuutusmaksujen alainen (koodit 2-6)\"},\"subjectToEarningsRelatedPensionInsuranceContribution\":{\"label\":\"Työeläkevakuutusmaksun alainen\"},\"subjectToHealthInsuranceContribution\":{\"label\":\"Sairausvakuutusmaksun alainen\"},\"subjectToUnemploymentInsuranceContribution\":{\"label\":\"Työttömyysvakuutusmaksun alainen\"},\"subjectToAccidentInsuranceAndOccupationalDiseaseInsuranceContribution\":{\"label\":\"Työtapaturma- ja ammattitautivakuutusmaksun alainen\"}},\"WageUnitCode\":{\"hour\":{\"label\":\"Tunti\"},\"day\":{\"label\":\"Päivä\"},\"week\":{\"label\":\"Viikko\"},\"period\":{\"label\":\"Jakso\"}},\"ReimbPaymentType\":{\"kelaDailyAllowanceApplication\":{\"label\":\"Kela, päivärahahakemus\"},\"kelaFamilyLeaveCompensation\":{\"label\":\"Kela, perhevapaakorvaus\"}},\"ScheduleAction\":{\"send\":{\"label\":\"Lähetä\"},\"cancel\":{\"label\":\"Mitätöi\"}},\"ActionCode\":{\"newReport\":{\"label\":\"Uusi ilmoitus\"},\"replacementReport\":{\"label\":\"Korvaava ilmoitus\"}}},\"GENERATED_MODEL\":{\"WorkerAbsences\":{\"title\":\"Työntekijän Poissaolot\",\"workerId\":{\"title\":\"Työntekijän Tunniste\",\"descr\":\"Tunniste, joka yksilöi työntekijän. Voi olla tyhjä.\"},\"employmentId\":{\"title\":\"Työsuhteen Tunniste\",\"descr\":\"Tunniste, joka yksilöi työntekijän työsuhteen.\"},\"periods\":{\"title\":\"Poissaolojaksot\",\"descr\":\"Luettelo poissaolojaksoista. Voi olla tyhjä.\"},\"workerSnapshot\":{\"title\":\"Työntekijän Profiili\",\"descr\":\"Kuvaus työntekijän profiilista. Voi olla tyhjä.\"},\"id\":{\"title\":\"Poissaolon Tunniste\",\"descr\":\"Yksilöllinen tunniste poissaololle. Voi olla tyhjä.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin poissaolotieto luotiin. Voi olla tyhjä.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin poissaolotieto päivitettiin. Voi olla tyhjä.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Tietojen omistaja. Voi olla tyhjä.\"},\"isReadOnly\":{\"title\":\"Vain Luku -tila\",\"descr\":\"Tieto siitä, onko poissaolotieto vain luku -tilassa. Voi olla tyhjä.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Yhteistyökumppanin nimi tai tunniste. Voi olla tyhjä.\"}},\"AbsencePeriod\":{\"title\":\"Poissaolojaksot\",\"id\":{\"title\":\"Jakson Tunniste\",\"descr\":\"Yksilöllinen tunniste poissaolojaksolle. Voi olla tyhjä.\"},\"period\":{\"title\":\"Jakson Aikaväli\",\"descr\":\"Aikaväli, jonka aikana poissaolo tapahtuu. Voi olla tyhjä.\"},\"causeCode\":{\"title\":\"Poissaolon Syykoodi\",\"descr\":\"Koodi, joka kuvaa poissaolon syyn. Voi olla tyhjä.\"},\"isPaid\":{\"title\":\"Maksettu Poissaolo\",\"descr\":\"Tieto siitä, onko poissaolo palkallinen. Voi olla tyhjä.\"},\"isHolidayAccrual\":{\"title\":\"Lomakertymä\",\"descr\":\"Tieto siitä, kerryttääkö poissaolo lomapäiviä. Voi olla tyhjä.\"},\"amount\":{\"title\":\"Poissaolon Kesto\",\"descr\":\"Poissaolon kesto päivinä. Voi olla tyhjä.\"},\"notes\":{\"title\":\"Huomautukset\",\"descr\":\"Lisätiedot tai huomautukset poissaolosta. Voi olla tyhjä.\"},\"sourceId\":{\"title\":\"Lähteen Tunniste\",\"descr\":\"Tunniste, joka viittaa poissaolon lähteeseen. Voi olla tyhjä.\"}},\"Avatar\":{\"title\":\"Profiilikuva\",\"entityType\":{\"title\":\"Oikeushenkilön Tyyppi\",\"descr\":\"Kuvaa oikeushenkilön tyyppiä. Voi olla tyhjä.\"},\"firstName\":{\"title\":\"Etunimi\",\"descr\":\"Henkilön etunimi. Voi olla tyhjä.\"},\"lastName\":{\"title\":\"Sukunimi\",\"descr\":\"Henkilön sukunimi. Voi olla tyhjä.\"},\"displayName\":{\"title\":\"Näyttönimi\",\"descr\":\"Nimi, joka näytetään profiilissa. Voi olla tyhjä.\"},\"sortableName\":{\"title\":\"Järjestettävä Nimi\",\"descr\":\"Nimi, jota käytetään järjestämiseen. Voi olla tyhjä.\"},\"pictureType\":{\"title\":\"Kuvatyypin Tyyppi\",\"descr\":\"Kuvaa profiilikuvan tyyppiä. Voi olla tyhjä.\"},\"color\":{\"title\":\"Väri\",\"descr\":\"Profiilikuvan taustaväri. Voi olla tyhjä.\"},\"initials\":{\"title\":\"Nimikirjaimet\",\"descr\":\"Henkilön nimikirjaimet. Voi olla tyhjä.\"},\"url\":{\"title\":\"Kuvan URL\",\"descr\":\"Profiilikuvan URL-osoite. Voi olla tyhjä.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Profiilin kuvaus. Voi olla tyhjä.\"},\"id\":{\"title\":\"Profiilin Tunniste\",\"descr\":\"Yksilöllinen tunniste profiilille. Voi olla tyhjä.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin profiili luotiin. Voi olla tyhjä.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin profiilia päivitettiin. Voi olla tyhjä.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Profiilin omistaja. Voi olla tyhjä.\"},\"isReadOnly\":{\"title\":\"Vain Luku -tila\",\"descr\":\"Tieto siitä, onko profiili vain luku -tilassa. Voi olla tyhjä.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Yhteistyökumppanin nimi tai tunniste. Voi olla tyhjä.\"}},\"DateRange\":{\"title\":\"Aikaväli\",\"start\":{\"title\":\"Alkupäivämäärä\",\"descr\":\"Aikavälin alkupäivämäärä. Voi olla tyhjä.\"},\"end\":{\"title\":\"Loppupäivämäärä\",\"descr\":\"Aikavälin loppupäivämäärä. Voi olla tyhjä.\"},\"daysCount\":{\"title\":\"Päivien Määrä\",\"descr\":\"Aikavälin päivien kokonaismäärä. Voi olla tyhjä.\"},\"days\":{\"title\":\"Päivämäärät\",\"descr\":\"Luettelo aikavälin päivämääristä. Voi olla tyhjä.\"}},\"PageResultOfApiListItem\":{\"title\":\"Sivutettu Tulosluettelo\",\"items\":{\"title\":\"Luettelon Kohteet\",\"descr\":\"Luettelo kohteista nykyisellä sivulla. Voi olla tyhjä.\"},\"nextPageLink\":{\"title\":\"Seuraavan Sivun Linkki\",\"descr\":\"Linkki seuraavalle sivulle. Voi olla tyhjä.\"},\"count\":{\"title\":\"Kohteiden Määrä\",\"descr\":\"Kohteiden kokonaismäärä luettelossa. Voi olla tyhjä.\"}},\"ApiListItem\":{\"title\":\"API-listan kohde\",\"type\":{\"title\":\"Kohdetyyppi\",\"descr\":\"Määrittää kohteen tyypin, jos se on tiedossa.\"},\"listType\":{\"title\":\"Listan tyyppi\",\"descr\":\"Kuvaa listan tyyppiä, johon kohde kuuluu.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin kohdetta päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajan tunniste\",\"descr\":\"Kohteen omistajan yksilöivä tunniste.\"},\"ownerInfo\":{\"title\":\"Omistajan tiedot\",\"descr\":\"Lisätietoja kohteen omistajasta.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Kohteen nykyinen tila.\"},\"backOfficeStatus\":{\"title\":\"Back Office -tila\",\"descr\":\"Kohteen tila sisäisessä hallinnassa.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde alkaa.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde päättyy.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Kohteen liittyvä bruttopalkka.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Kohteeseen liittyvä maksu.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Kohteeseen liittyvä palkkio.\"},\"otherId\":{\"title\":\"Muu tunniste\",\"descr\":\"Toinen kohteeseen liittyvä tunniste.\"},\"otherPartyInfo\":{\"title\":\"Toisen osapuolen tiedot\",\"descr\":\"Lisätietoja toisesta osapuolesta.\"},\"shortText\":{\"title\":\"Lyhyt kuvaus\",\"descr\":\"Lyhyt tekstikuvaus kohteesta.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Kohteeseen liittyvät liiketoimintaobjektit.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"data\":{\"title\":\"Lisätiedot\",\"descr\":\"Kohteeseen liittyvät lisätiedot.\"}},\"AccountInIndex\":{\"title\":\"Tilin tiedot\",\"avatar\":{\"title\":\"Profiilikuva\",\"descr\":\"Käyttäjän profiilikuva.\"},\"officialId\":{\"title\":\"Virallinen tunniste\",\"descr\":\"Käyttäjän virallinen tunniste.\"},\"email\":{\"title\":\"Sähköposti\",\"descr\":\"Käyttäjän sähköpostiosoite.\"},\"telephone\":{\"title\":\"Puhelinnumero\",\"descr\":\"Käyttäjän puhelinnumero.\"},\"ibanNumber\":{\"title\":\"IBAN-numero\",\"descr\":\"Käyttäjän IBAN-pankkitilinumero.\"}},\"PersonAccount\":{\"title\":\"Henkilötili\",\"identity\":{\"title\":\"Henkilöllisyys\",\"descr\":\"Käyttäjän henkilöllisyystiedot.\"},\"lastLoginAs\":{\"title\":\"Viimeisin kirjautumisrooli\",\"descr\":\"Rooli, jolla käyttäjä kirjautui viimeksi.\"},\"contactVerificationPin\":{\"title\":\"Yhteystiedon vahvistus-PIN\",\"descr\":\"PIN-koodi yhteystietojen vahvistamiseen.\"},\"entityType\":{\"title\":\"Yksikkötyyppi\",\"descr\":\"Käyttäjän yksikkötyyppi, kuten yritys tai yksityishenkilö.\"},\"isEmployer\":{\"title\":\"Onko työnantaja\",\"descr\":\"Ilmaisee, onko käyttäjä työnantaja.\"},\"isWorker\":{\"title\":\"Onko työntekijä\",\"descr\":\"Ilmaisee, onko käyttäjä työntekijä.\"},\"isVerified\":{\"title\":\"Onko vahvistettu\",\"descr\":\"Ilmaisee, onko käyttäjän tili vahvistettu.\"},\"avatar\":{\"title\":\"Profiilikuva\",\"descr\":\"Käyttäjän profiilikuva.\"},\"contact\":{\"title\":\"Yhteystiedot\",\"descr\":\"Käyttäjän yhteystiedot.\"},\"language\":{\"title\":\"Kieli\",\"descr\":\"Käyttäjän valitsema asiointikieli.\"},\"serviceModelId\":{\"title\":\"Palvelumallin tunniste\",\"descr\":\"Käyttäjän palvelumallin yksilöivä tunniste.\"},\"workflowData\":{\"title\":\"Työprosessin tiedot\",\"descr\":\"Käyttäjän työprosessiin liittyvät tiedot.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Käyttäjän yksilöivä tunniste.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin tili luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin tiliä päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Tilin omistaja.\"},\"isReadOnly\":{\"title\":\"Onko vain luku\",\"descr\":\"Ilmaisee, onko tili vain lukuoikeudella.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Käyttäjän liikekumppani.\"}},\"Identity\":{\"title\":\"Henkilöllisyys\",\"officialId\":{\"title\":\"Virallinen tunniste\",\"descr\":\"Henkilön virallinen tunniste.\"},\"officialName\":{\"title\":\"Virallinen nimi\",\"descr\":\"Henkilön virallinen nimi.\"},\"firstName\":{\"title\":\"Etunimi\",\"descr\":\"Henkilön etunimi.\"},\"lastName\":{\"title\":\"Sukunimi\",\"descr\":\"Henkilön sukunimi.\"},\"contract\":{\"title\":\"Sopimus\",\"descr\":\"Henkilön liittyvä valtuutussopimus.\"},\"ibanNumber\":{\"title\":\"IBAN-numero\",\"descr\":\"Henkilön IBAN-pankkitilinumero.\"},\"isPep\":{\"title\":\"Onko PEP\",\"descr\":\"Ilmaisee, onko henkilö poliittisesti vaikutusvaltainen henkilö.\"},\"primaryContact\":{\"title\":\"Ensisijainen yhteyshenkilö\",\"descr\":\"Henkilön ensisijainen yhteyshenkilö.\"},\"roles\":{\"title\":\"Roolit\",\"descr\":\"Henkilön roolit organisaatiossa.\"},\"identityUpdatedAt\":{\"title\":\"Henkilöllisyyden päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin henkilöllisyystietoja päivitettiin.\"},\"kycUpdatedAt\":{\"title\":\"KYC-päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin KYC-tiedot päivitettiin.\"}},\"Contact\":{\"title\":\"Yhteystiedot\",\"email\":{\"title\":\"Sähköposti\",\"descr\":\"Yhteyshenkilön sähköpostiosoite.\"},\"telephone\":{\"title\":\"Puhelinnumero\",\"descr\":\"Yhteyshenkilön puhelinnumero.\"},\"street\":{\"title\":\"Katuosoite\",\"descr\":\"Yhteyshenkilön katuosoite.\"},\"postalCode\":{\"title\":\"Postinumero\",\"descr\":\"Yhteyshenkilön postinumero.\"},\"city\":{\"title\":\"Kaupunki\",\"descr\":\"Yhteyshenkilön kaupunki.\"},\"countryCode\":{\"title\":\"Maatunnus\",\"descr\":\"Yhteyshenkilön maan tunnus.\"}},\"WorkflowData\":{\"title\":\"Työnkulun Tiedot\",\"events\":{\"title\":\"Tapahtumat\",\"descr\":\"Luettelo työnkulun tapahtumista, jotka voivat olla tyhjiä.\"}},\"AuthorizationContract\":{\"title\":\"Valtuutussopimus\",\"signedAt\":{\"title\":\"Allekirjoituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin sopimus on allekirjoitettu, voi olla tyhjä.\"},\"isSigned\":{\"title\":\"Onko Allekirjoitettu\",\"descr\":\"Ilmaisee, onko sopimus allekirjoitettu, voi olla tyhjä.\"},\"authorizationType\":{\"title\":\"Valtuutuksen Tyyppi\",\"descr\":\"Valtuutuksen tyyppi, voi olla tyhjä.\"},\"authorizedBy\":{\"title\":\"Valtuuttaja\",\"descr\":\"Henkilö tai taho, joka on valtuuttanut sopimuksen, voi olla tyhjä.\"}},\"ContractParty\":{\"title\":\"Sopimusosapuoli\",\"id\":{\"title\":\"Tunniste\",\"descr\":\"Sopimusosapuolen yksilöllinen tunniste, voi olla tyhjä.\"},\"methods\":{\"title\":\"Menetelmät\",\"descr\":\"Menetelmät, erityisesti kun IsSelf on totta.\"},\"avatar\":{\"title\":\"Profiilikuva\",\"descr\":\"Sopimusosapuolen profiilikuva, voi olla tyhjä.\"},\"contact\":{\"title\":\"Yhteystiedot\",\"descr\":\"Sopimusosapuolen yhteystiedot, voi olla tyhjä.\"},\"isSelf\":{\"title\":\"Onko Itse\",\"descr\":\"Ilmaisee, onko sopimusosapuoli itse, voi olla tyhjä.\"},\"officialId\":{\"title\":\"Virallinen Tunniste\",\"descr\":\"Sopimusosapuolen virallinen tunniste, voi olla tyhjä.\"},\"role\":{\"title\":\"Rooli\",\"descr\":\"Sopimusosapuolen rooli sopimuksessa, voi olla tyhjä.\"},\"isSigned\":{\"title\":\"Onko Allekirjoitettu\",\"descr\":\"Ilmaisee, onko sopimusosapuoli allekirjoittanut sopimuksen, voi olla tyhjä.\"},\"signatureUrl\":{\"title\":\"Allekirjoituksen URL\",\"descr\":\"Linkki sopimusosapuolen allekirjoitukseen, voi olla tyhjä.\"},\"iban\":{\"title\":\"IBAN\",\"descr\":\"Sopimusosapuolen IBAN-tilinumero, voi olla tyhjä.\"},\"contractPartyType\":{\"title\":\"Osapuolen Tyyppi\",\"descr\":\"Sopimusosapuolen tyyppi, voi olla tyhjä.\"},\"isEmployer\":{\"title\":\"Onko Työnantaja\",\"descr\":\"Ilmaisee, onko sopimusosapuoli työnantaja, voi olla tyhjä.\"}},\"WorkflowEvent\":{\"title\":\"Työnkulun Tapahtuma\",\"id\":{\"title\":\"Tunniste\",\"descr\":\"Tapahtuman yksilöllinen tunniste, voi olla tyhjä.\"},\"type\":{\"title\":\"Tyyppi\",\"descr\":\"Tapahtuman tyyppi, voi olla tyhjä.\"},\"message\":{\"title\":\"Viesti\",\"descr\":\"Tapahtumaan liittyvä viesti, voi olla tyhjä.\"},\"ui\":{\"title\":\"Käyttöliittymä\",\"descr\":\"Tapahtuman käyttöliittymätyyli, voi olla tyhjä.\"},\"features\":{\"title\":\"Ominaisuudet\",\"descr\":\"Luettelo tapahtuman ominaisuuksista, voi olla tyhjä.\"},\"time\":{\"title\":\"Aika\",\"descr\":\"Aika, jolloin tapahtuma tapahtui, voi olla tyhjä.\"},\"user\":{\"title\":\"Käyttäjä\",\"descr\":\"Tapahtumaan liittyvä käyttäjä, voi olla tyhjä.\"},\"assignedTo\":{\"title\":\"Vastuuhenkilö\",\"descr\":\"Henkilö, jolle tapahtuma on osoitettu, voi olla tyhjä.\"},\"record\":{\"title\":\"Tietue\",\"descr\":\"Tapahtumaan liittyvä tietue, voi olla tyhjä.\"}},\"Authority\":{\"title\":\"Valtuuttaja\",\"name\":{\"title\":\"Nimi\",\"descr\":\"Valtuuttajan nimi, voi olla tyhjä.\"},\"telephone\":{\"title\":\"Puhelinnumero\",\"descr\":\"Valtuuttajan puhelinnumero, voi olla tyhjä.\"},\"email\":{\"title\":\"Sähköposti\",\"descr\":\"Valtuuttajan sähköpostiosoite, voi olla tyhjä.\"},\"personalId\":{\"title\":\"Henkilötunnus\",\"descr\":\"Valtuuttajan henkilötunnus, voi olla tyhjä.\"},\"accountId\":{\"title\":\"Tilin Tunniste\",\"descr\":\"Valtuuttajan tilin tunniste, voi olla tyhjä.\"},\"authorizedAt\":{\"title\":\"Valtuutuksen Päivämäärä\",\"descr\":\"Päivämäärä, jolloin valtuutus on annettu, voi olla tyhjä.\"}},\"CompanyAccount\":{\"title\":\"Yritystili\",\"identity\":{\"title\":\"Identiteetti\",\"descr\":\"Yrityksen tunnistamiseen liittyvät tiedot\"},\"companyType\":{\"title\":\"Yrityksen tyyppi\",\"descr\":\"Yrityksen juridinen muoto tai liiketoimintatyyppi\"},\"entityType\":{\"title\":\"Oikeushenkilön tyyppi\",\"descr\":\"Yrityksen oikeudellinen luokitus\"},\"isEmployer\":{\"title\":\"Onko työnantaja\",\"descr\":\"Ilmaisee, toimiiko yritys työnantajana\"},\"isWorker\":{\"title\":\"Onko työntekijä\",\"descr\":\"Ilmaisee, toimiiko yritys työntekijänä\"},\"isVerified\":{\"title\":\"Onko vahvistettu\",\"descr\":\"Ilmaisee, onko yrityksen tiedot vahvistettu\"},\"avatar\":{\"title\":\"Profiilikuva\",\"descr\":\"Yrityksen visuaalinen tunnus\"},\"contact\":{\"title\":\"Yhteystiedot\",\"descr\":\"Yrityksen yhteystiedot\"},\"language\":{\"title\":\"Kieli\",\"descr\":\"Yrityksen ensisijainen asiointikieli\"},\"serviceModelId\":{\"title\":\"Palvelumallin tunnus\",\"descr\":\"Yrityksen käyttämän palvelumallin tunniste\"},\"workflowData\":{\"title\":\"Työprosessin tiedot\",\"descr\":\"Yrityksen työprosessiin liittyvät tiedot\"},\"id\":{\"title\":\"Tunnus\",\"descr\":\"Yritystilin yksilöllinen tunniste\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin tili luotiin\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Yritystilin omistajan tunniste\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko tili vain lukuoikeudellinen\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Yrityksen mahdollinen yhteistyökumppani\"}},\"SessionUserCredential\":{\"title\":\"Istunnon käyttäjätunnus\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin tunnus luotiin\"},\"id\":{\"title\":\"Tunnus\",\"descr\":\"Käyttäjätunnuksen yksilöllinen tunniste\"},\"avatar\":{\"title\":\"Profiilikuva\",\"descr\":\"Käyttäjän visuaalinen tunnus\"},\"email\":{\"title\":\"Sähköposti\",\"descr\":\"Käyttäjän sähköpostiosoite\"},\"authenticationMethod\":{\"title\":\"Tunnistautumismenetelmä\",\"descr\":\"Käytetty menetelmä käyttäjän tunnistautumiseksi\"}},\"Certificate\":{\"title\":{\"title\":\"Nimi\",\"descr\":\"Sertifikaatin nimi tai otsikko\"},\"thumbprint\":{\"title\":\"Sormenjälki\",\"descr\":\"Sertifikaatin yksilöllinen sormenjälki\"},\"bytes\":{\"title\":\"Tiedot\",\"descr\":\"Sertifikaatin binäärimuotoiset tiedot\"},\"password\":{\"title\":\"Salasana\",\"descr\":\"Sertifikaatin suojaamiseen käytetty salasana\"},\"id\":{\"title\":\"Tunnus\",\"descr\":\"Sertifikaatin yksilöllinen tunniste\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin sertifikaatti luotiin\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Sertifikaatin omistajan tunniste\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko sertifikaatti vain lukuoikeudellinen\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Sertifikaatin mahdollinen yhteistyökumppani\"}},\"AuthorizedAvatar\":{\"title\":\"Valtuutettu profiilikuva\",\"partnerKey\":{\"title\":\"Yhteistyökumppanin avain\",\"descr\":\"Yhteistyökumppanin tunnistamiseen käytettävä avain\"},\"authorizedAt\":{\"title\":\"Valtuutuspäivämäärä\",\"descr\":\"Päivämäärä, jolloin valtuutus annettiin\"},\"scope\":{\"title\":\"Laajuus\",\"descr\":\"Valtuutuksen kattavuus tai laajuus\"},\"entityType\":{\"title\":\"Oikeushenkilön tyyppi\",\"descr\":\"Profiilikuvan liittyvän oikeushenkilön tyyppi\"},\"firstName\":{\"title\":\"Etunimi\",\"descr\":\"Henkilön etunimi\"},\"lastName\":{\"title\":\"Sukunimi\",\"descr\":\"Henkilön sukunimi\"},\"displayName\":{\"title\":\"Näyttönimi\",\"descr\":\"Henkilön julkinen nimi\"},\"sortableName\":{\"title\":\"Järjestettävä nimi\",\"descr\":\"Nimi, jota käytetään järjestelyyn\"},\"pictureType\":{\"title\":\"Kuvatyypi\",\"descr\":\"Profiilikuvan tyyppi\"},\"color\":{\"title\":\"Väri\",\"descr\":\"Profiilikuvan väri\"},\"initials\":{\"title\":\"Nimikirjaimet\",\"descr\":\"Henkilön nimikirjaimet\"},\"url\":{\"title\":\"URL-osoite\",\"descr\":\"Profiilikuvan URL-osoite\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Profiilikuvan kuvaus\"},\"id\":{\"title\":\"Tunnus\",\"descr\":\"Profiilikuvan yksilöllinen tunniste\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin profiilikuva luotiin\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Profiilikuvan omistajan tunniste\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko profiilikuva vain lukuoikeudellinen\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Profiilikuvan mahdollinen yhteistyökumppani\"}},\"AccountBase\":{\"title\":\"Tilin perusta\",\"entityType\":{\"title\":\"Oikeushenkilön tyyppi\",\"descr\":\"Tilin liittyvän oikeushenkilön tyyppi\"},\"isEmployer\":{\"title\":\"Onko työnantaja\",\"descr\":\"Ilmaisee, toimiiko tili työnantajana\"},\"isWorker\":{\"title\":\"Onko työntekijä\",\"descr\":\"Ilmaisee, toimiiko tili työntekijänä\"},\"isVerified\":{\"title\":\"Onko vahvistettu\",\"descr\":\"Ilmaisee, onko tilin tiedot vahvistettu\"},\"avatar\":{\"title\":\"Profiilikuva\",\"descr\":\"Tilin visuaalinen tunnus\"},\"contact\":{\"title\":\"Yhteystiedot\",\"descr\":\"Tilin yhteystiedot\"},\"language\":{\"title\":\"Kieli\",\"descr\":\"Tilin ensisijainen asiointikieli\"},\"serviceModelId\":{\"title\":\"Palvelumallin tunnus\",\"descr\":\"Tilin käyttämän palvelumallin tunniste\"},\"workflowData\":{\"title\":\"Työprosessin tiedot\",\"descr\":\"Tilin työprosessiin liittyvät tiedot\"},\"id\":{\"title\":\"Tunnus\",\"descr\":\"Tilin yksilöllinen tunniste\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin tili luotiin\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Tilin omistajan tunniste\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko tili vain lukuoikeudellinen\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Tilin mahdollinen yhteistyökumppani\"}},\"IssuedCertificate\":{\"title\":\"Myönnetty Sertifikaatti\",\"thumbprint\":{\"title\":\"Sormenjälki\",\"descr\":\"Sertifikaatin yksilöllinen tunniste, joka voi olla valinnainen.\"},\"bytes\":{\"title\":\"Tavut\",\"descr\":\"Sertifikaatin binäärimuotoinen esitys, joka voi olla valinnainen.\"},\"cert\":{\"title\":\"Sertifikaatti\",\"descr\":\"Sertifikaatin sisältö, joka voi olla valinnainen.\"},\"key\":{\"title\":\"Avain\",\"descr\":\"Sertifikaattiin liittyvä yksityinen avain, joka voi olla valinnainen.\"}},\"AccountingTarget\":{\"title\":\"Kirjanpitokohde\",\"info\":{\"title\":\"Kohteen Tiedot\",\"descr\":\"Kirjanpitokohteen yksityiskohtaiset tiedot, jotka voivat olla valinnaisia.\"},\"ruleSet\":{\"title\":\"Sääntökokonaisuus\",\"descr\":\"Kirjanpitoon liittyvät säännöt ja ohjeet, jotka voivat olla valinnaisia.\"},\"workflowData\":{\"title\":\"Työnkulun Tiedot\",\"descr\":\"Työnkulkuun liittyvät tiedot, jotka voivat olla valinnaisia.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Kirjanpitokohteen yksilöllinen tunniste, joka voi olla valinnainen.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin kirjanpitokohde luotiin, joka voi olla valinnainen.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä kirjanpitokohteelle, joka voi olla valinnainen.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Kirjanpitokohteen omistajan nimi, joka voi olla valinnainen.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Tieto siitä, onko kirjanpitokohde vain luku -tilassa, joka voi olla valinnainen.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Kirjanpitokohteeseen liittyvä liikekumppani, joka voi olla valinnainen.\"}},\"AccountingTargetInfo\":{\"title\":\"Kirjanpitokohteen Tiedot\",\"target\":{\"title\":\"Kohde\",\"descr\":\"Kirjanpitokohteen yksilöinti, joka voi olla valinnainen.\"},\"channel\":{\"title\":\"Kanava\",\"descr\":\"Kirjanpitotietojen siirtokanava, joka voi olla valinnainen.\"},\"method\":{\"title\":\"Menetelmä\",\"descr\":\"Tietojen vientimenetelmä, joka voi olla valinnainen.\"},\"availableMethods\":{\"title\":\"Saatavilla Olevat Menetelmät\",\"descr\":\"Luettelo käytettävissä olevista vientimenetelmistä, joka voi olla valinnainen.\"},\"format\":{\"title\":\"Muoto\",\"descr\":\"Tietojen tallennusmuoto, joka voi olla valinnainen.\"},\"data\":{\"title\":\"Data\",\"descr\":\"Kirjanpitokohteen liittyvät tiedot, jotka voivat olla valinnaisia.\"}},\"AccountingRuleSet\":{\"title\":\"Kirjanpitosääntöjen Kokonaisuus\",\"templateId\":{\"title\":\"Mallin Tunniste\",\"descr\":\"Sääntökokonaisuuden mallin yksilöllinen tunniste, joka voi olla valinnainen.\"},\"accounts\":{\"title\":\"Tililuettelo\",\"descr\":\"Luettelo kirjanpitoon liittyvistä tileistä, jotka voivat olla valinnaisia.\"},\"targetCoA\":{\"title\":\"Kohdetilikartta\",\"descr\":\"Kohdetilikarttaan liittyvät tilit, jotka voivat olla valinnaisia.\"},\"rows\":{\"title\":\"Rivit\",\"descr\":\"Kirjanpitosääntöihin liittyvät rivit, jotka voivat olla valinnaisia.\"}},\"AccountingRuleSetAccount\":{\"title\":\"Kirjanpitosääntötili\",\"id\":{\"title\":\"Tunniste\",\"descr\":\"Tilin yksilöllinen tunniste, joka voi olla valinnainen.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Tieto siitä, onko tili vain luku -tilassa, joka voi olla valinnainen.\"},\"account\":{\"title\":\"Tili\",\"descr\":\"Kirjanpitotilin nimi tai numero, joka voi olla valinnainen.\"},\"text\":{\"title\":\"Teksti\",\"descr\":\"Tilin kuvaus tai lisätiedot, jotka voivat olla valinnaisia.\"}},\"AccountingRuleSetRow\":{\"title\":\"Kirjanpitosääntöjen Rivi\",\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste riville, voi olla tyhjä.\"},\"entryCodeGroup\":{\"title\":\"Tilikoodiryhmä\",\"descr\":\"Ryhmä, johon tilikoodi kuuluu, voi olla tyhjä.\"},\"entryCode\":{\"title\":\"Tilikoodi\",\"descr\":\"Tilikoodi, jota käytetään kirjanpidossa, voi olla tyhjä.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Indikaattori siitä, onko rivi vain luku -tilassa.\"},\"enabled\":{\"title\":\"Käytössä\",\"descr\":\"Määrittää, onko rivi aktiivinen ja käytössä.\"},\"isIncluded\":{\"title\":\"Sisällytetty\",\"descr\":\"Ilmaisee, sisältyykö rivi kirjanpitosääntöihin.\"},\"debitId\":{\"title\":\"Debet-tunniste\",\"descr\":\"Tunniste, joka liittyy debet-kirjaukseen, voi olla tyhjä.\"},\"debitGrouping\":{\"title\":\"Debet-ryhmittely\",\"descr\":\"Ryhmittely, joka liittyy debet-kirjaukseen, voi olla tyhjä.\"},\"creditId\":{\"title\":\"Kredit-tunniste\",\"descr\":\"Tunniste, joka liittyy kredit-kirjaukseen, voi olla tyhjä.\"},\"creditGrouping\":{\"title\":\"Kredit-ryhmittely\",\"descr\":\"Ryhmittely, joka liittyy kredit-kirjaukseen, voi olla tyhjä.\"},\"flags\":{\"title\":\"Liput\",\"descr\":\"Erityiset merkinnät tai liput, jotka liittyvät riviin, voi olla tyhjä.\"}},\"PageResultOfAccountingTargetListItem\":{\"title\":\"Kirjanpitotavoitteiden Sivutulos\",\"items\":{\"title\":\"Kohteet\",\"descr\":\"Lista kirjanpitotavoitteista, voi olla tyhjä.\"},\"nextPageLink\":{\"title\":\"Seuraavan sivun linkki\",\"descr\":\"Linkki seuraavalle sivulle, jos saatavilla.\"},\"count\":{\"title\":\"Lukumäärä\",\"descr\":\"Kohteiden kokonaismäärä.\"}},\"AccountingTargetListItem\":{\"title\":\"Kirjanpitotavoitteen Kohde\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde luotiin, voi olla tyhjä.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohdetta viimeksi päivitettiin, voi olla tyhjä.\"},\"ownerId\":{\"title\":\"Omistajan tunniste\",\"descr\":\"Kohteen omistajan tunniste, voi olla tyhjä.\"},\"ownerInfo\":{\"title\":\"Omistajan tiedot\",\"descr\":\"Tietoja kohteen omistajasta, voi olla tyhjä.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Kohteen nykyinen tila kirjanpidossa, voi olla tyhjä.\"},\"backOfficeStatus\":{\"title\":\"Taustatoimiston tila\",\"descr\":\"Kohteen tila taustatoimistossa, voi olla tyhjä.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde alkaa, voi olla tyhjä.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde päättyy, voi olla tyhjä.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Kohteeseen liittyvä bruttopalkka, voi olla tyhjä.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Kohteeseen liittyvä maksu, voi olla tyhjä.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Kohteeseen liittyvä palkkio, voi olla tyhjä.\"},\"otherId\":{\"title\":\"Muu tunniste\",\"descr\":\"Muu tunniste, joka liittyy kohteeseen, voi olla tyhjä.\"},\"otherPartyInfo\":{\"title\":\"Toisen osapuolen tiedot\",\"descr\":\"Tietoja toisesta osapuolesta, voi olla tyhjä.\"},\"shortText\":{\"title\":\"Lyhyt teksti\",\"descr\":\"Lyhyt kuvaus kohteesta, voi olla tyhjä.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Liiketoimintaobjektit, jotka liittyvät kohteeseen, voi olla tyhjä.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan, voi olla tyhjä.\"},\"data\":{\"title\":\"Tiedot\",\"descr\":\"Kohteeseen liittyvät lisätiedot, voi olla tyhjä.\"},\"versionNumber\":{\"title\":\"Versio numero\",\"descr\":\"Kohteen versio numero, voi olla tyhjä.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Yksilöllinen resurssitunniste kohteelle, voi olla tyhjä.\"},\"flags\":{\"title\":\"Liput\",\"descr\":\"Erityiset merkinnät tai liput, jotka liittyvät kohteeseen, voi olla tyhjä.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Kohteeseen liittyvät viestit, voi olla tyhjä.\"},\"entityType\":{\"title\":\"Entiteetin tyyppi\",\"descr\":\"Kohteen tyyppi liiketoiminnassa, voi olla tyhjä.\"},\"logicalDate\":{\"title\":\"Looginen päivämäärä\",\"descr\":\"Kohteen looginen päivämäärä, voi olla tyhjä.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Viite, joka liittyy kohteeseen, voi olla tyhjä.\"},\"externalId\":{\"title\":\"Ulkoinen tunniste\",\"descr\":\"Ulkoinen tunniste, joka liittyy kohteeseen, voi olla tyhjä.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste kohteelle, voi olla tyhjä.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Kohteen omistaja, voi olla tyhjä.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Indikaattori siitä, onko kohde vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Kohteeseen liittyvä yhteistyökumppani, voi olla tyhjä.\"}},\"AccountingTargetData\":{\"title\":\"Kirjanpitotavoitteen Tiedot\",\"partnerMessageAssignedTo\":{\"title\":\"Yhteistyökumppanin viesti\",\"descr\":\"Viestin kohdistaminen yhteistyökumppanille, voi olla tyhjä.\"},\"channel\":{\"title\":\"Kanava\",\"descr\":\"Kanava, jota käytetään tiedonsiirrossa, voi olla tyhjä.\"},\"method\":{\"title\":\"Menetelmä\",\"descr\":\"Menetelmä, jota käytetään tietojen vientiin, voi olla tyhjä.\"},\"availableMethods\":{\"title\":\"Saatavilla olevat menetelmät\",\"descr\":\"Luettelo käytettävissä olevista menetelmistä, voi olla tyhjä.\"},\"format\":{\"title\":\"Muoto\",\"descr\":\"Tietojen esitysmuoto, voi olla tyhjä.\"},\"templateId\":{\"title\":\"Mallin tunniste\",\"descr\":\"Tunniste, joka liittyy käytettävään malliin, voi olla tyhjä.\"}},\"AssertionDemoCertificateRequest\":{\"title\":\"Varmennedemonstraation Sertifikaattipyyntö\",\"certificateBytes\":{\"title\":\"Sertifikaatin tavut\",\"descr\":\"Sertifikaatin binääridata, voi olla tyhjä.\"},\"password\":{\"title\":\"Salasana\",\"descr\":\"Salasana, joka liittyy sertifikaattiin, voi olla tyhjä.\"},\"subject\":{\"title\":\"Aihe\",\"descr\":\"Sertifikaatin aihe, voi olla tyhjä.\"},\"proxyActor\":{\"title\":\"Välittäjätoimija\",\"descr\":\"Toimija, joka toimii välittäjänä, voi olla tyhjä.\"},\"userEmail\":{\"title\":\"Käyttäjän sähköposti\",\"descr\":\"Sähköpostiosoite, joka liittyy käyttäjään, voi olla tyhjä.\"}},\"AssertionDemoCertificateResponse\":{\"title\":\"Todistuksen Varmennusvastaus\",\"token\":{\"title\":\"Varmennustunnus\",\"descr\":\"Tunnus, jota käytetään todistuksen varmentamiseen. Voi olla tyhjä.\"},\"tokenDecoded\":{\"title\":\"Purettu Varmennustunnus\",\"descr\":\"Varmennustunnuksen purettu versio. Voi olla tyhjä.\"},\"error\":{\"title\":\"Virheilmoitus\",\"descr\":\"Mahdollinen virheilmoitus, joka liittyy todistuksen varmentamiseen. Voi olla tyhjä.\"}},\"BeneficialOwners\":{\"title\":\"Hyötyomistajat\",\"ownedCompanyDetails\":{\"title\":\"Omistetun Yhtiön Tiedot\",\"descr\":\"Tiedot yhtiöstä, jota omistetaan. Voi olla tyhjä.\"},\"owners\":{\"title\":\"Omistajat\",\"descr\":\"Luettelo henkilöistä tai tahoista, jotka omistavat yhtiön. Voi olla tyhjä.\"},\"beneficiaries\":{\"title\":\"Hyötysaajat\",\"descr\":\"Luettelo henkilöistä, jotka hyötyvät yhtiön omistuksesta. Voi olla tyhjä.\"},\"workflowData\":{\"title\":\"Työprosessin Tiedot\",\"descr\":\"Tietoja liittyen omistajien hallintaprosessiin. Voi olla tyhjä.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste hyötyomistajien tietueelle. Voi olla tyhjä.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin tietue luotiin. Voi olla tyhjä.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin tietuetta viimeksi päivitettiin. Voi olla tyhjä.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Yhtiön pääomistaja. Voi olla tyhjä.\"},\"isReadOnly\":{\"title\":\"Vain Luku -tila\",\"descr\":\"Tietueen muokkausoikeus. Voi olla tyhjä.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Yhteistyökumppani, joka liittyy yhtiön omistukseen. Voi olla tyhjä.\"}},\"OwnedCompanyInfo\":{\"title\":\"Omistetun Yhtiön Tiedot\",\"totalNumberOfShares\":{\"title\":\"Osakkeiden Kokonaismäärä\",\"descr\":\"Yhtiön kaikkien osakkeiden kokonaismäärä. Voi olla tyhjä.\"}},\"BeneficialOwner\":{\"title\":\"Hyötyomistaja\",\"numberOfShares\":{\"title\":\"Osakkeiden Määrä\",\"descr\":\"Hyötyomistajan hallussa olevien osakkeiden määrä. Voi olla tyhjä.\"},\"percentOfShares\":{\"title\":\"Osuus Osakkeista\",\"descr\":\"Prosenttiosuus, joka hyötyomistajalla on yhtiön osakkeista. Voi olla tyhjä.\"},\"address\":{\"title\":\"Osoite\",\"descr\":\"Hyötyomistajan osoite. Voi olla tyhjä.\"},\"avatar\":{\"title\":\"Profiilikuva\",\"descr\":\"Hyötyomistajan profiilikuva. Voi olla tyhjä.\"},\"officialId\":{\"title\":\"Virallinen Tunniste\",\"descr\":\"Hyötyomistajan virallinen tunniste, kuten henkilötunnus. Voi olla tyhjä.\"},\"email\":{\"title\":\"Sähköpostiosoite\",\"descr\":\"Hyötyomistajan sähköpostiosoite. Voi olla tyhjä.\"},\"telephone\":{\"title\":\"Puhelinnumero\",\"descr\":\"Hyötyomistajan puhelinnumero. Voi olla tyhjä.\"},\"ibanNumber\":{\"title\":\"IBAN-numero\",\"descr\":\"Hyötyomistajan pankkitilin IBAN-numero. Voi olla tyhjä.\"}},\"Beneficiary\":{\"title\":\"Hyötysaaja\",\"nationality\":{\"title\":\"Kansalaisuus\",\"descr\":\"Hyötysaajan kansalaisuus. Voi olla tyhjä.\"},\"avatar\":{\"title\":\"Profiilikuva\",\"descr\":\"Hyötysaajan profiilikuva. Voi olla tyhjä.\"},\"officialId\":{\"title\":\"Virallinen Tunniste\",\"descr\":\"Hyötysaajan virallinen tunniste, kuten henkilötunnus. Voi olla tyhjä.\"},\"email\":{\"title\":\"Sähköpostiosoite\",\"descr\":\"Hyötysaajan sähköpostiosoite. Voi olla tyhjä.\"},\"telephone\":{\"title\":\"Puhelinnumero\",\"descr\":\"Hyötysaajan puhelinnumero. Voi olla tyhjä.\"},\"ibanNumber\":{\"title\":\"IBAN-numero\",\"descr\":\"Hyötysaajan pankkitilin IBAN-numero. Voi olla tyhjä.\"}},\"CalculationCorrection\":{\"title\":\"Laskennan Korjaus\",\"calculation\":{\"title\":\"Korjauslaskenta\",\"descr\":\"Viittaa laskentaan, joka on korjauksen kohteena.\"},\"state\":{\"title\":\"Tila\",\"descr\":\"Korjausprosessin nykyinen tila.\"},\"snapshot\":{\"title\":\"Tilannekuva\",\"descr\":\"Tallennettu tilannekuva korjauksen yhteydessä.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste korjaukselle.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Korjauksen luontipäivämäärä.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä korjaukselle.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Henkilö tai taho, joka omistaa korjauksen.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Indikoi, onko korjaus vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Korjaukseen liittyvä yhteistyökumppani.\"}},\"CorrectionCalculation\":{\"title\":\"Korjauslaskenta\",\"pricingModel\":{\"title\":\"Hinnoittelumalli\",\"descr\":\"Käytetty hinnoittelumalli laskennassa.\"},\"fixedFee\":{\"title\":\"Kiinteä maksu\",\"descr\":\"Laskentaan liittyvä kiinteä maksu.\"},\"cfa\":{\"title\":\"CFA-laskelma\",\"descr\":\"Laskelma CFA:n osalta.\"},\"employer\":{\"title\":\"Työnantajan laskelma\",\"descr\":\"Laskelma työnantajan osalta.\"},\"worker\":{\"title\":\"Työntekijän laskelma\",\"descr\":\"Laskelma työntekijän osalta.\"},\"workflow\":{\"title\":\"Työprosessi\",\"descr\":\"Laskentaan liittyvä työprosessi.\"},\"salary\":{\"title\":\"Palkka\",\"descr\":\"Laskentaan liittyvä palkkatieto.\"},\"rows\":{\"title\":\"Käyttäjän määrittämät rivit\",\"descr\":\"Käyttäjän määrittämät rivit laskennassa.\"},\"framework\":{\"title\":\"Viitekehys\",\"descr\":\"Laskennan viitekehys, joka korvataan tulevassa julkaisussa.\"},\"usecase\":{\"title\":\"Käyttötapaus\",\"descr\":\"Laskentaan liittyvä käyttötapaus.\"},\"result\":{\"title\":\"Laskentatulokset\",\"descr\":\"Laskennan tulokset.\"},\"info\":{\"title\":\"Laskentatiedot\",\"descr\":\"Lisätiedot laskennasta.\"},\"sharing\":{\"title\":\"Laskennan jakaminen\",\"descr\":\"Laskennan jakamiseen liittyvät tiedot.\"},\"accounting\":{\"title\":\"Laskentakirjanpito\",\"descr\":\"Laskentaan liittyvä kirjanpito.\"},\"worktime\":{\"title\":\"Työaika\",\"descr\":\"Laskentaan liittyvä työaika.\"},\"workflowData\":{\"title\":\"Työprosessin tiedot\",\"descr\":\"Työprosessiin liittyvät tiedot.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste laskennalle.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Laskennan luontipäivämäärä.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä laskennalle.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Henkilö tai taho, joka omistaa laskennan.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Indikoi, onko laskenta vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Laskentaan liittyvä yhteistyökumppani.\"}},\"SnapshotInput\":{\"title\":\"Tilannekuvan Syöte\",\"reasonCode\":{\"title\":\"Syykoodi\",\"descr\":\"Koodi, joka kuvaa tilannekuvan syytä.\"},\"severityCode\":{\"title\":\"Vakavuuskoodi\",\"descr\":\"Koodi, joka kuvaa tilannekuvan vakavuutta.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Tilannekuvan kuvaus.\"},\"categories\":{\"title\":\"Kategoriat\",\"descr\":\"Tilannekuvaan liittyvät kategoriat.\"}},\"CalcCfa\":{\"title\":\"CFA-laskelma\",\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä CFA-laskelmalle.\"},\"net\":{\"title\":\"Nettosumma\",\"descr\":\"CFA-laskelman nettosumma.\"},\"tax\":{\"title\":\"Verot\",\"descr\":\"CFA-laskelman verot.\"},\"pension\":{\"title\":\"Eläkemaksu\",\"descr\":\"CFA-laskelman eläkemaksu.\"},\"service\":{\"title\":\"Palvelumaksu\",\"descr\":\"CFA-laskelman palvelumaksu.\"},\"fee\":{\"title\":\"Maksu\",\"descr\":\"CFA-laskelman maksu.\"},\"total\":{\"title\":\"Kokonaissumma\",\"descr\":\"CFA-laskelman kokonaissumma.\"}},\"CalcEmployer\":{\"title\":\"Työnantajan Laskelma\",\"avatar\":{\"title\":\"Avatar\",\"descr\":\"Työnantajan avatar, jota ei huomioida laskelmassa.\"},\"accountId\":{\"title\":\"Tilitunnus\",\"descr\":\"Työnantajan tilitunnus.\"},\"isSelf\":{\"title\":\"Onko Itse\",\"descr\":\"Indikoi, onko työnantaja itse laskelman kohteena.\"},\"contact\":{\"title\":\"Yhteystiedot\",\"descr\":\"Työnantajan yhteystiedot.\"},\"officialId\":{\"title\":\"Virallinen Tunniste\",\"descr\":\"Työnantajan virallinen tunniste.\"}},\"CalcWorker\":{\"title\":\"Laskentatyöntekijä\",\"accountId\":{\"title\":\"Tilin Tunnus\",\"descr\":\"Työntekijän tilin yksilöllinen tunniste, mikäli saatavilla.\"},\"employmentId\":{\"title\":\"Työsuhteen Tunnus\",\"descr\":\"Työntekijän työsuhteen yksilöllinen tunniste, mikäli saatavilla.\"},\"paymentData\":{\"title\":\"Palkkatiedot\",\"descr\":\"Työntekijän palkkaan liittyvät tiedot, mikäli saatavilla.\"},\"avatar\":{\"title\":\"Profiilikuva\",\"descr\":\"Työntekijän profiilikuva, mikäli saatavilla.\"},\"isSelf\":{\"title\":\"Onko Oma\",\"descr\":\"Ilmaisee, onko työntekijä itse käyttäjä, mikäli saatavilla.\"},\"dateOfBirth\":{\"title\":\"Syntymäaika\",\"descr\":\"Työntekijän syntymäaika, mikäli saatavilla.\"},\"dateOfBirthAccuracy\":{\"title\":\"Syntymäajan Tarkkuus\",\"descr\":\"Syntymäajan tarkkuus, mikäli saatavilla.\"},\"tax\":{\"title\":\"Verotiedot\",\"descr\":\"Työntekijän verotukseen liittyvät tiedot, mikäli saatavilla.\"},\"contact\":{\"title\":\"Yhteystiedot\",\"descr\":\"Työntekijän yhteystiedot, mikäli saatavilla.\"}},\"CalcWorkflow\":{\"title\":\"Laskentatyönkulku\",\"status\":{\"title\":\"Tila\",\"descr\":\"Laskentaprosessin nykyinen tila, mikäli saatavilla.\"},\"paidAt\":{\"title\":\"Maksupäivä\",\"descr\":\"Päivämäärä, jolloin maksu on suoritettu, mikäli saatavilla.\"},\"salaryPaidAt\":{\"title\":\"Palkan Maksupäivä\",\"descr\":\"Päivämäärä, jolloin palkka on maksettu, mikäli saatavilla.\"},\"salaryDate\":{\"title\":\"Päivämäärä\",\"descr\":\"Päivämäärä, jolloin palkka on tarkoitus maksaa, mikäli saatavilla.\"},\"requestedSalaryDate\":{\"title\":\"Pyydetty Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkkaa on pyydetty maksettavaksi, mikäli saatavilla.\"},\"salaryDateKind\":{\"title\":\"Palkkapäivän Tyyppi\",\"descr\":\"Palkkapäivän tyyppi, mikäli saatavilla.\"}},\"Salary\":{\"title\":\"Palkka\",\"kind\":{\"title\":\"Palkkalaji\",\"descr\":\"Palkan tyyppi tai laji.\"},\"amount\":{\"title\":\"Määrä\",\"descr\":\"Palkan määrä, mikäli saatavilla.\"},\"price\":{\"title\":\"Hinta\",\"descr\":\"Palkan hinta tai arvo.\"},\"unit\":{\"title\":\"Yksikkö\",\"descr\":\"Palkan yksikkö, mikäli saatavilla.\"},\"message\":{\"title\":\"Viesti\",\"descr\":\"Lisätietoja palkasta, mikäli saatavilla.\"},\"isHouseholdDeductible\":{\"title\":\"Kotitalousvähennyskelpoinen\",\"descr\":\"Ilmaisee, onko palkka oikeutettu kotitalousvähennykseen, mikäli saatavilla.\"},\"taxDeductionCategories\":{\"title\":\"Verovähennyskategoriat\",\"descr\":\"Palkkaan liittyvät verovähennyskategoriat, mikäli saatavilla.\"}},\"UserDefinedRow\":{\"title\":\"Käyttäjän Määrittelemä Rivi\",\"rowIndex\":{\"title\":\"Rivin Indeksi\",\"descr\":\"Rivin järjestysnumero, mikäli saatavilla.\"},\"type\":{\"title\":\"Tyyppi\",\"descr\":\"Rivin tyyppi, mikäli saatavilla.\"},\"rowType\":{\"title\":\"Rivityyppi\",\"descr\":\"Rivin laskentatyyppi, mikäli saatavilla.\"},\"message\":{\"title\":\"Viesti\",\"descr\":\"Riviin liittyvä viesti tai huomautus, mikäli saatavilla.\"},\"count\":{\"title\":\"Määrä\",\"descr\":\"Rivillä oleva määrä, mikäli saatavilla.\"},\"price\":{\"title\":\"Hinta\",\"descr\":\"Rivin hinta, mikäli saatavilla.\"},\"unit\":{\"title\":\"Yksikkö\",\"descr\":\"Rivin yksikkö, mikäli saatavilla.\"},\"source\":{\"title\":\"Lähde\",\"descr\":\"Rivin tietolähde, mikäli saatavilla.\"},\"sourceId\":{\"title\":\"Lähteen Tunnus\",\"descr\":\"Lähteen yksilöllinen tunniste, mikäli saatavilla.\"},\"accounting\":{\"title\":\"Kirjanpito\",\"descr\":\"Rivin kirjanpitoon liittyvät tiedot, mikäli saatavilla.\"},\"period\":{\"title\":\"Aikajakso\",\"descr\":\"Rivin ajanjakso, mikäli saatavilla.\"},\"data\":{\"title\":\"Lisätiedot\",\"descr\":\"Riviin liittyvät lisätiedot.\"}},\"TesParameters\":{\"title\":\"TES Parametrit\",\"type\":{\"title\":\"Sopimustyyppi\",\"descr\":\"Työehtosopimuksen tyyppi, mikäli saatavilla.\"},\"subType\":{\"title\":\"Alatyyppi\",\"descr\":\"Työehtosopimuksen alatyyppi, mikäli saatavilla.\"},\"isTesIncludedInSalary\":{\"title\":\"TES Sisältyy Palkkaan\",\"descr\":\"Ilmaisee, sisältyykö työehtosopimus palkkaan, mikäli saatavilla.\"},\"numberOfDays\":{\"title\":\"Päivien Lukumäärä\",\"descr\":\"Työehtosopimukseen liittyvien päivien lukumäärä, mikäli saatavilla.\"},\"dailyTravelExpenses\":{\"title\":\"Päivittäiset Matkakulut\",\"descr\":\"Päivittäiset matkakulut, mikäli saatavilla.\"},\"dailyTravelExpensesKm\":{\"title\":\"Päivittäiset Matkakulut Kilometreinä\",\"descr\":\"Päivittäiset matkakulut kilometreinä, mikäli saatavilla.\"},\"dailyExpenses\":{\"title\":\"Päivittäiset Kulut\",\"descr\":\"Päivittäiset kulut, mikäli saatavilla.\"},\"isYksityisenHoidonTuki\":{\"title\":\"Yksityisen Hoidon Tuki\",\"descr\":\"Ilmaisee, onko kyseessä yksityisen hoidon tuki, mikäli saatavilla.\"},\"yksityisenHoidonTukiAmount\":{\"title\":\"Yksityisen Hoidon Tuen Määrä\",\"descr\":\"Yksityisen hoidon tuen määrä, mikäli saatavilla.\"}},\"UsecaseData\":{\"title\":\"Käyttötapauksen Tiedot\",\"uri\":{\"title\":\"Verkko-osoite\",\"descr\":\"Käyttötapauksen tunnistamiseen käytettävä verkko-osoite.\"},\"label\":{\"title\":\"Nimike\",\"descr\":\"Käyttötapauksen lyhyt kuvaus tai otsikko.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Yksityiskohtainen selitys käyttötapauksesta.\"},\"data\":{\"title\":\"Tiedot\",\"descr\":\"Käyttötapaukseen liittyvät lisätiedot.\"}},\"CalculationResult\":{\"title\":\"Laskennan Tulokset\",\"totals\":{\"title\":\"Kokonaissummat\",\"descr\":\"Laskennan kokonaissummat ja yhteenveto.\"},\"irRows\":{\"title\":\"IR-rivit\",\"descr\":\"Laskennan tuloksiin liittyvät yksityiskohtaiset rivit.\"},\"employerCalc\":{\"title\":\"Työnantajan Laskelma\",\"descr\":\"Työnantajan kustannuksiin liittyvät laskelmat.\"},\"workerCalc\":{\"title\":\"Työntekijän Laskelma\",\"descr\":\"Työntekijän palkkaan liittyvät laskelmat.\"},\"rows\":{\"title\":\"Tulorivit\",\"descr\":\"Yksityiskohtaiset laskentatulokset riveittäin.\"},\"responsibilities\":{\"title\":\"Työnantajan Vastuut\",\"descr\":\"Työnantajan vastuisiin liittyvät tiedot.\"},\"validation\":{\"title\":\"Validointi\",\"descr\":\"Laskennan tulosten tarkistamiseen liittyvät tiedot.\"}},\"CalcInfo\":{\"title\":\"Laskennan Tiedot\",\"workStartDate\":{\"title\":\"Työn Aloituspäivä\",\"descr\":\"Päivämäärä, jolloin työ alkaa.\"},\"workEndDate\":{\"title\":\"Työn Päättymispäivä\",\"descr\":\"Päivämäärä, jolloin työ päättyy.\"},\"workDescription\":{\"title\":\"Työn Kuvaus\",\"descr\":\"Lyhyt kuvaus suoritetusta työstä.\"},\"workerMessage\":{\"title\":\"Työntekijän Viesti\",\"descr\":\"Työntekijän viesti tai huomautus.\"},\"salarySlipMessage\":{\"title\":\"Palkkalaskelman Viesti\",\"descr\":\"Palkkalaskelmaan liittyvä viesti.\"},\"paymentId\":{\"title\":\"Maksutunnus\",\"descr\":\"Yksilöllinen tunnus maksutapahtumalle.\"},\"originalPaymentId\":{\"title\":\"Alkuperäinen Maksutunnus\",\"descr\":\"Alkuperäisen maksutapahtuman tunnus.\"},\"originalId\":{\"title\":\"Alkuperäinen Tunnus\",\"descr\":\"Viittaus alkuperäiseen tietueeseen.\"},\"paymentChannel\":{\"title\":\"Maksukanava\",\"descr\":\"Käytetty maksukanava tai -menetelmä.\"},\"applicationId\":{\"title\":\"Hakemustunnus\",\"descr\":\"Yksilöllinen tunnus hakemukselle.\"},\"messageThreadId\":{\"title\":\"Viestiketjun Tunnus\",\"descr\":\"Yksilöllinen tunnus viestiketjulle.\"},\"reportDate\":{\"title\":\"Raportointipäivä\",\"descr\":\"Päivämäärä, jolloin raportti on luotu.\"},\"backofficeNotes\":{\"title\":\"Backoffice-muistiinpanot\",\"descr\":\"Sisäiset muistiinpanot backoffice-käyttöön.\"},\"occupationCode\":{\"title\":\"Ammattikoodi\",\"descr\":\"Työntekijän ammattia kuvaava koodi.\"},\"occupationCode2\":{\"title\":\"Toissijainen Ammattikoodi\",\"descr\":\"Toissijainen koodi työntekijän ammatille.\"},\"cbaCode\":{\"title\":\"Työehtosopimuskoodi\",\"descr\":\"Koodi, joka viittaa sovellettavaan työehtosopimukseen.\"},\"pensionPaymentDate\":{\"title\":\"Eläkemaksun Päivämäärä\",\"descr\":\"Päivämäärä, jolloin eläkemaksu suoritetaan.\"},\"pensionPaymentRef\":{\"title\":\"Eläkemaksun Viite\",\"descr\":\"Viitenumero eläkemaksulle.\"},\"pensionPaymentSpecifier\":{\"title\":\"Eläkemaksun Erityistunniste\",\"descr\":\"Erityinen tunniste eläkemaksulle.\"},\"payrollId\":{\"title\":\"Palkanlaskentatunnus\",\"descr\":\"Yksilöllinen tunnus palkanlaskentatapahtumalle.\"},\"costCenter\":{\"title\":\"Kustannuspaikka\",\"descr\":\"Kustannuspaikka, johon kulut kohdistetaan.\"},\"workerSourceId\":{\"title\":\"Työntekijän Lähdetunnus\",\"descr\":\"Lähdetunnus, joka liittyy työntekijään.\"},\"sourceId\":{\"title\":\"Lähdetunnus\",\"descr\":\"Yksilöllinen tunnus tietolähteelle.\"}},\"CalculationSharing\":{\"title\":\"Laskennan Jakaminen\",\"type\":{\"title\":\"Jakotyyppi\",\"descr\":\"Tyyppi, jolla laskenta jaetaan.\"},\"uri\":{\"title\":\"Jakamislinkki\",\"descr\":\"Linkki, jonka kautta laskenta on jaettu.\"},\"lastSharedTo\":{\"title\":\"Viimeksi Jaettu Vastaanottaja\",\"descr\":\"Henkilö tai taho, jolle laskenta on viimeksi jaettu.\"},\"lastSharedCc\":{\"title\":\"Viimeksi Jaettu Kopiona\",\"descr\":\"Henkilö tai taho, jolle laskenta on viimeksi jaettu kopiona.\"},\"lastSharedMessage\":{\"title\":\"Viimeksi Jaettu Viesti\",\"descr\":\"Viesti, joka lähetettiin viimeisimmän jaon yhteydessä.\"}},\"CalculationAccounting\":{\"title\":\"Laskennan Kirjanpito\",\"dimensions\":{\"title\":\"Kustannuslaskennan Ulottuvuudet\",\"descr\":\"Kirjanpidossa käytettävät kustannuslaskennan ulottuvuudet.\"}},\"CalcWorktime\":{\"title\":\"Työajan Laskenta\",\"employmentPeriod\":{\"title\":\"Työsuhdejakso\",\"descr\":\"Ajanjakso, jona työntekijä on ollut työsuhteessa.\"},\"wageBasis\":{\"title\":\"Palkkaperuste\",\"descr\":\"Peruste, jonka mukaan työntekijän palkka lasketaan.\"},\"workDays\":{\"title\":\"Työpäivät\",\"descr\":\"Ajanjakso, jona työntekijä on työskennellyt.\"},\"absencesPeriods\":{\"title\":\"Poissaolojaksot\",\"descr\":\"Ajanjaksot, jolloin työntekijä on ollut poissa työstä.\"},\"absencesDailySalary\":{\"title\":\"Poissaolojen Päiväpalkka\",\"descr\":\"Päiväpalkka, joka maksetaan poissaolojen ajalta.\"},\"holidaySpec\":{\"title\":\"Lomamääritys\",\"descr\":\"Vuoden lomapäivien määräytymisen perusteet.\"},\"leavesDailySalary\":{\"title\":\"Vapaapäivien Päiväpalkka\",\"descr\":\"Päiväpalkka, joka maksetaan vapaapäivien ajalta.\"},\"bonusDailySalary\":{\"title\":\"Bonuksen Päiväpalkka\",\"descr\":\"Päiväpalkka, joka sisältää mahdolliset bonukset.\"},\"holidayPayAccrualRemaining\":{\"title\":\"Jäljellä oleva Lomapalkkakertymä\",\"descr\":\"Jäljellä oleva lomapalkka, joka on kertynyt.\"},\"holidayBonusAccrualRemaining\":{\"title\":\"Jäljellä oleva Lomabonuskertymä\",\"descr\":\"Jäljellä oleva lomabonus, joka on kertynyt.\"},\"accruals\":{\"title\":\"Kertymät\",\"descr\":\"Kuukausittaiset lomakertymät.\"},\"accrualSpec\":{\"title\":\"Kertymälaskennan Määritys\",\"descr\":\"Lomakertymien laskennan perusteet.\"}},\"CalcWorkerPaymentData\":{\"title\":\"Työntekijän Maksutiedot\",\"firstName\":{\"title\":\"Etunimi\",\"descr\":\"Työntekijän etunimi.\"},\"lastName\":{\"title\":\"Sukunimi\",\"descr\":\"Työntekijän sukunimi.\"},\"socialSecurityNumber\":{\"title\":\"Henkilötunnus\",\"descr\":\"Työntekijän henkilötunnus.\"},\"socialSecurityNumberValid\":{\"title\":\"Henkilötunnuksen Varmennus\",\"descr\":\"Tieto siitä, onko henkilötunnus voimassa.\"},\"ibanNumber\":{\"title\":\"IBAN-tilinumero\",\"descr\":\"Työntekijän pankkitilin IBAN-numero.\"},\"email\":{\"title\":\"Sähköpostiosoite\",\"descr\":\"Työntekijän sähköpostiosoite.\"},\"telephone\":{\"title\":\"Puhelinnumero\",\"descr\":\"Työntekijän puhelinnumero.\"}},\"CalcTax\":{\"title\":\"Verolaskenta\",\"taxcardId\":{\"title\":\"Verokortin Tunniste\",\"descr\":\"Verokortin yksilöllinen tunniste.\"},\"snapshot\":{\"title\":\"Verokortin Tilannekuva\",\"descr\":\"Ajankohtainen kuvaus verokortin tiedoista.\"},\"fixedTaxAmount\":{\"title\":\"Kiinteä Verosumma\",\"descr\":\"Ennalta määrätty verosumma.\"},\"isValid\":{\"title\":\"Voimassaolo\",\"descr\":\"Tieto siitä, onko verotiedot voimassa.\"},\"estimatedTax\":{\"title\":\"Arvioitu Vero\",\"descr\":\"Arvioitu verosumma.\"},\"hasNewSharedCard\":{\"title\":\"Uusi Yhteiskortti\",\"descr\":\"Tieto siitä, onko käytössä uusi yhteiskortti.\"},\"taxPercentForVisualization\":{\"title\":\"Veroprosentti Visualisointiin\",\"descr\":\"Veroprosentti, joka käytetään visualisoinnissa.\"}},\"RowAccounting\":{\"title\":\"Rivikirjanpito\",\"vatPercent\":{\"title\":\"ALV-prosentti\",\"descr\":\"Arvonlisäveron prosenttiosuus.\"}},\"TotalCalculationDTO\":{\"title\":\"Kokonaislaskenta\",\"pension\":{\"title\":\"Eläkemaksu\",\"descr\":\"Kokonaiseläkemaksu.\"},\"unemployment\":{\"title\":\"Työttömyysvakuutus\",\"descr\":\"Kokonaismäärä työttömyysvakuutusmaksuja.\"},\"total\":{\"title\":\"Kokonaismäärä\",\"descr\":\"Kokonaislaskelman summa.\"},\"totalBaseSalary\":{\"title\":\"Kokonaisperuspalkka\",\"descr\":\"Kokonaisperuspalkka ilman lisäyksiä.\"},\"totalGrossSalary\":{\"title\":\"Kokonaisbruttopalkka\",\"descr\":\"Kokonaisbruttopalkka ennen vähennyksiä.\"},\"totalTaxable\":{\"title\":\"Verotettava Kokonaismäärä\",\"descr\":\"Kokonaismäärä, josta vero lasketaan.\"},\"taxAtSourceDeduction\":{\"title\":\"Lähdeverovähennys\",\"descr\":\"Vähennys lähdeverosta.\"},\"totalSocialSecurityBase\":{\"title\":\"Sosiaaliturvan Perusta\",\"descr\":\"Kokonaismäärä sosiaaliturvan perusteeksi.\"},\"totalPensionInsuranceBase\":{\"title\":\"Eläkevakuutuksen Perusta\",\"descr\":\"Kokonaismäärä eläkevakuutuksen perusteeksi.\"},\"totalUnemploymentInsuranceBase\":{\"title\":\"Työttömyysvakuutuksen Perusta\",\"descr\":\"Kokonaismäärä työttömyysvakuutuksen perusteeksi.\"},\"totalHealthInsuranceBase\":{\"title\":\"Sairausvakuutuksen Perusta\",\"descr\":\"Kokonaismäärä sairausvakuutuksen perusteeksi.\"},\"totalAccidentInsuranceBase\":{\"title\":\"Tapaturmavakuutuksen Perusta\",\"descr\":\"Kokonaismäärä tapaturmavakuutuksen perusteeksi.\"},\"totalExpenses\":{\"title\":\"Kokonaiskulut\",\"descr\":\"Kokonaismäärä kuluista.\"},\"totalPayable\":{\"title\":\"Maksettava Kokonaismäärä\",\"descr\":\"Kokonaismäärä, joka on maksettava.\"}},\"ApiValidation\":{\"title\":\"Rajapinnan Vahvistus\",\"isValid\":{\"title\":\"Onko Voimassa\",\"descr\":\"Ilmaisee, onko rajapinnan tarkistus onnistunut.\"},\"hasAllRequiredFields\":{\"title\":\"Sisältääkö Kaikki Tarvittavat Kentät\",\"descr\":\"Ilmaisee, onko kaikki vaaditut kentät täytetty.\"},\"errors\":{\"title\":\"Virheet\",\"descr\":\"Lista mahdollisista virheistä, jotka havaittiin tarkistuksen aikana.\"}},\"CostAccountingDimension\":{\"title\":\"Kustannuslaskennan Ulottuvuus\",\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste kustannuslaskennan ulottuvuudelle.\"},\"value\":{\"title\":\"Arvo\",\"descr\":\"Ulottuvuuden taloudellinen arvo.\"},\"percent\":{\"title\":\"Prosenttiosuus\",\"descr\":\"Ulottuvuuden osuus prosentteina kokonaisuudesta.\"}},\"HolidaySpecificationForYear\":{\"title\":\"Vuosiloman Määrittely\",\"wageBasis\":{\"title\":\"Palkkaperuste\",\"descr\":\"Perusta, jonka mukaan vuosilomapalkka lasketaan.\"},\"employmentPeriod\":{\"title\":\"Työsuhteen Kesto\",\"descr\":\"Ajanjakso, jonka aikana työsuhde on voimassa.\"},\"code\":{\"title\":\"Lomakoodi\",\"descr\":\"Koodi, joka määrittää lomatyypin.\"},\"holidayPayCalculation\":{\"title\":\"Lomapalkan Laskenta\",\"descr\":\"Menetelmä, jolla lomapalkka lasketaan.\"},\"accrualFixed\":{\"title\":\"Kertyvä Kiinteä\",\"descr\":\"Kiinteä määrä, joka kertyy vuosilomaa varten.\"}},\"MonthlyHolidayAccrual\":{\"title\":\"Kuukausittainen Lomakertymä\",\"month\":{\"title\":\"Kuukausi\",\"descr\":\"Kuukausi, jolle lomakertymä lasketaan.\"},\"daysAccrued\":{\"title\":\"Kertyneet Päivät\",\"descr\":\"Lukumäärä päiviä, jotka ovat kertyneet lomaa varten.\"},\"absencesDays\":{\"title\":\"Poissaolopäivät\",\"descr\":\"Lukumäärä päiviä, jolloin työntekijä on ollut poissa.\"},\"workDays\":{\"title\":\"Työpäivät\",\"descr\":\"Lukumäärä päiviä, jolloin työntekijä on ollut töissä.\"},\"workHours\":{\"title\":\"Työtunnit\",\"descr\":\"Lukumäärä tunteja, jotka työntekijä on työskennellyt.\"},\"calcId\":{\"title\":\"Laskentatunniste\",\"descr\":\"Yksilöllinen tunniste laskennalle.\"}},\"HolidayAccrualCalcSpecification\":{\"title\":\"Lomakertymän Laskentamäärittely\",\"year\":{\"title\":\"Vuosi\",\"descr\":\"Vuosi, jolle lomakertymän laskenta suoritetaan.\"},\"code\":{\"title\":\"Lomakoodi\",\"descr\":\"Koodi, joka määrittää lomatyypin laskennassa.\"},\"wageBasis\":{\"title\":\"Palkkaperuste\",\"descr\":\"Perusta, jonka mukaan lomakertymä lasketaan.\"},\"defaultAccrual\":{\"title\":\"Oletuskertymä\",\"descr\":\"Oletusarvo lomakertymälle, ellei muuta määritellä.\"}},\"TaxcardSnapshot\":{\"title\":\"Verokortin Tilannekuva\",\"forYear\":{\"title\":\"Vuosi\",\"descr\":\"Vuosi, jolle verokortti on voimassa.\"},\"validity\":{\"title\":\"Voimassaoloaika\",\"descr\":\"Ajanjakso, jolloin verokortti on voimassa.\"},\"taxPercent\":{\"title\":\"Veroprosentti\",\"descr\":\"Ensisijainen veroprosentti, jota sovelletaan tuloihin.\"},\"incomeLimit\":{\"title\":\"Tuloraja\",\"descr\":\"Tulojen yläraja, jonka jälkeen veroprosentti voi muuttua.\"},\"cumulativeIncome\":{\"title\":\"Kumulatiivinen Tulo\",\"descr\":\"Kertyneet tulot verovuoden aikana.\"},\"taxPercent2\":{\"title\":\"Toissijainen Veroprosentti\",\"descr\":\"Veroprosentti, jota sovelletaan tulojen ylittäessä tietyn rajan.\"},\"taxPercentMin\":{\"title\":\"Minimiveroprosentti\",\"descr\":\"Alin mahdollinen veroprosentti.\"},\"taxPercentMinOwned\":{\"title\":\"Omistettu Minimiveroprosentti\",\"descr\":\"Alin veroprosentti, joka on yksilöllisesti määritetty.\"},\"incomeType\":{\"title\":\"Tulolaji\",\"descr\":\"Tulojen tyyppi, johon verokortti liittyy.\"},\"kind\":{\"title\":\"Verokortin Laji\",\"descr\":\"Verokortin tyyppi tai kategoria.\"},\"fileUri\":{\"title\":\"Tiedoston URI\",\"descr\":\"Verokortin tiedoston sijainti.\"},\"previewUri\":{\"title\":\"Esikatselun URI\",\"descr\":\"Verokortin esikatselun sijainti.\"},\"lastChecked\":{\"title\":\"Viimeksi Tarkistettu\",\"descr\":\"Viimeisin ajankohta, jolloin verokortti tarkistettiin.\"}},\"VatEntry\":{\"title\":\"ALV-kirjaus\",\"tax\":{\"title\":\"Vero\",\"descr\":\"Arvonlisäveron määrä.\"},\"vatRate\":{\"title\":\"ALV-kanta\",\"descr\":\"Sovellettava arvonlisäverokanta.\"},\"taxPercent\":{\"title\":\"Veroprosentti\",\"descr\":\"Veroprosentti, jota sovelletaan myyntiin.\"},\"gross\":{\"title\":\"Bruttosumma\",\"descr\":\"Kokonaismäärä ennen verojen vähentämistä.\"},\"net\":{\"title\":\"Nettosumma\",\"descr\":\"Määrä verojen vähentämisen jälkeen.\"}},\"IrDetails\":{\"title\":\"IR-yksityiskohdat\",\"code\":{\"title\":\"Koodi\",\"descr\":\"Yksilöllinen tunniste IR-yksityiskohdille.\"},\"flags\":{\"title\":\"Liput\",\"descr\":\"Erityiset merkinnät tai huomautukset.\"},\"insuranceExceptions\":{\"title\":\"Vakuutuspoikkeukset\",\"descr\":\"Poikkeukset tavanomaisista vakuutussäännöistä.\"},\"dailyAllowance\":{\"title\":\"Päiväraha\",\"descr\":\"Koodit päivärahoille, jotka ovat käytössä.\"},\"mealBenefitIsTaxValue\":{\"title\":\"Ateriaetu Verotusarvona\",\"descr\":\"Ilmaisee, onko ateriaetu verotusarvo.\"},\"carBenefit\":{\"title\":\"Autoetu\",\"descr\":\"Autoetuun liittyvät yksityiskohdat.\"},\"noTransactionAmount\":{\"title\":\"Ei Tapahtumasummaa\",\"descr\":\"Ilmaisee, ettei tapahtumalla ole rahallista arvoa.\"}},\"IrRowCalculationProperties\":{\"title\":\"IR-rivin Laskentaominaisuudet\",\"grouping\":{\"title\":\"Ryhmittely\",\"descr\":\"Laskennan ryhmittelyperuste.\"},\"behavior\":{\"title\":\"Käyttäytyminen\",\"descr\":\"Laskennan toimintatavat tai säännöt.\"},\"type\":{\"title\":\"Tyyppi\",\"descr\":\"Laskentarivin tyyppi tai kategoria.\"}},\"EmployerGroups\":{\"title\":\"Työnantajaryhmät\",\"isPrivatePerson\":{\"title\":\"Yksityishenkilö\",\"descr\":\"Ilmaisee, onko työnantaja yksityishenkilö.\"}},\"ApiValidationError\":{\"title\":\"API:n Validointivirhe\",\"key\":{\"title\":\"Virheavain\",\"descr\":\"Tunniste, joka osoittaa virheen kohteen, jos saatavilla.\"},\"type\":{\"title\":\"Virhetyyppi\",\"descr\":\"Kuvaa virheen luonteen tai kategorian.\"},\"msg\":{\"title\":\"Virheviesti\",\"descr\":\"Selkeä kuvaus virheestä käyttäjälle.\"},\"description\":{\"title\":\"Virheen kuvaus\",\"descr\":\"Lisätietoja virheestä, jos saatavilla.\"},\"code\":{\"title\":\"Virhekoodi\",\"descr\":\"Koodi, joka tunnistaa virheen, jos saatavilla.\"}},\"CarBenefit\":{\"title\":\"Auton Etu\",\"carBenefitCode\":{\"title\":\"Auton Etukoodi\",\"descr\":\"Koodi, joka määrittää auton etuuden tyypin, jos saatavilla.\"},\"ageGroupCode\":{\"title\":\"Ikäryhmäkoodi\",\"descr\":\"Koodi, joka määrittää etuuden ikäryhmän, jos saatavilla.\"},\"kilometers\":{\"title\":\"Kilometrit\",\"descr\":\"Auton etuuden perusteena olevat kilometrit, jos saatavilla.\"},\"emissionsValue\":{\"title\":\"Päästöarvo\",\"descr\":\"Auton päästöarvo, joka vaikuttaa etuuteen, jos saatavilla.\"}},\"PageResultOfCalculationListItem\":{\"title\":\"Laskentatulosten Sivutulos\",\"items\":{\"title\":\"Laskentaerät\",\"descr\":\"Luettelo laskentaeristä tällä sivulla, jos saatavilla.\"},\"nextPageLink\":{\"title\":\"Seuraavan Sivun Linkki\",\"descr\":\"Linkki seuraavalle sivulle, jos saatavilla.\"},\"count\":{\"title\":\"Erien Lukumäärä\",\"descr\":\"Tällä sivulla olevien laskentaerien kokonaismäärä, jos saatavilla.\"}},\"CalculationListItem\":{\"title\":\"Laskentaerä\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin laskentaerä luotiin, jos saatavilla.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin laskentaerää viimeksi päivitettiin, jos saatavilla.\"},\"ownerId\":{\"title\":\"Omistajan Tunniste\",\"descr\":\"Tunniste, joka osoittaa laskentaerän omistajan, jos saatavilla.\"},\"ownerInfo\":{\"title\":\"Omistajan Tiedot\",\"descr\":\"Tietoja laskentaerän omistajasta, jos saatavilla.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Laskentaerän nykyinen tila, jos saatavilla.\"},\"backOfficeStatus\":{\"title\":\"Taustatoimiston Tila\",\"descr\":\"Laskentaerän tila taustatoimistossa, jos saatavilla.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Laskentaerän aloituspäivämäärä, jos saatavilla.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Laskentaerän päättymispäivämäärä, jos saatavilla.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Laskentaerän bruttopalkka, jos saatavilla.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Laskentaerään liittyvä maksu, jos saatavilla.\"},\"fee\":{\"title\":\"Maksu\",\"descr\":\"Laskentaerään liittyvä maksu, jos saatavilla.\"},\"otherId\":{\"title\":\"Muu Tunniste\",\"descr\":\"Toinen tunniste laskentaerälle, jos saatavilla.\"},\"otherPartyInfo\":{\"title\":\"Toisen Osapuolen Tiedot\",\"descr\":\"Tietoja laskentaerän toisesta osapuolesta, jos saatavilla.\"},\"shortText\":{\"title\":\"Lyhyt Teksti\",\"descr\":\"Lyhyt kuvaus laskentaerästä, jos saatavilla.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Luettelo liiketoimintaobjekteista, jotka liittyvät laskentaerään, jos saatavilla.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan, jos saatavilla.\"},\"data\":{\"title\":\"Laskentatiedot\",\"descr\":\"Yksityiskohtaiset tiedot laskentaerästä, jos saatavilla.\"},\"versionNumber\":{\"title\":\"Versio Numero\",\"descr\":\"Laskentaerän versionumero, jos saatavilla.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Laskentaerän URI, jos saatavilla.\"},\"flags\":{\"title\":\"Liput\",\"descr\":\"Erilaiset laskentaerään liittyvät merkit, jos saatavilla.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Laskentaerään liittyvät viestit, jos saatavilla.\"},\"entityType\":{\"title\":\"Entiteettityyppi\",\"descr\":\"Laskentaerän entiteettityyppi, jos saatavilla.\"},\"logicalDate\":{\"title\":\"Looginen Päivämäärä\",\"descr\":\"Laskentaerän looginen päivämäärä, jos saatavilla.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Viite laskentaerään, jos saatavilla.\"},\"externalId\":{\"title\":\"Ulkoinen Tunniste\",\"descr\":\"Ulkoinen tunniste laskentaerälle, jos saatavilla.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Laskentaerän yksilöllinen tunniste, jos saatavilla.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Laskentaerän omistaja, jos saatavilla.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Ilmaisee, onko laskentaerä vain luku, jos saatavilla.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Laskentaerään liittyvä liikekumppani, jos saatavilla.\"}},\"CalculationData\":{\"title\":\"Laskentatiedot\",\"requestedSalaryDate\":{\"title\":\"Pyydetty Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka on pyydetty maksettavaksi, jos saatavilla.\"},\"workerPayment\":{\"title\":\"Työntekijän Maksu\",\"descr\":\"Työntekijälle maksettava summa, jos saatavilla.\"},\"pensionPayment\":{\"title\":\"Eläkemaksu\",\"descr\":\"Eläkemaksu, joka liittyy laskentaan, jos saatavilla.\"},\"taxPayment\":{\"title\":\"Veromaksu\",\"descr\":\"Laskentaan liittyvä veromaksu, jos saatavilla.\"},\"socialSecurityPayment\":{\"title\":\"Sosiaaliturvamaksu\",\"descr\":\"Sosiaaliturvamaksu, joka liittyy laskentaan, jos saatavilla.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Laskentatietojen nykyinen tila, jos saatavilla.\"},\"payrollId\":{\"title\":\"Palkanlaskennan Tunniste\",\"descr\":\"Tunniste, joka liittyy palkanlaskentaan, jos saatavilla.\"},\"employmentId\":{\"title\":\"Työsuhteen Tunniste\",\"descr\":\"Tunniste, joka liittyy työsuhteeseen, jos saatavilla.\"},\"usecaseUri\":{\"title\":\"Käyttötapaus URI\",\"descr\":\"URI, joka liittyy laskennan käyttötapaukseen, jos saatavilla.\"},\"messageThreadId\":{\"title\":\"Viestiketjun Tunniste\",\"descr\":\"Tunniste, joka liittyy viestiketjuun, jos saatavilla.\"},\"partnerMessageAssignedTo\":{\"title\":\"Kumppanin Viesti Kohdistettu\",\"descr\":\"Kumppanin viestin kohdistaminen, jos saatavilla.\"},\"workStartDate\":{\"title\":\"Työn Aloituspäivä\",\"descr\":\"Päivämäärä, jolloin työ alkaa, jos saatavilla.\"},\"workEndDate\":{\"title\":\"Työn Päättymispäivä\",\"descr\":\"Päivämäärä, jolloin työ päättyy, jos saatavilla.\"},\"paymentChannel\":{\"title\":\"Maksukanava\",\"descr\":\"Kanava, jota käytetään maksun suorittamiseen, jos saatavilla.\"},\"totalTaxable\":{\"title\":\"Verotettava Kokonaismäärä\",\"descr\":\"Laskennan verotettava kokonaismäärä, jos saatavilla.\"},\"salary\":{\"title\":\"Palkka\",\"descr\":\"Laskentaan liittyvä palkka, jos saatavilla.\"},\"allowances\":{\"title\":\"Lisät\",\"descr\":\"Laskentaan liittyvät lisät, jos saatavilla.\"},\"benefits\":{\"title\":\"Edut\",\"descr\":\"Laskentaan liittyvät edut, jos saatavilla.\"},\"deductions\":{\"title\":\"Vähennykset\",\"descr\":\"Laskentaan liittyvät vähennykset, jos saatavilla.\"},\"expenses\":{\"title\":\"Kulut\",\"descr\":\"Laskentaan liittyvät kulut, jos saatavilla.\"}},\"DocumentFlowItem\":{\"title\":\"Asiakirjavirtauksen Kohde\",\"item\":{\"title\":\"Kohde\",\"descr\":\"Viittaa yksittäiseen asiakirjavirtauksen kohteeseen, joka voi olla olemassa tai puuttua.\"},\"children\":{\"title\":\"Alikohteet\",\"descr\":\"Sisältää mahdolliset alikohteet, jotka liittyvät asiakirjavirtauksen kohteeseen.\"}},\"IApiListItem\":{\"title\":\"API-listan Kohde\",\"ownerId\":{\"title\":\"Omistajan Tunniste\",\"descr\":\"Tunnistaa kohteen omistajan yksilöllisesti.\"},\"ownerInfo\":{\"title\":\"Omistajan Tiedot\",\"descr\":\"Sisältää tietoja kohteen omistajasta.\"},\"backOfficeStatus\":{\"title\":\"Taustatoimiston Tila\",\"descr\":\"Ilmaisee kohteen käsittelyn tilan taustatoimistossa.\"},\"startAt\":{\"title\":\"Aloitusajankohta\",\"descr\":\"Määrittää ajankohdan, jolloin kohde alkaa.\"},\"endAt\":{\"title\":\"Päättymisajankohta\",\"descr\":\"Määrittää ajankohdan, jolloin kohde päättyy.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Kohteen kokonaispalkka ennen vähennyksiä.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Kohteeseen liittyvä maksu.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Kohteeseen liittyvä palkkio tai maksu.\"},\"otherId\":{\"title\":\"Toisen Osapuolen Tunniste\",\"descr\":\"Tunnistaa toisen osapuolen yksilöllisesti.\"},\"otherPartyInfo\":{\"title\":\"Toisen Osapuolen Tiedot\",\"descr\":\"Sisältää tietoja toisesta osapuolesta.\"},\"shortText\":{\"title\":\"Lyhyt Kuvaus\",\"descr\":\"Lyhyt kuvaus kohteesta.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Luettelo liiketoimintaan liittyvistä objekteista.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"versionNumber\":{\"title\":\"Versio Numero\",\"descr\":\"Kohteen versionumero.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Kohteen yksilöllinen resurssitunniste.\"},\"flags\":{\"title\":\"Merkit\",\"descr\":\"Luettelo kohteeseen liittyvistä merkeistä tai tunnisteista.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Kohteeseen liittyvät viestit tai ilmoitukset.\"},\"entityType\":{\"title\":\"Entiteetin Tyyppi\",\"descr\":\"Kohteen tyyppi liiketoimintaympäristössä.\"},\"logicalDate\":{\"title\":\"Looginen Päivämäärä\",\"descr\":\"Kohteen looginen päivämäärä liiketoimintaprosessissa.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Viite, joka liittyy kohteeseen.\"},\"externalId\":{\"title\":\"Ulkoinen Tunniste\",\"descr\":\"Kohteen ulkoinen tunniste.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Kohteen yksilöllinen tunniste.\"},\"createdAt\":{\"title\":\"Luontiaika\",\"descr\":\"Ajankohta, jolloin kohde luotiin.\"},\"updatedAt\":{\"title\":\"Päivitysaika\",\"descr\":\"Ajankohta, jolloin kohdetta viimeksi päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Kohteen omistaja.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Ilmaisee, onko kohde vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Kohteeseen liittyvä yhteistyökumppani.\"}},\"Calculation\":{\"title\":\"Laskenta\",\"employer\":{\"title\":\"Työnantaja\",\"descr\":\"Tietoja laskentaan liittyvästä työnantajasta.\"},\"worker\":{\"title\":\"Työntekijä\",\"descr\":\"Tietoja laskentaan liittyvästä työntekijästä.\"},\"workflow\":{\"title\":\"Työnkulku\",\"descr\":\"Laskentaan liittyvä työnkulku.\"},\"salary\":{\"title\":\"Palkka\",\"descr\":\"Laskentaan liittyvä palkkatieto.\"},\"rows\":{\"title\":\"Rivit\",\"descr\":\"Käyttäjän määrittelemät rivit laskennassa.\"},\"framework\":{\"title\":\"Viitekehys\",\"descr\":\"Laskennan viitekehys, joka korvataan tulevassa julkaisussa.\"},\"usecase\":{\"title\":\"Käyttötapaus\",\"descr\":\"Laskennan käyttötapaus ja sen tiedot.\"},\"result\":{\"title\":\"Tulos\",\"descr\":\"Laskennan lopputulos.\"},\"info\":{\"title\":\"Tiedot\",\"descr\":\"Lisätietoja laskennasta.\"},\"sharing\":{\"title\":\"Jakaminen\",\"descr\":\"Laskennan jakamiseen liittyvät tiedot.\"},\"accounting\":{\"title\":\"Kirjanpito\",\"descr\":\"Laskentaan liittyvät kirjanpitotiedot.\"},\"worktime\":{\"title\":\"Työaika\",\"descr\":\"Laskentaan liittyvä työaikatieto.\"},\"workflowData\":{\"title\":\"Työnkulun Tiedot\",\"descr\":\"Tietoa laskentaan liittyvästä työnkulusta.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Laskennan yksilöllinen tunniste.\"},\"createdAt\":{\"title\":\"Luontiaika\",\"descr\":\"Ajankohta, jolloin laskenta luotiin.\"},\"updatedAt\":{\"title\":\"Päivitysaika\",\"descr\":\"Ajankohta, jolloin laskentaa viimeksi päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Laskennan omistaja.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Ilmaisee, onko laskenta vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Laskentaan liittyvä yhteistyökumppani.\"}},\"CalculationCopyOptions\":{\"title\":\"Laskennan Kopiointivaihtoehdot\",\"startDate\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, josta kopiointi alkaa.\"},\"endDate\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, johon kopiointi päättyy.\"},\"numberOfDays\":{\"title\":\"Päivien Lukumäärä\",\"descr\":\"Kopioitavien päivien kokonaismäärä.\"}},\"YearlyChangingNumbers\":{\"title\":\"Vuosittain Muuttuvat Numerot\",\"year\":{\"title\":\"Vuosi\",\"descr\":\"Vuosi, johon numerot liittyvät.\"},\"sideCosts\":{\"title\":\"Sivukulut\",\"descr\":\"Vuoteen liittyvät sivukulut.\"},\"holidays\":{\"title\":\"Lomat\",\"descr\":\"Vuoteen liittyvät lomapäivät.\"}},\"YearlySideCosts\":{\"title\":\"Vuosittaiset Sivu- ja Lisäkustannukset\",\"unemploymentEmployerPercent\":{\"title\":\"Työttömyysvakuutusmaksu Työnantajalle\",\"descr\":\"Prosenttiosuus, jonka työnantaja maksaa työttömyysvakuutuksesta.\"},\"unemploymentHigherEmployerPercent\":{\"title\":\"Korkeampi Työttömyysvakuutusmaksu Työnantajalle\",\"descr\":\"Korotettu prosenttiosuus, jonka työnantaja maksaa työttömyysvakuutuksesta.\"},\"unemploymentWorkerPercent\":{\"title\":\"Työttömyysvakuutusmaksu Työntekijälle\",\"descr\":\"Prosenttiosuus, jonka työntekijä maksaa työttömyysvakuutuksesta.\"},\"unemploymentPartialOwnerWorkerPercent\":{\"title\":\"Työttömyysvakuutusmaksu Osittaiselle Omistajalle\",\"descr\":\"Prosenttiosuus, jonka osittainen omistaja maksaa työttömyysvakuutuksesta.\"},\"tyelIncomeLimit\":{\"title\":\"TyEL Tuloraja\",\"descr\":\"Tulojen alaraja, jonka ylittäessä TyEL-maksut tulevat maksettaviksi.\"},\"tyelBasePercent\":{\"title\":\"TyEL Perusprosentti\",\"descr\":\"Perusprosenttiosuus TyEL-maksuille.\"},\"tyelWorkerPercent\":{\"title\":\"TyEL Työntekijän Prosentti\",\"descr\":\"Prosenttiosuus, jonka työntekijä maksaa TyEL-maksuista.\"},\"tyel53Percent\":{\"title\":\"TyEL 53-vuoden Prosentti\",\"descr\":\"Prosenttiosuus TyEL-maksuista yli 53-vuotiaille työntekijöille.\"},\"tyelContractEmployerLimit\":{\"title\":\"TyEL Sopimus Työnantajan Raja\",\"descr\":\"Tulojen yläraja, jonka ylittäessä TyEL-sopimus on pakollinen työnantajalle.\"},\"socSecPercent\":{\"title\":\"Sosiaaliturvamaksu\",\"descr\":\"Prosenttiosuus, joka maksetaan sosiaaliturvamaksuna.\"},\"illnessInsurancePercent\":{\"title\":\"Sairausvakuutusmaksu\",\"descr\":\"Prosenttiosuus, joka maksetaan sairausvakuutuksesta.\"},\"healthInsuranceMedicalCareContribution\":{\"title\":\"Sairausvakuutuksen Hoitomaksu\",\"descr\":\"Osuus, joka kattaa sairaanhoitokulut sairausvakuutuksessa.\"},\"healthInsuranceDailyAllowanceContribution\":{\"title\":\"Sairausvakuutuksen Päivärahaosuus\",\"descr\":\"Osuus, joka kattaa päivärahat sairausvakuutuksessa.\"},\"taxFreeDailyAllowance\":{\"title\":\"Verovapaa Päiväraha\",\"descr\":\"Määrä, joka voidaan maksaa verovapaana päivärahana.\"},\"taxFreeDailyHalfAllowance\":{\"title\":\"Verovapaa Puolipäiväraha\",\"descr\":\"Määrä, joka voidaan maksaa verovapaana puolipäivärahana.\"},\"taxFreeMealAllowance\":{\"title\":\"Verovapaa Ateriakorvaus\",\"descr\":\"Määrä, joka voidaan maksaa verovapaana ateriakorvauksena.\"},\"taxFreeBicycleBenefit\":{\"title\":\"Verovapaa Polkupyöräetu\",\"descr\":\"Määrä, joka voidaan tarjota verovapaana polkupyöräetuna.\"},\"taxFreeSubsidisedCommute\":{\"title\":\"Verovapaa Työmatkaetu\",\"descr\":\"Määrä, joka voidaan tarjota verovapaana työmatkaetuna.\"},\"taxFreeKmAllowance\":{\"title\":\"Verovapaa Kilometrikorvaus\",\"descr\":\"Määrä, joka voidaan maksaa verovapaana kilometrikorvauksena.\"},\"unionPaymentRaksaA\":{\"title\":\"Rakennusalan Liittomaksu A\",\"descr\":\"Maksu, joka suoritetaan rakennusalan liitolle, tyyppi A.\"},\"unionPaymentRaksaAoTa\":{\"title\":\"Rakennusalan Liittomaksu AoTa\",\"descr\":\"Maksu, joka suoritetaan rakennusalan liitolle, tyyppi AoTa.\"},\"palkkausVatPercent\":{\"title\":\"Palkkauksen ALV-prosentti\",\"descr\":\"Prosenttiosuus, joka lisätään palkkaukseen arvonlisäverona.\"},\"palkkausVatRate\":{\"title\":\"Palkkauksen ALV-kanta\",\"descr\":\"Arvonlisäverokanta, joka sovelletaan palkkaukseen.\"},\"householdDeduction\":{\"title\":\"Kotitalousvähennys\",\"descr\":\"Määrä, joka voidaan vähentää kotitalousvähennyksenä.\"},\"householdDeductionExtended\":{\"title\":\"Laajennettu Kotitalousvähennys\",\"descr\":\"Laajennettu määrä, joka voidaan vähentää kotitalousvähennyksenä.\"},\"householdDeductionMaxAmount\":{\"title\":\"Kotitalousvähennyksen Enimmäismäärä\",\"descr\":\"Suurin määrä, joka voidaan vähentää kotitalousvähennyksenä.\"},\"householdDeductionMaxAmountExtended\":{\"title\":\"Laajennetun Kotitalousvähennyksen Enimmäismäärä\",\"descr\":\"Suurin laajennettu määrä, joka voidaan vähentää kotitalousvähennyksenä.\"},\"householdDeductionCategoriesExtended\":{\"title\":\"Laajennetut Kotitalousvähennyksen Kategoriat\",\"descr\":\"Kategoriat, jotka kuuluvat laajennettuun kotitalousvähennykseen.\"},\"householdDeductionDeductible\":{\"title\":\"Kotitalousvähennyksen Omavastuu\",\"descr\":\"Omavastuuosuus, joka vähennetään kotitalousvähennyksestä.\"},\"mealBenefitCateringContract\":{\"title\":\"Ateriaetu Catering-sopimuksella\",\"descr\":\"Määrä, joka voidaan tarjota ateriaetuna catering-sopimuksen kautta.\"},\"mealBenefitInstitute\":{\"title\":\"Ateriaetu Laitokselle\",\"descr\":\"Määrä, joka voidaan tarjota ateriaetuna laitokselle.\"},\"mealBenefitRestaurantWorker\":{\"title\":\"Ateriaetu Ravintolatyöntekijälle\",\"descr\":\"Määrä, joka voidaan tarjota ateriaetuna ravintolatyöntekijälle.\"},\"mealBenefitTeacher\":{\"title\":\"Ateriaetu Opettajalle\",\"descr\":\"Määrä, joka voidaan tarjota ateriaetuna opettajalle.\"},\"mealTicketLowerLimit\":{\"title\":\"Ateriakupongin Alaraja\",\"descr\":\"Alin määrä, jonka ateriakuponki voi kattaa.\"},\"mealTicketUpperLimit\":{\"title\":\"Ateriakupongin Yläraja\",\"descr\":\"Ylin määrä, jonka ateriakuponki voi kattaa.\"},\"mealTicketTaxable\":{\"title\":\"Verotettava Ateriakuponki\",\"descr\":\"Määrä, joka on verotettavaa ateriakupongista.\"},\"protectedPortionBase\":{\"title\":\"Suojattu Osuus Perus\",\"descr\":\"Perusmäärä, joka on suojattu ulosmittaukselta.\"},\"protectedPortionDependant\":{\"title\":\"Suojattu Osuus Huollettavalle\",\"descr\":\"Määrä, joka on suojattu ulosmittaukselta huollettavan osalta.\"}},\"HolidayDate\":{\"title\":\"Lomapäivä\",\"date\":{\"title\":\"Päivämäärä\",\"descr\":\"Lomapäivän päivämäärä.\"},\"holiday\":{\"title\":\"Loma\",\"descr\":\"Loman tyyppi tai nimi.\"},\"holidayGroups\":{\"title\":\"Lomaryhmät\",\"descr\":\"Ryhmät, joihin loma kuuluu.\"},\"localName\":{\"title\":\"Paikallinen Nimi\",\"descr\":\"Loman paikallinen nimi.\"},\"name\":{\"title\":\"Nimi\",\"descr\":\"Loman virallinen nimi.\"}},\"YearlyHolidays\":{\"title\":\"Vuosittaiset Lomat\",\"year\":{\"title\":\"Vuosi\",\"descr\":\"Vuosi, jolle lomat on määritelty.\"},\"holidays\":{\"title\":\"Lomat\",\"descr\":\"Luettelo vuoden lomista.\"}},\"PeriodRecalculationData\":{\"title\":\"Jakson Uudelleenlaskentatiedot\",\"calc\":{\"title\":\"Laskenta\",\"descr\":\"Laskentatiedot jakson uudelleenlaskentaa varten.\"},\"employment\":{\"title\":\"Työsuhde\",\"descr\":\"Työsuhteeseen liittyvät tiedot jakson aikana.\"},\"holidayYear\":{\"title\":\"Lomavuosi\",\"descr\":\"Vuosi, jota lomatiedot koskevat.\"},\"absences\":{\"title\":\"Poissaolot\",\"descr\":\"Työntekijän poissaolotiedot jakson aikana.\"}},\"Employment\":{\"title\":\"Työsuhde\",\"info\":{\"title\":\"Työsuhteen Tiedot\",\"descr\":\"Yksityiskohtaiset tiedot työsuhteesta.\"},\"work\":{\"title\":\"Työnkuvaus\",\"descr\":\"Kuvaus työntekijän tehtävistä ja vastuista.\"},\"identity\":{\"title\":\"Työsuhteen Identiteetti\",\"descr\":\"Työsuhteen yksilöivät tiedot.\"},\"international\":{\"title\":\"Kansainvälinen Työsuhde\",\"descr\":\"Kansainvälisiin työsuhteisiin liittyvät tiedot.\"},\"contacts\":{\"title\":\"Yhteystiedot\",\"descr\":\"Työntekijän yhteystiedot.\"},\"usecase\":{\"title\":\"Käyttötapaus\",\"descr\":\"Tiedot työsuhteen käyttötapauksesta.\"},\"holidays\":{\"title\":\"Lomamääräykset\",\"descr\":\"Työntekijän lomaoikeudet ja -määräykset.\"},\"personalInfo\":{\"title\":\"Henkilökohtaiset Tiedot\",\"descr\":\"Työntekijän henkilökohtaiset tiedot.\"},\"isRegistered\":{\"title\":\"Rekisteröity\",\"descr\":\"Tieto siitä, onko työsuhde rekisteröity.\"},\"workflowData\":{\"title\":\"Työprosessin Tiedot\",\"descr\":\"Tiedot työsuhteen työprosessista.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Työsuhteen yksilöllinen tunniste.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin työsuhde luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin työsuhdetta viimeksi päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Työsuhteen omistajan tiedot.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Tieto siitä, onko työsuhde vain luku -tilassa.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Työsuhteeseen liittyvä kumppani.\"}},\"HolidayYear\":{\"title\":\"Lomavuosi\",\"year\":{\"title\":\"Vuosi\",\"descr\":\"Lomavuoden kalenterivuosi.\"},\"workerId\":{\"title\":\"Työntekijän tunnus\",\"descr\":\"Työntekijän yksilöivä tunnus, jos saatavilla.\"},\"employmentId\":{\"title\":\"Työsuhteen tunnus\",\"descr\":\"Yksilöivä tunnus työsuhteelle, johon lomavuosi liittyy.\"},\"period\":{\"title\":\"Ajanjakso\",\"descr\":\"Lomavuoden ajanjakso, jos määritelty.\"},\"spec\":{\"title\":\"Lomavuoden määrittely\",\"descr\":\"Lomavuoden erityismäärittelyt, jos saatavilla.\"},\"holidayPay\":{\"title\":\"Lomapalkka\",\"descr\":\"Lomapalkan laskentatiedot, jos saatavilla.\"},\"accrual\":{\"title\":\"Lomakertymä\",\"descr\":\"Lomapäivien kertymätiedot, jos saatavilla.\"},\"leaves\":{\"title\":\"Vuosilomat\",\"descr\":\"Vuosilomien yksityiskohdat, jos saatavilla.\"},\"workerSnapshot\":{\"title\":\"Työntekijän profiili\",\"descr\":\"Työntekijän profiilitiedot lomavuoden ajalta, jos saatavilla.\"},\"id\":{\"title\":\"Tunnus\",\"descr\":\"Lomavuoden yksilöivä tunnus, jos saatavilla.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin lomavuosi luotiin, jos saatavilla.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin lomavuosi viimeksi päivitettiin, jos saatavilla.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Lomavuoden omistajan tunnus, jos saatavilla.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Indikaattori, onko lomavuosi vain luku -tilassa, jos saatavilla.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Lomavuoden yhteistyökumppanin tunnus, jos saatavilla.\"}},\"EmploymentRelationInfo\":{\"title\":\"Työsuhteen tiedot\",\"workerAccountId\":{\"title\":\"Työntekijän tilitunnus\",\"descr\":\"Työntekijän tilitunnus, jos saatavilla.\"},\"sourceId\":{\"title\":\"Lähdetunnus\",\"descr\":\"Työsuhteen lähdetunnus, jos saatavilla.\"},\"type\":{\"title\":\"Työsuhteen tyyppi\",\"descr\":\"Työsuhteen tyyppi, jos määritelty.\"},\"ibanNumber\":{\"title\":\"IBAN-numero\",\"descr\":\"Työntekijän IBAN-tilinumero, jos saatavilla.\"},\"irIncomeEarnerTypes\":{\"title\":\"Tulonsaajatyypit\",\"descr\":\"Tulonsaajatyypit verotusta varten, jos saatavilla.\"},\"cbaCode\":{\"title\":\"TES-koodi\",\"descr\":\"Työehtosopimuksen koodi, jos saatavilla.\"},\"pensionCalculation\":{\"title\":\"Eläkelaskenta\",\"descr\":\"Eläkelaskennan tiedot, jos saatavilla.\"},\"pensionRule\":{\"title\":\"Eläkesääntö\",\"descr\":\"Eläkesäännöt, jos saatavilla.\"},\"pensionCompany\":{\"title\":\"Eläkeyhtiö\",\"descr\":\"Eläkeyhtiön tiedot, jos saatavilla.\"},\"pensionContractNumber\":{\"title\":\"Eläkesopimusnumero\",\"descr\":\"Eläkesopimuksen numero, jos saatavilla.\"},\"insuranceCompany\":{\"title\":\"Vakuutusyhtiö\",\"descr\":\"Vakuutusyhtiön tiedot, jos saatavilla.\"},\"insuranceContractNumber\":{\"title\":\"Vakuutussopimusnumero\",\"descr\":\"Vakuutussopimuksen numero, jos saatavilla.\"},\"taxcard\":{\"title\":\"Verokortti\",\"descr\":\"Työsuhteeseen liittyvä verokortti, jos saatavilla.\"},\"status\":{\"title\":\"Työsuhteen tila\",\"descr\":\"Työsuhteen nykyinen tila, jos saatavilla.\"},\"salaryPaymentMethod\":{\"title\":\"Palkanmaksutapa\",\"descr\":\"Palkanmaksutapa, jos määritelty.\"},\"startDate\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Työsuhteen aloituspäivämäärä, jos saatavilla.\"},\"endDate\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Työsuhteen päättymispäivämäärä, jos saatavilla.\"},\"isFixedTerm\":{\"title\":\"Määräaikainen\",\"descr\":\"Indikaattori, onko työsuhde määräaikainen, jos saatavilla.\"},\"isTerminated\":{\"title\":\"Päättynyt\",\"descr\":\"Indikaattori, onko työsuhde päättynyt, jos saatavilla.\"},\"employmentRegCode\":{\"title\":\"Työsuhteen rekisterikoodi\",\"descr\":\"Työsuhteen rekisteröintikoodi, jos saatavilla.\"}},\"WorkDescription\":{\"title\":\"Työnkuvaus\",\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Työnkuvaus, jos saatavilla.\"},\"occupationCode\":{\"title\":\"Ammattikoodi\",\"descr\":\"Työn ammattikoodi, jos saatavilla.\"},\"occupationCode2\":{\"title\":\"Toinen ammattikoodi\",\"descr\":\"Toinen ammattikoodi, jos saatavilla.\"},\"salaryDefaults\":{\"title\":\"Palkkaoletukset\",\"descr\":\"Käyttäjän määrittämät palkkaoletukset, jos saatavilla.\"},\"wageBasis\":{\"title\":\"Palkkaperuste\",\"descr\":\"Palkan laskentaperuste, jos määritelty.\"},\"monthlyHours\":{\"title\":\"Kuukausittaiset työtunnit\",\"descr\":\"Kuukausittaiset työtunnit, jos saatavilla.\"},\"accounting\":{\"title\":\"Laskentatiedot\",\"descr\":\"Laskentaan liittyvät tiedot, jos saatavilla.\"}},\"EmploymentIdentity\":{\"title\":\"Työsuhteen identiteetti\",\"firstName\":{\"title\":\"Etunimi\",\"descr\":\"Työntekijän etunimi, jos saatavilla.\"},\"lastName\":{\"title\":\"Sukunimi\",\"descr\":\"Työntekijän sukunimi, jos saatavilla.\"},\"personalId\":{\"title\":\"Henkilötunnus\",\"descr\":\"Työntekijän henkilötunnus, jos saatavilla.\"},\"avatarImg\":{\"title\":\"Profiilikuva\",\"descr\":\"Työntekijän profiilikuva, jos saatavilla.\"},\"color\":{\"title\":\"Väri\",\"descr\":\"Työntekijän profiilin väri, jos saatavilla.\"},\"language\":{\"title\":\"Kieli\",\"descr\":\"Työntekijän ensisijainen kieli, jos saatavilla.\"}},\"EmploymentRelationInternational\":{\"title\":\"Kansainvälinen työsuhde\",\"country\":{\"title\":\"Maa\",\"descr\":\"Maa, jossa työsuhde on voimassa, jos saatavilla.\"},\"foreignId\":{\"title\":\"Ulkomainen tunnus\",\"descr\":\"Ulkomainen tunnus, jos saatavilla.\"},\"idType\":{\"title\":\"Tunnuksen tyyppi\",\"descr\":\"Kansainvälisen tunnuksen tyyppi, jos saatavilla.\"},\"taxAtSource\":{\"title\":\"Lähdevero\",\"descr\":\"Lähdeverotiedot, jos saatavilla.\"},\"socialSecurity\":{\"title\":\"Sosiaaliturva\",\"descr\":\"Kansainvälisen sosiaaliturvan tyyppi, jos saatavilla.\"},\"socialSecurityExceptions\":{\"title\":\"Sosiaaliturvan poikkeukset\",\"descr\":\"Poikkeukset kansainväliseen sosiaaliturvaan, jos saatavilla.\"}},\"ContactAdvanced\":{\"title\":\"Yhteystiedot Laajennettu\",\"type\":{\"title\":\"Yhteystyyppi\",\"descr\":\"Määrittää yhteyden tyypin, kuten henkilökohtainen tai yritys.\"},\"email\":{\"title\":\"Sähköpostiosoite\",\"descr\":\"Yhteyshenkilön sähköpostiosoite, jos saatavilla.\"},\"telephone\":{\"title\":\"Puhelinnumero\",\"descr\":\"Yhteyshenkilön puhelinnumero, jos saatavilla.\"},\"street\":{\"title\":\"Katuosoite\",\"descr\":\"Yhteyshenkilön katuosoite, jos saatavilla.\"},\"postalCode\":{\"title\":\"Postinumero\",\"descr\":\"Yhteyshenkilön postinumero, jos saatavilla.\"},\"city\":{\"title\":\"Kaupunki\",\"descr\":\"Yhteyshenkilön kaupunki, jos saatavilla.\"},\"country\":{\"title\":\"Maa\",\"descr\":\"Yhteyshenkilön maa, jos saatavilla.\"},\"countryOtherName\":{\"title\":\"Muu Maan Nimi\",\"descr\":\"Vaihtoehtoinen maan nimi, jos virallinen nimi ei ole käytössä.\"}},\"HolidaySpecification\":{\"title\":\"Lomasäädökset\",\"code\":{\"title\":\"Lomakoodi\",\"descr\":\"Tunnistaa loman tyypin tai kategorian.\"},\"holidayPayCalculation\":{\"title\":\"Lomapalkan Laskenta\",\"descr\":\"Määrittää, miten lomapalkka lasketaan.\"},\"accrualFixed\":{\"title\":\"Kiinteä Kertymä\",\"descr\":\"Kiinteä määrä lomapäiviä, jotka kertyvät tietyn ajanjakson aikana.\"}},\"HolidayPay\":{\"title\":\"Lomapalkka\",\"normalMonthlyPayDailySalary\":{\"title\":\"Normaali Kuukausipalkka Päiväpalkka\",\"descr\":\"Normaali kuukausipalkka, laskettuna päiväpalkkana, jos saatavilla.\"},\"normalMonthlyPay\":{\"title\":\"Normaali Kuukausipalkka\",\"descr\":\"Tavallinen kuukausipalkka, jos saatavilla.\"},\"normalMonthlyPayManual\":{\"title\":\"Manuaalinen Normaali Kuukausipalkka\",\"descr\":\"Manuaalisesti määritetty normaali kuukausipalkka, jos saatavilla.\"},\"averageDailyPayDailySalary\":{\"title\":\"Keskimääräinen Päiväpalkka Päiväpalkka\",\"descr\":\"Keskimääräinen päiväpalkka, laskettuna päiväpalkkana, jos saatavilla.\"},\"averageDailyPay\":{\"title\":\"Keskimääräinen Päiväpalkka\",\"descr\":\"Keskimääräinen päiväpalkka, jos saatavilla.\"},\"averageDailyPayManual\":{\"title\":\"Manuaalinen Keskimääräinen Päiväpalkka\",\"descr\":\"Manuaalisesti määritetty keskimääräinen päiväpalkka, jos saatavilla.\"},\"averageDailyPayBase\":{\"title\":\"Keskimääräisen Päiväpalkan Perusta\",\"descr\":\"Perusta, jolle keskimääräinen päiväpalkka lasketaan.\"},\"averageDailyPayDays\":{\"title\":\"Keskimääräiset Päiväpalkkapäivät\",\"descr\":\"Päivien määrä, jota käytetään keskimääräisen päiväpalkan laskennassa.\"},\"averageDailyPayMultiplier\":{\"title\":\"Keskimääräisen Päiväpalkan Kerroin\",\"descr\":\"Kerroin, jota käytetään keskimääräisen päiväpalkan laskennassa.\"},\"averageHourlyPayDailySalary\":{\"title\":\"Keskimääräinen Tuntipalkka Päiväpalkka\",\"descr\":\"Keskimääräinen tuntipalkka, laskettuna päiväpalkkana, jos saatavilla.\"},\"averageHourlyPay\":{\"title\":\"Keskimääräinen Tuntipalkka\",\"descr\":\"Keskimääräinen tuntipalkka, jos saatavilla.\"},\"averageHourlyPayManual\":{\"title\":\"Manuaalinen Keskimääräinen Tuntipalkka\",\"descr\":\"Manuaalisesti määritetty keskimääräinen tuntipalkka, jos saatavilla.\"},\"averageHourlyPayBase\":{\"title\":\"Keskimääräisen Tuntipalkan Perusta\",\"descr\":\"Perusta, jolle keskimääräinen tuntipalkka lasketaan.\"},\"averageHourlyPayHours\":{\"title\":\"Keskimääräiset Tuntipalkkatunnit\",\"descr\":\"Tuntien määrä, jota käytetään keskimääräisen tuntipalkan laskennassa.\"},\"averageHourlyPayMultiplier\":{\"title\":\"Keskimääräisen Tuntipalkan Kerroin\",\"descr\":\"Kerroin, jota käytetään keskimääräisen tuntipalkan laskennassa.\"},\"percentageBasedPayDailySalary\":{\"title\":\"Prosenttiperusteinen Palkka Päiväpalkka\",\"descr\":\"Prosenttiperusteinen palkka, laskettuna päiväpalkkana, jos saatavilla.\"},\"percentageBasedPay\":{\"title\":\"Prosenttiperusteinen Palkka\",\"descr\":\"Prosenttiperusteinen palkka, jos saatavilla.\"},\"percentageBasedPayManual\":{\"title\":\"Manuaalinen Prosenttiperusteinen Palkka\",\"descr\":\"Manuaalisesti määritetty prosenttiperusteinen palkka, jos saatavilla.\"},\"percentageBasedPayBase\":{\"title\":\"Prosenttiperusteisen Palkan Perusta\",\"descr\":\"Perusta, jolle prosenttiperusteinen palkka lasketaan.\"},\"percentageBasedPayPercent\":{\"title\":\"Prosenttiperusteisen Palkan Prosentti\",\"descr\":\"Prosenttiosuus, jota käytetään prosenttiperusteisen palkan laskennassa.\"},\"otherPay\":{\"title\":\"Muu Palkka\",\"descr\":\"Muut palkkakomponentit, jotka eivät kuulu muihin kategorioihin.\"},\"compensationPayDailySalary\":{\"title\":\"Korvauspalkka Päiväpalkka\",\"descr\":\"Korvauspalkka, laskettuna päiväpalkkana, jos saatavilla.\"},\"compensationPay\":{\"title\":\"Korvauspalkka\",\"descr\":\"Korvauspalkka, jos saatavilla.\"},\"compensationPayManual\":{\"title\":\"Manuaalinen Korvauspalkka\",\"descr\":\"Manuaalisesti määritetty korvauspalkka, jos saatavilla.\"},\"compensationPayBase\":{\"title\":\"Korvauspalkan Perusta\",\"descr\":\"Perusta, jolle korvauspalkka lasketaan.\"},\"accrual\":{\"title\":\"Kertyminen\",\"descr\":\"Kertynyt lomapalkka tai lomapäivät tietyn ajanjakson aikana.\"}},\"HolidayAccrual\":{\"title\":\"Lomakertymä\",\"months\":{\"title\":\"Kuukaudet\",\"descr\":\"Luettelo kuukausista, joiden aikana lomakertymä on laskettu.\"},\"period\":{\"title\":\"Ajanjakso\",\"descr\":\"Ajanjakso, jonka aikana lomakertymä on laskettu.\"},\"defaultAccrual\":{\"title\":\"Oletuskertymä\",\"descr\":\"Oletusarvoinen lomapäivien kertymä.\"},\"startSaldo\":{\"title\":\"Alkusaldo\",\"descr\":\"Lomapäivien saldo ajanjakson alussa.\"},\"total\":{\"title\":\"Yhteensä\",\"descr\":\"Lomapäivien kokonaismäärä ajanjakson aikana.\"},\"endSaldo\":{\"title\":\"Loppusaldo\",\"descr\":\"Lomapäivien saldo ajanjakson lopussa.\"}},\"AnnualLeaves\":{\"title\":\"Vuosilomat\",\"planned\":{\"title\":\"Suunnitellut Lomat\",\"descr\":\"Luettelo suunnitelluista vuosilomista.\"},\"paid\":{\"title\":\"Maksetut Lomat\",\"descr\":\"Luettelo maksetuista vuosilomista.\"}},\"TaxAtSource\":{\"title\":\"Lähdeverotus\",\"percent\":{\"title\":\"Veroprosentti\",\"descr\":\"Prosenttiosuus, joka pidätetään lähdeverona. Voi olla tyhjä, jos ei sovelleta.\"},\"deductionMonthly\":{\"title\":\"Kuukausittainen vähennys\",\"descr\":\"Summa, joka vähennetään kuukausittain lähdeverotuksessa. Voi olla tyhjä, jos ei sovelleta.\"},\"deductionDaily\":{\"title\":\"Päivittäinen vähennys\",\"descr\":\"Summa, joka vähennetään päivittäin lähdeverotuksessa. Voi olla tyhjä, jos ei sovelleta.\"}},\"HolidayAccrualEntry\":{\"title\":\"Lomakertymämerkintä\",\"index\":{\"title\":\"Indeksi\",\"descr\":\"Merkinnän järjestysnumero lomakertymälistassa. Voi olla tyhjä, jos ei määritelty.\"},\"month\":{\"title\":\"Kuukausi\",\"descr\":\"Kuukausi, jolta lomapäivät kertyvät. Voi olla tyhjä, jos ei määritelty.\"},\"daysAccrued\":{\"title\":\"Kertyneet päivät\",\"descr\":\"Lukumäärä lomapäiviä, jotka on kertynyt tiettynä aikana.\"},\"source\":{\"title\":\"Kertymän lähde\",\"descr\":\"Lähde, josta lomapäivien kertyminen on peräisin. Voi olla tyhjä, jos ei määritelty.\"},\"calcId\":{\"title\":\"Laskentatunnus\",\"descr\":\"Tunniste, joka liittyy lomapäivien kertymän laskentaan. Voi olla tyhjä, jos ei määritelty.\"},\"notes\":{\"title\":\"Huomautukset\",\"descr\":\"Lisätiedot tai huomautukset lomakertymämerkintään liittyen. Voi olla tyhjä, jos ei määritelty.\"}},\"AnnualLeave\":{\"title\":\"Vuosiloma\",\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste vuosilomalle. Voi olla tyhjä, jos ei määritelty.\"},\"period\":{\"title\":\"Ajanjakso\",\"descr\":\"Ajanjakso, jolle vuosiloma on myönnetty. Voi olla tyhjä, jos ei määritelty.\"},\"notes\":{\"title\":\"Huomautukset\",\"descr\":\"Lisätiedot tai huomautukset vuosilomaan liittyen. Voi olla tyhjä, jos ei määritelty.\"}},\"AnnualLeavePayment\":{\"title\":\"Vuosilomapalkka\",\"kind\":{\"title\":\"Maksutyyppi\",\"descr\":\"Tyyppi, joka kuvaa vuosilomapalkan maksun luonnetta. Voi olla tyhjä, jos ei määritelty.\"},\"date\":{\"title\":\"Maksupäivä\",\"descr\":\"Päivämäärä, jolloin vuosilomapalkka maksetaan. Voi olla tyhjä, jos ei määritelty.\"},\"holidayDays\":{\"title\":\"Lomapäivät\",\"descr\":\"Lukumäärä lomapäiviä, joista maksu suoritetaan.\"},\"holidaySalary\":{\"title\":\"Lomapalkka\",\"descr\":\"Summa, joka maksetaan lomapäivistä palkkana.\"},\"holidayCompensation\":{\"title\":\"Lomakorvaus\",\"descr\":\"Korvaus, joka maksetaan lomapäivistä, jos niitä ei ole pidetty.\"},\"holidayBonus\":{\"title\":\"Lomabonus\",\"descr\":\"Lisäbonus, joka maksetaan lomapäivistä. Voi olla tyhjä, jos ei sovelleta.\"},\"calcId\":{\"title\":\"Laskentatunnus\",\"descr\":\"Tunniste, joka liittyy vuosilomapalkan laskentaan. Voi olla tyhjä, jos ei määritelty.\"},\"isDisabled\":{\"title\":\"Onko käytöstä poistettu\",\"descr\":\"Indikaattori, onko vuosilomapalkka käytöstä poistettu. Voi olla tyhjä, jos ei määritelty.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste vuosilomapalkalle. Voi olla tyhjä, jos ei määritelty.\"},\"period\":{\"title\":\"Ajanjakso\",\"descr\":\"Ajanjakso, jolle vuosilomapalkka liittyy. Voi olla tyhjä, jos ei määritelty.\"},\"notes\":{\"title\":\"Huomautukset\",\"descr\":\"Lisätiedot tai huomautukset vuosilomapalkkaan liittyen. Voi olla tyhjä, jos ei määritelty.\"}},\"CalendarEvent\":{\"title\":\"Kalenteritapahtuma\",\"payloadType\":{\"title\":\"Sisällön tyyppi\",\"descr\":\"Tyyppi, joka kuvaa kalenteritapahtuman sisällön luonnetta. Voi olla tyhjä, jos ei määritelty.\"},\"event\":{\"title\":\"Tapahtuma\",\"descr\":\"Kalenteritapahtuman yksityiskohdat. Voi olla tyhjä, jos ei määritelty.\"},\"occurenceInfo\":{\"title\":\"Esiintymistiedot\",\"descr\":\"Tiedot kalenteritapahtuman esiintymisestä. Voi olla tyhjä, jos ei määritelty.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste kalenteritapahtumalle. Voi olla tyhjä, jos ei määritelty.\"},\"createdAt\":{\"title\":\"Luontipäivä\",\"descr\":\"Päivämäärä, jolloin kalenteritapahtuma luotiin. Voi olla tyhjä, jos ei määritelty.\"},\"updatedAt\":{\"title\":\"Päivityspäivä\",\"descr\":\"Päivämäärä, jolloin kalenteritapahtumaa viimeksi päivitettiin. Voi olla tyhjä, jos ei määritelty.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Henkilö tai taho, joka omistaa kalenteritapahtuman. Voi olla tyhjä, jos ei määritelty.\"},\"isReadOnly\":{\"title\":\"Onko vain luku\",\"descr\":\"Indikaattori, onko kalenteritapahtuma vain luku -tilassa. Voi olla tyhjä, jos ei määritelty.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Yhteistyökumppani, joka liittyy kalenteritapahtumaan. Voi olla tyhjä, jos ei määritelty.\"}},\"CalendarVEvent\":{\"title\":\"Kalenteritapahtuma\",\"uid\":{\"title\":\"Tapahtumatunnus\",\"descr\":\"Yksilöllinen tunniste kalenteritapahtumalle.\"},\"timeStamp\":{\"title\":\"Aikaleima\",\"descr\":\"Tapahtuman viimeisin päivitysaika.\"},\"start\":{\"title\":\"Aloitusaika\",\"descr\":\"Tapahtuman alkamisaika.\"},\"end\":{\"title\":\"Päättymisaika\",\"descr\":\"Tapahtuman päättymisaika.\"},\"duration\":{\"title\":\"Kesto\",\"descr\":\"Tapahtuman kestoaika.\"},\"isAllDay\":{\"title\":\"Koko päivän tapahtuma\",\"descr\":\"Ilmaisee, onko tapahtuma koko päivän kestävä.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Tapahtuman nykyinen tila (esim. suunniteltu, peruttu).\"},\"summary\":{\"title\":\"Yhteenveto\",\"descr\":\"Lyhyt kuvaus tapahtuman sisällöstä.\"},\"categories\":{\"title\":\"Kategoriat\",\"descr\":\"Tapahtumaan liittyvät kategoriat tai teemat.\"},\"attendees\":{\"title\":\"Osallistujat\",\"descr\":\"Luettelo tapahtumaan osallistuvista henkilöistä.\"},\"actions\":{\"title\":\"Toiminnot\",\"descr\":\"Tapahtumaan liittyvät toimenpiteet tai tehtävät.\"},\"priority\":{\"title\":\"Prioriteetti\",\"descr\":\"Tapahtuman tärkeysjärjestys.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Yksityiskohtainen kuvaus tapahtumasta.\"},\"attachments\":{\"title\":\"Liitteet\",\"descr\":\"Tapahtumaan liittyvät liitetiedostot.\"},\"recurrenceRules\":{\"title\":\"Toistuvuussäännöt\",\"descr\":\"Säännöt tapahtuman toistuvuudelle.\"},\"recurrenceDates\":{\"title\":\"Toistumispäivät\",\"descr\":\"Päivät, jolloin tapahtuma toistuu.\"},\"exceptionDates\":{\"title\":\"Poikkeuspäivät\",\"descr\":\"Päivät, jolloin tapahtuma ei toistu.\"},\"originalUid\":{\"title\":\"Alkuperäinen tunnus\",\"descr\":\"Alkuperäisen tapahtuman tunniste.\"}},\"CalendarEventOccurenceInfo\":{\"title\":\"Tapahtuman esiintymistiedot\",\"isRecurring\":{\"title\":\"Toistuva tapahtuma\",\"descr\":\"Ilmaisee, onko tapahtuma toistuva.\"},\"occurencesStart\":{\"title\":\"Esiintymisten aloitus\",\"descr\":\"Ensimmäisen esiintymisen alkamisaika.\"},\"occurencesEnd\":{\"title\":\"Esiintymisten päättyminen\",\"descr\":\"Viimeisen esiintymisen päättymisaika.\"},\"next\":{\"title\":\"Seuraavat esiintymät\",\"descr\":\"Luettelo tulevista tapahtuman esiintymistä.\"},\"executedActions\":{\"title\":\"Suoritetut toiminnot\",\"descr\":\"Luettelo tapahtuman yhteydessä suoritetuista toimenpiteistä.\"}},\"CalendarAttendee\":{\"title\":\"Kalenterin osallistuja\",\"uri\":{\"title\":\"Osallistujan URI\",\"descr\":\"Yksilöllinen tunniste osallistujalle.\"},\"displayName\":{\"title\":\"Näyttönimi\",\"descr\":\"Osallistujan julkinen nimi.\"},\"email\":{\"title\":\"Sähköpostiosoite\",\"descr\":\"Osallistujan sähköpostiosoite.\"},\"entityType\":{\"title\":\"Osallistujan tyyppi\",\"descr\":\"Osallistujan oikeudellinen tyyppi (esim. henkilö, yritys).\"},\"pictureType\":{\"title\":\"Kuvatyypi\",\"descr\":\"Osallistujan kuvan tyyppi.\"},\"color\":{\"title\":\"Väri\",\"descr\":\"Osallistujan tunnusväri.\"},\"initials\":{\"title\":\"Nimikirjaimet\",\"descr\":\"Osallistujan nimikirjaimet.\"},\"url\":{\"title\":\"Verkko-osoite\",\"descr\":\"Osallistujan verkkosivuston osoite.\"}},\"CalendarAction\":{\"title\":\"Kalenteritoiminto\",\"id\":{\"title\":\"Toiminnon tunnus\",\"descr\":\"Yksilöllinen tunniste toiminnolle.\"},\"type\":{\"title\":\"Toiminnon tyyppi\",\"descr\":\"Toiminnon luonne tai tyyppi.\"},\"summary\":{\"title\":\"Toiminnon yhteenveto\",\"descr\":\"Lyhyt kuvaus toiminnosta.\"},\"description\":{\"title\":\"Toiminnon kuvaus\",\"descr\":\"Yksityiskohtainen kuvaus toiminnosta.\"},\"attendees\":{\"title\":\"Toiminnon osallistujat\",\"descr\":\"Luettelo toimintaan osallistuvista henkilöistä.\"},\"attachments\":{\"title\":\"Toiminnon liitteet\",\"descr\":\"Toimintoon liittyvät liitetiedostot.\"},\"triggerDuration\":{\"title\":\"Laukaisun kesto\",\"descr\":\"Aika, joka kuluu toiminnon laukaisemiseen.\"},\"triggerDateTime\":{\"title\":\"Laukaisuaika\",\"descr\":\"Aika, jolloin toiminto laukaistaan.\"},\"repeat\":{\"title\":\"Toiston määrä\",\"descr\":\"Kuinka monta kertaa toiminto toistetaan.\"},\"repeatDuration\":{\"title\":\"Toiston kesto\",\"descr\":\"Kesto, jonka ajan toiminto toistuu.\"}},\"CalendarAttachment\":{\"title\":\"Kalenteriliite\",\"uri\":{\"title\":\"Liitteen URI\",\"descr\":\"Yksilöllinen tunniste liitteelle.\"},\"data\":{\"title\":\"Liitteen data\",\"descr\":\"Liitteen sisältö datana.\"},\"formatType\":{\"title\":\"Muototyyppi\",\"descr\":\"Liitteen tiedostomuoto.\"},\"valueEncoding\":{\"title\":\"Arvon koodaus\",\"descr\":\"Liitteen arvon koodaustapa.\"}},\"CalendarOccurence\":{\"title\":\"Kalenteritapahtuma\",\"eventId\":{\"title\":\"Tapahtumatunnus\",\"descr\":\"Yksilöllinen tunniste kalenteritapahtumalle.\"},\"summary\":{\"title\":\"Yhteenveto\",\"descr\":\"Lyhyt kuvaus tapahtuman sisällöstä.\"},\"categories\":{\"title\":\"Kategoriat\",\"descr\":\"Tapahtumaan liittyvät luokat tai aiheet.\"},\"isAllDay\":{\"title\":\"Koko päivän tapahtuma\",\"descr\":\"Ilmaisee, onko tapahtuma koko päivän kestävä.\"},\"isRecurring\":{\"title\":\"Toistuva tapahtuma\",\"descr\":\"Ilmaisee, toistuuko tapahtuma säännöllisesti.\"},\"start\":{\"title\":\"Aloitusaika\",\"descr\":\"Tapahtuman alkamisaika.\"},\"end\":{\"title\":\"Päättymisaika\",\"descr\":\"Tapahtuman päättymisaika.\"},\"duration\":{\"title\":\"Kesto\",\"descr\":\"Tapahtuman kestoaika.\"},\"actions\":{\"title\":\"Toimenpiteet\",\"descr\":\"Tapahtumaan liittyvät toimenpiteet tai tehtävät.\"}},\"CalendarActionOccurence\":{\"title\":\"Kalenteritoimenpide\",\"eventId\":{\"title\":\"Tapahtumatunnus\",\"descr\":\"Toimenpiteeseen liittyvän tapahtuman tunniste.\"},\"actionId\":{\"title\":\"Toimenpidetunnus\",\"descr\":\"Yksilöllinen tunniste toimenpiteelle.\"},\"type\":{\"title\":\"Toimenpidetyyppi\",\"descr\":\"Toimenpiteen luonne tai tyyppi.\"},\"start\":{\"title\":\"Aloitusaika\",\"descr\":\"Toimenpiteen alkamisaika.\"},\"isAllDay\":{\"title\":\"Koko päivän toimenpide\",\"descr\":\"Ilmaisee, onko toimenpide koko päivän kestävä.\"},\"summary\":{\"title\":\"Yhteenveto\",\"descr\":\"Lyhyt kuvaus toimenpiteen sisällöstä.\"}},\"PageResultOfCalendarEventListItem\":{\"title\":\"Kalenteritapahtumien Sivutulos\",\"items\":{\"title\":\"Tapahtumaerät\",\"descr\":\"Luettelo kalenteritapahtumista.\"},\"nextPageLink\":{\"title\":\"Seuraavan sivun linkki\",\"descr\":\"Linkki seuraavalle tapahtumasivulle.\"},\"count\":{\"title\":\"Tapahtumien määrä\",\"descr\":\"Tapahtumien kokonaismäärä.\"}},\"CalendarEventListItem\":{\"title\":\"Kalenteritapahtumaerä\",\"createdAt\":{\"title\":\"Luontiaika\",\"descr\":\"Aika, jolloin tapahtuma luotiin.\"},\"updatedAt\":{\"title\":\"Päivitysaika\",\"descr\":\"Viimeisin aika, jolloin tapahtumaa päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajatunnus\",\"descr\":\"Tapahtuman omistajan tunniste.\"},\"ownerInfo\":{\"title\":\"Omistajan tiedot\",\"descr\":\"Tapahtuman omistajan tiedot.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Tapahtuman nykyinen tila.\"},\"backOfficeStatus\":{\"title\":\"Back Office -tila\",\"descr\":\"Tapahtuman tila sisäisessä järjestelmässä.\"},\"startAt\":{\"title\":\"Aloitusaika\",\"descr\":\"Tapahtuman alkamisaika.\"},\"endAt\":{\"title\":\"Päättymisaika\",\"descr\":\"Tapahtuman päättymisaika.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Tapahtumaan liittyvä bruttopalkka.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Tapahtumaan liittyvä maksu.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Tapahtumaan liittyvä palkkio.\"},\"otherId\":{\"title\":\"Muu tunnus\",\"descr\":\"Muu tapahtumaan liittyvä tunniste.\"},\"otherPartyInfo\":{\"title\":\"Muun osapuolen tiedot\",\"descr\":\"Tapahtumaan liittyvän muun osapuolen tiedot.\"},\"shortText\":{\"title\":\"Lyhyt teksti\",\"descr\":\"Lyhyt kuvaus tapahtumasta.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Tapahtumaan liittyvät liiketoimintaobjektit.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivä, jolloin palkka maksetaan.\"},\"data\":{\"title\":\"Tapahtumatiedot\",\"descr\":\"Tapahtumaan liittyvät yksityiskohtaiset tiedot.\"},\"versionNumber\":{\"title\":\"Versiokoodi\",\"descr\":\"Tapahtuman versionumero.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Tapahtuman yksilöllinen resurssitunniste.\"},\"flags\":{\"title\":\"Merkit\",\"descr\":\"Tapahtumaan liittyvät merkit tai tunnisteet.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Tapahtumaan liittyvät viestit.\"},\"entityType\":{\"title\":\"Entiteettityyppi\",\"descr\":\"Tapahtuman entiteettityyppi.\"},\"logicalDate\":{\"title\":\"Looginen päivämäärä\",\"descr\":\"Tapahtuman looginen päivämäärä.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Tapahtumaan liittyvä viite.\"},\"externalId\":{\"title\":\"Ulkoinen tunnus\",\"descr\":\"Tapahtuman ulkoinen tunniste.\"},\"id\":{\"title\":\"Tunnus\",\"descr\":\"Tapahtuman yksilöllinen tunniste.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Tapahtuman omistaja.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko tapahtuma vain luku -tilassa.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Tapahtumaan liittyvä kumppani.\"}},\"CalendarEventData\":{\"title\":\"Kalenteritapahtumatiedot\",\"start\":{\"title\":\"Aloitusaika\",\"descr\":\"Tapahtuman alkamisaika.\"},\"end\":{\"title\":\"Päättymisaika\",\"descr\":\"Tapahtuman päättymisaika.\"},\"duration\":{\"title\":\"Kesto\",\"descr\":\"Tapahtuman kestoaika.\"},\"rRules\":{\"title\":\"Toistuvuussäännöt\",\"descr\":\"Säännöt tapahtuman toistuvuudelle.\"},\"isRecurring\":{\"title\":\"Toistuva tapahtuma\",\"descr\":\"Ilmaisee, toistuuko tapahtuma säännöllisesti.\"},\"isAllDay\":{\"title\":\"Koko päivän tapahtuma\",\"descr\":\"Ilmaisee, onko tapahtuma koko päivän kestävä.\"},\"priority\":{\"title\":\"Prioriteetti\",\"descr\":\"Tapahtuman tärkeysjärjestys.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Tapahtuman nykyinen tila.\"}},\"CustomerInvoice\":{\"title\":\"Asiakaslasku\",\"info\":{\"title\":\"Laskutiedot\",\"descr\":\"Sisältää laskun perustiedot ja tilan.\"},\"bases\":{\"title\":\"Laskutuksen perusteet\",\"descr\":\"Luettelo laskutuksen perusteista, kuten tuotteista ja palveluista.\"},\"invoice\":{\"title\":\"Laskupisteen lasku\",\"descr\":\"Viittaa Laskupiste-järjestelmän laskuun.\"},\"workflowData\":{\"title\":\"Työnkulun tiedot\",\"descr\":\"Tiedot laskun käsittelyprosessista.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste laskulle.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin lasku luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä laskulle.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Henkilö tai yritys, joka omistaa laskun.\"},\"isReadOnly\":{\"title\":\"Vain luku -tila\",\"descr\":\"Ilmaisee, onko lasku vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Laskuun liittyvä yhteistyökumppani.\"}},\"CustomerInvoiceInfo\":{\"title\":\"Asiakaslaskun tiedot\",\"status\":{\"title\":\"Laskun tila\",\"descr\":\"Nykyinen tila laskulle, kuten maksettu tai avoin.\"},\"companyCount\":{\"title\":\"Yritysten lukumäärä\",\"descr\":\"Yritysten määrä, jotka liittyvät laskuun.\"}},\"CustomerInvoicingBases\":{\"title\":\"Laskutuksen peruste\",\"id\":{\"title\":\"Perusteen tunniste\",\"descr\":\"Yksilöllinen tunniste laskutuksen perusteelle.\"},\"date\":{\"title\":\"Päivämäärä\",\"descr\":\"Päivämäärä, jolloin laskutuksen peruste on luotu tai päivitetty.\"},\"product\":{\"title\":\"Tuote\",\"descr\":\"Tuote tai palvelu, johon laskutus perustuu.\"},\"companyId\":{\"title\":\"Yrityksen tunniste\",\"descr\":\"Tunniste yritykselle, joka liittyy laskutuksen perusteeseen.\"},\"partnerId\":{\"title\":\"Yhteistyökumppanin tunniste\",\"descr\":\"Tunniste yhteistyökumppanille, joka liittyy laskutuksen perusteeseen.\"},\"amount\":{\"title\":\"Määrä\",\"descr\":\"Laskutuksen perusteeseen liittyvä määrä.\"},\"meta\":{\"title\":\"Metatiedot\",\"descr\":\"Lisätietoja laskutuksen perusteesta.\"}},\"LaskupisteInvoice\":{\"title\":\"Laskupisteen lasku\",\"id\":{\"title\":\"Laskun tunniste\",\"descr\":\"Yksilöllinen tunniste Laskupiste-järjestelmän laskulle.\"},\"customerId\":{\"title\":\"Asiakkaan tunniste\",\"descr\":\"Tunniste asiakkaalle, jolle lasku on osoitettu.\"},\"currency\":{\"title\":\"Valuutta\",\"descr\":\"Laskussa käytetty valuutta.\"},\"orderedDate\":{\"title\":\"Tilauspäivämäärä\",\"descr\":\"Päivämäärä, jolloin tilaus tehtiin.\"},\"invoiceNumber\":{\"title\":\"Laskunumero\",\"descr\":\"Laskulle annettu numero.\"},\"invoiceName\":{\"title\":\"Laskun nimi\",\"descr\":\"Laskulle annettu nimi tai otsikko.\"},\"rows\":{\"title\":\"Laskurivit\",\"descr\":\"Luettelo laskun riveistä, jotka sisältävät tuotteet ja palvelut.\"},\"invoiceState\":{\"title\":\"Laskun tila\",\"descr\":\"Nykyinen tila laskulle, kuten luonnos tai lähetetty.\"}},\"LaskupisteInvoiceRow\":{\"title\":\"Laskupisteen laskurivi\",\"productId\":{\"title\":\"Tuotteen tunniste\",\"descr\":\"Tunniste tuotteelle, joka on laskurivillä.\"},\"name\":{\"title\":\"Tuotteen nimi\",\"descr\":\"Nimi tuotteelle tai palvelulle laskurivillä.\"},\"amount\":{\"title\":\"Määrä\",\"descr\":\"Tuotteen tai palvelun määrä laskurivillä.\"},\"amountType\":{\"title\":\"Määrän tyyppi\",\"descr\":\"Määrän yksikkö, kuten kappale tai kilo.\"},\"unitPrice\":{\"title\":\"Yksikköhinta\",\"descr\":\"Hinta yhdelle yksikölle tuotetta tai palvelua.\"},\"vatPercent\":{\"title\":\"ALV-prosentti\",\"descr\":\"Arvonlisäveron prosenttiosuus laskurivillä.\"},\"specifier\":{\"title\":\"Tarkenne\",\"descr\":\"Lisätarkenne tuotteelle tai palvelulle.\"},\"specifierType\":{\"title\":\"Tarkenteen tyyppi\",\"descr\":\"Tarkenteen tyyppi, kuten väri tai koko.\"},\"meta\":{\"title\":\"Metatiedot\",\"descr\":\"Lisätietoja laskurivistä.\"}},\"PageResultOfCustomerInvoiceListItem\":{\"title\":\"Asiakaslaskujen Sivutulos\",\"items\":{\"title\":\"Laskuluettelo\",\"descr\":\"Luettelo asiakaslaskuista, jotka sisältyvät tähän sivutulokseen.\"},\"nextPageLink\":{\"title\":\"Seuraavan Sivun Linkki\",\"descr\":\"Linkki seuraavalle sivulle, jos lisätietoja on saatavilla.\"},\"count\":{\"title\":\"Kokonaismäärä\",\"descr\":\"Asiakaslaskujen kokonaismäärä tässä tuloksessa.\"}},\"CustomerInvoiceListItem\":{\"title\":\"Asiakaslaskun Tietue\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin lasku luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin laskua päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajan Tunnus\",\"descr\":\"Laskun omistajan yksilöllinen tunnus.\"},\"ownerInfo\":{\"title\":\"Omistajan Tiedot\",\"descr\":\"Tiedot laskun omistajasta.\"},\"status\":{\"title\":\"Laskun Tila\",\"descr\":\"Nykyinen tila asiakaslaskulle.\"},\"backOfficeStatus\":{\"title\":\"Back Office -tila\",\"descr\":\"Laskun tila sisäisessä järjestelmässä.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Ajankohta, jolloin laskutusjakso alkaa.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Ajankohta, jolloin laskutusjakso päättyy.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Laskun perusteena oleva bruttopalkka.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Laskun kokonaissumma, joka on maksettava.\"},\"fee\":{\"title\":\"Maksu\",\"descr\":\"Laskuun liittyvät lisämaksut tai kulut.\"},\"otherId\":{\"title\":\"Toisen Osapuolen Tunnus\",\"descr\":\"Toisen osapuolen yksilöllinen tunnus.\"},\"otherPartyInfo\":{\"title\":\"Toisen Osapuolen Tiedot\",\"descr\":\"Tiedot laskun toisesta osapuolesta.\"},\"shortText\":{\"title\":\"Lyhyt Kuvaus\",\"descr\":\"Lyhyt kuvaus laskusta.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Liiketoimintaobjektit, jotka liittyvät laskuun.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"data\":{\"title\":\"Laskun Tiedot\",\"descr\":\"Lisätiedot, jotka liittyvät asiakaslaskuun.\"},\"versionNumber\":{\"title\":\"Versio Numero\",\"descr\":\"Laskun nykyinen versio.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Yksilöllinen resurssitunniste laskulle.\"},\"flags\":{\"title\":\"Merkit\",\"descr\":\"Erityiset merkit tai liput, jotka liittyvät laskuun.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Laskuun liittyvät viestit tai ilmoitukset.\"},\"entityType\":{\"title\":\"Entiteetin Tyyppi\",\"descr\":\"Laskun entiteetin tyyppi.\"},\"logicalDate\":{\"title\":\"Looginen Päivämäärä\",\"descr\":\"Laskuun liittyvä looginen päivämäärä.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Viitenumero, joka liittyy laskuun.\"},\"externalId\":{\"title\":\"Ulkoinen Tunnus\",\"descr\":\"Laskun ulkoinen tunnus.\"},\"id\":{\"title\":\"Tunnus\",\"descr\":\"Laskun yksilöllinen tunnus.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Laskun omistaja.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Tieto siitä, onko lasku vain luku -tilassa.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Laskuun liittyvä liikekumppani.\"}},\"CustomerInvoiceListItemData\":{\"title\":\"Asiakaslaskun Tietueen Tiedot\",\"companyCount\":{\"title\":\"Yritysten Määrä\",\"descr\":\"Yritysten määrä, jotka liittyvät laskuun.\"}},\"Dataset\":{\"title\":\"Tietoaineisto\",\"info\":{\"title\":\"Tietoaineiston Tiedot\",\"descr\":\"Yleiset tiedot tietoaineistosta.\"},\"data\":{\"title\":\"Tietoaineiston Data\",\"descr\":\"Tietoaineistoon sisältyvät tiedot.\"},\"usecase\":{\"title\":\"Käyttötapaus\",\"descr\":\"Tietoaineiston käyttötapaus.\"},\"workflowData\":{\"title\":\"Työnkulun Tiedot\",\"descr\":\"Tietoaineistoon liittyvät työnkulun tiedot.\"},\"id\":{\"title\":\"Tunnus\",\"descr\":\"Tietoaineiston yksilöllinen tunnus.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin tietoaineisto luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin tietoaineistoa päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Tietoaineiston omistaja.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Tieto siitä, onko tietoaineisto vain luku -tilassa.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Tietoaineistoon liittyvä liikekumppani.\"}},\"DatasetInfo\":{\"title\":\"Tietoaineiston Yleistiedot\",\"status\":{\"title\":\"Tietoaineiston Tila\",\"descr\":\"Nykyinen tila tietoaineistolle.\"},\"label\":{\"title\":\"Nimike\",\"descr\":\"Tietoaineiston kuvaava nimike.\"},\"type\":{\"title\":\"Tyyppi\",\"descr\":\"Tietoaineiston tyyppi.\"}},\"DatasetDataObject\":{\"title\":\"Tietoaineiston Tietokohde\",\"name\":{\"title\":\"Nimi\",\"descr\":\"Tietoaineiston nimi, joka voi olla valinnainen.\"},\"label\":{\"title\":\"Tunniste\",\"descr\":\"Tietoaineiston tunniste tai etiketti, joka voi olla valinnainen.\"},\"schemaDoc\":{\"title\":\"Skeemadokumentaatio\",\"descr\":\"Dokumentaatio tietoaineiston rakenteesta, joka voi olla valinnainen.\"},\"schema\":{\"title\":\"Skeema\",\"descr\":\"Tietoaineiston rakenteen määrittely, joka voi olla valinnainen.\"},\"isArray\":{\"title\":\"Onko Lista\",\"descr\":\"Ilmaisee, onko tietoaineisto lista, joka voi olla valinnainen.\"},\"content\":{\"title\":\"Sisältö\",\"descr\":\"Tietoaineiston sisältö, joka voi olla valinnainen.\"},\"validation\":{\"title\":\"Validointi\",\"descr\":\"Tietoaineiston validointisäännöt, jotka voivat olla valinnaisia.\"},\"views\":{\"title\":\"Näkymät\",\"descr\":\"Tietoaineiston näkymät, jotka voivat olla valinnaisia.\"}},\"DatasetView\":{\"title\":\"Tietoaineiston Näkymä\",\"include\":{\"title\":\"Sisällytä\",\"descr\":\"Tietoaineiston osat, jotka sisällytetään näkymään, voi olla valinnainen.\"},\"exclude\":{\"title\":\"Poissulje\",\"descr\":\"Tietoaineiston osat, jotka suljetaan pois näkymästä, voi olla valinnainen.\"}},\"PageResultOfDatasetListItem\":{\"title\":\"Tietoaineistolistan Sivutulos\",\"items\":{\"title\":\"Kohteet\",\"descr\":\"Tietoaineistolistan kohteet, jotka voivat olla valinnaisia.\"},\"nextPageLink\":{\"title\":\"Seuraavan Sivun Linkki\",\"descr\":\"Linkki seuraavalle sivulle, jos saatavilla.\"},\"count\":{\"title\":\"Lukumäärä\",\"descr\":\"Kohteiden kokonaismäärä, joka voi olla valinnainen.\"}},\"DatasetListItem\":{\"title\":\"Tietoaineistolistan Kohde\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde luotiin, voi olla valinnainen.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohdetta viimeksi päivitettiin, voi olla valinnainen.\"},\"ownerId\":{\"title\":\"Omistajan ID\",\"descr\":\"Kohteen omistajan tunniste, voi olla valinnainen.\"},\"ownerInfo\":{\"title\":\"Omistajan Tiedot\",\"descr\":\"Tietoa kohteen omistajasta, voi olla valinnainen.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Kohteen nykyinen tila, voi olla valinnainen.\"},\"backOfficeStatus\":{\"title\":\"Taustatoimiston Tila\",\"descr\":\"Kohteen tila taustatoimistossa, voi olla valinnainen.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde alkaa, voi olla valinnainen.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde päättyy, voi olla valinnainen.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Kohteeseen liittyvä bruttopalkka, voi olla valinnainen.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Kohteeseen liittyvä maksu, voi olla valinnainen.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Kohteeseen liittyvä palkkio, voi olla valinnainen.\"},\"otherId\":{\"title\":\"Muu ID\",\"descr\":\"Toinen tunniste kohteelle, voi olla valinnainen.\"},\"otherPartyInfo\":{\"title\":\"Toisen Osapuolen Tiedot\",\"descr\":\"Tietoa toisesta osapuolesta, voi olla valinnainen.\"},\"shortText\":{\"title\":\"Lyhyt Teksti\",\"descr\":\"Lyhyt kuvaus kohteesta, voi olla valinnainen.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Liiketoimintaan liittyvät objektit, voi olla valinnainen.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan, voi olla valinnainen.\"},\"data\":{\"title\":\"Data\",\"descr\":\"Kohteeseen liittyvä data, voi olla valinnainen.\"},\"versionNumber\":{\"title\":\"Versio Numero\",\"descr\":\"Kohteen versionumero, voi olla valinnainen.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Kohteen URI, voi olla valinnainen.\"},\"flags\":{\"title\":\"Liput\",\"descr\":\"Kohteeseen liittyvät liput, voi olla valinnainen.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Kohteeseen liittyvät viestit, voi olla valinnainen.\"},\"entityType\":{\"title\":\"Entiteetin Tyyppi\",\"descr\":\"Kohteen entiteetin tyyppi, voi olla valinnainen.\"},\"logicalDate\":{\"title\":\"Looginen Päivämäärä\",\"descr\":\"Kohteen looginen päivämäärä, voi olla valinnainen.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Kohteen viite, voi olla valinnainen.\"},\"externalId\":{\"title\":\"Ulkoinen ID\",\"descr\":\"Kohteen ulkoinen tunniste, voi olla valinnainen.\"},\"id\":{\"title\":\"ID\",\"descr\":\"Kohteen tunniste, voi olla valinnainen.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Kohteen omistaja, voi olla valinnainen.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Ilmaisee, onko kohde vain luku, voi olla valinnainen.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Kohteeseen liittyvä kumppani, voi olla valinnainen.\"}},\"DatasetListItemData\":{\"title\":\"Tietoaineistolistan Kohteen Data\",\"usecaseUri\":{\"title\":\"Käyttötapauksen URI\",\"descr\":\"Kohteen käyttötapauksen URI, voi olla valinnainen.\"}},\"PageResultOfEmploymentListItem\":{\"title\":\"Työsuhdeluettelon sivutulos\",\"items\":{\"title\":\"Työsuhdeluettelon kohteet\",\"descr\":\"Luettelo työsuhteista, jotka voivat olla tyhjiä tai sisältää tietoja.\"},\"nextPageLink\":{\"title\":\"Seuraavan sivun linkki\",\"descr\":\"Linkki seuraavaan työsuhdeluettelosivuun, jos sellainen on.\"},\"count\":{\"title\":\"Kohteiden lukumäärä\",\"descr\":\"Työsuhdeluettelon kohteiden kokonaismäärä.\"}},\"EmploymentListItem\":{\"title\":\"Työsuhdeluettelon kohde\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin työsuhde luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin työsuhdetta päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajan tunniste\",\"descr\":\"Työsuhteen omistajan yksilöllinen tunniste.\"},\"ownerInfo\":{\"title\":\"Omistajan tiedot\",\"descr\":\"Tietoja työsuhteen omistajasta.\"},\"status\":{\"title\":\"Työsuhteen tila\",\"descr\":\"Nykyinen tila työsuhteessa.\"},\"backOfficeStatus\":{\"title\":\"Back Office -tila\",\"descr\":\"Työsuhteen tila sisäisessä järjestelmässä.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin työsuhde alkaa.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin työsuhde päättyy.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Työsuhteen bruttopalkka.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Työsuhteeseen liittyvä maksu.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Työsuhteeseen liittyvä palkkio.\"},\"otherId\":{\"title\":\"Muu tunniste\",\"descr\":\"Toinen tunniste, joka liittyy työsuhteeseen.\"},\"otherPartyInfo\":{\"title\":\"Toisen osapuolen tiedot\",\"descr\":\"Tietoja työsuhteen toisesta osapuolesta.\"},\"shortText\":{\"title\":\"Lyhyt kuvaus\",\"descr\":\"Lyhyt kuvaus työsuhteesta.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Liiketoimintaan liittyvät objektit työsuhteessa.\"},\"salaryDate\":{\"title\":\"Palkanmaksupäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"data\":{\"title\":\"Työsuhteen tiedot\",\"descr\":\"Yksityiskohtaiset tiedot työsuhteesta.\"},\"versionNumber\":{\"title\":\"Versio\",\"descr\":\"Työsuhteen versionumero.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Työsuhteen yksilöllinen URI.\"},\"flags\":{\"title\":\"Merkinnät\",\"descr\":\"Erityiset merkinnät työsuhteessa.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Työsuhteeseen liittyvät viestit.\"},\"entityType\":{\"title\":\"Entiteettityyppi\",\"descr\":\"Työsuhteen entiteettityyppi.\"},\"logicalDate\":{\"title\":\"Looginen päivämäärä\",\"descr\":\"Looginen päivämäärä työsuhteessa.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Viite työsuhteeseen liittyen.\"},\"externalId\":{\"title\":\"Ulkoinen tunniste\",\"descr\":\"Työsuhteen ulkoinen tunniste.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Työsuhteen yksilöllinen tunniste.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Työsuhteen omistaja.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Indikaattori siitä, onko työsuhde vain luku.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Työsuhteeseen liittyvä kumppani.\"}},\"EmploymentData\":{\"title\":\"Työsuhteen tiedot\",\"pensionCalculation\":{\"title\":\"Eläkelaskenta\",\"descr\":\"Tietoja työsuhteeseen liittyvästä eläkelaskennasta.\"},\"taxcard\":{\"title\":\"Verokortti\",\"descr\":\"Työsuhteeseen liittyvä verokortti.\"},\"type\":{\"title\":\"Työsuhteen tyyppi\",\"descr\":\"Työsuhteen tyyppi, kuten vakituinen tai määräaikainen.\"},\"startDate\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin työsuhde alkaa.\"},\"endDate\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin työsuhde päättyy.\"},\"isFixedTerm\":{\"title\":\"Määräaikainen\",\"descr\":\"Indikaattori siitä, onko työsuhde määräaikainen.\"},\"isTerminated\":{\"title\":\"Päättynyt\",\"descr\":\"Indikaattori siitä, onko työsuhde päättynyt.\"},\"isActive\":{\"title\":\"Aktiivinen\",\"descr\":\"Indikaattori siitä, onko työsuhde aktiivinen.\"}},\"EmployingRelation\":{\"title\":\"Työsuhde\",\"employer\":{\"title\":\"Työnantaja\",\"descr\":\"Työsuhteen työnantaja.\"},\"contact\":{\"title\":\"Yhteyshenkilö\",\"descr\":\"Työsuhteeseen liittyvä yhteyshenkilö.\"},\"settings\":{\"title\":\"Asetukset\",\"descr\":\"Työsuhteen erityiset asetukset.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Työsuhteen yksilöllinen tunniste.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin työsuhde luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin työsuhdetta päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Työsuhteen omistaja.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Indikaattori siitä, onko työsuhde vain luku.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Työsuhteeseen liittyvä kumppani.\"}},\"EmployingRelationSettings\":{\"title\":\"Työsuhteen asetukset\",\"costAccounting\":{\"title\":\"Kustannuslaskenta\",\"descr\":\"Työsuhteeseen liittyvä kustannuslaskenta.\"}},\"EmployingRelationCostAccounting\":{\"title\":\"Työsuhteen Kustannuslaskenta\",\"dimensions\":{\"title\":\"Kustannuslaskennan Ulottuvuudet\",\"descr\":\"Määrittelee työsuhteeseen liittyvät kustannuslaskennan ulottuvuudet, joita voidaan käyttää kustannusten jakamiseen ja analysointiin.\"}},\"CostAccountingDimensionDefinition\":{\"title\":\"Kustannuslaskennan Ulottuvuuden Määritelmä\",\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste kustannuslaskennan ulottuvuudelle.\"},\"label\":{\"title\":\"Nimike\",\"descr\":\"Kuvaava nimike kustannuslaskennan ulottuvuudelle.\"},\"options\":{\"title\":\"Vaihtoehdot\",\"descr\":\"Mahdolliset valinnat, jotka liittyvät kustannuslaskennan ulottuvuuteen.\"},\"allowCostSharing\":{\"title\":\"Kustannusten Jakaminen\",\"descr\":\"Määrittää, voiko kustannuksia jakaa tämän ulottuvuuden puitteissa.\"},\"scope\":{\"title\":\"Soveltamisala\",\"descr\":\"Määrittää, mihin liiketoiminta-alueisiin ulottuvuus soveltuu.\"}},\"CostAccountingDimensionOption\":{\"title\":\"Kustannuslaskennan Ulottuvuuden Vaihtoehto\",\"value\":{\"title\":\"Arvo\",\"descr\":\"Vaihtoehdon arvo, joka käytetään kustannuslaskennassa.\"},\"text\":{\"title\":\"Teksti\",\"descr\":\"Vaihtoehdon kuvaava teksti.\"},\"path\":{\"title\":\"Polku\",\"descr\":\"Hierarkkinen polku, joka osoittaa vaihtoehdon sijainnin.\"},\"scope\":{\"title\":\"Soveltamisala\",\"descr\":\"Määrittää, mihin liiketoiminta-alueisiin vaihtoehto soveltuu.\"}},\"BlobFile\":{\"title\":\"Tiedosto\",\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste tiedostolle järjestelmässä.\"},\"container\":{\"title\":\"Säiliö\",\"descr\":\"Säiliö, jossa tiedosto sijaitsee.\"},\"type\":{\"title\":\"Tyyppi\",\"descr\":\"Tiedoston tyyppi, joka määrittää sen käsittelytavan.\"},\"fileType\":{\"title\":\"Tiedostotyyppi\",\"descr\":\"Tiedoston tekninen tyyppi, kuten PDF tai DOCX.\"},\"userFriendlyName\":{\"title\":\"Käyttäjäystävällinen Nimi\",\"descr\":\"Tiedoston nimi, joka on helposti ymmärrettävä käyttäjälle.\"},\"filePath\":{\"title\":\"Tiedostopolku\",\"descr\":\"Tiedoston sijainti järjestelmässä.\"},\"blobUri\":{\"title\":\"Blob URI\",\"descr\":\"Yksilöllinen URI, joka osoittaa tiedoston sijainnin.\"},\"previewUri\":{\"title\":\"Esikatselu URI\",\"descr\":\"URI, jota käytetään tiedoston esikatseluun.\"},\"updatedAt\":{\"title\":\"Päivitetty\",\"descr\":\"Ajankohta, jolloin tiedosto on viimeksi päivitetty.\"},\"length\":{\"title\":\"Pituus\",\"descr\":\"Tiedoston koko tavuina.\"},\"isCollection\":{\"title\":\"Onko Kokoelma\",\"descr\":\"Määrittää, onko tiedosto osa kokoelmaa.\"},\"metadata\":{\"title\":\"Metatiedot\",\"descr\":\"Tiedostoon liittyvät lisätiedot.\"},\"workflowData\":{\"title\":\"Työprosessin Tiedot\",\"descr\":\"Tiedostoon liittyvät työprosessin tiedot.\"}},\"FileType\":{\"title\":\"Tiedostotyyppi\",\"extension\":{\"title\":\"Pääte\",\"descr\":\"Tiedoston pääte, joka määrittää sen tyypin.\"},\"mimeType\":{\"title\":\"MIME-tyyppi\",\"descr\":\"Tiedoston MIME-tyyppi, joka määrittää sen sisällön tyypin.\"},\"isImage\":{\"title\":\"Onko Kuva\",\"descr\":\"Määrittää, onko tiedosto kuva.\"},\"isText\":{\"title\":\"Onko Teksti\",\"descr\":\"Määrittää, onko tiedosto tekstitiedosto.\"}},\"BlobFileMetadata\":{\"title\":\"Tiedoston metatiedot\",\"isSigned\":{\"title\":\"Onko allekirjoitettu\",\"descr\":\"Ilmaisee, onko tiedosto virallisesti allekirjoitettu.\"},\"logicalDate\":{\"title\":\"Looginen päivämäärä\",\"descr\":\"Tiedoston liiketoiminnallinen päivämäärä, joka voi poiketa luontipäivästä.\"},\"subType\":{\"title\":\"Alatyyppi\",\"descr\":\"Tiedoston tarkempi luokittelu tai tyyppi.\"},\"avatar\":{\"title\":\"Käyttäjäkuva\",\"descr\":\"Liitetty käyttäjäkuva, jos sellainen on määritetty.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Tiedostoon liittyvä bruttopalkkasumma.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Tiedostoon liittyvä maksusumma.\"},\"data\":{\"title\":\"Lisätiedot\",\"descr\":\"Muut tiedostoon liittyvät liiketoimintatiedot.\"}},\"PageResultOfFileListItem\":{\"title\":\"Sivutettu tiedostoluettelo\",\"items\":{\"title\":\"Tiedostot\",\"descr\":\"Luettelo tiedostoista tällä sivulla.\"},\"nextPageLink\":{\"title\":\"Seuraavan sivun linkki\",\"descr\":\"Linkki seuraavalle sivulle, jos sellainen on saatavilla.\"},\"count\":{\"title\":\"Tiedostojen määrä\",\"descr\":\"Tiedostojen kokonaismäärä tässä luettelossa.\"}},\"FileListItem\":{\"title\":\"Tiedoston tiedot\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin tiedosto luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin tiedostoa päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajan tunniste\",\"descr\":\"Tiedoston omistajan yksilöivä tunniste.\"},\"ownerInfo\":{\"title\":\"Omistajan tiedot\",\"descr\":\"Tiedot tiedoston omistajasta.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Tiedoston nykyinen tila.\"},\"backOfficeStatus\":{\"title\":\"Taustatoimiston tila\",\"descr\":\"Tiedoston tila taustatoimiston näkökulmasta.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Ajankohta, jolloin tiedoston käsittely alkoi.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Ajankohta, jolloin tiedoston käsittely päättyi.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Tiedostoon liittyvä bruttopalkkasumma.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Tiedostoon liittyvä maksusumma.\"},\"fee\":{\"title\":\"Maksu\",\"descr\":\"Tiedostoon liittyvä maksu tai palkkio.\"},\"otherId\":{\"title\":\"Muu tunniste\",\"descr\":\"Mahdollinen lisätunniste tiedostolle.\"},\"otherPartyInfo\":{\"title\":\"Toisen osapuolen tiedot\",\"descr\":\"Tiedot toisesta osapuolesta, joka liittyy tiedostoon.\"},\"shortText\":{\"title\":\"Lyhyt kuvaus\",\"descr\":\"Lyhyt kuvaus tiedostosta.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Liiketoimintaobjektit, jotka liittyvät tiedostoon.\"},\"salaryDate\":{\"title\":\"Palkkapäivämäärä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"data\":{\"title\":\"Lisätiedot\",\"descr\":\"Muut tiedostoon liittyvät liiketoimintatiedot.\"},\"versionNumber\":{\"title\":\"Versio\",\"descr\":\"Tiedoston versiotunnus.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Tiedoston yksilöivä URI-osoite.\"},\"flags\":{\"title\":\"Merkit\",\"descr\":\"Tiedostoon liittyvät erityismerkinnät.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Tiedostoon liittyvät viestit tai ilmoitukset.\"},\"entityType\":{\"title\":\"Entiteettityyppi\",\"descr\":\"Tiedoston liittyvän entiteetin tyyppi.\"},\"logicalDate\":{\"title\":\"Looginen päivämäärä\",\"descr\":\"Tiedoston liiketoiminnallinen päivämäärä.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Tiedostoon liittyvä viitetieto.\"},\"externalId\":{\"title\":\"Ulkoinen tunniste\",\"descr\":\"Tiedoston ulkoinen tunniste.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Tiedoston yksilöivä tunniste.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Tiedoston omistajan nimi tai tunniste.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko tiedosto vain luku -tilassa.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Tiedostoon liittyvä liikekumppani.\"}},\"FileData\":{\"title\":\"Tiedoston lisätiedot\",\"partnerMessageAssignedTo\":{\"title\":\"Kumppanin viestin vastaanottaja\",\"descr\":\"Kumppanin viestin osoitettu vastaanottaja.\"},\"workerCount\":{\"title\":\"Työntekijöiden määrä\",\"descr\":\"Tiedostoon liittyvien työntekijöiden kokonaismäärä.\"},\"calculationCount\":{\"title\":\"Laskentojen määrä\",\"descr\":\"Tiedostoon liittyvien laskentojen määrä.\"},\"officialId\":{\"title\":\"Virallinen tunniste\",\"descr\":\"Tiedoston virallinen tunniste.\"},\"userFriendlyName\":{\"title\":\"Käyttäjäystävällinen nimi\",\"descr\":\"Tiedoston käyttäjäystävällinen nimi.\"},\"filePath\":{\"title\":\"Tiedostopolku\",\"descr\":\"Tiedoston sijainti järjestelmässä.\"}},\"PageResultOfHolidayYearListItem\":{\"title\":\"Sivutettu lomavuosiluettelo\",\"items\":{\"title\":\"Lomavuodet\",\"descr\":\"Luettelo lomavuosista tällä sivulla.\"},\"nextPageLink\":{\"title\":\"Seuraavan sivun linkki\",\"descr\":\"Linkki seuraavalle sivulle, jos sellainen on saatavilla.\"},\"count\":{\"title\":\"Lomavuosien määrä\",\"descr\":\"Lomavuosien kokonaismäärä tässä luettelossa.\"}},\"HolidayYearListItem\":{\"title\":\"Lomavuoden Tietue\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Tietueen luontipäivämäärä, jos saatavilla.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Tietueen viimeisin päivityspäivämäärä, jos saatavilla.\"},\"ownerId\":{\"title\":\"Omistajan Tunniste\",\"descr\":\"Tietueen omistajan yksilöllinen tunniste, jos saatavilla.\"},\"ownerInfo\":{\"title\":\"Omistajan Tiedot\",\"descr\":\"Tietoa tietueen omistajasta, jos saatavilla.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Tietueen nykyinen tila, jos saatavilla.\"},\"backOfficeStatus\":{\"title\":\"Taustatoimiston Tila\",\"descr\":\"Tietueen tila taustatoimiston näkökulmasta, jos saatavilla.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Lomavuoden aloituspäivämäärä, jos saatavilla.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Lomavuoden päättymispäivämäärä, jos saatavilla.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Lomavuoden bruttopalkka, jos saatavilla.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Lomavuoden aikana maksettu summa, jos saatavilla.\"},\"fee\":{\"title\":\"Maksu\",\"descr\":\"Mahdolliset lomavuoteen liittyvät maksut, jos saatavilla.\"},\"otherId\":{\"title\":\"Toisen Osapuolen Tunniste\",\"descr\":\"Toisen osapuolen yksilöllinen tunniste, jos saatavilla.\"},\"otherPartyInfo\":{\"title\":\"Toisen Osapuolen Tiedot\",\"descr\":\"Tietoa toisesta osapuolesta, jos saatavilla.\"},\"shortText\":{\"title\":\"Lyhyt Kuvaus\",\"descr\":\"Lyhyt kuvaus lomavuodesta, jos saatavilla.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Lomavuoteen liittyvät liiketoimintaobjektit, jos saatavilla.\"},\"salaryDate\":{\"title\":\"Palkanmaksupäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan, jos saatavilla.\"},\"data\":{\"title\":\"Lomavuoden Tiedot\",\"descr\":\"Yksityiskohtaiset tiedot lomavuodesta, jos saatavilla.\"},\"versionNumber\":{\"title\":\"Versio\",\"descr\":\"Tietueen versio, jos saatavilla.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Tietueen URI-osoite, jos saatavilla.\"},\"flags\":{\"title\":\"Merkit\",\"descr\":\"Tietueeseen liittyvät merkit, jos saatavilla.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Tietueeseen liittyvät viestit, jos saatavilla.\"},\"entityType\":{\"title\":\"Entiteettityyppi\",\"descr\":\"Tietueen entiteettityyppi, jos saatavilla.\"},\"logicalDate\":{\"title\":\"Looginen Päivämäärä\",\"descr\":\"Tietueen looginen päivämäärä, jos saatavilla.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Tietueen viitenumero, jos saatavilla.\"},\"externalId\":{\"title\":\"Ulkoinen Tunniste\",\"descr\":\"Ulkoinen tunniste tietueelle, jos saatavilla.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Tietueen yksilöllinen tunniste, jos saatavilla.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Tietueen omistaja, jos saatavilla.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Tietueen muokkausoikeus, jos saatavilla.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Tietueeseen liittyvä yhteistyökumppani, jos saatavilla.\"}},\"HolidayYearData\":{\"title\":\"Lomavuoden Tiedot\",\"year\":{\"title\":\"Vuosi\",\"descr\":\"Lomavuoden vuosi, jos saatavilla.\"},\"employmentId\":{\"title\":\"Työsuhteen Tunniste\",\"descr\":\"Työsuhteen yksilöllinen tunniste, jos saatavilla.\"}},\"HolidayPayCalculationReportData\":{\"title\":\"Lomapalkkalaskelman Raporttitiedot\",\"holidayYear\":{\"title\":\"Lomavuosi\",\"descr\":\"Raporttiin liittyvä lomavuosi, jos saatavilla.\"},\"holidayAccrualSettings\":{\"title\":\"Lomakertymän Asetukset\",\"descr\":\"Lomakertymän laskentaan liittyvät asetukset, jos saatavilla.\"},\"holidayPaySettings\":{\"title\":\"Lomapalkan Asetukset\",\"descr\":\"Lomapalkan laskentaan liittyvät asetukset, jos saatavilla.\"},\"calculations\":{\"title\":\"Laskelmat\",\"descr\":\"Raporttiin sisältyvät lomapalkkalaskelmat, jos saatavilla.\"}},\"HolidayAccrualSettings\":{\"title\":\"Lomakertymän Asetukset\",\"code\":{\"title\":\"Lomakoodi\",\"descr\":\"Lomakertymän laskentaan käytettävä koodi, jos saatavilla.\"},\"workingTimeTypes\":{\"title\":\"Työaikatyypit\",\"descr\":\"Lomakertymään vaikuttavat työaikatyypit, jos saatavilla.\"}},\"HolidayPaySettings\":{\"title\":\"Lomapalkan Asetukset\",\"holidayPayCalculation\":{\"title\":\"Lomapalkan Laskenta\",\"descr\":\"Lomapalkan laskentamenetelmä, jos saatavilla.\"},\"multipliers\":{\"title\":\"Kertoimet\",\"descr\":\"Lomapalkan laskennassa käytettävät kertoimet.\"}},\"HolidayPayCalculationReportDataCalc\":{\"title\":\"Lomapalkkalaskelman Tiedot\",\"calculationId\":{\"title\":\"Laskelman Tunniste\",\"descr\":\"Yksilöivä tunniste lomapalkkalaskelmalle.\"},\"calculationTitle\":{\"title\":\"Laskelman Otsikko\",\"descr\":\"Lomapalkkalaskelman kuvaava otsikko.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"workStartDate\":{\"title\":\"Työn Aloituspäivä\",\"descr\":\"Päivämäärä, jolloin työskentely alkoi.\"},\"workEndDate\":{\"title\":\"Työn Päättymispäivä\",\"descr\":\"Päivämäärä, jolloin työskentely päättyi.\"}},\"HolidayPayCalculationReportDataCalcRow\":{\"title\":\"Lomapalkkalaskelman Rivitiedot\",\"irRow\":{\"title\":\"IR Rivi\",\"descr\":\"Tiedot IR-rivistä, joka liittyy lomapalkkalaskelmaan.\"},\"salaryType\":{\"title\":\"Palkkatyyppi\",\"descr\":\"Tyyppi palkasta, joka liittyy laskelmaan.\"}},\"HouseholdYear\":{\"title\":\"Kotitalousvuosi\",\"year\":{\"title\":\"Vuosi\",\"descr\":\"Vuosi, johon kotitaloustiedot liittyvät.\"},\"processingStatus\":{\"title\":\"Käsittelyn Tila\",\"descr\":\"Kotitalousvuoden käsittelyn nykyinen tila.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Kotitalousvuoden yleinen tila.\"},\"userFeedbackText\":{\"title\":\"Käyttäjäpalaute\",\"descr\":\"Käyttäjän antama palaute kotitalousvuodesta.\"},\"userFeedbackTime\":{\"title\":\"Palauteaika\",\"descr\":\"Aika, jolloin käyttäjä antoi palautteen.\"},\"insuranceAmount\":{\"title\":\"Vakuutusmäärä\",\"descr\":\"Vakuutuksen määrä kotitalousvuodelle.\"},\"spouseName\":{\"title\":\"Puolison Nimi\",\"descr\":\"Kotitalousvuoteen liittyvän puolison nimi.\"},\"spousePersonalId\":{\"title\":\"Puolison Henkilötunnus\",\"descr\":\"Puolison henkilötunnus kotitalousvuodessa.\"},\"workflowData\":{\"title\":\"Työnkulun Tiedot\",\"descr\":\"Tiedot kotitalousvuoden työnkulusta.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöivä tunniste kotitalousvuodelle.\"},\"createdAt\":{\"title\":\"Luontiaika\",\"descr\":\"Aika, jolloin kotitalousvuosi luotiin.\"},\"updatedAt\":{\"title\":\"Päivitysaika\",\"descr\":\"Aika, jolloin kotitalousvuosi viimeksi päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Henkilö tai taho, joka omistaa kotitalousvuoden tiedot.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Tieto siitä, onko kotitalousvuosi vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Kotitalousvuoteen liittyvä yhteistyökumppani.\"}},\"PageResultOfHouseholdYearListItem\":{\"title\":\"Kotitalousvuosien Sivutettu Tulos\",\"items\":{\"title\":\"Kohteet\",\"descr\":\"Luettelo kotitalousvuosien kohteista.\"},\"nextPageLink\":{\"title\":\"Seuraavan Sivun Linkki\",\"descr\":\"Linkki seuraavalle sivulle kotitalousvuosissa.\"},\"count\":{\"title\":\"Kohteiden Lukumäärä\",\"descr\":\"Kokonaismäärä kotitalousvuosien kohteita.\"}},\"HouseholdYearListItem\":{\"title\":\"Kotitalousvuoden Kohde\",\"createdAt\":{\"title\":\"Luontiaika\",\"descr\":\"Aika, jolloin kotitalousvuoden kohde luotiin.\"},\"updatedAt\":{\"title\":\"Päivitysaika\",\"descr\":\"Aika, jolloin kotitalousvuoden kohde viimeksi päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajan Tunniste\",\"descr\":\"Tunniste, joka yksilöi kohteen omistajan.\"},\"ownerInfo\":{\"title\":\"Omistajan Tiedot\",\"descr\":\"Tiedot kohteen omistajasta.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Kotitalousvuoden kohteen nykyinen tila.\"},\"backOfficeStatus\":{\"title\":\"Back Office Tila\",\"descr\":\"Kotitalousvuoden kohteen tila taustajärjestelmässä.\"},\"startAt\":{\"title\":\"Aloitusaika\",\"descr\":\"Aika, jolloin kotitalousvuoden kohde alkaa.\"},\"endAt\":{\"title\":\"Päättymisaika\",\"descr\":\"Aika, jolloin kotitalousvuoden kohde päättyy.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Kohteen bruttopalkka kotitalousvuodelle.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Kohteen maksu kotitalousvuodelle.\"},\"fee\":{\"title\":\"Maksu\",\"descr\":\"Kohteeseen liittyvä maksu tai palkkio.\"},\"otherId\":{\"title\":\"Muu Tunniste\",\"descr\":\"Muu tunniste, joka liittyy kohteeseen.\"},\"otherPartyInfo\":{\"title\":\"Muun Osapuolen Tiedot\",\"descr\":\"Tiedot muusta osapuolesta, joka liittyy kohteeseen.\"},\"shortText\":{\"title\":\"Lyhyt Teksti\",\"descr\":\"Lyhyt kuvaus kohteesta.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Luettelo liiketoimintaobjekteista, jotka liittyvät kohteeseen.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan kohteelle.\"},\"data\":{\"title\":\"Tiedot\",\"descr\":\"Lisätiedot, jotka liittyvät kotitalousvuoden kohteeseen.\"},\"versionNumber\":{\"title\":\"Versio Numero\",\"descr\":\"Kohteen versionumero.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Yksilöivä URI kohteelle.\"},\"flags\":{\"title\":\"Liput\",\"descr\":\"Luettelo lipuista, jotka liittyvät kohteeseen.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Luettelo viesteistä, jotka liittyvät kohteeseen.\"},\"entityType\":{\"title\":\"Entiteettityyppi\",\"descr\":\"Kohteen entiteettityyppi.\"},\"logicalDate\":{\"title\":\"Looginen Päivämäärä\",\"descr\":\"Looginen päivämäärä, joka liittyy kohteeseen.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Viite, joka liittyy kohteeseen.\"},\"externalId\":{\"title\":\"Ulkoinen Tunniste\",\"descr\":\"Ulkoinen tunniste, joka liittyy kohteeseen.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöivä tunniste kohteelle.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Henkilö tai taho, joka omistaa kohteen.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Tieto siitä, onko kohde vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Kohteeseen liittyvä yhteistyökumppani.\"}},\"HouseholdYearData\":{\"title\":\"Kotitalouden Vuositiedot\",\"partnerMessageAssignedTo\":{\"title\":\"Viestin Vastaanottaja\",\"descr\":\"Henkilö tai taho, jolle viesti on osoitettu.\"}},\"EInvoiceAddress\":{\"title\":\"Verkkolaskuosoite\",\"receiverName\":{\"title\":\"Vastaanottajan Nimi\",\"descr\":\"Laskun vastaanottavan henkilön tai yrityksen nimi.\"},\"receiverOfficialId\":{\"title\":\"Vastaanottajan Virallinen Tunnus\",\"descr\":\"Vastaanottajan virallinen tunnus, kuten Y-tunnus.\"},\"receiver\":{\"title\":\"Vastaanottaja\",\"descr\":\"Taholle, jolle lasku on osoitettu.\"},\"intermediator\":{\"title\":\"Välittäjä\",\"descr\":\"Välittäjän tunnus, joka käsittelee laskun.\"},\"intermediatorName\":{\"title\":\"Välittäjän Nimi\",\"descr\":\"Välittäjäorganisaation nimi, joka käsittelee laskun.\"}},\"WorkerImport\":{\"title\":\"Työntekijän Tietojen Tuonti\",\"allowed\":{\"title\":\"Sallittu Tunnus\",\"descr\":\"Tunnus, joka osoittaa tuonnin sallituksi.\"},\"officialId\":{\"title\":\"Virallinen Tunnus\",\"descr\":\"Työntekijän virallinen tunnus, kuten henkilötunnus.\"},\"parameters\":{\"title\":\"Parametrit\",\"descr\":\"Mukautetut parametrit tuontiprosessille.\"}},\"WorkerAccount\":{\"title\":\"Työntekijän Tili\",\"ibanNumber\":{\"title\":\"IBAN-numero\",\"descr\":\"Työntekijän pankkitilin IBAN-numero.\"},\"employerId\":{\"title\":\"Työnantajan Tunnus\",\"descr\":\"Työnantajan virallinen tunnus.\"},\"officialPersonId\":{\"title\":\"Virallinen Henkilötunnus\",\"descr\":\"Työntekijän virallinen henkilötunnus.\"},\"ageRange\":{\"title\":\"Ikäryhmä\",\"descr\":\"Työntekijän ikäryhmä.\"},\"employment\":{\"title\":\"Työsuhde\",\"descr\":\"Työntekijän työsuhdetiedot.\"},\"validation\":{\"title\":\"Validointi\",\"descr\":\"Tietojen validointitila.\"},\"employmentId\":{\"title\":\"Työsuhteen Tunnus\",\"descr\":\"Yksilöivä tunnus työsuhteelle.\"},\"entityType\":{\"title\":\"Yksikön Tyyppi\",\"descr\":\"Yksikön oikeudellinen tyyppi.\"},\"isEmployer\":{\"title\":\"Onko Työnantaja\",\"descr\":\"Kertoo, onko tili työnantajan.\"},\"isWorker\":{\"title\":\"Onko Työntekijä\",\"descr\":\"Kertoo, onko tili työntekijän.\"},\"isVerified\":{\"title\":\"Onko Vahvistettu\",\"descr\":\"Kertoo, onko tili vahvistettu.\"},\"avatar\":{\"title\":\"Profiilikuva\",\"descr\":\"Työntekijän profiilikuva.\"},\"contact\":{\"title\":\"Yhteystiedot\",\"descr\":\"Työntekijän yhteystiedot.\"},\"language\":{\"title\":\"Kieli\",\"descr\":\"Työntekijän ensisijainen kieli.\"},\"serviceModelId\":{\"title\":\"Palvelumallin Tunnus\",\"descr\":\"Palvelumallin yksilöivä tunnus.\"},\"workflowData\":{\"title\":\"Työnkulun Tiedot\",\"descr\":\"Tietoja liittyen työnkulkuun.\"},\"id\":{\"title\":\"Tunnus\",\"descr\":\"Työntekijän tilin yksilöivä tunnus.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin tili luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Tilin omistava henkilö tai taho.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Kertoo, onko tili vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Tilin liittyvä yhteistyökumppani.\"}},\"ApiImportResultOfString\":{\"title\":\"API Tuontitulokset\",\"status\":{\"title\":\"Tila\",\"descr\":\"Tuontiprosessin nykyinen tila.\"},\"item\":{\"title\":\"Kohde\",\"descr\":\"Tuontiprosessissa käsitelty kohde.\"}},\"WorkerAccountEmployment\":{\"title\":\"Työntekijän Työsuhdetiedot\",\"type\":{\"title\":\"Työsuhteen Tyyppi\",\"descr\":\"Määrittää työntekijän työsuhteen luonteen, kuten vakituinen tai määräaikainen.\"},\"irIncomeEarnerTypes\":{\"title\":\"Tulonsaajan Tyypit\",\"descr\":\"Luettelo tulonsaajatyypeistä, jotka liittyvät työntekijän verotukseen.\"},\"cbaCode\":{\"title\":\"Työehtosopimuksen Koodi\",\"descr\":\"Työehtosopimuksen tunnistekoodi, jota sovelletaan työntekijän työsuhteessa.\"},\"work\":{\"title\":\"Työnkuvaus\",\"descr\":\"Kuvaus työntekijän tehtävistä ja vastuista.\"},\"holidays\":{\"title\":\"Lomamääräykset\",\"descr\":\"Määräykset ja ehdot työntekijän vuosilomista.\"},\"usecase\":{\"title\":\"Käyttötapaus\",\"descr\":\"Kuvaus siitä, miten työsuhdetietoja käytetään liiketoiminnassa.\"},\"pensionCalculation\":{\"title\":\"Eläkkeen Laskenta\",\"descr\":\"Tietoa eläkkeen laskentaperusteista ja -menetelmistä.\"},\"pensionRule\":{\"title\":\"Eläkesääntö\",\"descr\":\"Säännöt ja ehdot, jotka koskevat työntekijän eläkeoikeuksia.\"},\"pensionCompany\":{\"title\":\"Eläkeyhtiö\",\"descr\":\"Eläkeyhtiö, joka hallinnoi työntekijän eläkejärjestelyjä.\"},\"pensionContractNumber\":{\"title\":\"Eläkesopimuksen Numero\",\"descr\":\"Työntekijän eläkesopimuksen tunnistenumero.\"},\"insuranceCompany\":{\"title\":\"Vakuutusyhtiö\",\"descr\":\"Vakuutusyhtiö, joka tarjoaa työntekijän vakuutusturvan.\"},\"insuranceContractNumber\":{\"title\":\"Vakuutussopimuksen Numero\",\"descr\":\"Työntekijän vakuutussopimuksen tunnistenumero.\"},\"taxcard\":{\"title\":\"Verokortti\",\"descr\":\"Työntekijän verokortti, joka määrittää veroprosentin.\"},\"salaryPaymentMethod\":{\"title\":\"Palkan Maksutapa\",\"descr\":\"Tapa, jolla työntekijän palkka maksetaan, kuten pankkisiirto.\"},\"startDate\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Työsuhteen alkamispäivämäärä.\"},\"endDate\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Työsuhteen päättymispäivämäärä, jos määräaikainen.\"},\"isFixedTerm\":{\"title\":\"Määräaikainen\",\"descr\":\"Ilmaisee, onko työsuhde määräaikainen.\"},\"isTerminated\":{\"title\":\"Päättynyt\",\"descr\":\"Ilmaisee, onko työsuhde päättynyt.\"},\"isAccountOwner\":{\"title\":\"Tilin Omistaja\",\"descr\":\"Ilmaisee, onko työntekijä tilin omistaja.\"},\"sourceId\":{\"title\":\"Lähdetunnus\",\"descr\":\"Tunniste, joka liittyy työsuhdetietojen alkuperään.\"},\"employmentRegCode\":{\"title\":\"Työsuhderekisterin Koodi\",\"descr\":\"Koodi, joka liittyy työsuhteen rekisteröintiin.\"}},\"CompanyImport\":{\"title\":\"Yrityksen Tuonti\",\"allowed\":{\"title\":\"Sallittu\",\"descr\":\"Yrityksen sallittu tunniste, kuten Y-tunnus.\"},\"officialId\":{\"title\":\"Virallinen Tunniste\",\"descr\":\"Yrityksen virallinen tunnistenumero.\"},\"parameters\":{\"title\":\"Parametrit\",\"descr\":\"Muut tuontiin liittyvät parametrit ja asetukset.\"}},\"AssureCompanyAccountRequest\":{\"title\":\"Yritystilin Varmistuspyyntö\",\"allowed\":{\"title\":\"Sallittu\",\"descr\":\"Yrityksen sallittu tunniste, kuten Y-tunnus.\"},\"officialId\":{\"title\":\"Virallinen Tunniste\",\"descr\":\"Yrityksen virallinen tunnistenumero.\"},\"partnerAccountId\":{\"title\":\"Kumppanitilin Tunniste\",\"descr\":\"Kumppanitilin tunnistenumero, jos käytössä.\"},\"email\":{\"title\":\"Sähköposti\",\"descr\":\"Yhteyshenkilön sähköpostiosoite.\"},\"telephone\":{\"title\":\"Puhelinnumero\",\"descr\":\"Yhteyshenkilön puhelinnumero.\"},\"contactFirstName\":{\"title\":\"Yhteyshenkilön Etunimi\",\"descr\":\"Yhteyshenkilön etunimi.\"},\"contactLastName\":{\"title\":\"Yhteyshenkilön Sukunimi\",\"descr\":\"Yhteyshenkilön sukunimi.\"},\"proxyPartner\":{\"title\":\"Välittäjäkumppani\",\"descr\":\"Välittäjäkumppanin nimi, jos käytössä.\"},\"language\":{\"title\":\"Kieli\",\"descr\":\"Yhteydenpidossa käytettävä kieli.\"}},\"ApiImportResultOfPartnerCompanyAccountInfo\":{\"title\":\"Kumppaniyritystilin Tietojen Tuonnin Tulos\",\"status\":{\"title\":\"Tila\",\"descr\":\"Tuontiprosessin nykyinen tila.\"},\"item\":{\"title\":\"Tuotu Kohde\",\"descr\":\"Tuonnin kohteena olevan kumppaniyritystilin tiedot.\"}},\"PartnerCompanyAccountInfo\":{\"title\":\"Kumppaniyritystilin Tiedot\",\"accountId\":{\"title\":\"Tilin Tunniste\",\"descr\":\"Kumppaniyritystilin tunnistenumero.\"},\"accountIdFormatted\":{\"title\":\"Muotoiltu Tilin Tunniste\",\"descr\":\"Muotoiltu versio kumppaniyritystilin tunnisteesta.\"},\"avatar\":{\"title\":\"Käyttäjäkuva\",\"descr\":\"Kumppaniyritystilin käyttäjäkuva tai logo.\"},\"isVerified\":{\"title\":\"Varmennettu\",\"descr\":\"Ilmaisee, onko tili varmennettu.\"},\"isAuthorized\":{\"title\":\"Valtuutettu\",\"descr\":\"Ilmaisee, onko tili valtuutettu toimimaan.\"},\"partnerAccountId\":{\"title\":\"Kumppanitilin Tunniste\",\"descr\":\"Kumppanitilin tunnistenumero.\"}},\"EInvoicingRequest\":{\"title\":\"Sähköinen Laskutuspyyntö\",\"allowed\":{\"title\":\"Sallittu\",\"descr\":\"Tunniste, joka määrittää, onko sähköinen laskutus sallittu.\"},\"officialId\":{\"title\":\"Virallinen Tunniste\",\"descr\":\"Yrityksen tai henkilön virallinen tunniste, jos saatavilla.\"},\"parameters\":{\"title\":\"Parametrit\",\"descr\":\"Lisäasetukset tai tiedot, jotka liittyvät laskutuspyyntöön.\"}},\"ApiImportResultOfObject\":{\"title\":\"Tuontituloksen Yhteenveto\",\"status\":{\"title\":\"Tila\",\"descr\":\"Tuontiprosessin nykyinen tila.\"},\"item\":{\"title\":\"Kohde\",\"descr\":\"Tuodun kohteen tiedot, jos saatavilla.\"}},\"WorkerCheck\":{\"title\":\"Työntekijän Tarkistus\",\"allowed\":{\"title\":\"Sallittu\",\"descr\":\"Tunniste, joka määrittää, onko työntekijän tarkistus sallittu.\"},\"officialId\":{\"title\":\"Virallinen Tunniste\",\"descr\":\"Työntekijän virallinen tunniste, jos saatavilla.\"},\"id\":{\"title\":\"Tunnus\",\"descr\":\"Työntekijän yksilöllinen tunnus, jos saatavilla.\"},\"validation\":{\"title\":\"Validointi\",\"descr\":\"Tarkistuksen validointiprosessin tulokset.\"},\"result\":{\"title\":\"Tarkistustulos\",\"descr\":\"Työntekijän tilin tarkistuksen lopputulos.\"}},\"ApiCheckResultOfWorkerAccountOf\":{\"title\":\"Työntekijätilin Tarkistustulos\",\"status\":{\"title\":\"Tila\",\"descr\":\"Tarkistusprosessin nykyinen tila.\"},\"item\":{\"title\":\"Kohteet\",\"descr\":\"Lista tarkistetuista työntekijätilistä, jos saatavilla.\"}},\"InvoicingRequest\":{\"title\":\"Laskutuspyyntö\",\"allowed\":{\"title\":\"Sallittu\",\"descr\":\"Tunniste, joka määrittää, onko laskutuspyyntö sallittu.\"},\"officialId\":{\"title\":\"Virallinen Tunniste\",\"descr\":\"Yrityksen tai henkilön virallinen tunniste, jos saatavilla.\"},\"parameters\":{\"title\":\"Parametrit\",\"descr\":\"Lisäasetukset tai tiedot, jotka liittyvät laskutuspyyntöön.\"}},\"ApiImportResultOfInvoiceOf\":{\"title\":\"Laskun tuonnin tulos\",\"status\":{\"title\":\"Tuonnin tila\",\"descr\":\"Kuvaa laskun tuonnin nykyisen tilan, esimerkiksi onnistunut tai epäonnistunut.\"},\"item\":{\"title\":\"Laskut\",\"descr\":\"Sisältää tuodut laskut, jos tuonti on onnistunut.\"}},\"Invoice\":{\"title\":\"Lasku\",\"group\":{\"title\":\"Laskuryhmä\",\"descr\":\"Määrittelee laskun kuuluvan tiettyyn ryhmään tai kategoriaan.\"},\"header\":{\"title\":\"Laskun otsikko\",\"descr\":\"Sisältää laskun perustiedot, kuten päivämäärät ja summat.\"},\"recipient\":{\"title\":\"Laskun vastaanottaja\",\"descr\":\"Tietoja henkilöstä tai organisaatiosta, jolle lasku on osoitettu.\"},\"payer\":{\"title\":\"Laskun maksaja\",\"descr\":\"Tietoja henkilöstä tai organisaatiosta, joka maksaa laskun.\"},\"rows\":{\"title\":\"Laskurivit\",\"descr\":\"Yksityiskohtainen erittely laskutettavista tuotteista tai palveluista.\"},\"content\":{\"title\":\"Laskun sisältö\",\"descr\":\"Lisätietoja laskusta, kuten huomautuksia tai viestejä.\"},\"pdf\":{\"title\":\"Laskun PDF\",\"descr\":\"Laskun PDF-muotoinen versio, joka voidaan ladata tai tulostaa.\"},\"workflowData\":{\"title\":\"Työnkulun tiedot\",\"descr\":\"Tietoja laskun käsittelyprosessista yrityksessä.\"},\"id\":{\"title\":\"Laskun tunniste\",\"descr\":\"Yksilöllinen tunniste, joka erottaa laskun muista.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin lasku luotiin järjestelmässä.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin laskua on muokattu.\"},\"owner\":{\"title\":\"Laskun omistaja\",\"descr\":\"Henkilö tai osasto, joka vastaa laskusta yrityksessä.\"},\"isReadOnly\":{\"title\":\"Vain luku -tila\",\"descr\":\"Ilmaisee, onko lasku vain katseltavissa eikä muokattavissa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Yritys tai henkilö, joka liittyy laskutapahtumaan.\"}},\"InvoiceHeader\":{\"title\":\"Laskun otsikko\",\"referenceNumber\":{\"title\":\"Viitenumero\",\"descr\":\"Numero, joka yksilöi laskun maksutapahtumassa.\"},\"date\":{\"title\":\"Laskun päivämäärä\",\"descr\":\"Päivämäärä, jolloin lasku on laadittu.\"},\"dueDate\":{\"title\":\"Eräpäivä\",\"descr\":\"Viimeinen maksupäivä, johon mennessä lasku tulee maksaa.\"},\"logicalDate\":{\"title\":\"Looginen päivämäärä\",\"descr\":\"Käytetään laskun kirjanpidollisessa käsittelyssä.\"},\"totalExVat\":{\"title\":\"Kokonaissumma ilman ALV\",\"descr\":\"Laskun kokonaissumma ilman arvonlisäveroa.\"},\"total\":{\"title\":\"Kokonaissumma\",\"descr\":\"Laskun kokonaissumma, mukaan lukien arvonlisävero.\"},\"totalPaid\":{\"title\":\"Maksettu summa\",\"descr\":\"Summa, joka on jo maksettu laskusta.\"},\"message\":{\"title\":\"Laskuviesti\",\"descr\":\"Viesti tai huomautus, joka liittyy laskuun.\"},\"channel\":{\"title\":\"Maksukanava\",\"descr\":\"Kanava, jonka kautta lasku on toimitettu tai maksettu.\"},\"type\":{\"title\":\"Laskutyyppi\",\"descr\":\"Laskun tyyppi, kuten myyntilasku tai ostolasku.\"},\"externalId\":{\"title\":\"Ulkoinen tunniste\",\"descr\":\"Tunniste, joka on peräisin ulkoisesta järjestelmästä.\"},\"status\":{\"title\":\"Laskun tila\",\"descr\":\"Nykyinen tila, kuten maksettu tai avoin.\"},\"statusAt\":{\"title\":\"Tilan päivämäärä\",\"descr\":\"Päivämäärä, jolloin laskun tila on viimeksi muuttunut.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Liittyvät liiketoimintaobjektit, kuten projektit tai tilaukset.\"},\"payrollId\":{\"title\":\"Palkkatunniste\",\"descr\":\"Tunniste, joka liittyy palkkahallintoon.\"},\"payrollTitle\":{\"title\":\"Palkkaotsikko\",\"descr\":\"Otsikko, joka kuvaa palkkahallinnon kohdetta.\"},\"paidBusinessObjectsCount\":{\"title\":\"Maksettujen objektien määrä\",\"descr\":\"Lukumäärä liiketoimintaobjekteista, jotka on maksettu.\"},\"period\":{\"title\":\"Aikajakso\",\"descr\":\"Ajanjakso, jota lasku koskee.\"},\"paymentType\":{\"title\":\"Maksutyyppi\",\"descr\":\"Tapa, jolla lasku on maksettu, kuten tilisiirto tai korttimaksu.\"}},\"InvoiceRecipient\":{\"title\":\"Laskun vastaanottaja\",\"fullName\":{\"title\":\"Vastaanottajan nimi\",\"descr\":\"Vastaanottajan koko nimi, jolle lasku on osoitettu.\"},\"iban\":{\"title\":\"IBAN-tilinumero\",\"descr\":\"Vastaanottajan kansainvälinen tilinumero, jota käytetään maksuihin.\"},\"officialId\":{\"title\":\"Virallinen tunniste\",\"descr\":\"Virallinen henkilötunnus tai yritystunnus vastaanottajalle.\"},\"sourceId\":{\"title\":\"Lähdetunniste\",\"descr\":\"Tunniste, joka liittyy laskun alkuperäiseen lähteeseen.\"},\"contact\":{\"title\":\"Yhteystiedot\",\"descr\":\"Vastaanottajan yhteystiedot, kuten puhelinnumero tai sähköposti.\"},\"beneficiary\":{\"title\":\"Hyötyjätili\",\"descr\":\"Tili, jolle laskun maksu suoritetaan.\"}},\"InvoicePayer\":{\"title\":\"Laskun maksaja\",\"avatar\":{\"title\":\"Maksajan avatar\",\"descr\":\"Visuaalinen esitys maksajasta, kuten logo tai kuva.\"},\"contact\":{\"title\":\"Yhteystiedot\",\"descr\":\"Maksajan yhteystiedot, kuten puhelinnumero tai sähköposti.\"},\"officialId\":{\"title\":\"Virallinen tunniste\",\"descr\":\"Virallinen henkilötunnus tai yritystunnus maksajalle.\"},\"partnerKey\":{\"title\":\"Yhteistyökumppanin avain\",\"descr\":\"Tunniste, joka yhdistää maksajan yhteistyökumppaniin.\"}},\"InvoiceRow\":{\"title\":\"Laskurivi\",\"articleId\":{\"title\":\"Artikkelin tunniste\",\"descr\":\"Yksilöllinen tunniste tuotteelle tai palvelulle laskussa.\"},\"articleName\":{\"title\":\"Artikkelin nimi\",\"descr\":\"Tuotteen tai palvelun nimi, joka näkyy laskussa.\"},\"message\":{\"title\":\"Viesti\",\"descr\":\"Lisätiedot tai huomautukset, jotka liittyvät laskuriviin.\"},\"count\":{\"title\":\"Määrä\",\"descr\":\"Laskutettavien tuotteiden tai palveluiden lukumäärä.\"},\"price\":{\"title\":\"Hinta\",\"descr\":\"Tuotteen tai palvelun yksikköhinta verollisena.\"},\"priceExVat\":{\"title\":\"Hinta ilman arvonlisäveroa\",\"descr\":\"Tuotteen tai palvelun yksikköhinta ilman arvonlisäveroa.\"},\"vatPercent\":{\"title\":\"Arvonlisäveroprosentti\",\"descr\":\"Sovellettava arvonlisäveroprosentti tuotteelle tai palvelulle.\"},\"totalExVat\":{\"title\":\"Kokonaissumma ilman arvonlisäveroa\",\"descr\":\"Laskurivin kokonaissumma ilman arvonlisäveroa.\"},\"total\":{\"title\":\"Kokonaissumma\",\"descr\":\"Laskurivin kokonaissumma verollisena.\"},\"accountingAccountNumber\":{\"title\":\"Kirjanpitotilin numero\",\"descr\":\"Kirjanpidossa käytettävä tilinumero laskuriville.\"},\"accountingCode\":{\"title\":\"Kirjanpitokoodi\",\"descr\":\"Koodi, joka määrittää kirjanpidollisen käsittelyn.\"},\"businessObject\":{\"title\":\"Liiketoimintaobjekti\",\"descr\":\"Liiketoimintaan liittyvä objekti, johon laskurivi liittyy.\"}},\"InvoiceSettingsCheck\":{\"title\":\"Laskuasetusten tarkistus\",\"allowed\":{\"title\":\"Sallittu\",\"descr\":\"Tarkistuksen sallittu tila.\"},\"officialId\":{\"title\":\"Virallinen tunniste\",\"descr\":\"Virallinen tunniste, joka liittyy laskuasetuksiin.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste tarkistukselle.\"},\"validation\":{\"title\":\"Validointi\",\"descr\":\"Tarkistuksen validointitiedot.\"},\"result\":{\"title\":\"Tarkistuksen tulos\",\"descr\":\"Laskuasetusten tarkistuksen tulos.\"}},\"ApiCheckResultOfInvoiceSettings\":{\"title\":\"Laskuasetusten tarkistustulos\",\"status\":{\"title\":\"Tila\",\"descr\":\"Tarkistuksen nykyinen tila.\"},\"item\":{\"title\":\"Asetuskohde\",\"descr\":\"Tarkistettavat laskuasetukset.\"}},\"InvoiceSettings\":{\"title\":\"Laskuasetukset\",\"eInvoiceReceiver\":{\"title\":\"Verkkolaskun vastaanottaja\",\"descr\":\"Tahot, jotka vastaanottavat verkkolaskun.\"},\"eInvoiceIntermediator\":{\"title\":\"Verkkolaskun välittäjä\",\"descr\":\"Palveluntarjoaja, joka välittää verkkolaskun.\"},\"sepaBankPartyId\":{\"title\":\"SEPA-pankkiosapuolen tunniste\",\"descr\":\"SEPA-maksuissa käytettävä pankkiosapuolen tunniste.\"},\"ibanNumber\":{\"title\":\"IBAN-numero\",\"descr\":\"Kansainvälinen tilinumero, jota käytetään maksuliikenteessä.\"}},\"CalculationImport\":{\"title\":\"Laskentatietojen tuonti\",\"allowed\":{\"title\":\"Sallittu\",\"descr\":\"Tiedon tuonnin sallittu tila.\"},\"officialId\":{\"title\":\"Virallinen tunniste\",\"descr\":\"Virallinen tunniste, joka liittyy laskentatietojen tuontiin.\"},\"parameters\":{\"title\":\"Parametrit\",\"descr\":\"Tuontiin liittyvät parametrit ja niiden arvot.\"}},\"PayrollCalculationsSaveOptions\":{\"title\":\"Palkkalaskennan Tallennusasetukset\",\"isMerge\":{\"title\":\"Yhdistäminen\",\"descr\":\"Määrittää, yhdistetäänkö tiedot olemassa oleviin tietoihin.\"},\"rowMergeOption\":{\"title\":\"Rivien Yhdistämisvaihtoehto\",\"descr\":\"Valitsee tavan, jolla rivit yhdistetään tallennuksen yhteydessä.\"},\"sourceId\":{\"title\":\"Lähdetunniste\",\"descr\":\"Tunniste, joka viittaa tietojen alkuperäiseen lähteeseen.\"},\"applyEmploymentDefaultRows\":{\"title\":\"Käytä Työsuhteen Oletusrivejä\",\"descr\":\"Päättää, käytetäänkö työsuhteen oletusrivejä laskennassa.\"},\"applyWorktime\":{\"title\":\"Käytä Työaikaa\",\"descr\":\"Määrittää, otetaanko työaika huomioon laskennassa.\"}},\"VarmaPensionOrder\":{\"title\":\"Varma Eläketilaus\",\"orderer\":{\"title\":\"Tilaaja\",\"descr\":\"Osapuoli, joka tekee eläketilauksen.\"},\"action\":{\"title\":\"Toimenpide\",\"descr\":\"Määrittää tilauksen käsittelytoimenpiteen.\"},\"validation\":{\"title\":\"Validointi\",\"descr\":\"Tarkistaa tilauksen oikeellisuuden ennen käsittelyä.\"},\"yel\":{\"title\":\"YEL Vakuutus\",\"descr\":\"Yrittäjän eläkevakuutukseen liittyvät tiedot.\"},\"tyel\":{\"title\":\"TyEL Vakuutus\",\"descr\":\"Työntekijän eläkevakuutukseen liittyvät tiedot.\"}},\"InvoiceParty\":{\"title\":\"Laskutusosapuoli\",\"companyId\":{\"title\":\"Yritystunnus\",\"descr\":\"Yrityksen yksilöllinen tunniste.\"},\"companyName\":{\"title\":\"Yrityksen Nimi\",\"descr\":\"Laskutusosapuolen virallinen nimi.\"},\"contact\":{\"title\":\"Yhteystiedot\",\"descr\":\"Henkilö, johon voidaan ottaa yhteyttä laskutukseen liittyen.\"},\"contactPersonName\":{\"title\":\"Yhteyshenkilön Nimi\",\"descr\":\"Henkilön nimi, joka vastaa laskutuksesta.\"}},\"VarmaPensionOrderYel\":{\"title\":\"Varma YEL Tilaus\",\"personalId\":{\"title\":\"Henkilötunnus\",\"descr\":\"Yrittäjän yksilöllinen henkilötunnus.\"},\"payer\":{\"title\":\"Maksaja\",\"descr\":\"Osapuoli, joka vastaa vakuutusmaksujen maksamisesta.\"},\"isMove\":{\"title\":\"Siirto\",\"descr\":\"Indikoi, onko kyseessä vakuutuksen siirto toisesta yhtiöstä.\"},\"yearlyIncome\":{\"title\":\"Vuositulo\",\"descr\":\"Yrittäjän arvioitu vuositulo, joka vaikuttaa vakuutusmaksuihin.\"},\"startDate\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, josta alkaen vakuutus on voimassa.\"},\"moveMoment\":{\"title\":\"Siirtohetki\",\"descr\":\"Ajankohta, jolloin vakuutuksen siirto tapahtuu.\"},\"isYearlyIncomeChange\":{\"title\":\"Vuositulon Muutos\",\"descr\":\"Indikoi, onko vuositulossa tapahtunut muutoksia.\"}},\"VarmaPensionOrderTyel\":{\"title\":\"Varma TyEL Tilaus\",\"personalId\":{\"title\":\"Henkilötunnus\",\"descr\":\"Työntekijän yksilöllinen henkilötunnus.\"},\"isMove\":{\"title\":\"Siirto\",\"descr\":\"Indikoi, onko kyseessä vakuutuksen siirto toisesta yhtiöstä.\"},\"yearlyIncome\":{\"title\":\"Vuositulo\",\"descr\":\"Työntekijän arvioitu vuositulo, joka vaikuttaa vakuutusmaksuihin.\"},\"startYear\":{\"title\":\"Aloitusvuosi\",\"descr\":\"Vuosi, josta alkaen vakuutus on voimassa.\"},\"startMonth\":{\"title\":\"Aloituskuukausi\",\"descr\":\"Kuukausi, josta alkaen vakuutus on voimassa.\"},\"moveMoment\":{\"title\":\"Siirtohetki\",\"descr\":\"Ajankohta, jolloin vakuutuksen siirto tapahtuu.\"}},\"LocalTapiolaInsuranceOrder\":{\"title\":\"LähiTapiola Vakuutustilaus\",\"status\":{\"title\":\"Tila\",\"descr\":\"Vakuutustilauksen nykyinen tila\"},\"company\":{\"title\":\"Yritystiedot\",\"descr\":\"Tilausta tekevän yrityksen tiedot\"},\"items\":{\"title\":\"Tilauselementit\",\"descr\":\"Luettelo vakuutustilauksen sisältämistä tuotteista\"},\"validation\":{\"title\":\"Validointi\",\"descr\":\"Tilaustietojen tarkistuksen tulokset\"},\"id\":{\"title\":\"Tilaustunnus\",\"descr\":\"Yksilöllinen tunnus tilaukselle\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin tilaus luotiin\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin tilausta viimeksi päivitettiin\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Tilausta hallinnoivan henkilön nimi\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Tieto siitä, onko tilaus vain luku -tilassa\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Tilausta käsittelevä yhteistyökumppani\"}},\"LocalTapiolaInsuranceOrderCompanyInfo\":{\"title\":\"Yrityksen Tilaustiedot\",\"details\":{\"title\":\"Yrityksen Yksityiskohdat\",\"descr\":\"Yrityksen tilitiedot\"},\"address\":{\"title\":\"Yrityksen Osoite\",\"descr\":\"Yrityksen virallinen osoite\"},\"hasPrincipalBusinessAddress\":{\"title\":\"Päätoimipaikan Osoite\",\"descr\":\"Tieto siitä, onko yrityksellä päätoimipaikan osoite\"},\"principalBusinessAddress\":{\"title\":\"Päätoimipaikan Osoite\",\"descr\":\"Yrityksen päätoimipaikan virallinen osoite\"},\"contactPerson\":{\"title\":\"Yhteyshenkilö\",\"descr\":\"Yrityksen yhteyshenkilön tiedot\"},\"complexOwnerStructure\":{\"title\":\"Monimutkainen Omistusrakenne\",\"descr\":\"Tieto siitä, onko yrityksellä monimutkainen omistusrakenne\"},\"owners\":{\"title\":\"Omistajat\",\"descr\":\"Luettelo yrityksen omistajista\"},\"beneficiaries\":{\"title\":\"Edunsaajat\",\"descr\":\"Luettelo yrityksen edunsaajista\"}},\"LocalTapiolInsuranceOrderInfo\":{\"title\":\"Vakuutustilauksen Tiedot\",\"orderType\":{\"title\":\"Tilauksen Tyyppi\",\"descr\":\"Vakuutustilauksen tyyppi\"},\"startDate\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin vakuutus astuu voimaan\"},\"billingInterval\":{\"title\":\"Laskutusväli\",\"descr\":\"Laskutuksen aikaväli kuukausina\"},\"oldInsuranceCompany\":{\"title\":\"Edellinen Vakuutusyhtiö\",\"descr\":\"Aiemmin käytössä ollut vakuutusyhtiö\"},\"industry\":{\"title\":\"Toimiala\",\"descr\":\"Yrityksen toimiala\"},\"occupations\":{\"title\":\"Ammatit\",\"descr\":\"Luettelo vakuutettujen henkilöiden ammateista\"},\"insuredName\":{\"title\":\"Vakuutetun Nimi\",\"descr\":\"Vakuutetun henkilön nimi\"},\"insuredOfficialId\":{\"title\":\"Vakuutetun Virallinen Tunnus\",\"descr\":\"Vakuutetun henkilön virallinen tunnus\"}},\"LocalTapiolaInsuranceOrderCompanyContactPerson\":{\"title\":\"Yrityksen Yhteyshenkilö\",\"authorizationType\":{\"title\":\"Valtuutuksen Tyyppi\",\"descr\":\"Yhteyshenkilön valtuutuksen tyyppi\"},\"avatar\":{\"title\":\"Profiilikuva\",\"descr\":\"Yhteyshenkilön profiilikuva\"},\"officialId\":{\"title\":\"Virallinen Tunnus\",\"descr\":\"Yhteyshenkilön virallinen tunnus\"},\"email\":{\"title\":\"Sähköposti\",\"descr\":\"Yhteyshenkilön sähköpostiosoite\"},\"telephone\":{\"title\":\"Puhelinnumero\",\"descr\":\"Yhteyshenkilön puhelinnumero\"},\"ibanNumber\":{\"title\":\"IBAN-numero\",\"descr\":\"Yhteyshenkilön IBAN-pankkitilinumero\"}},\"LocalTapiolaInsuranceOrderOccupation\":{\"title\":\"Vakuutustilauksen Ammatti\",\"occupationCode\":{\"title\":\"Ammattikoodi\",\"descr\":\"Ammatin koodi\"},\"occupationName\":{\"title\":\"Ammatin Nimi\",\"descr\":\"Ammatin nimi\"},\"estimatedIncome\":{\"title\":\"Arvioitu Tulotaso\",\"descr\":\"Arvioitu vuosittainen tulotaso\"}},\"PageResultOfInvoiceListItem\":{\"title\":\"Laskuluettelon Sivutulos\",\"items\":{\"title\":\"Laskuluettelon Kohteet\",\"descr\":\"Luettelo laskuista, jotka voivat olla tyhjä tai sisältää laskukohteita.\"},\"nextPageLink\":{\"title\":\"Seuraavan Sivun Linkki\",\"descr\":\"Linkki seuraavalle sivulle, jos laskuluettelo jatkuu.\"},\"count\":{\"title\":\"Kohteiden Lukumäärä\",\"descr\":\"Kokonaismäärä laskukohteita luettelossa.\"}},\"InvoiceListItem\":{\"title\":\"Laskuluettelon Kohde\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin lasku luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin laskua viimeksi päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajan Tunniste\",\"descr\":\"Laskun omistajan yksilöllinen tunniste.\"},\"ownerInfo\":{\"title\":\"Omistajan Tiedot\",\"descr\":\"Tietoa laskun omistajasta, kuten nimi ja yhteystiedot.\"},\"status\":{\"title\":\"Laskun Tila\",\"descr\":\"Nykyinen tila laskulle, kuten 'maksettu' tai 'odottaa'.\"},\"backOfficeStatus\":{\"title\":\"Taustatoimiston Tila\",\"descr\":\"Laskun tila taustatoimiston näkökulmasta.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Ajankohta, jolloin laskutettava palvelu tai tuote alkaa.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Ajankohta, jolloin laskutettava palvelu tai tuote päättyy.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Laskun bruttopalkkasumma.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Laskun maksusumma.\"},\"fee\":{\"title\":\"Maksu\",\"descr\":\"Laskuun liittyvä maksu tai palkkio.\"},\"otherId\":{\"title\":\"Muu Tunniste\",\"descr\":\"Toinen tunniste, joka liittyy laskuun.\"},\"otherPartyInfo\":{\"title\":\"Toisen Osapuolen Tiedot\",\"descr\":\"Tietoa toisesta osapuolesta, joka liittyy laskuun.\"},\"shortText\":{\"title\":\"Lyhyt Kuvaus\",\"descr\":\"Lyhyt kuvaus laskusta tai siihen liittyvistä palveluista.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Luettelo liiketoimintaobjekteista, jotka liittyvät laskuun.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"data\":{\"title\":\"Laskun Tiedot\",\"descr\":\"Yksityiskohtaiset tiedot laskusta.\"},\"versionNumber\":{\"title\":\"Versionumero\",\"descr\":\"Laskun nykyinen versionumero.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Laskun yksilöllinen resurssitunniste.\"},\"flags\":{\"title\":\"Merkit\",\"descr\":\"Erityiset merkit tai liput, jotka liittyvät laskuun.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Viestit tai huomautukset, jotka liittyvät laskuun.\"},\"entityType\":{\"title\":\"Entiteettityyppi\",\"descr\":\"Laskuun liittyvän entiteetin tyyppi.\"},\"logicalDate\":{\"title\":\"Looginen Päivämäärä\",\"descr\":\"Looginen päivämäärä, joka liittyy laskun käsittelyyn.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Viitenumero, joka liittyy laskuun.\"},\"externalId\":{\"title\":\"Ulkoinen Tunniste\",\"descr\":\"Laskun ulkoinen tunniste, joka voi olla peräisin toisesta järjestelmästä.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Laskun yksilöllinen tunniste.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Henkilö tai organisaatio, joka omistaa laskun.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Indikaattori siitä, onko lasku vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Yhteistyökumppani, joka liittyy laskuun.\"}},\"InvoiceData\":{\"title\":\"Laskun Tiedot\",\"partnerMessageAssignedTo\":{\"title\":\"Yhteistyökumppanin Viesti\",\"descr\":\"Viesti, joka on osoitettu yhteistyökumppanille.\"},\"channel\":{\"title\":\"Maksukanava\",\"descr\":\"Kanava, jonka kautta maksu suoritetaan.\"},\"date\":{\"title\":\"Päivämäärä\",\"descr\":\"Laskun päivämäärä.\"},\"dueDate\":{\"title\":\"Eräpäivä\",\"descr\":\"Päivämäärä, johon mennessä lasku tulee maksaa.\"},\"periodStart\":{\"title\":\"Jakson Alku\",\"descr\":\"Ajankohta, jolloin laskutettava jakso alkaa.\"},\"periodEnd\":{\"title\":\"Jakson Loppu\",\"descr\":\"Ajankohta, jolloin laskutettava jakso päättyy.\"},\"totalPaid\":{\"title\":\"Maksettu Yhteensä\",\"descr\":\"Kokonaismäärä, joka on maksettu laskusta.\"},\"paidBusinessObjectsCount\":{\"title\":\"Maksettujen Liiketoimintaobjektien Lukumäärä\",\"descr\":\"Lukumäärä liiketoimintaobjekteista, jotka on maksettu.\"},\"statusAt\":{\"title\":\"Tilan Päivämäärä\",\"descr\":\"Päivämäärä, jolloin laskun tila on päivitetty.\"},\"payrollId\":{\"title\":\"Palkkalistan Tunniste\",\"descr\":\"Laskuun liittyvän palkkalistan tunniste.\"},\"payrollTitle\":{\"title\":\"Palkkalistan Otsikko\",\"descr\":\"Laskuun liittyvän palkkalistan otsikko.\"}},\"CalculationCollection\":{\"title\":\"Laskentakokoelma\",\"ids\":{\"title\":\"Tunnisteet\",\"descr\":\"Luettelo laskentakokoelman tunnisteista.\"},\"payrollIds\":{\"title\":\"Palkkalistan Tunnisteet\",\"descr\":\"Luettelo palkkalistoihin liittyvistä tunnisteista.\"},\"calcs\":{\"title\":\"Laskelmat\",\"descr\":\"Luettelo laskelmista, jotka sisältyvät kokoelmaan.\"},\"payrolls\":{\"title\":\"Palkkalistat\",\"descr\":\"Luettelo palkkalistoista, jotka liittyvät laskentakokoelmaan.\"}},\"PayrollDetails\":{\"title\":\"Palkkalistan Tiedot\",\"input\":{\"title\":\"Syöte\",\"descr\":\"Palkkalistan syötetiedot.\"},\"info\":{\"title\":\"Tiedot\",\"descr\":\"Yksityiskohtaiset tiedot palkkalistasta.\"},\"calcs\":{\"title\":\"Laskelmat\",\"descr\":\"Laskelmat, jotka liittyvät palkkalistaan.\"},\"validations\":{\"title\":\"Varmennukset\",\"descr\":\"Luettelo varmennuksista, jotka liittyvät palkkalistaan.\"},\"usecase\":{\"title\":\"Käyttötapaus\",\"descr\":\"Käyttötapaustiedot, jotka liittyvät palkkalistaan.\"},\"workflowData\":{\"title\":\"Työnkulun Tiedot\",\"descr\":\"Tiedot työnkulusta, joka liittyy palkkalistaan.\"},\"automation\":{\"title\":\"Automaatio\",\"descr\":\"Automaatioasetukset, jotka liittyvät palkkalistaan.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Palkkalistan yksilöllinen tunniste.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin palkkalista luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin palkkalistaa viimeksi päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Henkilö tai organisaatio, joka omistaa palkkalistan.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Indikaattori siitä, onko palkkalista vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Yhteistyökumppani, joka liittyy palkkalistaan.\"}},\"PayrollInput\":{\"title\":{\"title\":\"Otsikko\",\"descr\":\"Palkkatietojen syötön otsikko, joka kuvaa sen tarkoitusta.\"},\"period\":{\"title\":\"Ajanjakso\",\"descr\":\"Ajanjakso, jolle palkkatiedot koskevat.\"},\"salaryDate\":{\"title\":\"Palkanmaksupäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan työntekijöille.\"},\"salaryDateKind\":{\"title\":\"Palkanmaksupäivän Tyyppi\",\"descr\":\"Määrittää palkanmaksupäivän tyypin, kuten kiinteä tai vaihteleva.\"},\"paymentChannel\":{\"title\":\"Maksukanava\",\"descr\":\"Kanava, jota käytetään palkan maksamiseen, kuten pankkisiirto.\"},\"wageBasis\":{\"title\":\"Palkkaperuste\",\"descr\":\"Peruste, jonka mukaan palkka lasketaan, esimerkiksi tuntipalkka tai kuukausipalkka.\"},\"noUpdateFromEmployment\":{\"title\":\"Ei Päivitystä Työsuhteesta\",\"descr\":\"Ilmaisee, päivitetäänkö tiedot automaattisesti työsuhteesta.\"},\"template\":{\"title\":\"Malli\",\"descr\":\"Käytettävä palkkalaskelman malli.\"},\"calculations\":{\"title\":\"Laskelmat\",\"descr\":\"Luettelo laskelmista, jotka liittyvät palkkatietoihin.\"},\"sourceId\":{\"title\":\"Lähdetunniste\",\"descr\":\"Tunniste, joka viittaa palkkatietojen alkuperäiseen lähteeseen.\"}},\"Payroll03Info\":{\"title\":\"Palkkatiedot 03\",\"date\":{\"title\":\"Päivämäärä\",\"descr\":\"Päivämäärä, jolloin palkkatiedot on luotu tai päivitetty.\"},\"calcCount\":{\"title\":\"Laskelmien Lukumäärä\",\"descr\":\"Laskelmien kokonaismäärä, jotka on suoritettu palkkatietoja varten.\"},\"totalGrossSalary\":{\"title\":\"Bruttopalkan Kokonaismäärä\",\"descr\":\"Kokonaisbruttopalkka, joka maksetaan työntekijöille.\"},\"totalPayment\":{\"title\":\"Kokonaismaksu\",\"descr\":\"Kokonaismäärä, joka maksetaan työntekijöille, mukaan lukien kaikki korvaukset.\"},\"fees\":{\"title\":\"Maksut\",\"descr\":\"Kaikki palkkatietoihin liittyvät maksut, kuten verot ja muut vähennykset.\"},\"isReadyForPayment\":{\"title\":\"Valmis Maksuun\",\"descr\":\"Ilmaisee, ovatko palkkatiedot valmiita maksettavaksi.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Nykyinen tila palkkatiedoista, kuten luonnos tai valmis.\"},\"dueDate\":{\"title\":\"Eräpäivä\",\"descr\":\"Päivämäärä, jolloin palkka on maksettava.\"},\"paymentDate\":{\"title\":\"Maksupäivä\",\"descr\":\"Päivämäärä, jolloin maksu on suoritettu.\"},\"salaryDate\":{\"title\":\"Palkanmaksupäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan työntekijöille.\"},\"paymentId\":{\"title\":\"Maksutunniste\",\"descr\":\"Tunniste, joka liittyy tiettyyn maksutapahtumaan.\"},\"originalPaymentId\":{\"title\":\"Alkuperäinen Maksutunniste\",\"descr\":\"Alkuperäisen maksutapahtuman tunniste, jos maksu on korjattu tai päivitetty.\"},\"applicationId\":{\"title\":\"Sovellustunniste\",\"descr\":\"Tunniste, joka viittaa palkkatietojen hallintaan käytettävään sovellukseen.\"},\"messageThreadId\":{\"title\":\"Viestiketjun Tunniste\",\"descr\":\"Tunniste, joka liittyy palkkatietojen viestintään.\"}},\"ApiListItemValidation\":{\"title\":\"Rajapintakohteen Vahvistus\",\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste, joka viittaa tiettyyn rajapintakohteeseen.\"},\"index\":{\"title\":\"Indeksi\",\"descr\":\"Kohteen järjestysnumero luettelossa.\"},\"isValid\":{\"title\":\"Onko Voimassa\",\"descr\":\"Ilmaisee, onko rajapintakohde voimassa ja hyväksytty.\"},\"hasAllRequiredFields\":{\"title\":\"Sisältää Kaikki Vaaditut Kentät\",\"descr\":\"Ilmaisee, onko kohteessa kaikki vaaditut tiedot.\"},\"errors\":{\"title\":\"Virheet\",\"descr\":\"Luettelo virheistä, jotka liittyvät rajapintakohteeseen.\"}},\"ApiAutomation\":{\"title\":\"Rajapinta-automaatiot\",\"isRecurring\":{\"title\":\"Onko Toistuva\",\"descr\":\"Ilmaisee, toistuuko automaatio säännöllisesti.\"},\"occurenceOf\":{\"title\":\"Esiintymä\",\"descr\":\"Viittaa tiettyyn automaation esiintymään.\"},\"recurrenceRules\":{\"title\":\"Toistuvuussäännöt\",\"descr\":\"Säännöt, jotka määrittävät automaation toistuvuuden.\"},\"actionRules\":{\"title\":\"Toimintasäännöt\",\"descr\":\"Säännöt, jotka ohjaavat automaation toimintaa.\"}},\"InvoicePreview\":{\"title\":\"Laskun Esikatselu\",\"invoice\":{\"title\":\"Lasku\",\"descr\":\"Lasku, joka esikatsellaan ennen lähettämistä.\"},\"exists\":{\"title\":\"Onko Olemassa\",\"descr\":\"Ilmaisee, onko lasku olemassa järjestelmässä.\"}},\"MessageThread\":{\"title\":{\"title\":\"Otsikko\",\"descr\":\"Viestiketjun kuvaava otsikko, joka voi olla tyhjä.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Viestiketjun nykyinen tila, kuten avoin tai suljettu.\"},\"ownerInfo\":{\"title\":\"Omistajan tiedot\",\"descr\":\"Tiedot viestiketjun omistajasta, kuten profiilikuva.\"},\"otherParty\":{\"title\":\"Vastapuoli\",\"descr\":\"Toisen osapuolen nimi viestiketjussa.\"},\"otherPartyInfo\":{\"title\":\"Vastapuolen tiedot\",\"descr\":\"Tiedot viestiketjun toisesta osapuolesta, kuten profiilikuva.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Viestiketjuun kuuluvat yksittäiset viestit.\"},\"ownerWorkflow\":{\"title\":\"Omistajan työnkulku\",\"descr\":\"Omistajan viestiketjuun liittyvä työnkulku.\"},\"otherPartyWorkflow\":{\"title\":\"Vastapuolen työnkulku\",\"descr\":\"Vastapuolen viestiketjuun liittyvä työnkulku.\"},\"workflowData\":{\"title\":\"Työnkulun tiedot\",\"descr\":\"Viestiketjun työnkulkuun liittyvät tiedot.\"},\"usecase\":{\"title\":\"Käyttötapaus\",\"descr\":\"Viestiketjun käyttötapaukseen liittyvät tiedot.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Viestiketjun yksilöllinen tunniste.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin viestiketju luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin viestiketjua päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Henkilö tai taho, joka omistaa viestiketjun.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko viestiketju vain luku -tilassa.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Viestiketjun osapuolena oleva kumppani.\"}},\"Message\":{\"title\":\"Viesti\",\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksittäisen viestin yksilöllinen tunniste.\"},\"time\":{\"title\":\"Aika\",\"descr\":\"Aika, jolloin viesti lähetettiin.\"},\"type\":{\"title\":\"Tyyppi\",\"descr\":\"Viestin tyyppi, kuten teksti tai kuva.\"},\"content\":{\"title\":\"Sisältö\",\"descr\":\"Viestin varsinainen sisältö.\"},\"contentId\":{\"title\":\"Sisällön tunniste\",\"descr\":\"Viestiin liittyvän sisällön yksilöllinen tunniste.\"},\"contentData\":{\"title\":\"Sisältötiedot\",\"descr\":\"Viestiin liittyvät lisätiedot.\"}},\"MessageThreadWorkflow\":{\"title\":\"Viestiketjun työnkulku\",\"unreadCount\":{\"title\":\"Lukemattomien määrä\",\"descr\":\"Lukemattomien viestien määrä viestiketjussa.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin työnkulku päivitettiin.\"},\"lastMessageText\":{\"title\":\"Viimeisin viestiteksti\",\"descr\":\"Viimeisimmän viestin tekstisisältö.\"}},\"PageResultOfMessageListItem\":{\"title\":\"Viestilistan sivutulos\",\"items\":{\"title\":\"Kohteet\",\"descr\":\"Viestilistauksen yksittäiset kohteet.\"},\"nextPageLink\":{\"title\":\"Seuraavan sivun linkki\",\"descr\":\"Linkki seuraavalle viestilistasivulle.\"},\"count\":{\"title\":\"Määrä\",\"descr\":\"Kohteiden kokonaismäärä listassa.\"}},\"MessageListItem\":{\"title\":\"Viestilistan kohde\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin kohdetta päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajan tunniste\",\"descr\":\"Kohteen omistajan yksilöllinen tunniste.\"},\"ownerInfo\":{\"title\":\"Omistajan tiedot\",\"descr\":\"Tiedot kohteen omistajasta.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Kohteen nykyinen tila.\"},\"backOfficeStatus\":{\"title\":\"Back Office -tila\",\"descr\":\"Kohteen tila Back Office -järjestelmässä.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde alkaa.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde päättyy.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Kohteeseen liittyvä bruttopalkka.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Kohteeseen liittyvä maksu.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Kohteeseen liittyvä palkkio.\"},\"otherId\":{\"title\":\"Toisen osapuolen tunniste\",\"descr\":\"Toisen osapuolen yksilöllinen tunniste kohteessa.\"},\"otherPartyInfo\":{\"title\":\"Toisen osapuolen tiedot\",\"descr\":\"Tiedot kohteen toisesta osapuolesta.\"},\"shortText\":{\"title\":\"Lyhyt teksti\",\"descr\":\"Kohteen kuvaava lyhyt teksti.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Liiketoimintaan liittyvät objektit kohteessa.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"data\":{\"title\":\"Tiedot\",\"descr\":\"Kohteeseen liittyvät lisätiedot.\"},\"versionNumber\":{\"title\":\"Versio\",\"descr\":\"Kohteen versionumero.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Kohteen yksilöllinen URI.\"},\"flags\":{\"title\":\"Liput\",\"descr\":\"Kohteeseen liittyvät merkinnät tai liput.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Kohteeseen liittyvät viestit.\"},\"entityType\":{\"title\":\"Entiteettityyppi\",\"descr\":\"Kohteen entiteettityyppi.\"},\"logicalDate\":{\"title\":\"Looginen päivämäärä\",\"descr\":\"Kohteen looginen päivämäärä.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Kohteen viitetieto.\"},\"externalId\":{\"title\":\"Ulkoinen tunniste\",\"descr\":\"Kohteen ulkoinen tunniste.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Kohteen yksilöllinen tunniste.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Henkilö tai taho, joka omistaa kohteen.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko kohde vain luku -tilassa.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Kohteen osapuolena oleva kumppani.\"}},\"MessageData\":{\"title\":{\"title\":\"Otsikko\",\"descr\":\"Viestin otsikko, joka voi olla tyhjä.\"},\"ownerLastMessage\":{\"title\":\"Omistajan viimeinen viesti\",\"descr\":\"Viimeisin viesti, jonka omistaja on lähettänyt.\"},\"otherPartyLastMessage\":{\"title\":\"Toisen osapuolen viimeinen viesti\",\"descr\":\"Viimeisin viesti, jonka toinen osapuoli on lähettänyt.\"},\"ownerUnreadCount\":{\"title\":\"Omistajan lukemattomat viestit\",\"descr\":\"Lukumäärä viesteistä, joita omistaja ei ole vielä lukenut.\"},\"otherPartyUnreadCount\":{\"title\":\"Toisen osapuolen lukemattomat viestit\",\"descr\":\"Lukumäärä viesteistä, joita toinen osapuoli ei ole vielä lukenut.\"},\"partnerMessageAssignedTo\":{\"title\":\"Viestin vastuutaho\",\"descr\":\"Henkilö tai osapuoli, jolle viesti on osoitettu.\"},\"usecaseUri\":{\"title\":\"Käyttötapaus URI\",\"descr\":\"URI, joka liittyy viestin käyttötapaukseen.\"},\"isSalaxyEmail\":{\"title\":\"Salaxy-sähköposti\",\"descr\":\"Osoittaako viesti Salaxy-sähköpostiin.\"},\"periodStart\":{\"title\":\"Jakson aloitus\",\"descr\":\"Ajankohta, jolloin viestintäjakso alkaa.\"},\"periodEnd\":{\"title\":\"Jakson päättyminen\",\"descr\":\"Ajankohta, jolloin viestintäjakso päättyy.\"},\"calcCount\":{\"title\":\"Laskentamäärä\",\"descr\":\"Laskettujen viestien määrä.\"},\"ownerUpdatedAt\":{\"title\":\"Omistajan päivitysaika\",\"descr\":\"Ajankohta, jolloin omistaja päivitti viestin viimeksi.\"},\"otherPartyUpdatedAt\":{\"title\":\"Toisen osapuolen päivitysaika\",\"descr\":\"Ajankohta, jolloin toinen osapuoli päivitti viestin viimeksi.\"}},\"Measurement\":{\"title\":\"Mittaus\",\"tag\":{\"title\":\"Tunniste\",\"descr\":\"Mittauksen tunniste, joka voi olla tyhjä.\"},\"timestamp\":{\"title\":\"Aikaleima\",\"descr\":\"Ajankohta, jolloin mittaus tehtiin.\"},\"value\":{\"title\":\"Arvo\",\"descr\":\"Mittauksen tulos tai arvo.\"}},\"Onboarding\":{\"title\":\"Käyttöönotto\",\"accountType\":{\"title\":\"Tilin tyyppi\",\"descr\":\"Käyttäjän rooli verkkosivustolla.\"},\"authorizePartner\":{\"title\":\"Valtuutettu kumppani\",\"descr\":\"Kumppani, joka on valtuutettu käyttöönotossa.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Käyttöönoton nykyinen tila.\"},\"company\":{\"title\":\"Yritys\",\"descr\":\"Yrityksen tiedot, jotka liittyvät käyttöönottoon.\"},\"person\":{\"title\":\"Henkilö\",\"descr\":\"Henkilön tiedot, jotka liittyvät käyttöönottoon.\"},\"products\":{\"title\":\"Tuotteet\",\"descr\":\"Tilin tuotteet, jotka liittyvät käyttöönottoon.\"},\"signature\":{\"title\":\"Allekirjoitus\",\"descr\":\"Käyttöönottoon liittyvä allekirjoitustieto.\"},\"validation\":{\"title\":\"Vahvistus\",\"descr\":\"Tilin vahvistustiedot käyttöönotossa.\"},\"ui\":{\"title\":\"Käyttöliittymän tila\",\"descr\":\"Käyttöliittymän tila käyttöönoton aikana.\"},\"credentials\":{\"title\":\"Tunnistetiedot\",\"descr\":\"Käyttöönottoon liittyvät kirjautumistiedot.\"},\"appState\":{\"title\":\"Sovelluksen tila\",\"descr\":\"Käyttöönoton sovelluksen tila.\"}},\"CompanyInput\":{\"title\":\"Yrityksen tiedot\",\"doCreate\":{\"title\":\"Luo yritys\",\"descr\":\"Ilmaisee, luodaanko uusi yritys.\"},\"name\":{\"title\":\"Nimi\",\"descr\":\"Yrityksen nimi.\"},\"logo\":{\"title\":\"Logo\",\"descr\":\"Yrityksen logo, joka voi olla tyhjä.\"},\"dash\":{\"title\":\"Viivanumero\",\"descr\":\"Yrityksen viivanumero.\"},\"businessId\":{\"title\":\"Y-tunnus\",\"descr\":\"Yrityksen virallinen Y-tunnus.\"},\"officialName\":{\"title\":\"Virallinen nimi\",\"descr\":\"Yrityksen virallinen nimi, jos se eroaa nimestä.\"},\"resolvedId\":{\"title\":\"Ratkaistu tunnus\",\"descr\":\"Yrityksen ratkaistu tunnus, jos saatavilla.\"},\"partnerAccountId\":{\"title\":\"Kumppanitilin tunnus\",\"descr\":\"Kumppanitilin tunnus, jos saatavilla.\"},\"ownership\":{\"title\":\"Omistajuus\",\"descr\":\"Yrityksen omistajuustiedot.\"},\"doYtjUpdate\":{\"title\":\"Päivitä YTJ\",\"descr\":\"Ilmaisee, päivitetäänkö YTJ-tiedot.\"},\"ytjDetails\":{\"title\":\"YTJ-tiedot\",\"descr\":\"Yrityksen YTJ-tiedot, jos saatavilla.\"},\"ytjSearch\":{\"title\":\"YTJ-haku\",\"descr\":\"YTJ-haun tulokset, jos saatavilla.\"},\"companyType\":{\"title\":\"Yrityksen tyyppi\",\"descr\":\"Yrityksen tyyppi tai luokitus.\"},\"contact\":{\"title\":\"Yhteystiedot\",\"descr\":\"Yrityksen yhteystiedot.\"},\"roles\":{\"title\":\"Roolit\",\"descr\":\"Yrityksen roolit, jos saatavilla.\"},\"language\":{\"title\":\"Kieli\",\"descr\":\"Yrityksen ensisijainen kieli.\"}},\"PersonInput\":{\"title\":\"Henkilön tiedot\",\"doCreate\":{\"title\":\"Luo henkilö\",\"descr\":\"Ilmaisee, luodaanko uusi henkilö.\"},\"contact\":{\"title\":\"Yhteystiedot\",\"descr\":\"Henkilön yhteystiedot.\"},\"contactVerification\":{\"title\":\"Yhteystietojen vahvistus\",\"descr\":\"Henkilön yhteystietojen vahvistustiedot.\"},\"personalId\":{\"title\":\"Henkilötunnus\",\"descr\":\"Henkilön virallinen henkilötunnus.\"},\"officialName\":{\"title\":\"Virallinen nimi\",\"descr\":\"Henkilön virallinen nimi, jos se eroaa annetusta nimestä.\"},\"resolvedId\":{\"title\":\"Ratkaistu tunnus\",\"descr\":\"Henkilön ratkaistu tunnus, jos saatavilla.\"},\"firstName\":{\"title\":\"Etunimi\",\"descr\":\"Henkilön etunimi.\"},\"lastName\":{\"title\":\"Sukunimi\",\"descr\":\"Henkilön sukunimi.\"},\"picture\":{\"title\":\"Kuva\",\"descr\":\"Henkilön kuva, jos saatavilla.\"},\"bankAccountIban\":{\"title\":\"Pankkitilin IBAN\",\"descr\":\"Henkilön pankkitilin IBAN-numero.\"},\"language\":{\"title\":\"Kieli\",\"descr\":\"Henkilön ensisijainen kieli.\"}},\"AccountProducts\":{\"title\":\"Tilin Tuotteet\",\"baseService\":{\"title\":\"Peruspalvelu\",\"descr\":\"Peruspalkkaan liittyvä palvelu, joka voi olla käytössä.\"},\"tax\":{\"title\":\"Verotuote\",\"descr\":\"Verotukseen liittyvä tuote, joka voi olla käytössä.\"},\"unemployment\":{\"title\":\"Työttömyystuote\",\"descr\":\"Työttömyysturvaan liittyvä tuote, joka voi olla käytössä.\"},\"pension\":{\"title\":\"Eläketuote\",\"descr\":\"Eläketurvaan liittyvä tuote, joka voi olla käytössä.\"},\"insurance\":{\"title\":\"Vakuutustuote\",\"descr\":\"Vakuutukseen liittyvä tuote, joka voi olla käytössä.\"},\"accounting\":{\"title\":\"Kirjanpitotuote\",\"descr\":\"Kirjanpitoon liittyvä tuote, joka voi olla käytössä.\"},\"healthCareHeltti\":{\"title\":\"Terveydenhuolto Heltti\",\"descr\":\"Heltti-terveydenhuoltoon liittyvä tuote, joka voi olla käytössä.\"},\"pensionEntrepreneur\":{\"title\":\"Yrittäjän Eläketuote\",\"descr\":\"Yrittäjän eläketurvaan liittyvä tuote, joka voi olla käytössä.\"},\"pricing\":{\"title\":\"Hinnoittelutuote\",\"descr\":\"Hinnoitteluun liittyvä tuote, joka voi olla käytössä.\"}},\"SignatureData\":{\"title\":\"Allekirjoitustiedot\",\"personName\":{\"title\":\"Henkilön Nimi\",\"descr\":\"Allekirjoittavan henkilön nimi, jos saatavilla.\"},\"personalId\":{\"title\":\"Henkilötunnus\",\"descr\":\"Allekirjoittavan henkilön henkilötunnus, jos saatavilla.\"},\"email\":{\"title\":\"Sähköposti\",\"descr\":\"Allekirjoittavan henkilön sähköpostiosoite, jos saatavilla.\"},\"telephone\":{\"title\":\"Puhelinnumero\",\"descr\":\"Allekirjoittavan henkilön puhelinnumero, jos saatavilla.\"},\"isPep\":{\"title\":\"PEP-status\",\"descr\":\"Tieto siitä, onko henkilö poliittisesti vaikutusvaltainen henkilö.\"},\"vismaSignData\":{\"title\":\"Visma Sign Tiedot\",\"descr\":\"Visma Sign -palveluun liittyvät allekirjoitustiedot, jos saatavilla.\"},\"signicatData\":{\"title\":\"Signicat Tiedot\",\"descr\":\"Signicat-palveluun liittyvät allekirjoitustiedot, jos saatavilla.\"},\"isProcura\":{\"title\":\"Prokura\",\"descr\":\"Tieto siitä, onko henkilöllä prokuraoikeudet.\"}},\"AccountValidation\":{\"title\":\"Tilin Vahvistus\",\"isOfficialIdValid\":{\"title\":\"Virallinen Tunnus Voimassa\",\"descr\":\"Tieto siitä, onko virallinen tunnus voimassa.\"},\"isAuthorized\":{\"title\":\"Valtuutettu\",\"descr\":\"Tieto siitä, onko käyttäjä valtuutettu.\"},\"canStartSign\":{\"title\":\"Voi Aloittaa Allekirjoituksen\",\"descr\":\"Tieto siitä, voiko käyttäjä aloittaa allekirjoitusprosessin.\"},\"isCompleted\":{\"title\":\"Valmis\",\"descr\":\"Tieto siitä, onko prosessi valmis.\"},\"existingAccount\":{\"title\":\"Olemassaoleva Tili\",\"descr\":\"Tieto olemassaolevasta tilistä, jos sellainen on.\"},\"isValid\":{\"title\":\"Voimassa\",\"descr\":\"Tieto siitä, onko tili voimassa.\"},\"hasAllRequiredFields\":{\"title\":\"Kaikki Vaaditut Kentät\",\"descr\":\"Tieto siitä, onko kaikki vaaditut kentät täytetty.\"},\"errors\":{\"title\":\"Virheet\",\"descr\":\"Lista mahdollisista virheistä, jos niitä on.\"}},\"OnboardingUIState\":{\"title\":\"Onboarding-käyttöliittymän Tila\",\"state\":{\"title\":\"Tila\",\"descr\":\"Nykyinen tila onboarding-prosessissa, jos saatavilla.\"},\"stateFullText\":{\"title\":\"Tilan Koko Teksti\",\"descr\":\"Tilan täydellinen kuvaus, jos saatavilla.\"},\"successUrl\":{\"title\":\"Onnistumisen URL\",\"descr\":\"URL, johon käyttäjä ohjataan onnistuneen prosessin jälkeen, jos saatavilla.\"},\"cancelUrl\":{\"title\":\"Peruutuksen URL\",\"descr\":\"URL, johon käyttäjä ohjataan peruutuksen jälkeen, jos saatavilla.\"},\"oAuthResponseType\":{\"title\":\"OAuth Vastaustyyppi\",\"descr\":\"OAuth-prosessin vastaustyyppi, jos saatavilla.\"},\"invitationKey\":{\"title\":\"Kutsun Avain\",\"descr\":\"Kutsuun liittyvä avain, jos saatavilla.\"}},\"OnboardingCredentials\":{\"title\":\"Onboarding-tunnistetiedot\",\"credentialId\":{\"title\":\"Tunnisteen ID\",\"descr\":\"Tunnistetiedon yksilöivä ID, jos saatavilla.\"},\"partnerId\":{\"title\":\"Kumppanin ID\",\"descr\":\"Kumppanin yksilöivä ID, jos saatavilla.\"}},\"Ownership\":{\"title\":\"Omistajuus\",\"isRequiredTracking\":{\"title\":\"Seurannan Tarve\",\"descr\":\"Ilmaisee, onko omistajuuden seuranta tarpeen.\"},\"shareHolders\":{\"title\":\"Osakkeenomistajat\",\"descr\":\"Luettelo yrityksen osakkeenomistajista.\"}},\"YtjCompany\":{\"title\":\"YTJ Yritys\",\"dash\":{\"title\":\"Y-tunnus\",\"descr\":\"Yrityksen yksilöllinen tunniste.\"},\"businessId\":{\"title\":\"Liiketoimintatunnus\",\"descr\":\"Yrityksen virallinen liiketoimintatunnus.\"},\"name\":{\"title\":\"Yrityksen Nimi\",\"descr\":\"Yrityksen virallinen nimi.\"},\"companyType\":{\"title\":\"Yritysmuoto\",\"descr\":\"Yrityksen oikeudellinen muoto.\"},\"companyTypeText\":{\"title\":\"Yritysmuodon Kuvaus\",\"descr\":\"Yritysmuodon sanallinen kuvaus.\"},\"ytjCompanyType\":{\"title\":\"YTJ Yritysmuoto\",\"descr\":\"Yrityksen YTJ-rekisterissä oleva muoto.\"},\"ytjCompanyTypeCode\":{\"title\":\"YTJ Yritysmuotokoodi\",\"descr\":\"Yritysmuotoa kuvaava koodi YTJ-rekisterissä.\"},\"contact\":{\"title\":\"Yhteystiedot\",\"descr\":\"Yrityksen yhteyshenkilön tiedot.\"},\"contactPersonPersonalId\":{\"title\":\"Yhteyshenkilön Henkilötunnus\",\"descr\":\"Yrityksen yhteyshenkilön henkilötunnus.\"},\"contactPerson\":{\"title\":\"Yhteyshenkilö\",\"descr\":\"Yrityksen yhteyshenkilön nimi.\"},\"contactPhone\":{\"title\":\"Yhteyshenkilön Puhelin\",\"descr\":\"Yrityksen yhteyshenkilön puhelinnumero.\"},\"www\":{\"title\":\"Verkkosivut\",\"descr\":\"Yrityksen verkkosivujen osoite.\"},\"sectorOfBusinessCode\":{\"title\":\"Toimialakoodi\",\"descr\":\"Yrityksen toimialaa kuvaava koodi.\"},\"sectorOfBusinessText\":{\"title\":\"Toimialan Kuvaus\",\"descr\":\"Yrityksen toimialan sanallinen kuvaus.\"}},\"YtjSearchResult\":{\"title\":\"YTJ Hakutulos\",\"rawInput\":{\"title\":\"Hakusyöte\",\"descr\":\"Käyttäjän antama alkuperäinen hakusyöte.\"},\"isSuccess\":{\"title\":\"Onnistunut Haku\",\"descr\":\"Ilmaisee, onnistuiko haku.\"},\"isTooGeneric\":{\"title\":\"Liian Yleinen Haku\",\"descr\":\"Ilmaisee, onko haku liian yleinen tarkkojen tulosten saamiseksi.\"},\"status\":{\"title\":\"Hakutuloksen Tila\",\"descr\":\"Hakutuloksen nykyinen tila.\"},\"userMessage\":{\"title\":\"Käyttäjäviesti\",\"descr\":\"Viesti käyttäjälle hakutuloksesta.\"},\"counter\":{\"title\":\"Laskuri\",\"descr\":\"Hakutulosten lukumäärä.\"},\"result\":{\"title\":\"Hakutulokset\",\"descr\":\"Luettelo hakutuloksista.\"}},\"OnboardingContactVerifications\":{\"title\":\"Yhteystietojen Varmistukset\",\"email\":{\"title\":\"Sähköpostivarmistus\",\"descr\":\"Sähköpostiosoitteen varmistustiedot.\"},\"telephone\":{\"title\":\"Puhelinvarmistus\",\"descr\":\"Puhelinnumeron varmistustiedot.\"}},\"BaseSalaryProduct\":{\"title\":{\"title\":\"Tuotteen Nimi\",\"descr\":\"Tuotteen virallinen nimi.\"},\"isWorkerSelfHandling\":{\"title\":\"Työntekijän Itsehallinta\",\"descr\":\"Ilmaisee, voiko työntekijä hallita tuotetta itse.\"},\"eInvoiceReceiver\":{\"title\":\"Verkkolaskun Vastaanottaja\",\"descr\":\"Verkkolaskun vastaanottajan tiedot.\"},\"eInvoiceIntermediator\":{\"title\":\"Verkkolaskun Välittäjä\",\"descr\":\"Verkkolaskun välittäjän tiedot.\"},\"sepaBankPartyId\":{\"title\":\"SEPA Pankkiosapuolen Tunnus\",\"descr\":\"SEPA-pankkiosapuolen yksilöllinen tunnus.\"},\"id\":{\"title\":\"Tuotetunnus\",\"descr\":\"Tuotteen yksilöllinen tunnus.\"},\"status\":{\"title\":\"Tuotteen Tila\",\"descr\":\"Tuotteen nykyinen tila.\"},\"description\":{\"title\":\"Tuotteen Kuvaus\",\"descr\":\"Tuotteen yksityiskohtainen kuvaus.\"},\"img\":{\"title\":\"Tuotekuva\",\"descr\":\"Tuotteen kuva.\"},\"articleId\":{\"title\":\"Artikkelitunnus\",\"descr\":\"Artikkelin yksilöllinen tunnus.\"},\"enabled\":{\"title\":\"Käytössä\",\"descr\":\"Ilmaisee, onko tuote käytössä.\"},\"visible\":{\"title\":\"Näkyvissä\",\"descr\":\"Ilmaisee, onko tuote näkyvissä.\"},\"visited\":{\"title\":\"Vierailtu\",\"descr\":\"Ilmaisee, onko tuotetta katsottu.\"}},\"TaxProduct\":{\"title\":{\"title\":\"Nimi\",\"descr\":\"Tuotteen nimi.\"},\"paymentReferenceNumber\":{\"title\":\"Maksuviitenumero\",\"descr\":\"Viitenumero, jota käytetään maksujen tunnistamiseen.\"},\"irReporting\":{\"title\":\"Veroraportointi\",\"descr\":\"Käsittelytapa, jolla veroraportointi hoidetaan.\"},\"isTaxAndSocialSecuritySelfHandling\":{\"title\":\"Itsehoitoinen vero- ja sosiaaliturva\",\"descr\":\"Ilmaisee, hoitaako asiakas itse vero- ja sosiaaliturva-asiat.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste tuotteelle.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Tuotteen nykyinen tila.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Lyhyt kuvaus tuotteesta.\"},\"img\":{\"title\":\"Kuva\",\"descr\":\"Tuotteen visuaalinen esitys.\"},\"articleId\":{\"title\":\"Artikkelitunniste\",\"descr\":\"Tunniste liittyvälle artikkelille.\"},\"enabled\":{\"title\":\"Käytössä\",\"descr\":\"Ilmaisee, onko tuote aktiivinen.\"},\"visible\":{\"title\":\"Näkyvä\",\"descr\":\"Ilmaisee, onko tuote näkyvissä asiakkaille.\"},\"visited\":{\"title\":\"Vierailtu\",\"descr\":\"Ilmaisee, onko tuotetta tarkasteltu.\"}},\"UnemploymentProduct\":{\"title\":{\"title\":\"Nimi\",\"descr\":\"Tuotteen nimi.\"},\"isSalariesPaidThisYear\":{\"title\":\"Palkat maksettu tänä vuonna\",\"descr\":\"Ilmaisee, onko palkkoja maksettu kuluvana vuonna.\"},\"isPrepayments\":{\"title\":\"Ennakkomaksut\",\"descr\":\"Ilmaisee, onko käytössä ennakkomaksuja.\"},\"isNotificationsSelfHandling\":{\"title\":\"Itsehoitoiset ilmoitukset\",\"descr\":\"Ilmaisee, hoitaako asiakas itse ilmoitukset.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste tuotteelle.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Tuotteen nykyinen tila.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Lyhyt kuvaus tuotteesta.\"},\"img\":{\"title\":\"Kuva\",\"descr\":\"Tuotteen visuaalinen esitys.\"},\"articleId\":{\"title\":\"Artikkelitunniste\",\"descr\":\"Tunniste liittyvälle artikkelille.\"},\"enabled\":{\"title\":\"Käytössä\",\"descr\":\"Ilmaisee, onko tuote aktiivinen.\"},\"visible\":{\"title\":\"Näkyvä\",\"descr\":\"Ilmaisee, onko tuote näkyvissä asiakkaille.\"},\"visited\":{\"title\":\"Vierailtu\",\"descr\":\"Ilmaisee, onko tuotetta tarkasteltu.\"}},\"PensionProduct\":{\"title\":{\"title\":\"Nimi\",\"descr\":\"Tuotteen nimi.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Tuotteen nykyinen tila.\"},\"isPensionContractDone\":{\"title\":\"Eläkesopimus tehty\",\"descr\":\"Ilmaisee, onko eläkesopimus solmittu.\"},\"pensionCompany\":{\"title\":\"Eläkeyhtiö\",\"descr\":\"Eläkeyhtiö, joka hallinnoi sopimusta.\"},\"pensionContractNumber\":{\"title\":\"Eläkesopimuksen numero\",\"descr\":\"Yksilöllinen numero eläkesopimukselle.\"},\"isPensionSelfHandling\":{\"title\":\"Itsehoitoinen eläke\",\"descr\":\"Ilmaisee, hoitaako asiakas itse eläkeasiat.\"},\"isPendingContract\":{\"title\":\"Odottaa sopimusta\",\"descr\":\"Ilmaisee, onko sopimus vielä vahvistamatta.\"},\"enabled\":{\"title\":\"Käytössä\",\"descr\":\"Ilmaisee, onko tuote aktiivinen.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste tuotteelle.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Lyhyt kuvaus tuotteesta.\"},\"img\":{\"title\":\"Kuva\",\"descr\":\"Tuotteen visuaalinen esitys.\"},\"articleId\":{\"title\":\"Artikkelitunniste\",\"descr\":\"Tunniste liittyvälle artikkelille.\"},\"visible\":{\"title\":\"Näkyvä\",\"descr\":\"Ilmaisee, onko tuote näkyvissä asiakkaille.\"},\"visited\":{\"title\":\"Vierailtu\",\"descr\":\"Ilmaisee, onko tuotetta tarkasteltu.\"}},\"InsuranceProduct\":{\"title\":{\"title\":\"Nimi\",\"descr\":\"Tuotteen nimi.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Tuotteen nykyinen tila.\"},\"isPartnerInsurance\":{\"title\":\"Kumppanivakuutus\",\"descr\":\"Ilmaisee, onko vakuutus kumppanin tarjoama.\"},\"isInsuranceContractDone\":{\"title\":\"Vakuutussopimus tehty\",\"descr\":\"Ilmaisee, onko vakuutussopimus solmittu.\"},\"insuranceCompany\":{\"title\":\"Vakuutusyhtiö\",\"descr\":\"Vakuutusyhtiö, joka hallinnoi sopimusta.\"},\"insuranceContractNumber\":{\"title\":\"Vakuutussopimuksen numero\",\"descr\":\"Yksilöllinen numero vakuutussopimukselle.\"},\"enabled\":{\"title\":\"Käytössä\",\"descr\":\"Ilmaisee, onko tuote aktiivinen.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste tuotteelle.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Lyhyt kuvaus tuotteesta.\"},\"img\":{\"title\":\"Kuva\",\"descr\":\"Tuotteen visuaalinen esitys.\"},\"articleId\":{\"title\":\"Artikkelitunniste\",\"descr\":\"Tunniste liittyvälle artikkelille.\"},\"visible\":{\"title\":\"Näkyvä\",\"descr\":\"Ilmaisee, onko tuote näkyvissä asiakkaille.\"},\"visited\":{\"title\":\"Vierailtu\",\"descr\":\"Ilmaisee, onko tuotetta tarkasteltu.\"}},\"AccountingProduct\":{\"title\":{\"title\":\"Nimi\",\"descr\":\"Tuotteen nimi.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Tuotteen nykyinen tila.\"},\"accountantName\":{\"title\":\"Kirjanpitäjän nimi\",\"descr\":\"Kirjanpitäjän nimi, joka vastaa tilistä.\"},\"accountantEmail\":{\"title\":\"Kirjanpitäjän sähköposti\",\"descr\":\"Sähköpostiosoite kirjanpitäjälle.\"},\"accountantPhone\":{\"title\":\"Kirjanpitäjän puhelin\",\"descr\":\"Puhelinnumero kirjanpitäjälle.\"},\"enabled\":{\"title\":\"Käytössä\",\"descr\":\"Ilmaisee, onko tuote aktiivinen.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste tuotteelle.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Lyhyt kuvaus tuotteesta.\"},\"img\":{\"title\":\"Kuva\",\"descr\":\"Tuotteen visuaalinen esitys.\"},\"articleId\":{\"title\":\"Artikkelitunniste\",\"descr\":\"Tunniste liittyvälle artikkelille.\"},\"visible\":{\"title\":\"Näkyvä\",\"descr\":\"Ilmaisee, onko tuote näkyvissä asiakkaille.\"},\"visited\":{\"title\":\"Vierailtu\",\"descr\":\"Ilmaisee, onko tuotetta tarkasteltu.\"}},\"HealthCareHelttiProduct\":{\"title\":{\"title\":\"Nimi\",\"descr\":\"Tuotteen nimi tai otsikko.\"},\"package\":{\"title\":\"Tuotepaketti\",\"descr\":\"Valinnainen tuotepaketti, joka määrittää palvelun sisällön.\"},\"industry\":{\"title\":\"Toimiala\",\"descr\":\"Toimiala, johon tuote on suunnattu.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Tuotteen nykyinen tila tai saatavuus.\"},\"enabled\":{\"title\":\"Käytössä\",\"descr\":\"Ilmaisee, onko tuote aktiivisesti käytössä.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste tuotteelle.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Lyhyt kuvaus tuotteen sisällöstä ja eduista.\"},\"img\":{\"title\":\"Kuva\",\"descr\":\"Linkki tuotteen kuvaan.\"},\"articleId\":{\"title\":\"Artikkelitunniste\",\"descr\":\"Yhteyteen liittyvän artikkelin tunniste.\"},\"visible\":{\"title\":\"Näkyvä\",\"descr\":\"Määrittää, onko tuote näkyvissä asiakkaille.\"},\"visited\":{\"title\":\"Vierailtu\",\"descr\":\"Ilmaisee, onko tuotetta tarkasteltu aiemmin.\"}},\"PensionEntrepreneurProduct\":{\"title\":{\"title\":\"Nimi\",\"descr\":\"Tuotteen nimi tai otsikko.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Tuotteen nykyinen tila tai saatavuus.\"},\"tempContractMarker\":{\"title\":\"Väliaikainen sopimusmerkintä\",\"descr\":\"Ilmaisee, onko kyseessä väliaikainen sopimus.\"},\"enabled\":{\"title\":\"Käytössä\",\"descr\":\"Ilmaisee, onko tuote aktiivisesti käytössä.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste tuotteelle.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Lyhyt kuvaus tuotteen sisällöstä ja eduista.\"},\"img\":{\"title\":\"Kuva\",\"descr\":\"Linkki tuotteen kuvaan.\"},\"articleId\":{\"title\":\"Artikkelitunniste\",\"descr\":\"Yhteyteen liittyvän artikkelin tunniste.\"},\"visible\":{\"title\":\"Näkyvä\",\"descr\":\"Määrittää, onko tuote näkyvissä asiakkaille.\"},\"visited\":{\"title\":\"Vierailtu\",\"descr\":\"Ilmaisee, onko tuotetta tarkasteltu aiemmin.\"}},\"PricingProduct\":{\"title\":{\"title\":\"Nimi\",\"descr\":\"Tuotteen nimi tai otsikko.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Tuotteen nykyinen tila tai saatavuus.\"},\"enabled\":{\"title\":\"Käytössä\",\"descr\":\"Ilmaisee, onko tuote aktiivisesti käytössä.\"},\"pricingPartner\":{\"title\":\"Hinnoittelukumppani\",\"descr\":\"Henkilö tai organisaatio, joka vastaa hinnoittelusta.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste tuotteelle.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Lyhyt kuvaus tuotteen sisällöstä ja eduista.\"},\"img\":{\"title\":\"Kuva\",\"descr\":\"Linkki tuotteen kuvaan.\"},\"articleId\":{\"title\":\"Artikkelitunniste\",\"descr\":\"Yhteyteen liittyvän artikkelin tunniste.\"},\"visible\":{\"title\":\"Näkyvä\",\"descr\":\"Määrittää, onko tuote näkyvissä asiakkaille.\"},\"visited\":{\"title\":\"Vierailtu\",\"descr\":\"Ilmaisee, onko tuotetta tarkasteltu aiemmin.\"}},\"VismaSignV01ObData\":{\"title\":\"Visma Sign -dokumenttidata\",\"documentId\":{\"title\":\"Dokumenttitunniste\",\"descr\":\"Yksilöllinen tunniste dokumentille.\"},\"invitationId\":{\"title\":\"Kutsutunniste\",\"descr\":\"Tunniste, joka liittyy kutsuun dokumentin allekirjoittamiseen.\"},\"category\":{\"title\":\"Kategoria\",\"descr\":\"Dokumentin kategoria tai luokitus.\"},\"fileName\":{\"title\":\"Tiedostonimi\",\"descr\":\"Dokumentin tiedostonimi.\"},\"authService\":{\"title\":\"Autentikointipalvelu\",\"descr\":\"Palvelu, jota käytetään käyttäjän tunnistamiseen.\"}},\"SignicatData\":{\"title\":\"Signicat-dokumenttidata\",\"documentId\":{\"title\":\"Dokumenttitunniste\",\"descr\":\"Yksilöllinen tunniste dokumentille.\"},\"documentSummary\":{\"title\":\"Dokumentin yhteenveto\",\"descr\":\"Yhteenveto dokumentin sisällöstä.\"},\"pdfBlobUri\":{\"title\":\"PDF-tiedoston URI\",\"descr\":\"URI-osoite, josta PDF-tiedosto on saatavilla.\"}},\"Shareholder\":{\"title\":\"Osakkeenomistaja\",\"name\":{\"title\":\"Nimi\",\"descr\":\"Osakkeenomistajan nimi, jos tiedossa.\"}},\"YtjSearchResultCompany\":{\"title\":\"YTJ-hakutuloksen Yritys\",\"dash\":{\"title\":\"Viiva\",\"descr\":\"Yrityksen tunniste, joka voi sisältää viivan.\"},\"businessId\":{\"title\":\"Y-tunnus\",\"descr\":\"Yrityksen virallinen Y-tunnus, jos saatavilla.\"},\"name\":{\"title\":\"Yrityksen nimi\",\"descr\":\"Yrityksen nimi, jos tiedossa.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yrityksen yksilöllinen tunniste, jos saatavilla.\"},\"type\":{\"title\":\"Yritystyyppi\",\"descr\":\"Yrityksen tyyppi tai luokitus, jos tiedossa.\"}},\"OnboardingContactVerification\":{\"title\":\"Yhteystiedon Varmistaminen\",\"pin\":{\"title\":\"PIN-koodi\",\"descr\":\"Varmistamiseen käytettävä PIN-koodi, jos saatavilla.\"}},\"PersonPricingPartner\":{\"title\":\"Henkilökohtainen Hinnoittelukumppani\",\"accountId\":{\"title\":\"Tilin tunnus\",\"descr\":\"Hinnoittelukumppanin tilin tunnus, jos saatavilla.\"},\"pricingModel\":{\"title\":\"Hinnoittelumalli\",\"descr\":\"Käytössä oleva hinnoittelumalli, jos tiedossa.\"},\"fixedFee\":{\"title\":\"Kiinteä maksu\",\"descr\":\"Palvelusta perittävä kiinteä maksu, jos sovittu.\"},\"serviceModelId\":{\"title\":\"Palvelumallin tunnus\",\"descr\":\"Palvelumallin yksilöllinen tunnus, jos saatavilla.\"}},\"WelcomeDataWorker\":{\"title\":\"Tervetuloa Tiedot Työntekijälle\",\"timeline\":{\"title\":\"Aikajana\",\"descr\":\"Työntekijän aikajana tapahtumista, jos saatavilla.\"},\"activeTaxcard\":{\"title\":\"Aktiivinen Verokortti\",\"descr\":\"Työntekijän voimassa oleva verokortti, jos tiedossa.\"}},\"Taxcard\":{\"title\":\"Verokortti\",\"worker\":{\"title\":\"Työntekijä\",\"descr\":\"Työntekijän tiedot, joihin verokortti liittyy.\"},\"employmentId\":{\"title\":\"Työsuhteen tunniste\",\"descr\":\"Tunniste, joka yhdistää verokortin tiettyyn työsuhteeseen.\"},\"card\":{\"title\":\"Verokortin tiedot\",\"descr\":\"Verokortin yksityiskohtaiset tiedot ja asetukset.\"},\"incomeLog\":{\"title\":\"Tulokirjanpito\",\"descr\":\"Luettelo tuloista, jotka liittyvät tähän verokorttiin.\"},\"result\":{\"title\":\"Verokortin tulokset\",\"descr\":\"Laskennan tulokset, jotka liittyvät verokorttiin.\"},\"copyOfUri\":{\"title\":\"Kopion URI\",\"descr\":\"Linkki verokortin kopioon, jos saatavilla.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Verokortin yksilöllinen tunniste.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin verokortti luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin verokorttia päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Henkilö tai organisaatio, joka omistaa verokortin.\"},\"isReadOnly\":{\"title\":\"Vain luku -tila\",\"descr\":\"Tieto siitä, onko verokortti vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Yhteistyökumppani, johon verokortti liittyy.\"}},\"TaxcardInput\":{\"title\":\"Verokortin syöttötiedot\",\"personalId\":{\"title\":\"Henkilötunnus\",\"descr\":\"Henkilön tunniste, johon verokortti liittyy.\"},\"state\":{\"title\":\"Verokortin tila\",\"descr\":\"Verokortin nykyinen tila tai status.\"},\"forYear\":{\"title\":\"Vuosi\",\"descr\":\"Vuosi, jolle verokortti on voimassa.\"},\"validity\":{\"title\":\"Voimassaoloaika\",\"descr\":\"Ajanjakso, jolloin verokortti on voimassa.\"},\"taxPercent\":{\"title\":\"Veroprosentti\",\"descr\":\"Verokortin ensisijainen veroprosentti.\"},\"incomeLimit\":{\"title\":\"Tuloraja\",\"descr\":\"Tulojen enimmäismäärä, johon veroprosentti sovelletaan.\"},\"taxPercent2\":{\"title\":\"Toissijainen veroprosentti\",\"descr\":\"Veroprosentti, jota sovelletaan tulorajan ylittäviin tuloihin.\"},\"taxPercentMin\":{\"title\":\"Minimiveroprosentti\",\"descr\":\"Alin mahdollinen veroprosentti.\"},\"taxPercentMinOwned\":{\"title\":\"Omistettu minimiveroprosentti\",\"descr\":\"Omistajan määrittämä alin veroprosentti.\"},\"lastChecked\":{\"title\":\"Viimeisin tarkistus\",\"descr\":\"Päivämäärä, jolloin verokortti tarkistettiin viimeksi.\"},\"incomeType\":{\"title\":\"Tulon tyyppi\",\"descr\":\"Tyyppi tuloista, jotka verokortti kattaa.\"},\"includesStockOptionsAndGrants\":{\"title\":\"Sisältää osakeoptiot ja apurahat\",\"descr\":\"Tieto siitä, sisältääkö verokortti osakeoptiot ja apurahat.\"},\"kind\":{\"title\":\"Verokortin laji\",\"descr\":\"Verokortin tyyppi tai kategoria.\"},\"fileUri\":{\"title\":\"Tiedoston URI\",\"descr\":\"Linkki verokortin tiedostoon.\"},\"previewUri\":{\"title\":\"Esikatselun URI\",\"descr\":\"Linkki verokortin esikatseluun.\"}},\"TaxCardIncome\":{\"title\":\"Verokortin tulo\",\"type\":{\"title\":\"Tulon tyyppi\",\"descr\":\"Tyyppi tuloista, jotka on kirjattu verokortille.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Tuloerän yksilöllinen tunniste.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Henkilö tai organisaatio, joka omistaa tuloerän.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Kuvaus tuloerästä.\"},\"startDate\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin tuloerä alkaa.\"},\"endDate\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin tuloerä päättyy.\"},\"paidAt\":{\"title\":\"Maksupäivämäärä\",\"descr\":\"Päivämäärä, jolloin tuloerä maksettiin.\"},\"income\":{\"title\":\"Tulo\",\"descr\":\"Tuloerän määrä.\"},\"tax\":{\"title\":\"Vero\",\"descr\":\"Tuloerään liittyvä veron määrä.\"},\"diff\":{\"title\":\"Erotus\",\"descr\":\"Erotus tuloerän ja veron välillä.\"}},\"TaxcardResults\":{\"title\":\"Verokortin tulokset\",\"totalIncome\":{\"title\":\"Kokonaistulot\",\"descr\":\"Verokortille kirjattujen kokonaistulojen määrä.\"},\"totalIncomeJanuary\":{\"title\":\"Tammikuun kokonaistulot\",\"descr\":\"Tammikuulle kirjattujen kokonaistulojen määrä.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Verokorttiin liittyvä maksu.\"},\"paymentJanuary\":{\"title\":\"Tammikuun maksu\",\"descr\":\"Tammikuulle liittyvä maksu.\"},\"validityToday\":{\"title\":\"Voimassaolo tänään\",\"descr\":\"Tieto siitä, onko verokortti voimassa tänään.\"}},\"AccountingData\":{\"title\":\"Kirjanpitotiedot\",\"ledgerAccounts\":{\"title\":\"Pääkirjatilit\",\"descr\":\"Luettelo pääkirjatileistä, jotka liittyvät kirjanpitoon.\"},\"target\":{\"title\":\"Kohdetili\",\"descr\":\"Tili, johon kirjanpitotiedot kohdistuvat.\"},\"format\":{\"title\":\"Muoto\",\"descr\":\"Kirjanpitotietojen esitysmuoto.\"},\"officialId\":{\"title\":\"Virallinen tunniste\",\"descr\":\"Virallinen tunniste, joka liittyy kirjanpitoon.\"},\"employer\":{\"title\":\"Työnantaja\",\"descr\":\"Työnantajan tiedot, jotka liittyvät kirjanpitoon.\"},\"contact\":{\"title\":\"Yhteyshenkilö\",\"descr\":\"Yhteyshenkilö, joka liittyy kirjanpitotietoihin.\"},\"period\":{\"title\":\"Ajanjakso\",\"descr\":\"Ajanjakso, jota kirjanpitotiedot kattavat.\"},\"summary\":{\"title\":\"Yhteenveto\",\"descr\":\"Yhteenveto kirjanpitotiedoista.\"}},\"LedgerAccount\":{\"title\":\"Pääkirjatili\",\"entries\":{\"title\":\"Tapahtumat\",\"descr\":\"Luettelo tilin tapahtumista, jotka voivat olla tyhjiä.\"},\"accountNumber\":{\"title\":\"Tilinumero\",\"descr\":\"Yrityksen pääkirjatilin numero, joka voi olla tyhjä.\"},\"accountName\":{\"title\":\"Tilin nimi\",\"descr\":\"Yrityksen pääkirjatilin nimi, joka voi olla tyhjä.\"},\"accountGrouping\":{\"title\":\"Tiliryhmittely\",\"descr\":\"Tilin ryhmittelytiedot, jotka voivat olla tyhjiä.\"},\"saldo\":{\"title\":\"Saldo\",\"descr\":\"Tilin nykyinen saldo, joka voi olla tyhjä.\"}},\"AccountingDataSummary\":{\"title\":\"Kirjanpidon Yhteenveto\",\"calculationCount\":{\"title\":\"Laskentojen määrä\",\"descr\":\"Suoritettujen laskentojen kokonaismäärä, joka voi olla tyhjä.\"},\"workerCount\":{\"title\":\"Työntekijöiden määrä\",\"descr\":\"Yrityksen työntekijöiden kokonaismäärä, joka voi olla tyhjä.\"},\"totalGrossSalary\":{\"title\":\"Kokonaisbruttopalkka\",\"descr\":\"Yrityksen maksamien bruttopalkkojen kokonaismäärä, joka voi olla tyhjä.\"},\"totalPayment\":{\"title\":\"Kokonaismaksu\",\"descr\":\"Yrityksen suorittamien maksujen kokonaismäärä, joka voi olla tyhjä.\"},\"totals\":{\"title\":\"Yhteensä\",\"descr\":\"Yhteenveto laskelmista, joka voi olla tyhjä.\"},\"employerCalc\":{\"title\":\"Työnantajan laskelma\",\"descr\":\"Työnantajan kustannuslaskelma, joka voi olla tyhjä.\"},\"workerCalc\":{\"title\":\"Työntekijän laskelma\",\"descr\":\"Työntekijän palkkalaskelma, joka voi olla tyhjä.\"},\"holidayCalc\":{\"title\":\"Lomakorvauslaskelma\",\"descr\":\"Lomakorvausten laskelma, joka voi olla tyhjä.\"},\"validation\":{\"title\":\"Validointi\",\"descr\":\"Tietojen tarkistus ja validointi, joka voi olla tyhjä.\"}},\"LedgerEntry\":{\"title\":\"Kirjanpitotapahtuma\",\"id\":{\"title\":\"Tapahtuman tunniste\",\"descr\":\"Yksilöllinen tunniste kirjanpitotapahtumalle, joka voi olla tyhjä.\"},\"entryDate\":{\"title\":\"Tapahtumapäivä\",\"descr\":\"Päivämäärä, jolloin tapahtuma kirjattiin, joka voi olla tyhjä.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Tapahtuman kuvaus, joka voi olla tyhjä.\"},\"isDebit\":{\"title\":\"Onko veloitus\",\"descr\":\"Ilmaisee, onko tapahtuma veloitus, joka voi olla tyhjä.\"},\"amount\":{\"title\":\"Määrä\",\"descr\":\"Tapahtuman rahamäärä, joka voi olla tyhjä.\"},\"vatPercent\":{\"title\":\"ALV-prosentti\",\"descr\":\"Tapahtumaan sovellettava arvonlisäveroprosentti, joka voi olla tyhjä.\"},\"vatAmount\":{\"title\":\"ALV-määrä\",\"descr\":\"Arvonlisäveron määrä tapahtumassa, joka voi olla tyhjä.\"},\"vatRate\":{\"title\":\"ALV-kanta\",\"descr\":\"Sovellettava arvonlisäverokanta, joka voi olla tyhjä.\"},\"accountNumber\":{\"title\":\"Tilinumero\",\"descr\":\"Tapahtumaan liittyvä tilinumero, joka voi olla tyhjä.\"},\"accountName\":{\"title\":\"Tilin nimi\",\"descr\":\"Tapahtumaan liittyvä tilin nimi, joka voi olla tyhjä.\"},\"accountGrouping\":{\"title\":\"Tiliryhmittely\",\"descr\":\"Tapahtuman tiliryhmittelytiedot, jotka voivat olla tyhjiä.\"},\"dimension\":{\"title\":\"Ulottuvuus\",\"descr\":\"Tapahtuman lisätiedot, jotka voivat olla tyhjiä.\"}},\"HolidayCalculationDTO\":{\"title\":\"Lomakorvauslaskelma\",\"totalAccruedHolidayPay\":{\"title\":\"Kertyneet lomapalkat\",\"descr\":\"Kertyneiden lomapalkkojen kokonaismäärä, joka voi olla tyhjä.\"},\"totalAccruedHolidayBonus\":{\"title\":\"Kertyneet lomabonukset\",\"descr\":\"Kertyneiden lomabonusten kokonaismäärä, joka voi olla tyhjä.\"},\"totalAccruedHolidaySocialSecurity\":{\"title\":\"Kertyneet sosiaaliturvamaksut\",\"descr\":\"Kertyneiden lomaan liittyvien sosiaaliturvamaksujen kokonaismäärä, joka voi olla tyhjä.\"},\"totalAccruedHolidayPension\":{\"title\":\"Kertyneet eläkemaksut\",\"descr\":\"Kertyneiden lomaan liittyvien eläkemaksujen kokonaismäärä, joka voi olla tyhjä.\"},\"totalAccruedHolidayUnemployment\":{\"title\":\"Kertyneet työttömyysvakuutusmaksut\",\"descr\":\"Kertyneiden lomaan liittyvien työttömyysvakuutusmaksujen kokonaismäärä, joka voi olla tyhjä.\"},\"totalAccruedHolidayAccidentInsurance\":{\"title\":\"Kertyneet tapaturmavakuutusmaksut\",\"descr\":\"Kertyneiden lomaan liittyvien tapaturmavakuutusmaksujen kokonaismäärä, joka voi olla tyhjä.\"},\"totalAccruedHolidayGroupLifeInsurance\":{\"title\":\"Kertyneet ryhmähenkivakuutusmaksut\",\"descr\":\"Kertyneiden lomaan liittyvien ryhmähenkivakuutusmaksujen kokonaismäärä, joka voi olla tyhjä.\"}},\"InvoiceStatusNotification\":{\"title\":\"Laskun Tila-ilmoitus\",\"id\":{\"title\":\"Ilmoituksen tunniste\",\"descr\":\"Yksilöllinen tunniste tila-ilmoitukselle, joka voi olla tyhjä.\"},\"externalId\":{\"title\":\"Ulkoinen tunniste\",\"descr\":\"Ulkoinen viite tila-ilmoitukselle, joka voi olla tyhjä.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Laskun nykyinen tila, joka voi olla tyhjä.\"},\"date\":{\"title\":\"Päivämäärä\",\"descr\":\"Ilmoituksen päivämäärä, joka voi olla tyhjä.\"},\"amount\":{\"title\":\"Määrä\",\"descr\":\"Laskun summa, joka voi olla tyhjä.\"},\"receiverFullName\":{\"title\":\"Vastaanottajan koko nimi\",\"descr\":\"Laskun vastaanottajan koko nimi, joka voi olla tyhjä.\"},\"receiverIban\":{\"title\":\"Vastaanottajan IBAN\",\"descr\":\"Laskun vastaanottajan IBAN-tilinumero, joka voi olla tyhjä.\"},\"referenceNumber\":{\"title\":\"Viitenumero\",\"descr\":\"Laskun viitenumero, joka voi olla tyhjä.\"},\"paymentType\":{\"title\":\"Maksutyyppi\",\"descr\":\"Laskun maksutyyppi, joka voi olla tyhjä.\"}},\"WorkerAbsencePeriod\":{\"title\":\"Työntekijän Poissaolojaksot\",\"absencesId\":{\"title\":\"Poissaolon Tunniste\",\"descr\":\"Poissaolon yksilöivä tunniste.\"},\"worker\":{\"title\":\"Työntekijä\",\"descr\":\"Poissaoloon liittyvä työntekijä.\"},\"id\":{\"title\":\"Jakson Tunniste\",\"descr\":\"Poissaolojaksotapahtuman yksilöivä tunniste.\"},\"period\":{\"title\":\"Poissaolojaksot\",\"descr\":\"Poissaolon ajanjakso.\"},\"causeCode\":{\"title\":\"Poissaolon Syykoodi\",\"descr\":\"Koodi, joka kuvaa poissaolon syyn.\"},\"isPaid\":{\"title\":\"Maksettu Poissaolo\",\"descr\":\"Ilmaisee, onko poissaolo palkallinen.\"},\"isHolidayAccrual\":{\"title\":\"Lomakertymä\",\"descr\":\"Ilmaisee, kerryttääkö poissaolo lomapäiviä.\"},\"use\":{\"title\":\"Käyttötarkoitus\",\"descr\":\"Käytetään tulorekisteri-integraatiossa.\"},\"amount\":{\"title\":\"Poissaolon Määrä\",\"descr\":\"Poissaolon kesto tai määrä.\"},\"notes\":{\"title\":\"Huomautukset\",\"descr\":\"Lisätietoja poissaolosta.\"},\"sourceId\":{\"title\":\"Lähdetunniste\",\"descr\":\"Poissaolon lähdetietojen tunniste.\"}},\"PageResultOfPayrollListItem\":{\"title\":\"Palkkalistan Sivutulokset\",\"items\":{\"title\":\"Palkkalista\",\"descr\":\"Luettelo palkkalista-kohteista.\"},\"nextPageLink\":{\"title\":\"Seuraavan Sivun Linkki\",\"descr\":\"Linkki seuraavaan palkkalistasivuun.\"},\"count\":{\"title\":\"Kohteiden Lukumäärä\",\"descr\":\"Palkkalista-kohteiden kokonaismäärä.\"}},\"PayrollListItem\":{\"title\":\"Palkkalistan Kohde\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohdetta viimeksi päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajan Tunniste\",\"descr\":\"Kohteen omistajan yksilöivä tunniste.\"},\"ownerInfo\":{\"title\":\"Omistajan Tiedot\",\"descr\":\"Tietoja kohteen omistajasta.\"},\"status\":{\"title\":\"Palkkalistan Tila\",\"descr\":\"Kohteen nykyinen tila palkkalistassa.\"},\"backOfficeStatus\":{\"title\":\"Back Office -tila\",\"descr\":\"Kohteen tila back office -järjestelmässä.\"},\"startAt\":{\"title\":\"Alkamispäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde alkaa.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde päättyy.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Kohteen bruttopalkka.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Kohteeseen liittyvä maksu.\"},\"fee\":{\"title\":\"Maksu\",\"descr\":\"Kohteeseen liittyvä lisämaksu.\"},\"otherId\":{\"title\":\"Muu Tunniste\",\"descr\":\"Muu kohteeseen liittyvä tunniste.\"},\"otherPartyInfo\":{\"title\":\"Toisen Osapuolen Tiedot\",\"descr\":\"Tietoja kohteen toisesta osapuolesta.\"},\"shortText\":{\"title\":\"Lyhyt Teksti\",\"descr\":\"Lyhyt kuvaus kohteesta.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Kohteeseen liittyvät liiketoimintaobjektit.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"data\":{\"title\":\"Palkkatiedot\",\"descr\":\"Kohteeseen liittyvät palkkatiedot.\"},\"versionNumber\":{\"title\":\"Versiokoodi\",\"descr\":\"Kohteen versio.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Kohteen URI-osoite.\"},\"flags\":{\"title\":\"Liput\",\"descr\":\"Kohteeseen liittyvät liput tai merkit.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Kohteeseen liittyvät viestit.\"},\"entityType\":{\"title\":\"Entiteettityyppi\",\"descr\":\"Kohteen entiteettityyppi.\"},\"logicalDate\":{\"title\":\"Looginen Päivämäärä\",\"descr\":\"Kohteen looginen päivämäärä.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Kohteeseen liittyvä viite.\"},\"externalId\":{\"title\":\"Ulkoinen Tunniste\",\"descr\":\"Kohteen ulkoinen tunniste.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Kohteen yksilöivä tunniste.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Kohteen omistaja.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Ilmaisee, onko kohde vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Kohteeseen liittyvä yhteistyökumppani.\"}},\"PayrollData\":{\"title\":{\"title\":\"Otsikko\",\"descr\":\"Palkkatietojen otsikko.\"},\"partnerMessageAssignedTo\":{\"title\":\"Yhteistyökumppanin Viesti\",\"descr\":\"Viesti, joka on osoitettu yhteistyökumppanille.\"},\"wageBasis\":{\"title\":\"Palkkaperuste\",\"descr\":\"Palkkatietojen peruste.\"},\"dueDate\":{\"title\":\"Eräpäivä\",\"descr\":\"Päivämäärä, jolloin palkka on maksettava.\"},\"isReady\":{\"title\":\"Valmis\",\"descr\":\"Ilmaisee, ovatko palkkatiedot valmiit.\"},\"paymentDate\":{\"title\":\"Maksupäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"periodStart\":{\"title\":\"Jakson Alku\",\"descr\":\"Palkkajakson alkamispäivämäärä.\"},\"periodEnd\":{\"title\":\"Jakson Loppu\",\"descr\":\"Palkkajakson päättymispäivämäärä.\"},\"calcCount\":{\"title\":\"Laskentakerrat\",\"descr\":\"Laskentakertojen määrä.\"},\"template\":{\"title\":\"Malli\",\"descr\":\"Palkkatietojen malli.\"},\"calendarEvent\":{\"title\":\"Kalenteritapahtuma\",\"descr\":\"Palkkatietojen kalenteritapahtuma.\"},\"calendarOccurence\":{\"title\":\"Kalenteritapahtuman Esiintyminen\",\"descr\":\"Kalenteritapahtuman esiintyminen palkkatiedoissa.\"},\"messageThreadId\":{\"title\":\"Viestiketjun Tunniste\",\"descr\":\"Viestiketjun tunniste palkkatiedoissa.\"},\"paymentChannel\":{\"title\":\"Maksukanava\",\"descr\":\"Kanava, jota käytetään palkan maksamiseen.\"},\"salaryDateKind\":{\"title\":\"Palkkapäivän Tyyppi\",\"descr\":\"Palkkapäivän tyyppi palkkatiedoissa.\"}},\"Record\":{\"title\":{\"title\":\"Otsikko\",\"descr\":\"Tietueen otsikko.\"},\"otherId\":{\"title\":\"Muu Tunniste\",\"descr\":\"Muu tietueeseen liittyvä tunniste.\"},\"entityId\":{\"title\":\"Entiteetin Tunniste\",\"descr\":\"Tietueeseen liittyvän entiteetin tunniste.\"},\"entityType\":{\"title\":\"Entiteettityyppi\",\"descr\":\"Tietueeseen liittyvän entiteetin tyyppi.\"},\"recordType\":{\"title\":\"Tietuetyyppi\",\"descr\":\"Tietueen tyyppi.\"},\"startDate\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Tietueen aloituspäivämäärä.\"},\"endDate\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Tietueen päättymispäivämäärä.\"},\"text\":{\"title\":\"Teksti\",\"descr\":\"Tietueen teksti.\"},\"attachments\":{\"title\":\"Liitteet\",\"descr\":\"Tietueeseen liittyvät liitteet.\"},\"usecase\":{\"title\":\"Käyttötapaus\",\"descr\":\"Tietueeseen liittyvä käyttötapaus.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Tietueen yksilöivä tunniste.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin tietue luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin tietuetta viimeksi päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Tietueen omistaja.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Ilmaisee, onko tietue vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Tietueeseen liittyvä yhteistyökumppani.\"}},\"Attachment\":{\"title\":\"Liitetiedosto\",\"fileName\":{\"title\":\"Tiedostonimi\",\"descr\":\"Liitetiedoston nimi, joka voi olla tyhjä, jos ei määritelty.\"},\"contentId\":{\"title\":\"Sisältö-ID\",\"descr\":\"Yksilöllinen tunniste liitetiedostolle, käytetään sisällön hallintaan.\"}},\"PageResultOfRecordListItem\":{\"title\":\"Tietueen Sivutustulos\",\"items\":{\"title\":\"Tietuerivit\",\"descr\":\"Luettelo tietueriveistä, jotka voivat olla tyhjiä, jos tietoja ei ole saatavilla.\"},\"nextPageLink\":{\"title\":\"Seuraavan Sivun Linkki\",\"descr\":\"Linkki seuraavalle sivulle, jos tietoja on enemmän saatavilla.\"},\"count\":{\"title\":\"Tietueiden Lukumäärä\",\"descr\":\"Tietueiden kokonaismäärä, joka voi olla tyhjä, jos ei määritelty.\"}},\"RecordListItem\":{\"title\":\"Tietuerivi\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin tietue luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin tietuetta viimeksi päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajan ID\",\"descr\":\"Tietueen omistajan yksilöllinen tunniste.\"},\"ownerInfo\":{\"title\":\"Omistajan Tiedot\",\"descr\":\"Tietueen omistajan tilitiedot.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Tietueen nykyinen tila.\"},\"backOfficeStatus\":{\"title\":\"Taustatoimiston Tila\",\"descr\":\"Tietueen tila taustatoimiston näkökulmasta.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin tietueen voimassaolo alkaa.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin tietueen voimassaolo päättyy.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Tietueeseen liittyvä bruttopalkka.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Tietueeseen liittyvä maksu.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Tietueeseen liittyvä palkkio.\"},\"otherId\":{\"title\":\"Muu ID\",\"descr\":\"Toinen yksilöllinen tunniste tietueelle.\"},\"otherPartyInfo\":{\"title\":\"Toisen Osapuolen Tiedot\",\"descr\":\"Tietueeseen liittyvän toisen osapuolen tilitiedot.\"},\"shortText\":{\"title\":\"Lyhyt Teksti\",\"descr\":\"Lyhyt kuvaus tietueesta.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Luettelo liiketoimintaobjekteista, jotka liittyvät tietueeseen.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"data\":{\"title\":\"Tietueen Tiedot\",\"descr\":\"Tietueeseen liittyvät yksityiskohtaiset tiedot.\"},\"versionNumber\":{\"title\":\"Versio Numero\",\"descr\":\"Tietueen nykyinen versio.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Tietueen yksilöllinen resurssitunniste.\"},\"flags\":{\"title\":\"Liput\",\"descr\":\"Luettelo tietueeseen liittyvistä lipuista tai merkinnöistä.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Luettelo tietueeseen liittyvistä viesteistä.\"},\"entityType\":{\"title\":\"Entiteetin Tyyppi\",\"descr\":\"Tietueen tyyppi tai luokka.\"},\"logicalDate\":{\"title\":\"Looginen Päivämäärä\",\"descr\":\"Tietueen looginen päivämäärä, joka voi poiketa todellisesta päivämäärästä.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Viittaus tietueeseen liittyvään ulkoiseen lähteeseen.\"},\"externalId\":{\"title\":\"Ulkoinen ID\",\"descr\":\"Tietueen ulkoinen tunniste.\"},\"id\":{\"title\":\"ID\",\"descr\":\"Tietueen yksilöllinen tunniste.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Tietueen omistajan nimi tai tunniste.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Tietue on vain luku -tilassa, eikä sitä voi muokata.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Tietueeseen liittyvä yhteistyökumppani.\"}},\"RecordData\":{\"title\":\"Tietueen Tiedot\",\"recordType\":{\"title\":\"Tietuetyyppi\",\"descr\":\"Tietueen tyyppi, joka määrittää sen käyttötarkoituksen.\"},\"usecaseUri\":{\"title\":\"Käyttötapauksen URI\",\"descr\":\"Käyttötapaukseen liittyvä yksilöllinen resurssitunniste.\"}},\"ReferenceObject\":{\"title\":\"Viiteobjekti\",\"header\":{\"title\":\"Otsikko\",\"descr\":\"Viiteobjektin otsikkotiedot.\"},\"events\":{\"title\":\"Tapahtumat\",\"descr\":\"Luettelo viiteobjektiin liittyvistä tapahtumista.\"},\"usecase\":{\"title\":\"Käyttötapaus\",\"descr\":\"Viiteobjektiin liittyvä käyttötapaus.\"},\"workflowData\":{\"title\":\"Työvirran Tiedot\",\"descr\":\"Viiteobjektiin liittyvät työvirran tiedot.\"},\"id\":{\"title\":\"ID\",\"descr\":\"Viiteobjektin yksilöllinen tunniste.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin viiteobjekti luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin viiteobjektia viimeksi päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Viiteobjektin omistajan nimi tai tunniste.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Viiteobjekti on vain luku -tilassa, eikä sitä voi muokata.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Viiteobjektiin liittyvä yhteistyökumppani.\"}},\"ReferenceObjectHeader\":{\"title\":\"Viiteobjektin Otsikko\",\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Lyhyt kuvaus viiteobjektista, joka voi olla tyhjä.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Viiteobjektin nykyinen tila, joka voi olla määrittelemätön.\"},\"referenceDate\":{\"title\":\"Viitepäivämäärä\",\"descr\":\"Viiteobjektiin liittyvä päivämäärä, joka voi olla tyhjä.\"}},\"ReferenceObjectEvent\":{\"title\":\"Viiteobjektin Tapahtuma\",\"name\":{\"title\":\"Tapahtuman Nimi\",\"descr\":\"Tapahtuman nimi, joka voi olla määrittelemätön.\"},\"date\":{\"title\":\"Tapahtumapäivämäärä\",\"descr\":\"Päivämäärä, jolloin tapahtuma tapahtui, voi olla tyhjä.\"},\"result\":{\"title\":\"Tulos\",\"descr\":\"Tapahtuman tulos, joka voi olla määrittelemätön.\"}},\"PageResultOfReferenceObjectListItem\":{\"title\":\"Viiteobjektien Sivutettu Tulos\",\"items\":{\"title\":\"Kohteet\",\"descr\":\"Luettelo viiteobjekteista, joka voi olla tyhjä.\"},\"nextPageLink\":{\"title\":\"Seuraavan Sivun Linkki\",\"descr\":\"Linkki seuraavalle sivulle, jos sellainen on olemassa.\"},\"count\":{\"title\":\"Kohteiden Määrä\",\"descr\":\"Kohteiden kokonaismäärä, joka voi olla määrittelemätön.\"}},\"ReferenceObjectListItem\":{\"title\":\"Viiteobjektin Luettelokohde\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde luotiin, voi olla tyhjä.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä, voi olla tyhjä.\"},\"ownerId\":{\"title\":\"Omistajan Tunnus\",\"descr\":\"Kohteen omistajan yksilöllinen tunnus, voi olla tyhjä.\"},\"ownerInfo\":{\"title\":\"Omistajan Tiedot\",\"descr\":\"Tietoja kohteen omistajasta, voi olla tyhjä.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Kohteen nykyinen tila, voi olla määrittelemätön.\"},\"backOfficeStatus\":{\"title\":\"Back Office -tila\",\"descr\":\"Kohteen tila back office -järjestelmässä, voi olla tyhjä.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde alkaa, voi olla tyhjä.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde päättyy, voi olla tyhjä.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Kohteeseen liittyvä bruttopalkka, voi olla määrittelemätön.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Kohteeseen liittyvä maksu, voi olla määrittelemätön.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Kohteeseen liittyvä palkkio, voi olla määrittelemätön.\"},\"otherId\":{\"title\":\"Muu Tunnus\",\"descr\":\"Toinen kohteen tunnus, voi olla tyhjä.\"},\"otherPartyInfo\":{\"title\":\"Muun Osapuolen Tiedot\",\"descr\":\"Tietoja toisesta osapuolesta, voi olla tyhjä.\"},\"shortText\":{\"title\":\"Lyhyt Teksti\",\"descr\":\"Lyhyt kuvaus kohteesta, voi olla tyhjä.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Luettelo liiketoimintaobjekteista, voi olla tyhjä.\"},\"salaryDate\":{\"title\":\"Palkkapäivämäärä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan, voi olla tyhjä.\"},\"data\":{\"title\":\"Data\",\"descr\":\"Kohteeseen liittyvä lisätieto, voi olla tyhjä.\"},\"versionNumber\":{\"title\":\"Versio Numero\",\"descr\":\"Kohteen versio numero, voi olla määrittelemätön.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Kohteen yksilöllinen URI, voi olla tyhjä.\"},\"flags\":{\"title\":\"Liput\",\"descr\":\"Luettelo kohteeseen liittyvistä lipuista, voi olla tyhjä.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Luettelo kohteeseen liittyvistä viesteistä, voi olla tyhjä.\"},\"entityType\":{\"title\":\"Entiteetin Tyyppi\",\"descr\":\"Kohteen tyyppi, voi olla tyhjä.\"},\"logicalDate\":{\"title\":\"Looginen Päivämäärä\",\"descr\":\"Kohteen looginen päivämäärä, voi olla tyhjä.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Kohteen viite, voi olla tyhjä.\"},\"externalId\":{\"title\":\"Ulkoinen Tunnus\",\"descr\":\"Kohteen ulkoinen tunnus, voi olla tyhjä.\"},\"id\":{\"title\":\"Tunnus\",\"descr\":\"Kohteen yksilöllinen tunnus, voi olla tyhjä.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Kohteen omistaja, voi olla tyhjä.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Kohteen muokkausoikeus, voi olla määrittelemätön.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Kohteeseen liittyvä kumppani, voi olla tyhjä.\"}},\"ReferenceObjectData\":{\"title\":\"Viiteobjektin Data\"},\"Report\":{\"title\":{\"title\":\"Raportin otsikko\",\"descr\":\"Raportin kuvaava otsikko, joka voi olla tyhjä.\"},\"reportDate\":{\"title\":\"Raportin päivämäärä\",\"descr\":\"Päivämäärä, jolloin raportti on laadittu.\"},\"type\":{\"title\":\"Raportin tyyppi\",\"descr\":\"Raportin luokitus tai tyyppi.\"},\"pdfUrl\":{\"title\":\"PDF-linkki\",\"descr\":\"Linkki raportin PDF-versioon, jos saatavilla.\"},\"thumbnail\":{\"title\":\"Esikatselukuva\",\"descr\":\"Pieni kuva, joka esittää raporttia.\"},\"htmlUrl\":{\"title\":\"HTML-linkki\",\"descr\":\"Linkki raportin HTML-versioon, jos saatavilla.\"},\"jsonUrl\":{\"title\":\"JSON-linkki\",\"descr\":\"Linkki raportin JSON-muotoiseen versioon, jos saatavilla.\"},\"isPreview\":{\"title\":\"Esikatselu\",\"descr\":\"Ilmaisee, onko raportti esikatselutilassa.\"},\"isDemoData\":{\"title\":\"Demodata\",\"descr\":\"Ilmaisee, sisältääkö raportti demodataa.\"},\"urlsExpireAt\":{\"title\":\"Linkkien vanhenemisaika\",\"descr\":\"Aika, jolloin raportin linkit vanhenevat.\"},\"id\":{\"title\":\"Raportin tunniste\",\"descr\":\"Yksilöllinen tunniste raportille.\"},\"createdAt\":{\"title\":\"Luontiaika\",\"descr\":\"Aika, jolloin raportti luotiin.\"},\"updatedAt\":{\"title\":\"Päivitysaika\",\"descr\":\"Aika, jolloin raporttia viimeksi päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Raportin omistavan henkilön tai organisaation nimi.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko raportti vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Raporttiin liittyvä yhteistyökumppani.\"}},\"ReportingCalculation\":{\"title\":\"Raportointilaskelma\",\"employer\":{\"title\":\"Työnantaja\",\"descr\":\"Laskelman työnantajaan liittyvät tiedot.\"},\"worker\":{\"title\":\"Työntekijä\",\"descr\":\"Laskelman työntekijään liittyvät tiedot.\"},\"workflow\":{\"title\":\"Työprosessi\",\"descr\":\"Laskelman työprosessiin liittyvät tiedot.\"},\"salary\":{\"title\":\"Palkka\",\"descr\":\"Laskelman palkkatiedot.\"},\"rows\":{\"title\":\"Rivit\",\"descr\":\"Käyttäjän määrittelemät laskelman rivit.\"},\"framework\":{\"title\":\"Viitekehys\",\"descr\":\"Laskelman viitekehykseen liittyvät parametrit.\"},\"usecase\":{\"title\":\"Käyttötapaus\",\"descr\":\"Laskelman käyttötapaukseen liittyvät tiedot.\"},\"result\":{\"title\":\"Laskentatulokset\",\"descr\":\"Laskelman tulokset ja analyysit.\"},\"info\":{\"title\":\"Lisätiedot\",\"descr\":\"Laskelmaan liittyvät lisätiedot.\"},\"sharing\":{\"title\":\"Jakaminen\",\"descr\":\"Laskelman jakamiseen liittyvät tiedot.\"},\"accounting\":{\"title\":\"Kirjanpito\",\"descr\":\"Laskelman kirjanpitoon liittyvät tiedot.\"},\"worktime\":{\"title\":\"Työaika\",\"descr\":\"Laskelman työaikaan liittyvät tiedot.\"},\"workflowData\":{\"title\":\"Työprosessin tiedot\",\"descr\":\"Laskelman työprosessin yksityiskohtaiset tiedot.\"},\"id\":{\"title\":\"Laskelman tunniste\",\"descr\":\"Yksilöllinen tunniste laskelmalle.\"},\"createdAt\":{\"title\":\"Luontiaika\",\"descr\":\"Aika, jolloin laskelma luotiin.\"},\"updatedAt\":{\"title\":\"Päivitysaika\",\"descr\":\"Aika, jolloin laskelmaa viimeksi päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Laskelman omistavan henkilön tai organisaation nimi.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko laskelma vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Laskelmaan liittyvä yhteistyökumppani.\"}},\"AccountingReportTable\":{\"title\":\"Kirjanpitoraporttitaulukko\",\"rows\":{\"title\":\"Rivit\",\"descr\":\"Kirjanpitoraportin rivitiedot.\"},\"tableType\":{\"title\":\"Taulukon tyyppi\",\"descr\":\"Kirjanpitoraportin taulukon tyyppi.\"},\"businessId\":{\"title\":\"Yritystunnus\",\"descr\":\"Yrityksen tunniste, johon raportti liittyy.\"},\"employer\":{\"title\":\"Työnantaja\",\"descr\":\"Raportin työnantajaan liittyvät tiedot.\"},\"contact\":{\"title\":\"Yhteyshenkilö\",\"descr\":\"Raportin yhteyshenkilön tiedot.\"},\"period\":{\"title\":\"Ajanjakso\",\"descr\":\"Ajanjakso, jota raportti kattaa.\"},\"summary\":{\"title\":\"Yhteenveto\",\"descr\":\"Kirjanpitoraportin yhteenveto.\"}},\"AccountingReportRow\":{\"title\":\"Kirjanpitoraportin rivi\",\"rowType\":{\"title\":\"Rivityyppi\",\"descr\":\"Kirjanpitoraportin rivin tyyppi.\"},\"amount\":{\"title\":\"Määrä\",\"descr\":\"Rivin rahallinen määrä.\"},\"vatPercent\":{\"title\":\"ALV-prosentti\",\"descr\":\"Rivin arvonlisäveroprosentti.\"},\"accountNumber\":{\"title\":\"Tilinumero\",\"descr\":\"Rivin tilinumero kirjanpidossa.\"},\"accountText\":{\"title\":\"Tilitiedot\",\"descr\":\"Rivin tilitiedot tai kuvaus.\"},\"productCode\":{\"title\":\"Tuotekoodi\",\"descr\":\"Rivin tuotekoodi.\"},\"productName\":{\"title\":\"Tuotenimi\",\"descr\":\"Rivin tuotenimi.\"},\"text\":{\"title\":\"Teksti\",\"descr\":\"Rivin kuvaava teksti tai lisätiedot.\"},\"styles\":{\"title\":\"Tyylit\",\"descr\":\"Rivin visuaaliset tyylit tai muotoilut.\"},\"count\":{\"title\":\"Lukumäärä\",\"descr\":\"Rivin tuotteiden tai palveluiden lukumäärä.\"},\"price\":{\"title\":\"Hinta\",\"descr\":\"Rivin yksikköhinta.\"},\"unit\":{\"title\":\"Yksikkö\",\"descr\":\"Rivin mittayksikkö.\"},\"additionalInformation\":{\"title\":\"Lisätiedot\",\"descr\":\"Rivin lisätiedot tai huomautukset.\"}},\"AccountingReportTableSummary\":{\"title\":\"Kirjanpitoraportin yhteenveto\",\"count\":{\"title\":\"Lukumäärä\",\"descr\":\"Yhteenvetoon sisältyvien rivien lukumäärä.\"},\"totals\":{\"title\":\"Kokonaissummat\",\"descr\":\"Yhteenvetoon sisältyvät kokonaissummat.\"},\"employerCalc\":{\"title\":\"Työnantajan laskelma\",\"descr\":\"Yhteenvetoon sisältyvät työnantajan laskelmat.\"},\"workerCalc\":{\"title\":\"Työntekijän laskelma\",\"descr\":\"Yhteenvetoon sisältyvät työntekijän laskelmat.\"}},\"CumulativeCalculation\":{\"title\":\"Kumulatiivinen Laskenta\",\"cumulative\":{\"title\":\"Kumulatiiviset Tiedot\",\"descr\":\"Sisältää kumulatiivisia tietoja eri avaimilla, jotka liittyvät liiketoiminnan seurantaan.\"}},\"CumulativeData\":{\"title\":\"Kumulatiiviset Tiedot\",\"salaryDates\":{\"title\":\"Palkkajaksot\",\"descr\":\"Ajanjaksot, joiden aikana palkat on maksettu. Tämä voi olla tyhjä, jos tietoja ei ole saatavilla.\"},\"workingDays\":{\"title\":\"Työpäivät\",\"descr\":\"Ajanjaksot, jolloin työ on suoritettu. Tämä voi olla tyhjä, jos tietoja ei ole saatavilla.\"},\"labels\":{\"title\":\"Tunnisteet\",\"descr\":\"Erilaisia tunnisteita, jotka kuvaavat kumulatiivisia tietoja.\"}},\"SummaryReportData\":{\"title\":\"Yhteenvetoraportin Tiedot\",\"statistics\":{\"title\":\"Tilastot\",\"descr\":\"Laskentatulosten tilastot, jotka antavat yleiskuvan liiketoiminnan suorituskyvystä.\"},\"businessId\":{\"title\":\"Yritystunnus\",\"descr\":\"Yrityksen yksilöllinen tunniste, joka voi olla tyhjä, jos tietoa ei ole.\"},\"employer\":{\"title\":\"Työnantaja\",\"descr\":\"Työnantajan tiedot, jotka voivat sisältää visuaalisen esityksen.\"},\"contact\":{\"title\":\"Yhteyshenkilö\",\"descr\":\"Yhteystiedot, joihin voidaan ottaa yhteyttä liiketoiminnan asioissa.\"},\"startDate\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Raportin tai laskennan aloituspäivämäärä, joka voi olla tyhjä.\"},\"endDate\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Raportin tai laskennan päättymispäivämäärä, joka voi olla tyhjä.\"},\"result\":{\"title\":\"Laskentatulos\",\"descr\":\"Laskennan lopputulos, joka voi olla tyhjä, jos tulosta ei ole saatavilla.\"},\"calculations\":{\"title\":\"Laskelmat\",\"descr\":\"Yksityiskohtaiset laskelmat, jotka muodostavat osan raportista, voi olla tyhjä.\"}},\"CalculationResultStatistics\":{\"title\":\"Laskentatulosten Tilastot\",\"calculationCount\":{\"title\":\"Laskentojen Määrä\",\"descr\":\"Suoritettujen laskentojen kokonaismäärä, joka voi olla tyhjä.\"},\"workerCount\":{\"title\":\"Työntekijöiden Määrä\",\"descr\":\"Laskennassa mukana olleiden työntekijöiden kokonaismäärä, joka voi olla tyhjä.\"},\"pensionWorkerPercent\":{\"title\":\"Eläkemaksuprosentti\",\"descr\":\"Työntekijöiden eläkemaksujen prosenttiosuus, joka voi olla tyhjä.\"},\"unemploymentWorkerPercent\":{\"title\":\"Työttömyysvakuutusmaksuprosentti\",\"descr\":\"Työntekijöiden työttömyysvakuutusmaksujen prosenttiosuus, joka voi olla tyhjä.\"},\"taxPercent\":{\"title\":\"Veroprosentti\",\"descr\":\"Työntekijöiden verojen prosenttiosuus, joka voi olla tyhjä.\"},\"unionPaymentPercent\":{\"title\":\"Ammattiyhdistysmaksuprosentti\",\"descr\":\"Työntekijöiden ammattiyhdistysmaksujen prosenttiosuus, joka voi olla tyhjä.\"}},\"CalculationReportData\":{\"title\":\"Laskentaraportin Tiedot\",\"rows\":{\"title\":\"Rivit\",\"descr\":\"Raportin yksittäiset rivit, jotka sisältävät laskentatietoja eri avaimilla.\"}},\"AccountingRowReportData\":{\"title\":\"Kirjanpidon Rivitietoraportti\",\"rows\":{\"title\":\"Rivit\",\"descr\":\"Luettelo kirjanpidon rivitiedoista, jotka voivat olla tyhjiä.\"},\"officialId\":{\"title\":\"Virallinen Tunniste\",\"descr\":\"Yrityksen tai organisaation virallinen tunniste, jos saatavilla.\"},\"employer\":{\"title\":\"Työnantaja\",\"descr\":\"Työnantajan tiedot, kuten nimi ja logo.\"},\"contact\":{\"title\":\"Yhteyshenkilö\",\"descr\":\"Yhteyshenkilön tiedot, kuten nimi ja yhteystiedot.\"},\"period\":{\"title\":\"Aikajakso\",\"descr\":\"Raportin kattama ajanjakso.\"},\"summary\":{\"title\":\"Yhteenveto\",\"descr\":\"Yhteenveto kirjanpidon tiedoista.\"}},\"AccountingRowReportDataRow\":{\"title\":\"Kirjanpidon Rivitietoraportin Rivi\",\"entryCodeGroup\":{\"title\":\"Merkintäkoodiryhmä\",\"descr\":\"Ryhmä, johon merkintäkoodi kuuluu, jos saatavilla.\"},\"entryCode\":{\"title\":\"Merkintäkoodi\",\"descr\":\"Yksilöllinen koodi kirjanpitomerkinnälle.\"},\"entryDate\":{\"title\":\"Merkintäpäivä\",\"descr\":\"Päivämäärä, jolloin kirjanpitomerkintä on tehty.\"},\"message\":{\"title\":\"Viesti\",\"descr\":\"Lisätietoja tai huomautuksia merkinnästä.\"},\"amount\":{\"title\":\"Summa\",\"descr\":\"Kirjanpitomerkinnän rahamäärä.\"},\"vatPercent\":{\"title\":\"ALV-prosentti\",\"descr\":\"Arvonlisäveron prosenttiosuus, jos sovellettavissa.\"},\"vatAmount\":{\"title\":\"ALV-summa\",\"descr\":\"Arvonlisäveron määrä rahassa.\"},\"vatRate\":{\"title\":\"ALV-kanta\",\"descr\":\"Käytetty arvonlisäverokanta.\"},\"dimension\":{\"title\":\"Ulottuvuus\",\"descr\":\"Lisätietoja kirjanpidon ulottuvuuksista, kuten kustannuspaikoista.\"}},\"AccountingHolidayPayDebtReportData\":{\"title\":\"Lomapalkkavelkaraportti\",\"officialId\":{\"title\":\"Virallinen Tunniste\",\"descr\":\"Yrityksen tai organisaation virallinen tunniste, jos saatavilla.\"},\"employer\":{\"title\":\"Työnantaja\",\"descr\":\"Työnantajan tiedot, kuten nimi ja logo.\"},\"contact\":{\"title\":\"Yhteyshenkilö\",\"descr\":\"Yhteyshenkilön tiedot, kuten nimi ja yhteystiedot.\"},\"period\":{\"title\":\"Aikajakso\",\"descr\":\"Raportin kattama ajanjakso.\"},\"holidayCalc\":{\"title\":\"Laskenta\",\"descr\":\"Lomapalkkavelan laskentatiedot.\"},\"holidayYears\":{\"title\":\"Lomavuodet\",\"descr\":\"Luettelo lomavuosista ja niiden laskentatiedoista.\"}},\"AccountingHolidayPayDebtReportDataYear\":{\"title\":\"Lomapalkkavelkaraportin Vuosi\",\"holidayYear\":{\"title\":\"Lomavuosi\",\"descr\":\"Vuosi, jolle lomapalkkavelka on laskettu.\"},\"holidayCalc\":{\"title\":\"Laskenta\",\"descr\":\"Lomapalkkavelan laskentatiedot kyseiselle vuodelle.\"}},\"WorkerSummaryReportData\":{\"title\":\"Työntekijän Yhteenvetoraportti\",\"statistics\":{\"title\":\"Tilastot\",\"descr\":\"Laskentatuloksiin liittyvät tilastotiedot.\"},\"worker\":{\"title\":\"Työntekijä\",\"descr\":\"Työntekijän tiedot, kuten nimi ja kuva.\"},\"workerSocialSecurityNumber\":{\"title\":\"Työntekijän Sosiaaliturvatunnus\",\"descr\":\"Työntekijän sosiaaliturvatunnus, jos saatavilla.\"},\"workerIbanNumber\":{\"title\":\"Työntekijän IBAN\",\"descr\":\"Työntekijän IBAN-tilinumero, jos saatavilla.\"},\"workerContact\":{\"title\":\"Työntekijän Yhteystiedot\",\"descr\":\"Työntekijän yhteystiedot, kuten puhelinnumero ja sähköposti.\"},\"workerResult\":{\"title\":\"Työntekijän Tulos\",\"descr\":\"Yhteenveto työntekijän laskentatuloksista.\"},\"businessId\":{\"title\":\"Yritystunnus\",\"descr\":\"Yrityksen tai organisaation tunnus, jos saatavilla.\"},\"employer\":{\"title\":\"Työnantaja\",\"descr\":\"Työnantajan tiedot, kuten nimi ja logo.\"},\"contact\":{\"title\":\"Yhteyshenkilö\",\"descr\":\"Yhteyshenkilön tiedot, kuten nimi ja yhteystiedot.\"},\"startDate\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Raportin aloituspäivämäärä.\"},\"endDate\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Raportin päättymispäivämäärä.\"},\"result\":{\"title\":\"Tulos\",\"descr\":\"Laskennan lopputulos.\"},\"calculations\":{\"title\":\"Laskelmat\",\"descr\":\"Luettelo yksityiskohtaisista laskelmista.\"}},\"WorkerSummaryResult\":{\"title\":\"Työntekijän Yhteenveto\",\"cashSalary\":{\"title\":\"Rahapalkka\",\"descr\":\"Työntekijän saama rahallinen palkka yhteenvetona.\"},\"benefitsInKind\":{\"title\":\"Luontoisedut\",\"descr\":\"Työntekijän saamat luontoisedut yhteenvetona.\"},\"expenses\":{\"title\":\"Kulut\",\"descr\":\"Työntekijän työstä aiheutuneet kulut yhteenvetona.\"}},\"SummaryCalculationRows\":{\"title\":\"Yhteenvetolaskelman Rivien Tiedot\",\"rows\":{\"title\":\"Rivit\",\"descr\":\"Yksittäiset laskelmarivit, jotka muodostavat yhteenvedon.\"},\"total\":{\"title\":\"Kokonaissumma\",\"descr\":\"Laskelman kaikkien rivien yhteissumma.\"}},\"SummaryCalculationRow\":{\"title\":\"Yhteenvetolaskelman Rivi\",\"message\":{\"title\":\"Viesti\",\"descr\":\"Lisätietoja laskelmarivistä.\"},\"count\":{\"title\":\"Määrä\",\"descr\":\"Rivikohtainen määrä.\"},\"price\":{\"title\":\"Hinta\",\"descr\":\"Yksikköhinta laskelmariville.\"},\"total\":{\"title\":\"Rivikohtainen Kokonaissumma\",\"descr\":\"Laskelmarivin kokonaissumma.\"},\"parameters\":{\"title\":\"Parametrit\",\"descr\":\"Laskelmarivin tyyppi, laji ja koodi.\"},\"data\":{\"title\":\"Lisätiedot\",\"descr\":\"Muut laskelmariviin liittyvät tiedot.\"}},\"TaxAtSourceUsecase\":{\"title\":\"Lähdeveron Käyttötapaus\",\"taxValue\":{\"title\":\"Veron Arvo\",\"descr\":\"Lähdeveron määrä.\"},\"deductionPrice\":{\"title\":\"Vähennyksen Hinta\",\"descr\":\"Yksittäisen vähennyksen arvo.\"},\"deductionCount\":{\"title\":\"Vähennysten Määrä\",\"descr\":\"Vähennysten kokonaismäärä.\"},\"deduction\":{\"title\":\"Vähennys\",\"descr\":\"Kokonaisvähennys lähdeverosta.\"},\"totalTaxable\":{\"title\":\"Verotettava Kokonaismäärä\",\"descr\":\"Verotettava summa vähennysten jälkeen.\"},\"employmentData\":{\"title\":\"Työsuhdetiedot\",\"descr\":\"Lähdeveroon liittyvät työsuhdetiedot.\"},\"allowedKinds\":{\"title\":\"Sallitut Lajit\",\"descr\":\"Sallitut lähdeveron lajit.\"},\"kind\":{\"title\":\"Laji\",\"descr\":\"Lähdeveron tyyppi.\"}},\"IrIncomeTypeUsecase\":{\"title\":\"Tuloverotyypin Käyttötapaus\",\"irData\":{\"title\":\"Tuloverotiedot\",\"descr\":\"Tuloveroon liittyvät yksityiskohdat.\"},\"unit\":{\"title\":\"Yksikkö\",\"descr\":\"Tuloveron yksikkö.\"},\"kind\":{\"title\":\"Laji\",\"descr\":\"Tapahtumakoodi tuloverolle.\"}},\"BoardUsecase\":{\"title\":\"Hallituskäyttötapaus\",\"kind\":{\"title\":\"Hallituslaji\",\"descr\":\"Määrittää hallituksen tyypin, jos se on tiedossa.\"}},\"NonProfitOrgUsecase\":{\"title\":\"Voittoa Tavoittelemattoman Organisaation Käyttötapaus\",\"kind\":{\"title\":\"Organisaatiotyyppi\",\"descr\":\"Määrittää voittoa tavoittelemattoman organisaation tyypin, jos se on tiedossa.\"}},\"RemunerationUsecase\":{\"title\":\"Palkitsemiskäyttötapaus\",\"kind\":{\"title\":\"Palkitsemistyyppi\",\"descr\":\"Määrittää palkitsemisen tyypin, jos se on tiedossa.\"}},\"OtherCompensationUsecase\":{\"title\":\"Muun Korvauksen Käyttötapaus\",\"kind\":{\"title\":\"Korvaustyyppi\",\"descr\":\"Määrittää muun korvauksen tyypin, jos se on tiedossa.\"}},\"TrainingUsecase\":{\"title\":\"Koulutuskäyttötapaus\",\"unit\":{\"title\":\"Koulutusyksikkö\",\"descr\":\"Määrittää koulutuksen yksikön, jos se on tiedossa.\"},\"kind\":{\"title\":\"Koulutustyyppi\",\"descr\":\"Määrittää koulutuksen tyypin, jos se on tiedossa.\"}},\"EmploymentTerminationUsecase\":{\"title\":\"Työsuhteen Päättämisen Käyttötapaus\",\"kind\":{\"title\":\"Päättämisen Tyyppi\",\"descr\":\"Ilmaisee työsuhteen päättämisen tyypin, kuten irtisanominen tai purkaminen. Tämä voi olla valinnainen tieto.\"}},\"WorkingTimeCompensationUsecase\":{\"title\":\"Työajan Korvauksen Käyttötapaus\",\"kind\":{\"title\":\"Korvaustyyppi\",\"descr\":\"Määrittää työajan korvauksen tyypin, kuten ylityökorvaus tai lisätyökorvaus. Tämä voi olla valinnainen tieto.\"}},\"PaidSickLeaveUsecase\":{\"title\":\"Maksetun Sairausloman Käyttötapaus\",\"unit\":{\"title\":\"Yksikkö\",\"descr\":\"Kuvaa sairausloman laskentayksikön, kuten tunnit tai päivät. Tämä voi olla valinnainen tieto.\"},\"kind\":{\"title\":\"Sairausloman Tyyppi\",\"descr\":\"Määrittää maksetun sairausloman tyypin, kuten lyhyt- tai pitkäaikainen sairausloma. Tämä voi olla valinnainen tieto.\"}},\"HourlySalaryWithWorkingTimeCompensationUsecase\":{\"title\":\"Tuntipalkka Työajan Korvauksella\",\"compensationRows\":{\"title\":\"Korvausrivit\",\"descr\":\"Sisältää yksityiskohdat eri työajan korvauksista, kuten ylityöt tai lisätyöt. Tämä voi olla valinnainen tieto.\"},\"pricing\":{\"title\":\"Hinnoittelu\",\"descr\":\"Määrittää työajan korvauksen hinnoittelun, kuten korvausprosentit ja -määrät. Tämä voi olla valinnainen tieto.\"},\"kind\":{\"title\":\"Korvaustyyppi\",\"descr\":\"Määrittää työajan korvauksen tyypin, kuten ylityökorvaus tai lisätyökorvaus. Tämä voi olla valinnainen tieto.\"}},\"WorkingTimeCompensationRow\":{\"title\":\"Työajan Korvausrivi\",\"count\":{\"title\":\"Määrä\",\"descr\":\"Ilmaisee korvattavien tuntien tai yksiköiden määrän. Tämä voi olla valinnainen tieto.\"},\"percent\":{\"title\":\"Prosentti\",\"descr\":\"Kuvaa korvauksen prosenttiosuuden, joka lisätään peruspalkkaan. Tämä voi olla valinnainen tieto.\"},\"price\":{\"title\":\"Hinta\",\"descr\":\"Määrittää korvauksen rahallisen arvon. Tämä voi olla valinnainen tieto.\"},\"message\":{\"title\":\"Viesti\",\"descr\":\"Sisältää lisätietoja tai huomautuksia korvaukseen liittyen. Tämä voi olla valinnainen tieto.\"},\"unit\":{\"title\":\"Laskentayksikkö\",\"descr\":\"Kuvaa, missä yksiköissä korvaus lasketaan, kuten tunnit tai päivät. Tämä voi olla valinnainen tieto.\"},\"accounting\":{\"title\":\"Kirjanpito\",\"descr\":\"Sisältää kirjanpitoon liittyvät tiedot korvauksesta, kuten kustannuspaikan tai tilinumeron. Tämä voi olla valinnainen tieto.\"}},\"DailyAllowanceUsecase\":{\"title\":\"Päivärahan Käyttötapaus\",\"country\":{\"title\":\"Maa\",\"descr\":\"Maa, jossa päiväraha maksetaan. Voi olla tyhjä, jos ei määritelty.\"},\"isHalf\":{\"title\":\"Onko Puolikas\",\"descr\":\"Kertoo, onko kyseessä puolikas päiväraha. Voi olla tyhjä, jos ei määritelty.\"},\"kind\":{\"title\":\"Päivärahan Tyyppi\",\"descr\":\"Päivärahan tyyppi, joka määrittää sen laskentatavan. Voi olla tyhjä, jos ei määritelty.\"}},\"TaxWithholdingUsecase\":{\"title\":\"Veronpidätyksen Käyttötapaus\"},\"TotalWorkerPaymentUsecase\":{\"title\":\"Työntekijän Kokonaispalkan Käyttötapaus\",\"rowType\":{\"title\":\"Laskentarivin Tyyppi\",\"descr\":\"Määrittää laskentarivin tyypin, joka vaikuttaa kokonaispalkan laskentaan. Voi olla tyhjä, jos ei määritelty.\"},\"message\":{\"title\":\"Viesti\",\"descr\":\"Lisätietoja tai huomautuksia liittyen kokonaispalkan laskentaan. Voi olla tyhjä, jos ei määritelty.\"},\"kind\":{\"title\":\"Kokonaispalkan Tyyppi\",\"descr\":\"Määrittää kokonaispalkan tyypin, joka vaikuttaa sen laskentaan. Voi olla tyhjä, jos ei määritelty.\"}},\"BicycleBenefitUsecase\":{\"title\":\"Polkupyöräedun Käyttötapaus\",\"deduction\":{\"title\":\"Vähennys\",\"descr\":\"Polkupyöräedusta tehtävä vähennys. Voi olla tyhjä, jos ei määritelty.\"},\"taxable\":{\"title\":\"Verotettava Osuus\",\"descr\":\"Polkupyöräedun verotettava osuus. Voi olla tyhjä, jos ei määritelty.\"},\"periodDivider\":{\"title\":\"Jakson Jakaja\",\"descr\":\"Jakaa polkupyöräedun useammalle jaksolle. Voi olla tyhjä, jos ei määritelty.\"},\"kind\":{\"title\":\"Polkupyöräedun Tyyppi\",\"descr\":\"Määrittää polkupyöräedun tyypin. Voi olla tyhjä, jos ei määritelty.\"}},\"SubsidisedCommuteUsecase\":{\"title\":\"Subventoidun Työmatkan Käyttötapaus\",\"deduction\":{\"title\":\"Vähennys\",\"descr\":\"Subventoidusta työmatkasta tehtävä vähennys. Voi olla tyhjä, jos ei määritelty.\"},\"taxable\":{\"title\":\"Verotettava Osuus\",\"descr\":\"Subventoidun työmatkan verotettava osuus. Voi olla tyhjä, jos ei määritelty.\"},\"periodDivider\":{\"title\":\"Jakson Jakaja\",\"descr\":\"Jakaa subventoidun työmatkan useammalle jaksolle. Voi olla tyhjä, jos ei määritelty.\"},\"kind\":{\"title\":\"Subventoidun Työmatkan Tyyppi\",\"descr\":\"Määrittää subventoidun työmatkan tyypin. Voi olla tyhjä, jos ei määritelty.\"}},\"CarBenefitUsecase\":{\"title\":\"Auton Etuuden Käyttötapaus\",\"ageGroup\":{\"title\":\"Ikäryhmä\",\"descr\":\"Kohderyhmä, johon etuuden saaja kuuluu.\"},\"isKilometersBased\":{\"title\":\"Kilometriperusteinen\",\"descr\":\"Määrittää, perustuuko etuus ajettuihin kilometreihin.\"},\"kilometers\":{\"title\":\"Kilometrit\",\"descr\":\"Ajettujen kilometrien määrä, jos etuus on kilometriperusteinen.\"},\"emissionsValue\":{\"title\":\"Päästöarvo\",\"descr\":\"Auton päästöarvo, joka voi vaikuttaa etuuden laskentaan.\"},\"deduction\":{\"title\":\"Vähennys\",\"descr\":\"Mahdollinen vähennys etuuden arvosta.\"},\"kind\":{\"title\":\"Etuuden Tyyppi\",\"descr\":\"Auton etuuden tyyppi, joka määrittää etuuden luonteen.\"}},\"MealBenefitUsecase\":{\"title\":\"Ateriaedun Käyttötapaus\",\"deduction\":{\"title\":\"Vähennys\",\"descr\":\"Mahdollinen vähennys ateriaedun arvosta.\"},\"taxablePrice\":{\"title\":\"Verotettava Hinta\",\"descr\":\"Ateriaedun verotettava arvo.\"},\"isTaxValue\":{\"title\":\"Verotusarvo\",\"descr\":\"Määrittää, onko kyseessä verotusarvo.\"},\"isTaxValueDeductionDone\":{\"title\":\"Verotusarvon Vähennys Tehty\",\"descr\":\"Ilmaisee, onko verotusarvon vähennys jo tehty.\"},\"kind\":{\"title\":\"Etuuden Tyyppi\",\"descr\":\"Ateriaedun tyyppi, joka määrittää etuuden luonteen.\"}},\"UnionPaymentUsecase\":{\"title\":\"Liittomaksun Käyttötapaus\",\"referenceNumber\":{\"title\":\"Viitenumero\",\"descr\":\"Maksuun liittyvä viitenumero.\"},\"recipientFullName\":{\"title\":\"Saajan Koko Nimi\",\"descr\":\"Maksun saajan täydellinen nimi.\"},\"iban\":{\"title\":\"IBAN\",\"descr\":\"Saajan IBAN-tilinumero.\"}},\"AbsencePeriodUsecase\":{\"title\":\"Poissaolojaksotapaus\",\"isPaid\":{\"title\":\"Palkallinen\",\"descr\":\"Ilmaisee, onko poissaolo palkallinen.\"},\"isHolidayAccrual\":{\"title\":\"Lomakertymä\",\"descr\":\"Määrittää, kerryttääkö poissaolo lomapäiviä.\"},\"applyPricing\":{\"title\":\"Hinnoittelu Sovelletaan\",\"descr\":\"Ilmaisee, sovelletaanko poissaoloon hinnoittelua.\"}},\"ForeclosureUsecase\":{\"title\":\"Ulosmittauksen Käyttötapaus\",\"referenceNumber\":{\"title\":\"Viitenumero\",\"descr\":\"Ulosmittaukseen liittyvä viitenumero.\"},\"periodLength\":{\"title\":\"Jakson Pituus\",\"descr\":\"Ulosmittausjakson pituus kuukausina.\"},\"dependantsCount\":{\"title\":\"Huollettavien Määrä\",\"descr\":\"Huollettavien henkilöiden lukumäärä, joka vaikuttaa ulosmittaukseen.\"},\"protectedPortionBase\":{\"title\":\"Suojaosuuden Perusosa\",\"descr\":\"Suojaosuuden perusmäärä, joka jätetään velalliselle.\"},\"protectedPortionDependant\":{\"title\":\"Suojaosuus Huollettavalle\",\"descr\":\"Lisäosa suojaosuudesta, joka jätetään huollettaville.\"},\"incomeFromOtherSources\":{\"title\":\"Tulot Muista Lähteistä\",\"descr\":\"Velallisen tulot muista lähteistä, jotka vaikuttavat ulosmittaukseen.\"},\"additionalAmountLeftToDebtor\":{\"title\":\"Lisämäärä Velalliselle\",\"descr\":\"Lisämäärä, joka jätetään velalliselle ulosmittauksen jälkeen.\"},\"kind\":{\"title\":\"Ulosmittauksen Tyyppi\",\"descr\":\"Ulosmittauksen tyyppi, joka määrittää sen luonteen.\"}},\"SampleApiObject\":{\"title\":\"Näyte API -objekti\",\"id\":{\"title\":\"Tunniste\",\"descr\":\"Objektin yksilöllinen tunniste, voi olla tyhjä.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin objekti luotiin, voi olla tyhjä.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä, voi olla tyhjä.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Objektin omistajan tunniste, voi olla tyhjä.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko objekti vain luku -tilassa, voi olla tyhjä.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Yhteistyökumppanin tunniste, voi olla tyhjä.\"}},\"PageResultOfSampleListItem\":{\"title\":\"Näyteluettelon sivutulokset\",\"items\":{\"title\":\"Kohteet\",\"descr\":\"Luettelo näytekohteista, voi olla tyhjä.\"},\"nextPageLink\":{\"title\":\"Seuraavan sivun linkki\",\"descr\":\"Linkki seuraavalle sivulle, jos saatavilla, voi olla tyhjä.\"},\"count\":{\"title\":\"Lukumäärä\",\"descr\":\"Kohteiden kokonaismäärä, voi olla tyhjä.\"}},\"SampleListItem\":{\"title\":\"Näytekohde\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin kohde luotiin, voi olla tyhjä.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä, voi olla tyhjä.\"},\"ownerId\":{\"title\":\"Omistajan tunniste\",\"descr\":\"Kohteen omistajan tunniste, voi olla tyhjä.\"},\"ownerInfo\":{\"title\":\"Omistajan tiedot\",\"descr\":\"Tietoja kohteen omistajasta, voi olla tyhjä.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Kohteen nykyinen tila, voi olla tyhjä.\"},\"backOfficeStatus\":{\"title\":\"Back Office -tila\",\"descr\":\"Kohteen tila taustajärjestelmässä, voi olla tyhjä.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Kohteen aloituspäivämäärä, voi olla tyhjä.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Kohteen päättymispäivämäärä, voi olla tyhjä.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Kohteen bruttopalkka, voi olla tyhjä.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Kohteeseen liittyvä maksu, voi olla tyhjä.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Kohteeseen liittyvä palkkio, voi olla tyhjä.\"},\"otherId\":{\"title\":\"Muu tunniste\",\"descr\":\"Toinen kohteeseen liittyvä tunniste, voi olla tyhjä.\"},\"otherPartyInfo\":{\"title\":\"Toisen osapuolen tiedot\",\"descr\":\"Tietoja toisesta osapuolesta, voi olla tyhjä.\"},\"shortText\":{\"title\":\"Lyhyt teksti\",\"descr\":\"Lyhyt kuvaus kohteesta, voi olla tyhjä.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Luettelo liiketoimintaobjekteista, voi olla tyhjä.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan, voi olla tyhjä.\"},\"data\":{\"title\":\"Data\",\"descr\":\"Kohteeseen liittyvä data, voi olla tyhjä.\"},\"versionNumber\":{\"title\":\"Versio\",\"descr\":\"Kohteen versio, voi olla tyhjä.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Kohteen URI, voi olla tyhjä.\"},\"flags\":{\"title\":\"Liput\",\"descr\":\"Kohteeseen liittyvät liput, voi olla tyhjä.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Kohteeseen liittyvät viestit, voi olla tyhjä.\"},\"entityType\":{\"title\":\"Entiteettityyppi\",\"descr\":\"Kohteen entiteettityyppi, voi olla tyhjä.\"},\"logicalDate\":{\"title\":\"Looginen päivämäärä\",\"descr\":\"Kohteen looginen päivämäärä, voi olla tyhjä.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Kohteen viite, voi olla tyhjä.\"},\"externalId\":{\"title\":\"Ulkoinen tunniste\",\"descr\":\"Kohteen ulkoinen tunniste, voi olla tyhjä.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Kohteen yksilöllinen tunniste, voi olla tyhjä.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Kohteen omistajan tunniste, voi olla tyhjä.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko kohde vain luku -tilassa, voi olla tyhjä.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Yhteistyökumppanin tunniste, voi olla tyhjä.\"}},\"SampleData\":{\"title\":\"Näytedata\",\"test\":{\"title\":\"Testi\",\"descr\":\"Testidatan arvo, voi olla tyhjä.\"}},\"ServiceModel\":{\"title\":\"Palvelumalli\",\"name\":{\"title\":\"Nimi\",\"descr\":\"Palvelumallin nimi, voi olla tyhjä.\"},\"icon\":{\"title\":\"Ikoni\",\"descr\":\"Palvelumallin ikoni, voi olla tyhjä.\"},\"features\":{\"title\":\"Ominaisuudet\",\"descr\":\"Palvelumallin ominaisuudet, voi olla tyhjä.\"},\"calc\":{\"title\":\"Laskenta\",\"descr\":\"Laskentaan liittyvät tiedot, voi olla tyhjä.\"},\"accounting\":{\"title\":\"Kirjanpito\",\"descr\":\"Kirjanpitoon liittyvät tiedot, voi olla tyhjä.\"},\"costAccounting\":{\"title\":\"Kustannuslaskenta\",\"descr\":\"Kustannuslaskentaan liittyvät tiedot, voi olla tyhjä.\"},\"holiday\":{\"title\":\"Lomat\",\"descr\":\"Lomiin liittyvät tiedot, voi olla tyhjä.\"},\"pricing\":{\"title\":\"Hinnoittelu\",\"descr\":\"Hinnoitteluun liittyvät tiedot, voi olla tyhjä.\"},\"payments\":{\"title\":\"Maksut\",\"descr\":\"Maksuihin liittyvät tiedot, voi olla tyhjä.\"},\"branding\":{\"title\":\"Brändäys\",\"descr\":\"Brändäykseen liittyvät tiedot, voi olla tyhjä.\"},\"reporting\":{\"title\":\"Raportointi\",\"descr\":\"Raportointiin liittyvät tiedot, voi olla tyhjä.\"},\"site\":{\"title\":\"Sivusto\",\"descr\":\"Sivustoon liittyvät tiedot, voi olla tyhjä.\"},\"usecase\":{\"title\":\"Käyttötapaus\",\"descr\":\"Käyttötapaukseen liittyvät tiedot, voi olla tyhjä.\"},\"messaging\":{\"title\":\"Viestintä\",\"descr\":\"Viestintään liittyvät tiedot, voi olla tyhjä.\"},\"forms\":{\"title\":\"Lomakkeet\",\"descr\":\"Lomakkeisiin liittyvät tiedot, voi olla tyhjä.\"},\"workflowData\":{\"title\":\"Työprosessidata\",\"descr\":\"Työprosessiin liittyvä data, voi olla tyhjä.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Palvelumallin yksilöllinen tunniste, voi olla tyhjä.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin palvelumalli luotiin, voi olla tyhjä.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä, voi olla tyhjä.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Palvelumallin omistajan tunniste, voi olla tyhjä.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko palvelumalli vain luku -tilassa, voi olla tyhjä.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Yhteistyökumppanin tunniste, voi olla tyhjä.\"}},\"ServiceModelFeatures\":{\"title\":\"Palvelumallin Ominaisuudet\",\"calc\":{\"title\":\"Laskenta\",\"descr\":\"Mahdollistaa laskentatoimintojen käytön palvelussa.\"},\"messaging\":{\"title\":\"Viestintä\",\"descr\":\"Tarjoaa viestintäominaisuudet palvelun kautta.\"},\"forms\":{\"title\":\"Lomakkeet\",\"descr\":\"Mahdollistaa lomakkeiden luomisen ja hallinnan.\"},\"accounting\":{\"title\":\"Kirjanpito\",\"descr\":\"Sisältää kirjanpitotoiminnot taloushallintoon.\"},\"costAccounting\":{\"title\":\"Kustannuslaskenta\",\"descr\":\"Tarjoaa kustannuslaskennan ominaisuudet.\"},\"holiday\":{\"title\":\"Lomat\",\"descr\":\"Hallinnoi lomia ja niihin liittyviä asetuksia.\"},\"payments\":{\"title\":\"Maksut\",\"descr\":\"Mahdollistaa maksujen käsittelyn ja hallinnan.\"},\"reporting\":{\"title\":\"Raportointi\",\"descr\":\"Tarjoaa raportointityökalut liiketoiminnan analysointiin.\"},\"usecase\":{\"title\":\"Käyttötapaus\",\"descr\":\"Määrittelee palvelun käyttötapaukset ja niiden hallinnan.\"}},\"ServiceModelCalculation\":{\"title\":\"Palvelumallin Laskenta\",\"irDelivery\":{\"title\":\"IR-toimitus\",\"descr\":\"Määrittää IR-toimituksen asetukset ja hallinnan.\"}},\"ServiceModelAccounting\":{\"title\":\"Palvelumallin Kirjanpito\",\"defaultTargetId\":{\"title\":\"Oletustavoitteen Tunniste\",\"descr\":\"Määrittää oletustavoitteen tunnisteen kirjanpidossa.\"},\"defaultPeriodDateKind\":{\"title\":\"Oletusjakson Päivämäärätyyppi\",\"descr\":\"Määrittää oletusjakson päivämäärätyypin kirjanpidossa.\"},\"targets\":{\"title\":\"Tavoiteasetukset\",\"descr\":\"Sisältää kirjanpidon tavoiteasetukset ja niiden hallinnan.\"}},\"ServiceModelCostAccounting\":{\"title\":\"Palvelumallin Kustannuslaskenta\",\"dimensions\":{\"title\":\"Kustannuslaskennan Ulottuvuudet\",\"descr\":\"Määrittää kustannuslaskennan ulottuvuudet ja niiden hallinnan.\"}},\"ServiceModelHoliday\":{\"title\":\"Palvelumallin Lomat\",\"holidayPaySettings\":{\"title\":\"Lomapalkka-asetukset\",\"descr\":\"Määrittää lomapalkan laskennan ja hallinnan asetukset.\"},\"holidayAccrualSettings\":{\"title\":\"Lomakertymäasetukset\",\"descr\":\"Sisältää lomakertymän hallinnan ja laskennan asetukset.\"}},\"ServiceModelPricing\":{\"title\":\"Palvelumallin Hinnoittelu\",\"pricingModel\":{\"title\":\"Hinnoittelumalli\",\"descr\":\"Määrittää käytettävän hinnoittelumallin, jos sellainen on valittu.\"},\"fixedFee\":{\"title\":\"Kiinteä Maksu\",\"descr\":\"Palvelun mahdollinen kiinteä maksu, jos sellainen on määritelty.\"}},\"ServiceModelPayments\":{\"title\":\"Palvelumallin Maksut\",\"defaultChannel\":{\"title\":\"Oletusmaksukanava\",\"descr\":\"Määrittää oletusmaksukanavan, jota käytetään maksutapahtumiin, jos sellainen on valittu.\"},\"channels\":{\"title\":\"Maksukanavat\",\"descr\":\"Luettelo käytettävissä olevista maksukanavista ja niiden asetuksista.\"}},\"ServiceModelBranding\":{\"title\":\"Palvelumallin Brändäys\",\"logo\":{\"title\":\"Logo\",\"descr\":\"Yrityksen tai palvelun logo, jos sellainen on määritelty.\"},\"skin\":{\"title\":\"Ulkoasu\",\"descr\":\"Palvelun visuaalinen teema tai ulkoasu, jos sellainen on määritelty.\"}},\"ServiceModelReporting\":{\"title\":\"Palvelumallin Raportointi\",\"layoutTemplateId\":{\"title\":\"Raporttipohjan Tunniste\",\"descr\":\"Tunniste, joka viittaa käytettävään raporttipohjaan, jos sellainen on valittu.\"},\"layoutTemplateVariables\":{\"title\":\"Raporttipohjan Muuttujat\",\"descr\":\"Muuttujat, joita käytetään raporttipohjan mukauttamiseen, jos sellaisia on määritelty.\"},\"logo\":{\"title\":\"Raporttilogo\",\"descr\":\"Raporteissa käytettävä logo, jos sellainen on määritelty.\"}},\"ServiceModelSite\":{\"title\":\"Palvelumallin Sivusto\",\"webApp\":{\"title\":\"Asiakasverkkosovellus\",\"descr\":\"Asiakkaille tarjottava verkkosovellus, jos sellainen on määritelty.\"},\"webAppUrl\":{\"title\":\"Verkkosovelluksen URL\",\"descr\":\"Verkkosovelluksen verkko-osoite, jos sellainen on määritelty.\"},\"webAppName\":{\"title\":\"Verkkosovelluksen Nimi\",\"descr\":\"Verkkosovelluksen nimi, jos sellainen on määritelty.\"},\"texts\":{\"title\":\"Tekstit\",\"descr\":\"Mukautetut tekstit, joita käytetään verkkosovelluksessa.\"}},\"ServiceModelUsecase\":{\"title\":\"Palvelumallin Käyttötapaukset\",\"usecases\":{\"title\":\"Käyttötapaukset\",\"descr\":\"Lista liiketoimintakäyttötapauksista, joita palvelumalli tukee. Voi olla tyhjä, jos ei ole määritelty.\"}},\"ServiceModelMessaging\":{\"title\":\"Palvelumallin Viestintä\",\"partnerMessages\":{\"title\":\"Kumppaniviestit\",\"descr\":\"Määrittää, onko kumppaniviestintä käytössä palvelumallissa.\"},\"workerSalaryNotifications\":{\"title\":\"Työntekijän Palkkailmoitukset\",\"descr\":\"Lista ilmoituksista, jotka liittyvät työntekijöiden palkkoihin.\"},\"workerSalarySlipDeliveryMethods\":{\"title\":\"Palkkalaskelman Toimitustavat\",\"descr\":\"Mahdolliset toimitustavat työntekijöiden palkkalaskelmille.\"}},\"ServiceModelForms\":{\"title\":\"Palvelumallin Lomakkeet\"},\"IrDelivery\":{\"title\":\"IR Toimitus\",\"senderOfficialId\":{\"title\":\"Lähettäjän Virallinen Tunnus\",\"descr\":\"Lähettäjän virallinen tunnus, jota käytetään toimituksessa. Voi olla tyhjä, jos ei ole määritelty.\"},\"contactPersons\":{\"title\":\"Yhteyshenkilöt\",\"descr\":\"Lista yhteyshenkilöistä, jotka liittyvät toimitukseen. Voi olla tyhjä, jos ei ole määritelty.\"}},\"AccountingTargetSettings\":{\"title\":\"Kirjanpidon Kohdeasetukset\",\"id\":{\"title\":\"Tunnus\",\"descr\":\"Yksilöllinen tunnus kirjanpidon kohteelle. Voi olla tyhjä, jos ei ole määritelty.\"},\"channel\":{\"title\":\"Kanava\",\"descr\":\"Kirjanpidon tiedonsiirtokanava. Voi olla tyhjä, jos ei ole määritelty.\"},\"method\":{\"title\":\"Menetelmä\",\"descr\":\"Käytetty vientimenetelmä kirjanpidon tiedoille. Voi olla tyhjä, jos ei ole määritelty.\"},\"availableMethods\":{\"title\":\"Saatavilla Olevat Menetelmät\",\"descr\":\"Lista mahdollisista vientimenetelmistä kirjanpidon tiedoille.\"},\"format\":{\"title\":\"Muoto\",\"descr\":\"Tiedostomuoto, jota käytetään kirjanpidon viennissä. Voi olla tyhjä, jos ei ole määritelty.\"},\"webHookUrl\":{\"title\":\"WebHook URL\",\"descr\":\"URL-osoite, johon kirjanpidon tiedot voidaan lähettää. Voi olla tyhjä, jos ei ole määritelty.\"},\"avatar\":{\"title\":\"Avatar\",\"descr\":\"Visuaalinen tunnus kirjanpidon kohteelle. Voi olla tyhjä, jos ei ole määritelty.\"},\"data\":{\"title\":\"Data\",\"descr\":\"Muu kirjanpitoon liittyvä data, joka voi sisältää erilaisia avain-arvopareja.\"}},\"PaymentChannelSettings\":{\"title\":\"Maksukanavan asetukset\",\"channel\":{\"title\":\"Maksukanava\",\"descr\":\"Valittu maksukanava, jota käytetään maksutapahtumissa.\"},\"isEnabled\":{\"title\":\"Käytössä\",\"descr\":\"Ilmaisee, onko maksukanava tällä hetkellä käytössä.\"},\"isAvailable\":{\"title\":\"Saatavilla\",\"descr\":\"Ilmaisee, onko maksukanava saatavilla käytettäväksi.\"},\"data\":{\"title\":\"Lisätiedot\",\"descr\":\"Maksukanavaan liittyvät lisätiedot ja asetukset.\"}},\"UsecaseInSettings\":{\"title\":\"Käyttötapausasetukset\",\"uri\":{\"title\":\"URI\",\"descr\":\"Käyttötapauksen yksilöivä osoite tai tunniste.\"},\"itemType\":{\"title\":\"Kohdetyyppi\",\"descr\":\"Käyttötapauksen tyyppi tai luokitus.\"},\"label\":{\"title\":\"Nimike\",\"descr\":\"Käyttötapauksen kuvaava nimike tai otsikko.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Käyttötapauksen nykyinen tila tai vaihe.\"},\"order\":{\"title\":\"Järjestys\",\"descr\":\"Käyttötapauksen järjestysnumero tai prioriteetti.\"}},\"ContactPerson\":{\"title\":\"Yhteyshenkilö\",\"name\":{\"title\":\"Nimi\",\"descr\":\"Yhteyshenkilön koko nimi.\"},\"telephone\":{\"title\":\"Puhelinnumero\",\"descr\":\"Yhteyshenkilön puhelinnumero.\"},\"email\":{\"title\":\"Sähköposti\",\"descr\":\"Yhteyshenkilön sähköpostiosoite.\"},\"responsibilityCode\":{\"title\":\"Vastuukoodi\",\"descr\":\"Yhteyshenkilön vastuualueen koodi tai tunniste.\"}},\"PageResultOfServiceModelListItem\":{\"title\":\"Palvelumallin sivutulokset\",\"items\":{\"title\":\"Palvelumallit\",\"descr\":\"Luettelo palvelumalleista, jotka sisältyvät tähän sivuun.\"},\"nextPageLink\":{\"title\":\"Seuraavan sivun linkki\",\"descr\":\"Linkki seuraavaan sivuun, jos lisäpalvelumalleja on saatavilla.\"},\"count\":{\"title\":\"Määrä\",\"descr\":\"Palvelumallien kokonaismäärä tässä tulosjoukossa.\"}},\"ServiceModelListItem\":{\"title\":\"Palvelumallin kohde\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin palvelumalli luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin palvelumallia päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajan tunniste\",\"descr\":\"Palvelumallin omistajan yksilöivä tunniste.\"},\"ownerInfo\":{\"title\":\"Omistajan tiedot\",\"descr\":\"Tietoja palvelumallin omistajasta.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Palvelumallin nykyinen tila.\"},\"backOfficeStatus\":{\"title\":\"Taustatoimiston tila\",\"descr\":\"Palvelumallin tila taustatoimiston näkökulmasta.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin palvelumalli alkaa.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin palvelumalli päättyy.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Palvelumalliin liittyvä bruttopalkka.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Palvelumalliin liittyvä maksu.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Palvelumalliin liittyvä palkkio tai maksu.\"},\"otherId\":{\"title\":\"Muu tunniste\",\"descr\":\"Muu palvelumalliin liittyvä tunniste.\"},\"otherPartyInfo\":{\"title\":\"Muun osapuolen tiedot\",\"descr\":\"Tietoja palvelumalliin liittyvästä muusta osapuolesta.\"},\"shortText\":{\"title\":\"Lyhyt kuvaus\",\"descr\":\"Lyhyt kuvaus palvelumallista.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Palvelumalliin liittyvät liiketoimintaobjektit.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"data\":{\"title\":\"Lisätiedot\",\"descr\":\"Palvelumalliin liittyvät lisätiedot.\"},\"versionNumber\":{\"title\":\"Versio\",\"descr\":\"Palvelumallin versio.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Palvelumallin yksilöivä osoite tai tunniste.\"},\"flags\":{\"title\":\"Merkinnät\",\"descr\":\"Palvelumalliin liittyvät merkinnät tai liput.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Palvelumalliin liittyvät viestit tai ilmoitukset.\"},\"entityType\":{\"title\":\"Entiteettityyppi\",\"descr\":\"Palvelumallin entiteettityyppi tai luokitus.\"},\"logicalDate\":{\"title\":\"Looginen päivämäärä\",\"descr\":\"Palvelumalliin liittyvä looginen päivämäärä.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Palvelumalliin liittyvä viite tai tunniste.\"},\"externalId\":{\"title\":\"Ulkoinen tunniste\",\"descr\":\"Palvelumalliin liittyvä ulkoinen tunniste.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Palvelumallin yksilöivä tunniste.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Palvelumallin omistaja.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko palvelumalli vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Palvelumalliin liittyvä yhteistyökumppani.\"}},\"ServiceModelData\":{\"title\":\"Palvelumallin Tiedot\",\"partnerMessageAssignedTo\":{\"title\":\"Viestin Vastaanottaja\",\"descr\":\"Kumppanille osoitetun viestin vastaanottaja.\"},\"logo\":{\"title\":\"Yrityksen Logo\",\"descr\":\"Yrityksen visuaalinen tunnusmerkki.\"},\"skin\":{\"title\":\"Ulkoasu\",\"descr\":\"Palvelun visuaalinen teema tai ulkoasu.\"},\"webAppName\":{\"title\":\"Verkkosovelluksen Nimi\",\"descr\":\"Palvelun verkkosovelluksen nimi.\"},\"icon\":{\"title\":\"Sovelluskuvake\",\"descr\":\"Palvelun sovelluskuvake.\"}},\"UserSession\":{\"title\":\"Käyttäjäistunto\",\"isAuthorized\":{\"title\":\"Valtuutettu\",\"descr\":\"Kertoo, onko käyttäjä valtuutettu käyttämään palvelua.\"},\"hasCredential\":{\"title\":\"Tunnistetiedot\",\"descr\":\"Ilmaisee, onko käyttäjällä tarvittavat tunnistetiedot.\"},\"hasCurrentAccount\":{\"title\":\"Nykyinen Tili\",\"descr\":\"Kertoo, onko käyttäjällä aktiivinen tili.\"},\"status\":{\"title\":\"Valtuutuksen Tila\",\"descr\":\"Käyttäjän valtuutuksen nykyinen tila.\"},\"avatar\":{\"title\":\"Käyttäjäkuva\",\"descr\":\"Käyttäjän profiilikuva.\"},\"currentCredential\":{\"title\":\"Nykyiset Tunnistetiedot\",\"descr\":\"Käyttäjän nykyiset kirjautumistiedot.\"},\"currentAccount\":{\"title\":\"Nykyinen Vahvistettu Tili\",\"descr\":\"Käyttäjän nykyinen vahvistettu tili.\"},\"systemAlertHtml\":{\"title\":\"Järjestelmäilmoitus\",\"descr\":\"HTML-muotoinen järjestelmäilmoitus käyttäjälle.\"},\"settings\":{\"title\":\"Istunnon Asetukset\",\"descr\":\"Käyttäjän tilikohtaiset asetukset istunnon aikana.\"}},\"IVerifiedAccount\":{\"title\":\"Vahvistettu Tili\",\"identity\":{\"title\":\"Henkilöllisyys\",\"descr\":\"Käyttäjän henkilöllisyystiedot.\"},\"isVerified\":{\"title\":\"Vahvistettu\",\"descr\":\"Kertoo, onko tili vahvistettu.\"},\"avatar\":{\"title\":\"Profiilikuva\",\"descr\":\"Käyttäjän profiilikuva.\"},\"contact\":{\"title\":\"Yhteystiedot\",\"descr\":\"Käyttäjän yhteystiedot.\"},\"language\":{\"title\":\"Kieli\",\"descr\":\"Käyttäjän valitsema kieli.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Tilin luontipäivämäärä.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Tilin viimeisin päivityspäivämäärä.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Tilin yksilöllinen tunniste.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Tilin omistaja.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Kertoo, onko tili vain lukuoikeudellinen.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Tilin liittyvä kumppani.\"}},\"AccountSettingsInSession\":{\"title\":\"Istunnon Tiliasetukset\",\"pensionContracts\":{\"title\":\"Eläkesopimukset\",\"descr\":\"Käyttäjän eläkesopimukset.\"},\"insuranceContracts\":{\"title\":\"Vakuutussopimukset\",\"descr\":\"Käyttäjän vakuutussopimukset.\"},\"hasCustomReport\":{\"title\":\"Mukautettu Raportti\",\"descr\":\"Ilmaisee, onko käyttäjällä mukautettu raportti.\"},\"accountingTarget\":{\"title\":\"Kirjanpidon Kohde\",\"descr\":\"Kirjanpidon kohdeasetukset.\"},\"partner\":{\"title\":\"Ensisijainen Kumppani\",\"descr\":\"Käyttäjän ensisijaiset kumppaniasetukset.\"},\"paymentChannels\":{\"title\":\"Maksukanavat\",\"descr\":\"Käytettävissä olevat maksukanavat.\"},\"defaultPaymentChannel\":{\"title\":\"Oletusmaksukanava\",\"descr\":\"Käyttäjän oletusmaksukanava.\"},\"usecases\":{\"title\":\"Käyttötapaukset\",\"descr\":\"Istunnon aikana käytettävät käyttötapaukset.\"},\"integration\":{\"title\":\"Integraatio\",\"descr\":\"Istunnon integraatioasetukset.\"},\"partnerMessages\":{\"title\":\"Kumppaniviestit\",\"descr\":\"Ilmaisee, onko kumppaniviestit käytössä.\"},\"costAccounting\":{\"title\":\"Kustannuslaskenta\",\"descr\":\"Istunnon kustannuslaskenta-asetukset.\"},\"forms\":{\"title\":\"Lomakkeet\",\"descr\":\"Istunnon aikana käytettävät lomakkeet.\"}},\"PensionContract\":{\"title\":\"Eläkesopimus\",\"company\":{\"title\":\"Eläkeyhtiö\",\"descr\":\"Eläkesopimuksen tarjoava yhtiö.\"},\"contractNumber\":{\"title\":\"Sopimusnumero\",\"descr\":\"Eläkesopimuksen numero.\"},\"subOrgCode\":{\"title\":\"Alayksikön Koodi\",\"descr\":\"Alayksikön tunnistekoodi.\"},\"pensionDiscountPercent\":{\"title\":\"Eläkealennusprosentti\",\"descr\":\"Eläkesopimuksen alennusprosentti.\"},\"pensionPercent\":{\"title\":\"Eläkeprosentti\",\"descr\":\"Eläkesopimuksen eläkeprosentti.\"},\"pensionDefaultPercent\":{\"title\":\"Oletuseläkeprosentti\",\"descr\":\"Eläkesopimuksen oletuseläkeprosentti.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Eläkesopimuksen yksilöllinen tunniste.\"},\"status\":{\"title\":\"Sopimuksen Tila\",\"descr\":\"Eläkesopimuksen nykyinen tila.\"},\"startDate\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Eläkesopimuksen aloituspäivämäärä.\"},\"endDate\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Eläkesopimuksen päättymispäivämäärä.\"}},\"InsuranceContract\":{\"title\":\"Vakuutussopimus\",\"isPartnerInsurance\":{\"title\":\"Kumppanivakuutus\",\"descr\":\"Ilmaisee, onko vakuutus kumppanin tarjoama.\"},\"company\":{\"title\":\"Vakuutusyhtiö\",\"descr\":\"Vakuutuksen tarjoava yhtiö.\"},\"contractNumber\":{\"title\":\"Sopimusnumero\",\"descr\":\"Vakuutussopimuksen yksilöllinen tunniste.\"},\"insurancePercent\":{\"title\":\"Vakuutusprosentti\",\"descr\":\"Vakuutuksen kattavuusprosentti.\"},\"groupLifeInsurancePercent\":{\"title\":\"Ryhmähenkivakuutusprosentti\",\"descr\":\"Ryhmähenkivakuutuksen kattavuusprosentti.\"},\"side\":{\"title\":\"Sopimuksen puoli\",\"descr\":\"Sopimuksen puoli, jätetään tyhjäksi uusille sopimuksille.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Vakuutussopimuksen yksilöllinen tunniste.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Vakuutussopimuksen nykyinen tila.\"},\"startDate\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin vakuutussopimus alkaa.\"},\"year\":{\"title\":\"Vuosi\",\"descr\":\"Sopimuksen voimassaolovuosi, päättyy 31.12.\"},\"endDate\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin vakuutussopimus päättyy.\"}},\"PrimaryPartnerSettings\":{\"title\":\"Ensisijaisen kumppanin asetukset\",\"accountId\":{\"title\":\"Tilin tunniste\",\"descr\":\"Kumppanin tilin yksilöllinen tunniste.\"},\"info\":{\"title\":\"Kirjanpitäjän tiedot\",\"descr\":\"Kumppanin kirjanpitäjän tiedot.\"},\"type\":{\"title\":\"Kirjanpitäjän tyyppi\",\"descr\":\"Kumppanin kirjanpitäjän tyyppi.\"},\"serviceModelId\":{\"title\":\"Palvelumallin tunniste\",\"descr\":\"Kumppanin palvelumallin yksilöllinen tunniste.\"},\"serviceModel\":{\"title\":\"Palvelumalli\",\"descr\":\"Kumppanin tarjoama palvelumalli.\"}},\"IntegrationInSession\":{\"title\":\"Integraatio istunnossa\",\"serverUrl\":{\"title\":\"Palvelimen URL\",\"descr\":\"Integraation palvelimen osoite.\"}},\"CostAccountingInSession\":{\"title\":\"Kustannuslaskenta istunnossa\",\"dimensions\":{\"title\":\"Kustannuslaskennan ulottuvuudet\",\"descr\":\"Määritelmät kustannuslaskennan ulottuvuuksille.\"}},\"FormsInSession\":{\"title\":\"Lomakkeet istunnossa\"},\"AccountantInfo\":{\"title\":\"Kirjanpitäjän Tiedot\",\"avatar\":{\"title\":\"Profiilikuva\",\"descr\":\"Kirjanpitäjän henkilökohtainen profiilikuva, joka voi olla valinnainen.\"},\"officialId\":{\"title\":\"Virallinen Tunnus\",\"descr\":\"Kirjanpitäjän virallinen tunnus, kuten henkilötunnus tai muu tunniste.\"},\"email\":{\"title\":\"Sähköposti\",\"descr\":\"Kirjanpitäjän sähköpostiosoite yhteydenpitoa varten.\"},\"telephone\":{\"title\":\"Puhelinnumero\",\"descr\":\"Kirjanpitäjän puhelinnumero yhteydenottoa varten.\"},\"ibanNumber\":{\"title\":\"IBAN-numero\",\"descr\":\"Kirjanpitäjän pankkitilin IBAN-numero maksutapahtumia varten.\"}},\"PartnerServiceModel\":{\"title\":\"Kumppanin Palvelumalli\",\"features\":{\"title\":\"Ominaisuudet\",\"descr\":\"Kumppanin tarjoamat palveluominaisuudet.\"},\"pricing\":{\"title\":\"Hinnoittelu\",\"descr\":\"Kumppanin palveluiden hinnoittelumalli.\"},\"branding\":{\"title\":\"Brändäys\",\"descr\":\"Kumppanin palveluiden brändäykseen liittyvät tiedot.\"},\"site\":{\"title\":\"Sivusto\",\"descr\":\"Kumppanin palveluiden verkkosivustoon liittyvät tiedot.\"}},\"CompanyAccountSettings\":{\"title\":\"Yrityksen Tiliasetukset\",\"calc\":{\"title\":\"Laskenta-asetukset\",\"descr\":\"Yrityksen laskentaan liittyvät asetukset ja määrittelyt.\"},\"reporting\":{\"title\":\"Raportointiasetukset\",\"descr\":\"Yrityksen raportointiin liittyvät asetukset ja mallipohjat.\"},\"partner\":{\"title\":\"Ensisijaisen Kumppanin Asetukset\",\"descr\":\"Ensisijaisen liikekumppanin kanssa sovitut asetukset.\"},\"accounting\":{\"title\":\"Kirjanpitoasetukset\",\"descr\":\"Yrityksen kirjanpitoon liittyvät asetukset ja käytännöt.\"},\"costAccounting\":{\"title\":\"Kustannuslaskenta-asetukset\",\"descr\":\"Yrityksen kustannuslaskentaan liittyvät asetukset.\"},\"holiday\":{\"title\":\"Loma-asetukset\",\"descr\":\"Yrityksen lomiin ja vapaisiin liittyvät asetukset.\"},\"payments\":{\"title\":\"Maksuasetukset\",\"descr\":\"Yrityksen maksuliikenteeseen liittyvät asetukset.\"},\"usecase\":{\"title\":\"Käyttötapausasetukset\",\"descr\":\"Yrityksen erityisiin käyttötapauksiin liittyvät asetukset.\"},\"messaging\":{\"title\":\"Viestintäasetukset\",\"descr\":\"Yrityksen sisäiseen ja ulkoiseen viestintään liittyvät asetukset.\"},\"forms\":{\"title\":\"Lomakeasetukset\",\"descr\":\"Yrityksen käyttämien lomakkeiden asetukset.\"},\"id\":{\"title\":\"Tunnus\",\"descr\":\"Yrityksen tiliasetusten yksilöllinen tunniste.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin tiliasetukset luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin tiliasetuksia päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Henkilö tai taho, joka omistaa tiliasetukset.\"},\"isReadOnly\":{\"title\":\"Vain Luku -tila\",\"descr\":\"Indikaatio siitä, ovatko tiliasetukset vain luku -tilassa.\"}},\"CalculationSettings\":{\"title\":\"Laskenta-asetukset\",\"denyServiceModel\":{\"title\":\"Palvelumallin Estäminen\",\"descr\":\"Mahdollisuus estää tiettyjen palvelumallien käyttö laskennassa.\"},\"pensionContracts\":{\"title\":\"Eläkesopimukset\",\"descr\":\"Yrityksen tekemät eläkesopimukset henkilöstölle.\"},\"insuranceContracts\":{\"title\":\"Vakuutussopimukset\",\"descr\":\"Yrityksen vakuutussopimukset eri riskien kattamiseksi.\"},\"unemploymentInsurance\":{\"title\":\"Työttömyysvakuutusasetukset\",\"descr\":\"Yrityksen työttömyysvakuutukseen liittyvät asetukset.\"},\"incomesRegister\":{\"title\":\"Tulorekisteriasetukset\",\"descr\":\"Yrityksen tulorekisteriin liittyvät asetukset ja ilmoitukset.\"},\"salaryDefaults\":{\"title\":\"Palkkaoletukset\",\"descr\":\"Yrityksen oletusarvot palkkojen laskentaan.\"}},\"ReportingSettings\":{\"title\":\"Raportointiasetukset\",\"denyServiceModel\":{\"title\":\"Palvelumallin Estäminen\",\"descr\":\"Mahdollisuus estää tiettyjen palvelumallien käyttö raportoinnissa.\"},\"layoutTemplateId\":{\"title\":\"Asettelu Mallipohjan Tunnus\",\"descr\":\"Tunniste, joka viittaa käytettävään raportin asettelumallipohjaan.\"},\"layoutTemplateVariables\":{\"title\":\"Asettelu Mallipohjan Muuttujat\",\"descr\":\"Muuttujat, joita käytetään raportin asettelumallipohjassa.\"},\"logo\":{\"title\":\"Logo\",\"descr\":\"Yrityksen logo, joka sisällytetään raportteihin.\"}},\"AccountingSettings\":{\"title\":\"Kirjanpidon asetukset\",\"denyServiceModel\":{\"title\":\"Palvelumallin estäminen\",\"descr\":\"Määrittää, onko palvelumallin käyttö estetty kirjanpidossa.\"},\"defaultTargetId\":{\"title\":\"Oletuskohteen tunniste\",\"descr\":\"Asettaa oletuskohteen tunnisteen kirjanpitotapahtumille.\"},\"targets\":{\"title\":\"Kirjanpitokohteet\",\"descr\":\"Määrittelee käytettävissä olevat kirjanpitokohteet.\"},\"defaultPeriodDateKind\":{\"title\":\"Oletusjakson päivämäärätyyppi\",\"descr\":\"Asettaa oletusarvoisen päivämäärätyypin kirjanpitojaksoille.\"},\"reportDelivery\":{\"title\":\"Raporttien toimitus\",\"descr\":\"Määrittää, miten kirjanpitoraportit toimitetaan.\"},\"accountantReportDelivery\":{\"title\":\"Tilitoimiston raporttien toimitus\",\"descr\":\"Määrittää, miten raportit toimitetaan tilitoimistolle.\"}},\"CostAccountingSettings\":{\"title\":\"Kustannuslaskennan asetukset\",\"denyServiceModel\":{\"title\":\"Palvelumallin estäminen\",\"descr\":\"Määrittää, onko palvelumallin käyttö estetty kustannuslaskennassa.\"},\"dimensions\":{\"title\":\"Kustannuslaskennan dimensioiden määrittely\",\"descr\":\"Määrittelee kustannuslaskennassa käytettävät dimensioiden määrittelyt.\"}},\"HolidaySettings\":{\"title\":\"Loma-asetukset\",\"denyServiceModel\":{\"title\":\"Palvelumallin estäminen\",\"descr\":\"Määrittää, onko palvelumallin käyttö estetty loma-asetuksissa.\"},\"holidayPaySettings\":{\"title\":\"Lomapalkka-asetukset\",\"descr\":\"Määrittelee lomapalkan laskentaan liittyvät asetukset.\"},\"holidayAccrualSettings\":{\"title\":\"Lomakertymäasetukset\",\"descr\":\"Määrittelee lomakertymän laskentaan liittyvät asetukset.\"}},\"PaymentSettings\":{\"title\":\"Maksuasetukset\",\"denyServiceModel\":{\"title\":\"Palvelumallin estäminen\",\"descr\":\"Määrittää, onko palvelumallin käyttö estetty maksuasetuksissa.\"},\"customerFunds\":{\"title\":\"Asiakasvarat\",\"descr\":\"Määrittelee asiakasvarojen hallintaan liittyvät asetukset.\"},\"invoice\":{\"title\":\"Laskutusasetukset\",\"descr\":\"Määrittelee laskutukseen liittyvät asetukset.\"},\"defaultChannel\":{\"title\":\"Oletusmaksukanava\",\"descr\":\"Asettaa oletusmaksukanavan maksutapahtumille.\"},\"channels\":{\"title\":\"Maksukanavat\",\"descr\":\"Määrittelee käytettävissä olevat maksukanavat.\"}},\"UsecaseSettings\":{\"title\":\"Käyttötapausasetukset\",\"denyServiceModel\":{\"title\":\"Palvelumallin estäminen\",\"descr\":\"Määrittää, onko palvelumallin käyttö estetty käyttötapausasetuksissa.\"},\"usecases\":{\"title\":\"Käyttötapaukset\",\"descr\":\"Määrittelee käytettävissä olevat käyttötapaukset.\"},\"serverUrl\":{\"title\":\"Palvelimen URL-osoite\",\"descr\":\"Asettaa palvelimen URL-osoitteen käyttötapauksille.\"}},\"MessagingSettings\":{\"title\":\"Viestintäasetukset\",\"denyServiceModel\":{\"title\":\"Palvelumallin estäminen\",\"descr\":\"Määrittää, onko palvelumallin käyttö estetty viestinnässä.\"},\"partnerMessages\":{\"title\":\"Kumppaniviestit\",\"descr\":\"Määrittää, sallitaanko viestien lähettäminen liikekumppaneille.\"},\"workerSalaryNotifications\":{\"title\":\"Työntekijän palkkailmoitukset\",\"descr\":\"Sisältää asetukset työntekijöille lähetettäville palkkailmoituksille.\"},\"workerSalarySlipDeliveryMethods\":{\"title\":\"Palkkalaskelman toimitustavat\",\"descr\":\"Määrittää, miten työntekijöiden palkkalaskelmat toimitetaan.\"}},\"FormsSettings\":{\"title\":\"Lomakeasetukset\",\"denyServiceModel\":{\"title\":\"Palvelumallin estäminen\",\"descr\":\"Määrittää, onko palvelumallin käyttö estetty lomakkeissa.\"}},\"UnemploymentInsuranceSettings\":{\"title\":\"Työttömyysvakuutusasetukset\",\"payrollLimitStatus\":{\"title\":\"Palkkarajan tila\",\"descr\":\"Määrittää työttömyysvakuutuksen palkkarajan nykyisen tilan.\"}},\"IncomesRegisterSettings\":{\"title\":\"Tulorekisteriasetukset\",\"taxReferenceNumber\":{\"title\":\"Veroviitenumero\",\"descr\":\"Yrityksen verotukseen liittyvä viitenumero.\"},\"irReporting\":{\"title\":\"Tulorekisteriraportointi\",\"descr\":\"Määrittää, miten tulorekisteriraportointi käsitellään.\"},\"irDelivery\":{\"title\":\"Tulorekisterin toimitus\",\"descr\":\"Määrittää, miten tulorekisteritiedot toimitetaan viranomaisille.\"}},\"RowTypeDefinition\":{\"title\":\"Rivityypin määrittely\",\"config\":{\"title\":\"Konfiguraatio\",\"descr\":\"Sisältää rivityypin mukautettavat asetukset.\"}},\"AccountingReportDelivery\":{\"title\":\"Kirjanpitoraportin Toimitus\",\"isEnabled\":{\"title\":\"Toimitus Käytössä\",\"descr\":\"Määrittää, onko kirjanpitoraporttien toimitus aktivoitu.\"},\"address\":{\"title\":\"Toimitusosoite\",\"descr\":\"Osoite, johon kirjanpitoraportit toimitetaan.\"}},\"CustomerFundsSettings\":{\"title\":\"Asiakasvarojen Asetukset\",\"isWorkerSelfHandling\":{\"title\":\"Työntekijän Oma Käsittely\",\"descr\":\"Määrittää, käsitteleekö työntekijä itse omat varansa.\"},\"isPensionSelfHandling\":{\"title\":\"Eläkkeen Oma Käsittely\",\"descr\":\"Määrittää, käsitteleekö työntekijä itse eläkevaransa.\"},\"isTaxAndSocialSecuritySelfHandling\":{\"title\":\"Veron ja Sosiaaliturvan Oma Käsittely\",\"descr\":\"Määrittää, käsitteleekö työntekijä itse verot ja sosiaaliturvamaksut.\"}},\"ReportingLayoutTemplate\":{\"title\":\"Raportointiasettelun Malli\"},\"ReportingArea\":{\"title\":\"Raportointialue\",\"top\":{\"title\":\"Yläreuna\",\"descr\":\"Raportointialueen yläreunan etäisyys.\"},\"right\":{\"title\":\"Oikea Reuna\",\"descr\":\"Raportointialueen oikean reunan etäisyys.\"},\"bottom\":{\"title\":\"Alareuna\",\"descr\":\"Raportointialueen alareunan etäisyys.\"},\"left\":{\"title\":\"Vasen Reuna\",\"descr\":\"Raportointialueen vasemman reunan etäisyys.\"}},\"PageResultOfBrandListItem\":{\"title\":\"Tuotemerkkilistauksen Sivutulos\",\"items\":{\"title\":\"Tuotemerkkikohteet\",\"descr\":\"Luettelo tuotemerkkikohteista nykyisellä sivulla.\"},\"nextPageLink\":{\"title\":\"Seuraavan Sivun Linkki\",\"descr\":\"Linkki seuraavalle sivulle, jos sellainen on saatavilla.\"},\"count\":{\"title\":\"Kohteiden Määrä\",\"descr\":\"Nykyisellä sivulla olevien tuotemerkkikohteiden kokonaismäärä.\"}},\"BrandListItem\":{\"title\":\"Brändin Listan Kohde\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin brändikohde luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin brändikohdetta viimeksi päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajan Tunniste\",\"descr\":\"Brändikohteen omistajan yksilöivä tunniste.\"},\"ownerInfo\":{\"title\":\"Omistajan Tiedot\",\"descr\":\"Tietoa brändikohteen omistajasta.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Brändikohteen nykyinen tila.\"},\"backOfficeStatus\":{\"title\":\"Taustatoimiston Tila\",\"descr\":\"Brändikohteen tila taustatoimiston näkökulmasta.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin brändikohde alkaa.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin brändikohde päättyy.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Brändikohteeseen liittyvä bruttopalkka.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Brändikohteeseen liittyvä maksu.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Brändikohteeseen liittyvä palkkio.\"},\"otherId\":{\"title\":\"Toisen Osapuolen Tunniste\",\"descr\":\"Toisen osapuolen yksilöivä tunniste brändikohteessa.\"},\"otherPartyInfo\":{\"title\":\"Toisen Osapuolen Tiedot\",\"descr\":\"Tietoa toisesta osapuolesta brändikohteessa.\"},\"shortText\":{\"title\":\"Lyhyt Teksti\",\"descr\":\"Lyhyt kuvaus brändikohteesta.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Liiketoimintaobjektit, jotka liittyvät brändikohteeseen.\"},\"salaryDate\":{\"title\":\"Palkkapäivämäärä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan brändikohteessa.\"},\"data\":{\"title\":\"Brändin Tiedot\",\"descr\":\"Brändikohteeseen liittyvät yksityiskohtaiset tiedot.\"},\"versionNumber\":{\"title\":\"Versio Numero\",\"descr\":\"Brändikohteen versionumero.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Brändikohteen yksilöivä URI.\"},\"flags\":{\"title\":\"Liput\",\"descr\":\"Erityiset merkit tai liput brändikohteelle.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Brändikohteeseen liittyvät viestit.\"},\"entityType\":{\"title\":\"Entiteetin Tyyppi\",\"descr\":\"Brändikohteen entiteetin tyyppi.\"},\"logicalDate\":{\"title\":\"Looginen Päivämäärä\",\"descr\":\"Looginen päivämäärä brändikohteelle.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Viitenumero tai tunniste brändikohteelle.\"},\"externalId\":{\"title\":\"Ulkoinen Tunniste\",\"descr\":\"Ulkoinen tunniste, joka liittyy brändikohteeseen.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Brändikohteen yksilöivä tunniste.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Brändikohteen omistaja.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Ilmaisee, onko brändikohde vain luku -muodossa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Brändikohteeseen liittyvä yhteistyökumppani.\"}},\"BrandData\":{\"title\":\"Brändin Tiedot\",\"logo\":{\"title\":\"Logo\",\"descr\":\"Brändin visuaalinen tunnus.\"},\"skin\":{\"title\":\"Ulkoasu\",\"descr\":\"Brändin ulkoasu tai teema.\"}},\"PageResultOfPrimaryPartnerListItem\":{\"title\":\"Ensisijaisen Kumppanin Listan Sivutulos\",\"items\":{\"title\":\"Kohteet\",\"descr\":\"Lista ensisijaisista kumppanikohteista.\"},\"nextPageLink\":{\"title\":\"Seuraavan Sivun Linkki\",\"descr\":\"Linkki seuraavalle sivulle kumppanilistassa.\"},\"count\":{\"title\":\"Kohteiden Lukumäärä\",\"descr\":\"Kumppanilistassa olevien kohteiden kokonaismäärä.\"}},\"PrimaryPartnerListItem\":{\"title\":\"Ensisijaisen Kumppanin Listan Kohde\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin kumppanikohde luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Päivämäärä, jolloin kumppanikohdetta viimeksi päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajan Tunniste\",\"descr\":\"Kumppanikohteen omistajan yksilöivä tunniste.\"},\"ownerInfo\":{\"title\":\"Omistajan Tiedot\",\"descr\":\"Tietoa kumppanikohteen omistajasta.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Kumppanikohteen nykyinen tila.\"},\"backOfficeStatus\":{\"title\":\"Taustatoimiston Tila\",\"descr\":\"Kumppanikohteen tila taustatoimiston näkökulmasta.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin kumppanikohde alkaa.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin kumppanikohde päättyy.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Kumppanikohteeseen liittyvä bruttopalkka.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Kumppanikohteeseen liittyvä maksu.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Kumppanikohteeseen liittyvä palkkio.\"},\"otherId\":{\"title\":\"Toisen Osapuolen Tunniste\",\"descr\":\"Toisen osapuolen yksilöivä tunniste kumppanikohteessa.\"},\"otherPartyInfo\":{\"title\":\"Toisen Osapuolen Tiedot\",\"descr\":\"Tietoa toisesta osapuolesta kumppanikohteessa.\"},\"shortText\":{\"title\":\"Lyhyt Teksti\",\"descr\":\"Lyhyt kuvaus kumppanikohteesta.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Liiketoimintaobjektit, jotka liittyvät kumppanikohteeseen.\"},\"salaryDate\":{\"title\":\"Palkkapäivämäärä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan kumppanikohteessa.\"},\"data\":{\"title\":\"Kumppanin Tiedot\",\"descr\":\"Kumppanikohteeseen liittyvät yksityiskohtaiset tiedot.\"},\"versionNumber\":{\"title\":\"Versio Numero\",\"descr\":\"Kumppanikohteen versionumero.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Kumppanikohteen yksilöivä URI.\"},\"flags\":{\"title\":\"Liput\",\"descr\":\"Erityiset merkit tai liput kumppanikohteelle.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Kumppanikohteeseen liittyvät viestit.\"},\"entityType\":{\"title\":\"Entiteetin Tyyppi\",\"descr\":\"Kumppanikohteen entiteetin tyyppi.\"},\"logicalDate\":{\"title\":\"Looginen Päivämäärä\",\"descr\":\"Looginen päivämäärä kumppanikohteelle.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Viitenumero tai tunniste kumppanikohteelle.\"},\"externalId\":{\"title\":\"Ulkoinen Tunniste\",\"descr\":\"Ulkoinen tunniste, joka liittyy kumppanikohteeseen.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Kumppanikohteen yksilöivä tunniste.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Kumppanikohteen omistaja.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Ilmaisee, onko kumppanikohde vain luku -muodossa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Kumppanikohteeseen liittyvä yhteistyökumppani.\"}},\"PrimaryPartnerData\":{\"title\":\"Ensisijaisen Kumppanin Tiedot\",\"key\":{\"title\":\"Avain\",\"descr\":\"Kumppanin yksilöivä avain.\"},\"name\":{\"title\":\"Nimi\",\"descr\":\"Kumppanin nimi.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Kumppanin kuvaus tai lisätiedot.\"}},\"TaxcardResult\":{\"title\":\"Verokortin Tulos\",\"yearlyPreviousIncome\":{\"title\":\"Edellisen Vuoden Tulot\",\"descr\":\"Edellisen vuoden aikana ansaitut tulot, jotka voivat vaikuttaa nykyiseen verokorttiin.\"},\"tax\":{\"title\":\"Vero\",\"descr\":\"Nykyisen verokortin mukainen veroprosentti tai -määrä.\"}},\"PageResultOfTaxcardListItem\":{\"title\":\"Verokorttilistan Sivun Tulos\",\"items\":{\"title\":\"Verokorttilista\",\"descr\":\"Lista verokorttikohteista, jotka kuuluvat tälle sivulle.\"},\"nextPageLink\":{\"title\":\"Seuraavan Sivun Linkki\",\"descr\":\"Linkki seuraavalle sivulle, jos kohteita on enemmän.\"},\"count\":{\"title\":\"Kohteiden Lukumäärä\",\"descr\":\"Tämän sivun verokorttikohteiden kokonaismäärä.\"}},\"TaxcardListItem\":{\"title\":\"Verokorttilistan Kohde\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin verokortti luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin verokorttia päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajan Tunniste\",\"descr\":\"Verokortin omistajan yksilöllinen tunniste.\"},\"ownerInfo\":{\"title\":\"Omistajan Tiedot\",\"descr\":\"Tietoja verokortin omistajasta.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Verokortin nykyinen tila.\"},\"backOfficeStatus\":{\"title\":\"Taustatoimiston Tila\",\"descr\":\"Verokortin käsittelyn tila taustatoimistossa.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin verokortti tulee voimaan.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin verokortti lakkaa olemasta voimassa.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Verokorttiin liittyvä bruttopalkka.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Verokorttiin liittyvä maksu.\"},\"fee\":{\"title\":\"Maksu\",\"descr\":\"Mahdollinen maksu verokortin käsittelystä.\"},\"otherId\":{\"title\":\"Toisen Osapuolen Tunniste\",\"descr\":\"Toisen osapuolen yksilöllinen tunniste verokortissa.\"},\"otherPartyInfo\":{\"title\":\"Toisen Osapuolen Tiedot\",\"descr\":\"Tietoja toisesta osapuolesta verokortissa.\"},\"shortText\":{\"title\":\"Lyhyt Teksti\",\"descr\":\"Lyhyt kuvaus tai huomautus verokortista.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Liiketoimintaobjektit, jotka liittyvät verokorttiin.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan verokortin mukaan.\"},\"data\":{\"title\":\"Verokorttitiedot\",\"descr\":\"Yksityiskohtaiset tiedot verokortista.\"},\"versionNumber\":{\"title\":\"Versio Numero\",\"descr\":\"Verokortin versionumero.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Verokortin yksilöllinen resurssitunniste.\"},\"flags\":{\"title\":\"Liput\",\"descr\":\"Erityiset merkit tai indikaattorit verokortissa.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Viestit tai huomautukset liittyen verokorttiin.\"},\"entityType\":{\"title\":\"Entiteetin Tyyppi\",\"descr\":\"Verokortin liittyvän entiteetin tyyppi.\"},\"logicalDate\":{\"title\":\"Looginen Päivämäärä\",\"descr\":\"Verokortin looginen päivämäärä, mahdollisesti liiketoimintaprosessiin liittyvä.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Viitenumero tai tunniste verokortille.\"},\"externalId\":{\"title\":\"Ulkoinen Tunniste\",\"descr\":\"Verokortin ulkoinen tunniste, mahdollisesti toisesta järjestelmästä.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Verokortin yksilöllinen tunniste.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Verokortin omistaja.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Indikaattori siitä, onko verokortti vain lukuoikeudella.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Verokorttiin liittyvä liikekumppani.\"}},\"TaxcardData\":{\"title\":\"Verokorttitiedot\",\"forYear\":{\"title\":\"Vuodelle\",\"descr\":\"Vuosi, jolle verokortti on tarkoitettu.\"},\"taxPercent\":{\"title\":\"Veroprosentti\",\"descr\":\"Verokortin mukainen veroprosentti.\"},\"incomeLimit\":{\"title\":\"Tuloraja\",\"descr\":\"Tulojen enimmäismäärä, johon verokortti soveltuu.\"},\"totalIncome\":{\"title\":\"Kokonaistulot\",\"descr\":\"Verokortin mukaiset kokonaistulot.\"},\"taxPercent2\":{\"title\":\"Toissijainen Veroprosentti\",\"descr\":\"Toinen veroprosentti, joka voi tulla voimaan tiettyjen ehtojen täyttyessä.\"},\"taxPercentMin\":{\"title\":\"Minimiveroprosentti\",\"descr\":\"Verokortin mukainen minimiveroprosentti.\"},\"incomeType\":{\"title\":\"Tulon Tyyppi\",\"descr\":\"Tyyppi tuloista, joihin verokortti soveltuu.\"},\"kind\":{\"title\":\"Verokortin Laji\",\"descr\":\"Verokortin tyyppi tai laji.\"},\"employmentId\":{\"title\":\"Työsuhteen Tunniste\",\"descr\":\"Työsuhteeseen liittyvä tunniste verokortissa.\"},\"partnerMessageAssignedTo\":{\"title\":\"Kumppanin Viesti\",\"descr\":\"Viesti, joka on osoitettu verokortin kumppanille.\"},\"start\":{\"title\":\"Aloitus\",\"descr\":\"Päivämäärä, jolloin verokortti alkaa olla voimassa.\"},\"end\":{\"title\":\"Loppu\",\"descr\":\"Päivämäärä, jolloin verokortti lakkaa olemasta voimassa.\"},\"copyOfUri\":{\"title\":\"URI Kopio\",\"descr\":\"Verokortin URI-kopio.\"},\"validity\":{\"title\":\"Voimassaolo\",\"descr\":\"Verokortin voimassaoloaika.\"},\"fileUri\":{\"title\":\"Tiedoston URI\",\"descr\":\"Verokorttiin liittyvän tiedoston URI.\"},\"previewUri\":{\"title\":\"Esikatselun URI\",\"descr\":\"Verokortin esikatselun URI.\"}},\"SharedTaxcardExistsResult\":{\"title\":\"Jaetun Verokortin Olemassaolon Tulos\",\"sharedExists\":{\"title\":\"Jaettu Olemassa\",\"descr\":\"Indikaattori siitä, onko jaettu verokortti olemassa.\"},\"ownedExists\":{\"title\":\"Omistettu Olemassa\",\"descr\":\"Indikaattori siitä, onko omistettu verokortti olemassa.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Jaetun verokortin yksilöllinen resurssitunniste.\"},\"ownedTaxcard\":{\"title\":\"Omistettu Verokortti\",\"descr\":\"Omistettu verokortti, jos se on olemassa.\"},\"isError\":{\"title\":\"Virhe\",\"descr\":\"Indikaattori siitä, onko tapahtunut virhe.\"},\"kind\":{\"title\":\"Verokortin Laji\",\"descr\":\"Jaetun verokortin tyyppi tai laji.\"},\"validity\":{\"title\":\"Voimassaolo\",\"descr\":\"Jaetun verokortin voimassaoloaika.\"},\"personalId\":{\"title\":\"Henkilötunnus\",\"descr\":\"Verokorttiin liittyvä henkilötunnus.\"}},\"WorkerCurrentTaxcards\":{\"title\":\"Työntekijän Nykyiset Verokortit\",\"active\":{\"title\":\"Aktiivinen Verokortti\",\"descr\":\"Tällä hetkellä voimassa oleva verokortti, jota käytetään palkanlaskennassa.\"},\"list\":{\"title\":\"Verokorttilista\",\"descr\":\"Luettelo työntekijän kaikista verokorteista.\"},\"employers\":{\"title\":\"Työnantajien Verokortit\",\"descr\":\"Luettelo verokorteista, jotka liittyvät eri työnantajiin.\"},\"personalId\":{\"title\":\"Henkilötunnus\",\"descr\":\"Työntekijän virallinen henkilötunnus.\"},\"employment\":{\"title\":\"Työsuhdetiedot\",\"descr\":\"Tietoja työntekijän nykyisestä työsuhteesta.\"},\"waitingApproval\":{\"title\":\"Odottaa Hyväksyntää\",\"descr\":\"Verokortti, joka odottaa hyväksyntää ennen käyttöönottoa.\"},\"employmentTaxcard\":{\"title\":\"Työsuhteen Verokortti\",\"descr\":\"Verokortti, joka on liitetty tiettyyn työsuhteeseen.\"}},\"TaxcardWaitingApproval\":{\"title\":\"Hyväksyntää Odottava Verokortti\",\"uri\":{\"title\":\"Verokortin URI\",\"descr\":\"Verokortin yksilöllinen tunniste tai osoite.\"},\"kind\":{\"title\":\"Verokortin Tyyppi\",\"descr\":\"Verokortin tyyppi, joka määrittää sen käyttötarkoituksen.\"},\"state\":{\"title\":\"Verokortin Tila\",\"descr\":\"Nykyinen tila, jossa verokortti on hyväksyntäprosessissa.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin verokortti luotiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Henkilö tai taho, joka omistaa verokortin.\"},\"isRelationUnconfirmed\":{\"title\":\"Suhde Vahvistamaton\",\"descr\":\"Ilmaisee, onko verokortin ja työsuhteen välinen suhde vahvistettu.\"},\"fullCard\":{\"title\":\"Täysi Verokortti\",\"descr\":\"Koko verokortti, joka sisältää kaikki siihen liittyvät tiedot.\"}},\"TestValues\":{\"title\":\"Testiarvot\",\"intValue\":{\"title\":\"Kokonaisluku\",\"descr\":\"Testiarvo, joka edustaa kokonaislukua.\"},\"doubleValue\":{\"title\":\"Liukuluku\",\"descr\":\"Testiarvo, joka edustaa liukulukua.\"},\"decimalValue\":{\"title\":\"Desimaaliluku\",\"descr\":\"Testiarvo, joka edustaa desimaalilukua.\"},\"stringValue\":{\"title\":\"Merkkijono\",\"descr\":\"Testiarvo, joka edustaa merkkijonoa.\"},\"dateTimeValue\":{\"title\":\"Päivämäärä ja Aika\",\"descr\":\"Testiarvo, joka edustaa päivämäärää ja aikaa.\"},\"dateValue\":{\"title\":\"Päivämäärä\",\"descr\":\"Testiarvo, joka edustaa päivämäärää.\"},\"boolValue\":{\"title\":\"Totuusarvo\",\"descr\":\"Testiarvo, joka edustaa totuusarvoa (tosi/epätosi).\"},\"objectValue\":{\"title\":\"Objekti\",\"descr\":\"Testiarvo, joka edustaa mitä tahansa objektia.\"},\"arrayValue\":{\"title\":\"Taulukko\",\"descr\":\"Testiarvo, joka edustaa taulukkoa.\"},\"enumValue\":{\"title\":\"Luetteloarvo\",\"descr\":\"Testiarvo, joka edustaa ennalta määritettyä luetteloarvoa.\"},\"dictValue\":{\"title\":\"Sanakirja\",\"descr\":\"Testiarvo, joka edustaa avain-arvopareja sisältävää sanakirjaa.\"}},\"TestAccountInfo\":{\"title\":\"Testitilin Tiedot\",\"token\":{\"title\":\"Tunniste\",\"descr\":\"Testitilin käyttöön liittyvä tunniste.\"},\"userCredential\":{\"title\":\"Käyttäjätunnus\",\"descr\":\"Käyttäjän kirjautumistiedot testitiliä varten.\"}},\"FederationSampleViewModel\":{\"title\":\"Liittouman Näytemalli\",\"federationData\":{\"title\":\"Liittouman Tiedot\",\"descr\":\"Tietoja, jotka liittyvät liittouman käyttäjätietoihin.\"},\"federationDataJson\":{\"title\":\"Liittouman Tiedot JSON\",\"descr\":\"Liittouman käyttäjätiedot JSON-muodossa.\"},\"customFederationDataJson\":{\"title\":\"Mukautetut Liittouman Tiedot JSON\",\"descr\":\"Mukautetut liittouman tiedot JSON-muodossa.\"},\"token\":{\"title\":\"Tunniste\",\"descr\":\"Liittouman käyttöön liittyvä tunniste.\"},\"certificatePwd\":{\"title\":\"Sertifikaatin Salasana\",\"descr\":\"Salasana, joka suojaa liittouman sertifikaattia.\"},\"certificateFile\":{\"title\":\"Sertifikaattitiedosto\",\"descr\":\"Tiedosto, joka sisältää liittouman sertifikaatin.\"},\"certificateBytes\":{\"title\":\"Sertifikaatin Tavut\",\"descr\":\"Liittouman sertifikaatin binäärimuoto.\"},\"accountId\":{\"title\":\"Tilin Tunnus\",\"descr\":\"Yksilöllinen tunnus, joka liittyy liittouman tiliin.\"}},\"OpenIdUserInfoSupportedClaims\":{\"title\":\"OpenID-käyttäjätietojen tuetut väitteet\",\"iss\":{\"title\":\"Julkaisija\",\"descr\":\"Tunnistaa tahon, joka on myöntänyt ID-tunnuksen.\"},\"aud\":{\"title\":\"Kohdeyleisö\",\"descr\":\"Määrittää, kenelle ID-tunnus on tarkoitettu.\"},\"exp\":{\"title\":\"Vanhentumisaika\",\"descr\":\"Päivämäärä ja aika, jolloin ID-tunnus vanhenee.\"},\"sub\":{\"title\":\"Kohde\",\"descr\":\"Tunnistaa yksilöllisesti käyttäjän.\"},\"name\":{\"title\":\"Nimi\",\"descr\":\"Käyttäjän koko nimi.\"},\"given_name\":{\"title\":\"Etunimi\",\"descr\":\"Käyttäjän etunimi.\"},\"family_name\":{\"title\":\"Sukunimi\",\"descr\":\"Käyttäjän sukunimi.\"},\"picture\":{\"title\":\"Kuva\",\"descr\":\"URL-osoite käyttäjän profiilikuvasta.\"},\"email\":{\"title\":\"Sähköpostiosoite\",\"descr\":\"Käyttäjän sähköpostiosoite.\"},\"email_verified\":{\"title\":\"Sähköpostin vahvistus\",\"descr\":\"Ilmaisee, onko sähköpostiosoite vahvistettu.\"},\"birthdate\":{\"title\":\"Syntymäaika\",\"descr\":\"Käyttäjän syntymäpäivä.\"},\"locale\":{\"title\":\"Kieliasetus\",\"descr\":\"Käyttäjän kieli- ja maa-asetukset.\"},\"phone_number\":{\"title\":\"Puhelinnumero\",\"descr\":\"Käyttäjän puhelinnumero.\"},\"phone_number_verified\":{\"title\":\"Puhelinnumeron vahvistus\",\"descr\":\"Ilmaisee, onko puhelinnumero vahvistettu.\"},\"address\":{\"title\":\"Osoite\",\"descr\":\"Käyttäjän osoitetiedot.\"},\"updated_at\":{\"title\":\"Päivitetty\",\"descr\":\"Aika, jolloin käyttäjätiedot on viimeksi päivitetty.\"},\"https://salaxy.com/federation/company\":{\"title\":\"Yritystili\",\"descr\":\"Käyttäjän yritystilin tiedot.\"},\"https://salaxy.com/federation/person\":{\"title\":\"Henkilötili\",\"descr\":\"Käyttäjän henkilökohtaisen tilin tiedot.\"},\"https://salaxy.com/federation/app\":{\"title\":\"Sovellustili\",\"descr\":\"Käyttäjän sovellustilin tiedot.\"}},\"HttpPostedFileBase\":{\"title\":\"HTTP Lähetetty Tiedosto\",\"contentLength\":{\"title\":\"Sisällön pituus\",\"descr\":\"Tiedoston koko tavuina.\"},\"contentType\":{\"title\":\"Sisällön tyyppi\",\"descr\":\"Tiedoston MIME-tyyppi.\"},\"fileName\":{\"title\":\"Tiedoston nimi\",\"descr\":\"Lähetetyn tiedoston nimi.\"},\"inputStream\":{\"title\":\"Syötevirta\",\"descr\":\"Virta, josta tiedoston sisältö voidaan lukea.\"}},\"OpenIdUserInfoAddress\":{\"title\":\"OpenID-käyttäjän osoite\",\"street_address\":{\"title\":\"Katuosoite\",\"descr\":\"Käyttäjän katuosoite.\"},\"locality\":{\"title\":\"Paikkakunta\",\"descr\":\"Käyttäjän paikkakunta.\"},\"postal_code\":{\"title\":\"Postinumero\",\"descr\":\"Käyttäjän postinumero.\"}},\"UserInfoCompanyAccount\":{\"title\":\"Yritystilin tiedot\",\"as_company\":{\"title\":\"Yrityksenä\",\"descr\":\"Ilmaisee, toimiiko käyttäjä yrityksenä.\"},\"business_id\":{\"title\":\"Y-tunnus\",\"descr\":\"Yrityksen yksilöllinen tunnus.\"},\"type\":{\"title\":\"Yritystyyppi\",\"descr\":\"Yrityksen tyyppi tai luokitus.\"},\"name\":{\"title\":\"Yrityksen nimi\",\"descr\":\"Yrityksen nimi.\"},\"picture\":{\"title\":\"Yrityksen kuva\",\"descr\":\"URL-osoite yrityksen logolle tai kuvalle.\"},\"email\":{\"title\":\"Yrityksen sähköposti\",\"descr\":\"Yrityksen sähköpostiosoite.\"},\"email_verified\":{\"title\":\"Sähköpostin vahvistus\",\"descr\":\"Ilmaisee, onko yrityksen sähköpostiosoite vahvistettu.\"},\"phone_number\":{\"title\":\"Yrityksen puhelinnumero\",\"descr\":\"Yrityksen puhelinnumero.\"},\"phone_number_verified\":{\"title\":\"Puhelinnumeron vahvistus\",\"descr\":\"Ilmaisee, onko yrityksen puhelinnumero vahvistettu.\"},\"address\":{\"title\":\"Yrityksen osoite\",\"descr\":\"Yrityksen osoitetiedot.\"},\"proxy_partner\":{\"title\":\"Välityskumppani\",\"descr\":\"Yrityksen välityskumppanin tiedot.\"},\"partner_account_id\":{\"title\":\"Kumppanitilin tunnus\",\"descr\":\"Yrityksen kumppanitilin yksilöllinen tunnus.\"}},\"UserInfoPersonAccount\":{\"title\":\"Henkilötilin tiedot\",\"can_sign_company\":{\"title\":\"Voi allekirjoittaa yrityksenä\",\"descr\":\"Ilmaisee, voiko henkilö allekirjoittaa asiakirjoja yrityksen puolesta.\"},\"personal_id\":{\"title\":\"Henkilötunnus\",\"descr\":\"Henkilön yksilöllinen tunnus.\"}},\"UserInfoApplication\":{\"title\":\"Käyttäjätiedot-sovellus\",\"return_link\":{\"title\":\"Palautuslinkki\",\"descr\":\"Linkki, jonka kautta käyttäjä voi palata sovellukseen.\"},\"cancel_link\":{\"title\":\"Peruutuslinkki\",\"descr\":\"Linkki, jonka kautta käyttäjä voi peruuttaa nykyisen toiminnon.\"},\"are\":{\"title\":\"Käyttöoikeus\",\"descr\":\"Käyttäjän käyttöoikeustaso, kuten 'ei pääsyä' tai 'omistaja'.\"},\"role\":{\"title\":\"Rooli\",\"descr\":\"Käyttäjän rooli sovelluksessa, jos määritelty.\"},\"state\":{\"title\":\"Tila\",\"descr\":\"Sovelluksen nykyinen tila avain-arvopareina.\"}},\"Stream\":{\"title\":\"Tietovirta\",\"canRead\":{\"title\":\"Lukuoikeus\",\"descr\":\"Ilmaisee, voiko tietovirtaa lukea.\"},\"canSeek\":{\"title\":\"Etsintäoikeus\",\"descr\":\"Ilmaisee, voiko tietovirran kohtaa muuttaa.\"},\"canTimeout\":{\"title\":\"Aikakatkaisuoikeus\",\"descr\":\"Ilmaisee, voiko tietovirta aikakatkaista.\"},\"canWrite\":{\"title\":\"Kirjoitusoikeus\",\"descr\":\"Ilmaisee, voiko tietovirtaan kirjoittaa.\"},\"length\":{\"title\":\"Pituus\",\"descr\":\"Tietovirran kokonaispituus, jos tiedossa.\"},\"position\":{\"title\":\"Sijainti\",\"descr\":\"Nykyinen sijainti tietovirrassa, jos tiedossa.\"},\"readTimeout\":{\"title\":\"Lukuaikakatkaisu\",\"descr\":\"Aika, jonka jälkeen lukutoiminto aikakatkaistaan, jos määritelty.\"},\"writeTimeout\":{\"title\":\"Kirjoitusaikakatkaisu\",\"descr\":\"Aika, jonka jälkeen kirjoitustoiminto aikakatkaistaan, jos määritelty.\"}},\"Usecase\":{\"title\":\"Käyttötapaus\",\"uri\":{\"title\":\"URI\",\"descr\":\"Käyttötapauksen yksilöllinen tunniste, jos määritelty.\"},\"label\":{\"title\":\"Nimi\",\"descr\":\"Käyttötapauksen kuvaava nimi, jos määritelty.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Käyttötapauksen liiketoiminnallinen kuvaus, jos määritelty.\"},\"icon\":{\"title\":\"Ikoni\",\"descr\":\"Käyttötapauksen visuaalinen tunniste, jos määritelty.\"},\"itemType\":{\"title\":\"Kohdetyyppi\",\"descr\":\"Käyttötapauksen tyyppi, jos määritelty.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Käyttötapauksen nykyinen tila, jos määritelty.\"},\"order\":{\"title\":\"Järjestys\",\"descr\":\"Käyttötapauksen järjestysnumero, jos määritelty.\"},\"schema\":{\"title\":\"Skeema\",\"descr\":\"Käyttötapauksen tietomalli, jos määritelty.\"},\"actions\":{\"title\":\"Toiminnot\",\"descr\":\"Käyttötapaukseen liittyvät toiminnot, jos määritelty.\"},\"views\":{\"title\":\"Näkymät\",\"descr\":\"Käyttötapaukseen liittyvät näkymät, jos määritelty.\"},\"workflowData\":{\"title\":\"Työnkulun tiedot\",\"descr\":\"Käyttötapaukseen liittyvät työnkulun tiedot, jos määritelty.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Käyttötapauksen yksilöllinen tunniste, jos määritelty.\"},\"createdAt\":{\"title\":\"Luontiaika\",\"descr\":\"Ajankohta, jolloin käyttötapaus luotiin, jos määritelty.\"},\"updatedAt\":{\"title\":\"Päivitysaika\",\"descr\":\"Ajankohta, jolloin käyttötapaus viimeksi päivitettiin, jos määritelty.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Käyttötapauksen omistaja, jos määritelty.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko käyttötapaus vain lukuoikeudella.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Käyttötapaukseen liittyvä yhteistyökumppani, jos määritelty.\"}},\"UsecaseAction\":{\"title\":\"Käyttötapauksen toiminto\",\"actionType\":{\"title\":\"Toimintatyyppi\",\"descr\":\"Toiminnon tyyppi, jos määritelty.\"},\"label\":{\"title\":\"Nimi\",\"descr\":\"Toiminnon kuvaava nimi, jos määritelty.\"},\"uiShowButton\":{\"title\":\"Näytä painike\",\"descr\":\"Ilmaisee, näytetäänkö toiminnolle painike käyttöliittymässä.\"},\"uiText\":{\"title\":\"Käyttöliittymäteksti\",\"descr\":\"Toimintoon liittyvä teksti käyttöliittymässä, jos määritelty.\"},\"uiColor\":{\"title\":\"Käyttöliittymän väri\",\"descr\":\"Toimintoon liittyvä väri käyttöliittymässä, jos määritelty.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Toiminnon liiketoiminnallinen kuvaus, jos määritelty.\"},\"content\":{\"title\":\"Sisältö\",\"descr\":\"Toimintoon liittyvä sisältö, jos määritelty.\"}},\"UsecaseView\":{\"title\":\"Käyttötapauksen näkymä\",\"label\":{\"title\":\"Nimi\",\"descr\":\"Näkymän kuvaava nimi, jos määritelty.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Näkymän liiketoiminnallinen kuvaus, jos määritelty.\"},\"content\":{\"title\":\"Sisältö\",\"descr\":\"Näkymään liittyvä sisältö, jos määritelty.\"}},\"PageResultOfUsecaseListItem\":{\"title\":\"Käyttötapausluettelon sivutulokset\",\"items\":{\"title\":\"Käyttötapausluettelon kohteet\",\"descr\":\"Luettelo käyttöön liittyvistä tapauksista, jotka voivat olla tyhjiä.\"},\"nextPageLink\":{\"title\":\"Seuraavan sivun linkki\",\"descr\":\"URL-osoite seuraavalle sivulle, jos lisätietoja on saatavilla.\"},\"count\":{\"title\":\"Kohteiden määrä\",\"descr\":\"Käyttötapausten kokonaismäärä tässä luettelossa.\"}},\"UsecaseListItem\":{\"title\":\"Käyttötapausluettelon kohde\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin käyttötapaus luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin käyttötapausta päivitettiin.\"},\"ownerId\":{\"title\":\"Omistajan tunniste\",\"descr\":\"Käyttötapauksen omistajan yksilöllinen tunniste.\"},\"ownerInfo\":{\"title\":\"Omistajan tiedot\",\"descr\":\"Tietoja käyttötapauksen omistajasta.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Käyttötapauksen nykyinen tila.\"},\"backOfficeStatus\":{\"title\":\"Taustatoimiston tila\",\"descr\":\"Käyttötapauksen tila taustatoimiston näkökulmasta.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Päivämäärä, jolloin käyttötapaus alkaa.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Päivämäärä, jolloin käyttötapaus päättyy.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Käyttötapaukseen liittyvä bruttopalkka.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Käyttötapaukseen liittyvä maksu.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Käyttötapaukseen liittyvä palkkio.\"},\"otherId\":{\"title\":\"Toisen osapuolen tunniste\",\"descr\":\"Toisen osapuolen yksilöllinen tunniste käyttötapauksessa.\"},\"otherPartyInfo\":{\"title\":\"Toisen osapuolen tiedot\",\"descr\":\"Tietoja toisesta osapuolesta käyttötapauksessa.\"},\"shortText\":{\"title\":\"Lyhyt kuvaus\",\"descr\":\"Lyhyt kuvaus käyttötapauksesta.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Luettelo liiketoimintaobjekteista, jotka liittyvät käyttötapaukseen.\"},\"salaryDate\":{\"title\":\"Palkkapäivämäärä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"data\":{\"title\":\"Käyttötapaustiedot\",\"descr\":\"Lisätietoja käyttötapauksesta.\"},\"versionNumber\":{\"title\":\"Versio numero\",\"descr\":\"Käyttötapauksen versionumero.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Käyttötapauksen yksilöllinen resurssitunniste.\"},\"flags\":{\"title\":\"Merkit\",\"descr\":\"Luettelo merkeistä, jotka liittyvät käyttötapaukseen.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Luettelo viesteistä, jotka liittyvät käyttötapaukseen.\"},\"entityType\":{\"title\":\"Entiteetin tyyppi\",\"descr\":\"Käyttötapauksen entiteetin tyyppi.\"},\"logicalDate\":{\"title\":\"Looginen päivämäärä\",\"descr\":\"Käyttötapaukseen liittyvä looginen päivämäärä.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Viite käyttötapaukseen.\"},\"externalId\":{\"title\":\"Ulkoinen tunniste\",\"descr\":\"Käyttötapauksen ulkoinen tunniste.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Käyttötapauksen yksilöllinen tunniste.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Käyttötapauksen omistaja.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko käyttötapaus vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Käyttötapaukseen liittyvä yhteistyökumppani.\"}},\"UsecaseListItemData\":{\"title\":\"Käyttötapausluettelon kohteen tiedot\",\"partnerMessageAssignedTo\":{\"title\":\"Yhteistyökumppanin viestin vastaanottaja\",\"descr\":\"Henkilö, jolle yhteistyökumppanin viesti on osoitettu.\"},\"description\":{\"title\":\"Kuvaus\",\"descr\":\"Yksityiskohtainen kuvaus käyttötapauksesta.\"},\"icon\":{\"title\":\"Ikoni\",\"descr\":\"Käyttötapaukseen liittyvä visuaalinen ikoni.\"},\"order\":{\"title\":\"Järjestys\",\"descr\":\"Käyttötapauksen järjestysnumero luettelossa.\"}},\"VersionInfo\":{\"title\":\"Versiotiedot\",\"versionId\":{\"title\":\"Version tunniste\",\"descr\":\"Yksilöllinen tunniste versiolle.\"},\"operation\":{\"title\":\"Toimenpide\",\"descr\":\"Versioon liittyvä toimenpide.\"},\"date\":{\"title\":\"Päivämäärä\",\"descr\":\"Päivämäärä, jolloin versio luotiin tai päivitettiin.\"},\"userAccount\":{\"title\":\"Käyttäjätili\",\"descr\":\"Käyttäjätili, joka liittyy versioon.\"}},\"ApiCrudObject\":{\"title\":\"API CRUD -objekti\",\"id\":{\"title\":\"Tunniste\",\"descr\":\"Objektin yksilöllinen tunniste.\"},\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin objekti luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivämäärä, jolloin objektia päivitettiin.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Objektin omistaja.\"},\"isReadOnly\":{\"title\":\"Vain luku\",\"descr\":\"Ilmaisee, onko objekti vain luku -tilassa.\"},\"partner\":{\"title\":\"Yhteistyökumppani\",\"descr\":\"Objektiin liittyvä yhteistyökumppani.\"}},\"PageResultOfWorkerListItem\":{\"title\":\"Työntekijälistan Sivutulos\",\"items\":{\"title\":\"Työntekijälista\",\"descr\":\"Sisältää luettelon työntekijöistä, jotka voivat olla tyhjä.\"},\"nextPageLink\":{\"title\":\"Seuraavan Sivun Linkki\",\"descr\":\"URL-osoite seuraavalle sivulle, jos saatavilla.\"},\"count\":{\"title\":\"Kokonaismäärä\",\"descr\":\"Kokonaismäärä työntekijöitä listassa.\"}},\"WorkerListItem\":{\"title\":\"Työntekijän Tietue\",\"createdAt\":{\"title\":\"Luontipäivämäärä\",\"descr\":\"Päivämäärä, jolloin tietue luotiin.\"},\"updatedAt\":{\"title\":\"Päivityspäivämäärä\",\"descr\":\"Viimeisin päivityspäivämäärä tietueelle.\"},\"ownerId\":{\"title\":\"Omistajan Tunniste\",\"descr\":\"Yksilöllinen tunniste tietueen omistajalle.\"},\"ownerInfo\":{\"title\":\"Omistajan Tiedot\",\"descr\":\"Lisätietoja tietueen omistajasta.\"},\"status\":{\"title\":\"Tila\",\"descr\":\"Nykyinen tila työntekijän tietueelle.\"},\"backOfficeStatus\":{\"title\":\"Back Office -tila\",\"descr\":\"Hallinnollinen tila työntekijän tietueelle.\"},\"startAt\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Työsuhteen alkamispäivämäärä.\"},\"endAt\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Työsuhteen päättymispäivämäärä.\"},\"grossSalary\":{\"title\":\"Bruttopalkka\",\"descr\":\"Työntekijän bruttopalkka.\"},\"payment\":{\"title\":\"Maksu\",\"descr\":\"Maksettu summa työntekijälle.\"},\"fee\":{\"title\":\"Palkkio\",\"descr\":\"Mahdollinen lisämaksu tai palkkio.\"},\"otherId\":{\"title\":\"Muu Tunniste\",\"descr\":\"Toinen tunniste, joka liittyy työntekijään.\"},\"otherPartyInfo\":{\"title\":\"Toisen Osapuolen Tiedot\",\"descr\":\"Tietoja toisesta osapuolesta, joka liittyy työntekijään.\"},\"shortText\":{\"title\":\"Lyhyt Kuvaus\",\"descr\":\"Lyhyt kuvaus työntekijästä tai työsuhteesta.\"},\"businessObjects\":{\"title\":\"Liiketoimintaobjektit\",\"descr\":\"Liiketoimintaan liittyvät objektit, jotka liittyvät työntekijään.\"},\"salaryDate\":{\"title\":\"Palkkapäivä\",\"descr\":\"Päivämäärä, jolloin palkka maksetaan.\"},\"data\":{\"title\":\"Työntekijän Tiedot\",\"descr\":\"Yksityiskohtaiset tiedot työntekijästä.\"},\"versionNumber\":{\"title\":\"Versio Numero\",\"descr\":\"Tietueen nykyinen versio.\"},\"uri\":{\"title\":\"URI\",\"descr\":\"Yksilöllinen resurssitunniste tietueelle.\"},\"flags\":{\"title\":\"Merkit\",\"descr\":\"Erityiset merkit tai tunnisteet tietueelle.\"},\"messages\":{\"title\":\"Viestit\",\"descr\":\"Liittyvät viestit tai ilmoitukset tietueelle.\"},\"entityType\":{\"title\":\"Entiteetin Tyyppi\",\"descr\":\"Tietueen tyyppi tai luokka.\"},\"logicalDate\":{\"title\":\"Looginen Päivämäärä\",\"descr\":\"Liiketoiminnallinen päivämäärä tietueelle.\"},\"reference\":{\"title\":\"Viite\",\"descr\":\"Viitenumero tai koodi tietueelle.\"},\"externalId\":{\"title\":\"Ulkoinen Tunniste\",\"descr\":\"Ulkopuolinen tunniste, joka liittyy tietueeseen.\"},\"id\":{\"title\":\"Tunniste\",\"descr\":\"Yksilöllinen tunniste tietueelle.\"},\"owner\":{\"title\":\"Omistaja\",\"descr\":\"Tietueen omistaja tai hallinnoija.\"},\"isReadOnly\":{\"title\":\"Vain Luku\",\"descr\":\"Tietue on vain luku -tilassa.\"},\"partner\":{\"title\":\"Kumppani\",\"descr\":\"Liiketoimintakumppani, joka liittyy tietueeseen.\"}},\"WorkerData\":{\"title\":\"Työntekijän Tiedot\",\"type\":{\"title\":\"Työsuhteen Tyyppi\",\"descr\":\"Työsuhteen tyyppi, kuten vakituinen tai määräaikainen.\"},\"pensionCalculation\":{\"title\":\"Eläkelaskenta\",\"descr\":\"Eläkelaskentaan liittyvät tiedot.\"},\"taxcard\":{\"title\":\"Verokortti\",\"descr\":\"Työntekijän verokorttiin liittyvät tiedot.\"},\"startDate\":{\"title\":\"Aloituspäivämäärä\",\"descr\":\"Työsuhteen alkamispäivämäärä.\"},\"endDate\":{\"title\":\"Päättymispäivämäärä\",\"descr\":\"Työsuhteen päättymispäivämäärä.\"},\"isFixedTerm\":{\"title\":\"Määräaikainen\",\"descr\":\"Onko työsuhde määräaikainen.\"},\"isTerminated\":{\"title\":\"Päättynyt\",\"descr\":\"Onko työsuhde päättynyt.\"}},\"Holidays\":{\"title\":\"Juhlapyhät\",\"newYearsDay\":{\"title\":\"Uudenvuodenpäivä\",\"descr\":\"Uudenvuodenpäivän päivämäärä.\"},\"epiphany\":{\"title\":\"Loppiainen\",\"descr\":\"Loppiaisen päivämäärä.\"},\"goodFriday\":{\"title\":\"Pitkäperjantai\",\"descr\":\"Pitkäperjantain päivämäärä.\"},\"easterSunday\":{\"title\":\"Pääsiäissunnuntai\",\"descr\":\"Pääsiäissunnuntain päivämäärä.\"},\"easterSaturday\":{\"title\":\"Pääsiäislauantai\",\"descr\":\"Pääsiäislauantain päivämäärä.\"},\"easterMonday\":{\"title\":\"Pääsiäismaanantai\",\"descr\":\"Pääsiäismaanantain päivämäärä.\"},\"mayDay\":{\"title\":\"Vappu\",\"descr\":\"Vapun päivämäärä.\"},\"ascensionDay\":{\"title\":\"Helatorstai\",\"descr\":\"Helatorstain päivämäärä.\"},\"pentecost\":{\"title\":\"Helluntai\",\"descr\":\"Helluntain päivämäärä.\"},\"midsummerEve\":{\"title\":\"Juhannusaatto\",\"descr\":\"Juhannusaaton päivämäärä.\"},\"midsummerDay\":{\"title\":\"Juhannuspäivä\",\"descr\":\"Juhannuspäivän päivämäärä.\"},\"allSaintsDay\":{\"title\":\"Pyhäinpäivä\",\"descr\":\"Pyhäinpäivän päivämäärä.\"},\"independenceDay\":{\"title\":\"Itsenäisyyspäivä\",\"descr\":\"Itsenäisyyspäivän päivämäärä.\"},\"christmasEve\":{\"title\":\"Jouluaatto\",\"descr\":\"Jouluaaton päivämäärä.\"},\"christmasDay\":{\"title\":\"Joulupäivä\",\"descr\":\"Joulupäivän päivämäärä.\"},\"stStephensDay\":{\"title\":\"Tapaninpäivä\",\"descr\":\"Tapaninpäivän päivämäärä.\"}},\"holidays\":{\"title\":\"Juhlapyhät\",\"newYearsDay\":{\"title\":\"Uudenvuodenpäivä\",\"descr\":\"Uudenvuodenpäivän päivämäärä.\"},\"epiphany\":{\"title\":\"Loppiainen\",\"descr\":\"Loppiaisen päivämäärä.\"},\"goodFriday\":{\"title\":\"Pitkäperjantai\",\"descr\":\"Pitkäperjantain päivämäärä.\"},\"easterSunday\":{\"title\":\"Pääsiäissunnuntai\",\"descr\":\"Pääsiäissunnuntain päivämäärä.\"},\"easterSaturday\":{\"title\":\"Pääsiäislauantai\",\"descr\":\"Pääsiäislauantain päivämäärä.\"},\"easterMonday\":{\"title\":\"Pääsiäismaanantai\",\"descr\":\"Pääsiäismaanantain päivämäärä.\"},\"mayDay\":{\"title\":\"Vappu\",\"descr\":\"Vapun päivämäärä.\"},\"ascensionDay\":{\"title\":\"Helatorstai\",\"descr\":\"Helatorstain päivämäärä.\"},\"pentecost\":{\"title\":\"Helluntai\",\"descr\":\"Helluntain päivämäärä.\"},\"midsummerEve\":{\"title\":\"Juhannusaatto\",\"descr\":\"Juhannusaaton päivämäärä.\"},\"midsummerDay\":{\"title\":\"Juhannuspäivä\",\"descr\":\"Juhannuspäivän päivämäärä.\"},\"allSaintsDay\":{\"title\":\"Pyhäinpäivä\",\"descr\":\"Pyhäinpäivän päivämäärä.\"},\"independenceDay\":{\"title\":\"Itsenäisyyspäivä\",\"descr\":\"Itsenäisyyspäivän päivämäärä.\"},\"christmasEve\":{\"title\":\"Jouluaatto\",\"descr\":\"Jouluaaton päivämäärä.\"},\"christmasDay\":{\"title\":\"Joulupäivä\",\"descr\":\"Joulupäivän päivämäärä.\"},\"stStephensDay\":{\"title\":\"Tapaninpäivä\",\"descr\":\"Tapaninpäivän päivämäärä.\"}},\"FileParameter\":{\"title\":\"Tiedoston Parametri\",\"data\":{\"title\":\"Tiedoston Sisältö\",\"descr\":\"Tiedoston sisältö, joka voi olla mitä tahansa tietoa.\"},\"fileName\":{\"title\":\"Tiedoston Nimi\",\"descr\":\"Tiedoston nimi, joka yksilöi ja tunnistaa tiedoston liiketoimintaprosessissa.\"}}},\"MODEL\":{\"AccountingData\":{\"period\":{\"title\":\"Kausi\"}},\"AccountingDataSummary\":{\"calculationCount\":{\"title\":\"Palkkoja\"},\"workerCount\":{\"title\":\"Työntekijöitä\"},\"totalGrossSalary\":{\"title\":\"Palkat\"},\"totalPayment\":{\"title\":\"Maksut\"}},\"AccountingSettings\":{\"title\":\"Kirjanpito\",\"descr\":\"Kirjanpidon tilikartta ja raportit\",\"targets\":{\"title\":\"Tilikartat\"},\"defaultPeriodDateKind\":{\"title\":\"Raportin kauden määräytyminen\"},\"reportDelivery\":{\"title\":\"Kirjanpitoraportin lähetys yritykselle\"},\"accountantReportDelivery\":{\"title\":\"Kirjanpitoraportin lähetys kirjanpitäjälle\"},\"defaultTargetId\":{\"title\":\"Oletustilikartta\"}},\"AccountingReportDelivery\":{\"isEnabled\":{\"title\":\"Voimassa\"},\"address\":{\"title\":\"Sähköpostiosoite\",\"descr\":\"Sähköpostiosoite raporttien lähetystä varten\"}},\"CalcInfo\":{\"occupationCode\":{\"title\":\"Työn tyyppi\"},\"salarySlipMessage\":{\"title\":\"Viesti työntekijälle\"},\"workDescription\":{\"title\":\"Kuvaus palkkalaskelmaan\"},\"workStartDate\":{\"title\":\"Alkupäivä\"},\"workEndDate\":{\"title\":\"Loppupäivä\"}},\"CalcTax\":{\"fixedTaxAmount\":{\"title\":\"Ennakonpidätys\"}},\"CalcWorktime\":{\"bonus\":{\"title\":\"Lomaraha\"},\"workDays\":{\"title\":\"Työpäiviä kaudella\"}},\"DateRange\":{\"title\":\"Kausi\",\"start\":{\"title\":\"Alku\"},\"end\":{\"title\":\"Loppu\"},\"daysCount\":{\"title\":\"Päiviä jaksolla\"},\"days\":{\"title\":\"Päiviä jaksolla\"}},\"WorkflowEvent\":{\"assignedTo\":{\"title\":\"Vastuuhenkilö\"}},\"WorkerListItem\":{\"createdAt\":{\"title\":\"Luotu\"},\"updatedAt\":{\"title\":\"Päivitetty\"}},\"MessageData\":{\"title\":{\"title\":\"Aihe\"},\"ownerUnreadCount\":{\"title\":\"Lukematta\"},\"otherPartyUnreadCount\":{\"title\":\"Lukematta\",\"tableHeading\":\"...asiakkaalla\"},\"partnerMessageAssignedTo\":{\"title\":\"Vastuuhenkilö\"}},\"MessageListItem\":{\"createdAt\":{\"title\":\"Luotu\"},\"updatedAt\":{\"title\":\"Päivitetty\"},\"salaryDate\":{\"title\":\"Palkkapäivä\"},\"startAt\":{\"tableHeading\":\"Viimeisin viesti\"},\"messages\":{\"title\":\"Viestit\",\"tableHeading\":\"Tarkistettu\"},\"sender\":\"Lähettäjä\"},\"CalculationListItem\":{\"endAt\":{\"tableHeading\":\"Pvm\"},\"grossSalary\":{\"title\":\"Palkka\"},\"payment\":{\"title\":\"Maksu\"},\"status\":{\"title\":\"Tila\"},\"messages\":{\"title\":\"Viestit\",\"tableHeading\":\"Tarkistettu\",\"tableHeadingValidation\":\"Tarkistusviestit\"},\"salaryDate\":{\"title\":\"Palkkapäivä\"},\"shortText\":{\"title\":\"Kuvaus\"}},\"CalculationData\":{\"usecaseUri\":{\"title\":\"Käyttötapaus\"},\"partnerMessageAssignedTo\":{\"title\":\"Vastuuhenkilö\"},\"workerPayment\":{\"title\":\"Maksu työntekijälle\"},\"taxPayment\":{\"title\":\"Ennakonpidätys\"},\"workStartDate\":{\"title\":\"Palkkakauden alku\"},\"workEndDate\":{\"title\":\"Palkkakauden loppu\"}},\"CalcWorkflow\":{\"paymentDate\":{\"title\":\"Laskennallinen palkkapäivä\"},\"requestedSalaryDate\":{\"title\":\"Palkkapäivä\"},\"status\":{\"title\":\"Tila\"},\"salaryDateKind\":{\"title\":\"Palkkapäivän valinta\"}},\"PaymentPeriod\":{\"title\":\"Palkanmaksukausi\"},\"TaxcardListItem\":{\"startAt\":{\"title\":\"Voimassa\"},\"endAt\":{\"title\":\"Saakka\",\"tableHeading\":\"..loppu\"}},\"TaxcardData\":{\"forYear\":{\"title\":\"Vuosi\"},\"totalIncome\":{\"title\":\"Maksettu\"},\"incomeLimit\":{\"title\":\"Tuloraja\"},\"taxPercent\":{\"title\":\"Veroprosentti\"},\"taxPercent2\":{\"title\":\"Lisäprosentti\"}},\"PayrollListItem\":{\"status\":{\"title\":\"Tila\"},\"messages\":{\"title\":\"Viestit\",\"tableHeading\":\"Tarkistettu\",\"tableHeadingValidation\":\"Tarkistusviestit\",\"tableHeadingNotChecked\":\"Ei tarkistettu\",\"tableHeadingIssues\":\"Huomiot\",\"tableHeadingNoIssues\":\"Ei huomioita\"}},\"InvoiceData\":{\"channel\":{\"title\":\"Aineiston kanava\",\"tableHeading\":\"Kanava\"},\"dueDate\":{\"title\":\"Maksun eräpäivä\",\"tableHeading\":\"Eräpäivä\"},\"date\":{\"title\":\"Laskun päivä\"}},\"InvoiceListItem\":{\"status\":{\"title\":\"Aineiston tila\"},\"startAt\":{\"title\":\"Laskun päivä\"},\"endAt\":{\"title\":\"Eräpäivä\"},\"createdAt\":{\"title\":\"Luotu\"},\"updatedAt\":{\"title\":\"Päivitetty\"},\"payment\":{\"title\":\"Laskun summa\",\"tableHeading\":\"Aineiston summa\"},\"reference\":{\"title\":\"Viite\"},\"messages\":{\"title\":\"Viestit\"}},\"PayrollData\":{\"title\":{\"title\":\"Kuvaus\"},\"partnerMessageAssignedTo\":{\"title\":\"Vastuuhenkilö\"}},\"EarningsPaymentListItem\":{\"createdAt\":{\"title\":\"Luotu\"},\"endAt\":{\"title\":\"Lähetysaika\"},\"updatedAt\":{\"title\":\"Päivitetty\"},\"status\":{\"title\":\"Tila\"},\"salaryDate\":{\"title\":\"Palkkapäivä\"},\"payment\":{\"title\":\"Maksu\"},\"grossSalary\":{\"title\":\"Brutto\"},\"messages\":{\"title\":\"Viestit\",\"tableHeading\":\"Tarkistettu\"}},\"EarningsPaymentData\":{\"partnerMessageAssignedTo\":{\"title\":\"Vastuuhenkilö\"},\"firstDeliveredAt\":{\"title\":\"Ensimmäinen lähetys\"},\"lastDeliveredAt\":{\"title\":\"Viimeisin lähetys\"},\"scheduledFor\":{\"title\":\"Tuleva lähetys\"}},\"PayerSummaryListItem\":{\"createdAt\":{\"title\":\"Luotu\"},\"endAt\":{\"title\":\"Lähetysaika\"},\"updatedAt\":{\"title\":\"Päivitetty\"},\"status\":{\"title\":\"Tila\"},\"salaryDate\":{\"title\":\"Palkkapäivä\"},\"payment\":{\"title\":\"Sava-maksu\"},\"grossSalary\":{\"title\":\"Brutto\"},\"messages\":{\"title\":\"Viestit\",\"tableHeading\":\"Tarkistettu\"},\"logicalDate\":{\"tableHeading\":\"Kuukausi\"}},\"PayerSummaryData\":{\"partnerMessageAssignedTo\":{\"title\":\"Vastuuhenkilö\"},\"firstDeliveredAt\":{\"title\":\"Ensimmäinen lähetys\"},\"lastDeliveredAt\":{\"title\":\"Viimeisin lähetys\"},\"scheduledFor\":{\"title\":\"Tuleva lähetys\"},\"transactionCode\":{\"title\":\"Ilmoituksen tyyppi\"},\"socialSecurityDeduction\":{\"title\":\"Vähennys\"}},\"HouseholdYearListItem\":{\"backOfficeStatus\":{\"title\":\"Käsittelyn tila\"},\"createdAt\":{\"title\":\"Luotu\"},\"updatedAt\":{\"title\":\"Päivitetty\"},\"endAt\":{\"title\":\"Viimeisin tallennus\"},\"logicalDate\":{\"tableHeading\":\"Vuosi\"},\"shortText\":{\"title\":\"Viesti\"},\"status\":{\"title\":\"Vastaus\"},\"messages\":{\"title\":\"Viestit\",\"tableHeading\":\"Huom!\"}},\"HouseholdYearData\":{\"partnerMessageAssignedTo\":{\"title\":\"Vastuuhenkilö\"}},\"Payer\":{\"title\":\"Maksajan tiedot\"},\"PayerSummary\":{\"status\":{\"title\":\"Tila\"}},\"SubstitutePayer\":{\"title\":\"Sijaismaksaja\"},\"Employment\":{\"title\":\"Työsuhde\",\"configs\":{\"title\":\"Työsuhdekohtaiset asetukset\"},\"accruals\":{\"title\":\"Kertymät\"}},\"EmploymentRelationInfo\":{\"title\":\"Työsuhteen tiedot\",\"cbaCode\":{\"title\":\"TES\"},\"employeeGroup\":{\"title\":\"Työntekijäryhmä\"}},\"IncomeEarner\":{\"title\":\"Tulonsaajan tiedot\"},\"PensionInsurance\":{\"title\":\"Työeläkevakuutus\"},\"AccidentInsurance\":{\"title\":\"Työtapaturmavakuutus\"},\"AccountingTargetSettings\":{\"id\":{\"title\":\"Tunniste\"},\"method\":{\"title\":\"Raportin oletustyyppi\"},\"availableMethods\":{\"title\":\"Raportin tyypit\"},\"avatar\":{\"title\":\"Avatar\"},\"data\":{\"title\":\"Data\"},\"channel\":{\"title\":\"Kirjanpitokanava\"},\"webHookUrl\":{\"title\":\"Web-osoite API-notifikaatiolle\"}},\"CalculationSettings\":{\"pensionContracts\":{\"title\":\"Eläkevakuutukset\"},\"insuranceContracts\":{\"title\":\"Työtapaturma- ja ammattitautivakuutukset\"},\"employmentInsurance\":{\"title\":\"Työttömyysvakuutusmaksut\"},\"employeeGroups\":{\"title\":\"Työntekijäryhmät\"}},\"UnemploymentInsuranceSettings\":{\"payrollLimitStatus\":{\"title\":\"Palkkasummarajat\"}},\"CustomerFundsSettings\":{\"isWorkerSelfHandling\":{\"title\":\"Työnantaja maksaa suoraan nettopalkan\"},\"isPensionSelfHandling\":{\"title\":\"Työnantaja maksaa suoraan eläkevakuutuksen\"},\"isTaxAndSocialSecuritySelfHandling\":{\"title\":\"Työnantaja maksaa suoraan verot\"}},\"IncomesRegisterSettings\":{\"irReporting\":{\"title\":\"Kuukausittainen ilmoittaminen\",\"editLabel\":\"Kuukausittainen ilmoittaminen\"},\"taxReferenceNumber\":{\"title\":\"Veromaksujen viitenumero\"}},\"InsuranceContract\":{\"title\":\"Tapaturmavakuutus\",\"insurancePercent\":{\"title\":\"Tapaturm.vak.maksun arvio-%\",\"descr\":\"Vakuutusmaksu arvioidaan laskemalla annettu %-osuus palkasta\"},\"groupLifeInsurancePercent\":{\"title\":\"Ryhmäh.vak.maksun arvio-%\",\"descr\":\"Vakuutusmaksu arvioidaan laskemalla annettu %-osuus palkasta\"},\"company\":{\"title\":\"Yhtiö\",\"editLabel\":\"Valitse yhtiö\"},\"id\":{\"title\":\"Tunniste\"},\"status\":{\"title\":\"Tila\"},\"contractNumber\":{\"title\":\"Sopimusnumero\"},\"startDate\":{\"title\":\"Alkamispäivä\"},\"endDate\":{\"title\":\"Päättymispäivä\"},\"isPartnerInsurance\":{\"title\":\"Yhteistyökumppani\"}},\"InvoiceSettings\":{\"title\":\"Laskutusasetukset settings\",\"eInvoiceIntermediator\":{\"title\":\"Välittäjä\"},\"eInvoiceReceiver\":{\"title\":\"Verkkolaskuosoite\"},\"sepaBankPartyId\":{\"title\":\"SEPA-maksatustunnus\"},\"ibanNumber\":{\"title\":\"Tilinumero\"}},\"MessagingSettings\":{\"title\":\"Viestintäasetukset\",\"denyServiceModel\":{\"title\":\"Ohita palvelumalli\"},\"partnerMessages\":{\"title\":\"Viestit tilitoimistolle\"},\"workerSalaryNotifications\":{\"title\":\"Viesti palkanmaksusta työntekijälle\"},\"workerSalarySlipDeliveryMethods\":{\"title\":\"Palkkalaskelman toimitustapa työntekijälle\"}},\"PartnerServiceModel\":{\"title\":\"Palvelumalli\",\"package\":{\"title\":\"Paketti\"},\"features\":{\"title\":\"Aktivoidut palvelut\"},\"pricing\":{\"title\":\"Hinnoittelu\"},\"branding\":{\"title\":\"Brändi\"},\"site\":{\"title\":\"Sivuston ominaisuudet\"}},\"PaymentChannelSettings\":{\"channel\":{\"title\":\"Maksukanava\"},\"isEnabled\":{\"title\":\"Valittu\"},\"isAvailable\":{\"title\":\"Valittavissa\"},\"data\":{\"title\":\"Data\"},\"accountingTargetId\":{\"title\":\"Kohteen tunniste\"}},\"PaymentSettings\":{\"title\":\"Maksuasetukset\",\"channels\":{\"title\":\"Maksukanavat\"},\"customerFunds\":{\"title\":\"Asiakasvara-asetukset\"},\"defaultChannel\":{\"title\":\"Oletuskanava\"},\"denyServiceModel\":{\"title\":\"Ohita palvelumalli\"},\"invoice\":{\"title\":\"Verkkolaskuasetukset\"}},\"PensionContract\":{\"title\":\"Työeläkevakuutus\",\"company\":{\"title\":\"Yhtiö\",\"editLabel\":\"Valitse yhtiö\"},\"id\":{\"title\":\"Tunniste\"},\"status\":{\"title\":\"Tila\"},\"contractNumber\":{\"title\":\"Sopimusnumero\"},\"startDate\":{\"title\":\"Alkamispäivä\"},\"endDate\":{\"title\":\"Päättymispäivä\"},\"pensionDiscountPercent\":{\"title\":\"Työeläk.maksun ale-%\",\"descr\":\"Työeläkeyhtiön antama alennus prosenttiyksikköinä työeläkemaksuun. Alennus kohdistuu työnantajan osuuteen työeläkevakuutusmaksusta.\"},\"pensionPercent\":{\"title\":\"Asiakaskohtainen työeläkemaksu-%\",\"descr\":\"Voit syöttää tähän yhtiökohtaisen työeläkemaksuprosentin, jos työeläkeyhtiö on antanut sellaisen ja haluat käyttää sitä laskennassa ohjelmassa. Huomaathan, että kenttään tulee syöttää työeläkemaksun kokonaisprosentti ja ohjelma laskee automaattisesti työntekijän osuuden tämän iän perusteella. Kenttään syötetty prosentti vaikuttaa ensisijaisesti kirjanpitoon. Työeläkeyhtiö laskuttaa yhtiötä aina todellisen prosentin perusteella, joka saattaa vaihdella kuukausittain. Mahdolliset erotukset asiakasvaratilin kautta tilitetyissä maksuissa työeläkeyhtiö laskuttaa tai palauttaa suoraan asiakkaalle. Jos haluat syöttää voimassaoloajan työeläkemaksuprosentille, ole yhteydessä asiakaspalveluun.\"},\"pensionDefaultPercent\":{\"title\":\"Oletus-% työeläkemaksulle\"},\"subOrgCode\":{\"title\":\"Aliorganisaation tunniste\"}},\"PrimaryPartnerSettings\":{\"accountId\":{\"title\":\"Palkkaus-tilin tunniste\"},\"info\":{\"title\":\"Tiedot\"},\"type\":{\"title\":\"Tyyppi\"},\"serviceModel\":{\"title\":\"Palvelumalli\"},\"serviceModelId\":{\"title\":\"Palvelumallin id\"}},\"ServiceModelAccounting\":{\"title\":\"Kirjanpito\",\"defaultTargetId\":{\"title\":\"Oletustilikartta\"},\"targets\":{\"title\":\"Tilikartat\"},\"defaultPeriodDateKind\":{\"title\":\"Kauden määräytyminen\"}},\"ServiceModelBranding\":{\"title\":\"Brändi\",\"logo\":{\"title\":\"Logo\"},\"skin\":{\"title\":\"Tyylitiedosto\"}},\"ServiceModel\":{\"title\":\"Palvelumalli\",\"id\":{\"title\":\"Id\"},\"name\":{\"title\":\"Nimi\"}},\"ServiceModelFeatures\":{\"title\":\"Aktivoitavat palvelut\",\"messaging\":{\"title\":\"Viestit\"},\"forms\":{\"title\":\"Aineiston lähetys\"},\"accounting\":{\"title\":\"Kirjanpito\"},\"payments\":{\"title\":\"Maksaminen\"},\"reporting\":{\"title\":\"Tulosteet\"},\"usecase\":{\"title\":\"Räätälöinnit\"},\"costAccounting\":{\"title\":\"Laskentakohteet\"},\"holiday\":{\"title\":\"Lomalaskenta\"}},\"ServiceModelPayments\":{\"title\":\"Maksaminen\",\"defaultChannel\":{\"title\":\"Oletusmaksutapa\"},\"channels\":{\"title\":\"Maksutavat\"}},\"ServiceModelPricing\":{\"title\":\"Hinnoittelu\",\"pricingModel\":{\"title\":\"Hinnoittelumalli\"},\"fixedFee\":{\"title\":\"Kiinteä hinta\"}},\"ServiceModelSite\":{\"title\":\"Sivuston ominaisuudet\",\"webApp\":{\"title\":\"Sovellus / sivusto\"},\"webAppName\":{\"title\":\"Sovelluksen / sivuston nimi\"},\"webAppUrl\":{\"title\":\"Sivuston osoite\"},\"texts\":{\"title\":\"Tekstit\"},\"sitemap\":{\"title\":\"Sivukartta\"}},\"ServiceModelHoliday\":{\"title\":\"Lomalaskenta\",\"holidayPaySettings\":{\"title\":\"Vuosilomapalkan laskennan asetukset\"},\"holidayAccrualSettings\":{\"title\":\"Lomakertymien asetukset\"}},\"ServiceModelUsecase\":{\"title\":\"Käyttötapausten asetukset\",\"usecases\":{\"title\":\"Räätälöinnit\"}},\"ServiceModelMessaging\":{\"title\":\"Viestintä\",\"partnerMessages\":{\"title\":\"Viestit tilitoimistolle\"},\"workerSalaryNotifications\":{\"title\":\"Viesti palkanmaksusta työntekijälle\"}},\"ServiceModelPayStats\":{\"title\":\"Ansiolaskenta\",\"types\":{\"title\":\"Laskennat\"}},\"UsecaseInSettings\":{\"title\":\"Käyttötapaus\",\"label\":{\"title\":\"Käyttötapauksen kuvaus\"},\"uri\":{\"title\":\"Käyttötapauksen tunniste (uri)\"},\"itemType\":{\"title\":\"Käyttötapauksen kohde\"},\"isDefault\":{\"title\":\"Oletustapaus\"}},\"UsecaseSettings\":{\"title\":\"Käyttötapausten asetukset\",\"denyServiceModel\":{\"title\":\"Ohita palvelumalli\"},\"usecases\":{\"title\":\"Räätälöinnit\"}},\"Dimensions\":{\"title\":\"Laskentakohteet\",\"costCenter\":{\"title\":\"Kustannuspaikat\"}},\"UsecaseRow\":{\"title\":\"Laskentakohteet\",\"costCenter\":{\"title\":\"Kustannuspaikat\"}},\"PercentDimension\":{\"id\":{\"title\":\"Kustannuspaikka\"},\"percent\":{\"title\":\"Prosenttia\"}},\"CostAccountingSettings\":{\"title\":\"Laskentakohteet\",\"descr\":\"Ota käyttöön Laskentakohteet palkkalaskelmille ja palkkariveille.\",\"denyServiceModel\":{\"title\":\"Ohita palvelumalli\"},\"dimensions\":{\"title\":\"Laskentakohdedimensiot\"}},\"ServiceModelCostAccounting\":{\"title\":\"Laskentakohteet\",\"descr\":\"Ota käyttöön laskentakohteet palkkalaskelmille ja palkkariveille.\",\"dimensions\":{\"title\":\"Laskentakohdedimensiot\"}},\"CostAccountingDimensionDefinition\":{\"title\":\"Laskentakohdedimensio\",\"id\":{\"title\":\"Tunnus\"},\"label\":{\"title\":\"Otsikko\"},\"options\":{\"title\":\"Valintalista\"},\"allowCostSharing\":{\"title\":\"Kustannusten jako\"},\"isRequired\":{\"title\":\"Pakollinen kenttä\"},\"scope\":{\"title\":\"Näkyvyys\"}},\"CostAccountingDimensionOption\":{\"title\":\"Dimension arvo\",\"value\":{\"title\":\"Arvo\"},\"text\":{\"title\":\"Kuvaus\"},\"scope\":{\"title\":\"Näkyvyys\"}},\"FormsWorkflow\":{\"title\":\"Työnkulku\",\"label\":{\"title\":\"Työnkulun kuvaus\"},\"initiator\":{\"title\":\"Aloittaja\"},\"approver\":{\"title\":\"Hyväksyjä\"},\"payer\":{\"title\":\"Maksaja\"},\"activeRole\":{\"title\":\"Aktiivinen rooli\"}},\"FormsSettings\":{\"title\":\"Aineiston lähetys ja työnkulut\",\"denyServiceModel\":{\"title\":\"Ohita palvelumalli\"},\"workflows\":{\"title\":\"Työnkulut\"}},\"ServiceModelForms\":{\"title\":\"Aineiston lähetys ja työnkulut\",\"workflows\":{\"title\":\"Työnkulut\"}},\"PersonAccount\":{\"identity\":{\"firstName\":{\"title\":\"Etunimi\"},\"lastName\":{\"title\":\"Sukunimi\"},\"officialId\":{\"title\":\"Henkilötunnus\"},\"ibanNumber\":{\"title\":\"Tilinumero (IBAN)\"}},\"contact\":{\"email\":{\"title\":\"Sähköpostiosoite\"},\"telephone\":{\"title\":\"Puhelinnumero\"},\"street\":{\"title\":\"Katuosoite\"},\"postalCode\":{\"title\":\"Postinumero\"},\"city\":{\"title\":\"Kaupunki\"},\"countryCode\":{\"title\":\"Maa\"}},\"verificationPin\":{\"title\":\"Tekstiviestistä saamasi puhelinnumeron vahvistuskoodi\"}},\"UnionPaymentUsecase\":{\"paymentPercentage\":{\"title\":\"Jäsenmaksun määrä\"},\"recipientFullName\":{\"title\":\"Ammattiyhdistys\"},\"iban\":{\"title\":\"Pankkitili (iban) maksun luontia varten\"},\"referenceNumber\":{\"title\":\"Pankkiviite maksun luontia varten\"}},\"ForeclosureUsecase\":{\"periodLength\":{\"title\":\"Palkanmaksukauden pituus\"},\"protectedPortionBase\":{\"title\":\"Velallisen suojaosuus\"},\"protectedPortionDependant\":{\"title\":\"Suojaosuuden lisä/huollettava\"},\"dependantsCount\":{\"title\":\"Huollettavien määrä\"},\"incomeFromOtherSources\":{\"title\":\"Muualta saatu tulo/kk\"},\"additionalAmountLeftToDebtor\":{\"title\":\"Velalliselle jätettävä määrä/kk\"},\"referenceNumber\":{\"title\":\"RF-pankkiviite maksun luontia varten\"}},\"TotalWorkerPaymentUsecase\":{\"kind\":{\"title\":\"Summan sisältämät erät\"},\"rowType\":{\"title\":\"Palkkalaji\"},\"message\":{\"title\":\"Palkkarivin kuvaus\"}},\"CarBenefitUsecase\":{\"kind\":{\"title\":\"Autoedun tyyppi\"},\"ageGroup\":{\"title\":\"Auton ikäryhmä\"},\"isKilometersBased\":{\"title\":\"Kilometripohjainen\"},\"kilometers\":{\"title\":\"Kilometrit\"},\"deduction\":{\"title\":\"Vähennys palkasta\"},\"emissionsValue\":{\"title\":\"Auton päästöarvo (0-100)\"}},\"SubsidisedCommuteUsecase\":{\"kind\":{\"title\":\"Vähennys työntekijän palkasta\"},\"deduction\":{\"title\":\"Palkasta peritty korvaus\"},\"periodDivider\":{\"title\":\"Kausien määrä (oletus 12kk)\"}},\"BicycleBenefitUsecase\":{\"kind\":{\"title\":\"Vähennys työntekijän palkasta\"},\"deduction\":{\"title\":\"Palkasta peritty korvaus\"},\"periodDivider\":{\"title\":\"Kausien määrä (oletus 12kk)\"}},\"NonProfitOrgUsecase\":{\"kind\":{\"title\":\"Korvauksen tyyppi\"}},\"DailyAllowanceUsecase\":{\"kind\":{\"title\":\"Korvauksen tyyppi\"}},\"MealBenefitUsecase\":{\"kind\":{\"title\":\"Edun tyyppi\"},\"taxablePrice\":{\"title\":\"Verotusarvo yhteensä\"},\"isTaxValue\":{\"title\":\"Peritäänkö työntekijältä korvausta ravintoedusta?\"},\"deduction\":{\"title\":\"Määrä yhteensä, joka peritään työntekijältä\"}},\"RemunerationUsecase\":{\"kind\":{\"title\":\"Tulolaji\"}},\"OtherCompensationUsecase\":{\"kind\":{\"title\":\"Tulolaji\"}},\"WorkingTimeCompensationUsecase\":{\"kind\":{\"title\":\"Tulolaji\"}},\"EmploymentTerminationUsecase\":{\"kind\":{\"title\":\"Tulolaji\"}},\"HourlySalaryWithWorkingTimeCompensationUsecase\":{\"kind\":{\"title\":\"Tuntipohjainen korvaus\"}},\"AbsenceCauseCode\":{\"causeCode\":{\"title\":\"Syy\"},\"isPaid\":{\"title\":\"Palkallinen\"},\"isHolidayAccrual\":{\"title\":\"Lomakertymät\"},\"notes\":{\"title\":\"Huomiot\"}},\"WorkerAbsencePeriod\":{\"absencesId\":{\"title\":\"Syy\"},\"worker\":{\"title\":\"Työntekijä\"},\"period\":{\"title\":\"Poissaolon kausi\"},\"causeCode\":{\"title\":\"Syy\"},\"isPaid\":{\"title\":\"Palkallinen\"},\"isHolidayAccrual\":{\"title\":\"Lomakertymät\"},\"bonusDaysCount\":{\"title\":\"Lomarahapäivät\"},\"notes\":{\"title\":\"Huomiot\"}},\"AbsencePeriodUsecase\":{\"applyPricing\":{\"title\":\"Hinnoittelu\",\"labelTrue\":\"Hae hinta työsuhteen oletusriveiltä tai lomavuodelta\",\"labelFalse\":\"Syötä hinta käsin\"}},\"PaidSickLeaveUsecase\":{\"kind\":{\"title\":\"Palkan/palkkion laji\"}},\"TrainingUsecase\":{\"kind\":{\"title\":\"Palkan/palkkion laji\"}},\"WorkPeriodUsecase\":{\"kind\":{\"title\":\"Kauden tyyppi\"}},\"EmploymentRelationInternational\":{\"country\":{\"title\":\"Asuinvaltio\"},\"contactCountry\":{\"title\":\"Maa\"},\"idType\":{\"title\":\"Tunniste asuinvaltiossa\"},\"foreignId\":{\"title\":\"Tunniste\"},\"taxAtSource\":{\"title\":\"Lähdevero\"},\"socialSecurity\":{\"title\":\"Sosiaaliturva\"},\"socialSecurityExceptions\":{\"title\":\"Vakuuttamisen poikkeustilanteen tyyppi\"}},\"PayrollInput\":{\"salaryDateKind\":{\"title\":\"Palkkapäivän valinta\"}},\"HolidaySpecificationForYear\":{\"code\":{\"title\":\"Loman kertyminen\"},\"holidayPayCalculation\":{\"title\":\"Vuosilomapalkan laskentatapa\"},\"compensation\":{\"title\":\"Lomakorvaus-%\"},\"holidayPayPercent\":{\"title\":\"Vuosilomapalkka-%\"},\"employmentPeriod\":{\"title\":\"Lomalaskennassa käytettävän työsuhteen\"}},\"HolidayPay\":{\"averageDailyPayDailySalary\":{\"title\":\"Laskettu lomapäivän palkka\"},\"averageDailyPayManual\":{\"title\":\"Syötetty keskipäiväpalkka (loma KPA)\"},\"averageDailyPay\":{\"title\":\"Laskettu keskipäiväpalkka (loma KPA)\"},\"averageDailyPayBase\":{\"title\":\"Lomanmääräytysmisvuoden ansio\"},\"averageDailyPayDays\":{\"title\":\"Työssäolopäivät\"},\"averageDailyPayMultiplier\":{\"title\":\"Keskipäiväpalkan kerroin(loma KPA)\"},\"averageHourlyPayDailySalary\":{\"title\":\"Laskettu lomapäivän palkka\"},\"averageHourlyPayManual\":{\"title\":\"Syötetty keskituntiansio (loma KTA)\"},\"averageHourlyPay\":{\"title\":\"Laskettu keskituntiansio (loma KTA)\"},\"averageHourlyPayBase\":{\"title\":\"Lomanmääräytysmisvuoden ansio\"},\"averageHourlyPayHours\":{\"title\":\"Työtuntien määrä\"},\"averageHourlyPayMultiplier\":{\"title\":\"Keskituntiansion kerroin (loma KTA)\"},\"normalMonthlyPayDailySalary\":{\"title\":\"Laskettu lomapäivän palkka\"},\"normalMonthlyPayManual\":{\"title\":\"Syötetty kuukausipalkka\"},\"normalMonthlyPay\":{\"title\":\"Kuukausipalkka työsuhteelta\"},\"percentageBasedPayDailySalary\":{\"title\":\"Laskettu lomapäivän palkka\"},\"percentageBasedPayManual\":{\"title\":\"Syötetty prosenttiperusteinen vuosilomapalkka\"},\"percentageBasedPay\":{\"title\":\"Laskettu prosenttiperusteinen vuosilomapalkka\"},\"percentageBasedPayBase\":{\"title\":\"Lomanmääräytysmisvuoden ansio\"},\"compensationPayDailySalary\":{\"title\":\"Laskettu lomapäivän korvaus\"},\"compensationPayManual\":{\"title\":\"Syötetty lomakorvaus yhteensä\"},\"compensationPay\":{\"title\":\"Laskettu lomakorvaus yhteensä\"},\"compensationPayBase\":{\"title\":\"Työssäoloajan palkat\"},\"otherPay\":{\"title\":\"Syötetty lomapäivän palkka\"},\"scriptPay\":{\"title\":\"Kaavalla laskettu lomapäivän palkka\"},\"accrual\":{\"title\":\"Lomakertymä\"}},\"HolidayPaySettings\":{\"title\":\"Vuosilomapalkan laskenta\",\"holidayPayCalculation\":{\"title\":\"Vuosilomapalkan laskentatapa\"},\"multipliers\":{\"title\":\"Kertoimet\"},\"workingTimeTypes\":{\"title\":\"Työaikaa kerryttävät rivit\"},\"overtimeTypes\":{\"title\":\"Ylityöaikaa kerryttävät rivit\"},\"salaryTypes\":{\"title\":\"Vuosilomapalkkaa kerryttävät rivit\"},\"cbaCode\":{\"title\":\"Työehtosopimus\"},\"employeeGroup\":{\"title\":\"Työntekijäryhmä\"},\"startYear\":{\"title\":\"Voimassa alkaen\"},\"endYear\":{\"title\":\"Voimassa asti\"},\"script\":{\"title\":\"Kaava\"},\"disabled\":{\"title\":\"Poistettu käytöstä\"}},\"HolidayAccrualSettings\":{\"title\":\"Lomakertymien asetukset\",\"code\":{\"title\":\"Loman kertyminen\"},\"workingTimeTypes\":{\"title\":\"Lomaa kerryttävät rivit\"},\"cbaCode\":{\"title\":\"Työehtosopimus\"},\"employeeGroup\":{\"title\":\"Työntekijäryhmä\"},\"startYear\":{\"title\":\"Voimassa alkaen\"},\"endYear\":{\"title\":\"Voimassa asti\"},\"script\":{\"title\":\"Kaava\"},\"disabled\":{\"title\":\"Poistettu käytöstä\"}},\"HolidaySettings\":{\"title\":\"Lomalaskenta\",\"denyServiceModel\":{\"title\":\"Ohita palvelumalli\"},\"holidayPaySettings\":{\"title\":\"Vuosilomapalkan laskennan asetukset\"},\"holidayAccrualSettings\":{\"title\":\"Lomakertymien asetukset\"}},\"PayStatsSettings\":{\"title\":\"Ansiolaskenta\",\"denyServiceModel\":{\"title\":\"Ohita palvelumalli\"},\"types\":{\"title\":\"Laskennat\"}},\"PayStatsTypeDefinition\":{\"title\":\"Laskennan määrittely\",\"id\":{\"title\":\"Laskennan tunniste\"},\"description\":{\"title\":\"Laskennan kuvaus\"},\"kind\":{\"title\":\"Laskennan tyyppi\"},\"periodLength\":{\"title\":\"Kauden pituus\"},\"periodDateKind\":{\"title\":\"Kauden määräytyminen\"},\"workingTimeTypes\":{\"title\":\"Työaikaa kerryttävät rivit\"},\"minWorkingTime\":{\"title\":\"Minimityöaika kaudella\"},\"salaryTypes\":{\"title\":\"Ansiota kerryttävät rivit\"},\"script\":{\"title\":\"Kaava\"},\"cbaCode\":{\"title\":\"Työehtosopimus\"},\"employeeGroup\":{\"title\":\"Työntekijäryhmä\"},\"startDate\":{\"title\":\"Voimassa alkaen\"},\"endDate\":{\"title\":\"Voimassa asti\"},\"disabled\":{\"title\":\"Poistettu käytöstä\"}},\"EmployeeGroupDefinition\":{\"title\":\"Työntekijäryhmä\",\"id\":{\"title\":\"Tunniste\"},\"name\":{\"title\":\"Nimi\"}},\"CompanyAccountSettings\":{\"title\":\"Yrityksen asetukset\",\"configs\":{\"title\":\"Asiakaskohtaiset asetukset\"}},\"BizConfig\":{\"title\":\"Asetus\",\"disabled\":{\"title\":\"Poistettu käytöstä\"},\"startDate\":{\"title\":\"Voimassa alkaen\"},\"endDate\":{\"title\":\"Voimassa asti\"},\"priority\":{\"title\":\"Prioriteetti\"},\"name\":{\"title\":\"Nimi\"},\"cbaCode\":{\"title\":\"Työehtosopimus\"},\"employeeGroup\":{\"title\":\"Työntekijäryhmä\"},\"dataType\":{\"title\":\"Tietotyyppi\"},\"data\":{\"title\":\"Data\"},\"updatedAt\":{\"title\":\"Päivitetty\"},\"updatedBy\":{\"title\":\"Päivittäjä\"}},\"EmploymentAccrual\":{\"title\":\"Kertymä\",\"type\":{\"title\":\"Kertymän tyyppi\"},\"amount\":{\"title\":\"Määrä\"},\"unit\":{\"title\":\"Yksikkö\"},\"startDate\":{\"title\":\"Alkupäivä\"},\"endDate\":{\"title\":\"Loppupäivä\"}}},\"MODEL_IR\":{\"DeliveryData\":{\"title\":\"Aineiston tiedot\",\"deliveryId\":{\"title\":\"Aineistoviite\"},\"deliveryDataType\":{\"title\":\"Tyyppi\"},\"timestamp\":{\"title\":\"Muodostamishetki\"},\"contactPersons\":{\"title\":\"Yhteyshenkilöt\"},\"reportDate\":{\"title\":\"Ilmoituspäivä\"}},\"EarningsPayment\":{\"id\":{\"title\":\"Tunniste\"},\"createdAt\":{\"title\":\"Muodostettu\"},\"updatedAt\":{\"title\":\"Päivitetty\"},\"owner\":{\"title\":\"Omistaja\"},\"partner\":{\"title\":\"Partneri\"},\"status\":{\"title\":\"Lähetyksen tila\"},\"irStatus\":{\"title\":\"Tulorekisteritila\"},\"reportLog\":{\"title\":\"Tulorekisteritapahtumat\"},\"scheduledFor\":{\"title\":\"Ajastus\"},\"isModified\":{\"title\":\"Muokattu tulorekisterilähetyksen jälkeen\"}},\"ContactPerson\":{\"title\":\"Yhteyshenkilö\",\"email\":{\"title\":\"Sähköposti\"},\"name\":{\"title\":\"Nimi\"},\"telephone\":{\"title\":\"Puhelinnumero\"},\"responsibilityCode\":{\"title\":\"Vastuualue\"}},\"Id\":{\"code\":{\"title\":\"Tunniste\"},\"type\":{\"title\":\"Tyyppi\"},\"countryCode\":{\"title\":\"Maakoodi\"},\"countryName\":{\"title\":\"Maan nimi\"}},\"PaymentPeriod\":{\"title\":\"Palkanmaksukausi ja maksu- tai ilmoituspäivä\",\"paymentDate\":{\"title\":\"Suorituksen maksupäivä tai muu ilmoituspäivä\"},\"startDate\":{\"title\":\"Alkupäivä\"},\"endDate\":{\"title\":\"Loppupäivä\"}},\"Payer\":{\"title\":\"Maksaja\",\"subOrgs\":{\"title\":\"Maksajan aliorganisaatiot\"},\"payerIds\":{\"title\":\"Maksajan tunnisteet\"},\"pensionInsurances\":{\"title\":\"Työeläkevakuutukset\"},\"accidentInsurances\":{\"title\":\"Työtapaturmavakuutukset\"}},\"PayerBasic\":{\"companyName\":{\"title\":\"Yrityksen nimi\"},\"missingId\":{\"title\":\"Maksajalla ei ole asiakastunnistetta\"}},\"PayerOther\":{\"payerTypes\":{\"title\":\"Maksajan tyypit\"}},\"Address\":{\"co\":{\"title\":\"c/o-tarkenne\"},\"street\":{\"title\":\"Katuosoite\"},\"poBox\":{\"title\":\"PL\"},\"postalCode\":{\"title\":\"Postinumero\"},\"postOffice\":{\"title\":\"Postitoimipaikka\"},\"countryCode\":{\"title\":\"Maakoodi\"},\"countryName\":{\"title\":\"Maan nimi\"}},\"TypedAddress\":{\"title\":\"Tulonsaajan osoite\",\"co\":{\"title\":\"c/o-tarkenne\"},\"street\":{\"title\":\"Katuosoite\"},\"poBox\":{\"title\":\"PL\"},\"postalCode\":{\"title\":\"Postinumero\"},\"postOffice\":{\"title\":\"Postitoimipaikka\"},\"countryCode\":{\"title\":\"Maakoodi\"},\"countryName\":{\"title\":\"Maan nimi\"},\"addressType\":{\"title\":\"Osoitteen tyyppi\"}},\"SubstitutePayer\":{\"title\":\"Sijaismaksaja\",\"acts\":{\"title\":\"Maksaja toimii sijaismaksajana\"},\"employerName\":{\"title\":\"Varsinaisen työnantajan nimi\"},\"wageSec\":{\"title\":\"Maksettu palkkaturvana\"}},\"IncomeEarner\":{\"title\":\"Tulonsaaja\",\"incomeEarnerIds\":{\"title\":\"Tulonsaajan tunnisteet\"},\"addresses\":{\"title\":\"Tulonsaajan osoitteet \"},\"professions\":{\"title\":\"Ammattiluokat\"},\"employmentRegs\":{\"title\":\"Palvelussuhteen rekisteröinti\"}},\"IncomeEarnerOther\":{\"incomeEarnerTypes\":{\"title\":\"Tulonsaajan lisätiedot\"},\"payments\":{\"title\":\"Maksujen tiedot\"}},\"Payment\":{\"paymentType\":{\"title\":\"Maksutiedon tyyppi\"},\"paymentRef\":{\"title\":\"Maksun viitenumero\"},\"paymentSpecifier\":{\"title\":\"Maksun tarkenne\"}},\"IncomeEarnerBasic\":{\"missingId\":{\"title\":\"Tulonsaajalla ei ole asiakastunnistetta\"},\"companyName\":{\"title\":\"Yrityksen nimi\"},\"firstName\":{\"title\":\"Etunimi\"},\"lastName\":{\"title\":\"Sukunimi\"},\"birthDate\":{\"title\":\"Syntymäaika\"},\"gender\":{\"title\":\"Sukupuoli\"}},\"Profession\":{\"code\":{\"title\":\"Ammattiluokan tai nimikkeen tunniste\"},\"type\":{\"title\":\"Ammattiluokan tai nimikkeistön tyyppi\"},\"title\":{\"index\":\"Ammattiluokka tai -nimike\",\"title\":\"Ammattinimike (vapaamuotoinen)\"}},\"Employment\":{\"title\":\"Palvelussuhdetiedot\",\"employed\":{\"title\":\"Palvelussuhteessa\"},\"employmentCode\":{\"title\":\"Palvelussuhteen tyyppi\"},\"termCode\":{\"title\":\"Palvelussuhteen kesto\"},\"partTime\":{\"title\":\"Osa-aikaisuuden prosentti\"},\"hoursPerWeek\":{\"title\":\"Säännöllinen sovittu viikkotyöaika\"},\"paymentTypes\":{\"title\":\"Palkkauksen muodot\"},\"employmentPeriods\":{\"title\":\"Palvelussuhteen voimassaolo\"},\"employmentEndings\":{\"title\":\"Palvelussuhteen päättyminen\"}},\"Period\":{\"title\":\"Palvelussuhteen voimassaoloaika\",\"startDate\":{\"title\":\"Alkupäivä\"},\"endDate\":{\"title\":\"Loppupäivä\"}},\"EmploymentEnding\":{\"title\":\"Palvelussuhteen päättyminen\",\"code\":{\"title\":\"Palvelussuhteen päättymisen syykoodi\"},\"type\":{\"title\":\"Palvelussuhteen päättymisen syykoodisto\"}},\"EmploymentReg\":{\"title\":\"Palvelussuhteen rekisteröinti\",\"code\":{\"title\":\"Rekisteröinnin perusteen tunniste\"},\"type\":{\"title\":\"Rekisteröinnin perusteen tyyppi\"}},\"PensionInsurance\":{\"title\":\"Työeläkevakuutus\",\"pensionActCode\":{\"title\":\"Tieto työeläkevakuutuksesta\"},\"pensionProvIdCode\":{\"title\":\"Työeläkelaitoksen yhtiötunnus\"},\"pensionPolicyNo\":{\"title\":\"Eläkejärjestelynumero\"}},\"AccidentInsurance\":{\"title\":\"Työtapaturmavakuutus\",\"accInsPolicyNo\":{\"title\":\"Työtapaturmavakuutuksen vakuutusnumero\"}},\"Absence\":{\"absenceRepStartDate\":{\"title\":\"Poissaolojen ilmoitusjakson alkupäivä\"},\"absenceRepEndDate\":{\"title\":\"Poissaolojen ilmoitusjakson loppupäivä\"}},\"UnpaidAbsence\":{\"unpaidAbsencePeriods\":{\"title\":\"Palkaton poissaolo\"}},\"UnpaidAbsencePeriod\":{\"title\":\"Poissaolojakso\",\"startDate\":{\"title\":\"Alkupäivä\"},\"endDate\":{\"title\":\"Loppupäivä\"},\"absenceDays\":{\"title\":\"Poissaolopäivien lukumäärä\"},\"causeCode\":{\"title\":\"Poissaolon syy\"}},\"PaidAbsence\":{\"paidAbsencePeriods\":{\"title\":\"Palkallinen poissaolo\"}},\"PaidAbsencePeriod\":{\"title\":\"Poissaolojakso\",\"startDate\":{\"title\":\"Alkupäivä\"},\"endDate\":{\"title\":\"Loppupäivä\"},\"absenceDays\":{\"title\":\"Poissaolopäivien lukumäärä\"},\"absenceUntil\":{\"title\":\"Poissaolo jatkuu, mihin asti\"},\"causeCode\":{\"title\":\"Poissaolon syy\"},\"amount\":{\"title\":\"Palkan määrä palkalliselta poissaoloajalta\"},\"paidAbsencePeriodInfo\":{\"title\":\"Korvaushakemuksen lisätiedot\"},\"reimbApp\":{\"title\":\"Korvaushakemustiedot\"}},\"ReimbPayment\":{\"title\":\"Korvaushakemustiedot\",\"paymentType\":{\"title\":\"Maksutiedon tyyppi\"},\"paymentRef\":{\"title\":\"Maksun viitenumero\"},\"paymentSpecifier\":{\"title\":\"Maksun tarkenne\"}},\"Report\":{\"transactions\":{\"title\":\"Tulolajit\"}},\"Transaction\":{\"title\":\"Tulolaji\",\"dailyAllowance\":{\"title\":\"Päiväraha\"},\"earningPeriods\":{\"title\":\"Ansaintakaudet\"},\"insuranceData\":{\"title\":\"Vakuuttamistiedot\"},\"otherBenefit\":{\"title\":\"Muu luontoisetu\"},\"unitWages\":{\"title\":\"Palkan yksikkö\"},\"carBenefit\":{\"title\":\"Autoetu\"},\"kmAllowance\":{\"title\":\"Kilometrikorvaus (verovapaa) \"},\"mealBenefit\":{\"title\":\"Ravintoetu\"},\"recoveryData\":{\"title\":\"Takaisinperinnän lisätiedot\"},\"sailorIncome\":{\"title\":\"Merityötulo\"},\"sixMonthRule\":{\"title\":\"6 kk sääntö\"},\"transactionBasic\":{\"title\":\"Tulolajin yleistiedot\"}},\"SubOrg\":{\"title\":\"Aliorganisaatio\",\"type\":{\"title\":\"Aliorganisaation tunnisteen tyyppi\"},\"code\":{\"title\":\"Aliorganisaation tunniste\"}},\"EarningPeriod\":{\"title\":\"Ansaintakausi\",\"startDate\":{\"title\":\"Alkupäivä\"},\"endDate\":{\"title\":\"Loppupäivä\"}},\"TransactionInclusion\":{\"title\":\"Vakuuttamistieto\",\"insuranceCode\":{\"title\":\"Vakuuttamistiedon tyyppi\"},\"included\":{\"title\":\"Vakuutusmaksun perusteena\"}},\"UnitWage\":{\"title\":\"Yksikköpalkka\",\"unitPrice\":{\"title\":\"Yksikköhinta\"},\"unitAmount\":{\"title\":\"Yksiköiden määrä \"},\"unitCode\":{\"title\":\"Yksikkö\"}},\"CarBenefit\":{\"carBenefitCode\":{\"title\":\"Autoedun tyyppi\"},\"ageGroupCode\":{\"title\":\"Auton ikäryhmä\"},\"kilometers\":{\"title\":\"Auton kilometrimäärä\"},\"emissionsValue\":{\"title\":\"Auton päästöarvo (0-100)\"}},\"KmAllowance\":{\"title\":\"Kilometrikorvaus (verovapaa)\",\"kilometers\":{\"title\":\"Kilometrien määrä\"}},\"MealBenefit\":{\"title\":\"Ravintoetu\",\"taxValue\":{\"title\":\"Ravintoedusta peritty korvaus vastaa verotusarvoa\"}},\"RecoveryData\":{\"title\":\"Takaisinperinnän lisätiedot\",\"recoveryDate\":{\"title\":\"Takaisinperintäpäivä\"},\"taxAtSource\":{\"title\":\"Takaisinperittyyn määrään kohdistuva lähdevero\"},\"withhold\":{\"title\":\"Takaisinperittyyn määrään kohdistuva ennakonpidätys\"},\"origPaymentPeriods\":{\"title\":\"Alkuperäiset palkanmaksukaudet\"}},\"OrigPaymentPeriod\":{\"title\":\"Alkuperäinen palkanmaksukausi\",\"paymentDate\":{\"title\":\"Maksupäivä\"},\"startDate\":{\"title\":\"Alkupäivä\"},\"endDate\":{\"title\":\"Loppupäivä\"}},\"SailorIncome\":{\"title\":\"Merityötulo\",\"crossTradeTime\":{\"title\":\"Cross-trade-aika\"},\"sailorIncomeProp\":{\"title\":\"Suoritus maksettu merityötulona \"},\"withdrawalPeriod\":{\"title\":\"Nostettavissaolokausi\"}},\"WithdrawalPeriod\":{\"title\":\"Nostettavissaolokausi\",\"startDate\":{\"title\":\"Alkupäivä\"},\"endDate\":{\"title\":\"Loppupäivä\"}},\"SixMonthRule\":{\"title\":\"6 KK sääntö\",\"applicable\":{\"title\":\"Kuuden kuukauden sääntö soveltuu \"},\"countryCode\":{\"title\":\"Maakoodi\"},\"countryName\":{\"title\":\"Maan nimi\"}},\"TransactionBasic\":{\"title\":\"Tulolajin yleistiedot\",\"transactionCode\":{\"title\":\"Tulolajin koodi\"},\"amount\":{\"title\":\"Määrä\"},\"noMoney\":{\"title\":\"Maksettu muuna kuin rahana\"},\"oneOff\":{\"title\":\"Kertakorvaus\"},\"recovery\":{\"title\":\"Takaisinperintä\"},\"unjustEnrichment\":{\"title\":\"Perusteeton etu\"}},\"ApiValidation\":{\"title\":\"Validointi\",\"isValid\":{\"title\":\"Validi\"},\"hasAllRequiredFields\":{\"title\":\"Kaikki pakolliset kentät\"},\"errors\":{\"title\":\"Virheet\"}},\"ApiValidationError\":{\"title\":\"Validointivirhe\",\"code\":{\"title\":\"Koodi\"},\"key\":{\"title\":\"Avain\"},\"msg\":{\"title\":\"Viesti\"},\"type\":{\"title\":\"Tyyppi\"}},\"PayerSummary\":{\"title\":\"Erillisilmoitus\",\"id\":{\"title\":\"Tunniste\"},\"createdAt\":{\"title\":\"Muodostettu\"},\"updatedAt\":{\"title\":\"Päivitetty\"},\"owner\":{\"title\":\"Omistaja\"},\"partner\":{\"title\":\"Partneri\"},\"status\":{\"title\":\"Lähetyksen tila\"},\"irStatus\":{\"title\":\"Tulorekisteritila\"},\"reportLog\":{\"title\":\"Tulorekisteritapahtumat\"},\"scheduledFor\":{\"title\":\"Ajastus\"},\"isModified\":{\"title\":\"Muokattu tulorekisterilähetyksen jälkeen\"}},\"ReportLogEntry\":{\"title\":\"Tulorekisteritapahtuma\",\"irTimestamp\":{\"title\":\"Tulorekisterin aikaleima\"},\"eventType\":{\"title\":\"Tapahtumatyyppi\"},\"reportId\":{\"title\":\"Raporttitunnus\"},\"irReportId\":{\"title\":\"Tulorekisterin raporttitunnus\"},\"irDeliveryId\":{\"title\":\"Toimitustunnus\"},\"irResponseId\":{\"title\":\"Vastaustunnus\"},\"irVersion\":{\"title\":\"Tulorekisteriversio\"},\"user\":{\"title\":\"Käyttäjä\"},\"versionId\":{\"title\":\"Versiotunnus\"},\"message\":{\"title\":\"Viesti\"}},\"ApiScheduleObject\":{\"title\":\"Jono-objekti\",\"id\":{\"title\":\"Raporttitunnus\"},\"startAt\":{\"title\":\"Ajastus\"},\"action\":{\"title\":\"Operaatio\"}},\"PaymentMonth\":{\"title\":\"Kohdekausi\",\"year\":{\"title\":\"Vuosi\"},\"month\":{\"title\":\"Kuukausi\"}},\"ReportData\":{\"title\":\"Palvelun tiedot\",\"actionCode\":{\"title\":\"Toimenpiteen tyyppi\"},\"irReportId\":{\"title\":\"Tulorekisterin ilmoitusviite\"},\"reportId\":{\"title\":\"Maksajan ilmoitusviite\"},\"reportVersion\":{\"title\":\"Ilmoituksen versionumero\"}}},\"NG1\":{\"ApiCrudObjectComponent\":{\"id\":\"Id\",\"owner\":\"Omistaja\",\"readOnly\":\"Read-only\",\"partner\":\"Partner\",\"name\":\"Nimi\",\"description\":\"Kuvaus\",\"entityType\":\"Tyyppi\",\"status\":\"Status\",\"deleteDialog\":\"Haluatko varmasti poistaa tämän tietueen?\"},\"BrandListComponent\":{\"partner\":\"Kumppani\"},\"DatepickerComponent\":{\"validationErrorDefault\":\"Virheellinen päivämäärä, oletus: d.M.yyyy\",\"validationErrorRequired\":\"Päivämäärä on pakollinen\",\"validationErrorDisabled\":\"Päivämäärää ei voi valita\",\"validationErrorDateRangeRequired\":\"Alku- ja loppupäivämäärät ovat pakollisia\",\"validationErrorDateRangeInvalid\":\"Loppupäivämäärä ei voi olla ennen alkupäivämäärää\",\"validationErrorYear\":\"Virheellinen vuosi, oletus: yyyy\",\"validationErrorMonth\":\"Virheellinen kuukausi, oletus: mm/yyyy\"},\"ImportStagingCalcRowsEditorComponent\":{\"validation\":\"Validointi\",\"employmentId\":\"Työsuhteen ID\",\"personalId\":\"Henkilötunnus\",\"rowType\":\"Palkkalaji\",\"kind\":\"Alalaji\",\"total\":\"Yhteensä\",\"edit\":\"Muokkaa\",\"noValidation\":\"Ei validointia\",\"period\":\"Palkkakausi\",\"status\":\"Tila\",\"payroll\":\"Palkkalista\",\"originalPayroll\":\"Siirretty palkkalistasta\",\"rowStatuses\":{\"preview\":\"Esikatselu\",\"new\":\"Uusi (hyväksytty)\",\"deleted\":\"Poistettu\",\"error\":\"Virheitä\",\"committed\":\"Lähetetty\",\"ignored\":\"Ei huomioida\",\"edited\":\"Käsin syötetty\"}},\"ImportStagingComponent\":{\"dialog\":{\"commitPayroll\":\"Lähetetään palkkalistaa...\",\"recalculating\":\"Lasketaan uudelleen...\"},\"toolbar\":{\"removeFilter\":\"Poista filtteri\",\"selectPayroll\":\"Valitse palkkalista\",\"commitPayroll\":\"Lähetä palkkalistaan\",\"recalculateAll\":\"Laske hinnat uudelleen\",\"moveToPayroll\":\"Siirrä palkkalistaan\",\"selectAndMove\":\"Valitse ja siirrä\",\"deleteFromData\":\"Poista datasta\",\"moveToStatus\":\"Siirrä tilaan:\",\"rowsInImport\":\"Rivit importissa\"},\"list\":{\"title\":\"Nimi\",\"personalId\":\"Henkilötunnus (tyyppi)\",\"grossSalary\":\"Palkka\",\"netSalary\":\"Netto\",\"calcCount\":\"Laskelmia\",\"total\":\"Yhteensä\"},\"status\":{\"all\":\"Kaikki\",\"preview\":\"Esikatselu\",\"new\":\"Uusi (hyväksytty)\",\"deleted\":\"Poistettu\",\"error\":\"Virheitä\",\"committed\":\"Lähetetty\",\"ignored\":\"Ei huomioida\",\"edited\":\"Muokattu\"},\"details\":{\"period\":\"Periodi ja palkkapäivä:\",\"payroll\":\"Palkkalista:\",\"noPayroll\":\"Ei palkkalistaa\",\"notTheSameAsSelectedPayroll\":\"Ei päänäkymässä valittu palkkalista!\",\"rawRows\":\"Rivit (sisään tulevat)\",\"allRows\":\"Kaikki rivit\",\"rows\":\"Laskelman rivit\",\"calculator\":\"Laskuri\",\"salarySlips\":\"Palkkalaskelmat\",\"reports\":\"Raportit\",\"debug\":\"Raakadata\",\"recalculate\":\"Laske uudelleen\",\"commitPayroll\":\"Lähetä palkkalistaan\",\"editRows\":\"Muokkaa rivejä\",\"manualRows\":\"Käsin syötetyt rivit\",\"manuallyEditableRows\":\"Käsin muokattavat rivit\",\"preview\":\"Esikatselu\",\"rowsOutsidePayrollCountLeadText\":\"Työntekijällä on\",\"rowsOutsidePayrollCountEndText\":\"riviä palkkalistojen ulkopuolella.\",\"leftCalculations\":\"laskelmaa\",\"leftRows\":\"riviä\",\"noPreviewCalc\":\"Tälle palkkalistalle ei ole esikatselulaskelmaa.\",\"previewWarning\":\"HUOM: Tämän välilehti on vain laskelman esikatselua varten. Rivejä ei voi muokata / et voi tallentaa muutoksia.\",\"previewWarning2\":\"Tee muutokset \\\"Käsin syötetyt rivit\\\"-välilehdellä.\"},\"salarySlipList\":{\"status\":\"Tila\",\"id\":\"ID\",\"grossSalary\":\"Brutto\",\"netSalary\":\"Netto\",\"salaryDate\":\"Palkkapäivä\",\"period\":\"Palkkakausi\",\"payrollLink\":\"linkki...\",\"type\":{\"preview\":\"Luonnokset\",\"committed\":\"Palkkalistassa\",\"all\":\"Kaikki\",\"distinct\":\"Aktiivisin versio\"}},\"statusGroup\":{\"todo\":\"Käsiteltävät\",\"waitingCommit\":\"Odottaa lähetystä\"},\"payrollView\":{\"title\":\"Tuonnin tila\",\"btnMoreInfo\":\"Katso tarkemmin...\"}},\"InvoicesComponent\":{\"channel\":\"Kanava\",\"dueDate\":\"Eräpäivä\",\"invoiceDate\":\"Laskun päivä\",\"invoices\":\"Laskut\",\"noInvoices\":\"Ei laskuja\",\"receiverAndType\":\"Saaja ja laskun tyyppi\",\"receiver\":\"Laskun saaja\",\"selectChannelBtn\":\"Valitse maksun tyyppi (filter)\",\"showAllPaymentMethods\":\"Näytä kaikki maksutavat\",\"view\":\"Näkymä: \",\"status\":\"Tila\",\"statusAll\":\"Kaikki maksut\",\"statusWaitingConfirmation\":\"Maksamista odottavat\",\"statusPaid\":\"Maksetut ja perutut\",\"statusForecast\":\"Arviot ja esikatselut\",\"sum\":\"Summa\",\"loadedSecondsAgo\":{\"html\":\"Ladattu <strong>{{ loadedTime }}s</strong> sitten\"},\"refreshListBtn\":\"Päivitä listat\",\"payer\":\"Maksaja\",\"paid\":\"Maksettu\",\"iban\":\"Laskun IBAN\",\"noIbanNumber\":\"Ei tilinumeroa\",\"createInvoiceBtn\":\"Luo\",\"markAsPaidBtn\":\"Luo ja kuittaa\",\"createInvoices\":\"Luo ja lataa aineisto tai..\",\"markAsPaid\":\"Luo, lataa ja kuittaa maksetuksi\",\"markAsPaidOnly\":\"Merkitse maksetuksi\",\"detailsBtn\":\"Yksityiskohdat\",\"invoiceType\":\"Aineiston tyyppi\",\"all\":\"Kaikki\",\"duplicateInvoices\":\"VIRHE: Osa laskuista on duplikaatteja\"},\"InvoicesPanelComponent\":{\"invoices\":\"Laskut\",\"noInvoices\":\"Ei laskuja\",\"paid\":\"Maksettu\"},\"CfaPaymentOverviewComponent\":{\"lead\":\"Tarkista alla olevat tiedot ja jatka maksuun\",\"days\":\"päivää\",\"totalPayments\":\"Maksu yhteensä\",\"calculations\":\"Laskelmia\",\"palkkausCfaPaytrailInfo\":\"Verkkopankkimaksamiseen liittyvän maksunvälityspalvelun toteuttaa Paytrail Oyj (2122839-7) yhteistyössä suomalaisten pankkien ja luottolaitosten kanssa. Käyttäjän kannalta palvelu toimii aivan kuten perinteinen verkkomaksaminenkin.\",\"palkkausCfaPaytrailInfoAlt\":\"HUOM: nettopalkan saapuminen työntekijän tilille saattaa kestää 4 pankkipäivää, riippuen vastaanottajan pankista. Huomioithan nämä ajat maksaessasi. Ajat johtuvat pankkien välisistä palveluista ja sopimuksista, eikä Palkkaus.fi pysty vaikuttamaan niihin.\"},\"EmailSharingComponent\":{\"title\":\"Sähköposti työnantajalle\",\"emailTo\":\"Sähköposti\",\"emailCC\":\"Sähköpostin kopio / CC\",\"message\":\"Viesti työnantajalle\",\"sendEmail\":\"Lähetä linkki sähköpostilla\",\"body\":{\"html\":\"Voit lähettää linkin sisältävän sähköpostin työnantajallesi syöttämällä työnantajan sähköpostiosoitteen alla olevaan <b>Sähköposti</b> -kenttään. Voit lisätä myös oman osoitteesi <b>Sähköpostin kopio / CC</b> -kenttään, jolloin saat lähetetystä sähköpostista kopion. <b>Viesti työnantajalle</b> -kenttään voit lisätä esim. ne ehdot, jotka on työstä sovittu. Sähköposti lähtee työnantajalle, kun painat <b>Lähetä linkki sähköpostilla</b> -painiketta.\"}},\"ExportComponent\":{\"exportLengths\":{\"all\":\"Kaikki rivit\",\"current\":\"Esikatselussa olevat rivit\",\"short\":\"Viimeiset 1000 riviä\",\"long\":\"Viimeiset 10 000 riviä\"},\"export\":{\"creating\":\"Luodaan...\",\"noRows\":\"Ei rivejä\",\"rowsCopiedOnClipboard\":\"riviä kopioitu leikepöydälle.\",\"noFormatSupportTitle\":\"Ei vielä toteutettu\",\"noFormatSupportDescription\":\"Tätä tiedostotyyppiä ei ole toteutettu.\"},\"creatingRows\":\"Luodaan objekteille rivejä...\"},\"IrEprComponent\":{\"searchWorker\":\"Hae työntekijää\",\"status\":\"Tila\",\"salaryDate\":\"Palkkapäivä\",\"sendTime\":\"Lähetysaika\",\"payment\":\"Maksettava\",\"grossSalary\":\"Brutto\",\"irModified\":\"Ilmoitusta on muokattu käsin\",\"modified\":\"Muokattu\",\"delayed\":\"Myöhässä\",\"firstDelivery\":\"Ensimmäinen lähetys\",\"latestDelivery\":\"Viimeisin / tuleva lähetys\"},\"IrPsrComponent\":{\"searchWorker\":\"Hae työntekijää\",\"notificationType\":\"Ilmoituksen tyyppi\",\"status\":\"Tila\",\"month\":\"Kuukausi\",\"sendTime\":\"Lähetysaika\",\"savaPayment\":\"SAVA-maksu\",\"expense\":\"Vähennys\",\"modified\":\"Muokattu\",\"delayed\":\"Myöhässä\",\"firstDelivery\":\"Ensimmäinen lähetys\",\"latestDelivery\":\"Viimeisin / tuleva lähetys\"},\"InvoiceEditComponent\":{\"error\":\"Laskua ei löydy\",\"heading\":\"Lähetä tilan päivityspyyntö maksukanavaan\",\"headingAlt\":\"Päivitä maksun tila\",\"headingInfo\":\"Testilomake tilan päivityspyynnön lähettämiseen. Alla voit myös poistaa laskun.\",\"headingInfoAlt\":\"Kun olet maksanut laskun, voit kirjata sen tästä maksetuksi\",\"channel\":\"Kanava\",\"invoiceStatus\":\"Maksun tila\",\"sendRequest\":\"Lähetä pyyntö\",\"updateStatusBtn\":\"Päivitä tila\",\"deleteInvoice\":\"Poista lasku\",\"deleteInvoiceWithCals\":\"Poista lasku ja siihen liittyvät laskelmat\"},\"InvoicePreviewComponent\":{\"fullInvoice\":\"Koko lasku\",\"tableInvoice\":\"Vain taulukko\",\"error\":\"Laskua ei löydy\",\"showFile\":\"Näytä tiedosto\",\"refresh\":\"Päivitä\",\"recipient\":\"Maksun saaja\",\"payer\":\"Maksaja\",\"date\":\"Päivämäärä\",\"dueDate\":\"Eräpäivä\",\"referenceNumber\":\"Viitenumero\",\"iban\":\"Saajan pankkitili\",\"status\":\"Status\",\"description\":\"Kuvaus\",\"articleIdAccounting\":{\"html\":\"Tuotteen nimi (koodi)<br />Tiliöinti\"},\"count\":\"Määrä\",\"priceExVat\":\"Hinta (alv0)\",\"vatPercent\":\"Alv %\",\"total\":\"Yhteensä\",\"totalExVat\":\"Yhteensä ALV 0%\",\"totalVat\":\"ALV Yhteensä\",\"invoiceTotal\":\"Maksettava yhteensä\"},\"InvoicesCreateTableComponent\":{\"receiverInvoiceType\":\"Saaja ja laskun tyyppi\",\"comingToPay\":\"Tulossa maksuun\",\"invoiceDate\":{\"html\":\"Laskun päivä<br /> Eräpäivä\"},\"invoiceSum\":\"Laskun summa\",\"dueDateTypePreview\":\"Maksu luodaan myöhemmin\",\"dueDateTypeZero\":\"Ei maksua: Merkitään suoraan maksetuksi\",\"sendsInvoice\":\"lähettää laskun\",\"dueDateTypeDefault\":\"Maksetaan nyt\",\"dueDateTypePaid\":\"Maksettu aiemmin\",\"totalSalaries\":\"Palkkoja yhteensä\",\"payInvoice\":\"Maksa maksu\",\"cancelInvoice\":\"Peruuta maksu\",\"PalkkausInvoicesTaxPreviewText\":\"Maksetaan nyt tai kun kaikki kuukauden palkat on maksettu\"},\"InvoicesCreateComponent\":{\"uiStatusInvalid\":\"Verokortti puuttuu tai muu laskelmavirhe. Tarkista laskelma!\",\"uiStatusLoading\":\"Ladataan maksutietoja...\",\"updateView\":\"Päivitä näkymä\",\"invalid\":\"Laskelmaa ei voi maksaa\",\"validationError\":\"Verokortti puuttuu tai muu laskelmavirhe. Tarkista laskelma!\",\"uiStatusCreated\":{\"invoicesCreated\":{\"html\":\"Palkoista on jo luotu alustavat laskut. Laskuja ei ole vielä lähetetty maksuun. <strong>Lähetä laskut maksuun klikkaamalla 'Lähetä maksuun'-nappia</strong>\"},\"inProgress\":{\"html\":\"<strong>Laskujen maksu aloitettu:</strong> Laskujen tilan näet alla olevasta listasta.\"},\"paid\":\"Laskut on maksettu\",\"exceptions\":\"Laskuissa on virheitä. Tarkista tilanne laskukohtaisesti alta.\",\"canceled\":\"Laskuja on peruttu. Tarkista tilanne laskukohtaisesti alta.\",\"paymentStarted\":\"Laskut on lähetetty maksuun\",\"calcPaid\":\"Palkkalaskelma on maksettu\"},\"uiStatusDefault\":\"Maksutapaa ei ole valittu. Valitse maksutapa laskelmassa/palkkalistassa.\",\"uiStatusUserCanceled\":\"Käsittely peruttu\",\"PaymentChannel\":{\"zeroPaymentInfo\":\"Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen.\",\"zeroPaymentIntro\":\"Kaikki maksut ovat nollamaksuja tai sivukulujen laskuja, jotka luodaan/maksetaan vasta myöhemmin. Merkitse nettopalkat maksetuksi painamalla Maksa -nappia.\",\"createPaymentInfo\":\"Luo maksut painamalla Maksa -nappia.\",\"createNetPaymentInfo\":\"Luo maksut nettopalkoista painamalla Maksa -nappia.\",\"createPayments\":\"Luo maksut\",\"createInvoices\":\"Luo laskut\",\"createPaymentMaterial\":\"Luo maksuaineisto\",\"sendForPayment\":\"Lähetä maksuun\",\"createAndMarkPaid\":\"Luo ja kuittaa maksut\",\"checkPayment\":\"Tarkista maksun tila\",\"markPaid\":\"Merkitse maksetuksi\",\"creatingInvoices\":\"Luodaan laskuja...\",\"paymentDialogOpened\":\"Maksuikkuna avattu...\",\"default\":{\"paymentMethod\":\"Maksumenetelmä\"},\"undefined\":{\"intro\":\"<div><p class=\\\"lead\\\">Maksumenetelmä <strong>{{ channel }}</strong> ei ole tuettu tässä palvelussa tai sinun tilitoimistosi / kirjanpito-ohjelmasi kautta. Valitse jokin toinen maksumenetelmä.</p></div>\",\"title\":\"Maksumenetelmää ei ole valittu\"},\"test\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukuluista saat laskut automaattisesti hyväksyttäväksi kuun vaihteen jälkeen.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia.</strong></p></div>\"},\"zeroPayment\":{\"intro\":\"<div><p class=\\\"lead\\\"><strong>Maksutapa ei mahdollinen!</strong> Tämä maksumenetelmä on vain tilanteisiin, jossa käytetään jotain muuta maksumenetelmää ja maksun loppusumma olisi nolla. Et voi valita maksumenetelmää suoraan</p></div>\",\"introWhenValid\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen.</p><p><strong>Kaikki maksut ovat nollamaksuja tai sivukulujen laskuja, jotka luodaan/maksetaan vasta myöhemmin. Merkitse nettopalkat maksetuksi painamalla 'Merkitse maksetuksi' -nappia.</strong></p></div>\",\"successAlertHeading\":\"Laskelmat merkitty maksetuksi (nollamaksu)\",\"successAlertText\":\"Laskelma(t) on merkitty maksetuiksi ja niistä tehdään tulorekisteri-ilmoitus viiden päivän kuluessa.\"},\"external\":{\"intro\":\"TODO: Not implemented\"},\"palkkausManual\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Maksujen luonti SEPA- tai viitesiirtoaineistoja varten\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Maksut -listalle. Merkitse lasku maksetuksi, kun olet maksanut laskua vastaavan summan. Laskut sivukuluista tulevat Maksut-listalle automaattisesti kuun vaihteen jälkeen. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset maksetuksi merkityistä nettopalkoista.\"},\"palkkausManualAndFixed\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo ja kuittaa maksut' -nappia.</strong></p></div>\",\"heading\":\"Maksujen luonti SEPA- tai viitesiirtoaineistoja varten\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu ja kuitattu suoraan maksetuksi.\\n\\nLöydät nettolaskut takautuvista palkoista valitsemalla maksulistauksesta Maksetut ja perutut. Laskut sivukuluista tulevat Maksut-listalle automaattisesti kuun vaihteen jälkeen. Takautuvan palkan kohdistuessa kaudelle, joka on jo suljettu, pitää työnantajasuoritukset hoitaa suoraan Omaverossa. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset maksetuksi merkityistä nettopalkoista palkkapäivän mukaan. Huomioithan, että myöhässä tehdystä ilmoituksesta voi seurata myöhästymismaksuja eri viranomaisilta.\"},\"palkkausWS\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä maksuista eräpäivineen.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Maksujen luonti pankin WS-kanavaan\",\"successAlertHeading\":\"Maksun/maksujen luonti onnistui\",\"successAlertText\":\"Maksu(t) nettopalkasta on nyt luotu WS-kanavaan. Maksut verottajalle luodaan WS-kanavaan automaattisesti kuun vaihteen jälkeen. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset maksetuksi merkityistä nettopalkoista.\"},\"palkkausPSD\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä maksuista eräpäivineen.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"PSD maksujen luonti\",\"successAlertHeading\":\"Maksun/maksujen luonti onnistui\",\"successAlertText\":\"Maksu(t) nettopalkasta on nyt luotu. Maksut verottajalle luodaan automaattisesti kuun vaihteen jälkeen. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset maksetuksi merkityistä nettopalkoista.\"},\"palkkausPersonal\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Laskut nettopalkasta ja verosta on nyt luotu Maksut -listalle. Merkitse nettopalkan lasku maksetuksi, kun olet maksanut laskua vastaavan summan. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset maksetuksi merkityistä nettopalkoista.\"},\"palkkausInvoices\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen.</p><p><strong>Luo laskut painamalla 'Luo laskut' -nappia.</strong></p></div>\",\"heading\":\"Laskujen luonti palkkalaskelmista\",\"successAlertHeading\":\"Haluatko maksaa palkat heti?\",\"successAlertText\":\"<div><p class='lead'>\\nPalkasta on nyt luotu laskut, mutta niitä ei vielä ole laitettu maksuun.\\nHaluatko maksaa palkat ja/tai sivukulut nyt vai syöttää lisää laskelmia?\\n</p>\\n<p><strong>HUOM:</strong> Palkat ilmoitetaan tulorekisteriin vasta, kun nettopalkka on merkitty maksetuksi.</p></div>\",\"successAlertOk\":\"Maksa laskut nyt\",\"successAlertCancel\":\"Syötä lisää palkkoja\"},\"kitsas\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen.</p><p><strong>Luo laskut painamalla 'Luo laskut' -nappia.</strong></p></div>\",\"heading\":\"Laskujen luonti palkkalaskelmista\",\"successAlertHeading\":\"Haluatko maksaa palkat heti?\",\"successAlertText\":\"<div><p class='lead'>\\nPalkasta on nyt luotu laskut, mutta niitä ei vielä ole laitettu maksuun.\\nHaluatko maksaa palkat ja/tai sivukulut nyt vai syöttää lisää laskelmia?\\n</p>\\n<p><strong>HUOM:</strong> Palkat ilmoitetaan tulorekisteriin vasta, kun nettopalkka on merkitty maksetuksi.</p></div>\",\"successAlertOk\":\"Maksa laskut nyt\",\"successAlertCancel\":\"Syötä lisää palkkoja\"},\"palkkausCfaPaytrail\":{\"intro\":\"TODO: Not implemented\"},\"palkkausCfaReference\":{\"intro\":\"TODO: Not implemented\"},\"palkkausCfaFinvoice\":{\"intro\":\"TODO: Not implemented\"},\"palkkausEcfaPaytrail\":{\"intro\":\"TODO: Not implemented\"},\"palkkausEcfaReference\":{\"intro\":\"TODO: Not implemented\"},\"palkkausEcfaFinvoice\":{\"intro\":\"TODO: Not implemented\"},\"palkkausCfaTest\":{\"intro\":\"TODO: Not implemented\"},\"accountorGo\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukuluista saat laskut automaattisesti hyväksyttäväksi kuun vaihteen jälkeen Accountor Go -palvelun Maksut-osioon.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia ja käy hyväksymässä ne Accountor Go -palvelun Maksut-osiossa.</strong></p></div>\",\"heading\":\"Palkkojen maksu Accountor Go-palvelussa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Accountor Go -palvelun Maksut-osioon. Käy hyväksymässä lasku kohdasta 'Avoimet maksut'. Lasku näkyy siellä noin 2 minuutin sisällä. Laskut sivukuluista tulevat Avoimet maksut -osioon automaattisesti kuun vaihteen jälkeen. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\",\"notZeroPayment\":{\"lead\":\"Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukuluista saat laskut automaattisesti hyväksyttäväksi kuun vaihteen jälkeen Accountor Go -palvelun Maksut-osioon.\",\"info\":\"Luo maksut nettopalkoista painamalla Maksa -nappia ja käy hyväksymässä ne Accountor Go -palvelun Maksut-osiossa.\"},\"zeroPayment\":{\"info\":\"Kaikki maksut ovat nollamaksuja tai sivukulujen laskuja, jotka luodaan/maksetaan vasta myöhemmin. Merkitse nettopalkat maksetuksi painamalla Maksa -nappia.\",\"successAlertHeading\":\"Laskelmat merkitty maksetuksi (nollamaksu)\",\"successAlertText\":\"Laskelma(t) on merkitty maksetuiksi ja niistä tehdään tulorekisteri-ilmoitus viiden päivän kuluessa.\"}},\"talenomOnline\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkasta ja mahdollisista ulosottomaksuista muodostetaan heti laskut hyväksyttäväksi Easor App -sovellukseen. Sivukulujen sekä ay-jäsenmaksujen laskut valmistuvat palkanmaksupäivää seuraavan kuun alussa ja siirtyvät samaan tapaan Easor App -sovellukseen hyväksyttäväksi ja maksettavaksi.</p><p><strong>Luo laskut ja lähetä ne Easor App -sovellukseen painamalla 'Lähetä maksuun' -painiketta.</strong></p></div>\",\"heading\":\"Palkkojen maksu Easor App -sovelluksessa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Easor App -sovellukseen. Laskut sivukuluista tulevat Easor App -sovellukseen automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"holviCfa\":{\"intro\":\"TODO: Not implemented\"},\"finagoSolo\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukuluista saat laskut automaattisesti hyväksyttäväksi kuun vaihteen jälkeen Procountor Solon Maksut-osioon.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia ja käy hyväksymässä ne Procountor Solon Maksut-osiossa.</strong></p></div>\",\"heading\":\"Palkkojen maksu Procountor Solossa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Procountor Solo Maksut-osioon. Käy hyväksymässä lasku kohdasta 'Avoimet maksut'. Lasku näkyy siellä noin 2 minuutin sisällä. Laskut sivukuluista tulevat Avoimet maksut -osioon automaattisesti kuun vaihteen jälkeen. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\",\"notZeroPayment\":{\"lead\":\"Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukuluista saat laskut automaattisesti hyväksyttäväksi kuun vaihteen jälkeen Procountor Solon Maksut-osioon.\",\"info\":\"Luo maksut nettopalkoista painamalla Maksa -nappia ja käy hyväksymässä ne Procountor Solon Maksut-osiossa.\"},\"zeroPayment\":{\"info\":\"Kaikki maksut ovat nollamaksuja tai sivukulujen laskuja, jotka luodaan/maksetaan vasta myöhemmin. Merkitse nettopalkat maksetuksi painamalla Maksa -nappia.\"}},\"procountor\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Procountoriin painamalla 'Luo maksut' -nappia.</strong></p></div>\"},\"kevytyrittaja\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukuluista saat laskut automaattisesti hyväksyttäväksi kuun vaihteen jälkeen Talenom Kevytyrittäjä -palveluun.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Talenom Kevytyrittäjä -palvelussa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Talenom Kevytyrittäjä -Palveluun. Laskut sivukuluista tulevat Talenom Kevytyrittäjä -palveluun automaattisesti kuun vaihteen jälkeen. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\",\"notZeroPayment\":{\"lead\":\"Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukuluista saat laskut automaattisesti hyväksyttäväksi kuun vaihteen jälkeen Talenom Kevytyrittäjä -palveluun.\"}},\"vismaNetvisor\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Visma Netvisoriin painamalla 'Luo maksut' -nappia.</strong></p></div>\"},\"askelma\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Askelmaan painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Askelma -palvelussa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Askelma-palveluun. Mene ostoreskontraan, hae palkat maksuun ja palkkapäivän jälkeen kuittaa palkat tulorekisteriin ostoreskontran tulorekisteriin kuittaamattomat -haun kautta. Kuun vaihteen jälkeen hae ostoreskontraan lasku verottajan maksuista.\"},\"briox\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuun liittyvistä kustannuksista ja niiden eräpäivistä. Nettopalkka maksetaan työntekijälle välittömästi tai asetetun tulevan palkanmaksupäivän mukaisesti. Sivukulujen maksut suoritetaan seuraavan kuukauden alussa jolloin ne tulee käsitellä palkanmaksujen listassa.</p><p><strong>Luo nettopalkkojen maksuaineistot ja lähetä ne Brioxiin odottamaan käsittelyä napsauttamalla 'Lähetä Brioxiin' -painiketta.</strong></p></div>\",\"heading\":\"Palkkojen maksu Briox -palvelussa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Briox -Palveluun. Laskut sivukuluista tulevat Briox -palveluun automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"lemonaid\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Lemonaidiin painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Lemonaid -ohjelmassa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Lemonaid -ohjelmalle. Laskut sivukuluista tulevat Lemonaid -ohjelmaan automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"laskupiste\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Laskupisteeseen painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Laskupisteessä\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu ja ne tulevat näkyviin Laskupisteeseen viiden minuutin kuluessa. Laskut sivukuluista tulevat Laskupisteeseen automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"passeliMerit\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Passeli Meritiin painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Passeli Meritissä\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu ja ne tulevat näkyviin Passeli Meritiin hetken kuluttua. Laskut sivukuluista tulevat Passeli Meritiin automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"odoo\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Odoon painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Odoossa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu ja ne tulevat näkyviin Odoon hetken kuluttua. Laskut sivukuluista tulevat Odoon automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"hausvise\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen maksuaineisto valmistuu seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksuaineisto nettopalkoista painamalla 'Luo maksuaineisto' -nappia.</strong></p></div>\",\"heading\":\"Hausvise - maksuaineiston luonti\",\"successAlertHeading\":\"Maksuaineiston luonti onnistui\",\"successAlertText\":\"Maksuaineisto nettopalkasta on nyt luotu. Maksuaineisto sivukuluista luodaan automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"ecom\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Ecomiin painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Ecomissa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu ja ne tulevat näkyviin Ecomiin hetken kuluttua. Laskut sivukuluista tulevat Ecomiin automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"kompassi\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Kompassiin painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Kompassissa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu ja ne tulevat näkyviin Kompassiin hetken kuluttua. Laskut sivukuluista tulevat Kompassiin automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"domus\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Domukseen painamalla 'Lähetä maksuun' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Domuksessa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu ja ne tulevat näkyviin Domukseen hetken kuluttua. Laskut sivukuluista tulevat Domukseen automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"holvi\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Holviin painamalla 'Lähetä maksuun' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Holvissa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Holviin. Laskut sivukuluista tulevat Holviin automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"}}},\"InvoicesService\":{\"saving\":\"Tallennetaan laskelmaa\",\"creatingPayment\":\"Luodaan laskua\",\"sending\":\"Lähetetään\",\"logic\":{\"title\":{\"holviCfa\":\"Palkan maksaminen\",\"talenomCfa\":\"Maksaminen Talenom-onlinessa\",\"palkkausInvoices\":\"Laskujen esikatselu\",\"default\":\"Maksun esikatselu\"},\"okButtonText\":{\"holviCfa\":\"Luo maksu\",\"talenomCfa\":\"Maksa Talenom-onlinessa\",\"palkkausInvoices\":\"Luo laskut\",\"isCfaChannel\":\"Maksa\",\"default\":\"Lähetä maksuun\"},\"instructions\":{\"holviCfa\":\"Voit luoda maksun Holvin palveluun. Maksun luonnin jälkeen laskelma(t) siirtyvät \\\"maksu aloitettu\\\" tilaan. Kun vahvistat luotuja maksuja, laskelmat siirtyvät \\\"maksettu\\\" tilaan.\",\"talenomCfa\":\"Voit maksaa laskelma(t) Talenom-onlinessa. Palvelu lähettää sähköisen laskun Talenom-onlineen ja laskelmat siirtyvät \\\"maksu aloitettu\\\" tilaan.\"}},\"canceledPayment\":{\"default\":\"Haluatko varmasti perua palkanmaksun?\",\"cancelCantReopen\":\"Haluatko varmasti perua palkanmaksun? Peruttua laskelmaa ei voi avata uudelleen.\",\"cancelPaymentAndIr\":\"Peru maksu ja tulorekisteri-ilmoitus\",\"closeWithoutCancel\":\"Sulje perumatta\"},\"paymentConfirmation\":{\"realyWantToMarkPaid\":\"Haluatko varmasti merkitä palkan maksetuksi?\",\"markPaid\":\"Merkitse maksetuksi\",\"close\":\"Sulje ilman merkintää\"},\"missingSignatureAlert\":{\"signatureMissing\":\"Valtakirjan allekirjoitus puuttuu\",\"creationCompleteBeforePay\":\"Ennen kuin lähdet maksamaan, sinun täytyy viedä tilin luonti loppuun asti\",\"signSignature\":\"ja allekirjoittaa valtakirja.\",\"continueToSignature\":\"Jatka allekirjoitukseen (vaatii pankkitunnukset)?\",\"continue\":\"Jatka\",\"close\":\"Sulje\"},\"eprWarningForPayment\":{\"isDelayed\":\"Annetulle palkkapäivälle tehtävä palkkatietoilmoitus myöhästyy, koska ilmoitus pitää tehdä 5 päivän kuluessa palkkapäivästä. Ota huomioon, että tästä saattaa seurata myöhästymismaksu.\"},\"eprWarningForCancellation\":{\"isDelayed\":\"Palkanmaksusta tehdyt tulorekisteri-ilmoitukset perutaan automaattisesti.\",\"infoText\":\"Jos maksat palkan uudestaan samalle palkkapäivälle, ota huomioon, että uudesta palkkatietoilmoituksesta saattaa seurata myöhästymismaksu.\"},\"isPaid\":{\"payment\":\"Maksu\",\"paid\":\"Laskelma/palkkalista on maksettu.\",\"cantCreatePayment\":\"Maksua ei voitu luoda\",\"cantCreatePaymentAlreadyPaid\":\"Maksua ei voitu luoda. Tarkista, onko laskelma/palkkalista jo maksettu.\"},\"createInvoice\":{\"cantCreateInvoice\":\"Maksua ei voitu luoda\",\"cantCreateInvoiceCheck\":\"Maksua ei voitu luoda. Tarkista, onko laskelma/palkkalista jo maksettu.\"},\"sendEInvoice\":{\"ajax\":{\"title\":\"Verkkolasku on lähetetty\",\"msg\":\"Maksu on lähetetty verkkolaskuna osoitteeseen\",\"error\":{\"title\":\"Verkkolaskua ei lähetetty\",\"msg\":\"Maksua ei voitu lähettää verkkolaskuna\"},\"operatorStatus\":\"Status operaattorilta\"},\"paymentChannel\":{\"palkkausCfaTest\":{\"paying\":\"Maksetaan\"},\"holviCfa\":{\"paying\":\"Luodaan maksua Holviin\",\"salariesMovedToPay\":\"Palkka/palkat on nyt siirretty maksuun\",\"holviConfirm\":\"Mene Holvin Tapahtumat-sivulle ja vahvista maksu\",\"afterConfirmation\":\"Maksun vahvistuksen jälkeen työntekijän nettopalkka\",\"accountsToWorker\":\"tilittyy työntekijän tilille 2–4 pankkipäivän kuluessa\",\"palkkausIr\":\"Palkkaus.fi tekee tulorekisteri-ilmoitukset ja tilittää maksut eri tahoille\"},\"talenomCfa\":{\"paying\":\"Luodaan maksua Talenom-onlineen\",\"salariesMovedToPay\":\"Lähetys onnistui\",\"talenomConfirm\":\"Maksusta on lähetetty lasku Talenom Online -palveluun\",\"afterConfirmation\":\"Maksun päivittymisessä voi kestää 1-15 minuuttia\",\"confirm\":\"Käy vielä hyväksymässä maksu Talenom Online -palvelussa\"}}},\"paytrail\":{\"invoicePaid\":{\"heading\":\"Maksu\",\"text\":\"Laskelma/palkkalista on jo maksettu\"},\"invoiceMissing\":{\"heading\":\"Maksua ei voitu luoda\",\"text\":\"Maksua ei voitu luoda. Tarkista, onko laskelma/palkkalista jo maksettu\"}},\"palkkausPersonalInvoice\":{\"updatingPaymentStatus\":\"Päivitetään maksun tilaa\",\"isPayroll\":{\"heading\":\"Palkkalista ja kotitaloudet\",\"text\":\"Palkkalistan käyttöä ei tueta toistaiseksi kotitalouksien palkanmaksussa\"},\"createInvoice\":{\"heading\":\"Maksun tilaa ei voitu päivittää\",\"text\":\"Maksun tilaa ei voitu päivittää. Tarkista, onko maksu peruttu\"}}},\"ODataActionsComponent\":{\"toExcel\":\"Exceliin\",\"export\":\"Tietojen vienti\",\"import\":\"Tietojen tuonti\",\"getDefaults\":{\"copyExcel\":\"Excel copy-paste\",\"fileExcel\":\"Excel-tiedosto\",\"copyCsv\":\"CSV copy-paste\",\"fileCsv\":\"CSV-tiedosto\"}},\"ODataFooterComponent\":{\"showing\":\"Näytetään\",\"rows\":\"riviä\",\"downloadMore\":\"Lataa lisää\",\"showAll\":\"Näytä kaikki\",\"showingRows\":\"Näytetään rivit\",\"total\":\"yhteensä\",\"nextPage\":\"Seuraava sivu\",\"getNoItemsMessage\":{\"anon\":\"Tämä listaus vaatii kirjautumisen. Kirjaudu sisään!\",\"loadError\":\"Listan lataamisessa tapahtui virhe. Tarkista internet-yhteys, navigoi vasemmasta reunasta jollekin muulle sivulle ja tähän uudelleen. Jos ongelma jatkuu, ota yhteyttä asiakaspalveluun.\",\"noItems\":\"Listassa ei ole yhtään riviä.\"}},\"ODataCalendarEventComponent\":{\"description\":\"Kuvaus\",\"categories\":\"Kategoriat\",\"period\":\"Periodi\",\"duration\":\"Kesto\",\"step1Title\":\"Perustiedot\",\"step2Title\":\"Muistutukset ja viestit\",\"step3Title\":\"Esikatselu\",\"showDetailsDialogTitle\":\"Uusi kalenteritapahtuma\",\"showDetailsDialogTitle2\":\"Muokkaa tapahtumaa\",\"getEventDurationError\":\"Virhe: Loppu on ennen alkua.\",\"calendarClickNoDescription\":\"Ei kuvausta\",\"calendarClickDuration\":\"ajastus\",\"reoccuringEvent\":\"Toistuva tapahtuma\",\"event\":\"Tapahtuma\",\"notificationEnabledSummary\":\"Muista hyväksyä palkkalista\",\"showEditEventTitle\":\"Automaattinen palkkalista: Ajastus ja muistutukset\"},\"AccountingReportComponent\":{\"accountingReports\":\"Kirjanpitoraportti\",\"loadingReport\":\"Ladataan raporttia\"},\"AccountingReportBuilder\":{\"dataType\":{\"label\":\"Kirjaustapa\",\"accrualBasis\":\"Suoriteperuste\",\"cashBasis\":\"Maksuperuste\"},\"queryType\":{\"label\":\"Raportin laskelmat\",\"periodQuery\":\"Kausi\",\"periodQueryMonth\":\"Kuukausi\",\"periodQueryCustom\":\"Muu aikaväli\",\"selectMonth\":\"Valitse kuukausi\",\"selectQuarter\":\"Valitse neljänneksellä oleva kuukausi\",\"selectYear\":\"Valitse vuosi\",\"selectStartDate\":\"Valitse kauden aloituspäivä\",\"selectEndDate\":\"Valitse kauden päättymispäivä\",\"selectionQuery\":\"Valitse laskelmat\"},\"getRows\":\"Hae rivit\",\"button\":{\"addPaidCalc\":\"Lisää maksettu laskelma\",\"addDraftCalc\":\"Lisää luonnoslaskelma\"}},\"AccountNumbersComponent\":{\"title\":\"Valitse tili\",\"accountNumber\":\"Tilinumero\",\"description\":\"Selite\",\"choose\":\"Valitse\"},\"CumulativeReportPeriodSelection\":{\"title\":\"Valitse kausi\",\"periodLabel\":\"Kausi\",\"enumOptionYear\":\"Vuosi\",\"enumOptionMonth\":\"Kuukausi\",\"enumOptionAll\":\"Kaikki\",\"enumOptionCustom\":\"Muu aikaväli\",\"periodDateKindLabel\":\"Kauden määräytyminen\",\"salaryDateEnum\":\"Työntekijän palkkapäivä\",\"paidAtDateEnum\":\"Työnantajan suoritus\",\"workDateEnum\":\"Työn palkkakausi\",\"month\":\"kuukautta\",\"chooseMonthLabel\":\"Valitse kuukausi\",\"year\":\"vuosi\",\"chooseYearLabel\":\"Valitse vuosi\",\"refDateCustomLabel\":\"Valitse kauden aloituspäivä\",\"endDateCustomLabel\":\"Valitse kauden päättymispäivä\",\"workersLabel\":\"Työntekijät\",\"chosen\":\"Valittu\",\"all\":\"Kaikki\",\"more\":\"Lisää\"},\"CumulativeReportSaveTemplate\":{\"title\":\"Raporttipohja\",\"isNewLabel\":\"Uusi/muokkaa\",\"isNewLabelTrue\":\"Luo uusi raporttipohja nykyisestä raportista\",\"isNewLabelFalse\":\"Muokkaa nykyistä raporttipohjaa\",\"currentLabel\":\"Raporttipohjan nimi\"},\"EntryCodesComponent\":{\"title\":\"Valitse rivityyppi ja -koodi\",\"entryCodeGroupLabel\":\"Rivityyppi\",\"incomeTypeLabel\":\"Tulolaji\",\"totalTypeLabel\":\"Laskettu erä\"},\"FlagsComponent\":{\"title\":\"Valitse valintaliput\",\"flag\":\"Lippu\",\"description\":\"Selite\",\"prefix\":\"Ryhmä\"},\"InputIncomeType\":{\"getRowLabelNotFound\":\"Tulolajia ei löydy: \",\"getPlaceholder\":\"Hae Tulorekisterin tulolajeista...\"},\"InputOccupationType\":{\"getPlaceholder\":\"Kirjoita hakusana luokitukselle...\"},\"InputCollectiveBargainAgreement\":{\"getPlaceholder\":\"Kirjoita hakusana työehtosopimukselle...\"},\"IncomeTypeCodeEditorComponent\":{\"title\":\"Tulolajieditori\",\"carBenefitTypeLabel\":\"Autoedun tyyppi\",\"noSelection\":\"Ei valintaa\",\"carBenefitLimited\":\"Käyttöetu\",\"carBenefitFull\":\"Vapaa autoetu\",\"carBenefitAgeGroupCodeLabel\":\"Autoedun ikävalinta\",\"carBenefitKilometersLabel\":\"Kilometrit\",\"carBenefitEmissionsValueLabel\":\"Auton päästöarvo (0-100)\",\"mealBenefitLabel\":\"Ravintoetu vastaa verotusarvoa\",\"mealBenefitTrue\":\"Kyllä\",\"mealBenefitFalse\":\"Ei\",\"dailyAllowanceTypeLabel\":\"Päivärahan tyyppi\",\"add\":\"Lisää\",\"partialDailyAllowanceEnum\":\"Osapäiväraha\",\"fullDailyAllowanceEnum\":\"Kokopäiväraha\",\"internationalDailyAllowanceEnum\":\"Ulkomaan päiväraha\"},\"IrImportAbsencesDialogComponent\":{\"heading\":\"Valitse poissaolot\",\"absences\":\"Poissaolot\",\"wholeAbsence\":\"Koko poissaolo\",\"isHolidayAccrual\":{\"html\":\"Palkattomat palkkakaudelle<br /> Lomakertymää vähentää\"},\"isPaid\":\"Palkallinen.\",\"notPaid\":\"Ei palkkaa.\",\"isAccrual\":\"Työssäolon veroinen.\",\"notAccrual\":\"Ei työssäolon veroinen.\"},\"IrScheduleSendDialogComponent\":{\"heading\":\"Lähetyksen ajastus\",\"dateLabel\":\"Päivämäärä\",\"timeLabel\":\"Kellonaika\",\"dateTimeLabel\":\"Lähetyshetki\"},\"AccountAuthorizationPersonComponent\":{\"identificationTitle\":\"Tunnistautuminen\",\"notIdentified\":\"Et ole vielä tunnistautunut\",\"identifyBtn\":\"Tunnistaudu\",\"haveIdentified\":\"Olet tunnistautunut\",\"credentialLabel\":\"Tunniste:\",\"authorizationTypeLabel\":\"Valtuutus:\",\"userInfoTitle\":\"Käyttäjätiedot\",\"userNameLabel\":\"Käyttäjätunnus:\",\"authMethodLabel\":\"Kirjautumistapa\",\"termsAndPrivacyTitle\":\"Tietosuoja ja käyttöehdot\",\"termsLabel\":\"Palkkaus.fi:n käyttöehdot\",\"termsBtn\":{\"html\":\"<a href=\\\"https://www.palkkaus.fi/kayttoehdot/\\\" target=\\\"_blank\\\">Lue</a>\"},\"privacyLabel\":\"Sopimus henkilötietojen käsittelystä\",\"privacyBtn\":{\"html\":\"<a href=\\\"https://www.palkkaus.fi/sopimus-henkilotietojen-kasittelysta/\\\" target=\\\"_blank\\\">Lue</a>\"},\"privacyStatementLabel\":\"Palkkaus.fi:n tietosuojaseloste\",\"privacyStatementBtn\":{\"html\":\"<a href=\\\"https://www.palkkaus.fi/tietosuoja/\\\" target=\\\"_blank\\\">Lue</a>\"}},\"AccountAvatarEditPersonComponent\":{\"avatarLabel\":\"Kuva\",\"avatarTypeLabel\":\"Kuvan tyyppi\",\"optionChoose\":\"Valitse kuvan tyyppi\",\"optionIcon\":\"Kuvake\",\"optionUploaded\":\"Kuva omalta koneelta\",\"optionGravatar\":\"Gravatar\",\"gravatarInfo\":{\"html\":\"Gravatar-kuva on linkitetty sähköpostiosoitteeseen ja sähköpostiosoitteen omistaja voi itse vaihtaa kuvan osoitteessa www.gravatar.com. Sitä käytetään myös monissa muissa palveluissa: blogeissa, keskustelufoorumeilla jne.\"},\"initialsLabel\":\"Nimikirjaimet\",\"colorLabel\":\"Väri\",\"uploadImageLabel\":\"Lataa kuva koneelta\",\"uploadImage\":{\"html\":\"Klikkaa tästä ja lataa kuva<br>(maks. 10MB)<br />\"},\"preferredImageSize\":\"Suositeltu kuvan koko: 120px x 50px\",\"colorBrown\":\"Ruskea\",\"colorLime\":\"Lime\",\"colorDarkGreen\":\"Tummanvihreä\",\"colorPink\":\"Pinkki\",\"avatarDescription\":{\"html\":\"Kuva ei ole pakollinen tieto palkanmaksussa.\"}},\"AccountContactEditPersonComponent\":{\"addressInfo\":\"Osoite ei ole pakollinen palkanmaksussa.\",\"verificationPinLabel\":\"Tekstiviestistä saamasi puhelinnumeron vahvistuskoodi\",\"verificationPinInfo\":\"Puhelinnumeroa käytetään kevyeen tunnistautumiseen. Siksi numeron vaihtaminen vaatii varmistuksen tekstiviestillä.\",\"orderVerificationBtn\":\"Tilaa koodi\",\"addressLabel\":\"Osoite\",\"requestContactVerificationPin\":{\"alertTitle\":\"Koodi lähetetty\",\"alertText\":\"Vahvistuskoodi on lähetetty antamaasi numeroon.\"}},\"AccountDetailsEditPersonComponent\":{\"nameLabel\":\"Nimi\",\"nameDecription\":{\"html\":\"Nimen muokkaaminen vaatii aina pankki&shy;tunnistuksen. Tämä hoidetaan rekisteröinnin ohjatulla toiminnolla.\"},\"launchWizardBtn\":\"Aloita muutos\",\"personalIdDescription\":{\"html\":\"Palkkaus.fi-tili on aina kiinnitetty henkilötunnukseen. Jos henkilötunnuksesi muuttuu, kirjaudu ulos ja luo uusi Palkkaus.fi-tili uudella henkilötunnuksella tai ota yhteys asiakaspalveluumme.\"}},\"AccountDetailsPersonComponent\":{\"personalInfoTabHeading\":\"Henkilötiedot\",\"contactInfoTabHeading\":\"Yhteystiedot\",\"avatarTabHeading\":\"Kuva\",\"authorizationTabHeading\":\"Tunnistautuminen\",\"insurancesTabHeading\":\"Vakuutukset\"},\"AccountInfoPersonComponent\":{\"noSelection\":\"Työntekijää ei ole valittu\"},\"AccountInfoComponent\":{\"panelTitle\":\"Palkkaus.fi-tilin tiedot\",\"companyName\":\"Yrityksen nimi\",\"companyType\":\"Yhtiömuoto\",\"legalEntityType\":\"Tilin tyyppi\",\"authorizationType\":\"Valtuutus\",\"palkkausAccount\":\"Palkkaus.fi-tili\",\"email\":\"Sähköposti\",\"phone\":\"Puhelinnumero\",\"address\":\"Osoite\",\"ibanNumber\":\"Pankkitili\",\"description\":{\"html\":\"Jokaisella käyttäjällä on palvelussamme Palkkaus.fi-tili. Palkkaus.fi-tiliin tallennetaan palkanmaksua varten tiedot sekä kaikki maksutapahtumat. Voit muokata tietojasi <a href='{{ accountWizardUrl }}'>ohjatusta toiminnosta täältä</a> (vaatii pankkitunnukset).\"},\"lead\":{\"infoText\":\"Jokaisella yrityksellä (kuten myös kotitaloustyönantajalla ja työntekijällä) on palvelussamme Palkkaus.fi-tili. Palkkaus.fi-tiliin tallennetaan palkanmaksua varten tiedot sekä kaikki maksutapahtumat. Voit muokata tietojasi\",\"buttonText\":\"ohjatusta toiminnosta täältä\",\"infoTextAlt\":\"(vaatii pankkitunnukset).\"},\"officialId\":\"Y-tunnus\",\"changeAvatar\":\"Vaihda kuvake\",\"editContactInfo\":\"Muokkaa yhteystietoja\"},\"AccountingReportQueryComponent\":{\"reportCalcsLabel\":\"Raportin laskelmat\",\"periodQueryEnum\":\"Kausi\",\"selectionQueryEnum\":\"Valitse laskelmat\",\"addPaidCalcs\":\"Lisää maksettu laskelma\",\"addDraftCalcs\":\"Lisää luonnoslaskelma\",\"periodDateKindLabel\":\"Kauden määräytyminen\",\"paidAtDateEnum\":\"Maksupäivä (työnantajan suorittama maksu)\",\"salaryDateEnum\":\"Palkkapäivä (tulorekisteriin raportoitu päivä)\",\"period\":\"Kausi\",\"monthEnum\":\"Kuukausi\",\"customEnum\":\"Muu aikaväli\",\"monthPlaceHolder\":\"kuukautta\",\"refDateMonthLabel\":\"Valitse kuukausi\",\"refDateQuarterLabel\":\"Valitse neljänneksellä oleva kuukausi\",\"yearPlaceholder\":\"vuosi\",\"refDateYearLabel\":\"Valitse vuosi\",\"refDateCustomLabel\":\"Valitse kauden aloituspäivä\",\"endDateCustomLabel\":\"Valitse kauden päättymispäivä\",\"status\":\"Tila\",\"date\":\"Pvm\",\"salary\":\"Palkka\",\"payment\":\"Maksu\",\"notSelected\":\"(Työntekijää ei ole valittu)\",\"queryRows\":\"Hae rivit\"},\"AccountingReportRowsComponent\":{\"accountNumber\":\"Ehdotustili\",\"accountName\":\"Selite\",\"saldo\":\"Yhteensä\",\"calculation\":\"Laskelma\",\"description\":\"Kuvaus\",\"vatPercent\":\"Alv %\",\"sum\":\"Summa\",\"projectNumber\":\"Projektinumero\",\"costCenter\":\"Kustannuspaikka\"},\"AccountingReportToolsComponent\":{\"target\":\"Kohde\",\"settingsAddMoreTargets\":\"Asetukset: Lisää kohteita\",\"createExport\":\"Luo aineisto\",\"showRowsAndExports\":\"Näytä tilit ja viennit\",\"showOnlyRows\":\"Näytä vain tilit\",\"exportLabel\":\"Luo aineisto valituista\",\"schemes\":{\"default\":{\"label\":\"Vakioaineisto\"},\"compact\":{\"label\":\"Suppea aineisto\"},\"extended\":{\"label\":\"Laaja aineisto\"}},\"status\":\"Tila\",\"accountingData\":\"Kirjanpitoaineisto\"},\"CumulativeReportComponent\":{\"chooseData\":\"Valitse data\",\"selectPeriod\":\"Valitse kausi\",\"selectCalcs\":\"Valitse palkkalaskelmat\",\"selectPayrolls\":\"Valitse palkkalistat\",\"reportTemplates\":\"Raporttipohjat\",\"saveTemplate\":\"Tallenna pohjaksi\"},\"AccountingReportsComponent\":{\"year\":\"vuosi\",\"period\":\"Kausi\",\"salaries\":\"Palkat\",\"payments\":\"Maksut\",\"salariesAlt\":\"Palkkoja\",\"workers\":\"Työntekijöitä\",\"material\":\"Aineisto\",\"responsiblePerson\":\"Vastuuhenkilö\",\"chooseAll\":\"Valitse kaikki\",\"unselect\":\"Poista valinnat\",\"pce\":\"kpl\",\"createMaterial\":\"Luo aineisto\",\"notSelected\":\"(Työntekijää ei ole valittu)\",\"accountingReports\":\"Kirjanpidon raportit\",\"showFilters\":\"Näytä suodattimet\",\"mm\":\"kk\",\"noAccountingReports\":\"Ei kirjanpitoraportteja\",\"calcs\":\"Laskelmat\",\"workersAlt\":\"Työntekijät\"},\"AccountingReportsPanelComponent\":{\"accountingReports\":\"Kirjanpidon raportit\",\"showFilters\":\"Näytä suodattimet\",\"mm\":\"kk\",\"noAccountingReports\":\"Ei kirjanpitoraportteja\",\"calcs\":\"Laskelmat\",\"workersAlt\":\"Työntekijät\"},\"AccountingTargetDetailsComponent\":{\"accountingTargetLegend\":\"Tiliöintipohjan tiedot\",\"noTemplate\":\"Tämä tiliöintimalli on alkuperäinen: se ei perustu mihinkään tiliöintipohjaan.\",\"hasTemplate\":\"Tämä tiliöintimalli on merkitty tiliöintipohjaksi.\",\"readOnly\":\"Tätä tiliöintimallia ei voi muokata. Luo muokattava malli kopioimalla.\",\"name\":\"Nimi\",\"id\":\"ID\",\"excelCsv\":\"Excel/Csv\",\"excelCsvFormat\":\"Excel/Csv-muoto\",\"availableMethods\":\"Vientitapa\",\"exportMethod\":\"Vientitapa\",\"exportMethods\":\"Vientitavat\",\"channel\":\"Kirjanpitokanava\",\"logoUrl\":\"Logo\",\"tabs\":{\"overview\":\"Perustiedot\",\"chartOfAccounts\":\"Tilikartta (koko kirjanpito)\",\"usedAccounts\":\"Käytetyt tilit (palkkojen tiliöinti)\",\"guidelines\":\"Ohjeet\",\"rules\":\"Tiliöintisäännöt\",\"accountingQuery\":\"Kirjanpitokysely\"},\"pasteFromClipboard\":\"Liitä leikepöydältä\",\"createTargetCoAFromAccounts\":\"Luo tilikartta uusi tilikartta tilikarttapohjasta\",\"readFile\":\"Lataa tiedosto\",\"accountNumber\":\"Tilinumero\",\"ruleCount\":\"Sääntöjen määrä\",\"noAccountNumberFound\":\"Tilinumeroa ei löydy tuodulta tilikartalta\",\"changeAccount\":\"Vaihda tiliä\",\"guidelinesInfo\":{\"html\":\"<p class=\\\"lead\\\"><strong>Tiliöintimalli</strong> määrittelee miten palkkalaskelman rivit ja sivukulut (eläkemaksut, työttömyysvakuutusmaksut, SAVA-maksut ja verot) viedään kirjanpitoon. Määrittely tehdään taulukkomuodossa, missä kullekin rivin tulolajille ja sivukulutyypille määritetään sekä credit- että debet-tili.</p><p>Kirjanpidot tiliöinnit etusivun alta löytyvät käytettävissä olevat tiliöintimallit. Ne sisältävät sekä järjestelmän vakiomalleja että mahdollisesti käyttäjän luomia omia malleja.</p><p>Jos vakiomallin kirjaukset eivät sovi käyttäjän tarpeisiin, voidaan <strong>uusi tiliöintimalli luoda kopioimalla vakiomalli.</strong> Vakiomalleja ei voi muokata tai poistaa. Kopioitua mallia voidaan muokata tilien sekä vientisääntöjen osalta <ul><li>Mallille voidaan antaa kuvaava nimi.</li><li>Vakiomallilta kopioituneita rivejä voidaan ottaa käyttöön/poistaa käytöstä.</li><li>Uusi rivejä voidaan lisätä kopioimalla vakiomallin rivi.</li><li>Tilikartalla voidaan muuttaa tilinumeroa ja tilin kuvausta.</li><li>Tilikartalle voidaan lisätä uusia tilejä.</li><li>Voit ladata oman tilikartan pohjaksi.</li></ul></p><p><strong>Tiliöintisäännöt</strong> -välilehdellä kullekin rivin tulolajille ja sivukulutyypille määritetään sekä credit- että debet-tili. Credit- ja debet-tilin valinta on mahdollista tehdä vain niistä tileistä, mitkä on listattu <strong>Käytetyt tilit</strong>-välilehdellä. Samaa tilinumeroa olevat viennit voidaan haluttaessa ryhmittelyn (ryhmän id ja kuvaus) avulla jäsentää omiksi ryhmikseen. Jokainen kirjanpitovienti perustuu siihen, että kullekin rivityypille ja sivukulutyypille löytyy määrittelyrivi. Rivin valinta tapahtuu seuraavilla säännöillä:<ol><li>Haetaan riveistä kaikki ne rivit, missä on laskelman rivin tulolajia tai sivukulutyyppiä vastaava arvo.</li><li>Jos rivi ei ole käytössä, sitä ei oteta mukaan.</li><li>Tarkistetaan valintalippujen vastaavuus: valitaan se rivi, missä on eniten samoja valintalippuja kuin laskelman rivillä tai sivukululla. Jos löytyy useampi rivi, missä on samat valintaliput, valitaan näistä se rivi, missä valintalippujen lukumäärä on pienin.</li><li>Rivin perusteella tehdään kirjaus. Jos Kirjaa-valinta ei ole päällä, riviä ei kirjata.</li></ol></p>\"},\"sortDefault\":\"Järjestä tulolajeittain\",\"sortByAccountPairs\":\"Ryhmittele tilipareittain\",\"sortByAccount\":\"Ryhmittele tileittäin\",\"accounts\":\"Tilit\",\"sorting\":\"Järjestely\",\"editorQuery\":{\"selectedAmount\":\"Valittu\",\"addDraftBtn\":\"Lisää luonnoslaskelma\",\"status\":\"Tila\",\"date\":\"Pv\",\"salary\":\"Palkka\",\"payment\":\"Maksu\",\"notSelected\":\"(Työntekijää ei ole valittu)\",\"unselect\":\"Poista valinta\",\"fetchRowsBtn\":\"Hae rivit\"},\"rulesTables\":{\"incomeTypeHead\":\"Tulolaji tai laskettu erä\",\"additionalSelectionsHead\":\"Lisävalinnat\",\"includeHead\":\"Kirjaa\",\"enabledHead\":\"Käytössä\",\"debetHead\":\"Debet-tili / ryhmittely\",\"creditHead\":\"Kredit-tili / ryhmittely\",\"included\":\"Kirjataan\",\"excluded\":\"Ei kirjata\",\"enabled\":\"Käytössä\",\"disabled\":\"Ei käytössä\",\"debitUndefined\":\"Debit-tili ei määritetty\",\"creditUndefined\":\"Kredit-tili ei määritetty\",\"notIncluded\":\"Ei kirjanpitoon\",\"editRule\":\"Muokkaa sääntöä\",\"copyAsNewRule\":\"Kopioi uudeksi säännöksi\",\"changeIncomeTypeBtn\":\"Vaihda tulolaji tai laskettu erä\",\"editAdditionalsBtn\":\"Muokkaa lisävalintoja\",\"changeAccountBtn\":\"Vaihda tili\",\"grouping\":\"Ryhmittely\",\"changeGroupingBtn\":\"Vaihda ryhmittely\",\"addGrouping\":\"Lisää ryhmittely (tiliöintiteksti)\",\"calcRowBtnPS\":\"laskelman rivi\",\"incomeTypeBtnPS\":\"tulolaji\",\"accountsHead\":\"Tilit\"},\"filters\":{\"rowsToShow\":\"Näytä\",\"all\":\"Kaikki tilit\",\"includedAndEnabled\":\"Kirjaavat tilit\",\"error\":\"Virheelliset tilit\",\"showNormal\":\"Näytä muokkausnäkymä\",\"showDistinct\":\"Näytä tiliyhteenveto\",\"noRows\":\"Valitulla suodattimella ei löytynyt rivejä\"}},\"AccountingTargetsComponent\":{\"exportDefinition\":\"Viennin määrittely\",\"targetChannel\":\"Kohde / kanava\",\"owner\":\"Omistaja\",\"status\":\"Status\"},\"AccountingTargetSettings\":{\"title\":\"Kirjanpitokohde\",\"intro\":\"Valitse käytettävä oletuskohde. Voit myös lisätä kohteita.\",\"accountingLegend\":\"Kirjanpito\",\"serviceModelLegend\":\"Palvelumalli\",\"overwriteServiceModel\":\"Ohita palvelumalli\",\"defaultTarget\":\"Oletuskohde\"},\"AccountantComponent\":{\"title\":\"Kirjanpitäjä / tilitoimisto\",\"intro\":\"Lisää tähän kirjanpitäjäsi yhteystiedot tai tilitoimistokumppani, jolle annetaan pääsy suoraan Palkkaus.fi palveluun kirjanpidon ja palkkatietojen hakemiseksi.\",\"addPrimaryPartner\":\"Lisää tilitoimistokumppani\",\"intro2\":\"Näet nykyisen kirjanpitäjäsi/tilitoimistosi tiedot alla. Voit muuttaa tai poistaa tietoja.\",\"name\":\"Nimi\",\"officialId\":\"Y-tunnus\",\"email\":\"Sähköposti\",\"phone\":\"Puhelinnumero\",\"accountantType\":\"Tilitoimiston oikeudet\",\"primaryPartner\":\"Tilitoimistokumppanin oikeudet\",\"pendingPrimaryPartner\":\"Odottaa tilitoimistokumppanin vahvistusta\",\"unlinkedPrimaryPartner\":\"Uutta tilitoimistokumppania pyydetty\",\"unlinkedAccountingOnly\":\"Tilitoimistokumppani ilman pääsyä Palkkaus.fi palveluun\",\"showConfirmPartnerRemovalTitle\":\"Poista tilitoimistokumppani\",\"showConfirmPartnerRemovalDesciption\":\"Poiston jälkeen tilitoimistollasi ei ole pääsyä raportteihisi. Haluatko varmasti poistaa kumppanin?\"},\"AuthInfoHeadersComponent\":{\"partners\":{\"integrations\":{\"introTitle\":\"Ohjelmistokumppanit\",\"introLead\":\"Tällä sivulla näet kaikki ohjelmistokumppanipalvelut, jotka sinulla on käytössä. Aktivoi lisäpalveluita klikkaamalla kumppanikorttia\"},\"accountantsTitle\":\"Tilitoimistot\",\"introTitle\":\"Kumppanipalvelut\",\"introLead\":\"Tällä sivulla näet kaikki kumppanipalvelut, jotka sinulla on käytössä. Aktivoi ja muuta palveluita klikkaamalla kumppanikorttia.\",\"accountants\":{\"introTitle\":\"Tilitoimistokumppanit\",\"introLead\":\"Tällä sivulla näet mahdollisen tilitoimistopalvelun, joka sinulla on käytössä. Muuta kumppania klikkaamalla kumppanikorttia.\"}},\"askelma\":{\"cta\":\"Lisätietoja Askelmasta\",\"description\":\"Askelma on kustannustehokas ja helppokäyttöinen taloushallinnon pilvipalvelu yrityksen ja tilitoimiston yhteiskäyttöön.\",\"link\":\"http://askelma.com/\"},\"easoft\":{\"cta\":\"Lisätietoja Easoftista\",\"description\":\"Easoft on helppo­käyttöinen toiminnanohjaus­järjestelmä projektin­hallintaan.\",\"link\":\"https://easoft.fi/\"},\"ecom\":{\"cta\":\"Lisätietoja Ecomista\",\"description\":\"Tarjoamme kattavan LVIS- ja rakennusalan taloudenhallinta- ja toiminnanohjausratkaisun, joka sisältää laskutuksen ja ostolaskujen maksun, helpon projektien ja keikkatöiden hallinnan, räätälöitävät lisäpalvelut ja integraatiot sekä työaikakirjauksiin perustuvan palkanlaskennan.\",\"link\":\"https://ecom.fi/\"},\"domus\":{\"cta\":\"Lisätietoja Domuksesta\",\"description\":\"Domus-isännöintijärjestelmällä siirrät taloyhtiön aidosti nykyaikaan.\",\"link\":\"https://confirma.fi/\"},\"briox\":{\"cta\":\"Lisätietoja Brioxista\",\"description\":\"Briox Oy kehittää ja myy yritysjärjestelmiä pienille ja keskisuurille yrityksille sekä tilitoimistoille. Ohjelmatarjonta käsittää mm. kirjanpidon, laskutuksen, myyntituen ja tuntikirjanpidon. Lisäksi se on täysin verkkopohjainen ja käytettävissä miltä tahansa Internetiin kytketyltä laitteelta.\",\"link\":\"http://briox.fi/\"},\"nocfo\":{\"cta\":\"Lisätietoja NOCFOsta\",\"description\":\"Moderni ja ilmainen kirjanpito-ohjelma pienyrityksille ja -yhdistyksille yhtiömuodosta riippumatta. Sähköinen arkisto tositteille.\",\"link\":\"https://nocfo.io/\"},\"passeliMerit\":{\"cta\":\"Lisätietoja Passeli Meritistä\",\"description\":\"Passeli Merit on tehokas ja helppokäyttöinen taloushallinnon ohjelma, joka sopii lähes kaikille toimialoille. Se automatisoi kirjanpidon ja laskutuksen, tehden työstä nopeampaa ja vaivattomampaa.\",\"link\":\"https://www.passeli.fi/passelimerit\"},\"duunimylly\":{\"cta\":\"Lisätietoja Duunimyllystä\",\"description\":\"Duunimylly on Rakennusliiton ja Palkkaus.fi:n yhteistyössä toteuttama.\",\"link\":\"https://raksa.palkkaus.fi/#/index/\"},\"holvi\":{\"cta\":\"Lisätietoja Holvista\",\"description\":\"Holvi on yrittäjäystävällinen verkkopankki, joka tarjoaa yrittäjälle kaikki tarvittavat taloudenhallintaratkaisut.\",\"link\":\"https://about.holvi.com/\"},\"isolta\":{\"cta\":\"Lisätietoja Isolta Arhimedeksestä\",\"description\":\"Isolta Arkhimedes on laskutusohjelma yrittäjälle. Se tarjoaa yrittäjän tärkeimmät työkalut laskutukseen kirjanpitoon sekä palkanlaskennan.\",\"link\":\"https://www.isolta.fi/\"},\"accountor\":{\"cta\":\"Lisätietoja Accountor Gosta\",\"description\":\"Accountor Go on kiinteähintainen kirjanpitopalvelu sooloyrittäjälle. Saat sekä ammattikirjanpitäjän että työkalun käyttöösi kiinteällä kuukausihinnalla.\",\"link\":\"https://go.accountor.fi/\"},\"finago\":{\"cta\":\"Lisätietoja Finago Solosta\",\"description\":\"Finagolta saat helppokäyttöiset ja luotettavat taloushallinnon ohjelmistot, jotka toimivat pilvipalveluna. Ohjelmistot sopivat niin yrityksille kuin tilitoimistoille. Joustavuutta yritysten erilaisiin tarpeisiin!\",\"link\":\"https://finago.com/fi/\"},\"onnistuyrittajana\":{\"cta\":\"Lisätietoja OnnistuYrittäjänä-palvelusta\",\"description\":\"OnnistuYrittäjänä on aloittavan yrittäjän tuki kaikkeen yrittäjyyteen liittyvissä asioissa.\",\"link\":\"https://onnistuyrittajana.palkkaus.fi/#/\"},\"sporttisaitti\":{\"cta\":\"Lisätietoja Sporttisaitista\",\"description\":\"Sporttisaitti on urheiluseuroille tarkoitettu palvelu, joka yhdistää yhdistyksen kotisivut, jäsenluettelon, laskutuksen ja viestinnän. Sporttisaitin kautta voit nyt myös maksaa palkkaa yhdistyksesi työntekijöille tai palkkioita jäsenille.\",\"link\":\"https://www.sporttisaitti.com/\"},\"lemontree\":{\"cta\":\"Lisätietoja Lemon Treestä\",\"description\":\"Tilitoimisto Lemon Tree on pienen yrityksen ystävä. Lemon Treen kanssa kirjanpitoasioiden hoito on helppoa, mukavaa ja edullista.\",\"link\":\"https://lemontree.fi/\"},\"talousavain\":{\"cta\":\"Lisätietoja Talousavain.netistä\",\"description\":\"Talousavain.net tarjoaa Suomen laajuisesti taloushallinnonpalvelua niille, joita kiinnostaa säästää aikaa, vaivaa ja rahaa! Meiltä saat osaavan asiantuntijanpalvelun yrityksellesi, sekä tukea liiketoimintasi kehittämiseen ajasta ja paikasta riippumatta! Autamme uudet yrittäjät vaivattomasti liiketoiminnassaan liikkeelle. Autamme sinua Palkkaus.fi palvelun käytössä ja hoidamme halutessasi kaiken palkanmaksuun liittyvän. Palkkauksen käyttäjille tarjoamme myös kirjanpidon palvelut alkaen 49 eur / kk (ALV0).  Meillä voit myös aina kokeilla palvelujamme kuukauden ajan tyytyväisyystakuulla.\\n\",\"link\":\"https://www.talousavain.net\"},\"makinen\":{\"description\":\"Pentti Mäkinen kuvaus\",\"link\":\"http://www.kirjanpidot.fi/\",\"cta\":\"Lisätietoja\"},\"talenom\":{\"description\":\"Palkkaus.fi-palkanmaksu on käytettävissä Easor App -sovelluksen käyttäjille suoraan Easorin verkkopalvelusta osana kirjanpidon palveluita.\",\"cta\":\"Lisätietoja Easorista\",\"link\":\"https://www.talenom.fi/\"},\"treamer\":{\"cta\":\"Lisätietoja Treamerista\",\"description\":\"Treamer on moderni työnvälityspalvelu, josta löydät helposti itsellesi työntekijöitä.\",\"link\":\"https://www.treamer.com/\"},\"yhdistysavain\":{\"cta\":\"Lisätietoja Yhdistysavaimesta\",\"description\":\"Yhdistysavain on urheiluseuroille tarkoitettu palvelu, johon voi keskittää yhdistyksen kotisivut, jäsenluettelon, laskutuksen ja viestinnän. Yhdistysavaimen kautta voit nyt myös maksaa palkkaa yhdistyksesi työntekijöille tai palkkioita jäsenille.\",\"link\":\"https://www.yhdistysavain.fi/\"}},\"AuthorizationDialogsComponent\":{\"askelma\":{\"html\":\"<fieldset>\\n<legend>Askelma</legend>\\n<p><p>Klikkaamalla alla olevaa vipua voit antaa Askelma-tilillesi käyttöoikeuden Palkkaus.fi-tilin tietoihisi.</p>\\n<p>Huomaathan että tämä tarkoittaa että silloin Askelma-tililtäsi on pääsy kaikkiin tietoihin, kuten työntekijöiden tietoihin ja palkkalaskelmiin.</p>\\n <p>Voit poistaa käyttöoikeuden milloin vain klikkaamalla alla olevaa vipua.</p>\\n</fieldset>\"},\"easoft\":{\"html\":\"<fieldset>\\n<legend>Easoft</legend>\\n<p><p>Klikkaamalla alla olevaa vipua voit antaa Easoft-tilillesi käyttöoikeuden Palkkaus.fi-tilin tietoihisi.</p>\\n<p>Huomaathan että tämä tarkoittaa että silloin Easoft-tililtäsi on pääsy kaikkiin tietoihin, kuten työntekijöiden tietoihin ja palkkalaskelmiin.</p>\\n <p>Voit poistaa käyttöoikeuden milloin vain klikkaamalla alla olevaa vipua.</p>\\n</fieldset>\"},\"domus\":{\"html\":\"<fieldset>\\n<legend>Domus</legend>\\n<p><p>Klikkaamalla alla olevaa vipua voit antaa Domus-tilillesi käyttöoikeuden Palkkaus.fi-tilin tietoihisi.</p>\\n<p>Huomaathan että tämä tarkoittaa että silloin Domus-tililtäsi on pääsy kaikkiin tietoihin, kuten työntekijöiden tietoihin ja palkkalaskelmiin.</p>\\n <p>Voit poistaa käyttöoikeuden milloin vain klikkaamalla alla olevaa vipua.</p>\\n</fieldset>\"},\"briox\":{\"html\":\"<fieldset>\\n<legend>Briox</legend>\\n<p>Klikkaamalla alleolevaa vipua voit antaa Briox-tilillesi käyttöoikeuden Palkkaus.fi-tilin tietoihisi.</p>\\n<p>Huomaathan että tämä tarkoittaa että silloin Briox-tililtäsi on pääsy kaikkiin tietoihin, kuten työntekijöiden tietoihin ja palkkalaskelmiin.</p>\\n <p>Voit poistaa käyttöoikeuden milloin vain klikkaamalla alla olevaa vipua.</p>\\n</fieldset>\"},\"duunimylly\":{\"html\":\"<fieldset>\\r\\n    <legend>Duunimylly</legend>\\r\\n    <p>Pääset Duunimyllyyn <a href=\\\"https://raksa.palkkaus.fi/#/index/\\\">täältä</a>.</p>\\r\\n    <p>\\r\\n        Kirjaudu Duunimyllyyn samalla käyttäjätunnuksella, jolla kirjaudut Palkkaus.fi:hin. Duunimyllyyn kirjautumista varten ei siksi tarvitse antaa erillistä oikeutusta.\\r\\n    </p>\\r\\n</fieldset>\"},\"holvi\":{\"html\":\"<fieldset>\\n    <legend>Holvi</legend>\\n    <p>Klikkaamalla alleolevaa vipua voit antaa Holvi-tilillesi käyttöoikeuden Palkkaus.fi-tilin tietoihisi.</p>\\n    <p>Huomaathan että tämä tarkoittaa että silloin Holvi-tililtäsi on pääsy kaikkiin tietoihin, kuten työntekijöiden tietoihin ja palkkalaskelmiin.</p>\\n    <p>Voit poistaa käyttöoikeuden milloin vain klikkaamalla alla olevaa vipua.</p>\\n</fieldset>\"},\"isolta\":{\"html\":\"<fieldset>\\n    <legend>Isolta Arkhimedes</legend>\\n    <p>Klikkaamalla alleolevaa vipua voit antaa Isolta-tilillesi käyttöoikeuden Palkkaus.fi-tilin tietoihisi.\\n</p><p>\\nHuomaathan että tämä tarkoittaa että silloin Isolta-tililtäsi on pääsy kaikkiin tietoihin, kuten työntekijöiden tietoihin ja palkkalaskelmiin.\\n</p><p>Voit poistaa käyttöoikeuden milloin vain klikkaamalla alla olevaa vipua</p>\\n</fieldset>\"},\"accountor\":{\"html\":\"<fieldset>\\n    <legend>Acountor Go</legend>\\n    <p>Klikkaamalla alleolevaa vipua voit antaa Accountor Go -tilillesi käyttöoikeuden Palkkaus.fi-tilin tietoihisi.\\n</p><p>\\nHuomaathan että tämä tarkoittaa että silloin Accountor Go -tililtäsi on pääsy kaikkiin tietoihin, kuten työntekijöiden tietoihin ja palkkalaskelmiin.\\n</p><p>Voit poistaa käyttöoikeuden milloin vain klikkaamalla alla olevaa vipua</p>\\n</fieldset>\"},\"finago\":{\"html\":\"<fieldset>\\r\\n    <legend>Finago Solo</legend>\\r\\n    <p>Klikkaamalla alleolevaa vipua voit antaa Finago Solo -tilillesi käyttöoikeuden Palkkaus.fi-tilin tietoihisi.\\r\\n</p><p>\\r\\nHuomaathan että tämä tarkoittaa että silloin Finago Solo -tililtäsi on pääsy kaikkiin tietoihin, kuten työntekijöiden tietoihin ja palkkalaskelmiin.\\r\\n</p><p>Voit poistaa käyttöoikeuden milloin vain klikkaamalla alla olevaa vipua</p>\\r\\n</fieldset>\"},\"onnistuyrittajana\":{\"html\":\"<fieldset>\\n    <legend>OnnistuYrittäjänä</legend>\\n    <p>Pääset OnnistuYrittäjänä-palveluun <a href=\\\"https://onnistuyrittajana.palkkaus.fi/#/\\\">täältä</a>.</p>\\n    <p>\\n        Kirjaudu OnnistuYrittäjänä-palveluun samalla käyttäjätunnuksella, jolla kirjaudut Palkkaus.fi:hin. OnnistuYrittäjänä-palveluun kirjautumista varten ei siksi tarvitse antaa erillistä oikeutusta.\\n    </p>\\n</fieldset>\"},\"sporttisaitti\":{\"html\":\"<fieldset>\\n    <legend>Sporttisaitti</legend>\\n    <p>Klikkaamalla alla olevaa vipua voit antaa Sporttisaitti-tilillesi käyttöoikeuden Palkkaus.fi-tilin tietoihisi.</p>\\n    <p>Huomaathan että tällöin Sporttisaitti-tililtäsi on pääsy kaikkiin tietoihin, kuten työntekijöiden tietoihin ja palkkalaskelmiin.</p>\\n    <p>Voit poistaa käyttöoikeuden milloin vain klikkaamalla alla olevaa vipua.</p>\\n</fieldset>\"},\"lemontree\":{\"html\":\"<fieldset>\\n    <legend>Lemon Tree</legend>\\n    <p>Klikkaamalla alleolevaa vipua voit antaa Lemon Tree -tilitoimistolle käyttöoikeuden Palkkaus.fi-tilin tietoihisi.</p>\\n    <p>Huomaathan että tämä tarkoittaa että silloin Lemon Treellä on pääsy kaikkiin tietoihin, kuten työntekijöiden tietoihin ja palkkalaskelmiin.</p>\\n    <p>Voit poistaa käyttöoikeuden milloin vain klikkaamalla alla olevaa vipua.</p>\\n</fieldset>\"},\"talousavain\":{\"html\":\"<fieldset>\\n    <legend>Talousavain.net</legend>\\n    <p>Klikkaamalla alleolevaa vipua voit antaa Talousavain.net-tilitoimistolle käyttöoikeuden Palkkaus.fi-tilin tietoihisi.</p>\\n    <p>Huomaathan että tämä tarkoittaa että silloin Talousavain.netillä on pääsy kaikkiin tietoihin, kuten työntekijöiden tietoihin ja palkkalaskelmiin.</p>\\n    <p>Voit poistaa käyttöoikeuden milloin vain klikkaamalla alla olevaa vipua.</p>\\n</fieldset>\"},\"treamer\":{\"html\":\"<fieldset>\\n    <legend>Treamer</legend>\\n    <p>Pääset Treameriin <a href=\\\"https://www.treamer.com/\\\" target=\\\"_blank\\\">täältä</a>.</p>\\n    <p>\\n        Treamer-palvelu luo uusia palkkalaskelmia ja työntekijöiden tiedot tulevat Treamerista. Treamer-palvelulle ei tällä hetkellä anneta Palkkaus.fi-palvelussa tai muissa palveluissa tekemiäsi laskelmia tai työntekijöiden tietoja, siksi Treamer-palvelulle\\n        ei tarvitse antaa erillistä oikeutusta.\\n    </p>\\n</fieldset>\"},\"talenom\":{\"html\":\"<fieldset>\\n    <legend>Easor App</legend>\\n <p>\\n       Klikkaamalla alla olevaa nappia, voit antaa Easor App -sovellukselle oikeuden palkanmaksun tietoihin. Tämän jälkeen voi käyttää palkanmaksua suoraan Easor App -sovelluksessa. Voit myös poistaa käyttöoikeuden klikkaamalla nappia uudestaan.</p>\\n</fieldset>\"},\"makinen\":{\"html\":\"<fieldset>\\n    <legend>Yrityspalvelu Pentti Mäkinen Oy</legend>\\n    <p>Lue lisää <a href=\\\"http://www.kirjanpidot.fi/\\\" target=\\\"_blank\\\">täältä</a>.</p>\\n    <p>\\n       Pentti Mäkisen vuonna 1986 perustama Yrityspalvelu tarjoaa asiakkailleen modernit taloushallinnon työkalut yrityksen talouden seurantaan. Näin asiakkaillemme jää paremmin aikaa keskittyä omaan ydinosaamiseensa.</p>\\n</fieldset>\"},\"yhdistysavain\":{\"html\":\"<fieldset>\\r\\n    <legend>Yhdistysavain</legend>\\r\\n    <p>Klikkaamalla alleolevaa vipua voit antaa Yhdistysavain-tilillesi käyttöoikeuden Palkkaus.fi-tilin tietoihisi.</p>\\r\\n    <p>Huomaathan että tämä tarkoittaa että silloin Yhdistysavain-tililtäsi on pääsy kaikkiin tietoihin, kuten työntekijöiden tietoihin ja palkkalaskelmiin.</p>\\r\\n    <p>Voit poistaa käyttöoikeuden milloin vain klikkaamalla alla olevaa vipua.</p>\\r\\n</fieldset>\"}},\"CalcUsecase\":{\"showAdditionalInfo\":\"Näytä lisätietoja\",\"editWorker\":\"Muokkaa työntekijää\",\"checkAutomaticTaxCard\":\"Tarkista automaattinen verokortti\",\"recalculate\":\"Laske uudelleen\",\"reports\":\"Raportit\",\"usecase\":\"Käyttötapaus\",\"cancelPayment\":\"Peruuta maksu\",\"copy\":\"Kopioi uudeksi\",\"showPaymentInfo\":\"Näytä maksun tiedot\",\"deleteCalc\":\"Poista laskelma\",\"selectCalculationType\":\"Valitse laskelman tyyppi\",\"default\":\"Oletus\"},\"CalcComponent\":{\"introWorker\":\"Voit lähettää valmiin palkkalaskelman työnantajallesi maksettavaksi. Täytä tarvittavat tiedot laskelmalle alla olevalla laskurilla ja jaa laskelma työnantajallesi.\",\"panelWorker\":{\"heading\":\"1. Työntekijä\",\"overview\":{\"html\":\"Valitse<br />työntekijä!\"},\"noSelection\":\"Työntekijää ei ole valittu\"},\"panelHouseHold\":{\"heading\":\"2. Tehtävä työ\",\"overview\":{\"html\":\"Valitse<br />tehtävä työ\"}},\"panelWorkTime\":{\"heading\":\" 2. Palkka- ja työpäivät jne.\",\"overview\":{\"html\":\"Valitse<br />työpäivät!\",\"salaryDate\":\"Palkkapäivä\",\"now\":\"heti\",\"leavesDays\":\"Lomapäivät\",\"absencesDays\":\"Palkattomat poissaolot\",\"paidAbsencesDays\":\"Palkalliset poissaolot\",\"accruedDays\":\"Kuukaudelle ansaittu loma\"}},\"panelSalary\":{\"heading\":\" 3. Palkka\"},\"panelExpenses\":{\"heading\":\" 4. Vähennykset, kulut jne.\",\"householdExpense\":\"Kotitalousvähennys\",\"noHouseholdExpenses\":\"Ei kotitalousvähennystä\"},\"versions\":{\"creator\":\"Tekijä\",\"date\":\"Päiväys\",\"selectVersion\":\"Valitse versio\",\"otherRows\":\"Lisärivit\",\"message\":\"Lisätiedot\"},\"getDatesRangeText\":\"Täytä työn alku- ja loppupäivät!\",\"getUsecaseText\":\"Täytä työpäivien määrä sekä valitse tehtävä työ!\",\"getUsecaseText2\":\"Täytä myös työpäivien määrä!\",\"getUsecaseTextNumberOfDays\":\"päivää\",\"dialog\":{\"showNewTaxcardDialog\":\"Työntekijää ei ole valittuna tai työntekijällä ei ole henkilötunnusta.\",\"showWorkerEditDialogLoading\":\"Päivitetään laskelmaa...\",\"sendToProSending\":\"Lähetetään\",\"sendToProSendingDescr\":\"Lähetetään palkkalistaa tilitoimistolle.\",\"sendToProMessage\":\"Viesti yritykseltä: \",\"sendToProMessageChecked\":\"Yritys tarkistanut\",\"deleteCalc\":\"Haluatko varmasti poistaa palkkalaskelman?\"},\"saveNotAuthenticatedDisplayName\":\"Rekisteröimätön\",\"workerSectionDefaultInfo\":\"Oletustiedot\",\"resultSectionCalculation\":\"Palkkalaskelma\"},\"EmploymentTaxCardComponent\":{\"active\":\"Käytössä\",\"waiting\":\"Uusi työntekijältä\",\"rejected\":\"Hylätty\",\"replaced\":\"Korvattu uudella\",\"approveSharedTitle\":\"Ei jaettua verokorttia\",\"approveSharedText\":\"Työntekijällä ei ole jaettua verokorttia, jonka voisi hyväksyä / hylätä.\"},\"DatepickerPopupComponent\":{\"placeholder\":\"p.k.vvvv\",\"placeholderMonths\":\"kuukautta\"},\"CalcChartComponent\":{\"createChartEmployer\":{\"seriesLabel\":{\"totalGrossSalary\":\"Palkka \",\"salaryAdditions\":\"Palkan lisät \",\"allSideCosts\":\"Sivukulut \",\"totalExpenses\":\"Kulut \"}},\"createChartWorker\":{\"seriesLabel\":{\"salaryPayment\":\"Työntekijän nettopalkka \",\"tax\":\"Ennakonpidätys \",\"workerSideCosts\":\"Työntekijän sivukulut \",\"totalExpenses\":\"Kulut ja edut \"}}},\"CalcDetailsExpensesComponent\":{\"advancePayment\":{\"info\":\"on saatettu jo maksaa ennakkoa. Tällöin tämä osuus vähennetään maksettavasta nettomaksusta.\",\"infoCompensation\":\"Työkorvauksesta\",\"infoSalary\":\"Palkasta\",\"title\":\"Ennakko\",\"titleAlt\":\"Palkkaennakko\"},\"benefits\":{\"accomodationBenefit\":\"Asuntoetu\",\"benefitExpenses\":\"Verolliset etuudet\",\"mealBenefit\":\"Ravintoetu\",\"otherBenefit\":\"Muu etu\",\"phoneBenefit\":\"Puhelinetu\",\"title\":\"Luontoisedut\",\"titleAlt\":\"Edut\"},\"calcHasNoExpenses\":\"Laskelmalla ei ole kuluja, etuja tai vähennyksiä.\",\"childCareExpense\":{\"description\":\"Syötä alle yksityisen hoidon tuen määrä. KELA maksaa yksityisen hoidon tuen suoraan työntekijälle ja tekee siitä osuudesta ennakonpidätykset, sava-maksut jne. lasketaan kuitenkin myös tälle summalle.\",\"label\":\"Tuen määrä\",\"title\":\"Yksityisen hoidon tuki\"},\"compensations\":{\"compensation\":\"Kulukorvaus\",\"dailyAllowance\":{\"description\":\"Päivärahaa maksetaan 40 euroa, jos työmatka on yli 10 tuntia. Matkakohde pitää olla 15km päässä joko asunnosta tai varsinaisesta työpaikaasta.\",\"title\":\"Kokopäiväraha\"},\"dailyAllowanceHalf\":{\"description\":\"Päivärahaa maksetaan 19 euroa, jos työmatka on yli 6 tuntia. Matkakohde pitää olla 15km päässä joko asunnosta tai varsinaisesta työpaikaasta.\",\"title\":\"Osapäiväraha\"},\"description\":\"Kulukorvaukset (esim. taksi, tarvikkeet) maksetaan yleensä kuittien perusteella.\",\"mealCompensation\":{\"description\":\"Ateriakorvauksen voi maksaa työmatkoilta, joilta ei makseta päivärahaa.\",\"title\":\"Ateriakorvaus\"},\"milageDaily\":{\"description\":\"Kilometrikorvaus määritetään monissa TES:ssä - esim. rakennusalallla - päiväkohtaisina summina.\",\"title\":\"Kilometrikorvaus, päiväkohtainen\",\"titleAlt\":\"Kilometrikorvaus: Päivät\"},\"milageOther\":{\"description\":\"Kilometrikorvaus jollain muulla perusteella.\",\"title\":\"Kilometrikorvaus, muu peruste\",\"titleAlt\":\"Muu kilometrikorvaus\"},\"milageOwnCar\":{\"description\":\"Kilometrikorvaus oman auton käytöstä.\",\"title\":\"Kilometrikorvaus, oma auto\"},\"title\":\"Kulukorvaukset\",\"toolCompensation\":{\"description\":\"Työvälinekorvaus on määritetty joissakin työehtosopimuksissa (esim. Raksa TES).\",\"title\":\"Työvälinekorvaus\"}},\"deductions\":\"Vähennykset\",\"deductionsAlt\":\"Vähennykset, kulut jne.\",\"description\":{\"html\":\"<div class='calc-detail-empty-row'></div><h3 class='uppercase'>Lisätäänkö kuluja, etuja, tukia, vähennyksiä tms.?</h3><p>Vasemman reunan nappuloista voit lisätä:</p><ul><li>kulukorvauksia</li><li>luontoisetuja</li><li>...sekä tukia, maksuja, vähennyksiä ja muita erikoistapauksia.</li></ul><p>Joistakin työehtosopimuksista - esim. raksa - näitä lasketaan TES:n mukaisesti, kun syötät tiedot kohdassa \\\"Työn kuvaus\\\".</p>\",\"md\":\"### Lisätäänkö kuluja, etuja, tukia, vähennyksiä tms.? ###\\r\\n\\r\\nVasemman reunan nappuloista voit lisätä:\\r\\n* kulukorvauksia\\r\\n* luontoisetuja\\r\\n* ...sekä tukia, maksuja, vähennyksiä ja muita erikoistapauksia.\\r\\n\\r\\nJoistakin työehtosopimuksista - esim. raksa - näitä lasketaan TES:n mukaisesti, kun syötät tiedot kohdassa \\\"Työn kuvaus\\\".\"},\"employerPays\":\"Työnantaja maksaa\",\"expenseAndBenefit\":\"Kulu / luontoisetu\",\"expensesAndBenefits\":\"Kulut ja luontoisetuudet\",\"foreclosurePayment\":{\"info\":\"saattaa olla ulosoton alaista. Tällöin ulosoton osuus vähennetään maksettavasta nettomaksusta.\",\"infoCompensation\":\"Työkorvaus\",\"infoSalary\":\"Palkka\",\"title\":\"Ulosotto\",\"titleCustServ\":\"Ulosotto (aspan lisäämä)\"},\"householdDeduction\":{\"description\":\"Työ lasketaan kotitalousvähennykseen.\",\"md\":\"#### Mistä tiedän kuuluuko työ kotitalousvähennykseen ####\\r\\n\\r\\nJos olet epävarma, niin [tällä verottajan sivulla](https://www.vero.fi/henkiloasiakkaat/verokortti-ja-veroilmoitus/tulot-ja-vahennykset/kotitalousvahennys/) on kuvattu tarkemmin kotitalousvähennystä. Huomaa alalaidan linkit eri työtyyppeihin.\\r\\n\\r\\n[Tällä toisella sivulla on pitkä lista](https://www.vero.fi/henkiloasiakkaat/verokortti-ja-veroilmoitus/tulot-ja-vahennykset/kotitalousvahennys/taulukko_kysytyimmista_kotitalousvahenn2/) eri töistä.\\r\\n\\r\\nJos vielä olet epävarma, <a href=\\\"mailto:aspa@palkkaus.fi\\\">kysy asiaa asiakaspalvelustamme</a>\\r\\n#### Onko työ kotitalousvähennyksen alaista? ####\",\"title\":\"Kotitalousvähennys\"},\"title\":\"Lisät/Edut/Tuet\",\"titleAdditions\":\"Lisät\",\"unionPayment\":{\"description\":{\"html\":\"Jos työntekijä pyytää, tulee työnantajan vähentää AY-jäsenmaksu ja maksaa se liitolle. <strong>Palkkaus.fi hoitaa AY-maksun suoraan Rakennusliitolle.</strong> Muiden liittojen maksut työnantajan pitää maksaa itse - lisäämme summat vain palkkalaskelmaan.\"},\"descriptionOther\":\"peritään työntekijältä (työnantaja tilittää itse).\",\"descriptionRaksa\":\"peritään työntekijältä (Palkkaus.fi tilittää).\",\"label\":\"AY-jäsenyys\",\"optionNo\":\"Ei jäsenyyttä\",\"optionOther\":\"Muu liitto...\",\"optionRaksa\":\"Rakennusliitto, A-jäsen (1,6%)\",\"optionUnemployment\":\"Rakennusliitto, OA- tai TA-jäsen (0,60%)\",\"percent\":\"AY-maksun prosentti\",\"title\":\"AY-jäsenmaksu\",\"titleShort\":\"AY-maksu\"}},\"CalcDetailsSalaryComponent\":{\"workerNotDefined\":\"Työntekijää ei ole määritetty\",\"compensation\":{\"description\":\"Työstä, tehtävästä tai palveluksesta maksettu korvaus, joka ei ole palkkaa. Työstä vähennetään ennakonpidätys, mutta ei muita sivukuluja (TyEL, TVR jne.)\",\"title\":\"Työkorvaus\"},\"description\":{\"md\":\"### Paljonko maksetaan palkkaa? ###\\r\\n\\r\\nPalkan voi määrittää eri tavoin:\\r\\n* **Kertakorvaus** - esim. rakennusmiehen urakkapalkka - on yksikertaisin tapaus.\\r\\n* **Kuukausi- tai tuntipalkka**\\r\\n* **Netto- tai kokonais&shy;kustannus&shy;laskurilla** voit laskea palkan käteen maksettavan summan tai kokonaiskustannuksen perusteella.\\r\\n\\r\\nLisäksi voit määritellä palkasta riippuvaisia <strong>lisiä</strong>, kuten ylitöitä, lomakorvauksia jne.\\r\\n                \"},\"mllChildCare\":{\"description\":\"Tällä lomakkeella voit helposti syöttää MLL:n suositusten mukaisen lastenhoitajan palkan.\",\"title\":\"MLL:n lastenhoitajan palkka\",\"workDoneOn\":\"Työ tehdään\",\"workDoneOnSunday\":\"sunnuntai tai pyhäpäivä (19,00 €/tunti)\",\"workDoneOnWeek\":\"arkipäiväivänä (9,50 €/tunti)\",\"workHours\":\"Tuntien määrä (min. 2h)\"},\"paymentNet\":{\"calculator\":\"Nettomaksulaskuri\",\"description\":\"Nettomaksulaskuri laskee palkan sillä perusteella paljonko työntekijälle maksetaan käteen.\",\"title\":\"Nettopalkka\"},\"paymentTotal\":{\"description\":\"Kokonaiskustannuslaskuri laskee palkan sillä perusteella paljonko työnantajan kokonaiskustannus tästä palkanmaksusta olisi kaikkine sivukuluineen.\",\"title\":\"Kokonaiskustannus\"},\"reportTitle\":\"Palkka ja palkan lisät\",\"salaryAdditions\":{\"eveningAdditions\":{\"description\":\"Nämä lisät vaihtelevat työ- ja tyehtosopimusten mukaan - ne on usein laskettu prosentteina palkasta.\",\"label\":\"Tyyppi\",\"optionEvening\":\"Iltavuorolisä\",\"optionNight\":\"Yövuorolisä\",\"optionSat\":\"Lauantailisä\",\"title\":\"Ilta-, yö- ja lauantailisät\"},\"holidayBonus\":\"Lomaraha\",\"holidayCompensation\":\"Lomakorvaus\",\"holidaySalary\":\"Loma-ajan palkka\",\"otherAddition\":\"Muu lisä\",\"otherAdditions\":\"Muut lisät\",\"overtime\":\"Ylityöt\",\"sundayAddition\":\"Sunnuntai- / pyhätyö\",\"title\":\"Palkasta laskettavat lisät\",\"worktimeShortening\":\"Erillinen palkan osa\"},\"salaryHourly\":{\"hours\":\"Tunteja\",\"title\":\"Tuntipalkka\"},\"salaryMonthly\":{\"months\":\"Kuukausia\",\"title\":\"Kuukausipalkka\"},\"salarySimple\":{\"description\":\"Yksinkertaisin palkanmaksun tapaus on kertakorvaus. Esim. kesätyöntekijälle sovitaan maksettavaksi 200 euroa.\",\"salary\":\"Palkka\",\"title\":\"Kertakorvaus\"},\"title\":\"Palkan yksityiskohdat\"},\"CalcDetailsWorkComponent\":{\"description\":{\"chooseRole\":\"Valitse joko yrittäjän palkka tai muu työntekijän palkka. Yrittäjän palkkaa maksaessasi huomaa valinta maksetaanko eläke TyEL vai YEL-vakuutukseen.\",\"chooseTime\":\"Työn kesto (alku- ja loppupäivämäärät) sekä työpäivien määrä kannattaa syöttää aina palkkalaskelmia varten.\",\"title\":\"Mitä työtä tehdään?\"},\"isWorkYel\":\"Onko palkka YEL:n alaista?\",\"isWorkYelContract\":\"YEL:n alaista\",\"reportDuration\":\"Työn kesto\",\"reportTime\":\"Ajalta\",\"reportTitle\":\"Työn tiedot\",\"title\":\"Työn kuvaus\",\"workCleaning\":{\"description\":{\"md\":\"### Siivous- ja kiinteistöala ###\\n\\nSiivous- ja kiinteistöalan työehtosopimus (TES) on yleissitova, joten yksityishenkilönkin pitää toimia sen mukaisesti. \\nSitä sovelletaan esim. siivoustöihin ja omakotitalon tai mökin ympäristössä tehtäviin hoitotöihin (esim. lumityöt ja pihan hoito).\\n\\nMuista määrittää lomakorvaus Vähennykset-osiosta.\\n\\nJos työntekijä on sinulla töissä yli 14pv/kk tai yli 35h/kk, niin huomioithan, että hänelle kertyy myös lomapäiviä. \\nTyön kokonaishintaan on kuuluttava TESin mukaiset lisät. Myös TESin mukaisia palkkatasoja pitää noudattaa.\\n\\nTESistä lisää tietoa löydät [tästä linkistä](https://www.palkkaus.fi/abc/siivous-ja-kiinteistoalan-tyoehtosopimus/). \\n\\n\"},\"title\":\"Siivous ja kodinhoito\"},\"workConstruction\":{\"labelAgreementUnitPerDay\":\"Matkakorvaus (€/pv)\",\"labelToolExpense\":\"Päivittäinen työkalu- ja matkakorvaus\",\"labelToolExpenseTes\":\"Työkalukorvaus\",\"labelToolUnitPerDay\":\"Työkalukorvaus (€/pv)\",\"labelTravelExpense\":\"Matkakorvaus\",\"labelTravelUnitPerDay\":\"Korvattavat km/pv\",\"optionAgreement\":\"Erikseen sovitun päiväkorvauksen mukaan\",\"optionCarpenter\":\"Kirvesmies\",\"optionFloor\":\"Lattianpäällystys\",\"optionOther\":\"Muut\",\"optionTesIs\":\"TES-erät sovittu kokonaiskorvaukseen\",\"optionTesNot\":\"TES-erät lisätään palkkaan\",\"optionTesTable\":\"TES-taulukon perusteella\",\"title\":\"Rakennus- ja remontointi\",\"unitDays\":\"Työpäivien määrä\"},\"workDays\":\"Työpäivien määrä\",\"workDescription\":\"Työn kuvaus\",\"workEndDate\":\"Työn loppupäivä\",\"workEndStartDate\":\"Työ tehty ajalla\",\"workMllChildCare\":{\"md\":\"### MLL:n lastenhoitaja ###\\r\\n\\r\\nPalkka-kohdassa on erillinen lomake, joka on suunniteltu helpottamaan MLL:n lastenhoidon palkanmaksua yhdelle päivälle.\\r\\nLue lisää [MLL:n lastenhoidosta täältä](/Cms/Articles/Case_MLL).\\r\\n\\r\\nJos maksat samalle lastenhoitajalle palkkoja useammalta päivältä, määritä se erikseen kohdasta \\\"Työntekijän palkka\\\", kenttä \\\"Työpäivien määrä\\\".\\r\\n\",\"title\":\"MLL:n lastenhoitaja\"},\"workOtherChildCare\":{\"description\":\"Pitkäaikainen lastenhoito. Valitessasi tämän TES:n näet Vähennykset-osiossa Yksityisen hoidon tuki-valinnan.\",\"title\":\"Muu lastenhoito\"},\"workSantaClaus\":{\"md\":\"### Palkkaus.fi tarjoaa joulupukin palkanmaksun ###\\r\\nJoulupukin palkanmaksusta Palkkaus.fi ei ota palvelumaksua lainkaan.\\r\\n\\r\\nOletus on, että joulupukki käy kotona jouluaattona - yhtenä päivänä.\\r\\n\\r\\nVerottajan mukaan joulupukin palkasta ei voi tehdä kotitalousvähennystä. Sorry!\\r\\n\",\"title\":\"Joulupukki\"},\"workStartDate\":\"Työn alkupäivä\",\"workTes\":\"Valitse työehtosopimus (TES)\",\"workTyel\":\"Työntekijän palkka (TyEL)\",\"workYel\":\"Yrittäjän palkka (YEL)\"},\"CalcDetailsWorkerComponent\":{\"employmentEdit\":\"Työsuhteen muokkaus\",\"notLoggedIn\":\"Et ole kirjautunut palveluun: Laskurin demotilassa voit käyttää esimerkkityöntekijää.\",\"job\":\"Tehtävä työ:\",\"workDescription\":\"Kuvaus palkkalaskelmaan\",\"salarySlipMessage\":\"Viesti työntekijälle\",\"jobType\":\"Työn tyyppi\",\"reporting\":\"Raportointi\",\"costCenter\":\"Kustannuspaikka\",\"addSharedTaxCard\":\"Lisää jaettu verokortti\",\"editAccount\":\"Muokkaa omia tietoja\",\"checkTaxcard\":\"Tarkista verokortti\",\"taxCardChecked\":\"Verokortti on tarkistettu\",\"checkAutomaticTaxcard\":\"Tarkista autom. verokortti\",\"newTaxcard\":\"Uusi verokortti\",\"workerEdit\":\"Työntekijän muokkaus\",\"resetWorker\":\"Vaihda toiseen työntekijään...\",\"addWorker\":{\"description\":{\"html\":\"Jos haluat syöttää sisään <strong>oikean henkilön tiedot</strong> - joko omasi tai jonkun muun - pyydämme sinua <strong>kirjautumaan sisään</strong> ensin sivun oikeasta yläreunasta.<br><br>Tämä on tärkeää tietoturvan ja yksityisyydensuojan takia.\"},\"title\":\"Lisää työntekijä\"},\"description\":{\"md\":\"### Kenelle maksetaan? ###\\n\\nValitse työntekijä vasemmalta. Työn&shy;tekijän ikä ja palkan määrä kuukaudessa / vuodessa vaikuttavat sivukuihin.\\n\\nVasemmalta voit valita **esimerkki&shy;työntekijän** kokeiluja varten, tai oikean henkilön Palkkaus.fi-palvelusta.\\n\\nJos haluat syöttää sisään **oikean henkilön tiedot** - joko omasi tai jonkun muun - pyydämme sinua **kirjautumaan sisään** ensin sivun oikeasta yläreunasta.\\n\\nValitse työntekijä vasemman reunan napeista.\\n\"},\"exampleWorkers\":{\"description\":\"Voit valita alta jonkin esimerkkihenkilöistä, voit myöhemmin muuttaa henkilön asetuksia ja ennen kuin palkka maksetaan oikeasti, kysymme työntekijän tietoja.\",\"title\":\"Esimerkkityöntekijät\"},\"meWorker\":{\"description\":\"Tästä voit laittaa määrittää itsesi työntekijäksi. Olennaiset tiedot, kuten ikäsi otetaan omista käyttäjätiedoistasi.\",\"title\":\"Valitse itsesi\"},\"myWorkers\":{\"description\":{\"html\":\"Valitse joku omista työntekijöistäsi. Voit muokata ja luoda uusia työntekijöitä <a href='#/workers/index'>Työntekijälistassa täällä</a>\"},\"title\":\"Omat työntekijät\"},\"newWorker\":{\"cta\":\"Luo uusi työntekijä\",\"description\":\"Luo kokonaan uusi työntekijä ja syötä tälle työntekijälle henkilötiedot. Tiedot tallennetaan profiilisi työntekijäluetteloon.\",\"title\":\"Uusi työntekijä\"},\"searchWorkers\":{\"description\":\"Hae henkilö Palkkaus.fi -palveluun rekisteröityneistä työntekijöistä, jotka ovat merkinneet osaajaprofiilinsa julkiseksi.\",\"publicProfile\":\"Julkinen osaajaprofiili\",\"searchWorker\":\"Hae työntekijä\",\"title\":\"Hae Palkkaus.fi -palvelusta\"},\"selectWorker\":\"Valitse työntekijä\",\"workerInfo\":{\"ageRange\":\"Ikäryhmä\",\"name\":\"Nimi\",\"taxCard\":\"Verokortti\",\"taxPercent\":\"Ennakonpidätys\",\"taxPercentExample\":{\"html\":\"Veroprosentti {{taxPercent}} % on esimerkki. Verokorttia ei ole määritetty.\"},\"title\":\"Työntekijän tiedot\"}},\"CalcDetailsWorktimeProComponent\":{\"lead\":{\"text\":\"Tällä välilehdellä on nähtävissä kaikki poissaolojen ja lomalaskennan parametrit. Tyypillisesti nämä ovat vain tilitoimistojen käyttöön - tavallisen yrityskäyttäjän ei tarvitse niitä muuttaa.\"},\"basicInfo\":\"Perustiedot\",\"absencesDays\":\"Palkattomat poissaolot\",\"leavesDays\":\"Lomapäiviä\",\"leavesDailySalary\":\"Lomapäivän palkka\",\"workDays\":\"Työpäivät\",\"monthlyOrWeeklySalary\":\"Kuukausi- tai viikkopalkka\",\"monthlySalary\":\"Kuukausipalkka\",\"absencesDaySalary\":\"Poissaolopäivän vähennys / pv\",\"isHourlySalary\":\"Tunti- tai suoritusperusteinen\",\"hourlySalary\":\"Tunti- tai suoritusperuste\",\"hourlyLabel\":\"Kyllä\",\"holidayCompensation\":\"Lomakorvaus\",\"yearlyLeaveDays\":\"Lomapäiviä vuodessa\",\"totalHolidaySalary\":\"Loma-ajan palkka\",\"alreadyPaid\":\"Jo maksettu\",\"holidays\":\"Lomakertymät\",\"headerMonth\":\"Kuukausi\",\"headerHolidays\":\"Kertymä\",\"headerAway\":\"Pois\",\"headerDate\":\"Pv\",\"headerHours\":\"h\",\"holidayCalculationNotInUse\":\"Lomalaskenta ei käytössä\",\"holidayYearSettings\":\"Lomavuoden asetukset\",\"employmentPeriod\":\"Työsuhteen kesto\",\"wageBasis\":\"Palkan peruste\",\"holidayCode\":\"Loman kertyminen\",\"accrualFixed\":\"Kiinteä lomakertymä\",\"compensation\":\"Lomakorvaus\",\"bonusMethod\":\"Lomarahan maksu\",\"bonus\":\"Lomaraha\"},\"CalcDetailsDialogComponent\":{\"workType\":\"Työn tyyppi (vähennyksen peruste)\",\"allSalaries\":{\"title\":\"Palkka / palkkio ja lisät\"},\"allExpenses\":{\"title\":\"Kulut, luontoisedut ja vähennykset\"},\"expenses\":{\"title\":\"Kulukorvaukset\",\"intro\":\"Kulukorvauksista ei lähtökohtaisesti makseta veroja tai sivukuluja. Useat kulukorvaukset pitää kuitenkin ilmoittaa verottajalle (esim. kilometrikorvaukset ja päivärahat).\"},\"benefits\":{\"title\":\"Luontoisedut\",\"title2\":\"Verolliset etuudet (luontoisedut)\",\"intro\":\"Luontoisetuja verotetaan käytännössä samalla tavalla kuin tavallista palkkaa, joka otetaan huomioon työntekijän verotuksessa ja joiden verotusarvot verottaja päättää vuosittain.\"},\"deductions\":{\"householdDetuction\":\"Kotitalousvähennys\",\"label\":\"Kyllä, ilmoitetaan kotitalousvähennykseen\",\"title\":\"Vähennykset\",\"intro\":\"Palkasta voidaan tehdä erilaisia vähennyksiä. Huomioithan, että voit tehdä korkeintaan nettopalkan suuruisen vähennyksen.\"},\"salaries\":{\"title\":\"Palkat, lisät ja lomat\",\"title2\":\"Palkka tai palkkio\",\"intro\":\"Valitse palkkalaji, jota olet maksamassa työntekijällesi. Varsinaisen palkan lisäksi voit valita erilaisia lisiä, kuten ylityöt, lomakorvaukset ja lomarahat.\"},\"all\":{\"title\":\"Valitse palkkalaji\"}},\"CalcEditorComponent\":{\"title\":\"Laskelman muokkaus\",\"workerTitle\":\"Työntekijä\",\"employerTitle\":\"Omat tiedot\",\"paymentInfo\":{\"title\":\"Maksun tiedot\",\"salaryDateLabel\":\"Palkkapäivä\",\"paymentDateLabel\":\"Maksupäivä\",\"salaryPeriodLabel\":\"Palkkakausi\",\"workDaysLabel\":\"Työpäiviä\",\"paymentChannel\":\"Maksumenetelmä\",\"status\":\"Tila\"},\"messages\":{\"title\":\"Viestit ja kuvaukset\",\"occupationTypeLabel\":\"Työn tyyppi\",\"workDescriptionLabel\":\"Kuvaus palkkalaskelmaan\",\"salarySlipMessageLabel\":\"Viesti työntekijälle\"},\"householdDeduction\":{\"title\":\"Kotitalousvähennys\",\"noDeduction\":\"Ei kotitalousvähennystä\",\"deductionCategory\":{\"select\":\"Valitse työn tyyppi...\",\"none\":\"Ei valintaa\",\"householdwork\":\"Kotitaloustyö\",\"carework\":\"Hoiva- ja hoitotyö\",\"homeImprovement\":\"Asunnon/loma-asunnon kunnossapito- tai korjaustyö\",\"oilHeatingReplacementWork\":\"Öljylämmityksestä luopuminen\"},\"deductionProperty\":{\"select\":\"Valitse työn sijainti...\",\"none\":\"Ei valintaa\",\"ownProperty\":\"Omassa käytössä oleva asunto tai vapaa-ajan asunto\",\"relativesProperty\":\"Vanhempien, isovanhempien yms. käytössä oleva asunto tai vapaa-ajan asunto\"}},\"calcRowsTitle\":\"Laskelman rivit\",\"originalHeading\":\"Alkuperäinen\",\"editedHeading\":\"Muokattu\",\"diffHeading\":\"Eroraportti\",\"diffAccountingHeading\":\"Kirjanpidon erot\",\"diffCfa\":\"Asiakasmaksujen erot\"},\"CalcEmploymentComponent\":{\"dialog\":{\"workerAccountIdChangedTitle\":\"Haetaan tietoja\",\"workerAccountIdChangedDescr\":\"Haetaan työntekijän tietoja...\"}},\"CalcListComponent\":{\"checked\":\"Tarkastettu\",\"issues\":\"Huomiot\",\"allCalculations\":\"Kaikki laskelmat\",\"notSelected\":\"(Työntekijää ei ole valittu)\",\"payment\":\"Maksu\",\"salary\":\"Palkka\",\"tax\":\"Vero\",\"tyel\":\"TYEL\",\"net\":\"Netto\",\"total\":\"Yhteensä\",\"salaryPeriod\":\"Palkkakausi\",\"worktime\":\"Lomat ja poissaolot\",\"status\":{\"title\":\"Tila\",\"draft\":\"Luonnos\",\"paid\":\"Maksettu\",\"paymentStarted\":\"Maksu aloitettu\",\"sharedWaiting\":\"Odottaa käsittelyä\",\"sharedRejected\":\"Hylätty\",\"sharedApproved\":\"Hyväksytty\"},\"payrollService\":\"Palkkapalvelu\",\"selfService\":\"Itsepalvelu\",\"date\":\"Pvm\",\"search\":\"Tekstihaku\",\"calculation\":\"Laskelma\",\"payroll\":\"Palkkalista\",\"selectedAmount\":\"Valittu\",\"select\":\"Valitse\",\"unselect\":\"Poista valinta\",\"statusIsPaid\":\"Maksettu\",\"statusIsSketch\":\"Luonnos\",\"worker\":\"Työntekijä\",\"intro\":{\"html\":\"Työntekijäsi voi kirjautua Palkkaus.fi-palveluun ja lähettää yrityksellesi palkkalaskelman maksettavaksi.\\r\\nNäin voit luoda prosessin, jossa työntekijäsi kirjaa itse tuntinsa ja esim. kilometrikorvaukset. <b> Tarkista laskelmien oikeellisuus ennen niiden maksamista.</b>\"},\"panel\":{\"paid\":{\"heading\":\"Maksetut\"},\"draft\":{\"heading\":\"Luonnokset\"},\"all\":{\"heading\":\"Kaikki laskelmat\"},\"paymentStarted\":{\"heading\":\"Maksu aloitettu\"},\"sent\":{\"heading\":\"Lähetetyt\"},\"sentAndDraft\":{\"heading\":\"Lähetetyt ja luonnokset\"},\"received\":{\"heading\":\"Vastaanotetut\"},\"shared\":{\"heading\":\"Vastaanotetut\"}}},\"CalculationsPanelComponent\":{\"showFilters\":\"Näytä suodattimet\",\"newCalc\":\"Uusi laskelma\",\"status\":\"Tila\",\"accepted\":\"Hyväksytty\",\"declined\":\"Hylätty\",\"waiting\":\"Odottaa\",\"sent\":\"Lähetetty\",\"draft\":\"Luonnos\",\"showWholeList\":\"Näytä koko lista\",\"sentAlt\":\"Lähetetyt\",\"drafts\":\"Luonnokset\",\"allPaid\":\"Kaikki maksetut\",\"allSent\":\"Kaikki lähetetyt\",\"allDrafts\":\"Kaikki luonnokset\"},\"CalculationsSentComponent\":{\"noEmployee\":\"Ei työnantajaa\",\"waitingForAcception\":\"Odottaa hyväksyntää\",\"declined\":\"Hylätty\",\"accepted\":\"Hyväksytty\"},\"CalculationsSharedComponent\":{\"waitingForHandling\":\"Odottaa käsittelyä\",\"accepted\":\"Hyväksytty\",\"declined\":\"Hylätty\"},\"CalculationsWithSalaryDateSelectComponent\":{\"salaryDate\":\"Palkkapäivä\",\"start\":\"Aloitus\",\"end\":\"Lopetus\"},\"CalcNewIntroComponent\":{\"instruction\":\"Klikkaa yläreunan laatikoita yksi kerrallaan käydäksesi askeleet läpi.\",\"stepFour\":{\"description\":\"... ja vähennykset.\",\"title\":\"Kulut, edut,...\"},\"stepOne\":{\"description\":\"Tilinumero, verokortti ja henkilötiedot.\",\"title\":\"Kenelle maksetaan?\"},\"stepThree\":{\"description\":\"Myös lomat ja palkan lisät.\",\"title\":\"Paljonko palkkaa?\"},\"stepTwo\":{\"description\":\"Palkkajakso, työpäivät, lomat ja poissaolot.\",\"title\":\"Miltä ajalta?\"},\"title\":\"Palkkalaskelman tekemisessä on neljä askelta\"},\"CalcResultsComponent\":{\"calculation\":\"Laskelma\",\"calculationSalary\":\"Palkkalaskelma\",\"employerReport\":\"Työnantajan laskelma\",\"finalCost\":\"Lopullinen kustannus\",\"html\":\"Palkkaus.fi-palvelulle <strong>maksettava summa on {{totalPayment}}€.</strong> Palvelu tilittää sivukulut eteenpäin ja tekee tulorekisteri-ilmoitukset. Nettopalkka tilittyy työntekijälle 2-4 pankkipäivässä tai valitsemanasi palkkapäivänä.\",\"isPaidDate\":\"Tämä palkkalaskelma on maksettu\",\"nowPaying\":\"Maksetaan nyt\",\"societyReport\":\"Yhteiskunnan laskelma\",\"totalCost\":\"Kokonaiskustannus\",\"workerGetsPaid\":\"Työntekijälle maksetaan\",\"workerReport\":\"Työntekijän laskelma\",\"sharedWaiting\":\"Odottaa käsittelyä\",\"sharedWaitingInfo\":\"Voit maksaa palkkalaskelman hyväksyttyäsi sen.\",\"sharedApproved\":\"Hyväksytty laskelma\",\"sharedRejected\":\"Hylätty laskelma\",\"sharedRejectedInfo\":\"Voit poistaa laskelman tai hyväksyä ja maksaa\",\"payrollDraft\":\"Palkka on osa palkkalistaa.\",\"payrollDraftInfo\":\"Tämä palkka on osa palkkalistaa ja se maksetaan ja tallennetaan palkkalistan yhteydessä. Laskelman voi irroittaa palkkalistasta (\\\"Irroita linkitys\\\"), jos haluat maksaa sen erillisenä.\",\"waitingApproval\":\"Tarkista laskelma\",\"waitingApprovalInfo\":\"Tarkista laskelman tiedot, tee tarvittavat muutokset ja lähetä laskelma maksuun tilitoimistollesi.\",\"sendToProBtn\":\"Tarkistettu: Lähetä\",\"draft\":\"Luonnoslaskelma\",\"draftInfo\":\"Vie palkka maksuun painamalla alla olevaa Maksa-nappia.\",\"paymentStarted\":\"Tämä palkka on siirretty maksuun\",\"paymentStartedInfo\":\"Jos et vienyt palkanmaksua loppuun, voit jatkaa maksua tästä.\",\"paymentCanceled\":\"Tämä palkka on peruttu\",\"paymentRefunded\":\"Tämä palkka on peruttu\",\"paymentError\":\"Maksettaessa tapahtui virhe\",\"paymentChannelText\":\"Tämä palkka on siirretty maksuun\",\"showPaymentDialog\":\"Näytä maksun tiedot\",\"cancelPaymentOrChangeChannelBtn\":\"Peru maksu tai vaihda maksutapaa\",\"paymentChannelTextPartial\":\"maksutapa\",\"cancelDialogTitle\":\"Peru maksuun siirto\",\"cancelDialogDescr\":\"Maksun tila  muutetaan luonnokseksi ja laskelmaan mahdollisesti liittyvät laskut perutaan. Voit maksaa palkan myös uudella maksutavalla.\",\"cancelDialogYes\":\"Kyllä, peru maksuun siirto\",\"cancelDialogNo\":\"Ei\",\"messageToAccountant\":\"Viesti tilitoimistoon\",\"otherActions\":\"Muut toiminnot\",\"sendEmployeeEmail\":\"Lähetä viesti työnantajalle\",\"time\":\"Ajasta\",\"prints\":\"Tulosteet\",\"status\":\"Tila\",\"continuePsdPayment\":\"Jatka maksamista\"},\"CalcReportsComponent\":{\"reportType\":\"Tyyppi\",\"reportLanguage\":\"Kieli\",\"reportLanguageWorker\":\"Oletus (Työntekijä)\",\"reportLanguageCompany\":\"Oletus (Yritys)\",\"reportViewPartial\":\"Vain taulukko\",\"reportViewPage1\":\"Ensimmäinen sivu\",\"reportViewFull\":\"Koko raportti\",\"calcReports\":\"Laskelman raportit\",\"irRows\":\"Tulorekisteririvit\",\"irFull\":\"Palkkatietoilmoitus\",\"rowsReport\":\"Rivilistaus\",\"unionPaymentReport\":\"Ay-jäsenmaksuraportti\",\"costCenterReport\":\"Kustannuspaikkaraportti\",\"showDownloadDialog\":{\"waitHeading\":\"Odota..\",\"readyHeading\":\"Valmis!\",\"waitText\":\"Tiedostoa luodaan.\",\"readyText\":\"Tiedosto on nyt valmis ladattavaksi.\",\"openText\":\"Avaa\"}},\"CalcReportComponent\":{\"palkkausFeeInfo\":\"Huom: Tämä laskelma ei sisällä palvelumaksuja ja todellinen työnantajan TyEL-prosentti saattaa poiketa käytetystä.\"},\"SummaryReportComponent\":{\"summaryReport\":\"Yhteenvetoraportti\",\"loadingReport\":\"Ladataan raporttia\"},\"CalcSharingComponent\":{\"backBtn\":\"Palaa laskelmalle\",\"intro\":{\"html\":\"Voit jakaa valmiin palkkalaskelman työnantajallesi suoraan ohjelman sisällä tai lähettämällä linkin laskelmaan esimerkiksi sähköpostitse. Maksaakseen palkan, työnantajasi tulee rekisteröityä käyttäjäksi.</a>\"},\"sharing\":{\"title\":\"Palkkalaskelman linkin jakaminen\",\"description\":\"Voit luoda linkin palkkalaskelmaan ja jakaa sen sähköpostilla tai muulla sovelluksella (WhatsApp, tekstiviesti).\",\"createLinkBtn\":\"Luo palkkalaskelman linkki jakamista varten\"},\"select\":{\"title\":\"Valitse työnantaja\",\"description\":\"Työnantajalistassa näkyvät vain ne työnantajat, jotka ovat lisänneet sinut omiin työntekijöihinsä. Valitsemalla työnantajan, laskelma lähetetetään hänelle. Jos työnantajasi ei ole listassa, voit pyytää häntä lisäämään sinut omiin työntekijöihinsä.\"},\"sharingTargets\":{\"email\":\"Sähköposti\",\"device\":\"Jaa laitteessasi\"},\"emailSendSuccess\":\"Sähköpostiviesti on nyt lähetetty onnistuneesti työnantajalle\",\"emailSent\":\"Sähköpostiviesti on nyt lähetetty työnantajalle\",\"sharingMessage\":{\"calculationSent\":\"Olen lähettänyt sinulle palkkalaskelman\",\"login\":\"Kirjaudu sisään palveluun linkin kautta\"},\"sharingTitle\":\"Uusi palkkalaskelma\",\"missingSignatureAlert\":{\"missingSignature\":\"Valtakirjan allekirjoitus puuttuu\",\"finishAccountCreation\":\"Ennen kuin jaat palkkalaskelman, sinun täytyy viedä tilin luonti loppuun asti\",\"signAuthorization\":\"ja allekirjoittaa valtakirja\",\"continueToSigning\":\"Jatka allekirjoitukseen (vaatii pankkitunnukset)\",\"continue\":\"Jatka\",\"close\":\"Sulje\"},\"missingTaxCardAlert\":{\"heading\":\"Jaettu verokortti puuttuu\",\"text\":\"Laskelman linkkiä ei voi lähettää ilman jaettua verokorttia. Lisää jaettu verokortti.\"}},\"CalcSharingInfoComponent\":{\"sharedViaLink\":\"Laskelmalle on luotu linkki\",\"sharedViaEmail\":\"Lähetetty sähköpostilla:\",\"shareToEmployer\":\"Lähetä linkki työnantajalle käyttämällä alapuolella olevia painikkeita.\",\"linkCopied\":\"Kopioitu\",\"deleteLinkBtn\":\"Poista linkki\",\"cancelDeliveryBtn\":\"Peruuta lähetys\",\"paidDate\":\"Tämä palkkalaskelma on maksettu\",\"statusText\":{\"workerRequestAccepted\":\"Laskelma on lähetetty työnantajalle ja hyväksytty\",\"workerRequestDeclined\":\"Laskelma on lähetetty työnantajalle ja hylätty\",\"workerRequested\":\"Laskelma on lähetetty suoraan työnantajallesi ja odottaa hyväksyntää\",\"workerRequestedAlt\":\"Laskelma on lähetetty työnantajallesi\"},\"sendToEmployerBtn\":\"Lähetä työnantajalle\",\"copyToClipBoard\":\"Kopioi työpöydälle\"},\"CalcSharingReceiptActionComponent\":{\"approveBtn\":\"Hyväksy\",\"approveBtnTitle\":\"Hyväksy laskelma. Voit hyväksymisen jälkeen maksaa laskelman.\",\"rejectBtn\":\"Hylkää\",\"rejectBtnTitle\":\"Hylkää laskelma. Hylättyä laskelmaa ei poisteta automaattisesti, ja voit vielä myöhemmin hyväksyä sen tai poistaa kokonaan.\",\"alertUnknown\":\"Error: Unknown action for sharing\"},\"CalcWorktimeComponent\":{\"salaryDateTitle\":\"Palkkapäivä\",\"salaryDateDescription\":{\"html\":\" Päivä, jolloin palkka on työntekijän tilillä. Tyhjä päivä tarkoittaa <strong>heti</strong>: Käytännössä 0-4 päivää maksutavasta riippuen.\"},\"salaryDateLabel\":\"Palkkapäivä\",\"salaryDatePlaceholder\":\"Heti: 1-3 päivää maksusta\",\"worktime\":{\"title\":\"Milloin työ tehdään?\",\"description\":\"Valitse palkkakausi ja työpäivien määrä kaudella. Tarkat alku- ja loppupäivät voi antaa, kun valitsee Muu periodi.\",\"periodShortcut\":{\"label\":\"Palkkakausi\",\"labelDaysCount\":\"Työpäiviä kaudella\",\"labelWorkDaysCount\":\"Työpäivien määrä\",\"labelStartDate\":\"Alkupäivä\",\"labelStartAndEndDate\":\"Alku- ja loppupäivät\"}},\"absences\":{\"title\":\"Lomat ja poissaolot\",\"descriptionNoWorker\":\"Kun valitset laskelmalle työntekijän ja palkkajakson, haemme tähän ko. periodin lomat ja poissaolot.\",\"descriptionNoWorkerAnonTodo\":\"Kun valitset laskelmalle työntekijän ja palkkajakson, palvelu hakee työntekijän tietoihin ko. palkkakaudelle talletetut lomat lomapalkan laskentaa varten.\\r\",\"descriptionNoPeriod\":\"Kun valitset työn päivämäärät, haemme tähän ko. periodin lomat poissaolot.\",\"loadingText\":\"Ladataan lomia ja poissaoloja.\",\"calculationTabHeading\":\"Laskelma\",\"calculationLegend\":\"Tässä palkassa maksettavat lomat ja poissaolot\",\"calculationDescription\":\"Palkasta vähennettävät poissaolot:\",\"calculationDescriptionUndefined\":{\"html\":\"<strong>Lomalaskenta ei ole käytössä:</strong> Lisää lomat tarvittaessa riveinä Palkat-kohdassa.\"},\"calculationDescriptionNoHolidays\":\"Työntekijällä ei ole lomaoikeutta.\",\"calculationDescriptionHolidayCompensation\":\"Lomakorvausta lisätään:\",\"calculationDescriptionHolidayBonus\":\"lomaraha:\",\"calculationDescriptionNoHolidayBonus\":\"Ei erillistä lomarahaa.\",\"calculationDescriptionLeavesDays\":\"Pidetyt / maksettavat lomapäivät:\",\"link\":\"Lomaa kerryttämättömät poissaolot\",\"absencesTabHeading\":\"Poissaolot\",\"absencesAttention\":\"HUOM: Yhteensä-summat näyttävät koko periodin. Jos periodi katkeaa kesken palkkakauden, se huomioidaan vasta varsinaisessa laskennassa.\",\"leavesTabHeading\":\"Lomat\",\"calculateButtonText\":\"Laske lomat ja poissaolot palkkoihin\",\"proTabTitle\":\"Lisätoiminnot tilitoimistoille\"},\"holidays\":{\"headerHolidays\":\"Lomakertymät\",\"headerDays\":\"Päivät\"},\"anonDemoText\":{\"html\":\"<strong>HUOM:</strong> Anonyymi demoversio, data tyhjentyy, kun vaihdat periodia.\"},\"periodStartDateErrorFormat\":\"Syötä muodossa 'pv.kk.'\",\"periodStartDateErrorNotDate\":\" ei ole päivämäärä.\",\"submitWorktimeTitle\":\"Lasketaan ajanjaksoa\",\"getAccrualMonthText\":{\"permanent14Days\":\"Lomia kertyy kalenterikuukaudelle, jos työpäiviä vähintään 14 päivää. Korjaa tarvittaessa työntekijätietoihin palkanmaksun jälkeen.\",\"permanent35Hours\":\"Lomia kertyy kalenterikuukaudelle, jos työtunteja vähintään 35. Korjaa tarvittaessa työntekijätietoihin palkanmaksun jälkeen.\",\"temporaryTimeOff\":\"Lomia kertyy kalenterikuukaudelle aina 2 päivää.\",\"other\":\"Kertymä päivitetään käsin tai integraatiolla toisesta järjestelmästä.\",\"default\":\"Ei lomakertymää (#err)\",\"script\":\"Lomakertymä lasketaan erillisellä kaavalla.\"},\"lists\":{\"details\":{\"lead\":\"Muokkaa laskelmalla maksettavia lomia ja lomarahoja. Muutokset eivät vaikuta suunniteltuihin lomiin.\"},\"absencePeriods\":{\"absencesDailySalary\":\"Poissaolon päiväpalkka\",\"noAbsences\":\"Ei poissaoloja kuluvalle palkkakaudelle\",\"absencesToUse\":\"Poissaolot tässä laskelmassa\",\"absenceTime\":\"Poissaoloaika\",\"absencesToReject\":\"Ajanjakson poissaolot\",\"cause\":\"Syy\"},\"annualLeaves\":{\"summerHoliday\":\"Kesäloma\",\"winterHoliday\":\"Talviloma\",\"noAnnualLeaves\":\"Ei vuosilomia kuluvalle palkkakaudelle\",\"bonuses\":\"Lomarahat\",\"holidaySalariesAndCompensations\":\"Lomat (vuosilomapalkat ja lomakorvaukset)\",\"accrualRemaining\":\"Käytettävissä olevat lomat\",\"paidInThisSalary\":\"Maksetaan tässä palkassa\",\"newAccrualRemaining\":\"Jäljelle jäävä kertymä\",\"plannedHolidays\":\"Suunnitellut lomat\",\"days\":\"Päiviä\",\"bonusDays\":\"Päiviä (Lomaraha)\",\"holidayPeriod\":\"Loma-aika\",\"startDate\":\"Alku\",\"endDate\":\"Loppu\"}},\"availableHolidays\":{\"legend\":\"Käytettävissä olevat lomat\",\"holidayPayAccrualRemaining\":\"Vuosilomapalkkaa/lomakorvausta maksamatta (pv)\",\"holidayBonusAccrualRemaining\":\"Lomarahaa maksamatta (pv)\"}},\"AbsencePeriodsComponent\":{\"selectWorker\":\"Työntekijää / poissaoloja ei ole valittu...\",\"headerDays\":\"Päivät\",\"headerAbsence\":\"Poissaolot\",\"isPaid\":\"Palkallinen.\",\"notPaid\":\"Ei palkkaa.\",\"isAccrual\":\"Työssäolon veroinen.\",\"notAccrual\":\"Ei työssäolon veroinen.\",\"noAbsences\":\"Ei poissaoloja\",\"noAbsencesDescription\":\"Poissaolokirjanpitoon voit listata muut poissaolot: palkattomat ja palkalliset. Tänne voit listata myös palkattomat lomat / vapaat.\",\"noAbsencesDescription2\":\"Palkattomien poissaolojen päivät otetaan huomioon kuukausipalkan maksun yhteydessä ja ehdotettaessa lomapäivien kertymää.\",\"totalPaid\":\"Yhteensä, palkalliset\",\"totalUnpaid\":\"Yhteensä, palkattomat\",\"totalNoHolidayAccrual\":\"Yhteensä, lomakertymää vähentävät\",\"totalAll\":\"Yhteensä, kaikki\",\"addAbsenceButtonText\":\"Lisää poissaolo\",\"wholeAbsence\":\"Koko poissaolo\",\"periodDaysCount\":{\"html\":\"Palkattomat palkkakaudelle<br /> Lomakertymää vähentää\"}},\"AbsencePeriodsEditDialog\":{\"panelHeading\":\"Muokkaa poissaoloa\",\"label\":{\"causeCode\":\"Syy\",\"startDate\":\"Alku\",\"endDate\":\"Loppu\",\"workDays\":\"Työpäivät\",\"daysCount\":\"Päivien määrä\",\"isPaid\":\"Palkallinen\",\"isPaidLabelTrue\":\"Poissaolo on palkallinen\",\"isAccrual\":\"Lomakertymät\",\"isAccrualLabelTrue\":\"Työssäolon veroista aikaa lomapäivien kertymää laskettaessa\",\"notes\":\"Huomiot\"},\"saveButtonText\":\"Tallenna\",\"cancelButtonText\":\"Peruuta\",\"deleteButtonText\":\"Poista\",\"editDatesButtonText\":\"Muokkaa\"},\"WorkerAbsencesComponent\":{\"legend\":\"Poissaolot\",\"legendInstructions\":\"Poissaolojen kirjaaminen\",\"instructions\":{\"html\":\"<p> Palkattomat poissaolot vähentävät kuukausipalkan määrää automaattisesti. Tuntipalkkojen osalta sinun tulee huomioida poissaolot suoraan tunneissa.\\n</p>\\n<p>\\nPitkät poissaolot vaikuttavat myös lomalaskentaan, jos käytössä on 14 päivän lomapäivien kertymissääntö.\\n</p>\\n<p>\\nLisäksi poissaolojen tietoja saatetaan tarvita viranomaisraportointiin, palkkatodistuksiin ja esim. työttömyyskassoille.\\n</p>\"},\"addButtonText\":\"Lisää poissaolo\",\"calendarButtonText\":\"Kalenteri\",\"listButtonText\":\"Lista\"},\"AbsencesComponent\":{\"first\":\"Ensimmäinen\",\"lastest\":\"Viimeisin\",\"salaried\":\"Palkalliset\",\"unpaid\":\"Palkattomat\",\"absence\":\"poissaoloa\",\"day\":\"päivää\",\"error\":\"Virhe: Ei työsuhdetta\",\"d\":\"pv\",\"pce\":\"kpl\"},\"HolidayYearComponent\":{\"dialog\":{\"creatingYearHolidays\":\"Luodaan lomavuosia...\",\"loadingDefaults\":\"Haetaan oletuksia...\",\"notToSave\":\"Ei tallennettavaa\",\"nothingHaveChanged\":\"Mikään tietueista ei ole muuttunut\",\"saving\":\"Tallennetaan\",\"record\":\"tietuetta\"},\"planned\":\"Suunnitellut\",\"date\":\"pv\",\"accumulation\":\"kertymä\",\"dateYear\":\"pv (koko vuosi)\",\"holiday\":\"Loma\",\"days\":\"päivää\"},\"WorkerAbsencesCrudComponent\":{\"absencesPaid\":\"Palkallisia\",\"absencesUnpaid\":\"palkattomia\",\"days\":\"päivää\",\"notToSave\":\"Ei tallennettavaa\",\"nothingHaveChanged\":\"Mikään tietueista ei ole muuttunut\",\"saving\":\"Tallennetaan\",\"record\":\"tietuetta\",\"workerAndAbsenceList\":\"Työntekijä on jo poissaololistassa\",\"worker\":\"Työntekijä\",\"workerExistOnList\":\"on jo poissaolojen listassa. Valitse työntekijät uudestaan\"},\"HolidayYearAccrualComponent\":{\"accumulated\":\"Kertyneet\",\"futureEstimate\":\"Arvio tulevasta\",\"holidayAccrualSource\":{\"manual\":\"Muokattu käsin\",\"calcDraft\":\"Palkkalaskelma (luonnos)\",\"calcPaid\":\"Maksettu palkka\",\"defaultThisMonth\":\"Kuluva kuukausi\",\"defaultEstimate\":\"Arvio tulevasta (lomavuoden luonti)\",\"default\":\"Lomavuoden luonnista\"}},\"HolidayPayReportQueryComponent\":{\"calculationsTab\":\"Palkkalaskelmat\",\"calculation\":\"Palkkalaskelma\",\"description\":\"Selite\",\"count\":\"Määrä\",\"price\":\"Hinta\",\"toHolidayPay\":\"Vuosilomapalkkaan\",\"toWorkingHours\":\"Työtunteihin\",\"toOvertimeHours\":\"Ylityötunteihin\",\"workingDays\":\"Työpäivät\",\"absenceDays\":\"Poissaolopäivät\",\"holidayPaySelection\":\"Vuosilomapalkan poiminta\",\"workingHoursSelection\":\"Työtuntien poiminta\",\"overtimeHoursSelection\":\"Ylityötuntien poiminta\",\"total\":\"Yhteensä\",\"parametersTab\":\"Rivityypit ja kertoimet\",\"holidayPayRowTypes\":\"Vuosilomapalkan poiminnan rivityypit\",\"workingHoursRowTypes\":\"Työtuntien poiminnan rivityypit\",\"overtimeHoursRowTypes\":\"Ylityötuntien poiminnan rivityypit\",\"accrualWorkingTimeRowTypes\":\"Työaikakertymän rivityypit\"},\"HolidayReportComponent\":{\"info\":{\"html\":\"Lomalaskentaraportti toimii apuna työntekijöiden lomakertymien seurannassa. <br/>Haetut raportit voidaan tallentaa Exceliin ja käyttää niitä loma-ajan palkkojen laskennassa.<br/>Raportilla näkyvät maksetut palkkalaskelmat valitulta ajanjaksolta palkkapäivän mukaisesti.<br/>Mukana ovat ne työntekijät, joilla on käytössä Lomakirjanpito ja -laskenta.<br/>Raportin kertymätietoihin vaikuttavat työntekijän työsuhdetiedot, oletuspalkkariveihin tallennetut kuukausi- tai tuntipalkkatiedot, Lomat-osioon kirjatut tiedot ja palkkalaskelmilla käytetyt palkkarivit.\"},\"title\":\"Lomalaskentaraportti\",\"holidayYear\":\"Lomavuosi\",\"holidayYears\":\"Lomavuodet\",\"holidayPayDebt\":\"Lomapalkkavelka\",\"holidayPayDebtDate\":\"Päivämäärä\",\"calculateHolidayPayDebt\":\"Laske lomapalkkavelka\",\"yearAccruedDebt\":\"Lomapalkkavelka lomavuodelle\",\"allAccruedDebt\":\"Kaikkien lomavuosien lomapalkkavelka\",\"exportToExcel\":\"Vie Exceliin\",\"noNeededDataFound\":\"Yritykseltä ei löytynyt tarvittavia tietoja raportin luomiseen\",\"employeeNoHolidays\":\"Työnantajalla ei ole tallennettuja lomavuosia\",\"salaryPaymentMonths\":\"Palkanmaksu kuukaudet\",\"salaryPaymentWorkingHours\":\"Työtunnit\",\"accrualReport\":\"Kertymäraportti\",\"accrualReportInfo\":\"Palkkalaskelmat haettu ajalta\",\"irIncomeTypeReport\":\"Tulo- ja palkkalajiraportti\",\"irIncomeTypeReportInfo\":\"Palkkalaskelmat haettu ajalta\",\"salaryPaymentReport\":\"Palkanmaksujen erittely\",\"salaryPaymentReportInfo\":\"Palkkalaskelmat haettu ajalta\",\"accrualReportNotUsableInfo\":\"Kertymäraportti ei ole käytettävissä kun valittu kausi ei ole lomavuosi\",\"holidayYearReportRow\":{\"startSaldo\":\"Aikaisempien kausien kertymä\",\"total\":\"Lomavuoden kertymä\",\"paid\":\"Käytetty (Maksettu)\",\"available\":\"Jäljellä (Maksamatta)\",\"holidaySalary\":\"Maksetut loma-ajan palkat\",\"holidayCompensation\":\"Maksetut lomakorvaukset\",\"paidBonus\":\"Käytetty (Maksettu) lomarahaa\",\"availableBonus\":\"Jäljellä (Maksamatta) lomarahaa\",\"holidayBonus\":\"Maksetut lomarahat\",\"holidayPayDailySalary\":\"Lomapäivän palkka\",\"totalAccruedHolidayPay\":\"Kertyneet lomapalkat ja lomakorvaukset\",\"totalAccruedHolidayBonus\":\"Kertyneet lomarahat\",\"totalAccruedHolidaySocialSecurity\":\"Kertyneet lomapalkkojen sairausvakuutusmaksut\",\"totalAccruedHolidayPension\":\"Kertyneet lomapalkkojen eläkemaksut\",\"totalAccruedHolidayUnemployment\":\"Kertyneet lomapalkkojen työttömyysvakuutusmaksut\",\"totalAccruedHolidayAccidentInsurance\":\"Kertyneet lomapalkkojen työtapaturma- ja ammattitautivakuutusmaksut\",\"totalAccruedHolidayGroupLifeInsurance\":\"Kertyneet lomapalkkojen ryhmähenkivakuutusmaksut\",\"totalAccruedHolidayTotal\":\"Kertyneet yhteensä\"},\"table\":{\"startDate\":\"Aloituspäivä\",\"endDate\":\"Lopetuspäivä\",\"employment\":\"Työsuhde\",\"holidayCode\":\"Loman kertyminen\",\"holidayPayCalculation\":\"Vuosilomapalkan laskentatapa\",\"salary\":\"Palkka\",\"monthlySalariesTotal\":\"Kuukausipalkat yhteensä\",\"monthlyCount\":\"Kuukaudet\",\"averageMonthlySalary\":\"Keskimääräinen kuukausipalkka\",\"hourlySalariesTotal\":\"Tuntipalkat yhteensä\",\"hourCount\":\"Tunnit\",\"averageHourlySalary\":\"Keskimääräinen tuntipalkka\",\"previousPeriodAccrual\":\"Aikaisempien kausien kertymä\",\"currentPeriodAccrual\":\"Lomavuoden kertymä\",\"currentPeriodUsedAccrual\":\"Käytetty (Maksettu)\",\"currentPeriodAvailableAccrual\":\"Jäljellä (Maksamatta)\",\"currentPeriodPaidHolidayBonus\":\"Maksetut lomarahat\",\"currentPeriodPaidHolidaySalary\":\"Maksetut loma-ajan palkat\",\"currentPeriodPaidHolidayCompensation\":\"Maksetut lomakorvaukset\",\"nextPeriodAccrual\":\"Seuraavalla lomanmääräytymisvuodella kertyneet\",\"periodDefaultAccrual\":\"Kertymä/kk\"},\"modal\":{\"title\":\"Valitse kausi\",\"periodLabel\":\"Kausi\",\"holidayYear\":\"Lomavuosi\",\"custom\":\"Muu aikaväli\",\"periodDateKindLabel\":\"Kauden määräytyminen\",\"selectHolidayYear\":\"Valitse lomavuosi\",\"startDateCustomLabel\":\"Valitse kauden aloituspäivä\",\"endDateCustomLabel\":\"Valitse kauden päättymispäivä\"}},\"WorkerHolidaysComponent\":{\"alert\":{\"undefined\":\"VIRHE: Lomalaskennan tyyppiä ei ole määritetty.\",\"holidayCompensationIncluded\":\"VIRHE: Tätä lomalaskennan tyyppiä ei tueta: holidayCompensationIncluded.\"},\"InitDialog\":{\"panelHeading\":\"Lomakirjanpito ja -laskenta\",\"intro\":\"Ota lomakirjanpito käyttöön valitsemalla sääntö lomien kertymiselle ja lomarahan maksamiselle\",\"alert\":{\"html\":\"<strong>HUOM:</strong> Tämä käyttöliittymä poistaa muokkaukset lomakertymiin ja luo ne uudestaan.\\r\\n          <strong>Tarkista siis lomakertymät tämän jälkeen!</strong>\"},\"legendSelectHolidayType\":\"Lomapäivien kertymisen ja laskennan perusta\",\"label\":{\"permanent14Days\":{\"html\":\"<strong>Vähintään 14 päivää kuukaudessa.</strong><br />\\r\\nTyötä tehdään kaikkina kuukausina vähintään 14 pv/kk.\"},\"permanent35Hours\":{\"html\":\"<strong>Vähintään 35 tuntia kuukaudessa.</strong><br />\\nAinakin yhtenä kuukautena vuodessa tehdään vähintään 35 tuntia työtä.\"},\"holidayCompensation\":{\"html\":\" <strong>Lomakorvaus palkanmaksun yhteydessä.</strong><br />\\r\\n  Lomapäiviä ei kerrytetä vaan lomakorvaus maksetaan heti palkan yhteydessä.\"},\"temporaryTimeOff\":{\"html\":\"<strong>Vapaan ansaintasääntö.</strong><br />\\r\\nTyöntekijä ei kuulu 14 päivän tai 35 tunnin säännön piiriin, mutta saa pidetyltä vapaalta lomakorvauksen.\"},\"holidayCompensationIncluded\":{\"html\":\"<strong>Lomakorvaus osa kokonaispalkkaa.</strong><br />\\r\\nLomia ei kerrytetä, vaan lomakorvaus on sovittu osaksi kokonaispalkkaa. Tämä on mahdollista vain poikkeustilanteissa, lähinnä kotitalouksilla.\"},\"noHolidays\":{\"html\":\"<strong>Ei lomaoikeutta.</strong><br />\\nPalkan tai korvauksen saajalla ei ole lomaoikeutta.\"},\"other\":{\"html\":\"<strong>Manuaalinen.</strong><br />\\r\\nKertymä päivitetään käsin tai integraatiolla toisesta järjestelmästä.\"},\"script\":{\"html\":\"<strong>Kaava.</strong><br />\\r\\nLomakertymä lasketaan erillisellä kaavalla.\"},\"accrualByLaw\":\"Kertymä\",\"accrualByLawLabelTrue\":\"Lomalain mukaan: 2 tai 2,5 pv/kk (riippuen työsuhteen pituudesta).\",\"accrualByLawLabelTrue2\":\"Lomalain mukaan 2 pv/kk\",\"accrualFixed\":\"Päivää / kuukausi\",\"compensation\":\"Lomakorvaus\",\"bonusMethod\":\"Lomarahan maksu\",\"bonusMethodNone\":\"Ei erillistä lomarahaa.\",\"bonusMethodPayForHolidaySalary\":\"Erillinen lomaraha\",\"bonusPercent\":\"Lomaraha, prosenttia\",\"wageBasis\":\"Palkkaustapa (työsuhteessa)\",\"holidayPayCalculationReport\":\"Vuosilomapalkan laskentaraportti\",\"calculationReport\":\"Laskentaraportti\"},\"moreInfo\":{\"html\":\" Voit tutustua esimerkkeihin\\n<a href=\\\"https://www.palkkaus.fi/abc/loma-ajan-palkka-ja-lomalaskenta/\\\" target=\\\"_blank\\\">täällä</a>.\"},\"legendDetails\":\"Lomalaskennan yksityiskohdat\",\"submitButtonText\":\"Ota lomakirjanpito käyttöön\"},\"undefined\":{\"title\":\"Lomakirjanpito ja -laskenta\",\"intro\":\"Tuomme kevään aikana asteittain paljon kysytyn lomakirjanpidon ja -laskennan osaksi palvelua. Tavoitteenamme on tehdä markkinoiden helppokäyttöisin palvelu lomien ja poissaolojen kirjaamiseen ja maksamiseen.\",\"subtitleLeft\":\"Tässä versiossa\",\"introLeft\":\"<li>Lomapäivien kertyminen</li>\\n<li>Lomakirjanpito</li>\\n<li>Lomapäivien maksaminen kuukausipalkkalaisille</li>\\n<li>Lomarahat</li>\",\"subtitleRight\":\"Tulevat ominaisuudet\",\"introRight\":\"<li>Lomapäivien maksaminen tunti- ja urakkapalkoista</li>\\r\\n<li>Keskituntiansion laskeminen</li>\\r\\n<li>Lomakorvauksen erikoistilanteet</li>\\r\\n<li>Kesä- ja talvilomalistat (monelle työntekijälle)</li>\",\"showInitHolidaysButtonText\":\"Ota käyttöön tälle työntekijälle\"},\"noHolidays\":{\"legend\":\"Ei lomaoikeutta, lomavuosi\",\"intro\":\"Työsuhteen / lomavuoden tietoihin on merkitty, ettei tällä työntekijällä ole lomaoikeutta.\",\"intro2\":\"Jos haluat muuttaa työntekijä lomakäsittelyn, \",\"introShowInitHolidays\":\"luo lomakirjanpito uudestaan\"},\"holidayCompensation\":{\"overview\":{\"legend\":\"Lomakorvaus palkanmaksun yhteydessä \",\"legendYear\":\"lomavuosi\",\"intro\":\"Työntekijän / lomavuoden tiedoissa on merkitty, että työntekijän lomat maksetaan suoraan jokaisen palkanmaksun yhteydessä. Tämä on tyypillistä tilapäisillä työntekijöillä.\",\"intro2\":\"Palkkalaskuri lisää lomakorvauksen ja -rahan prosentteina bruttopalkasta:\",\"introCompensation\":\"Lomakorvaus:\",\"introBonus\":\"Lomaraha:\",\"introNoBonus\":\"Ei lomarahaa tai lomaraha osa lomakorvauksen kokonaisprosenttia\",\"introUseCalendar\":{\"html\":\"<strong>Voit halutessasi käyttää lomakalenteria</strong><br />\\n<small>\\nYleensä tällaisilla tilapäisillä työntekijöillä ei ole varsinaista lomaa.\\nLomakalenteriin voit kuitenkin halutessasi syöttää milloin henkilö on poissa loma-aikaan.\\nKalenteri ei vaikuta palkanmaksuun.</small>\"}}},\"accrual\":{\"overview\":{\"legend\":\"Yleiskuva, lomavuosi\",\"introTitle\":\"Lomien kirjaaminen ja maksaminen:\",\"introList\":{\"html\":\"<strong>Tarkista lomapäivien kertymä</strong><br /> Tarkista, kuinka monta lomapäivää työntekijälläsi on käytettävissä edelliseltä lomanmääräytymisvuodelta. Jos sitä edeltävältä vuodelta on käyttämättömiä lomia, voit lisätä ne alkusaldoksi\\n                    samassa yhteydessä.\"},\"introList2\":{\"html\":\"<strong>Suunnittele ja kirjaa kesä- ja talvilomat</strong><br /> Lisäämällä pidettävät lomat lomakalenteriin etukäteen, sinun on helppo maksaa loma-ajan palkka ja lomarahat kyseisten palkkakausien palkanmaksun yhteydessä.\"},\"introList3\":{\"html\":\"<strong>Laske vuosilomapalkka</strong><br /> Tuntipalkkalaisten osalta vuosilomapalkka lasketaan edellisen vuoden ansioden perusteella. Tämä tulee tehdä, kun lomanmääräytymisvuosi on päättynyt (huhtikuussa).\"},\"introList4\":{\"html\":\"<strong>Maksa loma-ajan palkka ja lomaraha</strong><br /> Palkanmaksun yhteydessä palvelu hakee automaattisesti valitulle palkkakaudelle suunnitellut lomat ja ehdottaa niitä laskelmalle. Tarvittaessa muutoksia voi tehdä myös palkanlaskennan yhteydessä ja tiedot tallentuvat lomakirjanpitoon.\"}},\"paidSalaries\":{\"legend\":\"Maksetut lomat\",\"description\":\"Lista pidetyistä (ja maksetuista) tai korvatuista lomista sekä lomarahoista.\",\"descriptionList\":{\"html\":\"<li><strong>Lomapalkka</strong> (Loma-ajan palkka) maksetaan, kun lomapäivät pidetään (oletus).</li>\\r\\n<li><strong>Lomakorvaus</strong> maksetaan, jos lomia ei voida pitää esim. työsuhteen päättyessä.</li>\\r\\n<li><strong>Lomaraha</strong> maksetaan joka tapauksessa. Usein kaikki kesäloman yhteydessä.</li>\"}},\"accrualHolidays\":{\"legend\":\"Lomapäivien kertymä\",\"description\":\"Lomapäivien kertymä lomanmääräytymisvuodelta\",\"description2\":\"Lomat pidetään seuraavana lomakautena\"},\"hourlySalaries\":{\"legend\":\"Vuosilomapalkka ajalta\",\"description\":\"Tunti- ja suorituspalkkaiselle vuosilomapalkka lasketaan pääsääntöisesti kolmella eri menetelmällä:\",\"descriptionList\":{\"html\":\"<li>\\n<strong>Prosenttipohjaisena:</strong> 35h-säännön alaisille (ainakin osa kuukausista alle 14 työpäivää), jos TES ei muuta määrää 9% tai 11,5% (työsuhde yli alle vuoden). Joissain työehtosopimuksissa myös muita prosentteja.\\n </li>\\n<li>\\n<strong>Keskipäiväpalkka:</strong> 14 päivän säännön alaisille lomalain mukaan, jos TES ei muuta määrää.\\n</li>\\n<li>\\n<strong>Keskituntiansion mukaan </strong> Erityisesti SAK:n ja EK:n välisen lomapalkkasopimuksen mukaan, mutta käytössä yhä useammassa työehtosopimuksessa. Työehtosopimuskohtaisia taulukoita.\\n</li>\"},\"description2\":\"Seuraavissa versioissa tuomme laskentaan erilaisia työkaluja. Tässä versiossa vuosilomapalkka on laskettava esim. Excelissä. Asiakaspalvelumme tai tilitoimistosi auttaa sinua mielellään.\"}},\"HolidayYearPaid\":{\"tableHead\":{\"paidHolidays\":\"Maksetut lomat\",\"holidaysCount\":\"Lomapäiviä\",\"holidaySalary\":\"Lomapalkka\",\"compensation\":\"Lomakorvaus\",\"bonus\":\"Lomaraha\"}},\"HolidayYearHolidays\":{\"tableHead\":{\"period\":\"Lomajakso\",\"daysCount\":\"Päivät\",\"bonusDaysCount\":\"Päivät (lomaraha)\"},\"tableBody\":{\"availableHolidays\":\"Käytettävissä olevat\",\"availableHolidaysMore\":\"Päättyneellä lomanmääräytymisvuodella kertyneet lomat\",\"total\":\"Yhteensä\",\"totalMore\":\"Palkkakaudelle osuvat lomat\",\"total2\":\"Yhteensä\",\"total2More\":\"Lomavuodelle suunnitellut lomat.\",\"unusedHolidays\":\"Sunnittelemattomat lomat\",\"unusedHolidaysMore\":\"Lomapäivät, jotka tulee suunnitella tai maksaa lomakorvauksena.\",\"noHolidaysTitle\":\"Ei suunniteltuja lomia\",\"noHolidaysDescription\":\" Lomakalenterissa voit suunnitella vuoden lomat. \\n Syötetyt lomat otetaan automaattisesti huomioon, kun maksat kuukausi- tai tuntipalkkaa.\",\"noHolidaysDescription2\":\"Menneet lomat voit halutessasi myös kirjata lomakirjanpitoon.\\r\\nSiellä ne säilyvät tallessa lain vaatiman säilytysajan.\",\"addFirstHolidayButtonText\":\"Lisää ensimmäinen loma\"},\"addHolidayButtonText\":\"Lisää loma\"},\"HolidayYearHolidaysEditDialog\":{\"panelHeading\":\"Muokkaa lomaa\",\"labelStartDate\":\"Alku\",\"labelEndDate\":\"Loppu\",\"labelHolidaysCount\":\"Lomapäivät\",\"editDatesButtonText\":\"Muokkaa\",\"labelDescription\":\"Huomiot\",\"dialogHeading\":\"Loman lisääminen\",\"dialogText\":\"Oletko varma, että haluat sijoittaa loman yleisen lomakauden ulkopuolelle?\"},\"HolidayYearAccrual\":{\"tableHead\":{\"month\":\"Kuukausi\",\"daysCount\":\"Päiviä\"},\"tableBody\":{\"startSaldo\":\"Alkusaldo\",\"startSaldoMore\":\"Edelliseltä vuodelta\",\"daysAccruedLabel\":\"kertymä\",\"daysAccrued\":\"Kertyneet lomapäivät\",\"total\":\"Yhteensä\",\"estimatedHolidaysNexYear\":\"Arvio ensi vuoden lomapäivistä\"}},\"HolidayYearPaidEditDialog\":{\"panelHeading\":\"Muokkaa pidettyä / maksettua lomaa\",\"kind\":\"Maksun tyyppi\",\"undefined\":{\"labelAnnualLeavePaymentKind\":\"Valitse maksun tyyppi:\"},\"manualSalary\":{\"title\":\"Korjaus loma-ajan palkkaan\",\"description\":\"Loma-ajan palkka, joka on maksettu Palkkaus.fi-palvelun ulkopuolella tai halutaan muuten korjata käsin.\",\"labelPaidAt\":\"Maksupäivä\",\"labelStartDate\":\"Loman alku\",\"labelEndDate\":\"Loman loppu\",\"labelDaysCount\":\"Laskennallinen päivien määrä\",\"labelUsedHolidays\":\"Käytetyt lomapäivät\",\"labelHolidaySalary\":\"Loma-ajan palkka\",\"labelBonus\":\"Lomaraha\",\"labelDescription\":\"Huomiot\"},\"manualCompensation\":{\"title\":\"Korjaus lomakorvauksiin\",\"description\":\"Lomakorvaus, joka on maksettu Palkkaus.fi-palvelun ulkopuolella tai halutaan muuten korjata käsin.\",\"labelPaidAt\":\"Maksupäivä\",\"labelStartDate\":\"Loman alku\",\"labelEndDate\":\"Loman loppu\",\"labelDaysCount\":\"Laskennallinen päivien määrä\",\"labelPaidHolidays\":\"Maksetut lomapäivät\",\"labelCompensation\":\"Lomakorvaus\",\"labelBonus\":\"Lomaraha\",\"labelDescription\":\"Huomiot\"},\"manualBonus\":{\"title\":\"Korjaus lomarahoihin\",\"description\":\"Lomaraha, joka on maksettu Palkkaus.fi-palvelun ulkopuolella tai halutaan muuten korjata käsin.\",\"labelPaidAt\":\"Maksupäivä\",\"labelBonus\":\"Lomaraha\",\"labelDescription\":\"Huomiot\"},\"paidCalc\":{\"title\":\"Maksettu palkkalaskelma\",\"description\":\"Liitä Palkkaus.fi-palvelussa jo maksettu palkka lomakirjanpitoon. Samalla voit lisätä palkkalaskelmaan lomalaskennan tietoja, joita palkkalaskelmalla ei alunperin ollut.\",\"labelPaidHolidays\":\"Maksetut lomapäivät\",\"labelHolidaySalary\":\"Loma-ajan palkka\",\"labelCompensation\":\"Lomakorvaus\",\"labelBonus\":\"Lomaraha\"},\"draftCalc\":{\"title\":\"Palkkalaskelman luonnos\",\"description\":\"Liitä palkkalaskelman luonnos lomakirjanpitoon. Tätä käytetään lähinnä testauksessa, sillä järjestelmä liittää kaikki uudet maksettavat palkat automaattisesti lomakirjanpitoon, jos lomakirjanpito on otettu käyttöön\",\"labelPaidHolidays\":\"Maksetut lomapäivät\",\"labelHolidaySalary\":\"Loma-ajan palkka\",\"labelCompensation\":\"Lomakorvaus\",\"labelBonus\":\"Lomaraha\"}},\"UI\":{\"buttonSummer\":\"Kesä\",\"buttonWinter\":\"Talvi\",\"buttonAll\":\"Muokkaa / kaikki lomat\",\"calendarTitle\":\"Lomakalenteri\",\"summerHolidaysTitle\":\"Kesälomat\",\"winterHolidaysTitle\":\"Talvilomat\",\"dropdown\":{\"selectedYear\":\"Lomavuosi\",\"selectYear\":\"Valitse vuosi\",\"showInitHolidays\":\"Luo lomakirjanpito uudestaan\"},\"sidebar\":{\"buttonOverview\":\"Yleiskuva\",\"buttonHolidays\":\"Lomakalenteri\",\"buttonAccrual\":\"Lomapäivien kertymä\",\"buttonHourlySalaries\":\"Laske vuosilomapalkka\",\"buttonPaidHolidays\":\"Maksetut lomat\",\"buttonSettings\":\"Asetukset\",\"info\":\"Tiedot: \",\"periodSelectedYear\":\"Kesä- ja talvilomakausi:\",\"periodDefaultAccrual\":\"Lomapäiviä per kk:\",\"compensation\":\"Lomakorvaus:\",\"bonus\":\"Lomaraha:\",\"periodAccrual\":\"Lomanmääräytymisvuosi:\"},\"inputs\":{\"type\":\"Tyyppi\",\"multiplier\":\"Kerroin\",\"days\":\"Päiviä\",\"incomeType\":\"Tulolaji\",\"rowType\":\"Rivin päätyyppi\",\"wageType\":\"Palkkalaji\",\"exclusive\":\"Poissulkeva\",\"unit\":\"Yksikkö\",\"typeNotSupported\":\"Tyyppiä ei tueta\"}}},\"HolidaysComponent\":{\"holidayType\":{\"html\":\"Lomatyyppi<br /> Lomaraha\"},\"year\":\"Vuosi\",\"holidays\":{\"html\":\"Lomat<br /> Kertymä\"},\"error\":\"Virhe: Ei työsuhdetta\"},\"HouseHoldYearsComponent\":{\"year\":\"Vuosi\",\"answer\":\"Vastaus\",\"latestSaving\":\"Viimeisin tallennus\",\"backOfficeStatus\":\"Käsittelyn tila\"},\"CertificatesComponent\":{\"name\":\"Nimi\",\"id\":\"Id\",\"title\":\"Varmenteet\",\"newCertificate\":\"Uusi varmenne\"},\"CertificateAddComponent\":{\"title\":\"Uusi sertifikaatti\",\"createdSertificate\":\"Luotu sertifikaatti\",\"createSertificate\":\"Luo sertifikaatti\",\"base64\":\"BASE64-enkoodattu\",\"downloadBase64\":\"Lataa sertifikaatti tiedostona\",\"copyBase64\":\"Kopioi BASE64-enkoodattu sertifikaatti\",\"html\":\"<legend>Sertifikaatti</legend>\\r\\n    <p>\\r\\n        Voit luoda uuden sertifikaatin syöttämällä nimen ja salasanan, ja painamalla \\\"Luo sertifikaatti\\\"-nappia. Salasanalla suojataan muodostuva sertifikaattitiedosto (vain .pfx).\\r\\n    </p>\\r\\n    <p>\\r\\n        <b>HUOM:</b> Ota sertifikaattitiedoston (vain .pfx) suojaava salasana talteen, emme tallenna sitä palveluun.\\r\\n    </p>\\r\\n    <p>Sertifikaatin luonti kestää hetken, odota kunnes sertifikaatti on valmis ja kopioi sertifikaatin tiedot omalle koneellesi.</p>\\r\\n\\r\\n    <p>\\r\\n        <b>HUOM:</b> Älä sulje dialogia, ennen kuin olet kopioinut sertifikaatin tiedot. Emme tallenna sertifikaattia palveluumme.\\r\\n    </p>\",\"password\":\"Salasana\",\"format\":{\"pfx\":\"Windows-sertifikaatti (pfx / pkcs12)\",\"pem\":\"Yleinen sertifikaatti (zip / pem)\"}},\"CmsArticleComponent\":{\"author\":\"Kirjoittaja\",\"date\":\"päiväys\"},\"ContractComponent\":{\"additionalInfo\":\"Muut tiedot\",\"annualLeave\":\"Vuosiloma\",\"collectiveContract\":\"Sovellettava työehtosopimus\",\"createNew\":\"Luo uusi sopimus\",\"employmentRelationship\":\"Työsuhteen tyyppi\",\"employmentRelationshipAlt\":\"Työsuhde ja kuvaus\",\"worker\":\"Työntekijä\",\"fullTime\":\"Toistaiseksi voimassaoleva\",\"fullTimeInfo\":\"HUOM: sinulla pitää olla voimassa lakisääteinen tapaturmavakuutus. Voit ottaa sen Palkkaus.fi:n kautta menemällä ylävalikosta kohtaan \\\"3. Vakuutus \\\". Sinulla tulisi olla myös työeläkevakuutussopimus työeläkeyhtiön kanssa.\",\"hoursPerDay\":\"Tuntia/vuorokaudessa\",\"hoursPerThreeWeeks\":\"3 viikon jaksossa\",\"hoursPerTwoWeeks\":\"2 viikon jaksossa\",\"hoursPerWeek\":\"Tuntia/viikkossa\",\"infoEmployer\":\"Työnantajan tiedot\",\"job\":\"Kertaluonteinen työ\",\"mainWorkAssignment\":\"Pääasialliset työtehtävät\",\"noticePeriod\":\"Irtisaomisaika\",\"noticePeriodAssignment\":\"Irtisanomisaika määräytyy\",\"other\":\"Muut\",\"otherTerms\":\"Muut sopimusehdot\",\"parties\":\"Osapuolet\",\"partTime\":\"Määräaikainen\",\"payDays\":\"Palkanmaksupäivät\",\"preview\":\"Esikatselu\",\"probationM\":\"Koeaika (kk)\",\"salaryAmount\":\"Palkan määrä\",\"salaryBasis\":\"Palkan määräytymisen peruste\",\"salaryOther\":\"Muu palkka\",\"salarySimple\":\"Työstä maksettava kertakorvaus\",\"timeAndPayment\":\"Työaika ja palkanmaksu\",\"timeAndSalary\":\"Aika ja palkka\",\"TODO\":\"This translation is not ready\",\"workAssignment\":\"Työtehtävät\",\"workEndDate\":\"Työsuhde päättyy\",\"workEndDateAlt\":\"Loppupäivä\",\"workPeriod\":\"Työajan jakso\",\"workStartDate\":\"Työsuhde alkaa\",\"workStartDateAlt\":\"Aloituspäivä\",\"workTime\":\"Työaika\"},\"CredentialsComponent\":{\"title\":\"Käyttäjätunnukset\",\"intro\":\"Infoteksti\",\"userId\":\"Käyttäjätunnus\",\"authenticationMethod\":\"Kirjautumistapa\",\"firstName\":\"Etunimi\",\"lastName\":\"Sukunimi\",\"email\":\"Sähköposti\",\"telephone\":\"Puhelinnumero\",\"avatar\":{\"label\":\"Kuvan tyyppi\",\"optionChoose\":\"Valitse kuvan tyyppi\",\"optionIcon\":\"Kuvake\",\"optionUploaded\":\"Kuva omalta koneelta\",\"optionGravatar\":\"Gravatar\",\"gravatarInfo\":{\"html\":\"Gravatar-kuva on linkitetty sähköpostiosoitteeseen ja sähköpostiosoitteen omistaja voi itse vaihtaa kuvan osoitteessa www.gravatar.com. Sitä käytetään myös monissa muissa palveluissa: blogeissa, keskustelufoorumeilla jne.\"},\"labelInitials\":\"Nimikirjaimet\",\"labelColor\":\"Väri\",\"labelUploadImage\":\"Lataa kuva koneelta\",\"uploadImage\":{\"html\":\"Klikkaa tästä ja lataa kuva<br>(maks. 10MB)<br />\"}},\"color\":{\"brown\":\"Ruskea\",\"lime\":\"Lime\",\"darkGreen\":\"Tummanvihreä\",\"pink\":\"Pinkki\"}},\"CreditTransferComponent\":{\"receiverIban\":{\"html\":\"Saajan<br>tilinumero<br>Mottagarens<br>kontonummer\"},\"receiver\":{\"html\":\"Saaja<br>Mottagare\"},\"payerInfo\":{\"html\":\"Maksajan<br>nimi ja<br>osoite<br>Betalarens<br>namn och<br>adress</div>\"},\"creditTransfer\":\"TILISIIRTO. GIRERING\",\"signature\":{\"html\":\"Allekirjoitus<br>Underskrift\"},\"fromAccount\":{\"html\":\"Tililtä nro<br>Från konto nr\"},\"iban\":\"IBAN\",\"refNumber\":{\"html\":\" Viitenumero<br>Ref. nr\"},\"dueDate\":{\"html\":\"Eräpäivä<br>Förfallodag\"},\"euro\":\"Euro\",\"transferDescription\":\"Huomaa, että alla olevasta tekstikentästä voit myös kopioida viivakoodin useimpiin verkkopankkeihin, joten sinun ei tarvitse syöttää maksun tietoja.\",\"barcodeLabel\":\"Viivakoodi verkkopankkiin\"},\"CurrentTaxCardComponent\":{\"salaryDate\":\"Maksupäivä\",\"addSSNumber\":\"Nähdäksesi tai syöttääksesi verokortin, lisää henkilötunnus työntekijän tietoihin.\",\"addTaxCard\":\"Lisää verokortti\",\"searchTaxCard\":\"Hae verokortti\",\"chooseNoTaxCard\":\"Ei verokorttia, 60% ennakonpidätys\",\"incomeLimit\":\"Tuloraja\",\"incomeLimit2\":\"Tuloraja, euroa\",\"incomeLimitSpan\":\"...ylittävä %\",\"loading\":\"Ladataan...\",\"mainTaxPercent\":\"Perusprosentti\",\"mainTaxPercent2\":\"Ennakonpidätysprosentti\",\"mainTaxPercent3\":\"Ennakonpidätys (%)\",\"newTaxCard\":\"Uusi verokortti\",\"noTaxCardAdded\":\"Työntekijän verokorttia ei ole määritetty. Syötä verokortti tai valitse työsuhteessa käytettäväksi verokortiksi automaattinen verokortti, jolloin verokortin tiedot haetaan verottajalta automaattisesti palkanmaksun yhteydessä, eikä verokorttia tarvitse erikseen käsin syöttää.\",\"noTaxCardAddedWorker\":\"Jos työnantajasi on yritys, toimita verokortti työnantajalle, joka lisää sen palveluun. Voit lisätä verokorttisi tiedot tästä, jos työnantajasi on kotitalous.\",\"previousSalaries\":\"Palkat vuoden alusta\",\"previousSalariesForTaxCard\":{\"label\":\"Tälle verokortille aiemmin maksetut palkat, €\",\"tooltip\":\"Tällä verokortille jo aiemmin maksamasi palkat. Summa voi olla nolla, jos et vielä ole tälle kortille mitään maksanut.\"},\"progressPreview\":\"Muodostetaan esikatselua...\",\"salariesPaid\":\"Palkkoja maksettu\",\"stepsTaxCardInfo\":\"Portaikkoverokortin tulorajat vuonna 2017\",\"taxCardAsFile\":\"Verokortti tiedostona\",\"taxCardExpiration\":\"Verokortti vanhenee kuun lopussa\",\"taxCardExpired\":\"Työntekijän aiempi verokortti on vanhentunut, joten työntekijälle ei voida maksaa palkkaa.\",\"taxPercent2\":{\"html\":\"<b>Lisäprosentti</b><br /> (tulorajan jälkeen)\",\"name\":\"Lisäprosentti\",\"nameAlt\":\"Perus-/Lisäprosentti\"},\"taxPercentMin\":{\"title\":\"Minimiprosentti\"},\"uploadError\":\"Tiedoston lataamisessa tapahtui virhe.\",\"uploadErrorFormat\":\"Valitsemasi tiedosto ei ole kuva tai pdf.\",\"uploadErrorLarge\":\"Valitsemasi tiedoston koko on yli sallitun 10MB.\",\"uploadErrorSmall\":\"Valitsemasi tiedoston koko on alle sallitun 5KB.\",\"uploadTaxCard\":{\"html\":\"Klikkaa tästä ja lataa verokortti palveluun<br>(pdf tai kuva, maks. 10MB)<br />\"},\"validDate\":\"Voimassa\",\"validFromDate\":\"Voimaantulopäivä\",\"validFromDate2\":\"Voimassa alkaen\",\"validTillDate\":\"...asti\",\"validFromDateACard\":\"Voimassaolopäivä tai työsuhteen alkamispäivä (valitse näistä myöhäisempi)\",\"year\":\"Vuosi\",\"yearlyIncomeLimit\":\"Vuosituloraja\",\"yearlyIncomeLimitACard\":\"Laskennallinen tuloraja ATK-järjestelmää varten\",\"yearlyIncomeLimitBCard\":\"Tuloraja\",\"detailsInfo\":{\"loadedByWorker\":{\"html\":\"<strong>Työntekijän lataama verokortti</strong>\"},\"noFileUploaded\":\"Ei liitetiedostoa, pyydä verokortti nähtäväksesi työntekijältä.\",\"auto\":\"Tämä verokortti on tarkistettu verottajan uudesta ennakonpidätysrajapinnasta. Tarkistamme tiedot jokaisen palkanmaksun yhteydessä: Sinun ei itse tarvitse tarkistaa verokorttia.\"},\"taxCardKind\":\"Verokortin tyyppi\",\"selectCardKind\":\"Valitse verokortin tyyppi\",\"inJanuary\":\"Tammikuussa:\",\"inPalkkaus\":\"Palkkaus.fi-palvelussa\",\"beforeIncomeLimit\":\"Jäljellä ennen tulorajaa\",\"taxCardAdded\":\"Lisätty\",\"noIncomeLimit\":\"Ei tulorajaa / lisäprosenttia\",\"after\":\"jälkeen\",\"edit\":\"Muokkaa...\",\"basicPercent\":\"Perusprosentti\",\"newTaxCardTitle\":\"Verokortin tiedot\",\"taxCardChecked\":\"Verokortti on tarkistettu\",\"checkAutomaticTaxCard\":\"Tarkista autom. verokortti\",\"noTaxCard\":{\"description\":\"Ellei työnantajalla ole käytettävissään maksuvuoden verokorttitietoja, pidätys toimitetaan 60 %:n suuruisena\"},\"noWithholdingHousehold\":{\"description\":\"Kun yksityinen henkilö tai kuolinpesä maksaa palkkaa alle 1500 € vuodessa, ennakonpidätys tarvitsee suorittaa vain jos työntekijä näin pyytää. Jos aiot maksat yhdelle työntekijälle vuoden aikana enemmän kuin 1500 € vuodessa, sinun tulee valita toinen verokortti.\"},\"fileUploadRequired\":\"Verokortin lataaminen on pakollista, jotta työnantaja voi tarkistaa verokortin ennen palkan maksamista. \",\"customerServiceHelp\":\"Kysy verokortin tyypin valinnasta asiakaspalvelustamme\",\"exampleTaxCardFileTitle\":\"Syötä nämä tiedot\",\"commitDiffBtn\":\"Tallenna laskelmat\",\"commitDiffNote\":\"HUOM: Työntekijälle maksetut laskelmat verokortin ajalta eroavat verokorttiin merkittyistä laskelmista. Voit päivittää muuttuneet\",\"noPersonalIdError\":\"VIRHE: Uuden verokortin lisääminen vaatii henkilötunnuksen.\",\"changePaymentDate\":\"Vaihda maksupäivää\",\"taxCards\":{\"worker\":\"Työntekijä\",\"year\":\"Vuosi\",\"valid\":\"Voimassa\",\"invalid\":\"..loppu\",\"paid\":\"Maksettu\",\"incomeLimit\":\"Tuloraja\",\"ssNumberAlt\":\"Henkilötunnus\",\"unknown\":\"tuntematon\",\"taxPercentAdditional\":\"Lisäprosentti:\",\"taxCardDetails\":{\"downloaded\":\"ladattu\",\"enterThisInformation\":\"Syötä nämä tiedot\",\"changeThisDate\":\"TODAY: Vaihda tämä päivä\",\"incomeType\":{\"label\":\"Verokortin tulolaji\",\"value\":\"Palkkaa\",\"tooltip\":{\"html\":\"Alkuvaiheessa käytössä on vain palkkalaji 'Palkkaa' (24). Jos työntekijällä on erillinen verokortti esim. käyttökorvaukseen, työkorvaukseen tai kertatuloon, se tulee syöttää käsin.\"}},\"automaticTaxcard\":{\"legend\":\"Automaattinen verokortin haku\",\"mainTaxPercentApi\":\"Palkkaus.fi-palvelussa on nyt käytössä verottajan Ennakonpidätys-rajapinta.\",\"taxPercentInfoText\":{\"html\":\"<p>Veroprosentit tarkistetaan automattisesti suoraan verottajalta jokaisen palkanmaksun yhteydessä, eikä sinun tarvitse enää syöttää verokortin tietoja.</p><p class='text-danger' sxy-if-role='test'><strong>HUOM:</strong> Valitse tämä verokortti vain henkilöille, joille aiot maksaa palkkaa (ei testityöntekijöille).</p><p>Verokortin haku näkyy työntekijälle ja verotietojen hakeminen ilman aietta palkanmaksuun loukkaa henkilön yksityisyyden suojaa.</p><p>Alkuvaiheessa käytössä on vain palkkalaji 'Palkkaa'. Jos työntekijällä on erillinen verokortti esim. käyttökorvaukseen, työkorvaukseen tai kertatuloon, se tulee syöttää käsin.</p><p class='strong'>HUOM: Automaattinen verokortti on suositeltu tapa hoitaa verokorttirumba uusille työntekijöille. Voit erikoistilanteissa syöttää myös verokortin tiedot erikseen.</p>\"}}}},\"previousSalariesRow\":\"Muualla maksetut palkat (verokortin lisäys).\",\"saveCheckDiffSaving\":\"Tallennetaan laskelmia...\",\"taxcardKindOptions\":{\"auto\":\"Automaattinen verokortti\",\"defaultYearly\":\"Alkuperäinen verokortti\",\"replacement\":\"Muutosverokortti\",\"noTaxCard\":\"Ei verokorttia (60%)\",\"noWithholdingHousehold\":\"Ei ennakonpidätystä: Kotitalous alle 1500€\"},\"uploadTaxCardAlertDescr\":\"Tiedoston tallennus palvelimelle epäonnistui.\"},\"TaxCardIncomeLogComponent\":{\"addedForTaxCard\":\"Verokortille kirjattu\",\"salaryPeriod\":\"Palkkakausi\",\"mainTaxPercent\":\"Ennakonpidätys\",\"salaryAmount\":\"Palkkasumma\",\"calculation\":\"Laskelma\",\"removedCalc\":\"Poistettu laskelma\",\"newCalcPopover\":\"Tätä laskelmaa ei ole tallennettu verokortille.\",\"newCalcBtn\":\"Uusi!\",\"taxCardChangedPopover\":\"Verokortille tallennettu tieto, laskelman tieto on alla.\",\"taxCardChangedBtn\":\"Muutos: Verokortilla\",\"calcChangedPopover\":\"Laskelman tieto: Päivitä tämä verokorttiin klikkaamalla 'Tallenna laskelmat'.\",\"calcChangedBtn\":\"Muutos: Laskelmalla\",\"calcRemovedPopover\":\"Tämä laskelma on poistettu, mutta se on edelleen verokortilla.\",\"calcRemovedBtn\":\"Poistettu laskelma\",\"noCalcsTitle\":\"Ei maksettuja palkkoja\",\"noCalcsDescription\":\"Verokortille ei ole merkitty maksettuja palkkoja.\",\"totalTaxes\":\"Ennakonpidätys, yhteensä\",\"totalIncome\":\"Palkkasumma, yhteensä\",\"addRow\":\"Lisää rivi\"},\"TaxCardIncomeLogEditDialogComponent\":{\"title\":\"Muokkaa verokortille maksettua palkkaa\",\"incomeType\":\"Maksun tyyppi\",\"paymentDate\":\"Maksupäivä\",\"periodStart\":\"Palkkakauden alku\",\"periodEnd\":\"...loppu\",\"tax\":\"Ennakonpidätys\",\"taxableIncome\":\"Ennakonpidätyksen alainen tulo\",\"calcId\":\"Laskelman ID\",\"notes\":\"Huomautuksia\"},\"ExamplePersons\":{\"example17\":\"Laura Lukiolainen\",\"exampleDefault\":\"Erkki Esimerkki\",\"examplePensioner\":\"Tanja Eläkeläinen\"},\"GeneralCalcDetailLabels\":{\"abbrDays\":\"pv\",\"calculation\":\"Laskelma\",\"calculationSalary\":\"Palkkalaskelma\",\"description\":\"Kuvaus\",\"descriptionMilage\":\"Matkan kuvaus\",\"lessThan\":\"alle\",\"moreThan\":\"Yli\",\"optionalDetail\":\"Mahdollinen lisäselvitys\",\"pension\":\"Työeläkemaksu\",\"price\":\"Hinta\",\"salaryAmount\":\"Rahapalkka\",\"salaryTotalGross\":\"Bruttopalkka\",\"sum\":\"Summa\",\"total\":\"Yhteensä\",\"tyel\":\"TYEL\",\"unitCurrency\":\"Euroa\",\"unitCurrencyAlt\":\"euroa\",\"unitPrice\":\"A-hinta\",\"unitPriceDays\":\"Korvaus per päivä\",\"unitPriceMilage\":\"€ / km\",\"units\":\"Määrä\",\"unitsDays\":\"Päivien määrä\",\"unitsDaysAlt\":\"päivää\",\"unitsMilage\":\"Kilometriä\",\"yel\":\"YEL\"},\"GenericOnboardingComponent\":{\"modalTitle\":\"Tilin luonti\",\"roleTitle\":\"Mihin käytät Palkkaus.fi-palvelua?\",\"roleCompany\":\"Yrityksen tai yhdistyksen palkanmaksuun\",\"roleWorker\":\"Työntekijänä\",\"launchBtn\":\"Aloita tilin luonti\"},\"LoginButtonComponent\":{\"authenticating\":\"Tunnistus käynnissä...\",\"companyType1\":\"Yhdistyksen\",\"companyType2\":\"Yrityksen\",\"info\":\"tiedot\",\"searching\":\"Haetaan...\",\"userInfo\":\"Käyttäjän tiedot\",\"accountSettings\":\"Tilin tiedot\",\"authAndCerti\":\"Valtuutukset\",\"paymentChannel\":\"Maksukanava\"},\"PaymentCancelDialogComponent\":{\"paymentCancelled\":\"Maksu keskeytettiin\",\"paymentCancelledBank\":\"Palkanmaksu on keskeytetty verkkopankissa.\"},\"PaymentChannelSelectComponent\":{\"exportDefinition\":\"Viennin määrittely\",\"targetChannel\":\"Kohde / kanava\"},\"PaymentChannelSettingsComponent\":{\"title\":\"Käytössä olevat maksutavat\",\"settingsBtn\":\"Asetukset\",\"defaultChannel\":\"(oletus)\",\"addNewTitle\":\"Lisää uusi maksutapa\",\"addBtn\":\"Lisää\",\"notAvailableTitle\":\"Ei valittavissa\",\"test\":\"Testi\",\"notAvailableText\":\"Nämä maksutavat eivät ole käytössä nykyisessä ympäristössäsi tai kumppanitilitoimistollasi. Esim. Holvi, Finago Solo, Easor App ovat käytössä vain kyseisissä palveluissa.\"},\"PaymentConfirmDialogComponent\":{\"paymentConfirmed\":\"Palkka on maksettu\",\"paymentConfirmedInfo\":\"Palkanmaksu on nyt hoidettu. Työntekijän nettopalkka tilittyy työntekijän tilille 2-4 pankkipäivän kuluessa tai valitsemanasi palkkapäivänä. Palvelu tekee automaattisesti tarvittavat tulorekisteri-ilmoitukset ja tilittää maksut eteenpäin.\"},\"PaymentDialogComponent\":{\"afterPayment\":{\"html\":\"Kun olet maksanut kokonaissumman <strong>{{totalPayment}}</strong>, työntekijälle maksetaan nettopalkka ja hänelle lähetetään tieto palkkalaskelmasta. Voit myös itse tulostaa sen palvelusta. Palkkaus.fi tekee palkkaan liittyvät ilmoitukset ja maksut yo. tahoille.\"},\"alert\":{\"html\":\" <span class='text-danger'>Et voi vielä maksaa palkkalaskelmaa, koska työntekijän tiedot ovat puutteelliset.</span><span>Tarkempia tietoja alla.</span>\"},\"childCare\":\"Jatkuva lastenhoitaja ja siihen liittyvät tuet\",\"cleaning\":\"Siivous-ja kiinteistöalan työ\",\"construction\":\"Työtä rakennusalan työehtosopimuksen mukaan\",\"entrepreneur\":\"Yrittäjän oma palkka\",\"giveTaxCardType\":\"Ilmoita verokortin tyyppi!\",\"household\":{\"html\":\"Palveluun talletettuihin työnantajan laskelmiin on merkitty mukaan <strong>kotitalousvähennyksen</strong> osuus <strong>{{householdDeduction}}</strong>. Saat palvelusta yhteenvetoraportin kotitalousvähennykseen oikeuttavista palkanmaksuistasi verotusta varten.\"},\"info\":\"Olet maksamassa palkkaa Palkkaus.fi-palvelun kautta.\",\"instructions\":\"Tarkista alla olevat tiedot ja jatka pankkien maksupalveluun.\",\"checkPayment\":\"Tarkista alla olevat tiedot.\",\"label\":\"palkan maksaminen\",\"title\":\"Palkan maksaminen\",\"changeMethod\":\"Vaihda maksutapaa\",\"mll\":\"MLL:n lastenhoitajan palkka\",\"noEmail\":\"Ei sähköpostiosoitetta!\",\"noEmailInfo\":\"Työntekijälle ei voida lähettää ilmoitusta palkanmaksusta sähköpostitse.\",\"noIban\":\"Ei tilinumeroa\",\"noIbanInfo\":\"Syötä työntekijän tilinumero ennen maksamista!\",\"noSSNumber\":\"Ei henkilötunnusta!\",\"noTaxPercent\":\"Ei veroprosenttia!\",\"notDefined\":\"Työehtosopimusta tai suositusta ei ole määritetty\",\"noTel\":\"Ei puhelinnumeroa\",\"other\":\"Muu työ - ei työehtosopimusta\",\"santaClaus\":\"Joulupukin kotikäynti jouluaattona\",\"nullPaymentAlert\":\"Huom! Maksun yhteissumma on nolla. Maksu kuitataan välittömästi ja laskelmat siirtyvät maksettu-tilaan, kun siirryt maksamaan. Tulorekisteriraportointi tehdään Palkkaus.fi:n toimesta.\"},\"NewPaymentComponent\":{\"method\":{\"transfer\":\"Tilisiirtolomake\",\"einvoice\":\"Verkkolasku\",\"test\":\"Testimaksu\",\"paytrail\":\"Verkkopankkimaksu\"},\"creditTransfer\":{\"transferDescription\":\"Huomaa, että alla olevasta tekstikentästä voit myös kopioida viivakoodin useimpiin verkkopankkeihin, joten sinun ei tarvitse syöttää maksun tietoja.\",\"barcodeLabel\":\"Viivakoodi verkkopankkiin\",\"title\":\"Tilisiirto viitenumerolla\",\"description\":\"Voit maksaa palkan viitteellisellä tilisiirrolla Suomen Palkanlaskenta Oy:n asiakasvaratilille.\",\"instruction\":\"Luo viitenumeron ja pankkiyhteystiedot sisältävä tilisiirtolomake palkanmaksua varten painamalla \\\"Luo tilisiirtolomake\\\" -nappia.\",\"transferCreate\":\"Luo tilisiirtolomake\",\"mainContent\":\"Palkanmaksu Suomen Palkanlaskenta Oy:n asiakasvaratilille.\",\"paymentPerWorkerTable\":{\"total\":\"Yhteensä:\",\"palkkausFee\":\"josta Palkkaus.fi-palvelumaksu (sis. alv):\"},\"securePrint\":\"Tulosta ilman henkilötietoja\",\"calcsBreakdown\":\"Erittely laskelmittain\",\"worker\":\"Työntekijä\",\"totalGrossSalary\":\"Bruttopalkka\",\"payNow\":\"Maksetaan nyt\",\"paymentTable\":\"Maksutaulukko\"},\"selectPaymentMethod\":\"Valitse maksutapa\",\"paytrail\":{\"title\":\"Verkkopankkimaksu\",\"description\":\"Verkkopankkimaksamiseen liittyvän maksunvälityspalvelun toteuttaa Paytrail Oyj (2122839-7) yhteistyössä suomalaisten pankkien ja luottolaitosten kanssa.\",\"startPayment\":\"Aloita verkkomaksaminen\"},\"einvoice\":{\"title\":\"Tarkista vastaanottajan tiedot ja lähetä lasku\",\"description\":\"Lasku välitetään annettuun verkkolaskuosoitteeseen\",\"receiverLabel\":\"Verkkolaskuosoite\",\"intermediatorLabel\":\"Välittäjä\"},\"selection\":{\"title\":\"Valitse maksutapa\",\"description\":\"Jos haluat käyttää samaa verkkopankkimaksua kuin ennenkin, klikkaa\",\"description2\":\"Voit aina vaihtaa maksutapaa myöhemmin tämän sivun yläkulmassa olevasta nappulasta.\",\"link\":\"Verkkopankkimaksu (Paytrail)\\n\",\"paytrailTitle\":\"Verkkopankkimaksu (Paytrail).\\n\",\"paytrailDescription\":\"Verkkopankkimaksamiseen liittyvän maksunvälityspalvelun toteuttaa Paytrail Oyj (2122839-7) yhteistyössä suomalaisten pankkien ja luottolaitosten kanssa.\",\"creditTransferTitle\":\"Tilisiirto viitenumerolla\",\"creditTransferDescription\":\"Voit maksaa palkan viitteellisellä tilisiirrolla Suomen Palkanlaskenta Oy:n asiakasvaratilille.\",\"einvoiceTitle\":\"Verkkolasku\",\"einvoiceDescription\":\"Lähetä maksu verkkolaskuna.\"},\"siirto\":{\"title\":\"Siirto-maksu\",\"description\":\"Nordean Siirto –sovellus hyödyntää Automatian ylläpitämää Siirto-maksujärjestelmää, johon myös muut pankit ja maksupalvelutarjoajat kytkeytyvät. Maksu näkyy vastaanottajalla välittömästi pankista riippumatta. Siirto –sovelluksella voidaan maksaa vain suomalaisille Siirto-maksujärjestelmässä mukana oleville pankkitileille.\\r\\n\",\"instruction\":\"Syötä Siirto-sovellukseen liitetty puhelinnumerosi ja klikkaa Lähetä maksupyyntö. Käy hyväksymässä maksupyyntö Siirto-mobiilisovelluksessa.\",\"notice\":\"HUOM: Nettopalkan saapuminen työntekijän tilille kestää 1-2 pankkipäivää maksusta. Maksunvälitysaika riippuu käytettävästä pankista.\\n\",\"giveNumber\":\"Syötä maksajan puhelinnumero\",\"sendRequest\":\"Lähetä maksupyyntö\"}},\"OwnerSettingsComponent\":{\"tabs\":{\"editing\":\"Muokkaus\",\"beneficiaries\":\"Edunsaajat\",\"printable\":\"Tuloste\"},\"shareAmountTitle\":\"Osakkeiden lukumäärä\",\"ownerInfoTitle\":\"Omistajien tiedot\",\"noOwnersTitle\":\"Omistajat\",\"beneficiariesInfoTitle\":\"Edunsaajien tiedot\",\"noBeneficiariesTitle\":\"Edunsaajat\",\"addOwnerBtn\":\"Lisää omistaja\",\"addBeneficiaryBtn\":\"Lisää omistaja\",\"sharesBy\":\"Ilmoitan osakkuudet\",\"byPercent\":\"Prosentteina\",\"byAmount\":\"Kappalemäärinä\",\"shareAmount\":\"Osakkeiden lukumäärä\",\"ownerName\":\"Omistajan nimi\",\"ownerOfficialId\":\"Y-tunnus / Hetu\",\"ownerEmail\":\"Sähköpostiosoite\",\"ownerAddress\":\"Osoite (myös maa)\",\"ownerShareAmount\":\"Osakkeita (kpl)\",\"ownerSharePercent\":\"Osakkeita (%)\",\"totalShares\":\"Yhteensä\",\"beneficiaryName\":\"Nimi\",\"beneficiaryOfficialId\":\"Hetu\",\"beneficiaryNationality\":\"Kansalaisuus\",\"shareHoldersTitle\":\"Osakasluettelo\",\"shareHolder\":\"Osakas\",\"shares\":\"Osakkeet\",\"sharesPercent\":\"Omistusosuus\"},\"ProductInfoHeadersComponent\":{\"accountingLabel\":\"Palkkaus.fi lähettää kirjanpitäjällesi automaattisesti kirjanpitoraportin kuukauden alussa.\",\"baseLabel\":\"Palkkaus.fi-palvelun avulla hoidat kaiken palkanmaksuun liittyvän yhdellä verkkopankkimaksulla. Helposti ja nopeasti!\",\"baseTail\":\"Per palkanmaksu.\",\"baseTail2\":\"Palvelumaksu on 1% maksetusta palkasta mutta enintään 10€\",\"healthcareCost\":\"Mitä työterveyshuolto maksaa?\",\"healthcareLabel\":\"Laki vaatii, että työnantajan tulee järjestää työterveyshuolto työntekijöillensä. Pääkaupunkiseudulla, Tampereen ja Oulun alueilla saat työterveyshuollon kk-maksulla kumppaniltamme Heltti.fi:ltä.\",\"healthcareTail\":\"Per työntekijä kuukaudessa\",\"insuranceCost\":\"Mitä työtapaturmavakuutus maksaa?\",\"insuranceLabel\":\"Tarvitset lakisääteisen työtapaturmavakuutuksen, kun maksat työntekijöille palkkoja yhteensä vähintään 1500€ vuodessa. Vakuutus tulee ottaa ennen työn aloittamista.\",\"insuranceTail\":\"Työtapaturmavakuutuksen suuruus työntekijän palkasta\",\"serviceCost\":\"Mitä palvelu maksaa?\",\"taxLabel\":{\"html\":\"Palkkaus.fi-palvelu hoitaa automaattisesti verovirastoon tarvittavat lakisääteiset ilmoitukset ja maksut palvelussa maksettujen palkkojen perusteella kuukausittain. Palvelusta ei lähde nollailmoituksia kuukausilta, joilta ei ole palkanmaksua. Jos olet työnantajasuorituksissa neljännesvuosi-ilmoittaja, ole yhteydessä asiakaspalveluun <a href=\\\"mailto:aspa@palkkaus.fi\\\">aspa@palkkaus.fi</a>. <br/><small>Huomaathan, että ilmoituskausi voi olla eri arvonlisäveroissa ja työnantajasuorituksissa. Jos et ole ilmoittautunut työnantajarekisteriin, olet työnantajasuorituksissa satunnaisilmoittaja. Tällöin ilmoitukset voivat mennä palvelussa kuukausittain automaattisesti.</small>\"},\"taxTail\":\"Ei erillistä veloitusta.\",\"taxTail2\":\"Osa Palkkaus.fi-palvelumaksua\",\"tvrCost\":\"Mitä TVR maksaa?\",\"tvrLabel\":\"Palkkaus.fi-palvelu hoitaa automaattisesti työttömyysvakuutusrahastoon tarvittavat lakisääteiset ilmoitukset ja maksut palvelussa maksetuista palkoista.\",\"tvrLabelTVR\":\"Palkkaus.fi tekee automaattisesti palkkailmoituksen palvelussa maksetuista palkoista Työttömyysvakuutusrahastolle, mutta ei tilitä TVR-maksuja. TVR lähettää ennakko- ja tasauslaskut erikseen yrityksellesi.\",\"tvrTail\":\"TVR-maksun suuruus työntekijän palkasta\",\"tyelCost\":\"Mitä TyEL maksaa\",\"tyelLabel\":\"Työnantajan pitää hoitaa työeläke (TyEL) työntekijöilleen. Jos palkkaat vain satunnaisesti, niin et tarvitse työnantajan TyEL-sopimusta. Satunnaiselle työnantajalle palvelu hoitaa TyEL-ilmoitukset ja -maksut automaattisesti (ns. tilapäinen työnantaja).\",\"tyelTail\":\"TyEL-maksu palkasta\",\"yelCost\":\"Mitä YEL maksaa?\",\"yelLabel\":\"Tarvitset YEL-vakuutuksen, kun toimit yrittäjänä yrityksessäsi. Palkkaus.fi:n kautta otat YEL-vakuutuksen helposti ja hoidat myös työntekijöidesi eläkkeet (TyEL) osana palkanmaksuja.\",\"yelTail\":\"YEL-maksu yrittäjän työtulosta\"},\"InsuranceSettingsComponent\":{\"pension\":{\"title\":\"Työeläke\",\"titleLong\":\"Työeläkesopimus\",\"description\":\"Lisää TyEL-sopimuksen tiedot alle. Työeläkemaksu ei tility osana palkanmaksua palvelulle. Palvelu tekee ilmoituksen tulorekisteriin ja työeläkeyhtiösi lähettää laskun työeläkemaksuista. Jos sinulla ei ole sopimusta, valitse 'Ei yhtiötä', jolloin ilmoitukset menevät Varmaan.\",\"tyelQuestion\":\"Onko sinulla voimassa oleva TyEL-sopimus?\",\"alertHeader\":\"Työeläke\",\"alertMessage\":\"Tarkista työeläkeyhtiö ja sopimusnumero.\",\"varmaLegend\":\"Tee työeläkesopimus Varman kanssa\",\"varmaDescription\":\"Jos sinulla on vakituisia työntekijöitä ja palkanmaksu on jatkuvaa, sinun tulee tehdä sopimus. Työnantajista 3/4 saa TyEL-vakuutuksen edullisimmin Varmasta. Saat vakuutuksen tästä heti voimaan.\",\"varmaCta\":\"Tee työeläkesopimus\",\"temporaryLegend\":\"Oletko yrittäjä tai palkkaat vain tilapäisesti?\",\"temporaryDescription\":{\"html\":\"Et tarvitse työeläkesopimusta, jos olet yrittäjä (sinulla on YEL-sopimus) ja sinulla ei ole vakituisia työntekijöitä eikä palkanmaksu ole jatkuvaa. Tällöin eläkkeet hoidetaan tilapäisenä ilmoituksena Varmaan.<br/>Jos olet yrittäjä ja maksat vain YEL-palkkaa, merkitse työntekijän tiedoissa, että kyse on yrittäjän palkasta, niin työeläkemaksuja ei makseta osana palkanmaksua. YEL-maksut maksetaan suoraan vakuutusyhtiöön. YEL-sopimusnumeroa ei tarvitse ilmoittaa palvelussa. Voit myös tilata Varman YEL-vakuutuksen palvelun kautta.\"},\"temporaryVarma\":\"Hoidetaan tilapäisenä Varmaan\",\"selfhandle\":\"Hoidan TyEL-maksut itse\",\"selfhandleDescription\":\"Työeläkemaksu ei tility osana palkanmaksua palvelulle. Palvelu tekee ilmoituksen tulorekisteriin ja työeläkeyhtiösi lähettää laskun työeläkemaksuista.\",\"currentContractLegend\":\"Anna voimassa olevan sopimuksen tiedot\",\"currentContractCompany\":\"Valitse yhtiö\",\"currentContractNumber\":\"TyEl-sopimusnumero\",\"errors\":{\"sxyPensionContractNumber\":{\"html\":\"Työeläkesopimuksen numero on 11 merkkiä pitkä ja se on muotoa:\\n <span class=\\\"emphasis\\\"><strong>nn-nnnnnnnT</strong> (Varma, Ilmarinen, Elo tai Veritas) tai <br><strong>nnnnn-nnnnT</strong> (Eläkekassa Verso, Apteekkien Eläkekassa tai Valion Eläkekassa)</span> jossa n on numero ja T on tarkistusmerkki (numero tai iso kirjain).<br>Viivan jälkeen voi lisätä nollia, jos loppuosa on lyhyempi.\"},\"sxyTemporaryPensionContractNumber\":{\"html\":\"Syötit tilapäisen sopimuksen numeron. Jos sinulla ei ole työ&shy;eläke&shy;sopimusta, voit maksaa työ&shy;eläke&shy;maksut tilapäisenä työnantajana valitsemalla asetuksissa, että sinulla ei ole sopimusta. Työ&shy;eläke&shy;maksut tilitetään tällöin Varmaan.\"}},\"moveContractLegend\":\"Tai siirrä olemassa oleva sopimus Varmaan\",\"moveContractDescription\":\"Työnantajista 3/4 saa TyEL-vakuutuksen edullisimmin Varmasta. TyELin voi siirtää Varmaan, jos nykyinen sopimus on ollut voimassa vähintään vuoden. Siirron jälkeen TyEL-maksut ja -ilmoitukset välittyvät automaattisesti Varmaan.\",\"moveContractCta\":\"Siirrä työeläkesopimus\"},\"yelPension\":{\"title\":\"YEL-vakuutus\",\"description\":\"Jos yrityksessä on YEL-yrittäjiä, pitää jokaisella heistä olla oma henkilökohtainen YEL-vakuutus. Yrittäjä tarvitsee yhden YEL-vakuutuksen, jolle maksetaan yrittäjäpalkoista koituvat eläkemaksut. Tästä voi ottaa yrittäjälle uuden YEL-vakuutuksen, jos sellaista ei vielä ole. Voit myös siirtää olemassa olevan vakuutuksen Varmaan.\",\"takeInsuranceBtn\":\"Ota YEL-vakuutus\"},\"insurance\":{\"title\":\"Tapaturmavakuutus\",\"description\":\"Lisää työtapaturmavakuutuksen tiedot, niin ne näkyvät palkkalaskelmalla.\",\"insuranceQuestion\":\"Onko yritykselläsi voimassa oleva työtapaturmavakuutus? \",\"insuranceComment\":\"Työtapaturmavakuutusyhtiön yhtiötunnus ja työtapaturma- ja ammattitautivakuutuksen vakuutusnumero pitää merkitä tulorekisterin palkkatietoilmoitukseen, jos suorituksen maksaja on vakuuttanut työntekijöitään useammalla kuin yhdellä työtapaturma- ja ammattitautivakuutuksella. Muissa tilanteissa yhtiötunnus ja vakuutusnumero ovat vapaaehtoisesti annettavia tietoja.\",\"alertHeader\":\"Tapaturmavakuutus\",\"alertMessage\":\"Tarkista vakuutusyhtiö ja vakuutusnumero.\",\"currentContractLegend\":\"Anna voimassa olevan vakuutuksen tiedot\",\"currentContractCompany\":\"Valitse yhtiö\",\"warning\":\"Huomio! Työtapaturmavakuutus on lain mukaan pakollinen, jos maksat työntekijöiden palkkoja yhteensä vähintään 1500€ vuodessa.\",\"moveContractDescription\":\"Vakuutuksen voi siirtää, jos nykyinen vakuutus on ollut voimassa vähintään kalenterivuoden.\",\"currentContractNumber\":\"Vakuutusnumero\",\"moveToLocalTapiolaLegend\":\"Tai siirrä vakuutus LähiTapiolaan\",\"moveToLocalTapiolaBtn\":\"Siirrä tapaturmavakuutus\",\"takeFromLocalTapiolaLegend\":\"Ota vakuutus LähiTapiolasta\",\"takeFromLocalTapiolaBtn\":\"Ota tapaturmavakuutus\"}},\"PaymentSettingsComponent\":{\"accounting\":{\"title\":\"Kirjanpitoraportit\",\"description\":\"Täytä kirjanpitäjäsi yhteystiedot. Lähetämme kuukausiraportin kirjanpitäjällesi sähköpostitse. Emme luovuta palkanmaksun tietoja muille ulkopuolisille, kuin tässä ilmoitetulle henkilölle.\",\"accountantName\":\"Kirjanpitäjän nimi\",\"accountantEmail\":\"Sähköposti\",\"accountantTel\":\"Puhelinnumero\"},\"einvoice\":{\"title\":\"Verkkolasku\",\"description\":\"Täytä verkkolaskutuksesi tiedot, jos haluat käyttää verkkolaskua palkkojen maksamiseen.\",\"intermediatorName\":\"Välittäjä\",\"invoiceAddress\":\"Verkkolaskuosoite\"},\"tax\":{\"title\":\"Tulorekisteri\",\"intro\":\"Palkkaus.fi ilmoittaa palkkatiedot tulorekisteriin jokaisesta palkanmaksusta. Lisäksi Palkkaus.fi lähettää tulorekisteriin pakollisen työnantajan erillisilmoituksen kuukausittain.\\r\\nPalkkaus.fi lähettää erillisilmoituksen myös koskien kalenterikuukausia, jolloin palkkaa ei ole maksettu, jos työnantaja kuuluu Verohallinnon työnantajarekisteriin.\\r\\nJos käytät Palkkaus.fi-palvelun lisäksi toista palkanmaksupalvelua tai -ohjelmistoa, voit poistaa erillisilmoituksen lähetyksen Palkkaus.fi-palvelun kautta ja antaa työnantajan erillisilmoituksen itse tulorekisteriin.\\r\\n\",\"selectionLabel\":\"Kuukausittainen ilmoittaminen\",\"selectionOption\":{\"default\":\"Palkkaus.fi lähettää kaikki ilmoitukset. Ei palkanmaksua -ilmoitus lähetetään 12 kuukauden ajan viimeisimmästä palkanmaksusta.\",\"noZeroSalaryReport\":\"Palkkaus.fi ei lähetä Nollailmoitusta\",\"noMonthlyReport\":\"Palkkaus.fi ei lähetä työnantajan erillisilmoitusta\",\"always\":\"Palkkaus.fi lähettää työnantajan erillisilmoituksen siinäkin tapauksessa, jossa työnantaja ei ole maksanut palkkoja viimeisen 12 kuukauden aikana\"}},\"unemployment\":{\"title\":\"Työttömyysvakuutusmaksut\",\"intro\":\"Palkkaus.fi ilmoittaa palkkatiedot tulorekisteriin, josta Työllisyysrahasto hakee ajantasaiset tiedot.\\nTyöllisyysrahasto lähettää laskun työttömyysvakuutusmaksuista yrityksellesi.\"},\"sepa\":{\"title\":\"SEPA-maksatustunnus ja tilinumero, miltä erät maksetaan\",\"intro\":\"Jos käytät laskujen luontitoimintoa ja hoidat erien maksun itse, syötä tilinumero, miltä erät maksetaan. Tilinumeroa käyteään SEPA- ja viitesiirtoaineiston luonnissa.\",\"iban\":\"Tilinumero (IBAN)\",\"sepaId\":\"SEPA-maksatustunnus\"},\"taxSelfHandling\":{\"title\":\"Ennakonpidätyksen maksaminen\",\"intro\":\"Palkkaus.fi toimii oletusarvoisesti niin, että jokainen palkka maksetaan kaikkine sivukuluineen Palkkaus.fi-palvelun asiakasvaratilille.\",\"intro2\":\"Täältä hoidamme maksun eräpäivänä verottajalle. Vaihtoehtoisesti voit maksaa maksun itse suoraan verottajalle eräpäivänä.\",\"taxSelfHandlingTrue\":\"Hoidan ennakonpidätyksen maksun itse\"},\"workerSelfHandling\":{\"title\":\"Nettopalkan maksaminen\",\"intro\":\"Palkkaus.fi toimii oletusarvoisesti niin, että jokainen palkka maksetaan kaikkine sivukuluineen Palkkaus.fi-palvelun asiakasvaratilille.\",\"intro2\":\"Heti kun raha on saapunut asiakasvaratilillemme, maksamme nettopalkan työntekijälle. Vaihtoehtoisesti voit maksaa nettopalkan itse työntekijälle.\",\"workerSelfHandlingTrue\":\"Hoidan nettopalkan maksun itse\"},\"salarySlipDeliveryMethods\":{\"payslip\":{\"title\":\"Palkkalaskelman toimitustapa työntekijälle\",\"description\":\"Palkkalaskelma muodostuu oletuksena Palkkaus.fi-ohjelmaan, josta työntekijä voi hakea laskelman halutessaan. Tämän lisäksi voit valita toimitetaanko palkkalaskelma myös työntekijän verkkopankkiin verkkopalkkalaskelmana. Verkkopalkan toimittamisesta peritään voimassa olevan hinnaston mukainen palvelumaksu. Verkkopalkkaoperaattorina toimii Apix.\"},\"omapalkka\":{\"title\":\"Omapalkka\",\"label\":\"Jo maksetut laskelmat\",\"sendToOmapalkkaButtonText\":\"Lähetä työntekijöiden maksetut laskelmat Omapalkkaan\"}}},\"ProSettingsComponent\":{\"tabs\":{\"defaultRows\":\"Oletusrivit\",\"messagingAndLayout\":\"Viestintä ja ulkoasu\",\"paymentChannels\":\"Maksaminen\",\"dimensions\":\"Laskentakohteet\",\"accounting\":\"Kirjanpito\",\"other\":\"Muut\",\"read-only\":\"Palvelumalli\",\"holidays\":\"Lomalaskenta\",\"paystats\":\"Ansiolaskenta\",\"irdelivery\":\"Tulorekisterin varmenne\"},\"fileUpload\":{\"previewLabel\":\"Ladattava kuva\",\"uploadMethod\":\"Lataustapa\",\"manualUpload\":\"Syötä käsin (SVG tai data URI)\",\"uploadFromDevice\":\"Lataa kuva koneelta\"},\"activeServices\":\"Aktivoidut palvelut\",\"pricing\":\"Hinnoittelu\",\"webApp\":\"Asiakassivusto\",\"branding\":\"Brändi\",\"messaging\":\"Viestintä\",\"reporting\":\"Tulosteiden ulkoasu\",\"paymentChannels\":\"Maksukanavat\",\"accounting\":\"Kirjanpito\",\"usecases\":\"Räätälöinnit\",\"selfHandling\":\"Asvara\",\"invoices\":\"Laskut\",\"incomesRegister\":\"Tulorekisteri\",\"insurances\":\"Vakuutukset\",\"insurance\":\"Tapaturmavakuutus\",\"serviceModelBadge\":\"Palvelumalli\",\"customMessages\":\"Räätälöidyt viestintäasetukset palvelumallissa\",\"customReporting\":\"Räätälöidyt tulosteet palvelumallissa\",\"customPaymentChannels\":\"Räätälöidyt maksukanavat palvelumallissa\",\"customAccounting\":\"Räätälöidyt kirjanpitoasetukset palvelumallissa\",\"customCostAccounting\":\"Räätälöidyt laskentakohteet palvelumallissa\",\"customUsecases\":\"Räätälöinnit käytössä palvelumallissa\",\"customForms\":\"Räätälöidyt työnkulut palvelumallissa\",\"customHoliday\":\"Räätälöity lomalaskenta palvelumallissa\",\"customPayStats\":\"Räätälöidyt ansiolaskennat palvelumallissa\",\"customCalc\":\"Räätälöity Tulorekisterivarmenteen käyttö palvelumallissa\",\"overwriteServiceModel\":\"Ohita palvelumalli\",\"defaultTarget\":\"Oletuskohde\",\"defaultChannel\":\"Oletuskanava\",\"layoutTemplateId\":\"Ulkoasun tunniste\",\"templateIdPalkkaus\":\"Palkkaus.fi\",\"templateIdNoLogo\":\"Ilman logoa\",\"templateIdLogo\":\"Yrityksen oma logo\",\"messagesPayment\":\"Viestit palkanmaksusta työntekijälle\",\"messagesAccountant\":\"Viestit tilitoimistolle\",\"customReportLogo\":\"Logo (SVG tai data URI)\",\"accountingTarget\":\"Kirjanpitokohde\",\"workerSalarySlipDeliveryMethods\":\"Palkkalaskelman toimitustapa työntekijälle\",\"unemploymentInsurance\":\"Työttömyysvakuutusmaksut\"},\"ProSettingsListComponent\":{\"noPensionCompany\":\"Yhtiötä ei ilmoitettu\"},\"ArrayUsecase\":{\"table\":{\"usecaseLabel\":\"Räätälöinnit\"}},\"SalaryReportsComponent\":{\"calculations\":\"Palkkalaskelmat\",\"noCalculations\":\"Ei palkkalaskelmia\",\"payment\":\"Maksu\",\"grossSalary\":\"Brutto\",\"notSelected\":\"(Työntekijää ei ole valittu)\"},\"SmsMessageComponent\":{\"sendSms\":\"Lähetä SMS\"},\"TaxcardsListComponent\":{\"worker\":\"Työntekijä\",\"year\":\"Vuosi\",\"valid\":\"Voimassa\",\"validTill\":\"..loppu\",\"paid\":\"Maksettu\",\"incomeLimit\":\"Tuloraja\",\"personalId\":\"Henkilötunnus\",\"unknown\":\"tuntematon\",\"taxPercent2\":\"Lisäprosentti\",\"taxcard\":\"Verokortti\"},\"UserInfoComponent\":{\"panelTitle\":\"Käyttäjätunnuksen tiedot\",\"authType\":\"Tunnistus\",\"email\":\"Sähköposti\",\"description\":{\"html\":\"Tunnuksen tietoja ei voi vielä muuttaa käyttöliittymästä. Jos haluat vaihtaa toiseen tunnukseen ota yhteyttä asiakaspalveluumme <a href='mailto:aspa@palkkaus.fi'>aspa@palkkaus.fi</a> tai 09 425 50603.\"},\"name\":\"Nimi\",\"palkkausAccount\":\"Palkkaus.fi-tili\",\"personTitle\":\"Allekirjoittanut henkilö\",\"userName\":\"Tunnus\",\"userNameTitle\":\"Käyttäjätunnus\"},\"WelcomeComponent\":{\"taxcard\":\"Verokortti\",\"showAnon\":{\"main\":{\"html\":\" <p><strong>Kirjaudu palveluun!</strong> \\nEt ole vielä kirjautunut palveluun: Voit kokeilla palkkalaskuria, mutta monet toiminnallisuudet, esim. työntekijän luominen, eivät toimi.</p>\"}},\"showAddWorker\":{\"main\":{\"cta\":\"Lisää uusi työntekijä\",\"html\":\"Aloita palkanmaksu lisäämällä työntekijä ja verokorttitiedot.<br /> Työntekijän\\r\\n                lisäämisen jälkeen voit laskea ja maksaa palkan.\"},\"tryPayroll\":{\"cta\":\"Palkkalistat\"}},\"showAddCalculation\":{\"main\":{\"html\":\"Aloita palkanmaksu valitsemalla työntekijä <strong>tai</strong> luo uusi työntekijä\"},\"selectWorkerPlaceholder\":\"Valitse työntekijä...\",\"selectWorker\":\"Valitse työntekijä\"},\"showSettings\":{\"lead\":{\"html\":\"<strong>HUOM!</strong> Nämä tiedot pitää täyttää ennen palkanmaksua:\"},\"main\":\"Työeläkevakuutus, tapaturmavakuutus\",\"pension\":{\"html\":\"<strong>Työeläke:</strong>  <span class=\\\"text-muted\\\">Lisää nykyisen työeläkesopimuksesi tiedot tai ota uusi sopimus Varmasta.</span>\",\"success\":\"Työeläke OK\",\"pending\":\"Uusi sopimus käsittelyssä (voimassa).\",\"successCompany\":\"Yhtiö\",\"successContractNumber\":\"Sopimusnumero\"},\"insurance\":{\"html\":\"<strong>Tapaturmavakuutus:</strong>  <span class=\\\"text-muted\\\">Lisää nykyisen tapaturmavakuutuksesi tiedot tai ota uusi sopimus Ifistä. </span>\",\"success\":\"Tapaturmavakuutus OK\",\"pending\":\"Uusi sopimus käsittelyssä.\",\"successCompany\":\"Yhtiö\",\"successContractNumber\":\"Sopimusnumero\"},\"settings\":{\"cta\":\"Lisää tiedot\"}},\"showSign\":{\"lead\":\"Allekirjoita valtakirja\",\"main\":{\"html\":\"<span class=\\\"text-muted\\\">\\nMaksaaksesi palkan, sinun tulee valtuuttaa Palkkaus.fi hoitamaan palkanmaksuun liittyviä velvollisuuksia puolestasi. Voit allekirjoittaa valtakirjan helposti pankkitunnuksillasi. </span>\",\"cta\":\"Lisää allekirjoitus\"}},\"showTryPayroll\":{\"main\":\"Palkkalistan avulla voi maksaa useita palkkoja samalla kertaa.\",\"cta\":\"Kokeile palkkalistaa!\"},\"showPaymentStarted\":{\"holvi\":{\"html\":\"<p><strong>Huom!</strong> Sinulla on yksi tai useampi laskelma Maksu aloitettu -tilassa. Käythän maksamassa nettolaskun Holvissa, jotta tulorekisteri-ilmoitukset lähtevät ajoissa. Huomaathan, että palkka kirjataan laskelmalla olevalle alkuperäiselle palkkapäivälle. Voit myös perua laskun, jolloin laskelma palautuu luonnokseksi.</p>\"},\"palkkausManual\":{\"html\":\"<p><strong>Huom!</strong> Sinulla on yksi tai useampi laskelma Maksu aloitettu -tilassa. Käythän kuittaamassa nettolaskun maksetuksi Maksuaineiston lähetys -näkymässä, jotta tulorekisteri-ilmoitukset lähtevät ajoissa. Huomaathan, että palkka kirjataan laskelmalla olevalle alkuperäiselle palkkapäivälle. Voit myös perua laskun, jolloin laskelma palautuu luonnokseksi.</p>\"},\"talenomOnline\":{\"html\":\"<p><strong>Huom!</strong> Sinulla on yksi tai useampi laskelma Maksu aloitettu -tilassa. Käythän maksamassa nettolaskun Easor App -sovelluksessa, jotta tulorekisteri-ilmoitukset lähtevät ajoissa. Huomaathan, että palkka kirjataan laskelmalla olevalle alkuperäiselle palkkapäivälle. Voit myös perua laskun, jolloin laskelma palautuu luonnokseksi.</p>\"}},\"welcome\":\"Tervetuloa!\",\"intro\":\"Näin maksat ensimmäisen palkan\",\"checkTyel\":\"Tarkista TyEL\",\"addWorker\":\"Lisää työntekijä\",\"createCalculation\":\"Luo palkkalaskelma\",\"allWithOne\":\"Maksa kaikki yhdellä verkkopankkimaksulla\",\"feedback\":{\"title\":{\"html\":\"Onko sinulla kysyttävää palvelusta? <small>Jätä viesti asiakaspalveluun. </small>\"},\"emailTitle\":\"Palaute Y-tunnusten työpöydältä\",\"alert\":\"Kiitos viestistäsi! Palkkaus.fi:n asiakaspalvelu on sinuun yhteydessä.\"},\"loadWorkerDataPanelTitle\":\"Lataamasi verokortti\",\"loadWorkerDataPanelTitle2\":\"Lähetä verokortti työnantajallesi\",\"autoTaxcard\":{\"lead\":{\"html\":\"<b>Ota käyttöön automaattiset verokortit</b> <br>Päivitä työsuhteisiin uusi verokortti suoraan verottajan rajapinnasta.\"}}},\"WorkerCalculationsComponent\":{\"date\":\"Päivämäärä\",\"finalCost\":\"Kustannus\",\"salary\":\"Palkka\",\"status\":\"Tila\"},\"WorkerWizardComponent\":{\"workerType\":{\"title\":\"Mitä korvausta maksetaan\",\"entrepreneurTmiWarning\":\"Yksityinen elinkeinonharjoittaja eli toiminimi ei voi maksaa itselleen palkkaa. Palkanmaksu hoidetaan yksityisnostoina. Kirjanpitäjäsi voi neuvoa sinua miten toimia.\\nVoit maksaa työsuhteessa oleville työntekijöille palkkaa ihan kuten muissakin yritysmuodoissa. Huomaa kuitenkin, että puolisollesi et voi maksaa palkkaa toiminimiyrityksestä. Myöskään alaikäistä lastaan ei voi palkata työntekijäksi.\",\"entrepreneurRyWarning\":\"Palkkaus.fi -tilisi mukainen yritysmuoto on yhdistys / yksityishenkilö, etkä voi maksaa yrittäjälle palkkaa näissä yritysmuodoissa.\",\"entrepreneurPrivateWarning\":\"Palkkaus.fi -tilisi mukainen yritysmuoto on yhdistys / yksityishenkilö, etkä voi maksaa yrittäjälle palkkaa näissä yritysmuodoissa.\",\"compensationCta\":\"Lisätietoa\",\"compensationLink\":\"https://www.palkkaus.fi/abc/palkkaa-vai-tyokorvausta/\",\"compensationDescription\":\"Jossain tapauksissa työstä voidaan maksaa palkan sijaan työkorvausta. Työkorvausta voidaan maksaa silloin, jos työ ostetaan joltain itsenäiseltä ammattilaiselta, johon ei voi katsoa syntyvän varsinaista työsuhdetta.\"},\"employment\":{\"isFixedTerm\":\"Määräaikainen työsuhde\",\"isTerminated\":\"Työsuhde päättynyt\",\"employmentRegCode\":\"Palvelussuhteen rekisteröinti\",\"pension\":{\"title\":\"Sovellettava eläketurva\",\"compensation\":\"Työkorvaus\",\"tyel\":\"TyEL\",\"yel\":\"YEL\",\"myel\":\"MyEL\",\"athlete\":\"Urheilijan eläke\",\"missingPension\":\"Työeläkevakuutuksen tiedot puuttuvat. Lisää tiedot Vakuutukset-osiossa ennen ensimmäistä palkanmaksua tai ota uusi TyEL-vakuutus.\",\"takeInsuranceBtn\":\"Ota TyEL-vakuutus\"},\"pensionRule\":\"Eläkemaksun laskentasääntö\",\"group\":{\"title\":\"Työsuhteen\",\"startDate\":\"Alku pvm\",\"endDate\":\"Loppu pvm\",\"legend\":\"Työsuhteen alku ja loppu\"},\"title\":\"Työsuhteen tiedot\",\"work\":{\"occupationCode\":\"Ammattiluokka vakuutukseen\",\"occupationCode2\":\"Keva:n ammattiluokka\",\"description\":\"Kuvaus palkkalaskelmaan\",\"salaryDefaults\":{\"title\":\"Oletusrivit palkkalaskelmaa varten\",\"rowType\":\"Tyyppi\",\"count\":\"Määrä\",\"price\":\"Hinta\",\"addRow\":\"Lisää oletusrivi laskelmaan\",\"info\":{\"md\":\"Voit määritellä oletusrivit työntekijän palkkalaskelmalle.\\n\\nNämä rivit tulevat valmiiksi palkkalaskuriin, kun lasket tälle työntekijälle palkkaa.\\n\\nEsimerkiksi kuukausipalkka tai luontoisedut kannattaa merkitä.\"}}},\"info\":{\"cbaCode\":\"Työehtosopimus\",\"cbaCodeInfo\":\"Työehtosopimustieto tiedoksi palkanlaskentaa varten. Työehtosopimusta ei ilmoiteta tulorekisteriin eikä valittu työehtosopimus vaikuta palkkalaskurin toimintaan.\"}},\"finishButtons\":{\"newWorker\":\"Uusi työntekijä\",\"ready\":\"Valmis\"},\"step1\":{\"title\":\"Nimi ja henkilötunnus\"},\"step2\":{\"title\":\"Työntekijän tiedot\"},\"step3\":{\"title\":\"Työsuhde\"},\"step4\":{\"title\":\"Oletuspalkkarivit\"},\"step5\":{\"title\":\"Verokortti\"},\"wizard\":{\"step\":\"Vaihe\",\"title\":\"Uusi työntekijä\"}},\"WorkerOnboardingComponent\":{\"title\":\"Uusi Palkkaus.fi-tunnus työntekijälle\",\"step\":\"Vaihe\",\"stepUserInfo\":{\"title\":\"Käyttäjän tiedot\",\"heading\":\"Tervetuloa, työntekijä!\",\"registerText\":\"Olet rekisteröitymässä Palkkaus.fi-palveluun työntekijänä. Työntekijälle palvelu on aina ilmainen. Tarvitset kuitenkin matkapuhelimen ja pankkitunnukset tunnistautumista varten. Aloita täyttämällä omat henkilötietosi.\",\"firstName\":\"Etunimi\",\"lastName\":\"Sukunimi\",\"email\":\"Sähköposti\",\"language\":\"Kieli\",\"phoneNumber\":\"Puhelinnumero\",\"confirmNumber\":\"Vahvistamme antamasi numeron\"},\"stepPhoneNumberVerify\":{\"title\":\"Puhelinnumeron vahvistaminen\",\"heading\":\"Puhelinnumeron vahvistaminen\",\"intro\":\"Olemme lähettäneet sinulle SMS-viestin varmistaaksemme numerosi. Syötä viestissä oleva vahvistuskoodi tähän.\",\"confirmationCode\":\"Vahvistuskoodi\",\"testEnvironment\":{\"html\":\"<b>Testiympäristö</b><br/> Vahvistuskoodia ei tarkisteta, jatka painamalla seuraava.\"}},\"stepContract\":{\"stepTitle\":\"Sähköinen tunnistautuminen\",\"heading\":\"Tilisopimus ja valtuutus\",\"intro\":\" Valtuuta pankkitunnuksillasi Palkkaus.fi-palvelu hoitamaan palkanmaksuun liittyviä asioita puolestasi. Tarvitsemme valtakirjan, jotta voimme antaa esim. verokorttisi työnantajalle ja hoitaa asioita viranomaisten suuntaan puolestasi. Valtuutus pitää tehdä vain kerran.\",\"title\":\"Käyttäjätilisi on melkein valmis!\",\"signatureText\":\"Jotta voimme hoitaa palkkalaskelmia ja palkanmaksuun liittyviä velvoitteita, tarvitsemme siihen valtakirjan. Se pitää allekirjoittaa vain kerran.\",\"signatureText2\":\"Anna henkilötunnuksesi, valitse pankkisi ja paina 'Allekirjoita'-nappia. Siirryt allekirjoittamaan valtakirjan tietoturvallisesti verkkopankkitunnuksillasi. Tämän jälkeen palaat Palkkaus.fi-palveluun ja näet laskelmasi.\",\"personalId\":\"Henkilötunnuksesi\",\"personalIdExample\":\"PPKKVV-NNNX\",\"termsText\":{\"html\":\"Hyväksyn <a href=\\\"https://www.palkkaus.fi/kayttoehdot/\\\" target=\\\"_blank\\\">käyttöehdot</a>,\"},\"termsText2\":\"Valtakirjan\",\"termsText3\":{\"html\":\"ja <a href=\\\"https://www.palkkaus.fi/sopimus-henkilotietojen-kasittelysta/\\\" target=\\\"_blank\\\">sopimuksen henkilötietojen käsittelystä</a>.\"},\"chooseBank\":\"Valitse verkkopankkisi\",\"privacyPolicy\":{\"html\":\"<a href=\\\"https://www.palkkaus.fi/tietosuoja/\\\" target=\\\"_blank\\\">Lue palvelun tietosuojasta</a>\"},\"savePdfText\":\"Tallennamme tiedon sähköisestä tunnistautumisestasi \",\"savePdfLink\":\" PDF-tiedostona\",\"savePdfText2\":\" palveluun.\"},\"signBtn\":\"Allekirjoita\"},\"WorkerDetailsCalc\":{\"payrollDetails\":\"Palkanlaskennan yksityiskohdat\",\"wageBasis\":\"Peruste\",\"monthlyHours\":\"Tuntien määrä / kk\",\"integrations\":\"Integraatiot\",\"ssNumber\":\"Henkilönumero\",\"irIncomeEarnerTypes\":\"Tulonsaajatyyppi\"},\"CompanyPro\":{\"tabs\":{\"editNew\":\"Rivit\",\"charts\":\"Yleiskuva\",\"calcReports\":\"Raportit\",\"ir\":\"Tulorekisteri\",\"worker\":\"Työntekijä\",\"taxcards\":\"Verokortit\",\"calcs\":\"Laskelmat\",\"versions\":\"Versiot\"},\"calcRows\":\"Laskelman rivit\"},\"WorkerDetailsComponent\":{\"isAccountOwnerWarning\":{\"title\":\"Palkanmaksu ei mahdollista\",\"message\":\"Yksityinen elinkeinonharjoittaja eli toiminimi ei voi maksaa itselleen palkkaa.\\nPalkanmaksu hoidetaan yksityisnostoina.\\nKirjanpitäjäsi voi neuvoa sinua miten toimia.\"},\"addressInfo\":\"Osoite ei ole pakollinen palkanmaksussa.\",\"addressInfoOtherIdentifier\":\"Työntekijällä on keinohenkilötunnus, jonka ilmoittaminen tulorekisteriin edellyttää työntekijän osoitetietoja.\",\"address\":\"Osoite\",\"street\":\"Katuosoite\",\"city\":\"Kaupunki\",\"details\":\"Henkilötiedot\",\"workerId\":\"Työntekijän ID\",\"salaryPaymentMethod\":\"Palkanmaksutapa\",\"email\":\"Sähköpostiosoite\",\"emailError\":\"Sähköposti on virheellinen.\",\"year\":\"Vuosi\",\"contactInfo\":\"Yhteystiedot\",\"firstName\":\"Etunimi\",\"ibanNumber\":\"Tilinumero (IBAN)\",\"ibanNumberError\":\"Tilinumero on virheellinen\",\"addIban\":\"Lisää tilinumero\",\"lastName\":\"Sukunimi\",\"accept\":\"Hyväksy\",\"decline\":\"Hylkää\",\"validHtml\":\"Voimassa<br /> Otettu käyttöön\",\"unRealPersonalIndenficationNumer\":\"Työntekijällä on keinohenkilötunnus, jonka ilmoittaminen tulorekisteriin edellyttää työntekijän osoitetietoja.\",\"nameDecription\":{\"html\":\"Nimen muokkaaminen vaatii aina pankki&shy;tunnistuksen. Tämä hoidetaan rekisteröinnin ohjatulla toiminnolla.\"},\"paymentDetails\":\"Maksutiedot\",\"postalCode\":\"Postinumero\",\"work_description\":\"Kuvaus palkkalaskelmaan\",\"readOnlyUser\":{\"html\":\"<h3>Työntekijä on tunnistautunut pankkitunnuksin</h3><p>Tämä työntekijä on kirjautunut Palkkaus.fi-palveluun ja hallinnoi itse henkilötietojaan ja tilinumeroaan. Hän voi itse muuttaa niitä kirjautumalla palveluun omilla tunnuksillaan.</p><p>Jos näet tässä vääriä tietoja, ole yhteydessä työntekijään tai ota yhteyttä asiakaspalveluumme.</p>\"},\"ssNumber\":\"Henkilötunnus\",\"ssNumberDescription\":{\"html\":\"Palkkaus.fi-tili on aina kiinnitetty henkilötunnukseen. Jos henkilötunnuksesi muuttuu, kirjaudu ulos ja luo uusi Palkkaus.fi-tili uudella henkilötunnuksella tai ota yhteys asiakaspalveluumme.\"},\"avatarDescription\":{\"html\":\"Kuva ei ole pakollinen tieto palkanmaksussa.\"},\"taxCard\":{\"cardType\":\"Verokortin tyyppi\",\"example\":\"Esimerkkiverokortti\",\"exampleAlt\":\"Esimerkkiverokortti (kysy tieto myöhemmin)\",\"freelancer\":\"Freelancer\",\"noTaxCard\":\"Ei verokorttia (60%)\",\"noTaxCardText\":\"Ei verokorttia, 60% ennakonpidätys\",\"noTaxPrepayment\":\"Ei ennakonpidätystä (alle 1500 €/vuosi)\",\"other\":\"Muu\",\"others\":\"Muut tyypit\",\"sideIncome\":\"Sivutulon verokortti\",\"steps\":\"Portaikkoverokortti\",\"stepsAlt\":\"(portaikkoverokortti)\",\"taxCardA\":\"Verokortti A\",\"taxCardB\":\"Verokortti B\",\"unknown\":\"Tuntematon\",\"sharedTaxCard\":\"Työntekijä on jakanut verokortin\",\"wantToEnableTaxCard\":\"Haluatko ottaa verokortin käyttöön?\",\"taxCardExists\":\"Verokortti on jo syötetty\",\"taxCardExistsInfo\":\"Työntekijälle henkilötunnuksella {{ personalId }} on jo syötetty verokortti.Voit muokata sitä myöhemmin työntekijän tiedoissa.\",\"sharedTaxCardExistsInfo\":\"Työntekijä henkilötunnuksella {{ personalId }} on jo rekisteröitynyt Palkkaus.fi-palveluun ja hän on myös jakanut verokortin: {{kind}}, voimassa: {{ validity }}. Verokortti sisältää henkilötietoja, joita saat katsoa vain, jos aiot todella maksaa palkkaa ko. henkilölle. Tieto verokortin avaamisesta välittyy työntekijälle.\",\"typeAreYouSure\":\"Verokortin tyypin muutos tallennetaan työsuhteeseen heti. \\nHaluatko varmasti tehdä tämän muutoksen?\",\"status\":{\"waiting\":\"Odottaa\",\"waitingForAcception\":\"Odottaa hyväksyntää\",\"declined\":\"Hylätty\",\"accepted\":\"Hyväksytty\",\"notSeen\":\"Sisältöä ei nähty\"},\"setSharedAutoForSelf\":{\"loadingTitle\":\"Haetaan verokorttia\",\"loadingText\":\"Haetaan ennakonpidätyksen prosentteja ja tulorajaa Veron rajapinnasta.\",\"alertTitle\":\"Ei verokorttia\",\"alertText\":\"Verottajan tiedoista ei pystytty hakemaan uutta veroprosenttia. Tämä voi olla tilapäinen ongelma. Käytämme toistaiseksi vanhoja prosentteja.\",\"alertTextAutoCard\":\"Verottajan tiedoista ei löydy verokorttia tälle henkilötunnukselle. Tarkista verokorttisi Omavero-palvelusta tai Veron asiakaspalvelusta.\"}},\"taxPercent\":\"Veroprosentti\",\"taxPercentAdditional\":\"Lisäprosentti\",\"tel\":\"Puhelinnumero\",\"language\":\"Kieli\",\"workerEdit\":{\"title\":\"Muokkaa työntekijää\"},\"newCalculation\":\"Uusi palkkalaskelma\",\"workerInfo\":\"Perustiedot\",\"calculations\":\"Palkkalaskelmat\",\"taxcards\":\"Verokortti\",\"currentTaxCard\":\"Nykyinen verokortti\",\"historyTaxCard\":\"Historia\",\"employment\":\"Työsuhde\",\"contracts\":\"Työsopimukset\",\"usecase\":\"Tehtävä työ\",\"calcRows\":\"Palkkarivit\",\"noCalcRows\":\"Työntekijälle ei ole lisätty palkkarivejä\",\"defaultCalcRows\":\"Oletuspalkkarivit\",\"holidays\":\"Lomat\",\"absences\":\"Poissaolot\",\"calculationsWorker\":{\"status\":\"Tila\",\"date\":\"Pvm\",\"salary\":\"Palkka\",\"payment\":\"Maksu\",\"calculation\":\"Laskelma\",\"payroll\":\"Palkkalista\"},\"workerEmployment\":{\"keyEmployeeAlert\":{\"html\":\"Työsuhteeksi on valittu avainhenkilö. Palvelu ei toistaiseksi tue lähdeveroa. Valitse jokin muu työsuhdetyyppi ja tallenna.\"}},\"employmentTaxcard\":\"Työsuhteessa käytettävä verokortti\",\"records\":{\"label\":\"Muistiot\",\"recordType\":\"Tyyppi\",\"title\":\"Otsikko\",\"text\":\"Teksti\",\"attachments\":\"Liitteet\",\"startDate\":\"Päiväys\",\"badge\":\"Huom!\",\"createTypeInfo\":\"Voit luoda ja tallentaa uuden Tyypin kirjoittamalla tekstikenttään.\",\"badgeInfo\":\"Täyttämällä huomiokentät tästä liitetiedosta tulee huomiomerkintä laskelmalle ja listauksiin.\",\"noTypes\":\"Ei tallennettuja tyyppejä, luo uusi kirjoittamalla tekstikenttään\"}},\"WorkFlowEventEditComponent\":{\"description\":\"Kuvaus\",\"ui\":\"Tila\"},\"WorkerTaxCardsComponent\":{\"instruction\":\"Nähdäksesi kaikki verokortit, lisää henkilötunnus työntekijän tietoihin tai valitse työntekijä.\",\"error\":\"Error: No employment / account found\",\"noTaxCards\":\"Työntekijällä ei ole yhtään verokorttia\",\"percentAfterIncomeLimit\":\"(Veroprosentti tulorajan jälkeen)\",\"percentAfterIncomeLimit2\":{\"html\":\"Veroprosentti<br />tulorajan<br />jälkeen\"},\"type\":\"Tyyppi\",\"incomeLimit\":\"Tuloraja\",\"incomeLimitSpan\":\"...ylittävä %\"},\"AuthoringAccountComponent\":{\"authoringIntro\":\"Palkkaus.fi tilit, jotka ovat antaneet valtuutuksen\",\"authorizeIntro\":\"Palkkaus.fi tilit, joille olet antanut valtuutuksen\",\"authorizeIntroDescription\":\"Infoteksti\",\"authorize\":\"Anna valtuutus\",\"authorizedAddNew\":\"Lisää uusi tili\",\"authoringAddNew\":\"Lisää uusi tili\",\"authorizeTitle\":\"Valtuutuksen antaminen\",\"authorizeDescription\":\"Kirjoita kenttään sen Palkkaus.fi-tilin numero, jolle haluat antaa valtuutuksen ja paina 'Anna valtuutus'.\",\"palkkausAccount\":\"Palkkaus.fi-tili\",\"status\":\"Tila\",\"date\":\"Päivämäärä\",\"signeratureOk\":\"Allekirjoitus OK\",\"signeratureNo\":\"Ei allekirjoitusta\",\"invite\":\"Lähetä kutsu\",\"signIn\":\"Kirjaudu tilille\",\"scope\":\"Valtuuden laajuus\",\"defaultScope\":\"Vakio-oikeudet\"},\"CompanyOnboardingComponent\":{\"modalTitle\":\"Palkkaus.fi – Käyttöönotto\",\"step\":\"Vaihe\",\"step1\":{\"title\":\"Henkilön tiedot\",\"intro\":\"Anna henkilötietosi, jotta voimme valmistella sähköisesti allekirjoitettavan valtakirjan. Valtakirjaa tarvitaan, jotta Palkkaus.fi-ohjelmisto voi hoitaa yrityksesi puolesta palkanmaksuun liittyviä velvoitteita. Valtakirjan voi allekirjoittaa vain henkilö, jolla on yrityksen tai yhdistyksen nimenkirjoitusoikeus. Antamiasi henkilötietoja käytetään ainoastaan valtakirjassa.\",\"personInfo\":\"Henkilötiedot\",\"personFirstName\":\"Etunimi\",\"personLastName\":\"Sukunimi\",\"personContact\":\"Henkilön yhteystiedot\",\"personEmail\":\"Sähköposti\",\"personPhone\":\"Puhelinnumero\"},\"stepSuomiFi\":{\"title\":\"Nimenkirjoitusoikeus\",\"intro\":\"Anna henkilötunnuksesi, jotta voimme tarkistaa Suomi.fi-palvelusta, että sinulla on yrityksen nimenkirjoitusoikeus. Henkilötunnustasi käytetään vain nimenkirjoitusoikeuden tarkistamiseen ja valtakirjassa. Paina \\\"Siirry Suomi.fi-palveluun\\\"-nappia tunnistautumista ja yrityksen valintaa varten. Palatessasi Suomi.fi-palvelusta pääset jatkamaan käyttöönottoa.\",\"infoText\":\"Nimenkirjoitusoikeudellinen henkilö\",\"personalId\":\"Henkilötunnus\",\"goToSuomiFiBtn\":\"Siirry Suomi.fi-palveluun\"},\"stepCompanyInfo\":{\"title\":\"Yrityksen tiedot\",\"intro\":\"Anna yrityksen postiosoite sekä sähköpostiosoite ja puhelinnumero, joista Palkkaus.fi:n asiakaspalvelu voi tavoittaa henkilön, joka vastaa yrityksessä palkanmaksuista.\",\"existingCompanyAlert\":\"HUOM! Yrityksellä on jo Palkkaus.fi-tili. Jos jatkat käyttöönottoa, käyttämäsi tunnus lisätään tilin omistajaksi, jos se tilitä puuttuu. Vanhat käyttäjätunnukset säilyvät. Halutessasi voit poistaa käyttäjätunnuksen kohdasta Asetukset => Valtuutukset => Käyttäjätunnukset.\",\"existingBusinessIdAlert\":\"Tällä Y-tunnuksella ({{businessId}}) on jo luotu käyttäjätili Palkkaus.fi-palveluun.\",\"existingBusinessIdAlert2\":\"Jos sinulla on tämän yrityksen nimenkirjoitusoikeus, otathan yhteyttä asiakaspalveluumme joko sähköpostitse (aspa@palkkaus.fi) tai puhelimitse (09 425 50603).\",\"loginLink\":\"Voit kirjautua palveluun täältä.\",\"loginLink2\":\"Kirjaudu palveluun\",\"companyInfo\":\"Yrityksen perustiedot\",\"companyBusinessId\":\"Y-tunnus\",\"companyName\":\"Yrityksen nimi\",\"businessIdPopOver\":\"Tarvitset käyttäjätilin luomiseen Y-tunnuksen. Jos käytät palveluamme yhdistyksen palkanmaksuun, yhdistyksellä on oltava Y-tunnus. Yhdistys voi hakea Y-tunnuksen tekemällä perustamisilmoituksen Verohallintoon (lomakkeella Y1).\",\"companyName2\":\"Nimi\",\"ytjSearchTitle\":\"YTJ-haku\",\"ytjPopOver\":\"Voit hakea yrityksesi tiedot YTJ:stä Y-tunnuksen perusteella. YTJ on Patentti- ja rekisterihallituksen ylläpitämä tietokanta, johon tuodaan tietoja esimerkiksi kaupparekisteristä. Kirjoita Y-tunnuksesi, paina tätä nappia ja valitse yrityksesi hakutuloksista.\",\"ytjSearchBtn\":\"Hae\",\"ytjSearchBtn2\":\"YTJ:stä\",\"companyInfoAlt\":\"Yrityksen tiedot\",\"companyContact\":\"Yrityksen yhteystiedot\",\"companyStreet\":\"Katusoite\",\"companyPostalCode\":\"Postinumero\",\"companyCity\":\"Postitoimipaikka\",\"companyEmail\":\"Sähköposti\",\"companyPhone\":\"Puhelinnumero\",\"companyType\":\"Yritysmuoto\",\"companyType2\":\"Yrityksen tyyppi\",\"companyTypeFiOy\":\"Osakeyhtiö (Oy, Oyj, asunto-osakeyhtiö)\",\"companyTypeFiTm\":\"Yksityinen elinkeinonharjoittaja (toiminimi tai maatalousyrittäjä)\",\"companyTypeFiRy\":\"Yhdistys\",\"companyTypeFiYy\":\"Muu (kommandiittiyhtiö, avoin yhtiö, säätiö, pankki, liikelaitos tai osuuskunta)\",\"ytjSearchResultTitle\":\"YTJ-haun tulos\",\"ytjSearchResultText\":\"Haullasi löytyi yksi tulos, organisaation tiedot täytetty automaattisesti kenttiin.\"},\"stepCompanyLegal\":{\"title\":\"Viranomaisten kysymykset\",\"legalLegend\":\"Viranomaisten kysymykset\",\"pep\":\"Onko yrityksen edustaja poliittisesti vaikutusvaltainen henkilö (PEP)?\",\"pepTitle\":\"PEP\",\"pepPopOver\":\"Jos olet jossain toisessa valtiossa poliittisesti vaikutusvaltainen henkilö tai lähipiiriisi kuuluu poliittisesti vaikutusvaltainen henkilö (Politically Exposed Person, PEP), laki edellyttää, että kerrot siitä meille ennen palvelun käytön aloittamista. Palvelun käyttöön tämä ei vaikuta.  Poliittisesti vaikutusvaltaiseksi henkilöksi ei Suomessa katsota suomalaista poliitikkoa, joka toimii Suomessa.\",\"owner\":\"Omistaako joku henkilö vähintään 25% tästä yrityksestä suoraan tai välillisesti?\",\"ownerTitle\":\"Tosiasialliset edunsaajat eli omistajat\",\"ownerPopOver\":\"Lain mukaan tosiasiallisella edunsaajalla tarkoitetaan henkilöä, joka omistaa yli 25% yrityksen osakkeiden tai osuuksien tuottamasta äänimäärästä tai jolla on muutoin määräysvalta yrityksessä. Kysymme tätä tietoa, koska Finanssivalvonta ja rahanpesulaki velvoittavat meitä tuntemaan asiakkaamme.\",\"procura\":\"Onko sinulla yrityksen tai yhdistyksen nimenkirjoitusoikeus?\",\"procuraTitle\":\"Nimenkirjoitusoikeus\",\"procuraPopOver\":\"Käyttääksesi palvelua, sinulla pitää olla yrityksen tai yhdistyksen nimenkirjoitusoikeus. Yleensä se on yrityksen toimitusjohtajalla ja hallituksen jäsenillä tai yhdistyksen hallituksen jäsenillä. Jos olet epävarma, tarkista asia yrityksen tai yhdistyksen johdolta.\",\"procuraText\":\"Palvelun käyttöönotto edellyttää nimenkirjoitusoikeudellisen henkilön valtuutusta. Pyydä yrityksesi vastuullista henkilöä luomaan tili yritykselle tai ota yhteyttä asiakaspalveluumme.\",\"shareHolderTitle\":\"Yrityksen omistajat\",\"shareHolderText\":\"Seuraavat henkilöt omistavat vähintään 25% yhtiön osakkeista suoraan tai välillisesti\",\"shareHolder\":\"Omistaja\",\"fiva\":\"Miksi kysymme näitä tietoja?\",\"fivaText\":\"Palkkaus.fi on maksupalvelun tarjoajia koskevassa Finanssivalvonnan (Fiva) rekisterissä. Laki edellyttää meiltä asiakkaan tuntemista. Siksi kysymme vielä seuraavat tiedot. Tiedot eivät ole julkisia ja voimme luovuttaa niitä vain voimassaolevan lainsäädännön velvoittamissa rajoissa.\"},\"stepContract\":{\"title\":\"Valtakirja\",\"intro\":\"Viimeistele käyttöönotto allekirjoittamalla sähköinen valtakirja. Valtakirjan avulla Palkkaus.fi-ohjelmisto voi hoitaa yrityksesi puolesta palkanmaksuun liittyviä velvoitteita.\",\"info\":\"Lue ja hyväksy ensin käyttöehdot, valtakirja ja henkilötietojen käsittelysopimus ja paina sen jälkeen \\\"Allekirjoita\\\"-painiketta. Tämän jälkeen sinut ohjataan Signicat-palveluun, jossa allekirjoitat valtakirjan vahvalla sähköisellä tunnistautumisella. Kun allekirjoitus on tehty, palaat automaattisesti takaisin ja käyttöönotto on valmis.\",\"yourPersonalId\":\"Henkilötunnuksesi\",\"personalIdExample\":\"PPKKVV-NNNX\",\"selectBank\":\"Valitse verkkopankkisi\",\"usePersonalBank\":\"Huomioithan, että valtakirjaa ei voi allekirjoittaa yrityksen tai yhdistyksen tunnuksilla – käytäthän aina omia henkilökohtaisia tunnuksiasi.\",\"termsText\":{\"html\":\" Hyväksyn <a href=\\\"https://www.palkkaus.fi/kayttoehdot/\\\" target=\\\"_blank\\\">käyttöehdot</a>, \"},\"termsText2\":\"valtakirjan\",\"termsText3\":{\"html\":\"ja <a href=\\\"https://www.palkkaus.fi/sopimus-henkilotietojen-kasittelysta/\\\" target=\\\"_blank\\\">sopimuksen henkilötietojen käsittelystä</a>.\"},\"otherBanks\":\"Muut verkkopankit\",\"privacyPolicy\":{\"html\":\"<a href=\\\"https://www.palkkaus.fi/tietosuoja/\\\" target=\\\"_blank\\\">Lue palvelun tietosuojasta</a>\"},\"pdfPreviewTitle\":\"Valtakirjan esikatselu\",\"downloadHereLink\":\"Lataa tästä, jos et näe esikatselua\",\"pdfPreviewLink\":\"Valtakirjan esikatselu\",\"signBtn\":\"Allekirjoita\"}},\"CustomerOnboardingComponent\":{\"modalTitle\":\"Luo uusi yritystili\",\"step\":\"Vaihe\",\"steps\":{\"newAccount\":\"Luo uusi yritystili\",\"phase\":\"Vaihe\",\"userInfo\":\"Yrityksen edustajan tiedot\",\"companyInfo\":\"Yrityksen tiedot\",\"legal\":\"Viranomaisten kysymykset\",\"insurance\":\"Vakuutukset\",\"ready\":\"Valmis tili\"},\"stepUserInfo\":{\"title\":\"Yrityksen edustajan tiedot\",\"userInfo\":\"Yrityksen edustajan tiedot\",\"userFirstName\":\"Etunimi\",\"userLastName\":\"Sukunimi\",\"userEmail\":\"Sähköposti\",\"userPhone\":\"Puhelinnumero\",\"signeratureTitle\":\"Nimenkirjoitusoikeus\",\"signeratureText\":\"Yrityksen edustajan tulee olla henkilö, jolla on yrityksen nimenkirjoitusoikeus. Yrityksen edustaja allekirjoittaa Palkanmaksun valtakirjan omilla pankkitunnuksillaan.\",\"userPersonalId\":\"Henkilötunnus\",\"businessId\":\"Y-tunnus\",\"personalIdExample\":\"PPKKVV-NNNX\",\"checkSignatureAlert\":\"Tarkista yrityksen edustajan nimenkirjoitusoikeus ennen palkanmaksun aloittamista.\"},\"stepCompanyInfo\":{\"title\":\"Yrityksen tiedot\",\"existingCompanyAlert\":\"HUOM! Yrityksellä on jo Palkkaus.fi-tili. Varmista, että tilin omistaja on antanut sinulle valtuutuksen.\",\"companyInfo\":\"Yrityksen perustiedot\",\"companyBusinessId\":\"Y-tunnus\",\"companyName\":\"Yrityksen nimi\",\"companyInfoAlt\":\"Yrityksen tiedot\",\"companyContact\":\"Yrityksen yhteystiedot\",\"companyType\":\"Yritysmuoto\",\"companyStreet\":\"Katusoite\",\"companyPostalCode\":\"Postinumero\",\"companyCity\":\"Postitoimipaikka\",\"companyEmail\":\"Sähköposti\",\"companyPhone\":\"Puhelinnumero\",\"shareHolder\":\"Omistaja\"},\"stepCompanyLegal\":{\"title\":\"Viranomaisten kysymykset\",\"legalTitle\":\"Viranomaisten kysymykset\",\"pep\":\"Onko yrityksen edustaja poliittisesti vaikutusvaltainen henkilö (PEP)?\",\"pepTitle\":\"PEP\",\"pepPopOver\":\"Jos olet jossain toisessa valtiossa poliittisesti vaikutusvaltainen henkilö tai lähipiiriisi kuuluu poliittisesti vaikutusvaltainen henkilö (Politically Exposed Person, PEP), laki edellyttää, että kerrot siitä meille ennen palvelun käytön aloittamista. Palvelun käyttöön tämä ei vaikuta.  Poliittisesti vaikutusvaltaiseksi henkilöksi ei Suomessa katsota suomalaista poliitikkoa, joka toimii Suomessa.\",\"owner\":\"Omistaako joku henkilö vähintään 25% tästä yrityksestä suoraan tai välillisesti?\",\"ownerTitle\":\"Tosiasialliset edunsaajat eli omistajat\",\"ownerPopOver\":\"Lain mukaan tosiasiallisella edunsaajalla tarkoitetaan henkilöä, joka omistaa yli 25% yrityksen osakkeiden tai osuuksien tuottamasta äänimäärästä tai jolla on muutoin määräysvalta yrityksessä. Kysymme tätä tietoa, koska Finanssivalvonta ja rahanpesulaki velvoittavat meitä tuntemaan asiakkaamme.\",\"shareHolderTitle\":\"Yrityksen omistajat\",\"shareHolderText\":\"Seuraavat henkilöt omistavat vähintään 25% yhtiön osakkeista suoraan tai välillisesti:\",\"shareHolder\":\"Omistaja\",\"fiva\":\"Miksi kysymme näitä tietoja?\",\"fivaText\":\"Palkkaus.fi on maksupalvelun tarjoajia koskevassa Finanssivalvonnan (Fiva) rekisterissä. Laki edellyttää meiltä asiakkaan tuntemista. Siksi kysymme vielä seuraavat tiedot. Tiedot eivät ole julkisia ja voimme luovuttaa niitä vain voimassaolevan lainsäädännön velvoittamissa rajoissa.\"},\"stepInsurance\":{\"title\":\"Palkanmaksun asetukset\",\"pensionTitle\":\"Työeläkevakuutus (TyEL)\",\"pensionText\":\"Onko yrityksellä jo voimassa oleva TyEL-sopimus?\",\"hasPension\":\"Yritys voi aloittaa palkanmaksun palvelussa. TyEL tulee hoidetuiksi lain vaatimalla tavalla ns. tilapäisenä työnantajana automaattisesti. Jos palkkaat vakituisia työntekijöitä, niin voit ottaa TyEL-sopimuksen palvelussa myöhemmin.\",\"pensionCompany\":\"Yhtiö\",\"pensionContractNumber\":\"Sopimusnumero\",\"testOnly\":\"Test only:\",\"testGenerateNumberBtn\":\"Generoi numero\",\"pensionContractNumberToolTip\":{\"html\":\"Työeläkesopimuksen numero on 11 merkkiä pitkä ja se on muotoa:\\r\\n  <strong>nn-nnnnnnnT</strong> (Varma, Ilmarinen, Elo tai Veritas) tai <br>\\r\\n <strong>nnnnn-nnnnT</strong> (Eläkekassa Verso, Apteekkien Eläkekassa tai Valion Eläkekassa)\\r\\n </span> jossa n on numero ja T on tarkistusmerkki (numero tai iso kirjain).\\r\\n <br>Viivan jälkeen voi lisätä nollia, jos loppuosa on lyhyempi.\"},\"pensionContractNumberTemporaryToolTip\":{\"html\":\"Työeläkesopimuksen numero on 11 merkkiä pitkä ja se on muotoa:\\r\\n  <strong>nn-nnnnnnnT</strong> (Varma, Ilmarinen, Elo tai Veritas) tai <br>\\r\\n <strong>nnnnn-nnnnT</strong> (Eläkekassa Verso, Apteekkien Eläkekassa tai Valion Eläkekassa)\\r\\n </span> jossa n on numero ja T on tarkistusmerkki (numero tai iso kirjain).\\r\\n <br>Viivan jälkeen voi lisätä nollia, jos loppuosa on lyhyempi.\"},\"insuranceTitle\":\"Työtapaturmavakuutus\",\"insuranceText\":\"Onko yrityksellä jo tapaturmavakuutus työntekijöille?\",\"insuranceCompany\":\"Yhtiö\",\"insuranceContractNumber\":\"Sopimusnumero\",\"noInsuranceAlert\":\"Huomio! Työtapaturmavakuutus on lain mukaan pakollinen, jos yritys maksaa työntekijöilleen palkkoja yhteensä vähintään 1500 € vuodessa.\",\"pensionNotAutomated\":\"Valitettavasti palvelusta ei tility työeläkemaksut tähän työeläkeyhtiöön. Palkkaa voi maksaa ja teemme ilmoituksen tulorekisteriin. Työeläkeyhtiö laskuttaa yritystä työeläkemaksujen osalta.\",\"pensionHandling\":\"TyEL-maksujen maksaminen\",\"pensionSelfHandling\":\"Yritys/kirjanpitäjä hoitaa TyEL-maksut itse\",\"pensionSelfHandleDescription\":\"Työeläkemaksu ei tility osana palkanmaksua palvelulle. Palvelu tekee ilmoituksen tulorekisteriin ja työeläkeyhtiö lähettää laskun työeläkemaksuista.\",\"taxTitle\":\"Verohallinto\",\"taxText\":\"Oletusarvoisesti Palkkaus.fi tekee ilmoituksen jokaisesta palkanmaksusta verottajalle sekä kuukausittaisen Työnantajan erillisilmoituksen. Teemme myös nollailmoituksen, jos kuussa ei ole palkanmaksua, mutta työnantaja on Työnantajarekisterissä ja on maksanut palkkoja viimeisen puolen vuoden aikana. Jos valitset 'Palkkaus.fi lähettää Erillisilmoituksen aina', niin teemme nollailmoituksen siinäkin tapauksessä, jossa työnantaja ei ole maksanut palkkoja viimeisen puolen vuoden aikana.\",\"irReporting\":\"Kuukausittainen ilmoittaminen\",\"irReportingDefault\":\"Palkkaus.fi hoitaa kaiken\",\"irReportingNoMonthlyReport\":\"Palkkaus.fi ei lähetä Erillisilmoitusta\",\"irReportingAlways\":\"Palkkaus.fi lähettää Erillisilmoituksen aina\",\"employmentTitle\":\"Työttömyysvakuutus\",\"employmentText\":\"Palkkaus.fi ei tilitä työttömyysvakuutusmaksuja vaan Työllisyysrahasto laskuttaa asiakasyritystä neljännesvuosittain tehtyjen tulorekisteri-ilmoitusten perusteella.\",\"reportTitle\":\"Kirjanpitoraportin lähettäminen\",\"reportText\":\"Anna tilitoimiston sähköpostiosoite kirjanpitoraportin automaattista lähettämistä varten\",\"accountantEmail\":\"Sähköpostiosoite\"},\"stepInviteCompany\":{\"title\":\"Kutsu yritys\",\"html\":\"<p>Lähetä tästä kutsu sähköpostilla yrityksen vastuuhenkilölle. Kun hän on allekirjoittanut valtakirjan henkilökohtaisilla verkkopankkitunnuksillaan, palvelulla voi maksaa yrityksen palkkoja.</p>\\r\\n<p>Valtakirjalla Palkkaus.fi voi hoitaa yrityksen puolesta palkanmaksuun liittyviä asioita mm. Verohallintoon, työeläkeyhtiöön ja Työttömyysvakuutusrahastoon liittyen.</p>\\r\\n\\r\\n <p><strong>Lähetä tämä linkki valtakirjan allekirjoitukseen yrityksen edustajalle:</strong>\\r\\n <pre>{{sharingLink}}</pre>\\r\\n </p>\\r\\n <p>Voit myös klikata tästä avataksesi valmiin sähköpostipohjan sähköpostiohjelmassasi. HUOM: Tarkista teksti ja lisää loppuun oma viestisi.\\r\\n </p>\\r\\n<a href=\\\"{{mailToLink}}\\\">Kutsu yritys käyttämään palvelua</a>\"},\"newAccountBtn\":\"Luo toinen tili\",\"invitation\":{\"title\":\"Kutsu yritys\",\"html\":\"<p>Lähetä tästä kutsu sähköpostilla yrityksen vastuuhenkilölle. Kun hän on allekirjoittanut valtakirjan henkilökohtaisilla verkkopankkitunnuksillaan, palvelulla voi maksaa yrityksen palkkoja.</p>\\r\\n<p>Valtakirjalla Palkkaus.fi voi hoitaa yrityksen puolesta palkanmaksuun liittyviä asioita mm. Verohallintoon, työeläkeyhtiöön ja Työttömyysvakuutusrahastoon liittyen.</p>\\r\\n\\r\\n <p><strong>Lähetä tämä linkki valtakirjan allekirjoitukseen yrityksen edustajalle:</strong>\\r\\n <pre>{{signingLink}}</pre>\\r\\n </p>\"}},\"ContactInfoComponent\":{\"defaultContent\":{\"html\":\"Palvelun käyttöohjeet ja usein kysytyt kysymykset löydät oikean alakulman Apua-painikkeen kautta. Voit myös lähettää viestin Palkkaus.fi:n asiakaspalveluun sen kautta. Tukisivustomme löytyy myös osoitteesta <a href=\\\"https://help.palkkaus.fi/hc/fi\\\" target='_blank'>help.palkkaus.fi</a>\"},\"contactInfo\":{\"html\":\"Voit laittaa sähköpostia asiakaspalveluumme osoitteeseen <strong>aspa@palkkaus.fi</strong> tai soittaa numeroon <strong>09 425 50603</strong> (ma - pe 9-12).\"},\"shortContent\":{\"html\":\"Palkankorjauksiin liittyvissä asioissa voit olla suoraan yhteydessä Palkkaus.fi:n asiakaspalveluun: <strong>aspa@palkkaus.fi</strong> tai <strong>09 425 50603</strong>.\"}},\"BatchProcessComponent\":{\"title\":\"Eräajo\",\"processing\":\"Prosessoidaan...\",\"employer\":\"Työnantaja\",\"worker\":\"Työntekijä\",\"status\":\"Tila\",\"processed\":\"Prosessoitu\",\"dialog\":{\"done\":\"Valmis\",\"processing\":\"Prosessoidaan\",\"errors\":\"Virheitä\",\"canceling\":\"Ajo peruttu!\",\"count\":\"Lukumäärä\",\"stopProcessing\":\"Keskeytä ajo!\"}},\"PayrollComponent\":{\"newVersion\":\"Uusi versio\",\"newVersionInfo\":\"Uusi versio: Käyttöliittymä isoille palkkalistoille\",\"newPayrollInfo\":{\"html\":\"Julkaisemme uuden version palkkalistasta, joka on suunniteltu käsittelemään <strong>jopa tuhansia palkkoja</strong> nopeasti ja tehokkaasti. Suosittelemme uutta versiota <strong>erityisesti, jos sinulla on yli 20 työntekijän palkkalistoja</strong>. Voit ottaa palkkalistan käyttöön kytkimestä oikealta yläkulmasta ja halutessasi vaihtaa takaisin vanhaan versioon. Asetus on selainkohtainen.\"},\"payrollVersions\":{\"header\":\"Palkkalistan versiot\",\"html\":\"Olemme julkaisseet uudistuneen palkkalistan, mikä mahdollistaa entistä paremmin isojen palkkalistojen käsittelyn. Voit lukea uudesta palkkalistasta lisää täältä: <a href=\\\"https://help.palkkaus.fi/hc/fi/articles/21922663363997-Uusi-p%C3%A4ivitetty-palkkalista\\\" target='_blank'>Uusi päivitetty palkkalista</a>. Halutessasi voit vaihtaa palkkalistan version oikean yläkulman kytkimestä. Asetus on selainkohtainen. Vanha palkkalista poistuu käytöstä syksyllä 2025. Suosittelemme lämpimästi uuden palkkalistan käyttämistä etenkin, jos maksat yli 20 palkkaa kerralla.\"},\"mergePayroll\":{\"title\":\"Valitse tuotavat palkkalista\",\"batchProcessTitle\":\"Yhdistetään palkkalistoja\"},\"calcViews\":{\"rows\":\"Rivit\",\"calculator\":\"Laskuri\",\"costAccounting\":\"Kustannuspaikat\",\"employment\":\"Työsuhde\",\"reports\":\"Raportit\"},\"headerViews\":{\"header\":\"Palkkalista\",\"calculations\":\"Laskelmat\",\"rows\":\"Rivit\",\"reports\":\"Raportit\",\"ports\":\"Vienti/Tuonti\",\"messages\":\"Viestit\"},\"showEditEvent\":{\"title\":\"Automaattinen palkkalista: Ajastus ja muistutukset\"},\"commitAllCalcs\":{\"heading\":\"Tallennetaan laskelmia...\"},\"showDateRangeTitle\":\"Palkkakausi\",\"showDateRangeDialogTitle\":\"Muutetaanko kaikki laskelmat?\",\"showDateRangeDialogDescr\":\"Muutetaanko periodi kaikissa laskelmissa? Vaihtoehtona on vaihtaa periodi vain palkkalistaan ja jättää laskelmiin nykyiset päivämäärät.\",\"showEditCalcDialog\":\"Muokkaa palkalaskelmaa\",\"showEditWorkerDialogUpdating\":\"Päivitetään laskelmaa...\",\"showNewTaxcardDialog\":\"Työntekijää ei ole valittuna tai työntekijällä ei ole henkilötunnusta.\",\"importEmploymentDataAllAlertTitle\":\"Ei laskelmia\",\"importEmploymentDataAllAlertDescr\":\"Palkkalistassa ei ole laskelmia. Työntekijöitä ei ole päivitetty.\",\"importEmploymentDataAllConfirmTitle\":\"Päivitä laskelmat työsuhteen tiedoista\",\"importEmploymentDataAllConfirmDescr\":\"Kaikkien laskelmien kaikki lisätyt rivit nollautuvat ja laskelmat päivittyvät suoraan työsuhteen tiedoista. Samalla päivittyvät myös ammattiluokka ja 'kuvaus palkkalaskelmaan'.\",\"importEmploymentDataAllLoading\":\"Haetaan tietoja...\",\"importEmploymentDataTitle\":\"Päivitä laskelma työsuhteen tiedoista\",\"importEmploymentDataDescr\":\"Laskelman kaikki lisätyt rivit nollautuvat ja rivit päivittyvät suoraan työsuhteen tiedoista. Samalla päivittyvät myös ammattiluokka ja 'kuvaus palkkalaskelmaan'.\",\"importEmploymentDataLoading\":\"Haetaan tietoja...\",\"exportEmploymentDataTitle\":\"Vie rivit työntekijän tietoihin\",\"exportEmploymentDataDescr\":\"Työsuhteen tietoihin tallennetaan tämän laskelman rivit ja ne tulevat jatkossa uusiin laskelmiin ja palkkalistoihin. Samalla päivittyvät myös ammattiluokka ja 'kuvaus palkkalaskelmaan'.\",\"exportEmploymentDataLoading\":\"Viedään tietoja...\",\"exportEmploymentDataAllAlertTitle\":\"Ei laskelmia\",\"exportEmploymentDataAllAlertDescr\":\"Palkkalistassa ei ole laskelmia. Työntekijöitä ei ole päivitetty.\",\"exportEmploymentDataAllConfirmTitle\":\"Vie rivit työntekijän tietoihin\",\"exportEmploymentDataAllConfirmDescr\":\"Kaikkien laskelmien työsuhteen tietoihin tallennetaan tämän palkkalistan rivit. Tämän palkkalistan rivit tulevat siis jatkossa uusiin laskelmiin ja palkkalistoihin. Samalla päivittyvät myös ammattiluokka ja 'kuvaus palkkalaskelmaan'.\",\"exportEmploymentDataAllLoading\":\"Viedään tietoja...\",\"addSalaryDefaultsToAllCalcsAlertTitle\":\"Palkkalistassa ei ole laskelmia. Oletuspalkkarivejä ei ole päivitetty.\",\"addSalaryDefaultsToAllCalcsTitle\":\"Päivitä oletuspalkkarivit työsuhteen tiedoista\",\"addSalaryDefaultsToAllCalcsDescr\":\"Kaikkien laskelmien riveihin lisätään oletuspalkkarivit työsuhteen tiedoista.\",\"createNewCalcLoading\":\"Luodaan laskelmia...\",\"addExistingCalcCopy\":\"Valitse maksetut palkat (kopioidaan)\",\"addExistingCalcMove\":\"Valitse luonnokset (siirretään)\",\"addExistingCalcMoveShared\":\"Valitse lähetetyt (siirretään)\",\"addExistingCalcLoading\":\"Siirretään laskelmia...\",\"sendPayroll\":\"TODO: Palkkalistan lähetys\",\"sendToProSending\":\"Lähetetään\",\"sendToProSendingDescr\":\"Lähetetään palkkalistaa tilitoimistolle.\",\"sendToProMessage\":\"Viesti yritykseltä: \",\"sendToProMessageChecked\":\"Yritys tarkistanut\",\"createNewCalcDialog\":\"Valitse työntekijät\",\"newEvent\":{\"summaryPre\":\"Palkkalista: \",\"descriptionPre\":\"Toistuva palkkalista: \",\"createSummary\":\"Palkkalista luodaan\",\"createDescription\":\"Automaattinen ajastus luo palkkalistan\"},\"payrollCalcs\":{\"additionalInformation\":\"Lisätiedot\",\"calcImport\":\"Laskelmien tuonti\",\"toolbar\":{\"addCalculation\":\"Lisää laskelma\",\"addWorker\":\"Lisää työntekijä (uusi laskelma)\",\"addDraft\":\"Lisää laskelmaluonnos\",\"addShared\":\"Lisää lähetetty laskelma\",\"mergeDraft\":\"Yhdistä laskelmaluonnos\",\"mergeShared\":\"Yhdistä lähetetty laskelma\",\"addCopy\":\"Lisää kopio maksetusta laskelmasta\",\"addPayroll\":\"Yhdistä palkkalista\",\"open\":\"Avaa\",\"edit\":\"Muokkaa rivejä\",\"save\":\"Tallenna muokatut\",\"cancel\":\"Peruuta muutokset\",\"close\":\"Sulje\",\"nextPage\":\"Seuraava sivu\",\"previousPage\":\"Edellinen sivu\",\"nextCalc\":\"Seuraava laskelma\",\"previousCalc\":\"Edellinen laskelma\",\"searchByName\":\"Hae nimellä\"},\"placeholder\":{\"title\":\"Aloita lisäämällä työntekijöitä tai laskelmia palkkalistaan\"},\"calculation\":{\"actions\":{\"toggle\":\"Sulje / avaa\",\"options\":\"Valinnat\",\"edit\":\"Muokkaa\",\"editCalculation\":\"Muokkaa laskelmaa\",\"editRows\":\"Muokkaa rivejä\",\"openCalculator\":\"Avaa laskuri (uusi ikkuna)\",\"openIrRows\":\"Avaa Tulorekisteri-rivit\",\"save\":\"Tallenna\",\"saveWorktime\":\"Päivitä lomat ja poissaolot\",\"cancel\":\"Peruuta\",\"rowsEmployment\":\"Palkkarivit Työsuhteen tiedoissa\",\"import\":\"Tuo rivit: Työntekijä => Lista\",\"delete\":\"Poista laskelma\",\"deletePayrollCalc\":\"Poista palkkalistan laskelma\",\"unlink\":\"Poista linkitys (käsittele erillisenä)\",\"viewReports\":\"Katso koko laskelma\",\"employerReport\":\"Työnantajan laskelma\",\"paymentReport\":\"Yhteiskunnan laskelma\",\"salarySlip\":\"Työntekijän laskelma\",\"copyAsNew\":\"Kopioi laskelma ja käsittele erillisenä\",\"pay\":\"Maksa tämä laskelma\"},\"workerInfo\":{\"noIban\":\"Tilinumero puuttuu\",\"editWorker\":\"Muokkaa työntekijää\",\"noTaxcard\":\"Ei verokorttia\",\"addTaxcard\":\"Lisää verokortti\",\"salaryPeriod\":\"Palkkakausi:\",\"salaryPeriodDaysCount\":\"päivää\",\"taxPercent\":\"veroprosentti\"}},\"deleteCalcDialog\":{\"heading\":\"Poista laskelma?\",\"introChanges\":\"Haluatko varmasti poistaa palkkalaskelman? HUOM: Sinulla on tallentamattomia muokkauksia. Tallenna muokkaukset ennen laskelman poistamista.\",\"introNoChanges\":\"Haluatko varmasti poistaa palkkalaskelman?\",\"cancelButton\":\"Peruuta\",\"confirmButton\":\"Poista\",\"loading\":\"Poistetaan laskelmia...\"},\"unlinkCalcDialog\":{\"heading\":\"Poista laskelman linkitys?\",\"intro\":\"Haluatko varmasti poistaa palkkalaskelman linkityksen? HUOM: Muutokset palkkalistaan tallentuvat samalla.\",\"cancelButton\":\"Peruuta\",\"confirmButton\":\"Poista linkitys\",\"loading\":\"Poistetaan laskelman linkitystä...\"},\"calcRowEditor\":{\"title\":\"Laskelman rivit\"},\"payrollTotals\":{\"finalCost\":\"Kokonaiskustannus:\",\"grossSalary\":\"Bruttopalkka:\",\"totalPayment\":\"Maksetaan nyt:\"},\"taxCard\":{\"taxCardChecked\":\"Verokortti on tarkistettu\",\"refreshAutoTaxCard\":\"Tarkista autom. verokortti\"},\"validation\":{\"noValidationFound\":\"Virhe: Validointia ei löytynyt.\"}},\"payrollEdit\":{\"toolbar\":{\"options\":\"Valinnat\",\"importEmploymentCalc\":\"Päivitä kaikille laskelmille työntekijöiden tiedot ja palkkarivit\",\"addSalaryDefaults\":\"Lisää oletuspalkkarivit\",\"copyAsNew\":\"Kopioi uudeksi\",\"cancel\":\"Peruuta muutokset\",\"delete\":\"Poista\",\"save\":\"Tallenna\",\"saved\":\"Tallennettu\",\"sendPayroll\":\"Lähetä palkkalista\",\"showWorkflowMessage\":\"Lisää viesti tilitoimistoon\",\"showWorkflowMessageOff\":\"Poista tilitoimiston viesti\",\"createSchedule\":\"Ajasta\",\"editSchedule\":\"Ajastettu (muokkaa)\",\"showPaymentInfo\":\"Näytä maksun tiedot\",\"workFlowMessage\":\"Viesti tilitoimistoon\"},\"payrollInfo\":{\"readyForPayment\":\"valmis maksuun\",\"notReadyForPayment\":\"tarkista laskelmat\",\"salaryPeriod\":\"Palkkakausi\",\"salaryPeriodDaysCount\":\"päivää\",\"salaryDate\":\"Palkkapäivä\",\"salaryDateEstimate\":\"arvio\",\"salaryDateNote\":\"huom!\",\"wageBasis\":\"Palkan peruste\",\"calcCount\":\"Laskelmia\",\"finalCost\":\"Kokonaiskustannus\",\"grossSalary\":\"Bruttopalkka\",\"totalPayment\":\"Maksetaan nyt\",\"template\":{\"html\":\"Perustuu <a ng-href=#/payroll/details/{{ template }}>toistuvaan palkkalistaan</a></span>\"},\"reporting\":\"Raportointi\",\"costCenter\":\"Kustannuspaikka\",\"scheduling\":\"Ajastus\"},\"editProperties\":{\"title\":\"Otsikko\",\"status\":\"Status\",\"wageBasis\":\"Työsuhteen tyyppi (lomalaskennassa)\",\"wageBasisUndefined\":\"Ei määritelty\",\"salaryDate\":\"Palkkapäivä\",\"salaryPeriod\":\"Palkkakausi\",\"salaryPeriodDaysCount\":\"päivää\",\"paymentChannel\":\"Maksumenetelmä\",\"new\":{\"heading\":\"Luo uusi palkkalista\",\"intro\":\"Luo eri palkkalistat kuukausi- ja tuntipalkkaisille (työsuhteen tyyppi). Tulemme käyttämään tätä jaottelua tulevien versioiden lomalaskennassa.\",\"copyingCalcs\":\"Kopioidaan laskelmia\",\"updateCalcs\":\"Päivitä laskelmat\",\"updateCalcsTrue\":\"Älä päivitä: Pidä palkkalistan tiedot\",\"updateCalcsFalse\":\"Päivitä tiedot työsuhteista\",\"createPayrollButton\":\"Luo palkkalista\",\"updateReports\":\"Päivitä raportit\",\"importRowsToPayroll\":\"Tuo rivejä palkkalistalle\",\"downloadPayrollRowsToExcel\":\"Lataa palkkalistan rivit Exceliin\"}},\"tabs\":{\"editProperties\":\"Perustiedot\",\"calculations\":\"Laskelmat\",\"holidays\":\"Lomat\",\"absences\":\"Poissaolot\",\"reports\":\"Raportit\"},\"buttons\":{\"updateHolidaysAndAbsences\":\"Päivitä lomat ja poissaolot laskelmaan\"}},\"payrollPayButton\":\"Siirry maksamaan\",\"payrollCommentButton\":\"Kommentoi\",\"payrollList\":{\"createNew\":\"Luo uusi\",\"intro\":\"Palkkalistan avulla voi maksaa useita palkkoja kerralla.\",\"introWithVideo\":{\"html\":\"Palkkalistan avulla voi maksaa useita palkkoja kerralla. Katso ohje <a href=\\\"https://youtu.be/FQJ-l6pDWEU\\\" target=\\\"_blank\\\" class=\\\"btn-link\\\">videolta</a> (youtube).\"},\"info\":{\"html\":\"Tuomme vuoden loppuun mennessä toistuvat palkkalistat, jotka palvelu luo automaattisesti valitun aikataulun mukaisesti.\"},\"tabs\":{\"latest\":\"Viimeisimmät palkkalistat\",\"repeated\":\"Toistuvat palkkalistat\",\"paid\":\"Maksettu\",\"paidSalaries\":\"Maksetut palkat\",\"draftCalcs\":\"Keskeneräiset laskelmat\"}},\"validate\":{\"validating\":\"Tarkistetaan palkkalaskelmia...\",\"isReadyForPayment\":\"Palkkalista on valmis maksuun\",\"notReadyForPayment\":\"Laskelmissa on ongelmia, katso alla\",\"noTel\":\"Ei puhelinnumeroa\",\"noIban\":\"Ei tilinumeroa\",\"noTaxcard\":\"Ei verokorttia\",\"noWorker\":\"Työntekijä puuttuu\",\"editWorker\":\"Muokkaa työntekijää\",\"addWorker\":\"Lisää työntekijä\",\"addWorkerTaxcard\":\"Lisää työntekijälle verokortti\",\"viewCalculation\":\"Katso koko laskelma\",\"total\":\"Yhteensä\",\"totalGrossSalary\":\"Bruttopalkka\",\"totalPayment\":\"Maksetaan nyt\"},\"edit\":{\"createNew\":\"Luo uusi lista\",\"info\":\"Listan perustiedot\",\"rows\":\"Palkkalistan rivit\",\"next\":\"Jatka (rivit)\",\"removeRows\":\"Poista valitut rivit\",\"import\":\"Tuo aineisto\",\"importPalkka\":\"Tuo Palkka.fi-aineisto\",\"validate\":\"Tarkista\",\"paste\":\"Liitä (copy-paste)\",\"instructions\":\"Ohjeet\"},\"editGrid\":{\"worker\":\"Työntekijä\",\"createWorker\":\"Luo työntekijä\",\"taxcard\":\"Verokortti\",\"ssNumber\":\"Hetu / Palkkaus.fi-ID\",\"type\":\"Tyyppi\",\"amount\":\"Määrä\",\"price\":\"Hinta\",\"total\":\"Yhteensä\",\"description\":\"Kuvaus\"},\"editProperties\":{\"title\":\"Otsikko\",\"period\":\"Palkkakausi\",\"paymentDate\":\"Palkkapäivä\",\"paymentDateAlt\":\"Maksupäivä\",\"startDate\":\"Alku\",\"startDateAlt\":\"Palkkakauden alku\",\"endDate\":\"Loppu\",\"endDateAlt\":\"...loppu\",\"workDays\":\"Työpäivien määrä\"}},\"PayrollListComponent\":{\"readyForPayment\":\"Valmis maksuun\",\"notReadyForPayment\":\"Tietoja puuttuu\",\"latestPayrolls\":\"Viimeisimmät palkkalistat\",\"templates\":\"Toistuvat pohjat (templates)\",\"description\":\"Kuvaus\",\"salaryDate\":\"Palkkapäivä\",\"status\":\"Status\",\"period\":\"Palkkakausi\",\"paymentDate\":\"Maksupäivä\",\"dueDate\":\"Eräpäivä\",\"calculations\":\"Palkkalaskelmat\",\"grossSalaries\":\"Bruttopalkat\",\"calendarEvent\":\"Ajastettu\",\"calendarOccurence\":\"Luotu ajastuksessa\",\"template\":\"Toistuva palkkalista\",\"noSalaryDate\":\"Ei palkkapäivää\"},\"EmploymentContractsComponent\":{\"employmentStart\":\"Työsuhteen alku\",\"end\":\"loppu\",\"phone\":\"Puh\",\"editWorker\":\"Muokkaa työntekijää\",\"addIban\":\"Lisää tilinumero\"},\"CalcDetailsComponent\":{\"classic\":\"Palkkalaskuri\",\"pro\":\"Tilitoimistolaskuri\"},\"ShopCardsComponent\":{\"intro\":\"Palkanmaksun palvelut\"},\"LanguageSelectionComponent\":{\"panelTitle\":\"Kielivalinta\",\"languageSelectionLabel\":\"Kieli:\",\"changeLanguage\":\"Vaihda kieli\",\"changeLanguageInfo\":\"Voit vaihtaa tästä käyttöliittymän kielen tämän istunnon ajaksi, jos haluat testata muita kieliversioita.\",\"changeCompanyDefaultLanguage\":\"Vaihda yhtiön oletuskieli\",\"changeCompanyDefaultLanguageInfo\":\"Voit vaihtaa tästä yhtiön oletuskielen kaikille yrityksen käyttäjätunnuksille (Palkkaus.fi yrityksen käyttöliittymä) ja rekisteröimättömille työntekijöille.\",\"warning\":{\"html\":\"<strong>HUOM:</strong> Kielen vaihtaminen vaihtaa myös kaikkien rekistereröimättömien työntekijöiden oletuskielen (esim. palkkalaskelma PDF ja sähköpostit).\"}},\"WorkerInfo\":{\"noSelection\":\"Työntekijää ei ole valittu\",\"ibanOk\":\"Tilinumero OK\",\"noIbanNumber\":\"Ei tilinumeroa\"},\"DateRange\":{\"labelDaysCount\":\"Päivien määrä\",\"labelStartAndEndDate\":\"Alku- ja loppupäivät\",\"salaryPeriod\":\"Palkkakausi\",\"startDate\":\"Alkupäivä\",\"endDate\":\"Loppupäivä\",\"otherMonth\":\"Muu kuukausi\",\"periodStartDateError\":\"Syötä muodossa 'pv.kk.'\",\"periodStartDateError2\":\" ei ole päivämäärä.\"},\"CalcRowsComponent\":{\"editor\":{\"action\":\"Toiminto\",\"addNewRow\":\"Lisää uusi rivi\",\"amount\":\"Määrä\",\"price\":\"Hinta\",\"total\":\"Yhteensä\",\"calcRow\":\"Palkkarivi\",\"calcRowTypePlaceholder\":\"Valitse rivin tyyppi tai...\",\"totals\":{\"total\":\"Yhteensä\",\"grossTotal\":\"Bruttopalkka\",\"netSalary\":\"Nettopalkka\",\"finalCost\":\"Kokonaiskustannus\",\"totalPayment\":\"Nyt maksetaan\"},\"buttons\":{\"readMore\":\"Lue lisää\",\"okIcon\":\"Ok\",\"cancelIcon\":\"Peruuta\",\"editIcon\":\"Muokkaa riviä\",\"deleteIcon\":\"Poista rivi\",\"infoIcon\":\"Katso tiedot\"},\"validation\":{\"edit\":\"Muokkaa\",\"note\":\"HUOM:\"}},\"editDialog\":{\"showInfo\":\"Näytä ohje\",\"hideInfo\":\"Piilota ohje\",\"incomeTypesInfo\":\"Palkkalajiin liittyvät tulolajit\",\"unionPayment\":{\"label\":\"Maksun tyyppi\",\"enumOther\":\"Yleinen\",\"fixedSum\":\"Kiinteä summa\",\"fixedSumTrue\":\"Kyllä: älä päivitä palkkasummasta.\",\"minimumPayment\":\"Jäsenmaksun vähimmäismäärä, euroa\",\"maximumPayment\":\"Jäsenmaksun enimmäismäärä, euroa\"},\"carBenefit\":{\"carBenefitCode\":\"Autoedun tyyppi\",\"ageGroupCode\":\"Auton ikäryhmä\",\"kilometersBased\":\"Kilometripohjainen\",\"kilometersBasedTrue\":\"Kyllä: autoetu lasketaan kilometrien perusteella (ajopäiväkirjasta).\",\"kilometers\":\"Kilometrit\",\"emissionsValue\":\"Auton päästöarvo (0-100)\",\"deduction\":\"Vähennys palkasta\"},\"subsidisedCommute\":{\"info\":{\"html\":\" <b>HUOM:</b> Tämä Työsuhdematkalippu-laskuri tukee vain vuoden ainoata / ensimmäistä työsuhdematkalippua. Jos syötät toista lippua, käytä Tulorekisteri-välilehteä. Tuomme uuden version pian.\"},\"subsidisedCommuteKind\":\"Vähennys työntekijän palkasta\",\"deduction\":\"Palkasta peritty korvaus\",\"taxable\":\"Palkaksi katsottu osuus\",\"taxfree\":\"Verovapaa osuus\",\"periodDivider\":\"Kausien määrä (oletus 12kk)\"},\"bicycleBenefit\":{\"bicycleBenefitKind\":\"Vähennys työntekijän palkasta\",\"deduction\":\"Palkasta peritty korvaus\",\"taxable\":\"Palkaksi katsottu osuus\",\"taxfree\":\"Verovapaa osuus\",\"periodDivider\":\"Kausien määrä (oletus 12kk)\"},\"nonProfitOrg\":{\"profitOrgKind\":\"Korvauksen tyyppi\"},\"dailyAllowance\":{\"allowanceKind\":\"Korvauksen tyyppi\",\"internationalDailyAllowanceCount\":\"Päivärahojen enimmäismäärät\"},\"mealBenefit\":{\"mealBenefitKind\":\"Edun tyyppi\",\"mealPrice\":\"Korvaus / ateria\",\"mealTaxablePrice\":\"Verotusarvo / kpl\",\"mealTicketPrice\":\"Nimellisarvo / kpl\",\"mealPriceAmount\":\"Verotusarvo yhteensä\",\"workerDeduction\":\"Peritäänkö työntekijältä korvausta ravintoedusta?\",\"taxValueTrue\":\"Työntekijältä peritään verotusarvon määrä\",\"taxValueFalse\":\"Työntekijältä ei peritä korvausta lainkaan tai muu määrä kuin verotusarvo\",\"isTaxValueDeductionDone\":\"Verotusarvoa vastaava vähennys\",\"isTaxValueDeductionDoneTrue\":\"Ei vähennetä tällä laskelmalla\",\"isTaxValueDeductionDoneFalse\":\"Vähennetään tällä laskelmalla\",\"deduction\":\"Määrä yhteensä, joka peritään työntekijältä\"},\"remuneration\":{\"remunerationKind\":\"Tulolaji\"},\"otherCompensation\":{\"compensationKind\":\"Tulolaji\"},\"workingTimeCompensation\":{\"compensationKind\":\"Tulolaji\"},\"employmentTermination\":{\"employmentTerminationKind\":\"Tulolaji\"},\"paidSickLeave\":{\"paidSickLeaveKind\":\"Palkan/palkkion laji\"},\"training\":{\"trainingKind\":\"Palkan/palkkion laji\"},\"timeRatePay\":{\"timeRatePayKind\":\"Palkan laji\"},\"additionalRows\":{\"description\":\"Kuvaus\",\"additionalRow\":\"Lisärivi palkkalaskelmaan\"},\"milageOwnCar\":{\"vehicleType\":\"Kulkuneuvon tyyppi\",\"additions\":\"Lisät\",\"passangerCount\":\"Lisähenkilöiden määrä\"},\"buttons\":{\"save\":\"OK\",\"cancel\":\"Peruuta\",\"delete\":\"Poista\",\"close\":\"Sulje\"},\"accounting\":{\"vatPercent\":{\"label\":\"Arvonlisävero-%\"},\"vatPercents\":{\"p255\":{\"label\":\"25,5 % - Yleinen verokanta\",\"description\":\"Yleinen verokanta. Tämä on useimpien tavaroiden ja palveluiden verokanta.\"},\"p24\":{\"label\":\"24 % - Yleinen verokanta\",\"description\":\"Yleinen verokanta. Tämä on useimpien tavaroiden ja palveluiden verokanta.\"},\"p14\":{\"label\":\"14 % - Elintarvikkeet, ravintola- ja ateriapalvelut\",\"description\":\"Elintarvikkeet, rehut, ravintola- ja ateriapalvelut. Huomaa, että alempi 14 %:n verokanta ei koske alkoholijuomien ja tupakkatuotteiden myyntiä eikä tarjoilua.\"},\"p135\":{\"label\":\"13,5 % - Elintarvikkeet, ravintola- ja ateriapalvelut\",\"description\":\"Elintarvikkeet, rehut, ravintola- ja ateriapalvelut. Huomaa, että alempi 13,5 %:n verokanta ei koske alkoholijuomien ja tupakkatuotteiden myyntiä eikä tarjoilua.\"},\"p10\":{\"label\":\"10 % - Kirjat, kulttuuri, henkilökuljetus ja majoitus\",\"description\":\"Kirjat, sanoma- ja aikakauslehdet, lääkkeet, liikuntapalvelut, elokuvanäytökset, kulttuuri- ja viihdetilaisuuksien sisäänpääsymaksut, henkilökuljetukset, majoituspalvelut, televisio- ja yleisradiotoiminnasta saadut korvaukset.\"},\"p0\":{\"label\":\"0 % - Nollaverokanta\",\"description\":\"Arvonlisäverottomien vesialusten myynti, vuokraus ja rahtaus sekä näihin aluksiin kohdistuvat työsuoritukset, jäsenlehtien ja mainosten veroton myynti yleishyödyllisille yhteisöille, varastointimenettelyihin liittyvä veroton myynti (verovarasto alvissa), vienti EU-alueen ulkopuolelle, tavaran myynti EU-maihin arvonlisäverovelvollisille ostajille (ohje alv eu-tavarakaupassa), muut kansainväliseen kauppaan liittyvät tavaroiden ja palvelujen myynnit, esim. veroton myynti diplomaateille ja kansainvälisille järjestöille.\"},\"pempty\":{\"label\":\"Arvonlisäveroa ei määritetty\"}},\"vatPercentsTable\":{\"taxableAmountInPercent\":\"Verollinen summa prosenteittain\",\"vatRate\":\"Verokanta\",\"exemptFromTaxation\":\"Veroton\",\"tax\":\"Vero\",\"taxable\":\"Verollinen\"},\"date\":\"Päivämäärä\",\"entry\":{\"rowAccounting\":\"Tiliöinti\",\"openRowAccounting\":\"Avaa\",\"closeRowAccounting\":\"Sulje\",\"showAccountingPreview\":\"Näytä laskelman tiliöinti\",\"debetAccountNumber\":\"Debet-tili\",\"creditAccountNumber\":\"Kredit-tili\",\"accountNumberPlaceholder\":\"Käytetään oletustiliä\",\"rulesetSelection\":{\"account\":\"Tili\",\"description\":\"Kuvaus\",\"error\":\"Virhe\",\"targetCoANotFound\":\"Oletustilikarttaa ei löytynyt\",\"selectTargetCoA\":\"Valitse tilinumero\"},\"rowAccountingPreview\":{\"targetCoA\":\"Tilikartta\",\"error\":\"Virhe\",\"accountingPreviewFailed\":\"Tiliöintiä ei voitu näyttää\"}}},\"receiptUrlAddress\":\"Kuitin URL-osoite\",\"unionPaymentLabel\":\"Jäsenmaksu\",\"raksaInfo\":\"Käytössä toistaiseksi vain näissä palveluissa: Rakennusliitto\",\"percentOfSalary\":\"Prosenttia palkasta\",\"unionPaymentCount\":\"Jäsenmaksun määrä\",\"underTaxSalary\":\"Ennakonpidätyksen alainen palkka\",\"fillUnionPaymentInformation\":\"Täytä ammattiyhdistyksen nimi ja pankkitili, jos sinulla on käytössä maksuaineiston luonti. Viitetiedon voit syöttää käsin tai käyttää automaattisesti palkanmaksukuukauden ja hetun:n perusteella luotua viitenumeroa.\",\"unionLabel\":\"Ammattiyhdistys\",\"unionIbanLabel\":\"Pankkitili (iban) maksun luontia varten\",\"unionReferenceNumberLabel\":\"Pankkiviite maksun luontia varten\",\"foreclosureKindLabel\":\"Summan määräytyminen\",\"foreclosurePeriodLengthLabel\":\"Palkanmaksukauden pituus\",\"foreclosureprotectedPortionBaseLabel\":\"Velallisen suojaosuus\",\"foreclosureprotectedPortionDependantLabel\":\"Suojaosuuden lisä/huollettava\",\"foreclosuredependantsCountLabel\":\"Huollettavien määrä\",\"foreclosureincomeFromOtherSourcesLabel\":\"Muualta saatu tulo/kk\",\"foreclosureadditionalAmountLeftToDebtorLabel\":\"Velalliselle jätettävä määrä/kk\",\"foreclosureReferenceNumberInfo\":\"Täytä pankkiviitetiedot, jos sinulla on käytössä maksuaineiston luonti.\",\"foreclosureReferenceNumberLabel\":\"RF-pankkiviite maksun luontia varten\",\"hourlySalaryWithWorkingTimeCompensationRowLabel\":\"Lisä\",\"totalWorkerPaymentKindLabel\":\"Summan sisältämät erät\",\"totalWorkerSumLabel\":\"Summa\",\"totalWorkerCalculationRowTypeLabel\":\"Palkkalaji\",\"totalWorkerCalculationMessage\":\"Palkkarivin kuvaus\",\"WorkingTimeCompensationKind\":\"Tuntipohjainen korvaus\",\"hourlySalaryWithWorkingTimeCompensationRowMessageLabel\":\"Lisän kuvaus\",\"hourlySalaryWithWorkingTimeCompensationRowCountLabel\":\"Lisätunnit\"},\"irRows\":{\"headerIrCode\":\"Tulorekisteri-koodi\",\"headerRowDescription\":\"Rivin kuvaus\",\"headerCalc\":\"Laskelma\",\"headerSum\":\"Summa\",\"updateCalc\":\"Päivitä laskelma\",\"addNewRow\":\"Lisää uusi rivi\",\"chosenRowInfo\":\"Valitun rivin tiedot\",\"chooseRowOrAddNew\":\"Valitse rivi talukosta yllä tai lisää uusi nähdäksesi yksityiskohdat tässä.\",\"basicInfo\":\"Perustiedot\",\"textAndType\":\"Teksti ja tyyppi\",\"typeLabel\":\"Tyyppi\",\"messageLabel\":\"Viesti\",\"groupingLabel\":\"Ryhmittely\",\"baseSalary\":\"Peruspalkka\",\"benefits\":\"Luontoisedut\",\"deductions\":\"Vähennykset\",\"disabled\":\"Ei käytössä\",\"expenses\":\"Kulukorvaukset\",\"otherNoPayment\":\"Muu - ei maksua\",\"salaryAdditions\":\"Palkan lisät\",\"totals\":\"Summat ja ryhmittelyt\",\"creditTransferLabel\":\"Maksu asiakasvaratilille\",\"payment\":\"Maksetaan\",\"deduction\":\"Vähennetään\",\"noPayment\":\"Ei maksua\",\"calc\":\"Laskelma\",\"countLabel\":\"Määrä\",\"unitLabel\":\"Yksikkö\",\"priceLabel\":\"Hinta\",\"totalLabel\":\"Yhteensä\",\"carBenefitInfo\":\"Autoedun lisävalinnat\",\"carBenefitInfoHtml\":\"<strong>HUOM:</strong> Muistathan lisätä myös rivin<br />'Autoedusta peritty korvaus (401)'.\",\"carBenefitTypeLabel\":\"Autoedun tyyppi\",\"carBenefitAgeGroupLabel\":\"Ikäryhmä\",\"carBenefitKilometersLabel\":\"Kilometrit\",\"carBenefitEmissionsValueLabel\":\"Auton päästöarvo (0-100)\",\"dailyAllowanceAdditionalSelections\":\"Päivärahan lisävalinnat\",\"dailyAllowanceTypeLabel\":\"Päivärahan tyyppi\",\"mealBenefitAdditionalSelections\":\"Ravintoedun lisävalinnat\",\"mealBenefitTaxInfo\":\"Valitse, jos työntekijältä peritty korvaus vastaa verotusarvoa.\",\"mealBenefitIsTaxValueLabel\":\"Vastaa verotusarvoa\",\"irFlagsInfo\":\"Lisävalinnat ja ansaintakausi\",\"irFlagsLabel\":\"Lisävalinnat\",\"negativeSupportedLabel\":\"Miinusmerkkinen arvo\",\"allowed\":\"Sallittu\",\"notAllowed\":\"Ei sallittu\",\"earningPeriod\":\"Ansaintakausi\",\"earningPeriodInfo\":\"Ansaintakausi (tulon ansainta-/kertymä aika) voi olla eri kuin palkanmaksukausi. Ansaintakausi on ajanjakso, jolta tulo on kertynyt. Ansaintakausi voi olla pidempi tai lyhyempi kuin palkanmaksukausi, esimerkiksi vuoden pituinen tai pidempi.\",\"earningPeriodStartDateLabel\":\"Ansaintakauden alkamispäivä\",\"earningPeriodEndDateLabel\":\"Ansaintakauden päättymispäivä\",\"taxAndSideCosts\":\"Ennakonpidätys ja vakuutukset\",\"tax\":\"Ennakonpidätys\",\"withheld\":\"Pidätetään\",\"deductionAlt\":\"Vähennys\",\"notwithheld\":\"Ei pidätystä\",\"socialSecurityPayment\":\"Maksettava sosiaalivakuutusmaksu\",\"toBePaid\":\"Maksetaan (oletus)\",\"occupationPension\":\"Työeläkemaksu\",\"insurancePayment\":\"Tapaturmavak. maksu\",\"unemploymentInsurancePayment\":\"Työttömyysvakuutusmaksu\",\"healtInsurancePayment\":\"SAVA-maksu\",\"insuranceInformationAllowed\":\"Vakuutustiedolle ei voi asettaa poikkeusta tälle tietotyypille\",\"IrInsuranceExceptions\":\"Vakuutuksen poikkeukset\",\"textAndIncomeType\":\"Teksti ja tulolaji\",\"incomeTypeLabel\":\"Tulolaji\",\"paymentToCreditTransferLabel\":\"Maksu asiakasvaratilille\"}},\"CalcRowTypeComponent\":{\"rowType\":\"Rivin päätyyppi\",\"rowDescription\":\"Kuvaus\",\"rowTypeEn\":\"type\",\"rowKind\":\"Alalaji\",\"rowKindEn\":\"kind\",\"wageType\":\"Palkkalaji\"},\"CalcRowDocumentationComponent\":{\"noExamplesForRowType\":\"Tälle palkkalajille ei ole esimerkkejä\",\"noExamplesForRowTypeSubtype\":\"Valitun palkkalajin alalajille ei ole esimerkkejä\"},\"ODataImportComponent\":{\"heading\":\"Tietojen tuonti\",\"step1\":{\"pasteFromDesktop\":\"Liitä työpöydältä\",\"downloadFile\":\"Lataa tiedosto\",\"copyExcelFileFromClipboard\":\"Kopioi Excel-taulukko leikepöydältä (COPY-PASTE)\"},\"step2\":{\"error\":\"Tiedoissa on virheitä\",\"emptyRow\":\"tyhjää riviä\",\"chooseMaterial\":\"Valitse aineisto\",\"chooseFiletype\":\"Valitse tiedostotyyppi\"},\"step3\":{\"error\":\"Validointi huomasi virheitä, katso rivikohtaiset virheilmoitukset alla.\",\"check\":\"Tarkista\",\"okey\":\"Ok\"},\"step4\":{\"error\":\"Tallennuksessa tapahtui virheitä, katso rivikohtaiset virheilmoitukset alla\",\"okey\":\"Ok\"}},\"ODataExportComponent\":{\"heading\":\"Tietojen vienti\",\"createMaterial\":\"Luo aineisto\",\"rows\":\"riviä\"},\"ActionButtonComponent\":{\"createNewWorker\":\"Luo uusi työntekijä\",\"newWorker\":\"Uusi työntekijä\",\"createWorker\":\"Luo työntekijä\",\"createNewPayroll\":\"Luo uusi palkkalista\",\"createPayroll\":\"Luo palkkalista\",\"newPayroll\":\"Uusi palkkalista\",\"createCalculation\":\"Luo palkkalaskelma\",\"newCalculation\":\"Uusi palkkalaskelma\",\"newCalculationAlt\":\"Uusi laskelma\",\"createNewCalculation\":\"Luo uusi palkkalaskelma\",\"createCalculationForWorker\":\"Luo laskelma työntekijälle\",\"newMessage\":\"Uusi viestiketju\",\"sendTaxcard\":\"Lähetä verokortti\",\"startNewMessage\":\"Aloita uusi viestiketju\",\"addCalcTypes\":\"Lisää laskelmatyyppejä\",\"commonCalc\":\"Yleinen laskuri\",\"historicalCalc\":\"Historiallinen laskuri\",\"sendTaxCard\":\"Lähetä verokortti\",\"error\":\"Virhe: tuntematon toiminta nappulalle\",\"newRepair\":\"Uusi korjaus\"},\"ImportComponent\":{\"dataImport\":\"Tietojen tuonti\",\"pasteFromDesktop\":\"Liitä työpöydältä\",\"downloadFile\":\"Lataa tiedosto\",\"copyExcelFromClipBoard\":\"Kopioi Excel-taulukko leikepöydältä (COPY-PASTE)\",\"step1\":{\"next\":\"Asetukset (seuraava)\"},\"step2\":{},\"step3\":{},\"step4\":{}},\"PayerSummaryComponent\":{\"common\":{\"addScheduling\":\"Ajasta lähetys\",\"removeScheduling\":\"Poista ajastus\",\"cancel\":\"Mitätöi\",\"validate\":\"Validoi\",\"basicInfo\":\"Perustiedot\",\"payer\":\"Maksaja\",\"payerInfo\":\"Ilmoitettavat tiedot\",\"noErrors\":\"Ei virheitä\",\"rowsTitle\":\"Rivit\",\"historyTitle\":\"Historia\",\"calculationsTitle\":\"Palkkalaskelmat\",\"deliveryDataTitle\":\"Aineiston tiedot\",\"deliveryDataCreator\":\"Aineiston muodostaja (Palkkaus.fi)\",\"deliveryDataSender\":\"Aineiston lähettäjä (Palkkaus.fi)\",\"deliveryDataOwner\":\"Aineiston omistaja\",\"payerTitle\":\"Maksajan tiedot\",\"payerAddressTitle\":\"Maksajan osoite\",\"sendFailureTitle\":\"Lähetys epäonnistui\",\"validationErrorText\":\"Ilmoituksella on validointivirheitä eikä sitä voida lähettää. Korjaa virheet ja yritä uudelleen.\",\"replacementFailureText\":\"Ilmoitusta ei voida lähettää korvaavana. Mitätöi ja lähetä uudelleen.\",\"loaderTextSending\":\"Lähetetään...\",\"loaderTextValidating\":\"Validoidaan...\",\"loaderTextWait\":\"Odota...\",\"loaderTextCanceling\":\"Mitätöidään...\",\"loaderTextRemoving\":\"Poistetaan...\"},\"transactions\":{\"incomeTypes\":\"Tulolajit\",\"incomeType\":\"Tulolaji\",\"count\":\"Määrä\"}},\"PayCertificateComponent\":{\"step\":\"Vaihe\",\"choose26Weeks\":\"Valitse 26 viikkoa\",\"choose34Weeks\":\"Valitse 34 viikkoa\",\"clear\":\"Tyhjennä\",\"creatingPayCertificate\":\"Palkkatodistusta luodaan...\",\"payCertificateReadyForDownload\":\"Palkkatodistus on valmis ladattavaksi\",\"open\":\"Avaa\",\"payCertificate\":\"Palkkatodistus\",\"createNewPayCertificate\":\"Luo uusi palkkatodistus\",\"alertHeading\":\"Palkkatodistuksessa on kohtia, jotka vaativat lisähuomiota\",\"wizard\":{\"stepSelectWorkerTitle\":\"Työntekijän valinta\",\"stepSelectPeriodCalcsTitle\":\"Valitse kauden laskelmat\",\"stepAdditionalInfoTitle\":\"Lisätiedot ja tulostettava PDF\"}},\"ServiceModelsComponent\":{\"serviceModel\":\"Palvelumalli\",\"defaultModel\":\"Vakiomalli\",\"nameless\":\"Nimetön\"},\"ServiceModelDetailsComponent\":{\"name\":\"Nimi\",\"basicInfo\":\"Perustiedot\",\"exports\":\"Maksu ja kirjanpito\",\"branding\":\"Brändäys\",\"sitemap\":\"Sivuston rakenne\",\"messaging\":\"Viestintä\",\"i18n\":\"Tekstit\",\"workflow\":\"Työnkulku\",\"irdelivery\":\"Tulorekisterin varmenne\",\"usecases\":\"Räätälöinnit\",\"serviceModelTitle\":\"Palvelumalli\",\"serviceModelId\":\"ID\",\"serviceModelIcon\":\"Palvelumallin ikoni\",\"productPackageTitle\":\"Tuotepaketti\",\"productBasic\":\"Tilitoimisto Basic\",\"productBasicInfo\":{\"html\":\"<p><b>Sisältää tilitoimiston, yrityksen ja työntekijän käyttöliittymät</b></p><p>Ominaisuudet:</p><ul><li>Palkanlaskenta (tilitoimisto)</li><li>Tulorekisteri</li></ul>\"},\"productPro\":\"Tilitoimisto PRO\",\"productProInfo\":{\"html\":\"<p><b>Ominaisuudet Basic-paketin lisäksi</b></p><ul><li>Viestintä</li><li>Aineistonvälitys</li><li>Työnkulun hallinta</li><li>Massanäkymät ja tilitoimistotyökalut</li><li>Automaatio ja ajastus</li><li>Oma brändi (white label)</li></ul>\"},\"productSelfService\":\"Yritys itsepalvelu\",\"productSelfServiceInfo\":{\"html\":\"<p><b>Yritys voi helppokäyttöisellä laskurilla laskea ja maksaa palkat itse.</b></p><p>Ominaisuudet:</p><ul><li>Maksuliikenne (palkat halutessaan yhdellä maksulla)</li><li>Automaattinen tulorekisteri-ilmoitus</li></ul>\"},\"endUserPricing\":\"Loppuasiakkaan hinnoittelu / laskutus\",\"paymentChannelsTitle\":\"Maksukanavat\",\"customPaymentChannels\":\"Räätälöidyt maksukanavat käytössä\",\"defaultChannel\":\"Oletuskanava\",\"accountingTarget\":\"Kirjanpitokohde\",\"accountingTitle\":\"Kirjanpito\",\"customAccounting\":\"Räätälöity kirjanpito käytössä\",\"customCostAccounting\":\"Räätälöidyt laskentakohteet käytössä\",\"customHoliday\":\"Räätälöity lomalaskenta käytössä\",\"customPayStats\":\"Räätälöidyt ansiolaskennat käytössä\",\"defaultTarget\":\"Oletuskohde\",\"webAppTitle\":\"Sivusto\",\"reportingTitle\":\"Tulosteet\",\"customReporting\":\"Räätälöidyt tulosteet käytössä\",\"layoutTemplateId\":\"Ulkoasun tunniste\",\"customReportLogo\":\"Logo (SVG tai data URI)\",\"templateIdPalkkaus\":\"Palkkaus.fi\",\"templateIdNoLogo\":\"Ilman logoa\",\"templateIdLogo\":\"Yrityksen oma logo\",\"templateIdTalenom\":\"Talenom Kevytyrittäjä\",\"templateIdTilijaska\":\"Tilijaska\",\"templateIdTreamer\":\"Treamer\",\"brandingTitle\":\"Palkkaus.fi ulkoasu\",\"sitemapTitle\":\"Navigaatio\",\"hidden\":\"Piilotettu\",\"readOnly\":\"Vain luku\",\"url\":\"Osoite\",\"messagingTitle\":\"Viestintä\",\"messagingActive\":\"Viestitoiminto käytössä\",\"workflowTitle\":\"Työnkulut ja ajastukset\",\"workflowInfo\":{\"html\":\" <p><strong>Tulossa:</strong>Laajemmat mahdollisuudet määrittää työnkulkuja, ajastuksia jne. myös palvelumallissa. Nykyisessä versiossa:</p><ul><li>Ajastukset määritetään yhtiökohtaisesti</li><li>Työnkulkuja voi muokata räätälöinneillä</li></ul>\"},\"customUsecases\":\"Räätälöinnit käytössä\"},\"SigningComponent\":{\"welcome\":\"Palkanlaskennan käyttöönotto\",\"customerAuthorizationIntro\":\"Tilitoimistosi hoitaa palkanlaskennan Palkkaus.fi-palvelun avulla. Palvelun käyttöönottoa varten sinun tulee allekirjoittaa sähköinen valtakirja. Se hoituu helposti tästä pankkitunnuksilla.\",\"heading\":\"Ota palkat käyttöön allekirjoittamalla valtakirja\",\"accountantSigningAlert\":\"Ota palvelu käyttöön rekisteröitymällä tilitoimistona ja aloita hoitamaan asiakkaittesi palkanmaksuja.\",\"accountantSigningSuccessAlert\":\"Sulje tämä ikkuna ja päivitä tilitoimiston rekisteröitymissivu.\",\"accountantMissingCustomersAlert\":\"Sinulla ei vielä ole asiakkaita hoidettavana.\",\"signerInformation\":\"Allekirjoittajan tiedot\",\"name\":\"Nimi\",\"email\":\"Sähköposti\",\"tel\":\"Puhelinnumero\",\"ssNumber\":\"Henkilötunnus\",\"isProcuraLabel\":\"Nimenkirjoitus­oikeus\",\"isProcuraLabelTrue\":\"Minulla on yrityksen / yhdistyksen nimenkirjoitusoikeus.\",\"signBtn\":\"Allekirjoita\",\"attorney\":{\"info\":\"Valtakirjaan tarvittavat tiedot\",\"infoText\":\"Jotta palkanmaksuun liittyviä velvotteita voidaan hoitaa puolestasi, sinun täytyy allekirjoittaa\",\"linkText\":\"oheinen valtakirja\",\"linkTextInfo\":\"Valtakirja pitää allekirjoittaa vain kerran.\",\"signingConfirmationInfo\":\"Kun olet kirjoittanut nimesi ja henkilötunnuksesi ja klikannut pankkisi logoa, siirryt pankkisi verkkopalveluun, jossa sinut tunnistetaan sähköisesti. Tunnistautumisen jälkeen palaat takaisin ja allekirjoitat valtakirjan. Tämän jälkeen palkanlaskenta on aktivoitu.\"},\"salaryPaymentContactInformation\":\"Yhteystiedot palkanmaksuasioissa\",\"salaryPaymentContanctInformationToAuthoritiesInfo\":\"Yhteystiedot voidaan välittää viranomaisille.\",\"contactPersonLabel\":\"Yhteyshenkilö\",\"contactPersonLabelTrue\":\"Olen myös yhteyshenkilö yrityksen palkanmaksuasioissa.\",\"postalAddress\":\"Postiosoite\",\"streetAddress\":\"Katuosoite\",\"postalNumber\":\"Postinumero\",\"postOffice\":\"Postitoimipaikka\",\"authoritativeQuestions\":{\"title\":\"Viranomaisten kysymykset\",\"politicalPerson\":\"Oletko poliittisesti vaikutusvaltainen henkilö (PEP)?*\",\"politicalPersonPopover\":\"Jos olet jossain toisessa valtiossa poliittisesti vaikutusvaltainen henkilö tai lähipiiriisi kuuluu poliittisesti vaikutusvaltainen henkilö (Politically Exposed Person, PEP), laki edellyttää, että kerrot siitä meille ennen palvelun käytön aloittamista. Palvelun käyttöön tämä ei vaikuta.  Poliittisesti vaikutusvaltaiseksi henkilöksi ei Suomessa katsota suomalaista poliitikkoa, joka toimii Suomessa.\",\"companyOwnership\":\"Omistaako joku henkilö vähintään 25% tästä yrityksestä suoraan tai välillisesti?*\",\"companyOwnershipPopoverTitle\":\"Tosiasialliset edunsaajat eli omistajat\",\"companyOwnershipPopover\":\"Lain mukaan tosiasiallisella edunsaajalla tarkoitetaan henkilöä, joka omistaa yli 25% yrityksen osakkeiden tai osuuksien tuottamasta äänimäärästä tai jolla on muutoin määräysvalta yrityksessä. Kysymme tätä tietoa, koska Finanssivalvonta ja rahanpesulaki velvoittavat meitä tuntemaan asiakkaamme.\",\"shareHolderTitle\":\"Yrityksen omistajat\",\"shareHolderText\":\"Seuraavat henkilöt omistavat vähintään 25% yhtiön osakkeista suoraan tai välillisesti\",\"shareHolder\":\"Omistaja\",\"whyAsked\":\"Miksi kysymme näitä tietoja?\",\"whyAskedInfo\":\"Palkkaus.fi on maksupalvelun tarjoajia koskevassa Finanssivalvonnan (Fiva) rekisterissä. Laki edellyttää meiltä asiakkaan tuntemista. Siksi joudumme kysymään sinulta vielä seuraavat tiedot. Tiedot eivät ole julkisia ja voimme luovuttaa niitä vain voimassaolevan lainsäädännön velvoittamissa rajoissa.\",\"chooseMobileBankingAndSign\":\"Valitse verkkopankkisi ja allekirjoita valtakirja\",\"error\":\"(pakollisia tietoja puuttuu)\",\"usePersonalMobileBanking\":\"Et voi käyttää yrityksen tai yhdistyksen verkkopankkitunnuksia valtakirjan allekirjoittamiseen. Sinun täytyy käyttää henkilökohtaisia verkkopankkitunnuksiasi.\",\"bySigningAcceptTermsOfUse\":{\"html\":\"Allekirjoittamalla valtakirjan hyväksyt samalla <a href=\\\"https://www.palkkaus.fi/kayttoehdot/\\\" target=\\\"_blank\\\">palvelun käyttöehdot</a>.\"},\"downloadPDF\":\"Lataa PDF\",\"updateForPreview\":\"Päivitä tiedot esikatseluun\",\"previewAttorney\":\"Valtakirjan esikatselu\"},\"dialog\":{\"header\":\"Digitaalinen allekirjoitus\",\"descr\":\"Siirrytään allekirjoitukseen\"},\"thankyou\":{\"title\":\"Allekirjoitus onnistui\",\"instructions\":\"Olet nyt allekirjoittanut sähköisen valtakirjan. Tilitoimisto voi tämän jälkeen ottaa palvelun puolestasi käyttöön.\",\"adv1\":\"Jo yli 5000 yritystä käyttää Palkkaus.fi-palvelua!\"},\"accountantSigningComponent\":{\"heading\":\"Ota palkanlaskenta käyttöön tilitoimistollesi\",\"info1\":\"Palkanlaskenta hoidetaan Palkkaus.fi-ohjelmistolla. Jotta ohjelmisto voi hoitaa palkkoihin liittyvät ilmoitukset ja velvoitteet, se tarvitsee tilitoimistoltasi valtakirjan.\",\"info2\":\"Seuraavaksi sinulta pyydetään tarvittavat tiedot sähköistä valtakirjaa varten. Tarkista ne huolellisesti ja allekirjoita valtakirjan lopuksi. Valtakirjan voi allekirjoittaa henkilö, jolla on tilitoimiston nimenkirjoitusoikeus.\",\"startSigningProcess\":\"Aloita käyttöönotto\",\"reloadPage\":\"Lataa sivu uudelleen\"}},\"EarningsPaymentComponent\":{\"common\":{\"addScheduling\":\"Ajasta lähetys\",\"removeScheduling\":\"Poista ajastus\",\"cancel\":\"Mitätöi\",\"validate\":\"Validoi\",\"basicInfo\":\"Perustiedot\",\"noErrors\":\"Ei virheitä\",\"insurances\":\"Vakuutukset\",\"absences\":\"Poissaolot\",\"rows\":\"Rivit\",\"history\":\"Historia\",\"readOnlyInfo\":\"Ilmoitus on lukutilassa. Sitä ei voi tallentaa tai lähettää tulorekisteriin.\",\"sendFailureTitle\":\"Lähetys epäonnistui\",\"validationErrorText\":\"Ilmoituksella on validointivirheitä eikä sitä voida lähettää. Korjaa virheet ja yritä uudelleen.\",\"replacementFailureText\":\"Ilmoitusta ei voida lähettää korvaavana. Mitätöi ja lähetä uudelleen.\",\"loaderTextSending\":\"Lähetetään...\",\"loaderTextValidating\":\"Validoidaan...\",\"loaderTextWait\":\"Odota...\",\"loaderTextCanceling\":\"Mitätöidään...\",\"loaderTextRemoving\":\"Poistetaan...\",\"loaderTextFetchingCalc\":\"Haetaan laskelmaa...\",\"loaderTextSaving\":\"Tallennetaan...\",\"time\":\"klo\",\"worker\":\"Työntekijä\",\"selectAbsences\":\"Valitse poissaolot raportille\",\"calcRows\":\"Laskelman rivit\",\"allRows\":\"Kaikki rivit\"},\"statuses\":{\"new\":{\"text\":\"Uusi\",\"smallText\":\"Palkkatietoilmoitusta ei ole vielä lähetetty/ajastettu\"},\"succeeded\":{\"text\":\"Onnistuneesti lähetetty\"},\"canceled\":{\"text\":\"Mitätöity\",\"smallText\":\"Voit lähettää ilmoituksen uudelleen\"},\"error\":{\"text\":\"Virheellinen\",\"sending\":\"Tulorekisterin lähetys\",\"gaveError\":\"antoi virheen\"},\"invalid\":{\"text\":\"Tarkastettava\",\"smallText\":\"Tarkista alla olevat virheet ennen lähetystä\"},\"scheduled\":{\"text\":\"Ajastettu\"}},\"substitutePayer\":{\"employerIdType\":{\"title\":\"Varsinaisen työnantajan tunnisteen tyyppi\"},\"employerIdCode\":{\"title\":\"Varsinaisen työnantajan tunniste\"},\"employerIdCountryCode\":{\"title\":\"Varsinaisen työnantajan maakoodi\"},\"employerIdCountryName\":{\"title\":\"Varsinaisen työnantajan maan nimi\"}},\"deliveryData\":{\"tabHeading\":\"Aineisto\",\"title\":\"Aineiston tiedot\",\"timestamp\":\"Aineiston muodostamishetki\",\"source\":\"Tietolähde\",\"deliveryId\":\"Aineiston omistajan (maksajan) aineistoviite\",\"productionEnvironment\":\"Tuotantoympäristö\",\"deliveryDataOwner\":\"Aineiston omistaja\",\"ownerIdType\":\"Tunnisteen tyyppi\",\"countryCode\":\"Maakoodi\",\"deliveryDataCreator\":\"Aineiston muodostaja (Palkkaus.fi, Y-tunnus)\",\"deliveryDataSender\":\"Aineiston lähettäjä (Palkkaus.fi, Y-tunnus)\",\"contactPersons\":\"Yhteyshenkilöt\"},\"paymentPeriod\":{\"title\":\"Palkanmaksukausi\",\"paymentDate\":\"Suorituksen maksupäivä tai muu ilmoituspäivä\\r\",\"startDate\":\"Alkupäivä\",\"endDate\":\"Loppupäivä\"},\"payer\":{\"tabHeading\":\"Maksajan tiedot\",\"title\":\"Maksajan tiedot\",\"payerId\":\"Tunniste\",\"payerIdType\":\"Tunnisteen tyyppi\",\"countryCode\":\"Maakoodi\",\"companyName\":\"Yrityksen nimi\",\"lastName\":\"Sukunimi\",\"firstName\":\"Etunimi\",\"birthDate\":\"Syntymäaika\"},\"address\":{\"title\":\"Maksajan osoite\",\"co\":\"c/o-tarkenne\",\"street\":\"Katuosoite\",\"poBox\":\"PL\",\"postalCode\":\"Postinumero\",\"postOffice\":\"Postitoimipaikka\",\"countryCode\":\"Maakoodi\",\"countryName\":\"Maan nimi\"},\"incomeEarner\":{\"tabHeading\":\"Tulonsaaja\",\"title\":\"Tulonsaajan tiedot\",\"earnerId\":\"Tulonsaajan tunniste\",\"earnerIdType\":\"Tunnisteen tyyppi\",\"countryCode\":\"Maakoodi\",\"companyName\":\"Yrityksen nimi\",\"lastName\":\"Sukunimi\",\"firstName\":\"Etunimi\",\"birthDate\":\"Syntymäaika\",\"gender\":\"Sukupuoli\",\"addressTitle\":\"Tulonsaajan osoite\",\"addressType\":\"Osoitteen tyyppi\",\"street\":\"Katuosoite\",\"postalCode\":\"Postinumero\",\"postOffice\":\"Postitoimipaikka\",\"addressCountryCode\":\"Maakoodi\",\"professionTitle\":\"Ammattiluokka tai -nimike\",\"noProfession\":\"Ei ammattiluokkaa\",\"professionType\":\"Ammattiluokan tai nimikkeistön tyyppi\\n\",\"professionCode\":\"Ammattiluokan tai nimikkeistön tunniste\\r\\n\",\"professionTitleLabel\":\"Ammattinimike\"},\"pensionAndInsurance\":{\"tabHeading\":\"Työeläke- ja tapaturmavakuutus\"},\"pensionInsurance\":{\"title\":\"Työeläkevakuutus\",\"noPension\":\"Ei tyeläkevakuutusta\",\"pensionActCode\":\"Tieto työeläkevakuutuksesta\",\"pensionProvIdCode\":\"Työeläkelaitoksen yhtiötunnus\",\"pensionPolicyNo\":\"Eläkejärjestelynumero\"},\"accidentInsurance\":{\"title\":\"Työtapaturmavakuutus\",\"noAccidentInsurance\":\"Ei työtapaturmavakuutusta\"},\"insuranceExceptions\":{\"title\":\"Muut\",\"insuranceException\":\"Muut vakuuttamistiedot\"},\"incomeEarnerOther\":{\"insurancePayment\":\"Maksun tiedot\",\"insurancePaymentType\":\"Maksutiedon tyyppi\",\"insurancePaymentRef\":\"Maksun viitenumero\",\"insurancePaymentSpecifier\":\"Maksun tarkenne \"},\"professions\":{\"caption\":\"Ammattiluokka\",\"type\":\"Ammattiluokan tai nimikkeistön tyyppi\",\"code\":\"Ammattiluokan tai nimikkeen tunniste\",\"title\":\"Ammattinimike (vapaamuotoinen)\"},\"transactions\":{\"code\":\"Koodi\",\"count\":\"Määrä\"}},\"EmploymentTaxcardsComponent\":{\"checkTaxCard\":\"Tarkista verokortti\",\"waitingApproval\":{\"title\":\"Uusi verokortti!\",\"approveBtnLong\":\"Katso ja tarkista\",\"approveBtn\":\"Hyväksy\",\"rejectBtnLong\":\"Ohita\",\"rejectBtnSpan\":\"(oma verokortti)\",\"rejectBtn\":\"Hylkää\",\"notFullCard\":{\"alertText\":{\"html\":\"Työntekijä <strong>{{name}}</strong> on ladannut uuden verokortin\",\"span2\":\"ja toivoo, että sitä käytetään palkanmaksuun.\"},\"alertTextUnconfirmed\":{\"html\":\"<strong>HUOM:</strong>\\nVerokortti sisältää henkilötietoja, joita saat katsoa vain, jos aiot todella maksaa palkkaa ko. henkilölle.\\nTieto verokortin avaamisesta välittyy työntekijälle.\"}},\"fullCard\":{\"alertText\":{\"html\":\"HUOM: Työntekijä <strong>{{ name }}</strong> on ladannut tämän verokortin ja toivoo, että sitä käytetään palkanmaksuun, mutta et ole vielä hyväksynyt sitä.\"}}},\"taxCardIncomeLog\":{\"addPaidSalaries\":\"Lisätäänkö jo maksetut palkat verokortille\",\"addSalaries\":\"Lisää palkat\",\"addSalariesToTaxCard\":\"  HUOM: Verokortin voimassa-ajalla {{ validity }} on jo maksettuja palkkoja. Haluatko lisätä nämä palkat verokorttiin?\",\"addElseWherePaidSalary\":\"Lisää muualla maksettu palkka\"},\"taxCardMinPercent\":{\"minimumPercent\":\"Minimiprosentti\",\"lead\":{\"html\":\"Suosittelemme, että työntekijä päivittää verokorttinsa suoraan <a href='https://www.vero.fi/OmaVero' target='_blank'>Omavero-palvelussa</a> ja että <strong>automaattinen verokortin haku</strong> otetaan käyttöön työntekijän (jaettu verokortti) taityönantajan toimesta. Näin verokortti on aina ajantasainen.\"},\"biggerTaxPercentThanInTaxCard\":\"Työntekijä voi kuitenkin myös pyytää, että työnantaja vähentää palkasta suuremman ennakonpidätyksen kuin mitä verokortin perusteella pidätettäisiin. Tämä on tyypillistä, jos työntekijällä on tuloja, joita ei ole merkitty verokorttiin tai tuloja on useiltatyönantajilta.\",\"taxPercentMinimum\":\"Ennakonpidätykselle voi syöttää tällaisen minimiprosentin alla.\"},\"taxCardNew\":{\"addTaxCard\":\"Lisää verokortti\"},\"workerEdit\":{\"updateWorkerInfo\":\"Päivitä vain työntekijän tiedot\",\"updateWorkerInfoAndSalaryRows\":\"Päivitä työntekijän tiedot ja palkkarivit\",\"addSalaryDefaults\":\"Lisää oletuspalkkarivit\"}},\"HouseholdUsecaseComponent\":{\"datePickerPlaceHolder\":\"Heti: 1-3 päivää maksusta\",\"base\":{\"dailyExpenses\":\"Työkalukorvaus (€/pv)\",\"dailyTravelExpenses\":\"Matkakorvaus (€/pv)\",\"dailyTravelExpensesKm\":\"Matkat kotoa työpaikalle (km/pv)\",\"defaultPriceLabel\":\"Hinta\",\"eurPerH\":\"€/h\",\"eurPerMonth\":\"€/kk\",\"expensesCustom\":\"Työkalu- ja matkakorvaus\",\"hourCount\":\"Tuntien määrä\",\"hoursPerPriceWithSunday\":\" +100% sunnuntailisä\",\"householdDeduction\":\"Kotitalousvähennys\",\"householdDeductionTrue\":\"Kyllä: Haluan, että palvelu tekee kotitalousvähennysilmoituksen puolestani\",\"householdDeductionFalse\":\"Ei: En halua, että palvelu tekee kotitalousvähennysilmoitusta puolestani\",\"isHouseholdDeductible\":\"- kotitalousvähennys\",\"isSunday\":\"Sunnuntai tai pyhäpäivä?\",\"longInfoText\":{\"html\":\"<p>Laskelma ehdottaa kotitalousvähennystä työn tyypin mukaan, mutta ei automaattisesti laske lomakorvauksia yms. lisiä.</p><p>Voit lisätä tarvittavat lisät riveinä seuraavasta näkymästä. Lue lisää työnantajan velvollisuuksista osoitteesta Palkkaus.fi.</p><p>Teemme puolestasi kotitalousvähennysilmoituksen olettamuksella, että työ on tehty kotona tai vapaa-ajan asunnolla. Jos haluat tehdä ilmoituksen itse, poista valinta.</p>\"},\"noByTes\":\"TES-taulukon perusteella\",\"noCalcAuto\":\"Lasketaan automaattisesti\",\"periodText\":\"Palkka ajalta (työpäivien määrä)\",\"pleaseInput\":\"Syötä\",\"pricePerMonth\":\" / kk\",\"salaryKind\":\"Palkkatyyppi\",\"salaryMessage\":\"Viesti palkkalaskelmaan\",\"shortInfoText\":{\"html\":\"Yleinen palkkalaskelma ilman TES-sääntöjä.\"},\"tesInclusions\":\"TES-erät\",\"updatingCalc\":\"Päivitetään laskelmaa\",\"workDescription\":\"Työn kuvaus\",\"yesAgreedPerDay\":\"Erikseen sovittu (per päivä)\",\"yesAgreedTotalPayment\":\"Sovittu kokonaiskorvaukseen\",\"taxDeductionCategories\":\"Työn tyyppi (vähennyksen peruste)\",\"totalEmployerPaymentAlert\":\"HUOM: Kokonaiskustannus lasketaan huomioiden yo. kotitalousvähennysvalinta. Voit laskea kokonaiskustannuksen ensin ilman kotitalousvähennystä ja sen jälkeen lisätä kotitalousväehnnyksen erikseen.\",\"salaryAlert\":\"Valitse palkkatyypiksi urakkapalkka, jos olet sopinut korvauksen työstä kiinteänä summana eikä aikaan sidottuna (vrt. esim. tuntipalkka). Voit lisäksi valita lisätäänkö urakkapalkkaan TES-lisät vai sisältyykö ne sovittuun palkkaan. Palkan päälle lasketaan pakolliset sivukulut.\"},\"childCare\":{\"childCareSubsidy\":\"Yksityisen hoidon tuki\",\"isChildCareSubsidy\":\"€ yksityisen hoidon tuki \",\"footnoteIschildCareSubsidy\":\"Sivukulut lasketaan kokonaissummasta. Laskuri olettaa, että maksat palkan loma-ajalta erikseen. Voit myös lisätä loma-ajan palkan rivinä laskuriin. Kotitalousvähennystä ei voi käyttää, jos yksityisen hoidon tuki on mukana palkassa.\",\"footnoteIsNotchildCareSubsidy\":\"Laskuri olettaa, että maksat palkan loma-ajalta erikseen. Voit myös lisätä loma-ajan palkan rivinä laskuriin.\",\"longInfoTextIfchildCareSubsidy\":{\"html\":\"<p>Laskurilla voit laskea pitkäaikaisen lastenhoitajan palkan.</p><p>Laskuri ottaa huomioon myös yksityisen hoidon tuen. Tuki vaikuttaa sivukuluihin, vaikka Kela maksaa sen suoraan työntekijälle. Tuen kanssa ei voi samaan aikaan käyttää kotitalousvähennystä.</p>\"},\"longInfoTextIfNotchildCareSubsidy\":{\"html\":\"<p>Laskurilla voit laskea pitkäaikaisen lastenhoitajan palkan.</p><p>Jos valitset alla, teemme puolestasi kotitalousvähennysilmoituksen olettamuksella, että työ on tehty kotona tai vapaa-ajan asunnolla. Jos haluat tehdä ilmoituksen itse, poista valinta.</p>\"},\"shortInfoText\":{\"html\":\"Oma lastenhoitaja kotona.\"},\"wageInAdditionToBenefits\":\"Rahapalkka tuen lisäksi\",\"inAdditionToBenefits\":\" tuen lisäksi\",\"workerTotalPayment\":\"Työntekijän palkka yhteensä:\"},\"cleaning\":{\"contractLastedLessThanYear\":\"Työsuhde kestänyt alle vuoden\",\"footnote\":{\"html\":\"HUOM: Sinun tulee maksaa myös loma-ajan palkka ja sen lisäksi 50% lomarahaa loma-ajan palkasta. Voit lisätä ne riveinä tähän laskelmaan tai tehdä erillisen palkanmaksun.<a href='https://www.palkkaus.fi/abc/siivous-ja-kiinteistoalan-tyoehtosopimus/' target='_blank'>Lue lisää täältä</a>.\"},\"fullTime\":\"Työtä yli 14pv/kk tai yli 35h/kk\",\"longInfoText\":{\"html\":\"<p>Laskuri laskee automaattisesti lomakorvauksen maksettavaksi prosentteina palkasta.</p><p>Jos työtä tehdään yli 14pv/kk tai yli 35h/kk, pitää työntekijälle antaa mahdollisuus pitää loma. Tällöin maksetaan loma-ajalta palkka (jäljelle jäänyt osuus maksetaan työsuhteen päättyessä).</p>\"},\"shortInfoText\":{\"html\":\"Kodin tai vapaa-ajan asunnon siivous ja kunnossapito. Ilmoitetaan kotitalousvähennykseen.\"}},\"construction\":{\"dailyExpenses\":\"Työkalukorvaus (€/pv)\",\"dailyTravelExpenses\":\"Matkakorvaus (€/pv)\",\"dailyTravelExpensesKm\":\"Matkat kotoa työpaikalle (km/pv)\",\"expensesCustom\":\"Työkalu- ja matkakorvaus\",\"longInfoText\":{\"html\":\"<p>Lisäksi työehtosopimuksissa on määritelmät työkalukorvauksista ja matkakorvauksista. Laskurissa nämä voi laskea TES-taulukoiden mukaan tai vaihtoehtoisesti erikseen työntekijän kanssa sovittuina päiväkorvauksina.</p><p>Teemme puolestasi kotitalousvähennysilmoituksen olettamuksella, että työ on tehty kotona tai vapaa-ajan asunnolla. Jos haluat tehdä ilmoituksen itse, poista valinta.</p>\"},\"noByTes\":\"TES-taulukon perusteella\",\"noCalcAuto\":\"Lasketaan automaattisesti\",\"shortInfoText\":{\"html\":\"<p>Laskuri huomioi yleissitovat työehtosopimukset rakennusalalla.<br>TES-eriä ovat lomakorvaus ja erillinen palkan osa (entinen \\\"pekkaset\\\").</p>\"},\"subtitlePlusExpenses\":\" + TES-lisät ja korvaukset\",\"tesInclusions\":\"TES-erät\",\"yesAgreedPerDay\":\"Erikseen sovittu (per päivä)\",\"yesAgreedTotalPayment\":\"Sovittu kokonaiskorvaukseen\",\"taxFreeMilageAlert\":\"HUOM: Voit lisäksi tai vaihtoehtoisesti maksaa verottomia kilometrikorvauksia lisäämällä rivin 'Kilometrikorvaus, oma auto'. Ne ilmoitetaan verottajalle todellisten kilometrien mukaan, ei päiväkohtaisena.\"},\"mll\":{\"longInfoText\":{\"html\":\"Perhe maksaa lasten hoitajalle palkkana 9,50 €/tunti (sunnuntaina 19,00). Tämä on kokonaiskorvaus, joka sisältää lomakorvauksen. Tunnit ilmoitetaan puolen tunnin tarkkuudella, minimi 2 tuntia. Yhdellä hoitajalla voi olla hoidettavana enintään neljä lasta.<br>Huom! Kello 23 jälkeen perheen tulee huolehtia hoitajan turvallisesta kotimatkasta joko tarjoamalla autokyyti tai kustantamalla taksi.<br>Teemme puolestasi kotitalousvähennysilmoituksen olettamuksella,että työ on tehty kotona tai vapaa-ajan asunnolla. Jos haluat poistaa kotitalousvähennyksen tai tehdä ilmoituksen itse, käytä \\\"Muu lastenhoito\\\"-laskuria.\"},\"shortInfoText\":{\"html\":\"<p>Palkka maksetaan Mannerheimin Lasten&shy;suojelu&shy;liiton suo&shy;si&shy;tus&shy;ten mukaan.</p>\"},\"useCustomPrice\":\"Muu kuin MLL:n palkkasuositus (9,50€/h)?\"},\"santaClaus\":{\"agreedPayment\":\"Sovittu palkkiosumma\",\"fixedPaymentAtChristmas\":\"Kertakorvaus jouluaattona.\",\"longInfoText\":{\"html\":\"Kotitalousväehnnystä joulupukin palkkiosta ei verottajan mukaan saa.\"},\"shortInfoText\":{\"html\":\"Joulupukkikin ansaitsee laillisen palkan. Palkkaus.fi ja Nordea tarjoavat sen tänä jouluna <strong>ilman palvelumaksua</strong>\"}},\"ui\":{\"backToSelection\":\"Takaisin valintaan\",\"changeSelection\":\"Vaihda työn tyyppi\",\"selectionTitle\":\"Valitse työn tyyppi\",\"salaryDate\":\"Palkkapäivä\",\"salaxyDateInfo\":{\"html\":\"Päivä, jolloin palkka on työntekijän tilillä. Tyhjä päivä tarkoittaa <strong>heti</strong>: Käytännössä 0-4 päivää maksutavasta riippuen.\"}}},\"MessageThreadComponent\":{\"ui\":{\"newMessageThreadBtn\":\"Aloita uusi viestiketju\"},\"newMessage\":{\"headerTitle\":\"Aloita uusi viestiketju\",\"headerDescription\":{\"html\":\"Aloita uusi viestiketju, kun haluat olla yhteydessä palkanlaskijaasi. Voit liittää viestiin myös tiedostoja. Viestit kulkevat tietoturvallisesti ja viestiketju jää talteen.\"}},\"messageContent\":{\"notSelected\":\"(Työntekijää ei ole valittu)\",\"salary\":\"Palkka\",\"payment\":\"Maksu\",\"report\":\"Palkkalaskelma (PDF)\",\"payroll\":\"Palkkalista\",\"editPay\":\"Muokkaa / maksa\",\"showCalc\":\"Näytä laskelma\",\"toEmail\":\"Ilmoitus sähköpostiin\"},\"error\":\"Viestiketjun lataamisessa tapahtui virhe.\",\"salaryDate\":\"Palkkapäivä\",\"read\":\"luettu\",\"unread\":\"ei luettu\",\"markAsReadBtn\":\"Merkitse luetuksi\",\"markAsUnreadBtn\":\"Merkitse lukemattomaksi\",\"sendtoEmailBtn\":\"Lähetä ilmoitus sähköpostiin\",\"reloadBtn\":\"Lataa uudelleen\",\"handledInfo\":\"Palkanlaskija / tilitoimisto on merkinnyt viestiketjun käsitellyksi.\",\"title\":\"Otsikko\",\"receiver\":\"Vastaanottaja\",\"subject\":\"Aihe\",\"replyDate\":\"Toivon vastausta mennessä...\",\"subjectOptionSalary\":\"Palkanmaksu\",\"subjectOptionOther\":\"Muu palkka-asia\",\"writeOrPaste\":\"Kirjoita viesti tai liitä leikepöydältä\",\"fileBtn\":\"Tiedosto\",\"moreFeaturesBtn\":\"Lisätoiminnot\",\"deleteThread\":\"Poista koko ketju\",\"addDraft\":\"Laskelmaluonnos\",\"addPaid\":\"Maksettu laskelma\",\"deleteThreadAlert\":\"Haluatko varmasti poistaa koko viestiketjun\",\"sendNotificationSubject\":\"Uusi viesti palkanlaskennasta -\",\"sendNotificationBody\":\"Hei,\\n\\npalkanlaskija on lähettänyt sinulle viestin.\\n\\nKirjaudu palveluun ja löydät saapuneen viestin viestit-osiosta.\",\"saveNoToField\":\"Viestin vastaanottajaa ei ole määritetty.\",\"uploadFilesSaving\":\"Tallennetaan tiedostoja...\",\"uploadFilesError\":\"Tiedoston tallennus palvelimelle epäonnistui.\",\"addWorkersTitle\":\"Valitse työntekijät\",\"addWorkersLoading\":\"Lisätään työntekijöitä...\",\"addExistingCalcCopy\":\"Valitse maksetut palkat (kopioidaan)\",\"addExistingCalcMove\":\"Valitse luonnokset (siirretään)\",\"addExistingCalcLoading\":\"Lisätään laskelmia...\"},\"MessageThreadsComponent\":{\"title\":\"Otsikko\",\"salaryDate\":\"Palkkapäivä\",\"answered\":\"Vastattu\",\"status\":\"Tila\",\"sender\":\"Lähettäjä\",\"message\":\"Viesti\",\"waiting\":\"Odottaa\",\"pce\":\"kpl\"},\"VarmaBannerComponent\":{\"pensionPopup\":{\"tyel\":{\"title\":\"TyEL-vakuutus puuttuu\",\"html\":\"Yritykselläsi ei ole <b>TyEL-vakuutusta</b> merkittynä tietoihin. Työeläkevakuutus on lain mukaan oltava yrityksellä, kun maksaa työntekijöille palkkaa. <br><br>Haluatko ottaa vakuutuksen Varmalta? Saat vakuutusnumeron suoraan meidän kauttamme verkossa ja työeläkemaksut tulee hoidettua oikein.\",\"btnText\":\"Hanki TyEL yritykselle\"},\"yel\":{\"title\":\"Ota YEL-vakuutus\",\"html\":\"Jos yrityksessä on <b>YEL-yrittäjiä</b>, pitää jokaisella heistä olla oma henkilökohtainen YEL-vakuutus. Yrittäjä tarvitsee yhden YEL-vakuutuksen, jolle maksetaan yrittäjäpalkoista koituvat eläkemaksut.<br><br> Tästä voi ottaa yrittäjälle uuden YEL-vakuutuksen, jos sellaista ei vielä ole. Voit myös siirtää olemassa olevan vakuutuksen Varmaan.\",\"btnText\":\"Ota YEL-vakuutus\"},\"moveTyel\":{\"title\":\"Siirrä TyEL-vakuutus?\",\"html\":\"Yritykselläsi on TyEL-vakuutus {{pensionCompany}}:ssa. Haluatko siirtää sen Varmaan, joka on Palkkaus.fi:n kumppani eläkevakuutuksissa? Se ei maksa mitään ja siirron voi tehdä helposti suoraan ohjelmassa.\",\"btnText\":\"Siirrä TyEL-vakuutus\"}}},\"WorkerListComponent\":{\"registeredUser\":\"Palkkaus.fi rekisteröitynyt käyttäjä\",\"workers\":\"Työntekijät\",\"editWorker\":\"Muokkaa työntekijää\",\"addIban\":\"Lisää tilinumero\",\"showFilters\":\"Näytä suodattimet\",\"okButtonText\":\"Ota käyttöön automaattinen verokortti\",\"infoText\":{\"html\":\"<strong>Automaattinen verokortin haku</strong> <p class='small'>Voit aktivoida automaattisen verokortin työntekijöille, jolloin ohjelma hakee Verohallinnon rajapinnasta ajantasaisen verokortin aina palkanmaksun yhteydessä. Valitse automaattinen verokortti vain työntekijöille, joille aiot maksaa palkkaa. Jos työntekijällä on palkanmaksusta poikkeava verokortti erikoistilanteisiin, voit syöttää sen käsin työntekijän tiedoissa.</p>\"},\"active\":\"Aktiiviset\",\"all\":\"Kaikki\",\"selectAll\":\"Valitse kaikki\",\"employment\":\"Työsuhde\",\"employments\":\"Työsuhteet\",\"autoTaxcard\":\"Auto-verokortti\",\"activeAutoTaxcard\":\"Aktivoi automattinen verokortti\",\"taxcard\":\"Verokortti\",\"employmentDeletion\":{\"confirmText\":\"Haluatko varmasti poistaa työsuhteen?\",\"existingtCalculationsHeading\":\"Työsuhteella on laskelmia\",\"existingtCalculationsText\":\"Poista palkkalaskelmaluonnokset ennen työsuhteen poistoa. Työsuhdetta, jolla on maksettuja palkkoja, ei voi poistaa, voit merkitä sen päättyneeksi, jolloin se ei näy aktiivisena.\"}},\"WorkerReportComponent\":{\"selectYearLabel\":\"Valitse vuosi:\",\"noPaidSalaries\":{\"title\":\"Ei maksettuja palkkoja vuonna {{year}}\",\"description\":\" Sinulle ei ole maksettu Palkkaus.fi-palvelussa palkkaa vuonna {{ year }}. Kun sinulle maksetaan palkkaa, edellisten vuosien palkat ja niistä tehdyt raportit jäävät arkistoon tälle sivulle.\"},\"contactCustomerService\":\"Jos sinulla pitäisi näkyä Palkkaus.fi-palvelun kautta maksettuja palkkoja vuodelle {{ year }}, otathan yhteyttä asiakaspalveluumme. Huomaathan kuitenkin, että olet kirjautunut työntekijänä. Jos etsit työnantajana maksamiasi palkkoja, vaihda työnantajaprofiiliin oikeasta yläkulmasta.\",\"paidSalariesText\":\"Alla näet kaikki palkanmaksut, joita sinulle on maksettu Palkkaus.fi-palvelun kautta vuonna {{ year }}.\",\"table\":{\"employer\":\"Työnantaja\",\"grossSalary\":\"Bruttopalkka\",\"totalTaxable\":\"Verotettava\",\"compensation\":\"Kulukorvaukset\",\"summary\":\"Yhteenveto\",\"taxPercent\":\"Ennakonpidätys\",\"householdDeduction\":\"Kotitalousvähennys\",\"workerYearlySummaryTitle\":\"Työntekijän vuosiyhteenveto\",\"workerYearlySummaryLink\":\"Tästä vuosiyhteenvedosta\",\"workerYearlySummaryText\":\"näet koko vuoden kaikki palkat ja muut maksut.\",\"calculationBtn\":\"Palkkalaskelma\",\"printBtn\":\"Tuloste\",\"yearlyReport\":\"Vuosiraportti\"}},\"WorkFlowIssueComponent\":{\"buttons\":{\"showEditor\":\"Luo ongelman kuvaus\"},\"showWorkflowEventEditorTitle\":\"Ongelman kuvaus\",\"deleteConfirmations\":{\"close\":\"Haluatko varmasti poistaa \\\"Tarkastettu\\\"-merkinnän?\",\"issue\":\"Haluatko varmasti poistaa ongelman kuvauksen?\"}},\"SxyInputComponent\":{\"addNewRow\":\"Lisää uusi rivi\",\"editRow\":\"Muokkaa riviä\"},\"InputDurationComponent\":{\"labelTrue\":\"Ennen (-)\",\"labelFalse\":\"Jälkeen (+)\"},\"ValidationSummaryComponent\":{\"checkForErrors\":\"Tarkista syötetyt tiedot\",\"missingRequired\":\"Pakollisia tietoja puuttuu\",\"loadingHtml\":\"Ladataan validointi-tietoa...\"},\"ValidationSummaryDetailsComponent\":{\"moreInfoTitle\":\"Lisätietoja\"},\"PayButtonComponent\":{\"paymentChannelLabel\":\"Maksutapa\",\"moreOptionsLink\":\"Asetukset: Lisää maksutapoja\"},\"ReportListComponent\":{\"noReportsToShow\":\"Ei raportteja vielä näytettävissä\",\"report\":\"Raportti\",\"links\":\"Linkit\",\"reportDate\":\"Raporttipäivä\",\"updated\":\"Päivitetty\",\"note\":\"Huom\",\"preview\":\"Esikatselu\"},\"EInvoiceAddressListComponent\":{\"name\":\"Nimi\",\"receiver\":\"Verkkolaskuosoite\",\"intermediator\":\"Välittäjä\",\"receiverNotFound\":\"Haku ei löytänyt yhtään osoitetta\",\"dontUseAnyAddress\":\"Älä käytä mitään osoitetta\",\"useSelectedAddress\":\"Käytä valittua osoitetta\"},\"PrimaryPartnerComponent\":{\"moreInfo\":\"Lisätietoja\",\"notAuthorized\":{\"text\":\"Käyttöoikeuden myöntämisen jälkeen palvelutarjoajasi aktivoi palveluasiakkuuden, minkä jälkeen voit alkaa käyttämään palvelua. Palvelutarjoajasta riippuen aktivointi voi kestää muutaman päivän.\",\"html\":\"<strong>HUOM: </strong>Merkitsemällä tilitoimiston palvelutarjoajaksesi annat tilitoimistolle käyttöoikeuden Palkkaus.fi-tilin tietoihisi. Huomaathan, että tämä tarkoittaa että silloin tilitoimistolla on pääsy kaikkiin tietoihin, kuten työntekijöiden tietoihin ja palkkalaskelmiin.\"},\"authorized\":{\"text\":\"Käyttöoikeuden myöntämisen jälkeen palvelutarjoajasi aktivoi palveluasiakkuuden, minkä jälkeen voit alkaa käyttämään palvelua. Palvelutarjoajasta riippuen aktivointi voi kestää muutaman päivän. Voit poistaa myöntämäsi käyttöoikeuden palvelutarjoajaltasi milloin vain.\",\"html\":\"<strong>HUOM: </strong>Olet merkinnyt tämän tilitoimiston palvelutarjoajaksesi ja antanut tilitoimistolle käyttöoikeuden Palkkaus.fi-tilin tietoihisi. Huomaathan, että tämä tarkoittaa että silloin tilitoimistolla on pääsy kaikkiin tietoihin, kuten työntekijöiden tietoihin ja palkkalaskelmiin.\"},\"setPrimaryPartner\":\"Aseta palvelutarjoajaksi\",\"removePrimaryPartnerCredential\":\"Poista palvelutarjoajan käyttöoikeus\"},\"PalkkausPersonalPaymentOverviewComponent\":{\"title\":\"Palkan maksaminen\",\"titleInspect\":\"Maksetut laskut\",\"loadingPayment\":\"Ladataan: Maksun yleiskuva\",\"invalidCalc\":\"Laskelmassa on virheitä\",\"printInvoices\":\"Tulosta laskut\",\"notPaidInfo\":\"Ei maksettu, älä ilmoita tulorekisteriin\",\"cancelInfo\":\"Peru maksu ja tulorekisteri-ilmoitus\",\"paidInfo\":\"Maksettu, ilmoita tulorekisteriin\",\"statuses\":{\"canceled\":{\"lead\":\"Palkanmaksu on peruttu. Laskelma ja siitä tehdyt tulorekisteri-ilmoitukset on peruttu.\",\"salaryAlreadyPaid\":\"Jos palkka ja sen sivukulut on ehditty jo maksaa:\",\"salaryAlreadyPaidInfo1\":\"työntekijä palauttaa nettopalkan työnantajalle\",\"salaryAlreadyPaidInfo2\":\"työeläkeyhtiö palauttaa työeläkemaksut työnantajalle tai hyvittää seuraavassa laskussa\",\"salaryAlreadyPaidInfo3\":\"työllisyysrahasto palauttaa työttömyysvakuutusmaksut työnantajalle tai hyvittää seuraavassa laskussa\",\"salaryAlreadyPaidInfo4\":\"työnantajasuoritukset palautuvat työnantajan Omaveroon, jossa voi tehdä palautuspyynnön\"},\"paid\":{\"lead\":\"Palkka on nyt kuitattu maksetuksi.\",\"infoText1\":\"Tulorekisteri-ilmoitukset tehdään automaattisesti palkkapäivän perusteella.\",\"infoText2\":\"Muistithan maksaa nettopalkan työntekijälle verkkopankissasi sekä työnantajasuoritukset Verohallinnolle oheisilla laskuilla!\",\"infoText3\":\"Saat kotiin erikseen laskun työeläkemaksuista palkanmaksua seuraavassa kuussa sekä työttömyysvakuutusmaksuista palkanmaksua seuraavan vuosineljänneksen aikana.\",\"paidInspectNet\":\"Nettopalkka on kuitattu maksetuksi\",\"paidInspectTax\":\"Ennakonpidätys on kuitattu maksetuksi\"},\"preview\":{\"lead\":\"Maksa heti omassa verkkopankissasi nettopalkka työntekijälle ja työnantajasuoritukset verohallinnolle. Näitä varten alla maksutiedot, jotka voit kopioida verkkopankiisi.\",\"infoText\":\"Kun olet tehnyt maksut, kuittaa ne maksetuiksi, jolloin teemme palkasta tulorekisteri-ilmoitukset. Työllisyysrahasto ja työeläkeyhtiö lähettävät erillisen laskun työttömyysvakuutusmaksusta ja TyEL-maksusta.\",\"receiver\":\"Saaja\",\"iban\":\"Tilinumero\",\"reference\":\"Viite / viesti\",\"dueDate\":\"Eräpäivä\",\"sum\":\"Summa\",\"salary\":\"Palkkaa\",\"checkReference\":\"Tarkista viite Omaverosta!\",\"cfaInfo\":{\"html\":\"<strong>Työllisyysrahasto ja työeläkeyhtiö</strong> lähettävät erillisen laskun työttömyysvakuutusmaksusta ja TyEL-maksusta. Mahdolliset laskelmalla olevat ay-jäsenmaksut tai ulosmittaukset pitää myös maksaa itse oikeille tahoille näiltä saamiesi maksuohjeiden mukaan.\"}},\"mobileBanking\":{\"heading\":\"Maksa laskut verkkopankissasi\",\"lead\":\"Maksa alla olevat 2 laskua verkkopankissasi. Kun olet tehnyt maksut, kuittaa ne maksetuiksi, jolloin teemme palkasta tulorekisteri-ilmoitukset. Työllisyysrahasto ja työeläkeyhtiö lähettävät erillisen laskun työttömyysvakuutusmaksusta ja TyEL-maksusta.\",\"salary\":\"1. Palkka\",\"salaryInfo\":{\"html\":\"Työntekijän nettopalkka maksetaan suoraan työntekijälle.<br /> Kirjoita viestiksi 'Palkka' tai maksetun palkan tarkempi kuvaus.\"},\"tax\":\"2. Ennakonpidätys\",\"taxInfo\":{\"html\":\"Työnantajasuoritukset verottajalle (ennakonpidätys ja sava).<br />Käytä viitenumeroa!\"},\"sideCosts\":\"3. Muut sivukulut laskutetaan\",\"sideCostsInfo1\":\"Työllisyysrahasto ja työeläkeyhtiö lähettävät erillisen laskun työttömyysvakuutusmaksusta ja TyEL-maksusta.\",\"sideCostsInfo2\":\"Mahdolliset laskelmalla olevat ay-jäsenmaksut tai ulosmittaukset pitää myös maksaa itse oikeille tahoille näiltä saamiesi maksuohjeiden mukaan.\"}},\"steps\":{\"step1\":{\"heading\":\"Nettopalkka\",\"title\":\"Nettopalkan maksaminen verkkopankissasi\",\"text\":{\"html\":\"Avaa uusi välilehti selaimessa ja <strong>kirjaudu verkkopankkiisi</strong>. Maksa tämä maksu <strong>verkkopankissasi heti</strong>, jolloin työntekijäsi saa nettopalkan ajoissa tililleen.\"}},\"step2\":{\"heading\":\"Ennakonpidätys\",\"title\":\"Ennakonpidätyksen maksaminen verkkopankissasi\",\"text\":{\"html\":\"Avaa uusi välilehti selaimessa ja <strong>kirjaudu verkkopankkiisi</strong>. Maksa tämä maksu <strong>verkkopankissasi heti</strong>, jolloin palkanmaksuun liittyvä ennakonpidätys ja työnantajasuoritukset tulevat maksetuiksi oikein.\"}},\"step3\":{\"heading\":\"Sivukulut\",\"title\":\"Sivukulujen maksaminen\",\"text\":\"Nettopalkan ja ennakonpidätyksen lisäksi palkanmaksuun liittyy muitakin kuluja:\",\"textAlt\":\"Sivukulujen summat näet palkkalaskurista, kun lasket palkkaa. Maksetut palkkalaskelmat löytyvät Palkkamyllyn työpöydältä\",\"listItem1\":\"Työeläkeyhtiö lähettää sinulle erikseen laskun työeläkemaksusta (TyEL).\",\"listItem2\":\"Työllisyysrahasto lähettää sinulle erikseen laskun työttömyysvakuutusmaksusta. Se tulee neljännesvuosittain.\",\"listItem3\":\"Mahdolliset ulosmittaukset ja ay-jäsenmaksut pitää hoitaa itse, niitä Palkkamylly ei voi tilittää puolestasi.\"},\"step4\":{\"heading\":\"Tulorekisteri\",\"title\":\"Palkkamylly hoitaa tulorekisteri-ilmoitukset\",\"text\":\"Jos olet maksanut nettopalkan, palkasta pitää tehdä tulorekisteri-ilmoitus. Palkkamylly hoitaa sen puolestasi.\",\"buttonInfoText\":\"Voiko ilmoituksen lähettää?\",\"irInfo\":\"Tulorekisteri-ilmoitus tehdään viiden päivän kuluessa laskelmalla ilmoitetusta palkkapäivästä.\",\"acceptButton\":\"Kyllä, tulorekisteri-ilmoitukset voi lähettää\",\"declineButton\":\"Ei, maksan ja kuittaan maksut myöhemmin\"}},\"alerts\":{\"headingPaid\":\"Palkkalaskelma on kuitattu maksetuksi\",\"headingCancelled\":\"Palkkalaskelman maksaminen on peruttu\",\"paid\":{\"text\":\"Palkkalaskelma on nyt kuitattu maksetuksi ja tulorekisteri-ilmoitukset lähtevät automaattisesti.\",\"infoText1\":\" - Olet ilmoittanut nettopalkan ja työnantajasuoritukset verottajalle maksetuiksi.\",\"infoText2\":\" - Saat työeläke- ja työttömyysvakuutusmaksuista laskut erikseen postitse.\",\"infoText3\":\" - Mahdolliset ulosmittausten ja ay-jäsenmaksujen tilitykset tulee hoitaa erikseen.\"},\"cancel\":{\"text\":\"Palkkalaskelmaa ei ole kuitattu maksetuksi eikä tulorekisteri-ilmoituksia tehdä.\",\"infotext1\":\" - Palkkalaskelmaa ei ole kuitattu maksetuksi eikä tulorekisteri-ilmoituksia tehdä.\",\"infotext2\":\" - Voit ilmoittaa palkan maksetuksi myöhemmin siirtämällä laskelman uudestaan maksuun valitsemalla laskelmalta Siirry maksamaan.\"}}},\"AccountantSelectionComponent\":{\"heading\":\"Kirjanpitäjä/tilitoimisto\",\"accountantType\":\"Tilitoimiston/kirjanpitäjän tyyppi\",\"companyOrPerson\":\"Yhtiö vai henkilö\",\"noAccountantEnum\":\"Ei kirjanpitäjää/tilitoimistoa\",\"companyEnum\":\"Yhtiö\",\"personEnum\":\"Henkilö\",\"personAccountantForm\":{\"firstName\":\"Etunimi\",\"lastName\":\"Sukunimi\",\"email\":\"Sähköposti\",\"telephone\":\"Puhelin\"},\"searchAccountingFirm\":\"Hae tilitoimiston nimellä tai Y-tunnuksella\",\"name\":\"Nimi\",\"officialId\":\"Y-tunnus\",\"noSearchResult\":\"Haku ei löytänyt yhtään yhtiötä\",\"companyAccountantForm\":{\"search\":\"Haku\",\"notPrimaryPartner\":{\"lead\":\"Näet tulevan kirjanpitäjäsi/tilitoimistosi tiedot alla\",\"partnerInfo\":\"HUOM: Jotta kirjanpitäjäsi voi auttaa sinua palkanlaskennassa ja kirjanpidossa, rekisteröidylle tilitoimistokumppanille annetaan oletusarvoisesti luku- ja kirjoitusoikeudet kaikkiin palvelun tietoihin, esim. työntekijä- ja palkkatietoihin, kirjanpitoaineistoon. Jos et halua antaa näin laajoja oikeuksia, voit antaa vain yhteystiedot.\",\"notPartnerInfo\":\"Suosittelemme, että teet kirjanpitäjästäsi ns. \\\"tilitoimistokumppanin\\\". Tällöin hänellä on oikeudet kaikkeen palkkaus.fi-tietoon. Hän voi ongelmatilanteessa tarkastella palkkoja ja jopa muokata niitä. Kirjanpitäjä saa tällöin kirjanpitoaineiston konekielisessä muodossa ja voi viedä sen useimpiin kirjanpito-ohjelmiin.\"},\"primaryPartner\":{\"lead\":\"Näet tilitoimistokumppanisi tiedot alla\",\"partnerInfo\":\"HUOM: Jotta kirjanpitäjäsi voi auttaa sinua palkanlaskennassa ja kirjanpidossa, rekisteröidylle tilitoimistokumppanille on annettu luku- ja kirjoitusoikeudet kaikkiin palvelun tietoihin, esim. työntekijä- ja palkkatietoihin, kirjanpitoaineistoon\"},\"accountantPermissions\":\"Tilitoimiston oikeudet\",\"unlinkedPrimaryPartnerEnum\":\"Anna kirjanpitäjälle \\\"tilitoimistokumppani\\\" oikeudet\",\"unlinkedAccountingOnlyEnum\":\"Tilitoimistokumppani ilman pääsyä Palkkaus.fi palveluun\",\"pendingPrimaryPartnerEnum\":\"Anna kirjanpitäjälle \\\"tilitoimistokumppani\\\" oikeudet\",\"primaryPartnerEnum\":\"Tilitoimistokumppanin oikeudet\",\"accountingDataEmail\":\"Kirjanpitoaineiston lähetys sähköpostitse\",\"deletePrimaryPartner\":\"Poista tilitoimistokumppani\"}},\"BrandSelectionComponent\":{\"title\":\"Valitse kumppani ja tyyli\",\"useDefaultStyle\":\"Käytä vakiotyyliä\"},\"PaymentChannelDialogComponent\":{\"palkkausCfaFinvoice\":{\"legend\":\"Finvoice\",\"eInvoiceAddress\":\"Verkkolaskuosoite\",\"intermediator\":\"Välittäjä\"},\"palkkausCfaPaytrail\":{\"legend\":\"Asiakasvaratilin kautta maksetaan\",\"infoText\":\"Oletuksena asiakasvaratilin kautta maksetaan nettopalkka ja ennakonpidätys. Alta voit halutessasi muuttaa näitä asetuksia\",\"selfhandle\":\"Hoidan TyEL-maksut itse\",\"isTaxAndSocialSecuritySelfHandling\":\"Hoidan ennakonpidätyksen maksun itse\",\"isWorkerSelfHandling\":\"Hoidan nettopalkan maksun itse\",\"alert\":{\"html\":\"<strong>HUOM: </strong> Muutokset vaikuttavat kaikkiin asiakasvaratilin kautta tehtyihin maksuihin: <strong>Paytrail verkkomaksu, Yksi tilisiirto viitenumerolla ja Finvoice verkkolasku (verkkolasku)</strong>.\"}},\"palkkausManual\":{\"legend\":\"SEPA-materiaalin asetukset\",\"ibanNumber\":\"Tilinumero (IBAN)\",\"sepaBankPartyId\":\"SEPA-maksatustunnus\"},\"palkkausInvoices\":{\"legend\":\"Palvelun maksutiedot\",\"creditCard\":\"Luottokortti\"},\"default\":{\"info\":\"Maksutavalla ei ole muutettavia asetuksia\"}},\"CalendarEventEditComponent\":{\"setTimingsAndCreatePayrolls\":\"Aseta ajastus ja luo palkkalistat\"},\"FeedbackAddCorrectionComponent\":{\"types\":{\"common\":{\"compensations\":\"Päivärahat ja ateriakorvaukset\",\"milageCompensation\":\"Kilometrikorvaukset\",\"phoneBenefit\":\"Puhelinetu\",\"benefitsInKindWithoutPhone\":\"Muut luontoisedut\"},\"external\":{\"lead\":{\"html\":\"Ulkopuolinen palkka on maksettu esim. kirjanpitäjäsi toimesta. Jos lisäät palkan tähän, ilmoitamme myös tällaisen palkan verottajalle. <strong>Näin kirjanpitäjäsi ei tarvitse tehdä vuosi-ilmoitusta</strong>\"},\"heading\":\"Perustiedot\",\"infoText\":\"Ilmoitusta varten tarvitaan ainakin päivämäärä, palkka ja ennakonpidätys, joka on vähennetty työntekijän palkasta\",\"dateLabel\":\"Päivämäärä:\",\"tyelEnum\":\"Palkka (TyEL)\",\"yelEnum\":\"Yrittäjän palkka (YEL)\",\"compensationEnum\":\"Työkorvaus\",\"grossSalaryLabel\":\"Bruttopalkka\",\"taxLabel\":\"Ennakon­pidätys (euroa)\",\"calculateSideCosts\":\"Laske sivukulut\",\"sideCostsHeading\":\"Sivukulut veroilmoitukseen\",\"sideCostsInfoText\":\" Voit halutessasi laskea sivukulut palkasta, mutta ne olisi syytä tarkistaa alkuperäisestä palkkalaskelmasta.\",\"entrepreneurSideCosts\":\"Työnantaja­kulut\",\"socialInsuranceDeductionsFromEmployee\":\"Työntekijän osuus TyEL ­ja TVR -maksuista (euroa)\",\"compensationsHeading\":\"Kulut, luontoisedut ja muut palkkarivit\",\"compensationsInfoText\":\"Voit lisätä tähän muita verottajalle ilmoitettavia kuluja ja luontoisetuja, jos niitä on maksetussa palkassa\",\"messagePlaceholder\":\"Jos jotain laskelmassa olevaa palkkaerää ei ole yllä, kuvaa se tässä kentässä mahdollisimman tarkasti\"},\"correction\":{\"lead\":{\"infoText\":\"Korjaus Palkkaus.fi-palvelun kautta tehtyyn palkkaan on yleensä\",\"calculationError\":\"Virheellisesti laskettu palkka: (otamme sinuun puhelimitse yhteyttä)\",\"missingCostOrCompensation\":\"Ilmoittamatta jätetty kulu tai luontoisetu: Nämä voimme yleensä lisätä ilmoitukseen suoraan\",\"taxInfo\":\"Ilmoitamme nämä tiedot puolestasi verottajalle, TVR:ään sekä Ifiin, jos vakuutuksesi on siellä\"},\"errorSalaryHeading\":\"1. Virheellinen palkka TAI\",\"messagePlaceholder\":\"Kerro virheestä tarkemmin, olemme sinuun tarvittaessaa yhteydessä.\",\"missingCostOrCompensationHeader\":\"2. Puuttuva kulu tai luontoisetu\",\"missingCostOrCompensationInfoText\":\"Voit lisätä tähän muita verottajalle ilmoitettavia kuluja ja luontoisetuja, jos niitä on maksetussa palkassa\",\"dateLabel\":\"Päivämäärä\"}}},\"FeedbackSubmitComponent\":{\"iban\":\"Tilinumero\",\"ibanPlaceholder\":\"IBAN-muodossa\"},\"InsuranceComponent\":{\"common\":{\"addAddressBtn\":\"Lisää osoite\",\"insuranceContactPerson\":\"Edustaja vakuutusasioissa\",\"name\":\"Nimi\",\"ssNumber\":\"Henkilötunnus\",\"nationality\":\"Kansalaisuus\",\"telephone\":\"Puhelinnumero\",\"email\":\"Sähköpostiosoite\",\"companyName\":\"Yrityksen nimi\",\"vatNumber\":\"Y-tunnus\",\"streetAddress\":\"Katuosoite\",\"postalCode\":\"Postinumero\",\"city\":\"Kaupunki\",\"country\":\"Maa\",\"oldInsuranceCompany\":\"Nykyisen vakuutusyhtiön nimi\",\"startDate\":\"Vakuutuksen alkamisajankohta\",\"startDateToolTip\":\"Huomioithan, että vakuutus voi astua voimaan aikaisintaan vakuutuksen allekirjoituspäivästä\",\"billingInterval\":\"Vakuutuksen maksuerä vuodessa\",\"occupationCode\":\"Ammattiluokka\",\"industry\":{\"label\":\"Toimiala\",\"html\":\"Löydät toimialaluokitukset <a href=\\\"https://www.stat.fi/fi/luokitukset/toimiala/?code=SSSSS&name=Toimialat%20yhteens%C3%A4\\\" target=\\\"blank\\\">täältä</a>.\"},\"salaryLabel\":\"Palkat (arvio 12 kk)\",\"addOccupation\":\"Lisää ammattiluokka\",\"procura\":\"Valtuutuksen peruste\"},\"enums\":{\"procurationEnum\":\"Nimenkirjoitusoikeus\",\"powerOfAttorneyEnum\":\"Valtakirja\",\"apparentAuthorityEnum\":\"Asemavaltuutus\",\"otherEnum\":\"Jokin muu\",\"authorizationTypeLabel\":\"Valtuutuksen peruste\"},\"beneficiaryInfo\":{\"wizard\":{\"title\":\"Uusi työtapaturmavakuutus\",\"titleAlt\":\"Yrittäjien tapaturmavakuutus\",\"titleMoveInsurance\":\"Työtapaturmavakuutuksen siirto LähiTapiolaan\",\"heading\":\"Tunnistaminen\",\"intro\":\"Yrityksen tosiasialliset edunsaajat\",\"label\":\"Tosiasiallisten edunsaajien tiedot\"},\"beneficiariesAdd\":\"Lisää edunsaaja\"},\"principalBusinessAddress\":{\"label\":{\"html\":\"Pääasiallisen liiketoimintapaikan osoite, <small>jos eri kuin yrityksen osoite</small>\"}},\"contactInfoEntrepreneur\":{\"wizard\":{\"title\":\"Uusi työtapaturmavakuutus\",\"heading\":\"Perustiedot\"}},\"contactInfo\":{\"wizard\":{\"title\":\"Uusi työtapaturmavakuutus\",\"titleAlt\":\"Työtapaturmavakuutuksen siirto LähiTapiolaan\",\"heading\":\"Perustiedot\",\"intro\":\"Perustiedot\"},\"moveInsuranceInfo\":\"Vakuutuksen voi siirtää toiseen vakuutusyhtiöön, kun vakuutus on ollut voimassa kokonaisen kalenterivuoden vakuutusyhtiössä. Esimerkiksi 1.7.2020 alkaneen vakuutuksen voi siirtää toiseen vakuutusyhtiöön 1.1.2022 alkaen.\"},\"entrepreneur\":{\"wizard\":{\"title\":\"Yrittäjien tapaturmavakuutus\",\"heading\":\"Täydennä vakuutuksen tiedot\"},\"companyInfo\":\"Yrityksen tiedot\",\"entrepreneurInsuranceInfo\":\"Yrittäjän ja vakuutuksen tiedot\",\"entrepreneurName\":\"Yrittäjän nimi\",\"newEntrepreneurInsuranceEnum\":\"Uusi yrittäjän tapaturmavakuutus\",\"moveEntrepreneurInsuranceEnum\":\"Vakuutuksen siirto toisesta vakuutusyhtiöstä\",\"insuranceLabel\":\"Vakuutus on\",\"estimatedIncome\":\"Vahvistettu YEL-työtulo\",\"addEntrepreneur\":\"Lisää yrittäjä\"},\"insuranceMove\":{\"wizard\":{\"title\":\"Työtapaturmavakuutuksen siirto LähiTapiolaan\"},\"intro\":\"Vakuutuksen voi siirtää toisesta vakuutusyhtiöstä LähiTapiolaan, kun vakuutus on ollut voimassa kalenterivuoden toisessa vakuutusyhtiössä. Esimerkiksi 1.7.2020 alkaneen vakuutuksen voi siirtää LähiTapiolaan aikaisintaan 1.1.2022\"},\"insuranceInfoNew\":{\"wizard\":{\"title\":\"Uusi työtapaturmavakuutus\",\"heading\":\"Täydennä vakuutuksen tiedot\"}},\"ownerInfo\":{\"wizard\":{\"title\":\"Uusi työtapaturmavakuutus\",\"titleAlt\":\"Yrittäjien tapaturmavakuutus\",\"titleMoveInsurance\":\"Työtapaturmavakuutuksen siirto LähiTapiolaan\",\"heading\":\"Tunnistaminen\",\"intro\":\"Selvitys yrityksen omistusrakenteesta\"},\"intro\":\"Selvennä omistajat ja omistusrakenne\",\"introInfo\":\"Jos omistajana on toinen yritys, selvennä omistajayrityksen omistajat niin pitkälle, että lopulta kaikki yrityksen taustalla olevat henkilöomistukset on selvitetty. Jos omistusrakenne on monimutkaisempi, liitä mukaan erillinen omistusrakenteen kuvaus tai selvennä omistusrakenne Lisätietoja-kohdassa. Jos omistaja on ulkomainen, ilmoita syntymäaika ja ulkomaiselta yritykseltä ulkomainen rekisterinumero\",\"ownerInfo\":\"Omistajien tiedot\",\"displayName\":\"Omistajan nimi\",\"officialId\":\"Henkilötunnus / Y-tunnus\",\"address\":\"Osoite (myös maa)\",\"percentOfShares\":\"Omistusosuus (%)\",\"addOwner\":\"Lisää omistaja\",\"additionalOwnerInfo\":\"Lisätietoja\",\"additionalOwnerInfoLabel\":\"Omistusrakenne on liian monimutkainen täytettäväksi lomakkeella. Haluan, että LähiTapiola ottaa minuun yhteyttä.\"},\"start\":{\"wizard\":{\"title\":\"Turvaamme yrityksesi jotta voit keskittyä tärkeimpään\",\"heading\":\"Pyydä tarjous\",\"title2\":\"Jokainen yritys ja sen ihmiset ovat ainutlaatuisia.\"},\"heading\":\"Pyydä tarjous\",\"infoText\":\"Keräämme tällä lomakkeella/sivustolla tiedot työtapaturmavakuutusta varten, jotka lähetetään LähiTapiolalle käsiteltäväksi\",\"newInsurance\":\"Uusi työtapaturmavakuutus työntekijöille\",\"moveInsurance\":\"Työtapaturmavakuutuksen siirto\",\"newInsuranceForEntrepreneur\":\"Yrittäjien tapaturmavakuutus\"},\"thankYou\":{\"wizard\":{\"title\":\"Kiitos!\"},\"intro\":\"LähiTapiola lähettää vakuutustarjouksen sähköpostilla, jonka hyväksymällä saat vakuutuksen voimaan. Vakuutus tulee aikaisintaan voimaan hyväksymispäivästä\",\"notNewInsuranceForEntrepreneur\":{\"text\":\"Otan työtapaturmavakuutuksen\",\"html\":\"Entä Yrittäjien tapaturmavakuutus? Yrittäjien tapaturmavakuutus on laajin mahdollinen vakuutusturva yrittäjälle tapaturman varalta. Lisätietoja tapaturmavakuutuksesta <a href=\\\" https://www.lahitapiola.fi/yritys/vakuutukset/lakisaateiset-henkilovakuutukset/yrittajien-tapaturmavakuutus\\\" target=\\\"_blank\\\">lahitapiola.fi –sivulta</a>.\"},\"newInsuranceForEntrepreneur\":{\"text\":\"Otan Yrittäjien tapaturmavakuutuksen\",\"html\":\"Entä työtapaturmavakuutus työntekijälle? Lisätietoja tapaturmavakuutuksesta <a href=\\\" https://www.lahitapiola.fi/yritys/vakuutukset/lakisaateiset-henkilovakuutukset/yrittajien-tapaturmavakuutus\\\" target=\\\"_blank\\\">lahitapiola.fi –sivulta</a>.\"}}},\"UsecaseDetailsComponent\":{\"createSchemaName\":\"Mikä on lisättävän tietueen tekninen nimi (a-z, 0-1, ei välejä eikä erikoismerkkejä)?\",\"createSchemaTitle\":\"Uusi tyyppi\",\"createAction\":\"Käynnistä\"},\"FilterFunctions\":{\"sxyOccupation\":{\"occupationMissing\":\"Ei työn tyyppiä!\"},\"sxyCount\":{\"period\":\"jakso\",\"periods\":\"jaksoa\"}},\"CalcCostAccountingComponent\":{\"title\":\"Laskentakohteet\",\"percent\":\"Prosenttia\",\"defaultLabel\":\"Kustannuspaikka\"},\"RaksaCalculationWizardComponent\":{\"title\":\"Uusi laskelma\",\"step1Title\":\"Valitse työntekijä\",\"step2Title\":\"Palkkapäivä ja työpäivät\",\"step3Title\":\"Työn tyyppi\",\"step4Title\":\"Kotitalousvähennys\"},\"DataImport\":{\"badgeUnit\":\"riviä\",\"messageInvalid\":\"Virheellinen\",\"columnImportStatus\":\"Tila\",\"columnValidation\":\"Viestit\",\"badgeUndoneLabel\":\"Ei tarkistettuja\",\"badgeErrorLabel\":\"Virheellisiä\",\"badgeSuccessLabel\":\"Ok\",\"badgeFinishedLabel\":\"Valmis\",\"badgeIgnoredLabel\":\"Ei käsiteltyjä\",\"badgeWarningLabel\":\"Varoituksia\",\"badgeUploadedLabel\":\"Tuotu\",\"errorLabel\":\"Virhe\",\"successLabel\":\"Ok\",\"ignoredLabel\":\"Ei käsitelty\",\"warningLabel\":\"Varoitus\",\"help\":{\"fields\":{\"title\":\"Sarakkeet\",\"id\":\"ID\",\"type\":\"Tyyppi\",\"name\":\"Nimi\",\"description\":\"Kuvaus\"},\"values\":{\"title\":\"Arvolistat\",\"type\":\"Tyyppi\",\"value\":\"Arvo\",\"description\":\"Kuvaus\"}},\"stepUpload\":{\"title\":\"Tuo Excel-tiedosto\",\"intro\":\"Tuo Excel-tiedosto koneeltasi napsauttamalla 'Valitse tiedosto...' -painiketta. Voit kopioida myös Excelin sisällön leikepöydältä taulukkoon napsauttamalla 'Liitä leikepöydältä' -painiketta.\",\"buttonHelp\":\"Lue ohjeet...\",\"buttonUpload\":\"Valitse tiedosto...\",\"buttonPaste\":\"Liitä leikepöydältä\",\"buttonReset\":\"Tyhjennä taulukko\"},\"stepValidate\":{\"title\":\"Tarkista rivit\",\"intro\":\"Tarkista tuotujen rivien tiedot napsauttamalla 'Tarkista taulukon tiedot' -painiketta.\",\"buttonValidate\":\"Tarkista taulukon tiedot\"},\"stepImport\":{\"title\":\"Tallenna tiedot\",\"intro\":\"Aloita tietojen tallennus napsauttamalla 'Aloita tietojen tuonti' -painiketta.\",\"buttonCancel\":\"Keskeytä\",\"buttonImport\":\"Aloita tietojen tuonti\"}},\"CalcImport\":{\"validateWorkersButton\":\"Tarkista työntekijöiden työsuhteet\",\"messageMissingEmployment\":\"Virhe, työntekijää ei ole luotu\",\"messageExistingEmployment\":\"Ok, työntekijä on olemassa\",\"messageSeveralEmployments\":\"Varoitus: usea työsuhde mahdollista\",\"help\":{\"title\":\"Laskelmien tuonti\",\"overview\":{\"title\":\"Yleistä\",\"row1\":\"Taulukkoon voi syöttää useampia rivejä per työntekijä. Työntekijät identifioidaan henkilötunnuksen perusteella.\",\"row2\":\"Kun rivit tallennetaan, luodaan uusi palkkalista tai päivitetään olemassa olevaa palkkalistaa. Palkkalista määräytyy yrityksen, palkkapäivän ja palkkalistan nimen perusteella.\"}},\"options\":{\"title\":\"Palkkalistan tuonnin asetukset\",\"addRows\":\"Lisää rivit laskelmille\",\"removeImportedRows\":\"Korvaa laskelmien tästä aineistosta tuodut rivit\",\"removeAllRows\":\"Korvaa laskelmien kaikki rivit\",\"applyEmploymentDefaultRows\":\"Lisää työntekijöiden oletusrivit\",\"sourceId\":\"Aineistotunnus\"}},\"WorkerImport\":{\"validateWorkersButton\":\"Tarkista työntekijöiden työsuhteet\",\"messageMissingEmployment\":\"Työntekijää ei ole luotu\",\"messageExistingEmployment\":\"Ok, työntekijä on olemassa\",\"messageSeveralEmployments\":\"Varoitus, usea työsuhde mahdollista\",\"help\":{\"title\":\"Työntekijöiden tuonti\",\"overview\":{\"title\":\"Yleistä\",\"row1\":\"Työntekijät identifioidaan henkilötunnuksen perusteella.\",\"row2\":\"HUOM! Tallennus luo vain uusia työntekijöitä, olemassa olevien työntekijöiden tietoihin ei tehdä muutoksia.\"}}},\"CompanyImport\":{\"enrichEInvoiceAddressesButton\":\"Täydennä verkkolaskuosoitteet\",\"enrichEInvoiceAddressesMessage\":\"Haetaan puuttuvia verkkolaskuosoitteita...\",\"enrichEInvoiceAddressesSelectionMessage\":\"Valitse verkkolaskuosoite\",\"help\":{\"title\":\"Asiakkaiden tuonti\",\"overview\":{\"title\":\"Yleistä\",\"row1\":\"Yritykset identifioidaan Y-tunnuksen perusteella.\",\"row2\":\"Kun rivit tallennetaan, uusi yritys luodaan, jos sitä ei ole vielä luotu. Samalla syntyy asiakkuus uuteen yritykseen. Jos yritys on jo ennestään olemassa ja valtuus annettu, luodaan myös asiakkuus.\"}}},\"InvoiceAlertsComponent\":{\"header\":\"Sinulla on keskeneräisiä palkkalaskelmia {{ channel }} -maksukanavassa\",\"description\":\"Sinulla on yksi tai useampi laskelma Maksu aloitettu -tilassa. Keskeneräisiä palkkalaskelmia ei ilmoiteta tulorekisteriin.\",\"openHelp\":\"Avaa ohjeet\",\"calculationLink\":{\"html\":\"Näet keskeneräiset laskelmat <a href=\\\"{{ calculationUrl }}\\\">Laskelmat-sivulta</a>\"},\"payrollLink\":{\"html\":\" ja palkkalistat <a href=\\\"{{ payrollUrl }}\\\">Palkkalistat-sivulta</a>\"},\"palkkausManual\":{\"instructionText\":{\"html\":\"Kuittaa ne nettopalkkojen laskut maksetuksi <b>Maksuaineiston lähetys -näkymässä</b>, jotka olet maksanut. Huomaathan, että palkka kirjataan laskelmalla olevalle alkuperäiselle palkkapäivälle. Voit myös perua laskun, jolloin laskelma palautuu luonnokseksi.\"}},\"holvi\":{\"instructionText\":{\"html\":\"Kuittaa ne nettopalkkojen laskut maksetuksi <b>Holvin Saapuneet verkkolaskut -näkymässä</b>, jotka olet maksanut. Huomaathan, että palkka kirjataan laskelmalla olevalle alkuperäiselle palkkapäivälle. Voit myös perua laskun, jolloin laskelma palautuu luonnokseksi.\"}},\"talenomOnline\":{\"instructionText\":{\"html\":\"Kuittaa ne nettopalkkojen laskut maksetuksi <b>Easor App -sovelluksen Maksut-näkymässä</b>, jotka olet maksanut. Huomaathan, että palkka kirjataan laskelmalla olevalle alkuperäiselle palkkapäivälle. Voit myös perua laskun, jolloin laskelma palautuu luonnokseksi.\"}}},\"InvoiceDialog\":{\"paymentInformation\":\"Maksuaineiston tiedot\",\"paymentReceiver\":\"Maksun saaja\",\"payer\":\"Maksaja\",\"noIban\":\"Ei tilinumeroa\",\"invoiceStatus\":\"Aineiston tila\",\"paymentChannel\":\"Maksukanava\",\"changeStatus\":\"Vaihda tilaa\",\"change\":\"Vaihda\",\"downloadInvoice\":\"Lataa aineisto\",\"download\":\"Lataa\",\"statuses\":{\"paidPaymentStartedRead\":{\"html\":\"<strong>HUOM</strong>: Aineisto on jo merkitty maksetuksi!<br /> Jos maksat tai lähetät aineiston / maksun uudelleen, varmistathan, ettei maksua makseta kahteen kertaan.\"},\"canceled\":{\"html\":\"Aineisto maksut on merkitty perutuksi.<br />\"},\"canceledErrorsInfo\":{\"html\":\"Aineiston edellisessä maksussa on tapahtunut virheitä.<br />\"},\"forecast\":{\"html\":\"<strong>HUOM</strong>: Aineisto on <strong>Arvio</strong><br /> Tyypillisesti nämä aineistot ovat vain kassavirran suunnittelua varten. Niitä ei ole tarkoitus maksaa, vaan lopullinen lasku tulee laskuttajalta (esim. Työllisyysrahasto).\"},\"preview\":{\"html\":\"<strong>HUOM</strong>: Aineisto on <strong>Esikatselu</strong>-tilassa.<br /> Aineistoon (esim. ennakonpidätys) voi olla vielä tulossa muutoksia. Jos maksat aineiston, varmistathan ettei aineistoon tule enää muutoksia (esim. lisää palkkoja samassa kuussa).\"}},\"table\":{\"receiver\":\"Saajan nimi\",\"receiverIban\":\"Saajan IBAN\",\"reference\":\"Viite\",\"message\":\"Viesti\",\"amount\":\"Summa\",\"dueDate\":\"Eräpäivä\",\"barcode\":\"Viivakoodi\"}},\"ValidationErrors\":{\"sxyPensionContractNumber\":\"Tarkista sopimusnumero. Jos sinulla ei ole työntekijöiden työeläkevakuutusta (TyEL), voit valita Ei yhtiötä. YEL-sopimuksen numeroa ei tarvitse ilmoittaa.\"},\"EmploymentDetails\":{\"taxAtSource\":{\"title\":\"Lähdeverokortin tiedot\",\"info\":{\"html\":\"<strong>HUOM:</strong> Lähdeverokorttia voi tyypillisesti käyttää vain, jos työntekijä on rajoitetusti verovelvollisen (asuinvaltio muu kuin Suomi).<br />Tee tarvittavat muutokset Työsuhde-välilehden alta.\"}},\"percent\":\"Prosentti\",\"monthlyDeduction\":\"Vähennys (kuukaudessa)\",\"deductionDaily\":\"Vähennys (päivässä)\"},\"EmploymentRelation\":{\"taxAtSourceInfo\":\"Lähdeverokortin tiedot\",\"socSec\":\"Sosiaaliturva\",\"employmentRelation\":\"Työsuhde\",\"isInternational\":{\"title\":\"Rajoitetusti verovelvollisen tiedot\",\"info\":{\"html\":\"Syötä tähän tiedot rajoitetusti verovelvollisen <b>vakituisessa asuinvaltiossa (ei koskaan Suomi)</b>. Yleisesti verovelvollisen palkka maksetaan kuten suomalaisille.\"}},\"taxation\":{\"label\":\"Verotus\",\"taxAtSource\":\"Lähdevero\",\"auto\":\"Ennakonpidätys, auto (progressiivinen)\",\"manual\":\"Ennakonpidätys, manual (progressiivinen)\"},\"percent\":\"Prosentti\",\"monthlyDeduction\":\"Vähennys (kuukaudessa)\",\"deductionDaily\":\"Vähennys (päivässä)\",\"calcDetails\":{\"title\":\"Palkanlaskennan yksityiskohdat\",\"wageBases\":\"Peruste\",\"monthlyHours\":\"Tuntien määrä / kk\",\"irIncomeEarnerTypes\":\"Tulonsaajatyyppi\",\"integrations\":\"Integraatiot\",\"personId\":\"Henkilönumero\"}},\"InvoiceReportComponent\":{\"invoice\":{\"title\":\"Lasku\"}},\"InvoicesCompany\":{\"companyInvoiceDialog\":{\"buttons\":{\"cancel\":\"Sulje perumatta\",\"save\":\"Ok, peru lasku\"}},\"selectInvoices\":\"Valitse laskut\",\"markingAsPaid\":\"Merkitään maksetuksi..\",\"markingAsCanceled\":\"Perutaan maksua..\",\"gettingsInvoices\":\"Haetaan laskuja..\",\"heading\":\"Maksua odottavat laskut\",\"showInvoices\":\"Näytä laskut\",\"receiverAndType\":\"Saaja ja laskun tyyppi\",\"sum\":\"Summa\",\"showInvoiceDetails\":\"Näytä koko lasku\",\"qrCodeNotAvailable\":\"QR-koodia ei saatavilla\",\"finishPayments\":\"Maksa palkat ensin\",\"iban\":\"IBAN\",\"name\":\"Nimi\",\"dueDate\":\"Eräpäivä\",\"message\":\"Viesti:\",\"reference\":\"Viite:\",\"alreadyPaid\":\"Jo maksettu\",\"payable\":\"Maksettavaa\",\"setAsPaid\":\"Merkitse valitut maksetuksi\",\"cancelPayment\":\"Peru maksu\",\"cancelInfoText\":\"HUOM: Maksun peruminen peruu myös tulorekisteri-ilmoituksen.\",\"unpaidNetSalaries\":\"maksettua nettopalkkaa\",\"editPaid\":\"Muokkaa maksettua\",\"copyVirtualBarcode\":\"Kopioi virtuaaliviivakoodi\",\"paidNetPaymentInfo\":\"Valmis - Maksettu palkka - Raportoidaan tulorekisteriin automaattisesti\",\"unPaidNetPaymentInfo\":\"HUOM - Maksamaton palkka - Ei raportoitu tulorekisteriin\",\"openCalculation\":\"Avaa laskelma\",\"netPaymentCount\":\"Palkkojen lukumäärä\",\"queryFilterDateAll\":\"Kaikki\",\"queryFilterDateOther\":\"Muu\",\"dateFilterDialogHeading\":\"Päivämäärähaku\",\"dateFilterDialogStart\":\"Aloitus\",\"dateFilterDialogEnd\":\"Lopetus\",\"markAsPaidOptions\":{\"all\":\"Kaikki\",\"netInvoices\":\"Nettopalkat\",\"taxInvoices\":\"Verolaskut\",\"unionInvoices\":\"AY-maksut\",\"foreclosureInvoices\":\"Ulosottolaskut\",\"removeAll\":\"Poista valinnat\"},\"invoiceReader\":{\"eprWarningHeading\":\"Huomioi palkkatietoilmoitukset!\",\"eprWarningTextCanceled\":\"Palkanmaksusta tehdyt tulorekisteri-ilmoitukset perutaan automaattisesti.\\n\\nJos maksat palkan uudestaan samalle palkkapäivälle, ota huomioon, että uudesta palkkatietoilmoituksesta saattaa seurata myöhästymismaksu. Haluatko varmasti perua maksut?\",\"eprWarningTextPaid\":\"Annetulle palkkapäivälle tehtävä palkkatietoilmoitus myöhästyy, koska ilmoitus pitää tehdä 5 päivän kuluessa palkkapäivästä. Ota huomioon, että tästä saattaa seurata myöhästymismaksu. Haluatko varmasti merkitä palkan maksetuiksi?\",\"cancellationTexts\":{\"invoiceCancelingHeading\":\"Laskun peruminen\",\"invoiceCancelingNetInvoiceText\":\"Jos perut laskun, laskelma siirtyy takaisin luonnostilaan. Voit halutessasi muokata laskelmaa ja siirtää sen uudestaan maksuun.\",\"invoiceCancelingTax\":\"Jos perut verolaskun maksukuittauksen, se palautuu avoimeksi ja lasketetaan uudestaan. Verolaskun peruminen ei vaikuta laskelmien tai nettolaskujen tilaan.\",\"invoiceCancelingInvoiceText\":\"Haluatko varmasti perua maksun?\"}}},\"JsonDiffComponent\":{\"path\":\"Polku\",\"action\":\"Toiminto\",\"oldValue\":\"Vanha arvo\",\"newValue\":\"Uusi arvo\",\"actions\":{\"ADD\":\"Lisätty\",\"REMOVE\":\"Poistettu\",\"UPDATE\":\"Päivitetty\"}},\"PayrollDetailsMessages\":{\"payrollStatus\":\"Palkkalistan tila\",\"setPayrollStatus\":\"Aseta palkkalistan tila\",\"note\":\"Huomio:\",\"payrollStatusDescription\":\"Valitse, miten haluat edetä palkkojen kanssa muuttamalla palkkalistan tilaa:\",\"payrollStatusDescription1\":\"Haluan hyväksyä palkkalaskelmat ennen maksua (Valitse tila 'Tilitoimiston käsittelyssä')\",\"payrollStatusDescription1Description\":\"Palkanlaskija viimeistelee palkanlaskennan ja lähettää lopulliset palkkalaskelmat sinulle hyväksyttäväksi ennen maksua.\",\"payrollStatusDescription2\":\"Tilitoimisto laskee ja maksaa palkat suoraan (Valitse tila 'Valmis maksuun')\",\"payrollStatusDescription2Description\":\"Palkanlaskija viimeistelee palkanlaskennan ja asettaa palkat suoraan maksuun ilman erillistä hyväksyntääsi.\",\"payrollStatusDescription3\":\"Palkkojen maksaminen ei tapahdu automaattisesti, vaan tilitoimisto käsittelee ne valintasi mukaisesti.\",\"openMessageThread\":\"Avaa viestiketju\",\"openMessageThreadDescription\":\"Jos haluat lähettää viestin tilitoimistolle palkkalistaan liittyen, avaa uusi viestiketju.\"}},\"NG1_Other\":{\"Roles\":{\"employer\":\"Työnantaja\",\"worker\":\"Työntekijä\",\"company\":\"Yritys tai yhteisö\",\"accountant\":\"Tilitoimisto\"},\"Register\":{\"title\":\"Miten käytät palvelua?\",\"text\":\"Valitse rooli, jolla kirjaudut palveluun.\"}},\"NG1_Pages\":{\"CompanyNotCompany\":{\"title\":\"Tämä sivusto vaatii kirjautumisen\",\"registerBtn\":\"Luo tunnus\",\"loginBtn\":\"Kirjaudu\"},\"Info\":{\"abcHelp\":{\"html\":\"<h2 class=\\\"page-header\\\">Näin käytät Palkkaus.fi-palvelua</h2>\\n<div class=\\\"videoWrapper\\\" style=\\\"margin-bottom:30px;\\\">\\n<iframe src=\\\"https://www.youtube.com/embed/utQeebqpyU0\\\" frameborder=\\\"0\\\" allowfullscreen></iframe>\\n</div>\\n<p>Mitä tahansa kysymyksiä sinulla on palvelun käyttöön liittyen, voit olla meihin yhteydessä ja autamme sinua mielellämme.</p>\\n<p>Ohje ensimmäisen palkan maksamiseen löytyy <a href=\\\"https://www.palkkaus.fi/abc/miten-palkanmaksu-tehdaan/\\\">tämän linkin kautta</a>.</p> <p>Voit lähettää kysymyksesi tai yhteydenottopyynnön asiakaspalvelumme sähköpostiosoitteeseen <a href=\\\"&#x6D;&#x61;&#x69;&#x6C;&#x74;&#x6F;&#x3A;&#x61;&#x73;&#x70;&#x61;&#x40;&#x70;&#x61;&#x6C;&#x6B;&#x6B;&#x61;&#x75;&#x73;&#x2E;&#x66;&#x69;\\\">aspa@palkkaus.fi</a> milloin tahansa ja otamme sinuun yhteyttä mahdollisimman nopeasti. Voit myös soittaa asiakaspalveluumme arkisin klo 9-16 välillä. Asiakaspalvelun numero on 020 798 0230</p>\"},\"abc\":{\"description\":\"Täältä löydät lisää tietoa yrittämiseen ja palkanmaksuun liittyvistä asioista.\",\"entrepreneur\":\"Yrittäjä\",\"businessOwner\":\"Yritys ja yhteistyö\",\"salary\":\"Palkanlaskenta ja palkanmaksu\",\"employment\":\"Työsuhde ja työsopimus\",\"documentTemplates\":\"Dokumenttipohjat ja lomakkeet\",\"palkkausInstructions\":\"Käyttöohjeet\"},\"customerService\":{\"title\":\"Yhteys asiakaspalveluun\"},\"instructions\":\"Käyttöohjeet\",\"infoText\":{\"html\":\"Ohjelman käyttöohjeet löytyvät tukisivustolta osoitteesta <a href='https://help.palkkaus.fi/hc/fi' target='_blank'>help.palkkaus.fi</a>.\",\"info\":\"Pääset ohjeisiin myös oikean alakulman Apua-napin kautta. Kirjoita hakusana hakukenttään niin saat listauksen siihen liittyvistä ohjeista. Voit siirtyä tukisivustolle ohjeen yläkulmassa olevan nuoli-ikonin kautta. Jos et löydä sopivaa ohjetta, voit olla yhteydessä asiakaspalveluumme Apua-napin kautta, sähköpostitse tai puhelimitse, niin autamme sinua!\"},\"buttons\":{\"web\":{\"html\":\"<a href=\\\"https://www.palkkaus.fi/\\\" target=\\\"_blank\\\" class=\\\"btn btn-default\\\">Palkkaus.fi verkossa</a>\"},\"dataProtection\":{\"html\":\"<a href=\\\"https://www.palkkaus.fi/tietosuoja/\\\" target=\\\"_blank\\\" class=\\\"btn btn-default\\\">Palvelun tietosuoja</a>\"},\"termsOfService\":{\"html\":\"<a href=\\\"https://www.palkkaus.fi/kayttoehdot/\\\" target=\\\"_blank\\\" class=\\\"btn btn-default\\\">Palvelun käyttöehdot</a>\"}}},\"Calc\":{\"History\":{\"heading\":\"Muualla maksettu palkka\",\"lead\":\"Tällä lomakkeella lisätä tai muokata muissa palkanmaksuohjelmissa laskettu ja maksettuja palkkoja, jotka on jo ilmoitettu tulorekisteriin.\",\"workerJobLabel\":\"Työntekijä / työsuhde\",\"workerError\":\"VIRHE: Työntekijää ei ole määritetty\",\"workerLabel\":\"Työntekijä\",\"payrollInfo\":\"Palkka-aineiston tiedot\",\"salaryDateLabel\":\"Laskennallinen palkkapäivä\",\"workStartDateLabel\":\"Kauden alku\",\"workEndDateLabel\":\"...loppu\",\"statusLabel\":\"Tila\",\"fixedTaxAmountLabel\":\"Ennakonpidätys (euroa)\",\"rows\":\"Rivit\",\"payrollRows\":\"Palkkalaskelmien rivit\",\"reCalculate\":\"Laske uudelleen\",\"cumulativePayrollRows\":\"Kumulatiivisen palkkalaskelman rivit\",\"cumulativePayrollInfo\":{\"html\":\"Alla näet kumulatiivisen palkkalaskelman rivit <strong>Vuoden alusta</strong>. Tähdellä* merkityt ovat näkyvissä myös edelliselle vuodelle.\"},\"totalGrossSalary\":\"Bruttopalkka ilman luontoisetuja\",\"benefits\":\"Luontoisedut\",\"holidayCompensation\":\"Lomakorvaus\",\"holidayBonus\":\"Lomaraha\",\"holidaySalary\":\"Loma-ajan palkka\",\"totalTaxable\":\"Ennakonpid. alainen ansio\",\"tax\":\"Ennakonpidätys\",\"pension\":\"Työeläkemaksu\",\"unemploymentInsurance\":\"Työttömyysvakuutusmaksu\",\"deductions\":\"Kaikki vähennykset palkasta\",\"totalExpenses\":\"Verovapaat kustannukset\",\"salaryPayment\":\"Rahana maksettu palkka\"}},\"Calendar\":{\"heading\":\"Luo uusi kalenteritapahtuma\",\"Occurences\":{\"accountantCalendar\":\"Palkanlaskijan kalenteri\",\"periodLabel\":\"Periodi\",\"listHeading\":\"Lista\",\"dailyHeading\":\"Päivänäkymä\",\"weekHeading\":\"Viikkonäkymä\"},\"categorySelections\":{\"calendarEvent\":\"Palkanlaskijan kalenteri\",\"calculation\":\"Laskelmat (draft)\",\"calculationPaid\":\"Maksetut laskelmat\",\"payrollDetails\":\"Palkkalistat\",\"messageThread\":\"Viestit\",\"calculationsAndPayrolls\":\"Laskelmat ja palkkalistat\",\"all\":\"Kaikki tietueet\",\"none\":\"Ei mitään\",\"default\":\"Oletus (ei mitään)\"},\"calendarSeriesPeriods\":\"Periodit\",\"calendarSeriesActions\":\"Tapahtumat\"},\"Home\":{\"copyRight\":\"Copyright Suomen Palkanlaskenta Oy\",\"Error\":{\"pageNotFound\":\"Sivua ei löytynyt\",\"lead\":{\"html\":\"Tätä sivua ei ole määritetty <code>$routeProvider</code>-komponentille (<code>angular.module.config</code>).\"}}},\"Invoices\":{\"preview\":\"Esikatselu\",\"calcs\":\"Laskelma(t)\",\"chooseCalc\":\"Valitse laskelma\",\"update\":\"Päivitä\",\"printAndBarCode\":\"Tuloste ja viivakoodi\",\"actions\":\"Toiminnot\"},\"Messages\":{\"newMessage\":{\"title\":\"Viestit\",\"description\":{\"html\":\"Aloita uusi viestiketju, kun haluat olla yhteydessä palkanlaskijaasi. Voit liittää viestiin myös tiedostoja. Viestit kulkevat tietoturvallisesti ja viestiketju jää talteen.\"}},\"newMessageDetails\":{\"title\":\"Lähetä uusi viesti\",\"description\":{\"html\":\"Aloita uusi viestiketju, kun haluat olla yhteydessä palkanlaskijaasi. Voit liittää viestiin myös tiedostoja. Viestit kulkevat tietoturvallisesti ja viestiketju jää talteen.\"}}},\"Reports\":{\"accountingIntro\":\"Täältä löydät kuukausi- ja vuosiraportit palkanmaksuista kirjanpitoa varten. Voit lisätä kirjanpitäjäsi sähköpostiosoitteen Asetuksissa palveluun, niin lähetämme kirjanpitoraportit kirjanpitäjällesi automaattisesti.\",\"accountingMonthly\":\"Kuukausiraportit\",\"accountingYearly\":\"Vuosiraportit\",\"yearlySummary\":\"Lain mukaan työnantajan pitää toimittaa työntekijälle yhteenveto kaikista palkoista, joita on maksanut vuoden aikana.\",\"yearlyTitle\":\"Vuosiyhteenvedot\",\"latestReports\":\"Viimeisimmät raportit\",\"Absences\":{\"heading\":\"Poissaolot\",\"calendar\":\"Kalenteri\",\"list\":\"Lista\",\"thisYear\":\"Tämä vuosi\",\"lastYear\":\"Viime vuosi\",\"thisMonth\":\"Tämä kuukausi\",\"lastMonth\":\"Viime kuukausi\",\"dates\":\"Päivämäärät\",\"addWorker\":\"Lisää työntekijä\",\"employeeNoAnsences\":\"Työnantajalla ei ole tallennettuja poissaoloja\",\"first\":\"Ensimmäinen\",\"latest\":\"Viimeisin\",\"absencesPaid\":\"Palkalliset\",\"absencesUnpaid\":\"Palkattomat\",\"absencesHolidayAccrual\":\"Lasketaan lomakertymään\",\"absencesNoHolidayAccrual\":\"Ei lasketa\",\"absence\":\"poissaoloa\"},\"Archive\":{\"heading\":\"Arkisto: Ennen vuotta 2019 lähetetyt raportit\",\"lead\":\"Tässä arkistossa on raportit palkoista, jotka on maksettu ennen Tulorekisteriä: Vuonna 2018 tai aiemmin. Vuodesta 2019 lähtien tulorekisteri muutti ilmoituskäytännötä täysin ja tämä sivu on vain arkisointitarkoituksiin.\",\"unemploymentInsuranceFund\":\"Työttömyysvakuutusrahasto\",\"taxYearlyNotification\":\"Verottaja, vuosi-ilmoitus\",\"taxMonthlyNotification\":\"Verottaja, kuukausi-ilmoitus\",\"pension\":\"Työeläkevakuutus (TyEL)\"},\"Holidays\":{\"holidayList\":\"Lomalista\",\"holidayYear\":\"Lomavuosi\",\"show\":\"Näytä\",\"summerPeriod\":\"Kesälomakausi\",\"otherPeriod\":\"Muut kausi\",\"winterPeriod\":\"Talvilomakausi\",\"list\":\"Lista\",\"employeeNoHolidays\":\"Työnantajalla ei ole tallennettuja lomavuosia\",\"holidayCompensation\":{\"html\":\"Lomatyyppi<br /> Lomaraha\"},\"year\":\"Vuosi\",\"planned\":{\"html\":\"Suunnitellut lomat<br />Jaksot\"},\"summerWinter\":{\"html\":\"Kesä<br />Talvi\"},\"endSaldo\":\"Kertymä\",\"addWorker\":\"Lisää työntekijä\"},\"PayCertificate\":{\"intro\":{\"text\":\"Voit tulostaa palvelusta työntekijän palkkatodistuksen ja täydentää sitä puuttuvin osin. Lomake liitetään ansiopäivärahahakemukseen. Työnantaja täyttää lomakkeen vähintään 26/34 viikon ajalta.\",\"payCertificateInfo\":\"Palkkatodistukseen tarvittavat tiedot on saatavilla Tulorekisteristä, joten tarkistathan onko palkkatodistuksen toimittaminen pakollista.\"}}},\"Service\":{\"heading\":\"Aineiston lähetys tilitoimistolle / palkanlaskijalle\",\"lead\":\"Aineiston lähetys -osiossa voit tarkistaa palkanlaskijasi sinulle luomia laskelmia ja palkkalistoja tai tehdä niihin muutoksia.\",\"waitingApprovalPayrolls\":\"Tarkistettavat palkkalistat\",\"waitingApprovalCalculations\":\"Tarkistettavat laskelmat\",\"sendMaterials\":\"Lähetä aineistoja\",\"temporalWorker\":\"Tilapäinen työntekijä\",\"temporalWorkerInfoText\":\"Lähetä tästä palkanmaksupyynnöt tilapäisistä työntekijöistä. Palkanlaskija tarkistaa palkan.\",\"sendCalc\":\"Lähetä laskelma\",\"entrepreneurSalary\":\"Yrittäjän palkka\",\"entrepreneurSalaryInfoText\":\"Maksa yrittäjän oma palkka silloin kun se sinulle parhaiten sopii.\",\"paySalary\":\"Maksa palkka\",\"boardRewards\":\"Hallituspalkkiot\",\"boardRewardsInfoText\":\"Maksa hallituspalkkiot helposti heti kokousten jälkeen tai sovittuina aikoina.\",\"payBoardReward\":\"Maksa hallituspalkkio\",\"travelInvoices\":\"Matkalaskut\",\"travelInvoicesInfoText\":\"Kilometrikorvaukset, päivärahat ja kulukorvaukset matkoista.\",\"payTravelInvoice\":\"Maksa matkalasku\",\"expenses\":\"Kulukorvaukset\",\"expensesInfoText\":\"Kulukorvaukset kuittien perusteella mukaan lukien kilometrikorvaukset.\",\"payExpense\":\"Maksa kulukorvaus\",\"ApproveCalculationList\":{\"nothingToReview\":\"Ei tarkastettavaa\",\"status\":\"Tila\",\"payment\":\"Maksu\",\"salary\":\"Palkka\",\"notSelected\":\"(Työntekijää ei ole valittu)\",\"checkAndSend\":\"Tarkista ja lähetä\"},\"ApprovePayroll\":{\"acceptAndSendPayroll\":\"Hyväksy ja lähetä palkkalista\"},\"ApprovePayrollList\":{\"nothingToReview\":\"Ei tarkastettavaa\",\"period\":\"Palkkakausi\",\"payment\":\"Maksu\",\"calculations\":\"Palkkalaskelmat\",\"moveToPayroll\":\"Siirry palkkalistaan\",\"checkAndSend\":\"Tarkista ja lähetä\"},\"Board\":{\"heading\":\"Hallituspalkkion maksaminen\",\"lead\":\"Tällä lomakkeella voit laittaa hallituspalkkion suoraan maksuun ilman palkanlaskijan tarkistusta.\",\"boardMember\":\"Hallituksen jäsen\",\"chooseWorker\":\"Valitse työntekijä\",\"loadingWorkers\":\"Ladataan työntekijöitä...\",\"newMember\":\"Uusi jäsen\",\"createWorker\":\"Luo työntekijä\",\"worker\":\"Työntekijä\",\"change\":\"Vaihda\",\"salaryDate\":\"Palkkapäivä\",\"salaryDateTooEarly\":\"Palkkapäivä on liian aikaisin\",\"weekday\":\"arkipäivää\",\"noGuaranteeSalaryDate\":\"Teemme parhaamme, mutta emme takaa palkkapäivää.\",\"period\":\"Palkkakausi\",\"daysCount\":\"Työpäiviä kaudella\",\"noEmploymentType\":\"Työsuhteen tyyppiä ei ole määritetty\",\"monthlySalary\":\"Kuukausipalkka\",\"hourCount\":\"Tuntien määrä\",\"hourlySalary\":\"Tuntipalkka\",\"entrepreneurSalary\":\"Yrittäjän palkka\",\"salaryType\":\"Palkan tyyppi\",\"salary\":\"Palkka / palkkio\",\"otherRows\":\"Muut rivit\",\"otherRowsMessage\":\"Palkan lisät\",\"message\":\"Muita lisätietoja\",\"sendMaterial\":\"Lähetä aineisto\"},\"Calculation\":{\"heading\":\"Lähetä aineisto\",\"lead\":\"Tällä lomakkeella voit lähettää perusmuotoisen palkka-aineiston palkanlaskijalle, joka tarkastaa tiedot ja laskee palkan puolestasi. Ilmoita palkkatiedot viimeistään 6 arkipäivää ennen palkkapäivää (palkkapäivä = päivä, jolloin rahat ovat työntekijän tilillä).\",\"worker\":\"Työntekijä\",\"chooseWorker\":\"Valitse työntekijä\",\"loadingWorkers\":\"Ladataan työntekijöitä...\",\"newWorker\":\"Uusi työntekijä\",\"createWorker\":\"Luo työntekijä\",\"change\":\"Vaihda\",\"salaryDate\":\"Palkkapäivä\",\"salaryDateTooEarly\":\"Palkkapäivä on liian aikaisin\",\"weekday\":\"arkipäivää\",\"noGuaranteeSalaryDate\":\"Teemme parhaamme, mutta emme takaa palkkapäivää.\",\"period\":\"Palkkakausi\",\"daysCount\":\"Työpäiviä kaudella\",\"noEmploymentType\":\"Työsuhteen tyyppiä ei ole määritetty\",\"monthlySalary\":\"Kuukausipalkka\",\"hourCount\":\"Tuntien määrä\",\"hourlySalary\":\"Tuntipalkka\",\"entrepreneurSalary\":\"Yrittäjän palkka\",\"salaryType\":\"Palkan tyyppi\",\"salary\":\"Palkka / palkkio\",\"otherRows\":\"Muut rivit\",\"otherRowsMessage\":\"Palkan lisät\",\"message\":\"Muita lisätietoja\",\"sendMaterial\":\"Lähetä aineisto\"},\"Entrepreneur\":{\"heading\":\"Yrittäjän palkka\",\"lead\":\"Tällä lomakkeella voit laittaa yrittäjän (tai yrittäjän perheenjäsenen) palkan suoraan maksuun ilman palkanlaskijan tarkistusta.\",\"entrepreneur\":\"Yrittäjä\",\"chooseWorker\":\"Valitse työntekijä\",\"loadingWorkers\":\"Ladataan työntekijöitä...\",\"newEntrepreneur\":\"Uusi yrittäjä\",\"createWorker\":\"Luo työntekijä\",\"worker\":\"Työntekijä\",\"change\":\"Vaihda\",\"salaryDate\":\"Palkkapäivä\",\"salaryDateTooEarly\":\"Palkkapäivä on liian aikaisin\",\"weekday\":\"arkipäivää\",\"noGuaranteeSalaryDate\":\"Teemme parhaamme, mutta emme takaa palkkapäivää.\",\"period\":\"Palkkakausi\",\"daysCount\":\"Työpäiviä kaudella\",\"noEmploymentType\":\"Työsuhteen tyyppiä ei ole määritetty\",\"monthlySalary\":\"Kuukausipalkka\",\"hourCount\":\"Tuntien määrä\",\"hourlySalary\":\"Tuntipalkka\",\"entrepreneurSalary\":\"Yrittäjän palkka\",\"salaryType\":\"Palkan tyyppi\",\"salary\":\"Palkka / palkkio\",\"otherRows\":\"Muut rivit\",\"otherRowsMessage\":\"Palkan lisät\",\"message\":\"Muita lisätietoja\",\"sendMaterial\":\"Lähetä aineisto\"}},\"ServiceModels\":{\"addServiceModel\":\"Lisää palvelumalli\",\"lead\":\"Palvelumallit määrittelevät tavan, jolla tilitoimistona palvelet asiakkaitasi. Voit määrittää Palkkaus.fi-sivuston ulkoasun, rakenteen, ominaisuudet erittäin laajasti palvelumallikohtaisesti. Tilitoimistolla voi olla useita palvelumalleja ja kukin asiakasyritys kuuluu niistä yhteen. Palvelumallin luominen vaatii tilitoimistosopimusta.\",\"Current\":{\"lead\":\"Palvelumalli määrittää miten tilitoimisto palvelee asiakkaitaan (yrityksiä). Palvelumalliin kuuluu hinnoittelu, sivuston ja raporttien ulkoasu (brändäys), yrityssivuston rakenne ja ominaisuudet, kalenterit ja ajastukset, räätälöidyt toiminnallisuudet, työnkulku sekä automaatio (Palkkaus skriptit).\"}},\"Settings\":{\"Authorizations\":{\"lead\":\"Palkkaus.fi tilit, joille olet antanut valtuutuksen\"},\"Integrations\":{\"lead\":\"Tällä sivulla näet kaikki ohjelmistokumppanipalvelut, jotka sinulla on käytössä. Aktivoi lisäpalveluita klikkaamalla kumppanikorttia\"},\"ServiceSettings\":{\"heading\":\"Palkkaus.fi-tilin tiedot\"},\"SigningSuccess\":{\"success\":\"Allekirjoitus onnistui\"},\"accountTitle\":\"Tili ja käyttäjä\",\"contactLabel\":\"Yhteystiedot\",\"userLabel\":\"Käyttäjä\",\"insurancesTitle\":\"Vakuutukset\",\"accountantTitle\":\"Tilitoimisto / Kirjanpitäjä\",\"noAccountant\":\"Ei kirjanpitäjää / tilitoimistoa\",\"insuranceMissing\":\"Puuttuu\",\"paymentChannelsTitle\":\"Maksutavat\",\"defaultChannelLabel\":\"Oletusmaksutapa\",\"languageLabel\":\"Kieli\"},\"Taxcards\":{\"heading\":\"Lataamasi verokortit\",\"lead\":{\"noWorkerHtml\":\"Listaus näyttää kaikki lataamasi verokortit päivitysjärjestyksessä. Useimpiin tarkoituksiin parempi listaus on <a href='#/workers/taxcards'>verokortit työntekijöittäin</a>.\",\"workerHtml\":\"Listaus näyttää kaikki lataamasi verokortit päivitysjärjestyksessä. Useimpiin tarkoituksiin parempi näkymä <a href='#/taxcards'>on omat aktiiviset verokortit</a> näkymä.\"},\"Details\":{\"heading\":\"Verokortit (PRO)\",\"lead\":\"Tilitoimiston ja palkanlaskijan näkymä verokortteihin.\",\"overview\":\"Yleiskuva (yrityksen)\",\"noAttachment\":\"Ei liitetiedostoa\",\"download\":\"Lataa\",\"editing\":\"Muokkaus (PRO)\",\"allTaxcards\":\"Kaikki verokortit\",\"deleteButton\":\"Poista (test)\",\"deleteButtonInfo\":\"Verokortin poistaminen testissä: Tästä voit poistaa laskelman testissä vaikka se ei olisikaan mahdollista tuotantoympäristössä. Normaalisti verokortti poistetaan tuotantoympäristössä työntekijäkohtaisesta verokorttilistasta, jossa 'Poista' on näkyvissä vain, jos verokortin voi poistaa.\"}},\"Usecases\":{\"createNewUsecase\":\"Luo uusi räätälöinti\",\"usecase\":\"Räätälöinti (usecase)\",\"lead\":\"Räätälöinti on yrityskohtainen käyttöliittymä ja/tai liiketoimintalogiikka, joka voidaan liittää esim. laskelmaan, palkkalistaan, työsuhteeseen, lomavuoteen tai poissaoloihin. Räätälöinnillä voidaan automatisoida prosesseja tai lisätä uusia laskentalogiikoita tai tarkistuksia.\"},\"Workers\":{\"newWorker\":\"Uusi työntekijä\",\"Taxcards\":{\"lead\":\"Verokorttilistaus näyttää kaikki työsuhteet ja voimassa olevat verokortit tietylle palkanmaksupäivälle.\"}}},\"NG1_PagesPersonal\":{\"index\":{\"account\":{\"iban\":\"IBAN\",\"phone\":\"Puh\",\"showAccountInfoBtn\":\"Omat tiedot\"},\"alert\":{\"anon\":{\"html\":\"<strong>Et ole kirjautunut</strong> Tämä sivu vaatii kirjautumisen\"},\"company\":{\"html\":\"<strong>Tämä on kotitalouden / työntekijän sivu!</strong> Olet kirjautunut sisään yrityksenä. Kirjaudu ulos ja uudelleen kotitaloutena tai työntekijänä. Jos yrität päästä yrityspalveluun, tai et muuten tiedä mitä tehdä, ota yhteys asiakaspalveluun.\"}},\"taxcard\":{\"incomeLimit\":\"Tuloraja\",\"leftBeforeLimit\":\"Jäljellä ennen tulorajaa\",\"taxPercent\":\"Veroprosentti\",\"taxPercent2\":\"Lisäprosentti\",\"totalIncome\":\"Palkkoja maksettu\",\"validTill\":{\"html\":\"<span class='text-success'>Voimassa</span> <span class='small'>({{validityEnd}} asti)</span>\"},\"buttons\":{\"sendTaxcardBtn\":\"Lähetä verokortti\",\"showFileBtn\":\"Näytä tiedosto\",\"showTaxcardsBtn\":\"Näytä verokortit\"},\"addTaxcardText\":{\"html\":\"Työnantaja <strong>{{employer}}</strong> on maksanut sinulle palkkaa <strong>{{salary}}</strong> euroa. <br /> Jotta voimme maksaa tämän palkan sinulle, sinun täytyy syöttää verokortti.\"},\"addTaxcardTitle\":\"Lisää verokortti\",\"sendTaxcardTitle\":\"Lähetä verokortti työnantajillesi\",\"sendTaxcardText\":\" Voit ladata jaetun verokortin, jolle työnantajasi voivat maksaa palkkaa. Verokortti näkyy työnantajalle seuraavan palkanmaksun yhteydessä.\"},\"workerInvitation\":{\"workerInvitationText\":\"Työnantaja on maksanut sinulle palkkaa\",\"workerInvitationText2\":\"Jotta voimme maksaa tämän palkan sinulle, sinun täytyy syöttää verokortti.\",\"showTaxcardsBtn\":\"Näytä verokortit\"},\"sendCalculation\":{\"panelHeading\":\"Lähetä laskelma\",\"panelTitle\":\"Lähetä laskelma työnantajallesi\",\"panelText\":\"Voit lähettää valmiin palkkalaskelman työnantajallesi maksettavaksi. Täytä tarvittavat tiedot laskelmalle laskurilla ja jaa laskelma työnantajallesi.\",\"button\":\"Tee uusi laskelma\"},\"calculation\":{\"grossSalary\":\"Bruttopalkka\",\"netSalary\":\"Nettopalkka\",\"taxes\":\"Verot\",\"buttons\":{\"openCalculationBtn\":\"Avaa laskelma\",\"showCalculationBtn\":\"Näytä laskelma\",\"downloadPdfBtn\":\"Lataa PDF\"}}},\"error404\":\"VIRHE: Sivupohjaa ei löytynyt\",\"taxcards\":{\"intro\":{\"html\":\"<p class=\\\"lead\\\">Palkkaus.fi-palvelu tarkistaa nykyisen verokortin tiedot aina verottajan rajapinnasta. Teemme tarkistuksen myös jokaisen palkanmaksun yhteydessä, joten sinun ei tarvitse lisätä uutta verokorttia: Riittää, että huolehdit, että verottajalla olevassa verokortissa on sopivat tulotiedot / prosentti.</p><p><strong>Jos sinulla on useita työnantajia, kaikki palkat näkyvät samalla verokortilla,</strong> joten voit kätevästi seurata tulorajan ylittämistä etkä saa veromätkyjä.</p>\"},\"introGetAutoTaxcard\":{\"html\":\"Palkkaus.fi-palvelussa on nyt käytössä verottajan automaattinen Ennakonpidätys-rajapinta. <strong>Veroprosentit tarkistetaan automattisesti suoraan verottajalta jokaisen palkanmaksun yhteydessä, eikä sinun tarvitse enää syöttää verokortin tietoja.</strong> Klikkaa nappulaa ottaaksesi automaattinen haku käyttöön.\"},\"buttons\":{\"getTaxPercentsBtn\":\"Hae veroprosentit verottajalta\",\"checkTaxPercentsBtn\":\"Hae veroprosentit verottajalta\",\"addManualTaxcardBtn\":\"Lisää manuaalinen verokortti\",\"updateCalcsBtn\":\"Päivitä laskelmat\"},\"addSharedCardTitle\":\"Lisää jaettu verokortti\",\"updateCalcsNote\":{\"html\":\"HUOM: Kaikkia palkkojasi ei ole merkitty tälle verokortille. Tämä voi johtua siitä, että jollain työnantajalla on erikseen lisätty verokortti. Päivitä kaikki maksetut laskelmat verokorttiin klikkaamalla \\\"Päivitä laskelmat\\\".\"},\"calcsPaidForCardTabHeading\":\"Verokortille maksetut laskelmat\",\"employersTabHeading\":\"Työnantajat\",\"cardStatusTableHeading\":\"Jaetun kortin tila\",\"yearTableHeading\":\"Vuosi\",\"cardStatus2TableHeading\":\"Tila\",\"employerTableHeading\":\"Työnantaja\",\"typeTableHeading\":\"Tyyppi\",\"taxPercentTableHeading\":\"Veroprosentti\",\"taxPercent2TableHeading\":\"Lisäprosentti\",\"salariesPaidTableHeading\":\"Palkkoja maksettu\",\"incomeLimitTableHeading\":\"Tuloraja\",\"validDateTableHeading\":\"Voimassa\",\"startDateTableHeading\":\"Otettu käyttöön\",\"earlierTaxCardsTabHeading\":\"Aikaisemmat verokortit\",\"incomeLimitSpanTableHeading\":\"...ylittävä %\",\"approveBtn\":\"Hyväksy\"},\"employmentContracts\":{\"intro\":\"Palkkaus.fi -kotitalouspalvelussa oli mahdollista luoda työsopimuksia kotitalouden ja työntekijän välillä (vain suomeksi). Koska kotitalouspalvelu on päätetty lopettaa vuoden 2020 lopussa, uusia sopimuksia ei voi enää luoda eikä vanhoja muokata. Vanhat sopimukset säilyvät kuitenkin arkistossa.\"},\"employerArchive\":{\"intro\":{\"html\":\"Palkkaus.fi -kotitalouspalvelussa myös kotitaloudet pystyivät maksamaan palkkaa (vain suomeksi) ja Palkkaus.fi hoiti kotitalousvähennysten ilmoittamisesta verottajalle. <strong>Kotitalouspalvelu suljettiin vuoden 2020 lopussa</strong>, Rakentamisen ja remontoinnin palkkoja voi maksaa edelleen <a href=\\\"https://palkkamylly.palkkaus.fi/\\\" target=\\\"_blank\\\">Rakennusliiton Palkkamylly-palvelussa</a>. <strong>Näille sivuille on kerätty arkistoon dokumentteja kotitaloustyöntantajien palkanmaksuun liittyen.</strong>\"}}},\"NG1_Services\":{\"UiCrudHelpers\":{\"taxcards\":{\"noTaxcardTitle\":\"Verokortin tallennus epäonnistui!\",\"noTaxcardText\":\"Verokortin tietoja ei ole tallennettu. Tyypillisesti tämä johtuu siitä, että verottajalla ei ole verokorttia tälle henkilötunnukselle. Lisää verokortin tiedot työntekijän tiedoissa. Kysy tarvittaessa verokorttia työntekijältä tai käytä valintaa \\\"Ei verokorttia (60% ennakonpidätys)\\\".\"}},\"AuthorizedAccountService\":{\"partnerIntegrationSiteList\":{\"askelma\":{\"title\":\"Askelma\",\"description\":\"Palkanmaksupalvelu Askelmassa\"},\"domus\":{\"title\":\"Domus\",\"description\":\"Domus-isännöintijärjestelmä\"},\"easoft\":{\"title\":\"Easoft\",\"description\":\"Palkanmaksupalvelu Easoftissa\"},\"ecom\":{\"title\":\"Ecom\",\"description\":\"Ecom - Rakennusalan toiminnanohjaus\"},\"holvi\":{\"title\":\"Holvi\",\"description\":\"Palkanmaksupalvelu Holvissa\"},\"isolta\":{\"title\":\"Isolta\",\"description\":\"Isolta Arkhimedes -palkanmaksu\"},\"finago\":{\"title\":\"Procountor Solo\",\"description\":\"Sooloyrittäjän kirjanpito- ja laskutusohjelma\"},\"accountor\":{\"title\":\"Accountor Go\",\"description\":\"Accountor Go palvelu pienyrityksillä\"},\"briox\":{\"title\":\"Briox\",\"description\":\"Palkanmaksupalvelu Brioxissa\"},\"nocfo\":{\"title\":\"NOCFO\",\"description\":\"Helppokäyttöinen kirjanpito-ohjelma pienyrityksille ja yhdistyksille\"},\"passeliMerit\":{\"title\":\"Passeli Merit\",\"description\":\"Taloushallinnon kokonaisuus kaikkiin tarpeisiin\"}}}},\"NG1_Sitemap\":{\"home\":\"Yleiskuva\",\"calculations\":{\"main\":\"Palkanmaksu\",\"index\":\"Viimeisimmät\",\"paid\":\"Maksetut\",\"paid-ir\":\"Maksetut\",\"draft\":\"Luonnokset\",\"received\":\"Vastaanotetut\",\"shared\":\"Lähetetyt\",\"repairs\":\"Korjaukset\",\"repair\":\"Korjaus\",\"details\":\"Palkkalaskelma\",\"copyAsNew\":\"Uusi laskelma (kopio)\",\"newForWorker\":\"Uusi laskelma\",\"sharing\":\"Jaa laskelma\",\"sepaInvoices\":\"Maksuaineiston lähetys\",\"companyInvoices\":\"Maksamattomat laskut\",\"payroll\":{\"main\":\"Palkkalistat\",\"details\":\"Palkkalistan muokkaus/maksu\",\"import\":\"Datan tuonti\"},\"importCalcs\":\"Palkkalistan tuonti\"},\"payroll\":{\"main\":\"Palkkalistat\",\"details\":\"Palkkalistan muokkaus/maksu\",\"import\":\"Datan tuonti\"},\"sendCalculation\":\"Lähetä aineisto\",\"messages\":{\"main\":\"Viestit\",\"index\":\"Kaikki viestit\",\"new\":\"Uusi viestiketju\",\"details\":\"Viestiketju\"},\"workers\":{\"main\":\"Työntekijät\",\"index\":\"Kaikki työntekijät\",\"employments\":\"Kaikki työntekijät\",\"taxcards\":\"Verokortit\",\"details\":\"Työntekijän tiedot\",\"workerDetails\":\"Työntekijän tiedot\",\"importWorkers\":\"Työntekijöiden tuonti\"},\"reports\":{\"main\":\"Raportit\",\"index\":\"Yleiskuva\",\"accounting\":{\"main\":\"Kirjanpito\",\"details\":\"Kirjanpidon tiedot\"},\"accountingQuery\":\"Kirjanpitokyselyt\",\"accountingEditor\":\"Kirjanpitoasetukset\",\"accountingReports\":\"Kirjanpidon raportit\",\"accountingHolidayPayDebtQuery\":\"Lomapalkkavelka\",\"holidayReport\":\"Lomalaskennan yhteenveto\",\"holidayPayReportQuery\":\"Lomapalkan laskenta\",\"payStatsReportQuery\":\"Ansioiden laskentaraportti\",\"summaryReportQuery\":\"Palkkojen yhteenvetoraportti\",\"salaryReports\":\"Palkkalaskelmat\",\"employerPayments\":\"Maksut, jotka työnantaja hoitaa\",\"yearlySummary\":\"Työntekijöiden vuosiyhteenvedot\",\"earningsReports\":\"Palkkatietoilmoitukset\",\"accountingLegacy\":\"Arkisto\",\"archive\":\"Arkisto (-2018)\",\"invoices\":{\"main\":\"Maksut\",\"details\":\"Laskun tiedot\"},\"ad-hoc\":{\"main\":\"Raporttikone\",\"details\":\"Raporttikone\"},\"irepr\":{\"main\":\"Palkkatietoilmoitukset\",\"details\":\"Palkkatietoilmoitus\"},\"irpsr\":{\"main\":\"Erillisilmoitukset\",\"details\":\"Erillisilmoitus\"},\"payCertificate\":\"Palkkatodistus\"},\"worktime\":{\"main\":\"Lomat ja poissaolot\",\"holidays\":\"Lomalista\",\"absences\":\"Poissaolot\"},\"service\":{\"main\":\"Aineiston lähetys\"},\"settings\":{\"main\":\"Asetukset\",\"index\":\"Yleiskuva\",\"paymentSettings\":\"Palkanmaksun asetukset\",\"insurances\":\"Vakuutukset\",\"paymentChannelSettings\":\"Maksutavat\",\"accountingTargetSettings\":\"Kirjanpitokohteet\",\"serviceSettings\":\"Tilin tiedot\",\"ownerSettings\":\"Osakasluettelo\",\"authorizations\":\"Valtuutukset\",\"accountants\":\"Tilitoimisto\",\"integrations\":\"Integraatiot\",\"assureWorkerAccount\":\"Luo uusi työntekijätili\",\"accountReset\":\"Demotilin data\",\"paymentChannel\":\"Maksukanava\",\"proSettings\":\"Pro - asetukset\",\"rowTypesSettings\":\"Palkkalajit\",\"accountingEditor\":\"Kirjanpitoasetukset\"},\"pro-service\":{\"main\":\"Palvelumalli (PRO)\",\"proSettings\":\"Pro - asetukset\",\"usecases\":{\"main\":\"Räätälöinnit\",\"details\":\"Räätälöinti\"},\"worktime-imports\":{\"main\":\"Työajan tuonti (import)\",\"details\":\"Työajan tuonti (import)\",\"upload\":\"Työajan tuonti -lomake\"},\"calendar-occurences\":{\"main\":\"Palkanlaskijan kalenteri\",\"details\":\"Kalenteritapahtuma\"},\"calendar\":{\"main\":\"Ajastukset\",\"details\":\"Ajastus\"},\"accountingTargets\":{\"main\":\"Kirjanpidon tiliöinnit\",\"details\":\"Kirjanpidon tiliöinti\"},\"customerInvoices\":{\"main\":\"Palvelun laskut\",\"details\":\"Palvelun laskut\"},\"serviceModels\":{\"main\":\"Palvelumallit\",\"details\":\"Palvelumallit\"}},\"info\":{\"main\":\"Ohjeet ja tuki\",\"abc\":\"Palkkauksen abc\",\"index\":\"Asiakaspalvelu\",\"invite\":\"Kutsu käyttäjäksi\",\"aboutUs\":\"Tietoa palvelusta\"},\"personalWeb\":{\"home\":\"Etusivu\",\"taxcards\":\"Verokortit\",\"calculations\":{\"main\":\"Palkkalaskelmat\",\"paid\":\"Maksetut\",\"sent\":\"Lähetetyt\",\"draft\":\"Luonnokset\",\"error\":\"Perutut ja virheet\",\"new\":\"Uusi laskelma\",\"calc\":\"Palkkalaskelma\",\"share\":\"Jaa laskelma\"},\"archive\":{\"main\":\"Arkisto\",\"workerReport\":\"Työntekijän yhteenveto\",\"employmentContracts\":\"Työsopimukset\",\"householdDeductionReport\":\"Kotitalousvähennys\"},\"employerArchive\":{\"main\":\"Työnantajan arkisto\",\"employerPaid\":\"Maksetut palkat\",\"employerReport\":\"Kotitalouden yhteenveto\",\"householdYears\":{\"main\":\"Kotitalousvähennys\",\"details\":\"Kotitalousvähennyksen tiedot\"}},\"account\":\"Omat tiedot\",\"abc\":\"Ohjeet\"}},\"omapalkka\":{\"AccountView\":{\"personalInfoHeading\":\"Henkilötiedot\",\"contactInfoHeading\":\"Yhteystiedot\",\"avatarHeading\":\"Kuva\",\"authorizationHeading\":\"Tunnistautuminen\"},\"AccountAvatarEditPerson\":{\"avatarLabel\":\"Kuva\",\"avatarTypeLabel\":\"Kuvan tyyppi\",\"initialsLabel\":\"Nimikirjaimet\",\"optionChoose\":\"Valitse kuvan tyyppi\",\"optionIcon\":\"Kuvake\",\"optionUploaded\":\"Kuva omalta koneelta\",\"optionGravatar\":\"Gravatar\",\"gravatarInfo\":{\"html\":\"Gravatar-kuva on linkitetty sähköpostiosoitteeseen ja sähköpostiosoitteen omistaja voi itse vaihtaa kuvan osoitteessa www.gravatar.com. Sitä käytetään myös monissa muissa palveluissa: blogeissa, keskustelufoorumeilla jne.\"},\"uploadImageLabel\":\"Lataa kuva koneelta\",\"avatarDescription\":{\"html\":\"Kuva ei ole pakollinen tieto palkanmaksussa.\"}},\"AccountAuthorizationPerson\":{\"privacyStatementBtn\":{\"html\":\"<a href=\\\"https://www.palkkaus.fi/tietosuoja/\\\" target=\\\"_blank\\\">Lue</a>\"},\"privacyStatementLabel\":\"Palkkaus.fi:n tietosuojaseloste\",\"privacyBtn\":{\"html\":\"<a href=\\\"https://www.palkkaus.fi/sopimus-henkilotietojen-kasittelysta/\\\" target=\\\"_blank\\\">Lue</a>\"},\"privacyLabel\":\"Sopimus henkilötietojen käsittelystä\",\"termsBtn\":{\"html\":\"<a href=\\\"https://www.palkkaus.fi/kayttoehdot/\\\" target=\\\"_blank\\\">Lue</a>\"},\"termsLabel\":\"Palkkaus.fi:n käyttöehdot\",\"termsAndPrivacyTitle\":\"Tietosuoja ja käyttöehdot\",\"authMethodLabel\":\"Kirjautumistapa\",\"userNameLabel\":\"Käyttäjätunnus:\",\"userInfoTitle\":\"Käyttäjätiedot\",\"authorizationTypeLabel\":\"Valtuutus:\",\"credentialLabel\":\"Tunniste:\",\"haveIdentified\":\"Olet tunnistautunut\",\"identifyBtn\":\"Tunnistaudu\",\"notIdentified\":\"Et ole vielä tunnistautunut\",\"identificationTitle\":\"Tunnistautuminen\"},\"AccountContactEditPerson\":{\"verificationPinInfo\":\"Puhelinnumeroa käytetään kevyeen tunnistautumiseen. Siksi numeron vaihtaminen vaatii varmistuksen tekstiviestillä.\",\"orderVerificationBtn\":\"Tilaa koodi\",\"addressInfo\":\"Osoite ei ole pakollinen palkanmaksussa.\"},\"AccountDetailsEditPerson\":{\"languageSelectionLabel\":\"Kieli:\",\"nameDescription\":{\"html\":\"Nimen muokkaaminen vaatii aina pankki&shy;tunnistuksen. Tämä hoidetaan rekisteröinnin ohjatulla toiminnolla.\"},\"personalIdDescription\":{\"html\":\"Palkkaus.fi-tili on aina kiinnitetty henkilötunnukseen. Jos henkilötunnuksesi muuttuu, kirjaudu ulos ja luo uusi Palkkaus.fi-tili uudella henkilötunnuksella tai ota yhteys asiakaspalveluumme.\"}}},\"REPORTS\":{\"document\":{\"footerInfo\":{\"html\":\"Tämä dokumentti on tuotettu {{date}} palvelussa Palkkaus.fi<br />aspa@palkkaus.fi, puh: 09 425 50603 (ark. 9–12)\"},\"noLogoFooterInfo\":\"Tämä dokumentti on tuotettu {{date}}\",\"preview\":\"Esikatselu\"},\"ENUM\":{\"CalcGroup\":{\"baseSalary\":{\"label\":\"Rahapalkka\"},\"benefits\":{\"label\":\"Edut ja tuet\"},\"deductions\":{\"label\":\"Vähennykset\"},\"disabled\":{\"label\":\"Ei otettu huomioon\"},\"expenses\":{\"label\":\"Kulukorvaukset\"},\"otherNoPayment\":{\"label\":\"Muut erät\"},\"salaryAdditions\":{\"label\":\"Lisät\"},\"totals\":{\"label\":\"Yhteensä\"}}},\"employer\":{\"title\":\"Työnantajan laskelma\"},\"payment\":{\"title\":\"Yhteiskunnan laskelma\",\"summaryTitle\":\"Yhteiskunnan laskelma (kooste)\",\"summarySubTitle\":\"Palkkapäivä\"},\"salary\":{\"title\":\"Palkkalaskelma\",\"subtitle\":\"Palkkapäivä\",\"heading\":{\"accidentInsurancePayment\":\"Työtapaturmavakuutus\",\"amount\":\"Määrä\",\"aPrice\":\"A-hinta\",\"bankAccountNumber\":\"Tilinumero\",\"description\":\"Kuvaus\",\"employer\":\"Työnantaja\",\"employerHandledPensionPayment\":\"Työeläke (TyEL)\",\"employerHandledUnemploymentInsurancePayment\":\"Työttömyysvakuutusmaksu\",\"employerHandledUnionPayment\":\"Työnantaja tilittää AY-jäsenmaksun\",\"employerPaidForeclosure\":\"Työnantaja maksaa suoraan ulosottomiehelle\",\"employerPaidOtherDeduction\":\"Työnantajan maksama muu vähennys\",\"employerPaidPension\":\"Työnantaja maksaa itse TyEL-maksun\",\"employerPaidSalaryAdvance\":\"Työnantaja on maksanut palkkaennakkoa\",\"employerPaidUnemploymentInsurance\":\"Työnantaja maksaa itse työttömyysvakuutusmaksun\",\"employerPaidUnion\":\"Työnantajan maksaa itse AY-maksun\",\"employerPaidTaxAndSocialSecurity\":\"Työnantaja maksaa itse ennakonpidätyksen ja työnantajan sairausvakuutusmaksun\",\"employerPaidWorker\":\"Työnantaja maksaa itse nettopalkan\",\"euros\":\"Euroa\",\"foreclosure\":\"Ulosotto\",\"foreclosureExecutor\":\"Ulosottomies\",\"framework\":\"Työehtosopimus\",\"fromEmployer\":\"Työnantajalta\",\"fromSum\":\"Summasta\",\"fromWorker\":\"Työntekijältä\",\"grossSalaryLikeBaseSalaryAbove\":\"Bruttopalkka (rahapalkka yllä)\",\"householdDeduction\":\"Kotitalousvähennys verotuksessa\",\"incomesRegister\":\"Tulorekisteri\",\"insufficientSalary\":\"Palkka ei riitä työntekijän osuuteen sivukuluista\",\"mandatorySideCosts\":\"Pakolliset sivukulut\",\"moreInfoOnNextPage\":\"Lisätietoja seuraavalla sivulla\",\"netSalary\":\"Nettopalkka\",\"noAccidentInsurancePayment\":\"Työtapaturmavakuutus\",\"noPensionPayment\":\"Ei TyEL-maksua\",\"noSocialInsurancePayment\":\"Ei sairausvakuutusmaksua\",\"noUnemploymentInsurancePayment\":\"Ei työttömyysvakuutusmaksua\",\"nullPensionPayment\":\"Työeläke (TyEL)\",\"nullSocialInsurancePayment\":\"Sairausvakuutusmaksu\",\"nullUnemploymentInsurancePayment\":\"Työttömyysvakuutusmaksu\",\"taxSelfPayment\":\"Ennakonpidätyksen maksaminen\",\"workerSelfPayment\":\"Nettopalkan maksaminen\",\"numberOfWorkDays\":\"Työpäiviä\",\"otherDeductions\":\"Muut vähennykset\",\"paidAt\":\"Maksupäivä\",\"palkkausFee\":\"Maksu Palkkaus.fi-palvelulle\",\"palkkausfi\":\"Palkkaus.fi\",\"palkkausHandledPensionPayment\":\"Työeläke (TyEL)\",\"palkkausHandledTempPensionPayment\":\"Työeläke (TyEL)\",\"palkkausHandledUnemploymentInsurancePayment\":\"Työttömyysvakuutusmaksu\",\"palkkausHandledUnionPayment\":\"Palkkaus.fi hoitaa AY-jäsenmaksun\",\"paymentPart\":\"Maksettavat erät\",\"pensionPayment\":\"Työeläkemaksu\",\"percentOf\":\"Prosenttia\",\"prepaidExpenses\":\"Ennakkoon maksetut kulukorvaukset\",\"raksa\":\"Rakennusliitto\",\"receiver\":\"Vastaanottaja\",\"salaryAdditionalInfo\":\"Lisätiedot palkkalaskelmaan\",\"salaryAdvance\":\"Palkkaennakko\",\"salaryCost\":\"Palkkakustannus\",\"salaryDate\":\"Palkkapäivä\",\"requestedSalaryDate\":\"Palkkapäivä\",\"sideCosts\":\"Sivukulut\",\"socialInsurancePayment\":\"Sairausvakuutusmaksu\",\"socialSecurityNumber\":\"Henkilötunnus\",\"taxAtSource\":\"Lähdevero\",\"taxcardTaxPercent\":\"Perusprosentti\",\"taxcardTaxPercent2\":\"Lisäprosentti\",\"taxman\":\"Verottaja\",\"toBePaid\":\"Maksetaan\",\"total\":\"Yhteensä\",\"totalCost\":\"Kokonaiskustannus\",\"totalCostAfterTax\":\"Kokonaiskustannus kotitalousvähennyksen jälkeen\",\"tvr\":\"Työllisyysrahasto\",\"unemploymentInsurancePayment\":\"Työttömyysvakuutusmaksu\",\"union\":\"Ammattiliitto\",\"unionPayment\":\"AY-jäsenmaksu\",\"withholdingTax\":\"Ennakonpidätys\",\"workDescription\":\"Kuvaus\",\"worker\":\"Työntekijä\",\"workersEmployerHandledUnionPayment\":\"HUOM: Työnantaja maksaa suoraan ammattiliitolle\",\"workersAccidentInsurancePayment\":\"Työtapaturmavakuutus\",\"workersEmployerHandledPensionPayment\":\"Työeläke (TyEL)\",\"workersEmployerHandledUnemploymentInsurancePayment\":\"Työttömyysvakuutusmaksu\",\"workersNullSocialInsurancePayment\":\"Sairausvakuutusmaksu\",\"workersPalkkausHandledPensionPayment\":\"Työeläke (TyEL)\",\"workersPalkkausHandledUnemploymentInsurancePayment\":\"Työttömyysvakuutusmaksu\",\"workersSocialInsurancePayment\":\"Sairausvakuutusmaksu\",\"employmentPeriodStart\":\"Työsuhteen alku\",\"employmentPeriodStartAndEnd\":\"Työsuhteen alku ja loppu\",\"workPeriod\":\"Ajalta\",\"totalGrossSalary\":\"Bruttopalkka ilman luontoisetuja\",\"benefits\":\"Luontoisedut\",\"annualHolidayCompensation\":\"Lomakorvaus\",\"holidayBonus\":\"Lomaraha\",\"holidaySalary\":\"Loma-ajan palkka\",\"totalTaxable\":\"Ennakonpid. alainen ansio\",\"tax\":\"Ennakonpidätys\",\"pension\":\"Työeläkemaksu\",\"unemploymentInsurance\":\"Työttömyysvakuutusmaksu\",\"deductions\":\"Kaikki vähennykset palkasta\",\"totalExpenses\":\"Verovapaat kustannukset\",\"salaryPayment\":\"Rahana maksettu palkka\",\"cumulativeData\":\"Kumulatiiviset tiedot\",\"thisYear\":\"Kuluva vuosi\",\"previousYear\":\"Edellinen vuosi\",\"workerCount\":\"Työntekijöitä\",\"calculationCount\":\"Laskelmia\",\"totalGrossSalaryAlt\":\"Bruttopalkka\",\"totalWorkerPayment\":\"Työntekijöille maksetaan\",\"taxAtSourceComment\":\"Lähdeverovähennys\",\"accrualTotalDays\":\"Päättyneeltä loman ansaintavuodelta kertynyt loma yhteensä\",\"holidayPayAccrualUsedDays\":\"Lomaa käytetty/maksettu\",\"holidayPayAccrualRemainingDays\":\"Lomaa jäljellä/maksamatta\",\"holidayBonusAccrualUsedDays\":\"Lomarahaa käytetty/maksettu\",\"holidayBonusAccrualRemainingDays\":\"Lomarahaa jäljellä/maksamatta\",\"newAccrualTotalDays\":\"Kuluvalta loman ansaintavuodelta kertynyt loma yhteensä\"},\"text\":{\"accidentInsurancePayment\":{\"html\":\"Työtapaturmavakuutus ei sisälly laskelmaan. Työnantajan työtapaturmavakuutus on yhtiössä <strong>{{company}}</strong>, vakuutusnumero <strong>{{contractNo}}</strong>. Ilmoitamme tämän tulorekisteriin.\"},\"athletePension\":\"Tämä palkka on urheilijan palkkaa, eikä siitä siksi makseta TyEL-maksuja.\",\"athleteUnemploymentInsurance\":\"Tämä on urheilijan palkkaa, eikä siitä siksi makseta työttömyysvakuutusmaksua.\",\"compensationPension\":\"Tämä on työkorvausta, eikä siitä siksi makseta TyEL-maksuja.\",\"compensationSocialInsurance\":\"Tämä on työkorvausta, eikä siitä siksi makseta työnantajan sairausvakuutusmaksua.\",\"compensationUnemploymentInsurance\":\"Tämä on työkorvausta, eikä siitä siksi makseta työttömyysvakuutusmaksua.\",\"employerHandledPartialOwnerUnemploymentInsurancePayment\":\"Tämä on osaomistajan palkkaa.Työnantajan osuus työttömyysvakuutusmaksusta on {{employerAmount}} € ja työntekijän osuus on {{workerAmount}} €. Palvelu ei tilitä työttömysvakuutusmaksua vaan Työllisyysrahasto laskuttaa suoraan työnantajaa neljännesvuosittain.\",\"employerHandledPensionPayment\":{\"html\":\"Työnantaja on ilmoittanut työeläkeyhtiökseen <strong>{{company}}</strong>, vakuutusnumero <strong>{{contractNo}}</strong> ja hoitaa työeläkemaksut itse. Palvelu tekee tulorekisteri-ilmoituksen ja työeläkeyhtiö laskuttaa asiakasta.\"},\"employerHandledUnemploymentInsurancePayment\":\"Työnantajan osuus työttömyysvakuutusmaksusta on {{employerAmount}} € ja työntekijän osuus on {{workerAmount}} €. Palvelu ei tilitä työttömyysvakuutusmaksua vaan Työllisyysrahasto laskuttaa työnantajaa neljännesvuosittain.\",\"employerHandledUnionPayment\":\"Työntekijän palkasta on vähennetty AY-jäsenmaksu {{paymentRound}} euroa ({{percent}}). HUOM: Työnantaja maksaa tämän suoraan ammattiliitolle.\",\"entrepreneurPension\":\"Tämä palkka on YEL-palkkaa, eikä siitä siksi makseta TyEL-maksuja.\",\"entrepreneurUnemploymentInsurance\":\"Tämä on YEL-palkkaa, eikä siitä siksi makseta työttömyysvakuutusmaksua.\",\"farmerPension\":\"Tämä palkka on MYEL-palkkaa, eikä siitä siksi makseta TyEL-maksuja.\",\"farmerUnemploymentInsurance\":\"Tämä on MYEL-palkkaa, eikä siitä siksi makseta työttömyysvakuutusmaksua.\",\"followsRaksaFramework\":\"Erillinen palkan osa ja lomakorvaus ovat laskettu Rakennusalan työehtosopimuksen mukaan.\",\"householdDeduction\":\"Huomioithan, että kotitalousvähennyksessä on 100 euron omavastuu / henkilö. Tätä ei ole huomioitu laskelmassa, koska omavastuu vähennetään pois vain kerran vuodessa. Kotitalousvähennyksessä on myös enimmäismäärä 2 400 euroa henkilöä kohti. Pariskunnalle omavastuu on 100 euroa 2 400 euroon asti ja 200 euroa 4 800 euron enimmmäismäärään asti.\",\"householdDeductionVar\":\"Huomioithan, että kotitalousvähennyksessä on {{ownRisk}} euron omavastuu / henkilö. Tätä ei ole huomioitu laskelmassa, koska omavastuu vähennetään pois vain kerran vuodessa. Kotitalousvähennyksessä on myös enimmäismäärä {{max}} euroa henkilöä kohti. Pariskunnalle omavastuu on {{ownRisk}} euroa {{max}} euroon asti ja {{ownRiskDouble}} euroa {{maxDouble}} euron enimmmäismäärään asti.\",\"incomesRegisterNote\":\"Palvelu tekee ilmoituksen tulorekisteriin viiden päivän kuluessa palkanmaksusta.\",\"missingAccidentInsurance\":\"Työtapaturmavakuutus ei sisälly laskelmaan. Jos maksat palkkoja yli 1500€/vuosi, tulee ottaa työtapaturmavakuutus ennen työn aloittamista. Jos sinulla on jo vakuutus, lisää tieto palvelun asetuksissa. Voi myös ottaa vakuutuksen Palkkaus.fi:n kautta.\",\"taxcardCumulativeIncome\":\"Tuloraja (käytetty)\",\"taxcardNoCumulativeIncome\":\"Tuloraja\",\"noAccidentInsurance\":\"Tämä ei ole työtapaturmavakuutuksen alaista palkkaa.\",\"noEmployerDetails\":\"Työnantajan tietoja ei ole syötetty\",\"noTaxcard\":\"Ei verokorttia (60%)\",\"noWithholdingHousehold\":\"Ei verokorttia (kotitalous, alle 1500€ / vuosi)\",\"percents\":\"Verokortin prosentit\",\"noWorkerDetails\":\"Työntekijän tietoja ei ole syötetty\",\"nullPensionPayment\":\"Tästä palkasta ei makseta työelämaksuja. Työeläke on pakollinen, jos työntekijälle maksetaan kuukaudessa yli {{amount}} € ja työntekijä on 17-67-vuotias.\",\"nullSocialInsurancePayment\":\"Tästä palkasta ei makseta työnantajan sairausvakuutusmaksua. Sairausvakuutusmaksua maksetaan, jos työntekijä on 16-67-vuotias.\",\"nullUnemploymentInsurancePayment\":\"Tästä palkasta ei makseta työttömyysvakuutusmaksua. Työttömyysvakuutusmaksua maksetaan, jos työntekijä on 18-64-vuotias.\",\"taxSelfPayment\":\"Työnantaja maksaa ennakonpidätyksen suoraan verottajalle.\",\"socialSecuritySelfPayment\":\"Työnantaja maksaa työnantajan sairausvakuutusmaksun verottajalle osana työnantajasuorituksia.\",\"workerSelfPayment\":\"Työnantaja maksaa nettopalkan suoraan työtekijälle.\",\"otherDeductionsError\":{\"html\":\"Jo maksetuksi muuksi vähennykseksi on merkitty {{fullAmount}} euroa, mutta palkka ei riitä tämän maksamiseen.<br><strong>{{differenceAmount}} euroa maksetusta muusta vähennyksestä jää seuraavalle kuukaudelle.</strong>\"},\"palkkausHandledPensionPayment\":{\"html\":\"Työnantaja on ilmoittanut työeläkeyhtiökseen <strong>{{company}}</strong>, sopimusnumero <strong>{{contractNo}}</strong>. Palvelu tekee tulorekisteri-ilmoituksen ja tilittää työeläkemaksun työeläkeyhtiöön.\"},\"palkkausHandledTempPensionPayment\":{\"html\":\"Palkkaus.fi hoitaa TyEL-maksun tilapäisenä työnantajana. Työeläkeyhtiö on <strong>{{company}}</strong>.\"},\"palkkausHandledUnemploymentInsurancePayment\":\"Työnantajan osuus työttömyysvakuutusmaksusta on {{employerAmount}} € ja työntekijän osuus on {{workerAmount}} €. Palvelu tilittää työttömysvakuutusmaksun Työllisyysrahastolle neljännesvuosittain.\",\"palkkausHandledUnionPayment\":\"Työntekijän palkasta on vähennetty AY-jäsenmaksu {{paymentRound}} euroa ({{percent}}). Palkkaus.fi-palvelu tilittää tämä suoraan ammattiliitolle.\",\"pensionError\":{\"html\":\"Työntekijän osuus TyEL-maksusta on {{fullAmount}} euroa, mutta palkka ei riitä tämän maksamiseen<br><strong>{{differenceAmount}} euroa jää työnantajan maksettavaksi.</strong>\"},\"prepaidExpensesError\":{\"html\":\"Ennakkoon maksetuiksi kulukorvauksiksi on merkitty {{fullAmount}} euroa, mutta kulukorvausten määrä ei riitä tämän maksamiseen.\"},\"salaryAdvanceError\":{\"html\":\"Jo maksetuksi palkkaennakoksi on merkitty {{fullAmount}} euroa, mutta palkka ei riitä tämän maksamiseen<br><strong>{{differenceAmount}} euroa palkkaennakosta jää seuraavalle kuukaudelle.</strong>\"},\"socialInsurancePayment\":\"Palvelu tilittää työnantajan sairausvakuutusmaksun verottajalle osana työnantajasuorituksia.\",\"unemploymentInsuranceError\":{\"html\":\"Työntekijän osuus Työttömyysvakuutusmaksusta on {{fullAmount}} euroa, mutta palkka ei riitä tämän maksamiseen.<br><strong>{{differenceAmount}} euroa jää työnantajan maksettavaksi.</strong>\"},\"unionPaymentError\":{\"html\":\"Palkasta piti maksaa AY-jäsenmaksua {{fullAmount}} euroa, mutta palkka ei riitä ennakoiden ja sivukulujen jälkeen tämän maksamiseen.<br><strong>AY-jäsenmaksua ei ole tilitetty - työntekijän tulee maksaa se itse.</strong>\"},\"workersAccidentInsurancePayment\":{\"html\":\"Työtapaturmavakuutus ei sisälly laskelmaan. Työnantajan työtapaturmavakuutus on yhtiössä <strong>{{company}}</strong>, vakuutusnumero <strong>{{contractNo}}</strong>.\"},\"workersEmployerHandledPartialOwnerUnemploymentInsurancePayment\":\"Tämä on osaomistajan palkkaa.\",\"workersEmployerHandledPensionPayment\":{\"html\":\"Työnantajalla on työeläkesopimus yhtiössä <strong>{{company}}</strong>, vakuutusnumero <strong>{{contractNo}}</strong>.\"},\"workersEmployerHandledUnemploymentInsurancePayment\":\"Tämä on työttömyysvakuutusmaksun alaista palkkaa.\",\"workersMissingAccidentInsurance\":\"Työtapaturmavakuutus ei sisälly laskelmaan. Työnantaja ei ole ilmoittanut työtapaturmavakuutuksen tietoja.\",\"workersNullSocialInsurancePayment\":\"Tästä palkasta ei makseta sairausvakuutusmaksua. Sairausvakuutusmaksua maksetaan, jos työntekijä on 16-67-vuotias.\",\"workersPalkkausHandledPensionPayment\":{\"html\":\"Työnantajalla on työeläkesopimus yhtiössä <strong>{{company}}</strong>, vakuutusnumero <strong>{{contractNo}}</strong>.\"},\"workersPalkkausHandledUnemploymentInsurancePayment\":\"Tämä on työttömyysvakuutusmaksun alaista palkkaa.\",\"workersSocialInsurancePayment\":\"Ennakonpidätys sisältää Vakuutetun sairausvakuutusmaksun, joka vuonna {{year}} on {{percent}} prosenttia {{totalBaseRound}} euron tulosta, eli {{amountRound}} euroa.\"}},\"accounting\":{\"title\":\"Kirjanpitoraportti\",\"head\":{\"name\":\"Nimi\",\"officialId\":\"Y-tunnus\",\"email\":\"Sähköposti\",\"workerCount\":\"Työntekijöitä\",\"calculationCount\":\"Laskelmia\",\"totalGrossSalary\":\"Bruttopalkka\",\"totalWorkerPayment\":\"Työntekijöille maksetaan\",\"period\":\"Ajalta\",\"tax\":\"Ennakonpidätykset\"},\"heading\":{\"accountNumber\":\"Ehdotustili\",\"accountName\":\"Selite\",\"vatPercent\":\"ALV%\",\"sum\":\"Summa\",\"costCenter\":\"Kustannuspaikka\"}},\"summary\":{\"header\":{\"title\":\"Palkanmaksujen erittely\",\"subtitle\":\"Työnantajan Palkkaus.fi:lle maksamat laskelmat ajalta\"},\"heading\":{\"name\":\"Nimi\",\"businessId\":\"Y-tunnus\",\"email\":\"Sähköposti\"},\"table\":{\"workStartDate\":\"Työn. aloitus\",\"workStartEndDate\":\"Työn lopetus\",\"totalGrossSalary\":\"Raha- palkka\",\"totalRowCategory\":\"Lo.*\",\"benefits\":\"Luont. edut\",\"irCode\":\"Väh. vero\",\"totalTaxable\":\"Verot. tulot\",\"tax\":\"Ennak. pidät.\",\"pension\":\"TyEL (TT)\",\"unemploymentInsurance\":\"TVR (TT)\",\"unionPayment\":\"AY-maksu\",\"foreclosure\":\"Ulos-otto\",\"otherDeductions\":\"Muut väh.\",\"totalExpenses\":\"Kulu-korv.\",\"totalWorkerPayment\":\"Maks.(TT)\",\"totalPayment\":\"Maks. Palkkaus.fi\",\"palkkaus\":\"Palkk. sis ALV\",\"service\":\"Palvelumaksu\",\"socialSecurity\":\"Sava\",\"totalPensions\":\"TyEL yht.\",\"employerPension\":\"TyEL (TA)\",\"unemployment\":\"TVR yht.\",\"employerUnemployment\":\"TVR (TA)\",\"workerSalary\":\"Työntekijöiden palkka (TyEL)\",\"entrepreneurSalary\":\"Yrittäjäpalkka (YEL)\",\"total\":\"Yhteensä\"},\"infoText\":{\"tt\":\"TT = Työntekijän palkasta vähennettävä osuus\",\"ta\":\"TA = Työnantajan osuus\",\"lo\":\"*Lo. sisältää vuosilomapalkat, vuosilomakorvaukset sekä loma(ltapaluu)rahat.\"}},\"authorization\":{\"heading\":{\"title\":\"Palkkaus.fi valtakirja\"},\"attorney\":\"Valtakirja\",\"authorizer\":\"Valtuuttaja\",\"authorized\":\"Valtuutettu\",\"palkkausfi\":\"Suomen Palkanlaskenta Oy (Palkkaus.fi)\",\"companyId\":\"Y-tunnus\",\"contactInfo\":\"Yhteystiedot valtakirjan alareunassa\",\"signature\":\"Allekirjoitus\",\"time\":\"Aika\",\"lists\":{\"employeeAndEmployer\":\"Työntekijä ja työnantaja\",\"taxAndIr\":\"Verohallinto ja tulorekisteri (sisältäen myös kotitalousvähennys)\",\"pensions\":\"Työeläkeyhtiöt\",\"insurances\":\"Vakuutusyhtiöt\",\"employmentFund\":\"Työllisyysrahasto\",\"unEmploymentFund\":\"Työttömyyskassat\",\"workers\":\"Työntekijät\",\"taxIr\":\"Verohallinto ja tulorekisteri\",\"banksAndPaymentIntermediaries\":\"Pankit ja maksuvälittäjät (liittyen tarvittaviin tilityksiin ja maksuihin)\",\"workerUnions\":\"Työntekijäjärjestöt (työntekijän jäsenmaksu)\"},\"person\":{\"name\":\"Nimi\",\"personalId\":\"Henkilötunnus\",\"telephone\":\"Puhelinnumero\",\"email\":\"Sähköposti\",\"authorizedInfo\":\"Valtuutettu voi hoitaa puolestani palkkaamiseen, palkanmaksuun ja mahdollisesti saamiini palkkoihin liittyviä velvoitteita ja maksuja suhteessa viranomaisiin ja muihin tahoihin kuten esimerkiksi:\",\"authorizationValid\":\"Valtuutus on voimassa toistaiseksi alkaen\",\"palkkausSite\":\"Palkkaus.fi-sivustolla\"},\"company\":{\"name\":\"Yrityksen toiminimi\",\"address\":\"Lähiosoite\",\"email\":\"Sähköpostiosoite\",\"authorizerName\":\"Yrityksen valtuuttajan nimi\",\"authorizerPersonalId\":\"Yrityksen valtuuttajan henkilötunnnus\",\"authorizerPhone\":\"Yrityksen valtuuttajan puhelinnumero\",\"authorizedInfo\":\"Valtuutettu voi hoitaa valtuuttajan puolesta palkkaamiseen, palkanmaksuun ja palkkoihin liittyviä velvoitteita ja maksuja suhteessa viranomaisiin ja muihin palkkaamiseen liittyviin tahoihin kuten:\",\"authorizationValid\":\"Allekirjoituksellani vakuutan, että minulla on oikeus antaa tämä valtuutus valtuutetulle. Valtuutus on voimassa toistaiseksi alkaen\",\"palkkausService\":\"Palkkaus.fi-palvelussa\"}},\"invoice\":{\"title\":\"Lasku\",\"heading\":{\"payer\":\"Maksaja\",\"recipient\":\"Maksunsaaja\",\"date\":\"Laskun päivämäärä\",\"dueDate\":\"Eräpäivä\",\"referenceNumber\":\"Viitenumero\",\"iban\":\"Saajan pankkitili (IBAN)\",\"bic\":\"Saajan pankki (BIC)\",\"message\":\"Kuvaus\",\"preview\":\"Arviolasku, älä maksa\"},\"table\":{\"message\":\"Kuvaus\",\"articleName\":\"Tuotteen nimi\",\"count\":\"Määrä\",\"price\":\"Hinta\",\"vat0\":\"ALV0\",\"total\":\"Yht\",\"vatPercent\":\"ALV%\",\"accounting\":\"Tiliöinti\",\"taxSocialSecurity\":\"SAVA-maksut yhteensä\",\"taxWithholding\":\"Ennakonpidätys yhteensä\",\"totalExVat\":\"Yhteensä ALV 0%\",\"totalVat\":\"ALV Yhteensä\",\"totalPayment\":\"Maksettava yhteensä\",\"totalPaid\":\"Maksettu\",\"toBePaid\":\"Jäljellä\"},\"footer\":{\"html\":\"Tulostettu palvelussa Palkkaus.fi {{date}} \"}},\"eSalary\":{\"headerData\":{\"documentTitle\":\"Palkkalaskelma\",\"netPayment\":{\"label\":\"Maksetaan\"},\"partyIdentifications\":{\"officialId\":\"Y-tunnus\",\"salaxy\":\"Salaxy\"}},\"payPeriod\":{\"heading\":\"Palkkakausi\",\"dateOfPayment\":{\"label\":\"Maksupäivä\"},\"period\":{\"label\":\"Selite\"},\"periodDates\":{\"label\":\"Palkka ajalta\",\"startDate\":{\"label\":\"Alkupäivä\"},\"termDate\":{\"label\":\"Loppupäivä\"}}},\"delivery\":{\"sender\":{\"heading\":\"Työnantaja\"},\"recipient\":{\"heading\":\"Saaja\"}},\"employee\":{\"heading\":\"Palkansaajan tunnistetiedot\",\"identity\":{\"label\":\"Henkilötunnus\"},\"employmentDate\":{\"label\":\"Työsuhteen alkamispäivä\"},\"classification\":{\"heading\":\"Tehtävätiedot\",\"jobTitle\":{\"label\":\"Tehtävänimike\"}}},\"bankAccount\":{\"heading\":\"Pankkitili\",\"label\":\"Tilinumero\"},\"calculationBases\":{\"heading\":\"Palkanlaskennan perustiedot\",\"salaryRates\":{\"heading\":\"Palkkaustiedot\"},\"taxationRates\":{\"heading\":\"Verotustiedot\",\"recordLabels\":{\"taxPercent\":\"Perusprosentti\",\"taxPercent2\":\"Lisäprosentti\"}},\"incomeLimitLabel\":\"Tuloraja\",\"taxcardValidityLabel\":\"Verokortti voimassa\"},\"payDetails\":{\"heading\":\"ERITTELYOSA\"},\"messages\":{\"heading\":\"Viestit\",\"transient\":{\"heading\":\"Virhe\"}},\"cumulative\":{\"heading\":\"PALKKATODISTUSOSA\",\"current\":{\"heading\":\"Kuluvavuosi\"},\"previous\":{\"heading\":\"Edellinen vuosi\"}}},\"totals\":{\"total\":\"Yhteensä\",\"heading\":{\"employer\":\"Työnantaja\"},\"table\":{\"company\":\"Yritys\",\"officialId\":\"Y-tunnus\",\"salaryPeriod\":\"Palkkakausi\",\"salaryDate\":\"Palkkapäivä\",\"worker\":\"Työntekijä\",\"baseSalary\":\"Rahapalk.\",\"benefits\":\"Luont. ed.\",\"totalTaxable\":\"Veronal.\",\"tax\":\"Enn. pid.\",\"totalExpenses\":\"Korv.\",\"unionPayment\":\"AY\",\"pension\":\"Eläkem.\",\"unemploymentInsurance\":\"Tyött.\",\"otherDeductions\":\"M. väh.\",\"earnings\":\"Tulot\",\"totalDeductions\":\"Väh. yht.\",\"totalWorkerPayment\":\"Maks. yht.\",\"foreclosure\":\"Ulosotto\",\"salaryAdvance\":\"Palkkaennakko\"}},\"workerSummaryReport\":{\"title\":\"Työntekijän vuosiyhteenveto\",\"heading\":{\"noWorker\":\"Työntekijän tietoja ei ole syötetty\",\"employer\":\"Työnantaja\",\"noEmployer\":\"Työnantajan tietoja ei ole syötetty\",\"workerName\":\"Työntekijä\",\"workerSocialSecurityNumber\":\"Henkilötunnus\",\"workerIban\":\"Tilinumero\"},\"table\":{\"count\":\"Määrä\",\"aPrice\":\"A-hinta\",\"total\":\"Euroa\",\"percent\":\"Prosenttia\",\"sum\":\"Summasta\",\"totals\":\"Yhteensä\",\"paid\":\"Maksettu\",\"salary\":{\"heading\":\"Rahapalkka\"},\"benefits\":{\"heading\":\"Edut ja tuet\"},\"deductions\":{\"title\":\"Vähennykset\"},\"expenses\":{\"title\":\"Korvaukset\",\"heading\":\"Kulukorvauksia\"},\"totalTaxable\":\"Ennakonpid. alainen ansio\",\"tax\":\"Ennakonpidätys*\",\"pension\":\"Työeläkemaksu\",\"unemploymentInsurancePayment\":\"Työttömyysvakuutusmaksu\",\"unionPayment\":\"AY-jäsenmaksu\",\"foreclosure\":\"Ulosotto\",\"prepaidExpenses\":\"Ennakkoon maksetut kulukorvaukset\",\"otherDeductions\":\"Muut vähennykset\"}},\"rowsReport\":{\"worker\":\"Työntekijä\",\"socsec\":\"Henkilötunnus\",\"message\":\"Viesti\",\"rowType\":\"Palkkalaji\",\"rowTypeKind\":\"Alalaji\",\"type\":\"Tyyppi\",\"sourceId\":\"Lähde (id)\",\"dimensions\":\"Kustannuspaikat\",\"count\":\"Määrä\",\"price\":\"Hinta\",\"total\":\"Yhteensä\"},\"calcsIrRowsReport\":{\"worker\":\"Työntekijä\",\"irCode\":\"Tulorekisteri-koodi\",\"incomeType\":\"Tulolaji\",\"rowType\":\"Palkkalaji\",\"kind\":\"Alalaji\",\"type\":\"Tyyppi\",\"message\":\"Rivin kuvaus\",\"count\":\"Määrä\",\"price\":\"Hinta\",\"unit\":\"Yksikkö\",\"total\":\"Yhteensä\"},\"kycCompany\":{\"heading\":\"Asiakkaan tuntemisen tiedot\",\"createdAt\":\"Luotu\",\"principalActivity\":\"Toimiala\",\"companyType\":\"Yhtiön tyyppi\",\"contactInfo\":\"Yhteystiedot\",\"suomifiHeading\":\"Suomi.fi-tarkistus\",\"socsec\":\"HETU\",\"session\":\"Sessio\",\"state\":\"Tila\",\"roles\":\"Roolit\",\"time\":\"Aika\",\"reporterAdmin\":\"Ilmoittaja (admin)\",\"beneficialBeneficiariesNote\":\"HUOM: Tosiasialliset edunsaajat sivulla 2\",\"beneficialBeneficiaries\":\"Tosiasialliset edunsaajat\"},\"iamPerson\":{\"dateOfBirth\":\"Syntymäpäivä\",\"updatedAt\":\"Päivitetty\",\"pep\":\"PEP-henkilö\",\"yes\":\"Kyllä\",\"no\":\"Ei\",\"ownership\":\"Omistusosuus\",\"citizenship\":\"Kansalaisuus\",\"contactInfo\":\"Yhteystiedot\"},\"invoiceList\":{\"receiverAndType\":\"Saaja ja laskun tyyppi\",\"sum\":\"Summa\",\"qrCodeNotAvailable\":\"QR-koodia ei saatavilla\",\"finishPayments\":\"Maksa palkat ensin\",\"iban\":\"IBAN\",\"name\":\"Nimi\",\"dueDate\":\"Eräpäivä\",\"alreadyPaid\":\"Jo maksettu\",\"payable\":\"Maksettavaa\",\"virtualBarcode\":\"Virtuaaliviivakoodi\",\"message\":\"Viesti\",\"reference\":\"Viite\",\"unpaidNetSalaries\":\"maksamatonta nettopalkkaa\"},\"CalendarReport\":{\"week\":\"Viikko\"},\"unionPaymentReport\":{\"worker\":\"Työntekijä\",\"salaryDate\":\"Palkkapäivä\",\"salaryPeriodStart\":\"Palkkakauden alku\",\"salaryPeriodEnd\":\"Palkkakauden loppu\",\"union\":\"AY-yhdistys\",\"membershipPayment\":\"Jäsenmaksu\",\"referenceNumber\":\"Viitenumero\",\"bankAccount\":\"Pankkitili\",\"total\":\"Yhteensä\"},\"costCenterReport\":{\"worker\":\"Työntekijä\",\"rowType\":\"Rivityyppi\",\"type\":\"Tyyppi\",\"irCode\":\"IrCode\",\"count\":\"Lukumäärä\",\"price\":\"Hinta\",\"total\":\"Yhteensä\"},\"payStatsReport\":{\"type\":\"Laskenta\",\"timeframe\":\"Aikaväli\",\"result\":\"Tulos\",\"calculation\":\"Palkkalaskelma\",\"info\":\"Selite\",\"amount\":\"Määrä\",\"price\":\"Hinta\",\"workingTime\":\"Poimittu aika\",\"workingTimeType\":\"Poimintaperuste\",\"salary\":\"Poimittu palkka\",\"salaryType\":\"Poimintaperuste\"}},\"SERVER_VIEWS\":{\"Roles\":{\"employer\":\"Työnantaja\",\"worker\":\"Työntekijä\",\"company\":\"Yritys tai yhteisö\",\"accountant\":\"Tilitoimisto\"},\"Register\":{\"title\":\"Miten käytät palvelua?\",\"text\":\"Valitse rooli, jolla kirjaudut palveluun.\",\"registerTitle\":\"Rekisteröidy palveluun\",\"registering\":\"Rekisteröidytään... \",\"cancel\":\"keskeytä\"},\"Onboarding\":{\"registeringTitle\":\"Rekisteröidytään...\",\"registeringInstruction\":\"Mikäli rekisteröitymisikkuna ei aukea, \",\"registeringInstructionLink\":\"palaa alkuun\"},\"Login\":{\"login\":\"Kirjaudu\",\"createAccount\":\"Luo tunnus\"},\"Invite\":{\"title\":\"Tervetuloa Palkkaus.fi-palveluun\",\"titleForHtml\":\"Tervetuloa<br />Palkkaus.fi-palveluun\",\"defaultMsg\":\"<strong>Sinulle on maksettu palkkaa palvelumme kautta.</strong><br><br>Palkkatiedot ovat henkilökohtaisia ja haluamme varmistaa, että tiedot näkyvät vain sinulle. Siksi pyydämme sinua kirjautumaan ja tunnistautumaan pankkitunnuksin. <strong>Tämä sinun pitää tehdä vain kerran ja palvelu on työntekijälle ilmainen.</strong>\",\"missingCalculationMsg\":\"<strong>Tätä palkkalaskelmaa ei löydy.</strong><br><br>Saat kaikki palkkalaskelmasi näkyviin, kun luot itsellesi tunnuksen (tai kirjaudut olemassa olevalla) ja tunnistaudut pankkitunnuksilla. Tällöin tuomme kaikki palkkalaskelmasi sinulle henkilötunnuksen perusteella.\",\"forAnotherAccountMsg\":\"<strong>Palkkalaskelma on lähetetty eri henkilötunnuksella</strong><br><br>Profiilissasi on käyttäjätunnus {0} ja palkkalaskelmassa on <strong>työntekijällä eri henkilötunnus</strong>. Jos palkkalaskelma on tarkoitettu sinulle, on parasta, että otat yhteyttä asiakaspalveluumme, niin selvitetään asia.\",\"verifiedAccountMsg\":\"<strong>Sinulle on maksettu palkkaa palvelumme kautta.</strong><br><br> Palkkalaskelmat löytyvät nyt työpöydältäsi.\",\"unverifiedAccountMsg\":\"<strong>Sinulle on maksettu palkkaa palvelumme kautta.</strong><br><br>Palkkatiedot ovat henkilökohtaisia ja haluamme varmistaa, että tiedot näkyvät vain sinulle. Siksi pyydämme sinua kirjautumaan ja tunnistautumaan pankkitunnuksin. <strong>Tämä sinun pitää tehdä vain kerran ja palvelu on työntekijälle ilmainen.</strong>\",\"existingUser\":\"Minulla on jo tunnus\",\"newUser\":\"Uusi käyttäjä\",\"gotoHome\":\"Siirry etusivulle\",\"reregister\":\"Tunnistaudu uudestaan\",\"register\":\"Luo itsellesi tunnus\",\"register2\":\"...ja määritä salasana, jolla pääset jatkossa sivuillemme.\",\"authenticationByBank\":\"Pankki&shy;tunnistautuminen\",\"authenticationReason\":\"Jotta voimme olla varmoja, että sinä olet sinä.\",\"calcsOnDesktop\":\"Palkkalaskelmat työpöydällä\",\"calcsViewingInfo\":\"Näet Palkkaus.fi-palvelun kautta maksetut palkat heti.\",\"nextTimeInfo\":\"Jatkossa näet helposti\",\"nextTimeInfo2\":\" ...palvelustamme kaikki palkkalaskelmat ja voit muuttaa tietojasi.\",\"inviteAlertTitle\":\"HUOM!\",\"inviteInfoName\":\"Palkkalaskelma on lähetetty nimellä\",\"inviteInfoSsn\":\"ja henkilötunnuksen alkuosalla\",\"inviteInfoContact\":\"Jos nämä tiedot ovat väärin, otathan meihin yhteyttä - meillä on sinusta vääriä tietoja.\",\"inviteServiceDescription\":\"Palvelu pyytää tekemään pankkitunnistautumisen ja sen jälkeen palvelussa olevat palkkalaskelmasi näkyvät palvelun työpöydällä.\",\"inviteDeclineLogin\":\"En halua kirjautua\",\"inviteDeclineLoginContactEmployer\":\"Jos et halua kirjautua Palkkaus.fi-palveluun, emme voi lähettää sinulle palkkalaskelmia sähköisesti, vaan sinun täytyy pyytää ne työnantajaltasi. Palkkalaskelmassa olevia tietojasi käytetään palkkaan liittyviä lakisääteisiä raportointeja ja tilityksiä varten.\",\"inviteDeclineLoginContactPalkkaus\":\"Jos et halua kirjautua palveluumme, etkä halua saada viestejä, kun sinulle on maksettu palkkaa, ota yhteyttä asiakaspalveluumme. Yhteystiedot löytyvät sivun alaosasta.\"},\"Paytrail\":{\"payInvoiceTitle\":\"Palkan maksaminen\",\"proceedToPaymentInfo\":\"Siirry maksamaan alla olevasta nappulasta.\",\"proceedToPaymentInfoNew\":\"Siirry maksamaan klikkaamalla valitsemasi pankin kuvaa.\",\"proceedToPaymentButton\":\"Siirry maksamaan\",\"paytrailInfo\":\"Maksunvälityspalvelun toteuttajana ja maksupalveluntarjoajana toimii Paytrail Oyj (2122839-7) yhteistyössä suomalaisten pankkien ja luottolaitosten kanssa. Paytrail Oyj näkyy maksun saajana tiliotteella tai korttilaskulla ja välittää maksun kauppiaalle. Paytrail Oyj:llä on maksulaitoksen toimilupa.\",\"paymentDelayInfo\":\"HUOM: nettopalkan saapuminen työntekijän tilille saattaa kestää 3 pankkipäivää, riippuen vastaanottajan pankista. Huomioithan nämä ajat maksaessasi. Ajat johtuvat pankkien välisistä palveluista ja sopimuksista, eikä Palkkaus.fi pysty vaikuttamaan niihin.\"},\"VismaSignBegin\":{\"waitTitle\":\"Ohjataan allekirjoitukseen, odota hetki...\",\"backBtn\":\"Takaisin\",\"signBtn\":\"Allekirjoita\"},\"VismaSignFailure\":{\"failureTitle\":\"Allekirjoitus ei onnistunut\",\"failureText\":{\"html\":\"<p>Sähköinen allekirjoitus epäonnistui tai keskeytettiin Visma Sign - palvelussa. Voit kokeilla allekirjoitusta uudelleen tai jos se ei onnistu, ota yhteyttä asiakaspalveluumme. </p> <p>Autamme mielellämme ja jos mikään muu ei onnistu voimme hoitaa allekirjoituksen jopa paperilla. </p> <p>Asiakaspavelumme vastaa puhelimeen Puh.09 425 50603 tai sähköpostilla <a href=\\\"mailto:aspa@palkkaus.fi\\\">aspa@palkkaus.fi</a></p>\"},\"vismaFailure\":\"Virheilmoitus Visma Sign-pavelusta:\",\"backBtn\":\"Takaisin\"},\"Reports\":{\"SalarySlip\":{\"userFriendlyName\":\"Palkkalaskelma {0} {1}\"},\"PaymentReport\":{\"userFriendlyName\":\"Yhteiskunnan laskelma {0} {1}\"},\"EmployerReport\":{\"userFriendlyName\":\"Työnantajan laskelma {0} {1}\"},\"ESalarySpecification\":{\"userFriendlyName\":\"Verkkopalkka {0} {1}\"},\"AccountingReport\":{\"userFriendlyName\":\"Kirjanpitoraportti {0}\"},\"MonthlyDetails\":{\"userFriendlyName\":\"Palkanmaksujen erittely {0}\"},\"YearlyDetails\":{\"userFriendlyName\":\"Palkanmaksujen erittely vuosi {0}\"},\"Insurance\":{\"userFriendlyName\":\"TyEL ja tapaturmavakuutusraportti {0}\"},\"Unemployment\":{\"userFriendlyName\":\"TVR Palkkasummailmoitus {0}\"},\"YearlyWorkerSummary\":{\"userFriendlyName\":\"Työntekijän vuosiyhteenveto {0} {1}\"}}},\"sxy_palkkaus\":{\"SxyLoginButton\":{\"searching\":\"Haetaan...\"},\"SxyCalcReports\":{\"reportLanguageWorker\":\"Oletus (Työntekijä)\",\"reportLanguageCompany\":\"Oletus (Yritys)\",\"reportType\":\"Tyyppi\",\"reportLanguage\":\"Kieli\",\"reportViewPartial\":\"Vain taulukko\",\"reportViewPage1\":\"Ensimmäinen sivu\",\"reportViewFull\":\"Koko raportti\"},\"SxyCalcRowsEditor\":{\"calcRow\":\"Palkkarivi\",\"total\":\"Yhteensä\",\"validation\":{\"note\":\"HUOM:\",\"edit\":\"Muokkaa\"},\"buttons\":{\"infoIcon\":\"Katso tiedot\"},\"Foreclosure\":{\"referenceNumberInfo\":\"Täytä pankkiviitetiedot, jos sinulla on käytössä maksuaineiston luonti.\"}},\"SxyCalcWorkerInfo\":{\"noSelection\":\"Työntekijää ei ole valittu\",\"noIbanNumber\":\"Ei tilinumeroa\",\"noSSNumber\":\"Ei henkilötunnusta!\",\"noTel\":\"Ei puhelinnumeroa\",\"noEmail\":\"Ei sähköpostiosoitetta!\",\"noEmailInfo\":\"Työntekijälle ei voida lähettää ilmoitusta palkanmaksusta sähköpostitse.\"},\"SxyCalcRowsEditDialog\":{\"accounting\":{\"vatPercent\":{\"label\":\"Arvonlisävero-%\"}},\"showInfo\":\"Näytä ohje\",\"hideInfo\":\"Piilota ohje\",\"incomeTypesInfo\":\"Palkkalajiin liittyvät tulolajit\",\"UnionPayment\":{\"fillUnionPaymentInfo\":\"Täytä ammattiyhdistyksen nimi, pankkitili ja viitetiedot, jos sinulla on käytössä maksuaineiston luonti.\"},\"SubsidisedCommute\":{\"info\":{\"html\":\" <b>HUOM:</b> Tämä Työsuhdematkalippu-laskuri tukee vain vuoden ainoata / ensimmäistä työsuhdematkalippua. Jos syötät toista lippua, käytä Tulorekisteri-välilehteä. Tuomme uuden version pian.\"},\"calculateTaxable\":\"Palkaksi katsottu osuus\",\"taxFree\":\"Verovapaa osuus\"},\"BicycleBenefit\":{\"calculatedTaxable\":\"Palkaksi katsottu osuus\",\"taxFree\":\"Verovapaa osuus\"},\"HourlySalaryWithWorkingTimeCompensation\":{\"CompensationRowLabel\":\"Lisä\"},\"MealBenefit\":{\"mealTaxablePrice\":\"Verotusarvo / kpl\",\"mealPrice\":\"Korvaus / ateria\",\"mealTicketPrice\":\"Nimellisarvo / kpl\",\"taxValueTrue\":\"Työntekijältä peritään verotusarvon määrä\",\"taxValueFalse\":\"Työntekijältä ei peritä korvausta lainkaan tai muu määrä kuin verotusarvo\",\"isTaxValueDeductionsDone\":\"Verotusarvoa vastaava vähennys\",\"isTaxValueDeductionsDoneTrue\":\"Ei vähennetä tällä laskelmalla\",\"isTaxValueDeductionsDoneFalse\":\"Vähennetään tällä laskelmalla\"},\"MilageOwnCar\":{\"vehicleType\":\"Kulkuneuvon tyyppi\",\"additions\":\"Lisät\",\"passangerCount\":\"Lisähenkilöiden määrä\"},\"DailyAllowance\":{\"internationalDailyAllowanceCount\":\"Päivärahojen enimmäismäärät\"}},\"SxyCalcrowsEditDialog\":{\"dailyAllowance\":{\"allowanceKind\":\"Korvauksen tyyppi\",\"selectCountry\":\"Valitse maa..\"},\"additionalRows\":{\"description\":\"Kuvaus\",\"additionalRow\":\"Lisärivi palkkalaskelmaan\"}},\"SxyActionButton\":{\"newCalculation\":\"Uusi palkkalaskelma\",\"addCalcTypes\":\"Lisää laskelmatyyppejä\",\"commonCalc\":\"Yleinen laskuri\",\"historicalCalc\":\"Historiallinen laskuri\",\"startNewMessage\":\"Aloita uusi viestiketju\",\"newPayroll\":\"Uusi palkkalista\",\"sendTaxCard\":\"Lähetä verokortti\",\"error\":\"Virhe: tuntematon toiminta nappulalle\"},\"SxyCalcChart\":{\"workerChart\":{\"salaryPayment\":\"Työntekijän nettopalkka \",\"tax\":\"Ennakonpidätys \",\"workerSideCosts\":\"Työntekijän sivukulut \",\"totalExpenses\":\"Kulut ja edut \"},\"employerChart\":{\"totalGrossSalary\":\"Palkka \",\"salaryAdditions\":\"Palkan lisät \",\"allSideCosts\":\"Sivukulut \",\"totalExpenses\":\"Kulut \"}},\"Roles\":{\"worker\":\"Työntekijä\"},\"SxyHourlyReport\":{\"heading\":{\"hourlyReport\":\"Tuntiraportti\",\"timeReport\":\"Työaikaraportti\"},\"hourlyReportContent\":\"Tuntikirjaus\",\"timeReportContent\":\"Työaikakirjaus\",\"week\":\"Viikko\",\"total\":\"yhteensä\"},\"SxyHourlyReportEditDialog\":{\"heading\":\"Muokkaa tuntikirjausta\",\"costAccounting\":\"Kustannuspaikka\",\"projectText\":\"Kommentti\",\"totalTime\":\"Työaika\"},\"SxyTimeReportEditDialog\":{\"heading\":\"Muokkaa tuntikirjausta\",\"costAccounting\":\"Kustannuspaikka\",\"projectText\":\"Kommentti\",\"startTime\":\"Aloitusaika\",\"endTime\":\"Lopetusaika\"},\"SxyDimensions\":{\"costCenter\":\"Kustannuspaikka\",\"legend\":{\"title\":\"Laskentakohteet\"},\"percent\":\"Prosenttia\"},\"SxyTaxcards\":{\"ActivateAutoTaxcard\":{\"loadingTitle\":\"Haetaan verokorttia\",\"loadingText\":\"Haetaan ennakonpidätyksen prosentteja ja tulorajaa Veron rajapinnasta.\",\"alertTitle\":\"Ei verokorttia\",\"alertText\":\"Verottajan tiedoista ei pystytty hakemaan uutta veroprosenttia. Tämä voi olla tilapäinen ongelma. Käytämme toistaiseksi vanhoja prosentteja.\"},\"taxcard\":{\"status\":{\"waiting\":\"Odottaa\",\"notSeen\":\"Sisältöä ei nähty\",\"declined\":\"Hylätty\",\"waitingForAcception\":\"Odottaa hyväksyntää\",\"accepted\":\"Hyväksytty\"}},\"taxcards\":{\"introGetAutoTaxcard\":{\"html\":\"Palkkaus.fi-palvelussa on nyt käytössä verottajan automaattinen Ennakonpidätys-rajapinta. <strong>Veroprosentit tarkistetaan automattisesti suoraan verottajalta jokaisen palkanmaksun yhteydessä, eikä sinun tarvitse enää syöttää verokortin tietoja.</strong> Klikkaa nappulaa ottaaksesi automaattinen haku käyttöön.\"},\"addSharedCardTitle\":\"Lisää jaettu verokortti\",\"activateAutoTaxcard\":\"Aktivoi automaattinen verokortti\",\"introShort\":{\"html\":\"Täältä voit lisätä <strong>jaetun verokortin, joka näkyy kaikille työnantajille</strong>, jotka käyttävät Palkkaus.fi-palvelua.\"},\"intro\":{\"html\":\"<p class=\\\"lead\\\"> Täältä voit lisätä <strong>jaetun verokortin, joka näkyy kaikille työnantajille</strong>, jotka käyttävät Palkkaus.fi-palvelua.           Uusi verokortti näkyy työnantajalle ilmoituksena, kun hän maksaa seuraavaa palkkaasi tai lisää sinut uutena työntekijänä.           <strong>Jos sinulla on useita työnantajia, kaikki palkat näkyvät samalla verokortilla,</strong>            joten voit kätevästi seurata tulorajan ylittämistä etkä saa veromätkyjä.         </p>         <p>           Palkkaus.fi-palvelu tarkistaa nykyisen verokortin tiedot aina verottajan rajapinnasta.           Teemme tarkistuksen myös jokaisen palkanmaksun yhteydessä, joten sinun ei tarvitse lisätä uutta verokorttia:           Riittää, että huolehdit, että verottajalla olevassa verokortissa on sopivat tulotiedot / prosentti.</p><p>Voit kuitenkin ilmoittaa palvelussamme verokortin perusprosenttia suuremman veroprosentin, jos haluat että sinulta vähennetään enemmän kuin verokortin perusprosentti / lisäprosentti. Tämä 'minimiprosentti' on voimassa kunnes verottajan rajapinnasta tulee uusi verokortti: kun haet uutta verokorttia tai viimeistään vuoden vaihteessa.</p><p>Samoin työnantaja hyväksyy jaetun verokortin ja voi valita käyttää hänelle suoraan toimitettua verokorttia. Näin ollen voit lähettää esim. sähköpostilla tai postilla työnantajalle suoraan erillisen verokortin,           jos haluat että joku työnantaja käyttää eri korttia, kuin muut.</p><p>Huomaathan, että jaettua verokorttia ja palkkojen kokonaissummaa voi pyytää nähtäväkseen kuka tahansa työnantaja, jolla on henkilötunnuksesi.           Alla olevasta listasta voit tarkistaa ketkä työnantajat ovat nähneet verokorttisi.           Työnantajat on myös tunnistettu pankkitunnuksin.           Jos kuitenkin olet erityisen tarkka yksityisyydestäsi voit antaa kortin suoraan työnantajallesi tai lähettää sen postissa.           Tällöin työnantaja lisää sen työnantajakohtaisena (ei jaettuna) verokorttina.         </p>\"},\"employerTableHeading\":\"Työnantaja\",\"typeTableHeading\":\"Tyyppi\",\"validDateTableHeading\":\"Voimassa\",\"startDateTableHeading\":\"Otettu käyttöön\",\"cardStatus2TableHeading\":\"Tila\",\"salariesPaid\":\"Palkkoja maksettu\",\"incomeLimit\":\"Tuloraja\"},\"currentTaxCard\":\"Nykyinen verokortti\",\"tabs\":{\"calcsPaidForCard\":\"Verokortille maksetut laskelmat\",\"employers\":\"Työnantajat\",\"earlierTaxcards\":\"Aikaisemmat verokortit\"}},\"SxyTaxcardDetails\":{\"savingTaxcard\":\"Tallennetaan verokorttia\",\"checkingTaxcard\":\"Verokorttia tarkistetaan\",\"activateAutoTaxcard\":\"Aktivoi automaattinen verokortti\",\"updateAutoTaxcard\":{\"loadingTitle\":\"Haetaan verokorttia\",\"loadingText\":\"Haetaan ennakonpidätyksen prosentteja ja tulorajaa Veron rajapinnasta.\",\"alertTitle\":\"Ei verokorttia\",\"alertText\":\"Verottajan tiedoista ei pystytty hakemaan uutta veroprosenttia. Tämä voi olla tilapäinen ongelma. Käytämme toistaiseksi vanhoja prosentteja.\",\"noTaxcard\":\"Verottajan tiedoista ei löydy verokorttia tälle henkilötunnukselle. Tarkista verokorttisi Omavero-palvelusta tai Veron asiakaspalvelusta.\"},\"taxcardExpired\":\"Työntekijän aiempi verokortti on vanhentunut, joten työntekijälle ei voida maksaa palkkaa.\",\"chooseNoTaxcard\":\"Ei verokorttia, 60% ennakonpidätys\",\"validDate\":\"Voimassa\",\"taxcardAdded\":\"Lisätty\",\"taxPercent\":\"Ennakonpidätysprosentti\",\"basicPercent\":\"Perusprosentti\",\"noIncomeLimit\":\"Ei tulorajaa / lisäprosenttia\",\"additionalPercent\":\"Lisäprosentti\",\"after\":\"jälkeen\",\"taxcardChecked\":\"Verokortti on tarkistettu\",\"checkAutomaticTaxcard\":\"Tarkista autom. verokortti\",\"incomeLimit\":\"Tuloraja\",\"salariesPaid\":\"Palkkoja maksettu\",\"beforeIncomeLimit\":\"Jäljellä ennen tulorajaa\",\"newTaxcard\":\"Uusi verokortti\"},\"SxyTaxcardIncomeLog\":{\"addedForTaxcard\":\"Verokortille kirjattu\",\"salaryPeriod\":\"Palkkakausi\",\"mainTaxPercent\":\"Ennakonpidätys\",\"salaryAmount\":\"Palkkasumma\",\"calculation\":\"Laskelma\",\"removedCalc\":\"Poistettu laskelma\",\"noCalcsTitle\":\"Ei maksettuja palkkoja\",\"noCalcsDescription\":\"Verokortille ei ole merkitty maksettuja palkkoja.\",\"totalTaxes\":\"Ennakonpidätys, yhteensä\",\"totalIncome\":\"Palkkasumma, yhteensä\"},\"TotalWorkerPaymentUsecase\":{\"sum\":\"Summa\"},\"SxyCalcRowsEditdialog\":{\"CarBenefitUsecase\":{\"kilometersBasedTrue\":\"Kyllä: autoetu lasketaan kilometrien perusteella (ajopäiväkirjasta).\"}},\"SxyTaxcard\":{\"noTaxcard\":\"Ei verokorttia\"},\"SxyAbsencePeriods\":{\"absence\":\"Poissaolo\",\"absences\":\"Poissaolot\",\"headerDays\":\"Päivät\",\"isPaid\":\"Palkallinen.\",\"notPaid\":\"Ei palkkaa.\",\"isAccrual\":\"Työssäolon veroinen.\",\"notAccrual\":\"Ei työssäolon veroinen.\",\"noAbsences\":\"Ei poissaoloja\",\"noAbsencesDescription\":\"Poissaolokirjanpitoon voit listata muut poissaolot: palkattomat ja palkalliset. Tänne voit listata myös palkattomat lomat / vapaat.\",\"noAbsencesDescription2\":\"Palkattomien poissaolojen päivät otetaan huomioon kuukausipalkan maksun yhteydessä ja ehdotettaessa lomapäivien kertymää.\",\"totalUnpaid\":\"Yhteensä, palkattomat              \",\"totalNoHolidayAccrual\":\"Yhteensä, lomakertymää vähentävät\",\"totalAll\":\"Yhteensä, kaikki\",\"addAbsenceButtonText\":\"Lisää poissaolo\"},\"SxyAbsencePeriodsEditDialog\":{\"editAbsence\":\"Muokkaa poissaoloa\",\"startDate\":\"Alku\",\"endDate\":\"Loppu\",\"daysCount\":\"Päivien määrä\",\"isPaidLabelTrue\":\"Poissaolo on palkallinen\",\"isAccrualLabelTrue\":\"Työssäolon veroista aikaa lomapäivien kertymää laskettaessa\"},\"SxyHolidayYearHolidays\":{\"tableHeader\":{\"period\":\"Lomajakso\",\"daysCount\":\"Päivät\"},\"tableBody\":{\"availableHolidays\":\"Käytettävissä olevat\",\"availableHolidaysMore\":\"Päättyneellä lomanmääräytymisvuodella kertyneet lomat\",\"total\":\"Yhteensä\",\"totalMore\":\"Palkkakaudelle osuvat lomat\",\"noHolidaysTitle\":\"Ei suunniteltuja lomia\",\"noHolidaysDescription\":\" Lomakalenterissa voit suunnitella vuoden lomat. \\n Syötetyt lomat otetaan automaattisesti huomioon, kun maksat kuukausi- tai tuntipalkkaa.\",\"noHolidaysDescription2\":\"Menneet lomat voit halutessasi myös kirjata lomakirjanpitoon.\\r\\nSiellä ne säilyvät tallessa lain vaatiman säilytysajan.\",\"addFirstHolidayButtonText\":\"Lisää ensimmäinen loma\",\"total2\":\"Yhteensä\",\"total2More\":\"Lomavuonna käytetyt lomat.\",\"unusedHolidays\":\"Pitämättömät lomapäivät\",\"unusedHolidaysMore\":\"Lomapäivät, jotka tulee suunnitella tai maksaa lomakorvauksena.\",\"addHolidayButtonText\":\"Lisää loma\"}},\"SxyWorkerAbsences\":{\"calendarButtonText\":\"Kalenteri\",\"listButtonText\":\"Lista\",\"legendInstructions\":\"Poissaolojen kirjaaminen\",\"instructions\":{\"html\":\"<p> Palkattomat poissaolot vähentävät kuukausipalkan määrää automaattisesti. Tuntipalkkojen osalta sinun tulee huomioida poissaolot suoraan tunneissa.\\n</p>\\n<p>\\nPitkät poissaolot vaikuttavat myös lomalaskentaan, jos käytössä on 14 päivän lomapäivien kertymissääntö.\\n</p>\\n<p>\\nLisäksi poissaolojen tietoja saatetaan tarvita viranomaisraportointiin, palkkatodistuksiin ja esim. työttömyyskassoille.\\n</p>\"}},\"SxyHolidayYearHolidaysEditDialog\":{\"heading\":\"Muokkaa lomaa\",\"startDateLabel\":\"Alku\",\"endDateLabel\":\"Loppu\",\"holidaysCountLabel\":\"Lomapäivät\",\"notesLabel\":\"Huomiot\"},\"SxyHolidayYearAccrual\":{\"holidayAccrualSource\":{\"manual\":\"Muokattu käsin\",\"calcDraft\":\"Palkkalaskelma (luonnos)\",\"calcPaid\":\"Maksettu palkka\",\"defaultThisMonth\":\"Kuluva kuukausi\",\"defaultEstimate\":\"Arvio tulevasta (lomavuoden luonti)\",\"default\":\"Lomavuoden luonnista\"},\"accumulated\":\"Kertyneet\",\"futureEstimate\":\"Arvio tulevasta\",\"tableHead\":{\"month\":\"Kuukausi\",\"daysCount\":\"Päiviä\",\"startDaldo\":\"Alkusaldo\",\"startSaldoMore\":\"Edelliseltä vuodelta\"},\"tableBody\":{\"daysAccrued\":\"Kertyneet lomapäivät\",\"total\":\"Yhteensä\",\"estimatedHolidaysNexYear\":\"Arvio ensi vuoden lomapäivistä\"}},\"SxyWorkerHolidays\":{\"planned\":\"Suunnitellut\",\"date\":\"pv\",\"accumulation\":\"kertymä\",\"dateYear\":\"pv (koko vuosi)\",\"holiday\":\"Loma\",\"days\":\"päivää\",\"undefined\":{\"title\":\"Lomakirjanpito ja -laskenta\",\"intro\":\"Tuomme kevään aikana asteittain paljon kysytyn lomakirjanpidon ja -laskennan osaksi palvelua. Tavoitteenamme on tehdä markkinoiden helppokäyttöisin palvelu lomien ja poissaolojen kirjaamiseen ja maksamiseen.\",\"subtitleLeft\":\"Tässä versiossa\",\"introLeft\":\"<li>Lomapäivien kertyminen</li>\\n<li>Lomakirjanpito</li>\\n<li>Lomapäivien maksaminen kuukausipalkkalaisille</li>\\n<li>Lomarahat</li>\",\"showInitHolidaysButtonText\":\"Ota käyttöön tälle työntekijälle\",\"subtitleRight\":\"Tulevat ominaisuudet\",\"introRight\":\"<li>Lomapäivien maksaminen tunti- ja urakkapalkoista</li>\\r\\n<li>Keskituntiansion laskeminen</li>\\r\\n<li>Lomakorvauksen erikoistilanteet</li>\\r\\n<li>Kesä- ja talvilomalistat (monelle työntekijälle)</li>\"},\"overview\":{\"legend\":\"Lomakorvaus palkanmaksun yhteydessä \",\"legendYear\":\"lomavuosi\",\"intro\":\"Työntekijän / lomavuoden tiedoissa on merkitty, että työntekijän lomat maksetaan suoraan jokaisen palkanmaksun yhteydessä. Tämä on tyypillistä tilapäisillä työntekijöillä.\",\"intro2\":\"Palkkalaskuri lisää lomakorvauksen ja -rahan prosentteina bruttopalkasta:\",\"introCompensation\":\"Lomakorvaus:\",\"introBonus\":\"Lomaraha:\",\"introNoBonus\":\"Ei lomarahaa tai lomaraha osa lomakorvauksen kokonaisprosenttia\",\"introUseCalendar\":{\"html\":\"<strong>Voit halutessasi käyttää lomakalenteria</strong><br />\\n<small>\\nYleensä tällaisilla tilapäisillä työntekijöillä ei ole varsinaista lomaa.\\nLomakalenteriin voit kuitenkin halutessasi syöttää milloin henkilö on poissa loma-aikaan.\\nKalenteri ei vaikuta palkanmaksuun.</small>\"}},\"buttonSummer\":\"Kesä\",\"buttonWinter\":\"Talvi\",\"calendarTitle\":\"Lomakalenteri\",\"buttonAll\":\"Muokkaa / kaikki lomat\",\"summerHolidaysTitle\":\"Kesälomat\",\"winterHolidaysTitle\":\"Talvilomat\",\"selectYear\":\"Valitse vuosi\",\"showInitHolidays\":\"Luo lomakirjanpito uudestaan\",\"buttonOverview\":\"Yleiskuva\",\"buttonHolidays\":\"Lomakalenteri\",\"sidebar\":{\"info\":\"Tiedot: \",\"periodSelectYear\":\"Kesä- ja talvilomakausi:\",\"compensation\":\"Lomakorvaus:\",\"bonus\":\"Lomaraha:\"},\"accrual\":{\"overview\":{\"legend\":\"Yleiskuva, lomavuosi\",\"introTitle\":\"Lomien kirjaaminen ja maksaminen:\",\"introList\":{\"html\":\"<strong>Tarkista lomapäivien kertymä</strong><br /> Tarkista, kuinka monta lomapäivää työntekijälläsi on käytettävissä edelliseltä lomanmääräytymisvuodelta. Jos sitä edeltävältä vuodelta on käyttämättömiä lomia, voit lisätä ne alkusaldoksi\\n                    samassa yhteydessä.\"},\"introList2\":{\"html\":\"<strong>Suunnittele ja kirjaa kesä- ja talvilomat</strong><br /> Lisäämällä pidettävät lomat lomakalenteriin etukäteen, sinun on helppo maksaa loma-ajan palkka ja lomarahat kyseisten palkkakausien palkanmaksun yhteydessä.\"},\"introList3\":{\"html\":\"<strong>Laske vuosilomapalkka</strong><br /> Tuntipalkkalaisten osalta vuosilomapalkka lasketaan edellisen vuoden ansioden perusteella. Tämä tulee tehdä, kun lomanmääräytymisvuosi on päättynyt (huhtikuussa).\"},\"introList4\":{\"html\":\"<strong>Maksa loma-ajan palkka ja lomaraha</strong><br /> Palkanmaksun yhteydessä palvelu hakee automaattisesti valitulle palkkakaudelle suunnitellut lomat ja ehdottaa niitä laskelmalle. Tarvittaessa muutoksia voi tehdä myös palkanlaskennan yhteydessä ja tiedot tallentuvat lomakirjanpitoon.\"}},\"paidSalaries\":{\"legend\":\"Maksetut lomat\",\"description\":\"Lista pidetyistä (ja maksetuista) tai korvatuista lomista sekä lomarahoista.\",\"descriptionList\":{\"html\":\"<li><strong>Lomapalkka</strong> (Loma-ajan palkka) maksetaan, kun lomapäivät pidetään (oletus).</li>\\r\\n<li><strong>Lomakorvaus</strong> maksetaan, jos lomia ei voida pitää esim. työsuhteen päättyessä.</li>\\r\\n<li><strong>Lomaraha</strong> maksetaan joka tapauksessa. Usein kaikki kesäloman yhteydessä.</li>\"}},\"accrualHolidays\":{\"legends\":\"Lomapäivien kertymä\",\"description\":\"Lomapäivien kertymä lomanmääräytymisvuodelta\",\"description2\":\"Lomat pidetään seuraavana lomakautena\"},\"hourlySalaries\":{\"legend\":\"Vuosilomapalkka ajalta\",\"description\":\"Tunti- ja suorituspalkkaiselle vuosilomapalkka lasketaan pääsääntöisesti kolmella eri menetelmällä:\",\"descriptionList\":{\"html\":\"<li>\\n<strong>Prosenttipohjaisena:</strong> 35h-säännön alaisille (ainakin osa kuukausista alle 14 työpäivää), jos TES ei muuta määrää 9% tai 11,5% (työsuhde yli alle vuoden). Joissain työehtosopimuksissa myös muita prosentteja.\\n </li>\\n<li>\\n<strong>Keskipäiväpalkka:</strong> 14 päivän säännön alaisille lomalain mukaan, jos TES ei muuta määrää.\\n</li>\\n<li>\\n<strong>Keskituntiansion mukaan </strong> Erityisesti SAK:n ja EK:n välisen lomapalkkasopimuksen mukaan, mutta käytössä yhä useammassa työehtosopimuksessa. Työehtosopimuskohtaisia taulukoita.\\n</li>\"},\"description2\":\"Seuraavissa versioissa tuomme laskentaan erilaisia työkaluja. Tässä versiossa vuosilomapalkka on laskettava esim. Excelissä. Asiakaspalvelumme tai tilitoimistosi auttaa sinua mielellään.\"}},\"buttonAccrual\":\"Lomapäivien kertymä\",\"holidayCompensation\":{\"overview\":{\"legendYear\":\"lomavuosi\"}},\"buttonHourlySalaries\":\"Laske vuosilomapalkka\",\"buttonPaidHolidays\":\"Maksetut lomat\",\"periodAccrual\":\"Lomanmääräytymisvuosi:\",\"periodSelectedYear\":\"Kesä- ja talvilomakausi:\",\"periodDefaultAccrual\":\"Lomapäiviä per kk:\",\"noHolidays\":{\"legend\":\"Ei lomaoikeutta, lomavuosi\",\"intro\":\"Työsuhteen / lomavuoden tietoihin on merkitty, ettei tällä työntekijällä ole lomaoikeutta.\",\"intro2\":\"Jos haluat muuttaa työntekijä lomakäsittelyn, \"},\"alert\":{\"undefined\":\"VIRHE: Lomalaskennan tyyppiä ei ole määritetty.\",\"holidayCompensationIncluded\":\"VIRHE: Tätä lomalaskennan tyyppiä ei tueta: holidayCompensationIncluded.\"}},\"SxyWorkerHolidaysInitDialog\":{\"permanent14Days\":{\"html\":\"<strong>Vähintään 14 päivää kuukaudessa.</strong><br />\\r\\nTyötä tehdään kaikkina kuukausina vähintään 14 pv/kk.\"},\"permanent35Hours\":{\"html\":\"<strong>Vähintään 35 tuntia kuukaudessa.</strong><br />\\nAinakin yhtenä kuukautena vuodessa tehdään vähintään 35 tuntia työtä.\"},\"holidayCompensation\":{\"html\":\" <strong>Lomakorvaus palkanmaksun yhteydessä.</strong><br />\\r\\n  Lomapäiviä ei kerrytetä vaan lomakorvaus maksetaan heti palkan yhteydessä.\"},\"temporaryTimeOff\":{\"html\":\"<strong>Vapaan ansaintasääntö.</strong><br />\\r\\nTyöntekijä ei kuulu 14 päivän tai 35 tunnin säännön piiriin, mutta saa pidetyltä vapaalta lomakorvauksen.\"},\"noHolidays\":{\"html\":\"<strong>Ei lomaoikeutta.</strong><br />\\nPalkan tai korvauksen saajalla ei ole lomaoikeutta.\"},\"other\":{\"html\":\"<strong>Manuaalinen.</strong><br />\\r\\nKertymä päivitetään käsin tai integraatiolla toisesta järjestelmästä.\"},\"panelHeading\":\"Lomakirjanpito ja -laskenta\",\"intro\":\"Ota lomakirjanpito käyttöön valitsemalla sääntö lomien kertymiselle ja lomarahan maksamiselle\",\"alert\":{\"html\":\"<strong>HUOM:</strong> Tämä käyttöliittymä poistaa muokkaukset lomakertymiin ja luo ne uudestaan.\\r\\n          <strong>Tarkista siis lomakertymät tämän jälkeen!</strong>\"},\"legendSelectHolidayType\":\"Lomapäivien kertymisen ja laskennan perusta\",\"moreInfo\":{\"html\":\" Voit tutustua esimerkkeihin\\n<a href=\\\"https://www.palkkaus.fi/abc/loma-ajan-palkka-ja-lomalaskenta/\\\" target=\\\"_blank\\\">täällä</a>.\"},\"legendDetails\":\"Lomalaskennan yksityiskohdat\",\"accrualByLaw\":\"Kertymä\",\"accrualByLawLabelTrue2\":\"Lomalain mukaan 2 pv/kk\",\"accrualByLawLabelTrue\":\"Lomalain mukaan: 2 tai 2,5 pv/kk (riippuen työsuhteen pituudesta).\",\"accrualFixed\":\"Päivää / kuukausi\",\"label\":{\"compensation\":\"Lomakorvaus\",\"bonusMethod\":\"Lomarahan maksu\",\"bonusMethodNone\":\"Ei erillistä lomarahaa.\",\"bonusMethodForHolidaySalary\":\"Erillinen lomaraha\",\"bonusPercent\":\"Lomaraha, prosenttia\",\"wageBasis\":\"Palkkaustapa (työsuhteessa)\",\"startDate\":\"Alku pvm\",\"endDate\":\"Loppu pvm\"},\"submitButtonText\":\"Ota lomakirjanpito käyttöön\"},\"SxyWorkerDetails\":{\"workerInfo\":\"Perustiedot\",\"employment\":\"Työsuhde\",\"detailsInfo\":{\"noIbanNumber\":\"Ei tilinumeroa\",\"noSSNumber\":\"Ei henkilötunnusta!\",\"noEmail\":\"Ei sähköpostiosoitetta!\",\"noEmailInfo\":\"Työntekijälle ei voida lähettää ilmoitusta palkanmaksusta sähköpostitse.\"}},\"SxyWorkerDetailsEdit\":{\"details\":\"Henkilötiedot\",\"firstName\":\"Etunimi\",\"lastName\":\"Sukunimi\",\"email\":\"Sähköpostiosoite\",\"language\":\"Kieli\",\"employmentTitle\":\"Työsuhteen\",\"employment\":{\"startDate\":\"Alku pvm\",\"endDate\":\"Loppu pvm\",\"isFixedTerm\":\"Määräaikainen työsuhde\",\"isTerminated\":\"Työsuhde päättynyt\"},\"paymentDetails\":{\"title\":\"Maksutiedot\",\"salaryPaymentMethod\":\"Palkanmaksutapa\",\"ibanNumber\":\"Tilinumero (IBAN)\"},\"ssNumber\":\"Henkilötunnus\",\"address\":\"Osoite\",\"addressInfoOtherIndentifier\":\"Työntekijällä on keinohenkilötunnus, jonka ilmoittaminen tulorekisteriin edellyttää työntekijän osoitetietoja.\",\"addressInfo\":\"Osoite ei ole pakollinen palkanmaksussa.\",\"street\":\"Katuosoite\",\"postalCode\":\"Postinumero\",\"city\":\"Kaupunki\",\"readOnlyUser\":{\"html\":\"<h3>Työntekijä on tunnistautunut pankkitunnuksin</h3><p>Tämä työntekijä on kirjautunut Palkkaus.fi-palveluun ja hallinnoi itse henkilötietojaan ja tilinumeroaan. Hän voi itse muuttaa niitä kirjautumalla palveluun omilla tunnuksillaan.</p><p>Jos näet tässä vääriä tietoja, ole yhteydessä työntekijään tai ota yhteyttä asiakaspalveluumme.</p>\"},\"tel\":\"Puhelinnumero\"},\"SxyWorkerEmployment\":{\"pension\":{\"title\":\"Sovellettava eläketurva\",\"pensionRule\":\"Eläkemaksun laskentasääntö\"},\"insurance\":{\"title\":\"Tapaturmavakuutus\"},\"work\":{\"description\":\"Kuvaus palkkalaskelmaan\",\"occupationCode\":\"Ammattiluokka vakuutukseen\"},\"employment\":{\"title\":\"Työsuhteen\",\"startDate\":\"Alku pvm\",\"endDate\":\"Loppu pvm\",\"isFixedTerm\":\"Määräaikainen työsuhde\",\"isTerminated\":\"Työsuhde päättynyt\"},\"salaryPaymentMethod\":\"Palkanmaksutapa\"},\"DataImport\":{\"badgeUnit\":\"riviä\",\"messageInvalid\":\"Virheellinen\",\"columnImportStatus\":\"Tila\",\"columnValidation\":\"Viestit\",\"badgeUndoneLabel\":\"Ei tarkistettuja\",\"badgeErrorLabel\":\"Virheellisiä\",\"badgeSuccessLabel\":\"Ok\",\"badgeFinishedLabel\":\"Valmis\",\"badgeIgnoredLabel\":\"Ei käsiteltyjä\",\"badgeWarningLabel\":\"Varoituksia\",\"badgeUploadedLabel\":\"Tuotu\",\"errorLabel\":\"Virhe\",\"successLabel\":\"Ok\",\"ignoredLabel\":\"Ei käsitelty\",\"warningLabel\":\"Varoitus\",\"help\":{\"fields\":{\"title\":\"Sarakkeet\",\"id\":\"ID\",\"type\":\"Tyyppi\",\"name\":\"Nimi\",\"description\":\"Kuvaus\"},\"values\":{\"title\":\"Arvolistat\",\"type\":\"Tyyppi\",\"value\":\"Arvo\",\"description\":\"Kuvaus\"}},\"stepUpload\":{\"title\":\"Tuo Excel-tiedosto\",\"intro\":\"Tuo Excel-tiedosto koneeltasi napsauttamalla 'Valitse tiedosto...' -painiketta. Voit kopioida myös Excelin sisällön leikepöydältä taulukkoon napsauttamalla 'Liitä leikepöydältä' -painiketta.\",\"buttonHelp\":\"Lue ohjeet...\",\"buttonUpload\":\"Valitse tiedosto...\",\"buttonPaste\":\"Liitä leikepöydältä\",\"buttonReset\":\"Tyhjennä taulukko\"},\"stepValidate\":{\"title\":\"Tarkista rivit\",\"intro\":\"Tarkista tuotujen rivien tiedot napsauttamalla 'Tarkista taulukon tiedot' -painiketta.\",\"buttonValidate\":\"Tarkista taulukon tiedot\"},\"stepImport\":{\"title\":\"Tallenna tiedot\",\"intro\":\"Aloita tietojen tallennus napsauttamalla 'Aloita tietojen tuonti' -painiketta.\",\"buttonCancel\":\"Keskeytä\",\"buttonImport\":\"Aloita tietojen tuonti\"}},\"CalcImport\":{\"validateWorkersButton\":\"Tarkista työntekijöiden työsuhteet\",\"messageMissingEmployment\":\"Virhe, työntekijää ei ole luotu\",\"messageExistingEmployment\":\"Ok, työntekijä on olemassa\",\"messageSeveralEmployments\":\"Varoitus: usea työsuhde mahdollista\",\"help\":{\"title\":\"Laskelmien tuonti\",\"overview\":{\"title\":\"Yleistä\",\"row1\":\"Taulukkoon voi syöttää useampia rivejä per työntekijä. Työntekijät identifioidaan henkilötunnuksen perusteella.\",\"row2\":\"Kun rivit tallennetaan, luodaan uusi palkkalista tai päivitetään olemassa olevaa palkkalistaa. Palkkalista määräytyy yrityksen, palkkapäivän ja palkkalistan nimen perusteella.\"}},\"options\":{\"title\":\"Palkkalistan tuonnin asetukset\",\"addRows\":\"Lisää rivit laskelmille\",\"removeImportedRows\":\"Korvaa laskelmien tästä aineistosta tuodut rivit\",\"removeAllRows\":\"Korvaa laskelmien kaikki rivit\",\"applyEmploymentDefaultRows\":\"Lisää työntekijöiden oletusrivit\",\"sourceId\":\"Aineistotunnus\"}},\"WorkerImport\":{\"validateWorkersButton\":\"Tarkista työntekijöiden työsuhteet\",\"messageMissingEmployment\":\"Työntekijää ei ole luotu\",\"messageExistingEmployment\":\"Ok, työntekijä on olemassa\",\"messageSeveralEmployments\":\"Varoitus, usea työsuhde mahdollista\",\"help\":{\"title\":\"Työntekijöiden tuonti\",\"overview\":{\"title\":\"Yleistä\",\"row1\":\"Työntekijät identifioidaan henkilötunnuksen perusteella.\",\"row2\":\"HUOM! Tallennus luo vain uusia työntekijöitä, olemassa olevien työntekijöiden tietoihin ei tehdä muutoksia.\"}}},\"CompanyImport\":{\"enrichEInvoiceAddressesButton\":\"Täydennä verkkolaskuosoitteet\",\"enrichEInvoiceAddressesMessage\":\"Haetaan puuttuvia verkkolaskuosoitteita...\",\"enrichEInvoiceAddressesSelectionMessage\":\"Valitse verkkolaskuosoite\",\"help\":{\"title\":\"Asiakkaiden tuonti\",\"overview\":{\"title\":\"Yleistä\",\"row1\":\"Yritykset identifioidaan Y-tunnuksen perusteella.\",\"row2\":\"Kun rivit tallennetaan, uusi yritys luodaan, jos sitä ei ole vielä luotu. Samalla syntyy asiakkuus uuteen yritykseen. Jos yritys on jo ennestään olemassa ja valtuus annettu, luodaan myös asiakkuus.\"}}},\"AccountAvatarEdit\":{\"optionChoose\":\"Valitse kuvan tyyppi\",\"optionIcon\":\"Kuvake\",\"optionUploaded\":\"Kuva omalta koneelta\",\"avatarTypeLabel\":\"Kuvan tyyppi\",\"initialsLabel\":\"Nimikirjaimet\",\"colorLabel\":\"Väri\"},\"InvoiceSettings\":{\"legend\":\"Laskut\"},\"AccountInfo\":{\"palkkausAccount\":\"Palkkaus.fi-tili\",\"email\":\"Sähköposti\",\"companyName\":\"Yrityksen nimi\",\"phone\":\"Puhelinnumero\",\"officialId\":\"Y-tunnus\",\"address\":\"Osoite\",\"companyType\":\"Yhtiömuoto\",\"ibanNumber\":\"Pankkitili\",\"authorizationType\":\"Valtuutus\"},\"CalcOverview\":{\"getDatesRangeText\":\"Täytä työn alku- ja loppupäivät!\",\"ibanOk\":\"Tilinumero OK\",\"noIbanNumber\":\"Ei tilinumeroa\",\"getUsecaseTextNumberOfDays\":\"päivää\",\"calcRows\":\"Palkkarivit\",\"salary\":\"Palkka\",\"benefits\":\"Luontoisedut\",\"deductions\":\"Vähennykset\",\"total\":\"Yht.\",\"totalGrossSalary\":\"Bruttopalkka\",\"summary\":\"Yhteenveto\",\"worker\":\"Työntekijä\",\"worktime\":\"Työaika\",\"salaryDate\":\"Palkkapäivä\",\"now\":\"Heti\",\"leavesDays\":\"Lomapäivät\",\"absencesDays\":\"Palkatt. poissaolot\",\"paidAbsencesDays\":\"Palkall. poissaolot\",\"d\":\"pv\",\"paymentMethod\":\"Maksutapa\",\"noPaymentMethod\":\"Maksutapaa ei valittu\"},\"DateRange\":{\"labelDaysCount\":\"Päivien määrä\",\"labelStartAndEndDate\":\"Alku- ja loppupäivät\",\"salaryPeriod\":\"Palkkakausi\",\"startDate\":\"Alkupäivä\",\"otherMonth\":\"Muu kuukausi\",\"periodStartDateError\":\"Syötä muodossa 'pv.kk.'\",\"periodStartDateError2\":\" ei ole päivämäärä.\",\"getDatesRangeText\":\"Täytä työn alku- ja loppupäivät!\",\"numberOfDays\":\" päivää\"},\"CalcReports\":{\"reportType\":\"Tyyppi\",\"reportLanguage\":\"Kieli\",\"reportViewPartial\":\"Vain taulukko\",\"reportViewPage1\":\"Ensimmäinen sivu\",\"reportViewFull\":\"Koko raportti\",\"irRows\":\"Tulorekisteririvit\",\"irFull\":\"Palkkatietoilmoitus\",\"rowsReport\":\"Rivilistaus\"},\"CalcWorktime\":{\"title\":\"Milloin työ tehdään?\",\"otherMonth\":\"Muu kuukausi\",\"periodStartDateErrorFormat\":\"Syötä muodossa 'pv.kk.'\",\"periodStartDateErrorNotDate\":\" ei ole päivämäärä.\",\"getDatesRangeText\":\"Täytä työn alku- ja loppupäivät!\",\"getUsecaseTextNumberOfDays\":\"päivää\",\"salaryDateTitle\":\"Palkkapäivä\",\"salaryDateDescription\":{\"html\":\" Päivä, jolloin palkka on työntekijän tilillä. Tyhjä päivä tarkoittaa <strong>heti</strong>: Käytännössä 0-3 päivää maksutavasta riippuen.\"},\"salaryDateLabel\":\"Palkkapäivä\",\"worktime\":{\"placeholder\":\"Työaika\",\"description\":\"Valitse palkkakausi ja työpäivien määrä kaudella. Tarkat alku- ja loppupäivät voi antaa, kun valitsee Muu periodi.\",\"startAndEndDates\":\"Alku- ja loppupäivät\"}},\"ProCalculator\":{\"work\":\"Tehtävä työ:\",\"workInfo\":\"Työn tiedot\",\"workerInfo\":\"Perustiedot\",\"employment\":\"Työsuhde\",\"calcRows\":\"Palkkarivit\",\"taxcard\":\"Verokortti\",\"worktimeAndAbsences\":\"Työaika ja lomat\",\"paymentMethods\":\"Maksutavat\",\"reports\":\"Raportit\"},\"AccountingReportRows\":{\"accountNumber\":\"Ehdotustili\",\"accountName\":\"Selite\",\"saldo\":\"Yhteensä\",\"calculation\":\"Laskelma\",\"description\":\"Kuvaus\",\"vatPercent\":\"Alv %\",\"sum\":\"Summa\",\"projectNumber\":\"Projektinumero\",\"costCenter\":\"Kustannuspaikka\"},\"BatchProcess\":{\"status\":\"Tila\",\"importStatuses\":{\"ignored\":\"Ei käsitelty\",\"success\":\"Ok\",\"error\":\"Virhe\",\"warning\":\"Varoitus\"},\"messages\":\"Viestit\",\"cols\":{\"owner\":\"Työnantaja\",\"shortText\":\"Kuvaus\",\"salaryDate\":\"Palkkapäivä\",\"grossSalary\":\"Bruttopalkat\"},\"processing\":\"Käsitellään\",\"cancelProcess\":\"Keskeytä ajo\",\"processCancelled\":\"Ajo peruttu\",\"ready\":\"Valmis\",\"errors\":\"Virheitä\",\"count\":\"Lukumäärä\"}},\"sxy_pay\":{\"InvoicesPreview\":{\"paymentCreatedLater\":\"Maksu luodaan myöhemmin\",\"paymentStarted\":\"Laskujen maksu aloitettu:\",\"paymentStartedInfo\":\"Laskujen tilan näet alla olevasta listasta.\",\"invoicesPaid\":\"Laskut on maksettu.\",\"invoicesHaveErrors\":\"Laskuissa on virheitä. Tarkista tilanne laskukohtaisesti alta.\",\"invoicesCanceled\":\"Laskuja on peruttu. Tarkista tilanne laskukohtaisesti alta.\",\"recipientAndType\":\"Saaja ja laskun tyyppi\",\"comingToPayment\":\"Tulossa maksuun\",\"invoiceDate\":\"Laskun päivä\",\"dueDate\":\"Eräpäivä\",\"invoiceAmount\":\"Laskun summa\",\"noPaymentMarkedPaid\":\"Ei maksua: Merkitään suoraan maksetuksi.\",\"sendsInvoice\":\"lähettää laskun\",\"paidEarlier\":\"Maksettu aiemmin\",\"inProgress\":\"Käsittelyssä\",\"payNow\":\"Maksetaan nyt\",\"payNowOrWhenAllPaid\":\"Maksetaan nyt tai kun kaikki kuukauden palkat on maksettu\",\"salariesTotal\":\"Palkkoja yhteensä\",\"paymentMethodNotSelected\":\"Maksutapaa ei ole valittu. Valitse maksutapa laskelmassa/palkkalistassa.\"},\"PaymentReady\":{\"paymentComplete\":\"Maksu valmis. Voit nyt sulkea tämän sivun.\",\"paymentCanceled\":\"Käyttäjä peruutti maksun. Maksaminen keskeytetty.\",\"paymentFailed\":\"Maksu epäonnistui.\",\"paymentSuccess\":\"Maksu onnistui. Voit nyt sulkea tämän sivun.\"},\"PaymentDetails\":{\"salaryDate\":\"Palkkapäivä\",\"payrollDateInPast\":\"Palkkalistan palkkapäivä on menneisyydessä. Käytössä on takautuvapalkka.\",\"calculationDateInPast\":\"Palkkalaskelman palkkapäivä on menneisyydessä. Käytössä on takautuvapalkka.\",\"payrollRetroactiveDateRemoved\":\"Palkkalistalla ollut takautuvapalkkapäivä poistuu.\",\"calculationRetroactiveDateRemoved\":\"Palkkalaskelmalla ollut takautuvapalkkapäivä poistuu.\",\"cannotSelectPaymentMethod\":\"Et voi valita maksumenetelmää suoraan\",\"sendToPayment\":\"Lähetä maksuun\",\"createInvoices\":\"Luo laskut\",\"createPaymentData\":\"Luo maksuaineisto\",\"createPayments\":\"Luo maksut\",\"next\":\"Seuraava\",\"paymentMethodNotSelected\":\"Maksutapa ei ole valittu.\",\"selectPaymentMethod\":\"Valitse maksutapa\",\"pay\":\"Maksa\"},\"PaymentAccountSelection\":{\"selectAccountToPay\":\"Valitse tili, jolta haluat maksaa\",\"showingAuthorizedAccounts\":\"Näytetään tilit, joiden valtuutus on voimassa.\",\"name\":\"Nimi\",\"owner\":\"Omistaja\",\"number\":\"Numero\",\"type\":\"Tyyppi\",\"payWithThisAccount\":\"Maksa tällä tilillä\",\"otherAccountCheckBank\":\"Muu tili, tarkista pankista\",\"noAccounts\":\"Tällä hetkellä yrityksellä ei ole valittuja tilejä.\",\"goToBankToSelectAccount\":\"Siirry pankkiin valitsemaan tili\"},\"Finvoice\":{\"ready\":\"Valmis\",\"calculationPaid\":\"Laskelma/palkkalista on maksettu.\",\"paymentCouldNotBeCreated\":\"Maksua ei voitu luoda. Tarkista, onko laskelma/palkkalista jo maksettu.\",\"paymentCreationFailed\":\"Maksun luonti epäonnistui.\"},\"CreditTransfer\":{\"print\":\"Tulosta\",\"printWithoutPersonalData\":\"Tulosta ilman henkilötietoja\",\"recipientAccountNumber\":\"Saajan<br />tilinumero<br />Mottagarens<br />kontonummer\",\"recipient\":\"Saaja<br />Mottagare\",\"payerNameAndAddress\":\"Maksajan<br />nimi ja<br />osoite<br />Betalarens<br />namn och<br />adress\",\"creditTransfer\":\"TILISIIRTO. GIRERING\",\"signature\":\"Allekirjoitus<br />Underskrift\",\"fromAccountNumber\":\"Tililtä nro<br />Från konto nr\",\"referenceNumber\":\"Viitenumero<br />Ref. nr\",\"dueDate\":\"Eräpäivä<br />Förfallodag\",\"paymentToSalaxyAccount\":\"Palkanmaksu Suomen Palkanlaskenta Oy:n asiakasvaratilille.\",\"copyBarcode\":\"Kopioi\",\"barcodeCopyNote\":\"Huomaa, että alla olevasta tekstikentästä voit myös kopioida viivakoodin useimpiin verkkopankkeihin, joten sinun ei tarvitse syöttää maksun tietoja.\",\"breakdownByCalculation\":\"Erittely laskelmittain\",\"employee\":\"Työntekijä\",\"grossSalary\":\"Bruttopalkka\",\"payNow\":\"Maksetaan nyt\",\"total\":\"Yhteensä:\",\"serviceFeeIncludingVat\":\"josta Palkkaus.fi-palvelumaksu (sis. alv):\",\"paymentTable\":\"Maksutaulukko\",\"paymentCreationFailed\":\"Maksun luonti epäonnistui.\",\"finalizePayment\":\"Viimeistele maksaminen\",\"paymentForwardedToRecipient\":\"Maksu välitetään saajalle maksujenvälityksen ehtojen mukaisesti ja vain maksajan ilmoittaman tilinumeron perusteella.\"},\"CfaPaymentOverview\":{\"cannotPayYet\":\"Et voi vielä maksaa palkkalaskelmaa, koska työntekijän tiedot ovat puutteelliset.\",\"moreDetailsBelow\":\"Tarkempia tietoja alla.\",\"workDonePeriod\":\"Työ tehty ajalla:\",\"days\":\"päivää.\",\"checkInfoAndContinue\":\"Tarkista alla olevat tiedot ja jatka maksuun\",\"whenYouPayTotal\":\"Kun olet maksanut kokonaissumman\",\"employeePaidAndNotified\":\"työntekijälle maksetaan nettopalkka ja hänelle lähetetään tieto palkkalaskelmasta. Voit myös itse tulostaa sen palvelusta. Palkkaus.fi tekee palkkaan liittyvät ilmoitukset ja maksut yo.\",\"paymentsTotal\":\"Maksut yhteensä:\",\"calculations\":\"Laskelmia:\",\"paytrailServiceInfo\":\"Verkkopankkimaksamiseen liittyvän maksunvälityspalvelun toteuttaa Paytrail Oyj (2122839-7) yhteistyössä suomalaisten pankkien ja luottolaitosten kanssa. Käyttäjän kannalta palvelu toimii aivan kuten perinteinen verkkomaksaminenkin.\",\"netSalaryArrivalNote\":\"HUOM: nettopalkan saapuminen työntekijän tilille saattaa kestää 4 pankkipäivää, riippuen vastaanottajan pankista. Huomioithan nämä ajat maksaessasi. Ajat johtuvat pankkien välisistä palveluista ja sopimuksista, eikä Palkkaus.fi pysty vaikuttamaan niihin.\",\"paymentMethodNotSelected\":\"Maksutapa ei ole valittu.\",\"selectPaymentMethod\":\"Valitse maksutapa\",\"pay\":\"Maksa\",\"toParties\":\"tahoille\"},\"CalcWorkerInfo\":{\"athletePension\":\"Urheilijan eläkkeen alaista\",\"athletePensionFull\":\"Työeläkesopimus: Urheilijan eläke\",\"boardRemuneration\":\"Hallituspalkkio\",\"boardRemunerationFull\":\"Työeläkesopimus: Ei (hallituspalkkio)\",\"compensation\":\"Työkorvaus\",\"compensationFull\":\"Työeläkesopimus: Ei (työkorvaus)\",\"tyel\":\"TyEL:n alaista\",\"tyelFull\":\"Työeläkesopimus: TyEL\",\"yel\":\"YEL:n alaista\",\"yelFull\":\"Työeläkesopimus: YEL\",\"myel\":\"MYEL:n alaista\",\"myelFull\":\"Työeläkesopimus: MyEL\",\"tyelPartialOwner\":\"TyEL:n alaista, osaomistaja\",\"tyelPartialOwnerFull\":\"Työeläkesopimus: TyEL, osaomistaja\",\"yelNoInsurance\":\"YEL, ei vakuuttamisvelvollisuutta\",\"yelNoInsuranceFull\":\"Työeläkesopimus: YEL, ei vakuuttamisvelvollisuutta\",\"myelNoInsurance\":\"MYEL, ei vakuuttamisvelvollisuutta\",\"myelNoInsuranceFull\":\"Työeläkesopimus: MYEL, ei vakuuttamisvelvollisuutta\",\"juel\":\"JuEL:n alaista\",\"juelFull\":\"Työeläkesopimus: JuEL\",\"noPensionSelection\":\"Ei eläkevalintaa\",\"noPensionSelectionFull\":\"Työeläkesopimus: Ei valittu\",\"noWorkerSelected\":\"Työntekijää ei ole valittu\",\"noIbanNumber\":\"Ei tilinumeroa\",\"noSSNumber\":\"Ei henkilötunnusta!\",\"noTelephone\":\"Ei puhelinnumeroa\",\"noEmail\":\"Ei sähköpostiosoitetta!\",\"noEmailInfo\":\"Työntekijälle ei voida lähettää ilmoitusta palkanmaksusta sähköpostitse.\"},\"InvoicesService\":{\"eInvoiceNotSent\":\"Verkkolaskua ei lähetetty. Maksua ei voitu lähettää verkkolaskuna\",\"statusFromOperator\":\"Status operaattorilta:\",\"eInvoiceSent\":\"Verkkolasku on lähetetty. Maksu on lähetetty verkkolaskuna osoitteeseen\"},\"BatchProcess\":{\"processing\":\"Käsitellään...\",\"processingStatus\":\"Prosessoidaan...\",\"progressInfo\":\"Käsitellään\"},\"useBusinessObject\":{\"changeAllCalculations\":\"Muutetaanko kaikki laskelmat?\",\"changePeriodInAllCalculations\":\"Muutetaanko periodi kaikissa laskelmissa? Vaihtoehtona on vaihtaa periodi vain palkkalistaan ja jättää laskelmiin nykyiset päivämäärät.\",\"authorizationSignatureMissing\":\"Valtakirjan allekirjoitus puuttuu. Ennen kuin lähdet maksamaan, sinun täytyy viedä tilin luonti loppuun asti ja allekirjoittaa valtakirja.\",\"salaryDateChanged\":\"Laskelman/palkkalistan palkkapäivä on muuttunut. Tarkista laskelman/palkkalistan palkkapäivä.\",\"employer\":\"Työnantaja\",\"employee\":\"Työntekijä\"},\"usePopupModal\":{\"processing\":\"Käsitellään\"},\"BusinessObjectDates\":{\"salaryDate\":\"Palkkapäivä\",\"periodTitle\":\"Palkkakausi\",\"start\":\"Alku\",\"end\":\"Loppu\",\"fieldRequired\":\"Kenttä on pakollinen\",\"endDateBeforeStartDate\":\"Loppupäivä ei saa olla ennen alkupäivää\"},\"PaymentMethodSelection\":{\"legacyPaymentInfo\":\"Mikäli sinulla on ongelmia uusien maksutapojen kanssa, voit maksaa edelleen asiakasvaratilimme kautta 31.3.2026 asti.\",\"testPayments\":\"Testimaksut\",\"testPaymentsInfo\":\"Nämä maksutavat näkyvät vain testiympäristössä.\",\"payThroughCustomerDepositAccount\":\"Maksa asiakasvaratilin kautta\",\"markAsPaid\":\"Merkitse maksetuksi\",\"markAsError\":\"Merkitse virheeksi\",\"asvaraTest\":\"Asvara testi\",\"selectPaymentMethod\":\"Valitse maksutapa\",\"infoText1\":\"Olemme uudistaneet maksamisen Palkkaus.fi-sivustollamme.\",\"infoText2\":\"Voit jatkossa maksaa palkat, palkan työnantajasuorituksen verottajalle ja Palkkaus.fi:n palkkion suoraan verkkomaksuna yrityksesi tililtä maksunsaajille. Tässä vaiheessa suorat verkkomaksut ovat käytettävissä vain Nordean asiakkaille, myöhemmin kaikille pankeille.\",\"infoText3\":\"Vanha Palkkaus.fi:n asiakasvaratilin kautta tapahtuva maksaminen on edelleen mahdollista, ja sitä käytetään niille pankeille, joille ei vielä ole otettu käyttöön suoraa verkkomaksua. Tuemme edelleen myös viitesiirron ja verkkolaskun kautta tapahtuvia maksuja Palkkaus.fi:n asiakasvaratilillä.\"},\"PaymentWizard\":{\"paymentMethod\":\"Maksutapa\",\"review\":\"Tarkista\",\"pay\":\"Maksa\",\"ready\":\"Valmis\",\"previous\":\"Edellinen\",\"next\":\"Seuraava\",\"backToPaymentMethodSelection\":\"Palaa maksutavan valintaan\",\"proceedToPayment\":\"Siirry maksamaan\",\"backToReview\":\"Palaa tarkistukseen\",\"payingCalculation\":\"Palkkalaskelman maksaminen\",\"payingPayroll\":\"Palkkalistan maksaminen\",\"errorUnknownBusinessObjectType\":\"Error: Unknown business object type\",\"selectedPaymentMethodNotSupported\":\"Valittu maksutapa ei ole tuettu\"},\"PaymentMethodGroups\":{\"paymentsDirectlyToBank\":\"Maksut suoraan pankkiin\",\"palkkausWsDescription\":\"Palkasta, ennakonpidätyksestä jne. luodaan erilliset laskut ja ne lähetetään pankkien WS-kanavaan. Vaatii sopimuksen pankin kanssa.\",\"paymentDataCreation\":\"Maksuaineiston luonti\",\"palkkausManualDescription\":\"Maksuaineisto luodaan erillisinä laskuina Maksut-listaan. Sieltä ne voidaan tulostaa PDF-tiedostona, kopoida verkkopankkiin tai ladata SEPA-maksuaineistona.\",\"invoiceCreation\":\"Laskujen luonti\",\"palkkausInvoicesDescription\":\"Laskujen luonti palkkalaskelmista\",\"otherBank\":\"Muu pankki\",\"singleCreditTransferWithReference\":\"Yksi tilisiirto viitenumerolla\",\"eInvoiceSinglePayment\":\"Verkkolasku (yksi maksu)\",\"sendingInvoicesToHolvi\":\"Laskujen lähetys Holviin\",\"sendingInvoicesToKompassi\":\"Laskujen lähetys Kompassiin\",\"sendingInvoicesToDomus\":\"Laskujen lähetys Domukseen\",\"sendingInvoicesToPasseliMerit\":\"Laskujen lähetys Passeli Meritiin\",\"sendingInvoicesToOdoo\":\"Laskujen lähetys Odooon\",\"sendingInvoicesToEcom\":\"Laskujen lähetys Ecomiin\",\"kitsasDescription\":\"Laskujen luonti palkkalaskelmista.\",\"easorPaymentDataCreation\":\"Easor maksuaineiston luonti\",\"hausvisePaymentDataCreation\":\"Hausvise maksuaineiston luonti\",\"accountorGoDescription\":\"Laskujen lähetys suoraan Accountor Go -palveluun. Käytössä vain Accountor Go -palvelun kautta.\",\"talenomOnlineDescription\":\"Laskujen lähetys suoraan Easor App -sovellukseen. Käytössä vain Easor App -sovelluksen kautta.\",\"finagoSoloDescription\":\"Laskujen lähetys Finago Soloon. Käytössä vain Finago Solo -palvelun kautta.\",\"sendingInvoicesToProcountor\":\"Laskujen lähetys Procountoriin\",\"sendingInvoicesToAskelma\":\"Laskujen lähetys Askelma -ohjelmistoon\",\"sendingInvoicesToBriox\":\"Laskujen lähetys Briox -ohjelmistoon\",\"sendingInvoicesToLemonaid\":\"Laskujen lähetys Lemonaid -ohjelmaan\",\"sendingInvoicesToLaskupiste\":\"Laskujen lähetys Laskupisteelle\"},\"SelectedPaymentMethod\":{\"changePaymentMethod\":\"Vaihda maksutapaa\"},\"InvoicesCreate\":{\"ready\":\"Valmis\",\"error\":\"Virhe\",\"errorOccurredWhileCreatingInvoices\":\"Virheen tapahtui laskujen luontiessa.\",\"PaymentChannel\":{\"undefined\":{\"intro\":\"<div><p class=\\\"lead\\\">Maksumenetelmä <strong>{{ channel }}</strong> ei ole tuettu tässä palvelussa tai sinun tilitoimistosi / kirjanpito-ohjelmasi kautta. Valitse jokin toinen maksumenetelmä.</p></div>\",\"title\":\"Maksumenetelmää ei ole valittu\"},\"palkkausManual\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Maksujen luonti SEPA- tai viitesiirtoaineistoja varten\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Maksut -listalle. Merkitse lasku maksetuksi, kun olet maksanut laskua vastaavan summan. Laskut sivukuluista tulevat Maksut-listalle automaattisesti kuun vaihteen jälkeen. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset maksetuksi merkityistä nettopalkoista.\"},\"palkkausWS\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä maksuista eräpäivineen.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Maksujen luonti pankin WS-kanavaan\",\"successAlertHeading\":\"Maksun/maksujen luonti onnistui\",\"successAlertText\":\"Maksu(t) nettopalkasta on nyt luotu WS-kanavaan. Maksut verottajalle luodaan WS-kanavaan automaattisesti kuun vaihteen jälkeen. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset maksetuksi merkityistä nettopalkoista.\"},\"palkkausPSD\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä maksuista eräpäivineen.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Verkkomaksujen luonti\",\"successAlertHeading\":\"Maksun/maksujen luonti onnistui\",\"successAlertText\":\"Maksu(t) nettopalkasta on nyt luotu. Maksut verottajalle luodaan automaattisesti kuun vaihteen jälkeen. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset maksetuksi merkityistä nettopalkoista.\"},\"palkkausPersonal\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Laskut nettopalkasta ja verosta on nyt luotu Maksut -listalle. Merkitse nettopalkan lasku maksetuksi, kun olet maksanut laskua vastaavan summan. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset maksetuksi merkityistä nettopalkoista.\"},\"palkkausInvoices\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen.</p><p><strong>Luo laskut painamalla 'Luo laskut' -nappia.</strong></p></div>\",\"heading\":\"Laskujen luonti palkkalaskelmista\",\"successAlertHeading\":\"Haluatko maksaa palkat heti?\",\"successAlertText\":\"<div><p class='lead'>\\nPalkasta on nyt luotu laskut, mutta niitä ei vielä ole laitettu maksuun.\\nHaluatko maksaa palkat ja/tai sivukulut nyt vai syöttää lisää laskelmia?\\n</p>\\n<p><strong>HUOM:</strong> Palkat ilmoitetaan tulorekisteriin vasta, kun nettopalkka on merkitty maksetuksi.</p></div>\",\"successAlertOk\":\"Maksa laskut nyt\",\"successAlertCancel\":\"Syötä lisää palkkoja\"},\"kitsas\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen.</p><p><strong>Luo laskut painamalla 'Luo laskut' -nappia.</strong></p></div>\",\"heading\":\"Laskujen luonti palkkalaskelmista\",\"successAlertHeading\":\"Haluatko maksaa palkat heti?\",\"successAlertText\":\"<div><p class='lead'>\\nPalkasta on nyt luotu laskut, mutta niitä ei vielä ole laitettu maksuun.\\nHaluatko maksaa palkat ja/tai sivukulut nyt vai syöttää lisää laskelmia?\\n</p>\\n<p><strong>HUOM:</strong> Palkat ilmoitetaan tulorekisteriin vasta, kun nettopalkka on merkitty maksetuksi.</p></div>\",\"successAlertOk\":\"Maksa laskut nyt\",\"successAlertCancel\":\"Syötä lisää palkkoja\"},\"accountorGo\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukuluista saat laskut automaattisesti hyväksyttäväksi kuun vaihteen jälkeen Accountor Go -palvelun Maksut-osioon.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia ja käy hyväksymässä ne Accountor Go -palvelun Maksut-osiossa.</strong></p></div>\",\"heading\":\"Palkkojen maksu Accountor Go-palvelussa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Accountor Go -palvelun Maksut-osioon. Käy hyväksymässä lasku kohdasta 'Avoimet maksut'. Lasku näkyy siellä noin 2 minuutin sisällä. Laskut sivukuluista tulevat Avoimet maksut -osioon automaattisesti kuun vaihteen jälkeen. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\",\"notZeroPayment\":{\"lead\":\"Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukuluista saat laskut automaattisesti hyväksyttäväksi kuun vaihteen jälkeen Accountor Go -palvelun Maksut-osioon.\",\"info\":\"Luo maksut nettopalkoista painamalla Maksa -nappia ja käy hyväksymässä ne Accountor Go -palvelun Maksut-osiossa.\"},\"zeroPayment\":{\"info\":\"Kaikki maksut ovat nollamaksuja tai sivukulujen laskuja, jotka luodaan/maksetaan vasta myöhemmin. Merkitse nettopalkat maksetuksi painamalla Maksa -nappia.\",\"successAlertHeading\":\"Laskelmat merkitty maksetuksi (nollamaksu)\",\"successAlertText\":\"Laskelma(t) on merkitty maksetuiksi ja niistä tehdään tulorekisteri-ilmoitus viiden päivän kuluessa.\"}},\"talenomOnline\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkasta ja mahdollisista ulosottomaksuista muodostetaan heti laskut hyväksyttäväksi Easor App -sovellukseen. Sivukulujen sekä ay-jäsenmaksujen laskut valmistuvat palkanmaksupäivää seuraavan kuun alussa ja siirtyvät samaan tapaan Easor App -sovellukseen hyväksyttäväksi ja maksettavaksi.</p><p><strong>Luo laskut ja lähetä ne Easor App -sovellukseen painamalla 'Lähetä maksuun' -painiketta.</strong></p></div>\",\"heading\":\"Palkkojen maksu Easor App -sovelluksessa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Easor App -sovellukseen. Laskut sivukuluista tulevat Easor App -sovellukseen automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"finagoSolo\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukuluista saat laskut automaattisesti hyväksyttäväksi kuun vaihteen jälkeen Procountor Solon Maksut-osioon.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia ja käy hyväksymässä ne Procountor Solon Maksut-osiossa.</strong></p></div>\",\"heading\":\"Palkkojen maksu Procountor Solossa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Procountor Solo Maksut-osioon. Käy hyväksymässä lasku kohdasta 'Avoimet maksut'. Lasku näkyy siellä noin 2 minuutin sisällä. Laskut sivukuluista tulevat Avoimet maksut -osioon automaattisesti kuun vaihteen jälkeen. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\",\"notZeroPayment\":{\"lead\":\"Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukuluista saat laskut automaattisesti hyväksyttäväksi kuun vaihteen jälkeen Procountor Solon Maksut-osioon.\",\"info\":\"Luo maksut nettopalkoista painamalla Maksa -nappia ja käy hyväksymässä ne Procountor Solon Maksut-osiossa.\"},\"zeroPayment\":{\"info\":\"Kaikki maksut ovat nollamaksuja tai sivukulujen laskuja, jotka luodaan/maksetaan vasta myöhemmin. Merkitse nettopalkat maksetuksi painamalla Maksa -nappia.\"}},\"procountor\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Procountoriin painamalla 'Luo maksut' -nappia.</strong></p></div>\"},\"kevytyrittaja\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukuluista saat laskut automaattisesti hyväksyttäväksi kuun vaihteen jälkeen Talenom Kevytyrittäjä -palveluun.</p><p><strong>Luo maksut nettopalkoista painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Talenom Kevytyrittäjä -palvelussa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Talenom Kevytyrittäjä -Palveluun. Laskut sivukuluista tulevat Talenom Kevytyrittäjä -palveluun automaattisesti kuun vaihteen jälkeen. Palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\",\"notZeroPayment\":{\"lead\":\"Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukuluista saat laskut automaattisesti hyväksyttäväksi kuun vaihteen jälkeen Talenom Kevytyrittäjä -palveluun.\"}},\"vismaNetvisor\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Visma Netvisoriin painamalla 'Luo maksut' -nappia.</strong></p></div>\"},\"askelma\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Askelmaan painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Askelma -palvelussa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Askelma-palveluun. Mene ostoreskontraan, hae palkat maksuun ja palkkapäivän jälkeen kuittaa palkat tulorekisteriin ostoreskontran tulorekisteriin kuittaamattomat -haun kautta. Kuun vaihteen jälkeen hae ostoreskontraan lasku verottajan maksuista.\"},\"briox\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuun liittyvistä kustannuksista ja niiden eräpäivistä. Nettopalkka maksetaan työntekijälle välittömästi tai asetetun tulevan palkanmaksupäivän mukaisesti. Sivukulujen maksut suoritetaan seuraavan kuukauden alussa jolloin ne tulee käsitellä palkanmaksujen listassa.</p><p><strong>Luo nettopalkkojen maksuaineistot ja lähetä ne Brioxiin odottamaan käsittelyä napsauttamalla 'Lähetä Brioxiin' -painiketta.</strong></p></div>\",\"heading\":\"Palkkojen maksu Briox -palvelussa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Briox -Palveluun. Laskut sivukuluista tulevat Briox -palveluun automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"lemonaid\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Lemonaidiin painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Lemonaid -ohjelmassa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Lemonaid -ohjelmalle. Laskut sivukuluista tulevat Lemonaid -ohjelmaan automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"laskupiste\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Laskupisteeseen painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Laskupisteessä\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu ja ne tulevat näkyviin Laskupisteeseen viiden minuutin kuluessa. Laskut sivukuluista tulevat Laskupisteeseen automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"passeliMerit\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Passeli Meritiin painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Passeli Meritissä\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu ja ne tulevat näkyviin Passeli Meritiin hetken kuluttua. Laskut sivukuluista tulevat Passeli Meritiin automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"odoo\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Odoon painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Odoossa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu ja ne tulevat näkyviin Odoon hetken kuluttua. Laskut sivukuluista tulevat Odoon automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"hausvise\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen maksuaineisto valmistuu seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksuaineisto nettopalkoista painamalla 'Luo maksuaineisto' -nappia.</strong></p></div>\",\"heading\":\"Hausvise - maksuaineiston luonti\",\"successAlertHeading\":\"Maksuaineiston luonti onnistui\",\"successAlertText\":\"Maksuaineisto nettopalkasta on nyt luotu. Maksuaineisto sivukuluista luodaan automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"ecom\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Ecomiin painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Ecomissa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu ja ne tulevat näkyviin Ecomiin hetken kuluttua. Laskut sivukuluista tulevat Ecomiin automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"kompassi\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Kompassiin painamalla 'Luo maksut' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Kompassissa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu ja ne tulevat näkyviin Kompassiin hetken kuluttua. Laskut sivukuluista tulevat Kompassiin automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"domus\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Domukseen painamalla 'Lähetä maksuun' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Domuksessa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu ja ne tulevat näkyviin Domukseen hetken kuluttua. Laskut sivukuluista tulevat Domukseen automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"},\"holvi\":{\"intro\":\"<div><p>Alla näet yhteenvedon palkanmaksuihin liittyvistä laskuista eräpäivineen. Nettopalkka maksetaan työntekijälle heti tai sovitun palkkapäivän mukaan. Sivukulujen laskut valmistuvat seuraavan kuun alussa ja ne pitää käydä tällöin hyväksymässä.</p><p><strong>Luo maksut nettopalkoista ja lähetä ne Holviin painamalla 'Lähetä maksuun' -nappia.</strong></p></div>\",\"heading\":\"Palkkojen maksu Holvissa\",\"successAlertHeading\":\"Maksun luonti onnistui\",\"successAlertText\":\"Lasku(t) nettopalkasta on nyt luotu Holviin. Laskut sivukuluista tulevat Holviin automaattisesti kuun vaihteen jälkeen. Huomioi, että nettopalkkojen laskun maksamisen jälkeen palvelu tekee myös tarvittavat tulorekisteri-ilmoitukset palkanmaksuista.\"}}},\"BatchProcessTable\":{\"processed\":\"Prosessoitu\",\"waiting\":\"Odottaa...\",\"processing\":\"Prosessoidaan...\"},\"PopupModal\":{\"ready\":\"Valmis!\",\"cancel\":\"Peruuta\",\"close\":\"Sulje\",\"ok\":\"Ok\"}},\"TABULATOR\":{\"pagination\":{\"first\":\"Ensimmäinen\",\"last\":\"Viimeinen\",\"prev\":\"Edellinen\",\"next\":\"Seuraava\",\"counter\":{\"showing\":\"Näytetään\",\"rows\":\"rivistä\",\"pages\":\"pages\"}}},\"UI_Terms\":{\"all\":\"Kaikki\",\"abc\":\"Abc\",\"add\":\"Lisää\",\"addAttachment\":\"Lisää liite\",\"approve\":\"Hyväksy\",\"approveAndSave\":\"Hyväksy ja tallenna\",\"addNew\":\"Lisää uusi\",\"addRow\":\"Lisää rivi\",\"assignToPerson\":\"Osoita henkilölle...\",\"deleteRow\":\"Poista rivi\",\"areYouSure\":\"Oletko varma?\",\"back\":\"Takaisin\",\"backAlt\":\"Peruuta\",\"backToFront\":\"Takaisin etusivulle\",\"calculate\":\"Laske\",\"calculations\":\"Laskelmat\",\"cancel\":\"Peruuta\",\"cancelAlt\":\"Peru\",\"cancelEditing\":\"Peru muokkaaminen\",\"change\":\"Vaihda\",\"check\":\"Tarkista\",\"checked\":\"Tarkastettu\",\"choose\":\"Valitse...\",\"chooseAll\":\"Valitse kaikki\",\"chosen\":\"Valittu\",\"continue\":\"Jatka\",\"notChosen\":\"Ei valittu\",\"createAccount\":\"Luo tunnus\",\"createTestAccount\":\"Luo testitunnus\",\"chooseWorkDateRange\":\"Määritä työn alku- ja loppupäivät\",\"chooseWorkDuration\":\"Määritä työn kesto...\",\"clear\":\"Tyhjennä\",\"close\":\"Sulje\",\"confirm\":\"Vahvista\",\"copy\":\"Kopio\",\"copyed\":\"Kopioitu\",\"copyAsNew\":\"Kopioi uudeksi\",\"copyAsRequest\":\"Kopio pyynnöksi\",\"copyToClipboard\":\"Kopioi\",\"copiedToClipboard\":\"Kopioitu\",\"createNew\":\"Lisää uusi\",\"dateFormats\":{\"dm\":\"pv.kk.\",\"dmyyyy\":\"p.k.vvvv\"},\"dateNotChosen\":\"päivämäärä ei valittuna\",\"days\":\"pv\",\"delete\":\"Poista\",\"units\":{\"pce\":\"kpl\"},\"unselect\":\"Poista valinta\",\"unselectAll\":\"Poista valinnat\",\"demo\":\"KOKEILUVERSIO\",\"unenable\":\"Poista käytöstä\",\"dismiss\":\"Hylkää\",\"done\":\"Valmis\",\"download\":\"Lataa\",\"downloadPdf\":\"Lataa PDF\",\"downloadExcel\":\"Lataa Excel-tiedosto\",\"edit\":\"Muokkaa\",\"enable\":\"Ota käyttöön\",\"error\":\"Virhe\",\"gotIt\":\"Ymmärrän\",\"hours\":\"h\",\"isDeleting\":\"Poistetaan...\",\"isSaving\":\"Tallennetaan...\",\"isCalculating\":\"Lasketaan\",\"learnMore\":\"Lue lisää\",\"loading\":\"Ladataan...\",\"loginInProgress\":\"Kirjaudutaan...\",\"login\":\"Kirjaudu\",\"logout\":\"Kirjaudu ulos\",\"logoutAlt\":\"Päätä nykyinen sessio\",\"makeOrder\":\"Tee tilaus\",\"markChecked\":\"Merkitse tarkastetuksi\",\"minCharacters\":\"Kirjoita vähintään 3 merkkiä...\",\"minutes\":\"min\",\"monthHalf\":\"½ kuukautta\",\"months\":\"kk\",\"moreInfo\":\"Lisätietoja\",\"name\":\"Nimi\",\"navigation\":\"Navigaatio\",\"newCalculation\":\"Uusi laskelma\",\"next\":\"Seuraava\",\"new\":\"Uusi\",\"no\":\"Ei\",\"noteRequiredField\":\"* Pakollinen kenttä\",\"noThanks\":\"Ei kiitos\",\"ok\":\"OK\",\"oldVersion\":\"vanha versio\",\"open\":\"Avaa\",\"orChoose\":\"...tai valitse...\",\"otherPeriod\":\"Muu periodi\",\"pay\":\"Maksa\",\"payAll\":\"Ohita ja maksa - Työnantaja maksaa työntekijän osuuden sivukuluista\",\"payAllShort\":\"Ohita ja maksa\",\"personalId\":\"Henkilötunnus\",\"pleaseWait\":\"Ole hyvä ja odota...\",\"postpone\":\"Ei nyt\",\"previous\":\"Edellinen\",\"print\":\"Tulosta\",\"printable\":\"Tuloste\",\"read\":\"Lue\",\"readMore\":\"Lue lisää\",\"recalculate\":\"Päivitä laskelma\",\"recalculateAlt\":\"Laske uudelleen\",\"refresh\":\"Päivitä\",\"register\":\"Rekisteröidy\",\"reject\":\"Hylkää\",\"removeAttachment\":\"Poista liite\",\"save\":\"Tallenna\",\"saveAndProceed\":\"Tallenna ja jatka\",\"saveEdited\":\"Tallenna muutokset\",\"search\":\"Hae...\",\"searchByName\":\"Hae nimeltä...\",\"seePreview\":\"Katsele\",\"seePreviewAlt\":\"Esikatsele\",\"select\":\"Valitse\",\"selected\":\"Valitut\",\"selectAll\":\"Valitse kaikki\",\"removeSelections\":\"Poista valinnat\",\"selectAlt\":\"Valitse...\",\"sendEmail\":\"Lähetä sähköposti\",\"setDefault\":\"Aseta oletukseksi\",\"send\":\"Lähetä\",\"show\":\"Näytä\",\"showMore\":\"Näytä ohje\",\"showMore2\":\"Näytä lisää\",\"showAll\":\"Näytä kaikki\",\"skip\":\"Ohita\",\"sureToDeleteRecord\":\"Haluatko varmasti poistaa tämän tietueen?\",\"textSearch\":\"Tekstihaku\",\"today\":\"Tämä päivä\",\"timeToday\":\"Tänään\",\"timeYesterday\":\"Eilen\",\"total\":\"Yhteensä\",\"updateCalculation\":\"Päivitä laskelma\",\"updatingCalculation\":\"Päivitetään laskelmaa...\",\"use\":\"Ota käyttöön\",\"wait\":\"Odota...\",\"week2\":\"2 viikkoa\",\"years\":\"vuotta\",\"year\":\"Vuosi\",\"yes\":\"Kyllä\",\"created\":\"Luotu\",\"updated\":\"Päivitetty\",\"inspect\":\"Katsele\",\"salaryPayment\":\"Palkanmaksu\",\"incomeLimit\":\"Tuloraja\",\"withholdingTax\":\"Ennakonpidätys\",\"amount\":\"Määrä\",\"price\":\"Hinta\",\"menu\":\"Valikko\",\"sessionExpired\":\"Istunto on vanhentunut\",\"sessionExpiredEmbedded\":\"Palkkaus.fi-istuntosi on vanhentunut tai tulit sivulle ilman kirjautumista. Siirry johonkin toiseen osioon päänavigaatiosta ja palaa takaisin Palkanmaksu-osioon.\",\"pcs\":\"kpl\",\"pageDisabledAlert\":\"Tämä ominaisuus ei ole käytössä palvelupaketissasi.\",\"downloadMaterial\":\"Lataa aineisto\",\"downloadSelected\":\"Lataa valitut\",\"downLoadableMaterialTypes\":{\"invoice\":\"Lasku\",\"invoices\":\"Laskut\",\"payment\":\"Maksu\",\"payments\":\"Maksut\",\"accounting\":\"Kirjanpito\",\"calculation\":\"Palkkalaskelma\",\"calculations\":\"Palkkalaskelmat\"},\"status\":\"Tila\",\"noResults\":\"Ei tuloksia\"},\"VALIDATION\":{\"_notes\":\"Please note that all calc or payroll specific messages shoud be placed under Calc or Payroll -nodes. Messages in the Validation-root are obsolete.\",\"Files\":{\"ContentTypeError\":\"Tiedostomuotoa ei hyväksytä\",\"Empty\":\"Ladattava tiedosto on tyhjä\",\"MaxFileSize\":\"Ladattava tiedosto on liian suuri\",\"NoFiles\":\"Kutsun mukana ei tullut yhtään tiedostoa.\",\"SaveError\":\"Tuntematon virhe tiedoston tallennuksessa.\"},\"IllegalWorkerForCompanyType\":{\"description\":\"Yksityinen elinkeinonharjoittaja eli toiminimi ei voi maksaa itselleen palkkaa. Palkanmaksu hoidetaan yksityisnostoina. Kirjanpitäjäsi voi neuvoa sinua miten toimia.\",\"label\":\"Ei-sallittu palkka\"},\"IncompleteAdvancePayment\":{\"description\":\"Palkkaennakko laskelmalla on liian suuri. Korjaa palkkaennakko pienemmäksi tai bruttopalkka suuremmaksi. Mahdolliset ennakkoon maksetut kulukorvaukset tulee ilmoittaa omalla palkkalajilla.\",\"label\":\"Palkka ei riitä ilmoitettuun palkkaennakkoon\"},\"IncompleteForeclosure\":{\"description\":\"Rahapalkka ei riitä ulosmittauksen tekemiseen. Tarkista ulosmittauksen määrä maksukiellosta ja muista huomioida maksukiellossa ilmoitettu suojaosuus.\",\"label\":\"Palkka ei riitä ulosmittauksen tekemiseen\"},\"IncompleteOtherDeductions\":{\"description\":\"Palkka ei riitä ilmoitettuihin muihin vähennyksiin\",\"label\":\"Palkka ei riitä\"},\"IncompletePensionPayment\":{\"description\":\"Palkka ei riitä työntekijän osuuteen TyEL-maksusta\",\"label\":\"Palkka ei riitä\"},\"IncompletePrepaidExpenses\":{\"description\":\"Ennakkoon maksettu kulukorvaus laskelmalla on liian suuri. Ennakkoon maksettu kulukorvaus ylittää laskelmalle lisätyt kulukorvaukset.\",\"label\":\"Ennakkoon maksettu kulukorvaus laskelmalla on liian suuri\"},\"IncompleteUnemploymentInsurancePayment\":{\"description\":\"Palkka ei riitä työntekijän osuuteen työttömyysvakuutusmaksusta\",\"label\":\"Palkka ei riitä\"},\"IncompleteUnionPayment\":{\"description\":\"Palkka ei riitä AY-jäsenmaksuun\",\"label\":\"Palkka ei riitä\"},\"MissingOccupationCode\":{\"description\":\"Työn tyyppi puuttuu. Lisää se kohdassa 1 hakemalla Tilastokeskuksen luokituksesta. Ammattiluokitus on pakollinen tieto Tulorekisterin palkkatietoilmoituksessa.\",\"label\":\"Ammattiluokitus puuttuu\"},\"MissingWorkerIbanNumber\":{\"label\":\"Tilinumero puuttuu\",\"description\":\"Työntekijän tiedoista puuttuu tilinumero (IBAN-muodossa).\"},\"NegativeRowTotalNotSupported\":{\"description\":\"Rivin yhteenlaskettu summa on negatiivinen. Rivillä ei sallita negatiivista summaa.\",\"label\":\"Rivillä ei sallita negatiivista summaa\"},\"TimeSheetInput\":{\"isOverlapping\":{\"label\":\"Päivälle on päällekkäisiä kirjauksia\",\"description\":\"Päivälle kirjatut kellokorttikirjaukset menevät päällekäin.\"}},\"Calc\":{\"IllegalWorkerForCompanyType\":{\"description\":\"Yksityinen elinkeinonharjoittaja eli toiminimi ei voi maksaa itselleen palkkaa. Palkanmaksu hoidetaan yksityisnostoina. Kirjanpitäjäsi voi neuvoa sinua miten toimia.\",\"label\":\"Ei-sallittu palkka\"},\"IncompleteAdvancePayment\":{\"description\":\"Palkkaennakko laskelmalla on liian suuri. Korjaa palkkaennakko pienemmäksi tai bruttopalkka suuremmaksi. Mahdolliset ennakkoon maksetut kulukorvaukset tulee ilmoittaa omalla palkkalajilla.\",\"label\":\"Palkka ei riitä ilmoitettuun palkkaennakkoon\"},\"IncompleteForeclosure\":{\"description\":\"Rahapalkka ei riitä ulosmittauksen tekemiseen. Tarkista ulosmittauksen määrä maksukiellosta ja muista huomioida maksukiellossa ilmoitettu suojaosuus.\",\"label\":\"Palkka ei riitä ulosmittauksen tekemiseen\"},\"IncompleteOtherDeductions\":{\"description\":\"Palkka ei riitä ilmoitettuihin muihin vähennyksiin\",\"label\":\"Palkka ei riitä\"},\"IncompletePensionPayment\":{\"description\":\"Palkka ei riitä työntekijän osuuteen TyEL-maksusta\",\"label\":\"Palkka ei riitä\"},\"IncompletePrepaidExpenses\":{\"description\":\"Ennakkoon maksettu kulukorvaus laskelmalla on liian suuri. Ennakkoon maksettu kulukorvaus ylittää laskelmalle lisätyt kulukorvaukset.\",\"label\":\"Ennakkoon maksettu kulukorvaus laskelmalla on liian suuri\"},\"IncompleteUnemploymentInsurancePayment\":{\"description\":\"Palkka ei riitä työntekijän osuuteen työttömyysvakuutusmaksusta\",\"label\":\"Palkka ei riitä\"},\"IncompleteUnionPayment\":{\"description\":\"Palkka ei riitä AY-jäsenmaksuun\",\"label\":\"Palkka ei riitä\"},\"MissingOccupationCode\":{\"description\":\"Työn tyyppi puuttuu. Lisää se kohdassa 1 hakemalla Tilastokeskuksen luokituksesta. Ammattiluokitus on pakollinen tieto Tulorekisterin palkkatietoilmoituksessa.\",\"label\":\"Ammattiluokitus puuttuu\"},\"MissingWorkerIbanNumber\":{\"label\":\"Työntekijän tilinumero puuttuu\",\"description\":\"Työntekijän tiedoista puuttuu tilinumero (IBAN-muodossa).\"},\"InvalidWorkerIbanNumber\":{\"label\":\"Työntekijän tilinumero on virheellinen\",\"description\":\"Työntekijän tiedoissa on virheellinen tilinumero (IBAN-muodossa).\"},\"NegativeRowTotalNotSupported\":{\"description\":\"Rivin yhteenlaskettu summa on negatiivinen. Rivillä ei sallita negatiivista summaa.\",\"label\":\"Rivillä ei sallita negatiivista summaa\"},\"MissingWorkerContactStreet\":{\"description\":\"Työntekijän osoitetiedot ovat pakollisia, jos työntekijällä on keinotekoinen henkilötunnus. Keinotekoisen henkilötunnuksen loppuosa alkaa numerolla 9.\",\"label\":\"Työntekijän osoitteen katuosoite puuttuu\"},\"MissingWorkerContactCity\":{\"description\":\"Työntekijän osoitetiedot ovat pakollisia, jos työntekijällä on keinotekoinen henkilötunnus. Keinotekoisen henkilötunnuksen loppuosa alkaa numerolla 9.\",\"label\":\"Työntekijän osoitteen postitoimipaikka puuttuu\"},\"MissingWorkerContactPostalCode\":{\"description\":\"Työntekijän osoitetiedot ovat pakollisia, jos työntekijällä on keinotekoinen henkilötunnus. Keinotekoisen henkilötunnuksen loppuosa alkaa numerolla 9.\",\"label\":\"Työntekijän osoitteen postinumero puuttuu\"},\"MissingEmployerContactStreet\":{\"description\":\"Työnantajan osoite vaaditaan tulorekisterin palkkatietoilmoitukseen. Lisää osoite asetuksissa ohjatun toiminnon kautta (vaatii nimenkirjoitusoikeudellisen henkilön pankkitunnukset) tai ilmoita osoite asiakaspalvelulle sähköpostitse osoitteeseen aspa@palkkaus.fi.\",\"label\":\"Työnantajan osoitteen katuosoite puuttuu\"},\"MissingEmployerContactCity\":{\"description\":\"Työnantajan osoite vaaditaan tulorekisterin palkkatietoilmoitukseen. Lisää osoite asetuksissa ohjatun toiminnon kautta (vaatii nimenkirjoitusoikeudellisen henkilön pankkitunnukset) tai ilmoita osoite asiakaspalvelulle sähköpostitse osoitteeseen aspa@palkkaus.fi.\",\"label\":\"Työnantajan osoitteen postitoimipaikka puuttuu\"},\"MissingEmployerContactPostalCode\":{\"description\":\"Työnantajan osoite vaaditaan tulorekisterin palkkatietoilmoitukseen. Lisää osoite asetuksissa ohjatun toiminnon kautta (vaatii nimenkirjoitusoikeudellisen henkilön pankkitunnukset) tai ilmoita osoite asiakaspalvelulle sähköpostitse osoitteeseen aspa@palkkaus.fi.\",\"label\":\"Työnantajan osoitteen postinumero puuttuu\"},\"MissingWorker\":{\"label\":\"Laskelmalta puuttuu työntekijä\"},\"MissingWorkerFirstName\":{\"label\":\"Työntekijän etunimi puuttuu\"},\"MissingWorkerLastName\":{\"label\":\"Työntekijän sukunimi puuttuu\"},\"MissingWorkerSocialSecurityNumber\":{\"label\":\"Työntekijän henkilötunnus puuttuu\"},\"MissingWorkerSocialSecurityNumber_InTest\":{\"label\":\"Työntekijän henkilötunnus puuttuu. Testissä voit käyttää tarkistusnumerona tähteä ('*')\"},\"InvalidWorkerSocialSecurityNumber\":{\"label\":\"Työntekijän henkilötunnus on virheellinen\"},\"InvalidWorkerSocialSecurityNumber_InTest\":{\"label\":\"Työntekijän henkilötunnus on virheellinen. Testissä voit käyttää tarkistusnumerona tähteä ('*')\"},\"InvalidCarBenefitRow\":{\"label\":\"Autoedusta puuttuu auton ikäryhmä ja/tai autoedun tyyppi\"},\"InvalidCarBenefitEmissionValues\":{\"label\":\"Auton päästöarvon tulee olla 0 - 100 (vuosina 2022-2025) ja 0 (vuodesta 2026 eteenpäin)\"},\"InvalidRemunerationRow\":{\"label\":\"Kertaluontoisen palkkion tulolaji puuttuu\"},\"InvalidPaidSickLeaveRow\":{\"label\":\"Palkallisen sairauspoissaolon laji puuttuu\"},\"InvalidTrainingRow\":{\"label\":\"Koulutusajan palkan laji puuttuu\"},\"SalaryDateInPast\":{\"label\":\"Palkkapäivä on menneisyydessä ja palkka käsitellään takautuvana palkkana\",\"description\":\"Takautuvan palkan työnantajasuoritusten (vero) ja työeläkkeen määrät ovat arvioita. Todellinen määrä voi poiketa arviosta. Takautuvan palkan eriä (nettopalkka, työnantajasuoritukset (vero) ja työeläkkeet ) ei voi maksaa asiakasvaratilin kautta, vaan työnantajan pitää maksaa ne suoraan itse. Palkkatietoilmoitus lähetetään myös takautuvasta palkasta Tulorekisteriin, mutta menneisyydessä oleva palkkapäivä voi aiheuttaa myöhästymismaksun, jonka Tulorekisteri perii työnantajalta.\"},\"MissingSalaryDate\":{\"label\":\"Vuodenvaihteesta johtuen palkkapäivän valinta on tilapäisesti pakollinen laskelmalle\",\"description\":\"Vuodenvaihteesta johtuen palkkapäivän valinta on tilapäisesti pakollinen laskelmalle, jotta palkka kirjataan oikealle vuodelle ja sivukulujen laskenta menee oikein. Valitse palkkapäivä laskelmalle sen mukaan mille vuodelle haluat palkat kirjattavan työntekijän verotukseen. Ole tarvittaessa yhteydessä asiakaspalveluun, jos tarvitset apua palkkapäivän määrittämisessä.\"},\"MissingRequiredSalaryDate\":{\"label\":\"Palkkapäivää  ei ole valittu\",\"description\":\"Palkkapäivää ei ole valittu. Valitse palkkalaskelmalle palkkapäivä. Jos käytät palkkalistaa, valitse palkkalistalle palkkapäivä.\"},\"MissingRequiredWorkingPeriod\":{\"label\":\"Palkkakautta ei ole valittu\",\"description\":\"Palkkakautta ei ole valittu. Valitse palkkalaskelmalle palkkakausi. Jos käytät palkkalistaa, valitse palkkalistalle palkkakausi.\"},\"SalaryDateConstraint\":{\"label\":\"Nettopalkka ei välttämättä ehdi työntekijän tilille laskelmalle valittuna palkkapäivänä\",\"description\":\"Huomaathan, että nettopalkka ei välttämättä ehdi työntekijän tilille laskelmalle valittuna palkkapäivänä. Voit kuitenkin poikkeuksellisesti vuodenvaihteessa valita kyseisen palkkapäivän, jos haluat palkan kohdistuvan työntekijän verotuksessa tälle vuodelle.  Nettopalkka tilitetään työntekijälle pankkien aikataulujen mukaisesti. Ole tarvittaessa yhteydessä asiakaspalveluun, jos tarvitset apua palkkapäivän määrittämisessä.\"},\"SalaryDateChanged\":{\"label\":\"Laskelman/palkkalistan palkkapäivä on muuttunut.\",\"description\":\"Tarkista laskelman/palkkalistan palkkapäivä ja tallenna.\"},\"InvalidCompensationRow\":{\"label\":\"Palkkalaskelma voi sisältää Työkorvauksen vain siinä tapauksessa, että työsuhdetyyppinä/eläketietona on Työkorvaus.\",\"description\":\"Huomioithan että työkorvausta ei saa maksaa työsuhteessa olevalle työntekijälle! Tarkista työntekijän tiedoista Työsuhde-valinta ennen palkan maksamista tai valitse toinen palkkalaji.\"},\"InvalidRowForCompensation\":{\"label\":\"Työsuhdetyyppinä/eläketietona on Työkorvaus, jolloin laskelmalla voi olla vain tulolajeja 336 Työkorvaus, 357 Yleishyödyllisen yhteisön maksama kilometrikorvaus  tai 358 Yleishyödyllisen yhteisön maksama päiväraha.\",\"description\":\"Päivitä työntekijän Työsuhde-valinta tai vaihda palkkarivi Työkorvaus-palkkalajiksi. \"},\"InvalidRowWhenCompensationRow\":{\"label\":\"Työkorvauksen sisältämällä palkkalaskelmalla ei voi olla tulolajeja 311 Kilometrikorvaus tai 331 Päiväraha.\",\"description\":\"Työkorvauksen yhteydessä maksetut kustannusten korvaukset eivät ole verovapaita ja ne tulee kirjata Työkorvaus-palkkalajilla.\"},\"InvalidBenefitDeduction\":{\"label\":\"Muista luontoiseduista peritty korvaus ei voi olla suurempi kuin luontoisetujen kokonaismäärä.\"},\"InvalidTaxAtSourceRow\":{\"label\":\"Lähdeveron käyttö edellyttää työsuhteen tyyppiä Ulkomainen työntekijä (Suomessa)\",\"description\":\"Lähdeverokorttia voi tyypillisesti käyttää vain, jos työntekijä on rajoitetusti verovelvollisen (asuinvaltio muu kuin Suomi). Tee tarvittavat muutokset Työsuhde-välilehden alta valitsemalla työsuhteen muodoksi Ulkomaalainen työntekijä tai käytä tavallista verokorttia. Ohjelma ei tue vielä tapausta suomalainen ulkomailla.\"},\"CalculationCorrectionNewEpr\":{\"label\":\"Uusi palkkatietoilmoitus pitää lähettää Tulorekisteriin\",\"description\":\"Palkkalaskelmasta ei ole tehty palkkatietoilmoitusta tai lähetetty palkkatietoilmoitus on peruttu. Lähetä uusi palkkatietoilmoitus.\"},\"CalculationCorrectionReplaceEpr\":{\"label\":\"Korvaava palkkatietoilmoitus pitää lähettää Tulorekisteriin\",\"description\":\"Palkkalaskelman muutokset edellyttävät korvaavan palkkatietoilmoituksen lähettämistä Tulorekisteriin.\"},\"CalculationCorrectionReNewEpr\":{\"label\":\"Palkkatietoilmoitus pitää mitätöidä ja lähettää uusi palkkatietoilmoitus Tulorekisteriin\",\"description\":\"Palkkalaskelman muutokset edellyttävät jo lähetetyn palkkatietoilmoituksen mitätöimistä ja uuden palkkatietoilmoituksen lähettämistä Tulorekisteriin.\"},\"CalculationCorrectionKeepEpr\":{\"label\":\"Tulorekisterissä oleva palkkatietoilmoitus vastaa palkkalaskelman tietoja\",\"description\":\"Palkkalaskelman muutokset eivät sisällä Tulorekisteriin ilmoitettavia tietoja.\"},\"InvalidReferenceNumberInForeclosureRow\":{\"label\":\"Ulosmittauksen viitenumero on virheellinen\",\"description\":\"Ulosmittauksen viitenumero on virheellinen. Tarkista viitenumero ja korjaa se.\"},\"InvalidReferenceNumberInUnionPaymentRow\":{\"label\":\"AY-jäsenmaksun viitenumero on virheellinen\",\"description\":\"AY-jäsenmaksun viitenumero on virheellinen. Tarkista viitenumero ja korjaa se.\"},\"January2026Taxcard\":{\"label\":\"Työntekijän verokortin voimassaolo on päättynyt. Lisää vuoden 2026 verokortti työntekijän tietoihin.\",\"description\":\"Työntekijän verokortin voimassaolo on päättynyt. Lisää vuoden 2026 verokortti työntekijän tietoihin. Voit halutessasi käyttää automaattista verokortin hakua. Jos haluat käyttää vuoden 2025 verokorttia, voit ohittaa tämän virheilmoituksen.\"},\"InvalidIrIncomeTypeDailyAllowanceRow\":{\"label\":\"Päivärahan tyyppi puuttuu\"}},\"Payroll\":{\"Calc\":{\"EmailAddress\":{\"label\":\"Sähköposti on virheellinen\"},\"FirstNameNotEmpty\":{\"label\":\"Työntekijän etunimi puuttuu\"},\"IbanInvalid\":{\"label\":\"Tilinumero on virheellinen (IBAN-muoto)\"},\"IbanNotEmpty\":{\"label\":\"Tilinumero puuttuu\"},\"InvalidStatusForPayroll\":{\"label\":\"Palkkalistan laskelmalla väärä status.\"},\"LastNameNotEmpty\":{\"label\":\"Työntekijän sukunimi puuttuu\"},\"PayrollIdConflict\":{\"label\":\"Laskelman palkkalista-tunnus on virheellinen.\"},\"SocialSecurityNumber_InTest\":{\"label\":\"Henkilötunnus on virheellinen. Testissä voit käyttää tarkistusnumerona tähteä ('*')\"},\"SocialSecurityNumber\":{\"label\":\"Henkilötunnus on virheellinen.\"},\"TaxCardType\":{\"label\":\"Verokortti puuttuu tai tyyppiä ei ole määritetty.\"},\"TaxPercent\":{\"label\":\"Veroprosenttia ei ole määritetty\"},\"TelephoneOrEmailNotEmpty\":{\"label\":\"Anna jompikumpi tai molemmat yhteystiedot (puhelinnumero ja sähköposti).\"},\"TotalGreaterThan0\":{\"label\":\"Palkkalaskelman summa on nolla\"}},\"NoCalculations\":{\"label\":\"Ei yhtään laskelmaa.\"}},\"SharedTaxcard\":{\"description\":\"Työntekijäsi on jakanut uuden verokortin ja toivoo, että sitä käytetään palkanmaksuun. Tarkista ja hyväksy verokortti palkkalaskurin ruudun 1. Työntekijä kautta ennen palkan maksamista, jotta ennakonpidätys päivittyy laskelmalle oikein.\",\"label\":\"Uusi jaettu verokortti!\"},\"Usecases\":{\"noKind\":\"Rivin tyyppi puuttuu tai ei ole tuettu\",\"noIrIncomeType\":\"Tulolaji puuttuu tai ei ole tuettu.\",\"negativeRow\":\"Hinta ei voi olla negatiivinen: Tulorekisteriin ei voi ilmoittaa miinusmerkkisiä arvoja.\",\"negativeAmount\":\"Määrä ei voi olla negatiivinen: Tulorekisteriin ei voi ilmoittaa miinusmerkkisiä arvoja.\",\"carBenefit\":{\"default\":\"Pakollisia tietoja puuttuu! Autoetu lasketaan todennäköisesti väärin.\",\"kilometerBased\":\", kilometripohjainen laskenta:\",\"deduction\":\"Vähennys:\",\"noDeduction\":\". Ei vähennystä palkasta.\",\"limitedCarBenefit\":\"Auton käyttöetu, \",\"fullCarBenefit\":\"Vapaa autoetu, \",\"noTypeSelected\":\"Autoetu, ei tyyppivalintaa, \",\"invalidEmissionValues\":\"Auton päästöarvon tulee olla 0 - 100\"},\"compensation\":{\"noCompensationData\":\"Korvauksen laji puuttuu.\",\"compensation\":\"Lisä \",\"compensation2\":\"/ tunti, lisä yhteensä \"},\"expensesValidation\":{\"noVat\":\"Arvonlisäveroa ei määritetty\",\"vat0\":\"Arvonlisävero 0 % - Nollaverokanta\",\"vat10\":\"Arvonlisävero 10 % - Kirjat, kulttuuri, henkilökuljetus ja majoitus\",\"vat135\":\"Arvonlisävero 13,5 % - Elintarvikkeet, ravintola- ja ateriapalvelut\",\"vat14\":\"Arvonlisävero 14 % - Elintarvikkeet, ravintola- ja ateriapalvelut\",\"vat24\":\"Arvonlisävero 24 % - Yleinen verokanta\",\"vat255\":\"Arvonlisävero 25,5 % - Yleinen verokanta\",\"vatCustom\":\"Arvonlisävero \"},\"mealBenefit\":{\"default\":\"verotusarvo\",\"deduction\":\"vähennys palkasta\",\"taxValueDeduction\":\"vähennys palkasta vastaa verotusarvoa\",\"allowance\":\"arvo\",\"undefined\":\"HUOM: Ravintoedun tyyppiä ei ole määritetty. Oletus: verotusarvo, ei korvausta työntekijän palkasta.\"},\"subsidisedCommute\":{\"singleDeduction\":\"Työsuhdematkalippu, vähennys palkasta:\",\"periodicalDeduction\":\"Työsuhdematkalippu, vähennys palkasta:\",\"periodicalDeduction2\":\" jaettuna \",\"periodicalDeduction3\":\" osaan.\",\"noDeduction\":\"Työsuhdematkalippu, ei vähennystä palkasta.\"},\"bicycleBenefit\":{\"singleDeduction\":\"Polkupyöräetu, vähennys palkasta:\",\"periodicalDeduction\":\"Polkupyöräetu, vähennys palkasta:\",\"periodicalDeduction2\":\" jaettuna \",\"periodicalDeduction3\":\" osaan.\",\"noDeduction\":\"Polkupyöräetu, ei vähennystä palkasta.\"},\"nonProfitOrg\":{\"noKind\":\"HUOM: Määritä korvauksen tyyppi. Oletuksena käytetään kilometrikorvausta.\",\"default\":\"Yleishyödyllisen yhteisön \",\"accomodationAllowance\":\"Majoittumiskorvaus\",\"kilometerAllowance\":\"Kilometrikorvaus\",\"dailyAllowance\":\"Päiväraha\"},\"dailyAllowance\":\"Kotimaan kokopäiväraha\",\"foreclosure\":{\"default\":\"Ulosottosumma päivitetään automaattisesti, työnantaja tilittää maksun itse.\",\"noPrice\":\"HUOM: Ulosoton summaa ei ole annettu.\"},\"totalWorkerPayment\":{\"default\":\" lasketaan annetun summan \",\"default2\":\" perusteella. Summan sisältämät erät: \"},\"unionPayment\":{\"fixed\":\"Kiinteä AY-jäsenmaksun määrä. Työnantaja tilittää maksun itse.\",\"fixedError\":\"HUOM: Jäsenmaksua ei ole määritetty.\",\"percentage\":\"AY-jäsenmaksu on %-osuus palkasta, palkkasumma päivitetään automaattisesti. Työnantaja tilittää maksun itse.\",\"percentageError\":\"HUOM: Jäsenmaksu-%:ia ei ole määritetty.\",\"raksa\":\"AY-jäsenmaksu on %-osuus palkasta, palkkasumma päivitetään automaattisesti. Työnantaja tilittää maksun itse.\",\"raksaError\":\"HUOM: Jäsenmaksu-%:ia ei ole määritetty.\",\"default\":\"Tuntematon AY-jäsenmaksun tyyppi.\"}},\"WorktimeImport\":{\"EmploymentNotResolved\":{\"label\":\"Työsuhdetta ei löydy\"},\"InvalidPersonalId\":{\"label\":\"Henkilötunnuksen muoto on väärä\"}},\"ValidationErrors\":{\"unknown\":\"Validointivirhe: {{error}}\",\"maxlength\":\"Pituus enintään {{maxlength}} merkkiä\",\"minlength\":\"Pituus vähintään {{minlength}} merkkiä\",\"required\":\"Kenttä on pakollinen\",\"sxyCompanyIdFi\":\"Y-tunnuksen muoto on väärä\",\"sxyCurrency\":\"Rahamäärän muoto on väärä\",\"sxyEmail\":\"Sähköpostin muoto on väärä\",\"sxyIban\":\"TIlinumeron (IBAN) muoto on väärä\",\"sxyInteger\":\"Kentän pitää olla kokonaisluku\",\"sxyMobilePhone\":\"Puhelinnumeron muoto on väärä\",\"sxyNumber\":\"Kentän pitää olla numero\",\"sxyBankReferenceFi\":\"Tarkista viitenumero\",\"sxyPensionContractNumber\":\"Tarkista sopimusnumero. Jos sinulla ei ole työntekijöiden työeläkevakuutusta (TyEL), voit valita Ei yhtiötä. YEL-sopimuksen numeroa ei tarvitse ilmoittaa.\",\"sxyPersonalIdFi\":\"Henkilötunnuksen muoto on väärä\",\"sxyOfficialIdFi\":\"Y-tunnuksen tai henkilötunnuksen muoto on väärä\",\"sxyPostalCodeFi\":\"Postinumeron muoto on väärä\",\"sxySmsVerificationCode\":\"Tarkista varmennuskoodi\",\"sxyTaxPercent\":\"Veroprosentin muoto on väärä\",\"sxyTemporaryPensionContractNumber\":\"Syötit tilapäisen sopimuksen numeron.\",\"patternMismatch\":\"Anna arvo pyydetyssä muodossa\",\"tooLong\":\"Arvo on liian pitkä\",\"tooShort\":\"Arvo on liian lyhyt\",\"rangeOverflow\":\"Arvo on liian suuri\",\"rangeUnderflow\":\"Arvo on liian pieni\",\"typeMismatch\":\"Anna kelvollinen arvo\"}}}}; export default fi;","import type { Config } from \"./Config\";\r\n\r\n/** Extends the Config with logic */\r\nexport class ConfigLogic implements Config {\r\n\r\n  /** The base address of the Salaxy http API server, e.g. https://secure.salaxy.com */\r\n  apiServer?: string | null;\r\n\r\n  /** The base address of the Palkkaus web site, e.g. https://www.palkkaus.fi */\r\n  wwwServer?: string | null;\r\n\r\n  /** A flag indicating if the current configuration is for test environment only. If true, the site is for testing only. */\r\n  isTestData?: boolean | null;\r\n\r\n  /** A flag indicating if the site sets a Salaxy cookie which persists over web sessions. If true, the cookie will be created. */\r\n  useCookie?: boolean | null;\r\n\r\n  /** A flag indicating if the API site uses credentials. If true, the credentials will be used. */\r\n  useCredentials?: boolean | null;\r\n\r\n  /** InstrumentationKey for Application Insight */\r\n  instrumentationKey?: string | null;\r\n\r\n  /** Partner id for site. This is required for example for onboarding with partner specific style. */\r\n  partnerSite?: string | null;\r\n\r\n  /** Pro server site address. e.g. https://pro.palkkaus.fi */\r\n  proServer?: string | null;\r\n\r\n  /** Report server url */\r\n  reportServer?: string | null;\r\n\r\n  /** Application id for invoicing. */\r\n  applicationId?: string | null;\r\n\r\n  /** The base address of the integrations server, e.g. https://integrations.salaxy.com */\r\n  integrationsServer?: string | null;\r\n\r\n  /** The base address of the code editor server, e.g. https://code-editor.salaxy.com */\r\n  codeEditor?: string | null;\r\n\r\n  /**\r\n   * Creates a new ConfigLogic based on a Config in env file.\r\n   * @param config Raw config in env file.\r\n   */\r\n  constructor(config: Config) {\r\n    Object.assign(this, config);\r\n  }\r\n\r\n  /** Gets the type of the environment. */\r\n  public getEnv(): \"local\" | \"test\" | \"demo\" | \"prod\" | \"rc\" {\r\n    if ((this.apiServer?.indexOf(\"localhost\") ?? -1) > -1) {\r\n      return \"local\";\r\n    }\r\n    if ((this.apiServer?.indexOf(\"rc\") ?? -1) > -1) {\r\n      return \"rc\";\r\n    }\r\n    if ((this.integrationsServer?.indexOf(\"test\") ?? -1) > -1) {\r\n      return \"test\";\r\n    }\r\n\r\n    if (!this.isTestData) {\r\n      return \"prod\";\r\n    }\r\n    return \"demo\";\r\n  }\r\n\r\n  /** Gets the server address for the Omapalkka service based on environment. */\r\n  public getOmapalkkaServer(): string {\r\n    switch (this.getEnv()) {\r\n      case \"prod\":\r\n        return \"https://www.omapalkka.fi\";\r\n      case \"local\":\r\n        return \"http://localhost:3000\";\r\n      case \"test\":\r\n        return \"https://test-www.omapalkka.fi\";\r\n      case \"rc\":\r\n      case \"demo\":\r\n      default:\r\n        return \"https://demo-www.omapalkka.fi\";\r\n    }\r\n  }\r\n\r\n  /** Gets the API server address for the Omapalkka service based on environment. */\r\n  public getOmapalkkaApiServer(): string {\r\n    switch (this.getEnv()) {\r\n      case \"prod\":\r\n        return \"https://secure.omapalkka.fi\";\r\n      case \"local\":\r\n        return \"https://localhost:7270\";\r\n      case \"test\":\r\n        return \"https://test-secure.omapalkka.fi\";\r\n      case \"rc\":\r\n      case \"demo\":\r\n      default:\r\n        return \"https://demo-secure.omapalkka.fi\";\r\n    }\r\n  }\r\n\r\n}","import { Config } from \"./Config\";\r\nimport { ConfigLogic } from \"./ConfigLogic\";\r\n\r\n/** This file assigns config to global salaxy namespace. */\r\ndeclare const globalThis;\r\n/** This file assigns config to global salaxy namespace. */\r\ndeclare const global;\r\n\r\n/**\r\n * Class for reading Environment specific configuration for Salaxy API's and JavaScript in general\r\n */\r\nexport class Configs {\r\n\r\n  private static get defaultConfig() {\r\n    return {\r\n      wwwServer: \"https://test.palkkaus.fi\",\r\n      apiServer: \"https://test-api.salaxy.com\",\r\n      proServer: \"https://demo-pro.palkkaus.fi/server\",\r\n      reportServer: \"https://test-reports.salaxy.com\",\r\n      integrationsServer: \"https://test-integrations.salaxy.com\",\r\n      codeEditor: \"https://test-code-editor.salaxy.com\",\r\n      isTestData: true,\r\n      useCookie: true,\r\n    };\r\n  }\r\n\r\n  private static getGlobalConfig(): Config | null {\r\n    const g = this.getGlobal();\r\n    return (g.salaxy && g.salaxy.config) ? g.salaxy.config : null;\r\n  }\r\n\r\n  private static setGlobalConfig(config: Config) {\r\n    const g = this.getGlobal();\r\n    g.salaxy = g.salaxy || {};\r\n    g.salaxy.config = config;\r\n  }\r\n\r\n  private static getGlobal(): any {\r\n    if (typeof globalThis !== \"undefined\") { return globalThis; }\r\n    if (typeof self !== \"undefined\") { return self; }\r\n    if (typeof window !== \"undefined\") { return window; }\r\n    if (typeof global !== \"undefined\") { return global; }\r\n    throw new Error(\"unable to locate global object\");\r\n  }\r\n\r\n  /**\r\n   * Returns current configuration.\r\n   * If global (salaxy.config) configuration is null, default config (demo) is returned\r\n   */\r\n  public static get current(): ConfigLogic {\r\n    return new ConfigLogic(this.getGlobalConfig() ?? this.defaultConfig);\r\n  }\r\n\r\n  /**\r\n   * Set current configuration.\r\n   */\r\n  public static set current(config: Config) {\r\n    this.setGlobalConfig(config);\r\n  }\r\n\r\n  /** Get global, globalThis object */\r\n  public static get global(): any {\r\n    return this.getGlobal();\r\n  }\r\n}\r\n","/**\r\n * Helpers for performing operations with objects\r\n */\r\nexport class Objects {\r\n\r\n\r\n  /**\r\n   * Returns true if an object has a property with specified name.\r\n   * Using hasOwnProperty in a safe, easy and concise way.\r\n   * @param obj Object to check\r\n   * @param key String key to look for.\r\n   */\r\n  public static has(obj: any, key: string): boolean {\r\n    if (!obj) {\r\n      return false;\r\n    }\r\n    return Object.prototype.hasOwnProperty.call(obj, key);\r\n  }\r\n\r\n  /**\r\n   * Gets a property based on multi-level property path.\r\n   * Null / undefined at any level will return null as in AngularJS expressions.\r\n   * @param obj Object from which to fetch a property.\r\n   * @param propertyPath Path to the property to fetch.\r\n   */\r\n  public static getProperty(obj: any, propertyPath: string): any {\r\n    if (!propertyPath || !obj) {\r\n      return null;\r\n    }\r\n    const arr = propertyPath.split(/\\.|\\[/).map((key) => {\r\n      return key.endsWith(\"]\") ? parseInt(key.substring(0, key.length - 1)) : key;\r\n    });\r\n    while (arr.length) {\r\n      const key: any = arr.shift();\r\n      if (key === undefined) {\r\n        return null;\r\n      }\r\n      obj = obj[key as keyof typeof obj];\r\n      if (!obj && arr.length) {\r\n        return null;\r\n      }\r\n    }\r\n    return obj;\r\n  }\r\n\r\n  /**\r\n   * Sets a property of an object based on property path.\r\n   * Will create the entire path even if the intermittent objects do not exist.\r\n   * @param obj Object whose property should be set.\r\n   * @param propertyPath Dot-delimited property path to the property that should be set.\r\n   * @param value The value that should be set.\r\n   * @returns True if the property is set. Value is not set if there is no propertyPath/obj or\r\n   * if the value is already set to new value (currently strict equality check \"===\",\r\n   * but may be changed without it being a breaking change).\r\n   */\r\n  public static setProperty(obj: any, propertyPath: string, value: any): boolean {\r\n    if (!propertyPath || !obj) {\r\n      return false;\r\n    }\r\n    const arr = propertyPath.split(/\\.|\\[/).map((key) => {\r\n      return key.endsWith(\"]\") ? parseInt(key.substring(0, key.length - 1)) : key;\r\n    });\r\n    while (arr.length > 1) {\r\n      const key = arr.shift();\r\n      if (key === undefined) {\r\n        return false;\r\n      }\r\n      if (!obj[key as keyof typeof obj]) {\r\n        if (Number.isInteger(arr[0])) {\r\n          obj[key as keyof typeof obj] = []; // Next key is a number => This should be an array.\r\n        } else {\r\n          obj[key as keyof typeof obj] = {};\r\n        }\r\n      }\r\n      obj = obj[key as keyof typeof obj];\r\n    }\r\n    const lastKey  = arr[0];\r\n    if (obj[lastKey] === undefined && value === undefined) {\r\n      return false; // Do not set to undefined if undefined\r\n    }\r\n    if (obj[lastKey] === value) {\r\n      // TODO: We might need to consider other equality operators here (e.g. for objects).\r\n      return false;\r\n    }\r\n    obj[lastKey] = value;\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Uses JSON Serialization / Deserialization to deep clone an object.\r\n   * @param value Object to clone\r\n   * @returns A cloned object.\r\n   */\r\n  public static copy<T>(value: T): T {\r\n    return JSON.parse(JSON.stringify(value, (k, v) => v === undefined ? null : v)) as T;\r\n  }\r\n\r\n  /**\r\n   * Extends one object with another using Intersection types.\r\n   * https://www.typescriptlang.org/docs/handbook/advanced-types.html\r\n   * @param first First object.\r\n   * @param second Second object.\r\n   */\r\n  public static extend<T, U>(first: T, second: U): T & U {\r\n    const result = {} as T & U;\r\n    for (const id in first) {\r\n      if (Objects.has(first, id)) {\r\n        (result as any)[id] = (first as any)[id];\r\n      }\r\n    }\r\n    for (const id in second) {\r\n      if (Objects.has(second, id) && !Objects.has(result, id)) {\r\n        (result as any)[id] = (second as any)[id];\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n   /**\r\n    * Compares objects a and b.\r\n    * Returns true if the objects are equal using value-to-value comparison.\r\n    *\r\n    * @param a - Any object.\r\n    * @param b - Any object to compare with.\r\n    */\r\n  public static equal(a: any, b: any): boolean {\r\n    if (a === b) {\r\n      return true;\r\n    }\r\n\r\n    if (a && b && typeof a === \"object\" && typeof b === \"object\") {\r\n      const arrA = Array.isArray(a);\r\n      const arrB = Array.isArray(b);\r\n      let i: number;\r\n      let length: number;\r\n      let key: string;\r\n\r\n      if (arrA && arrB) {\r\n        // both are arrays\r\n        length = a.length;\r\n        if (length !== b.length) {\r\n          // different length\r\n          return false;\r\n        }\r\n        for (i = length; i-- !== 0;) {\r\n          if (!this.equal(a[i], b[i])) {\r\n            // members are not equal\r\n            return false;\r\n          }\r\n        }\r\n        // all members are equal\r\n        return true;\r\n      }\r\n\r\n      if (arrA !== arrB) {\r\n        // either a or be is an array, not both\r\n        return false;\r\n      }\r\n\r\n      const dateA = a instanceof Date;\r\n      const dateB = b instanceof Date;\r\n      if (dateA !== dateB) {\r\n        // either a or b is a date, not both\r\n        return false;\r\n      }\r\n      if (dateA && dateB) {\r\n        // both are dates, test times equality\r\n        return a.getTime() === b.getTime();\r\n      }\r\n\r\n      const regexpA = a instanceof RegExp;\r\n      const regexpB = b instanceof RegExp;\r\n      if (regexpA !== regexpB) {\r\n        // either a or b is RegExp, not both\r\n        return false;\r\n      }\r\n      if (regexpA && regexpB) {\r\n        // both are RegExp, test string equality\r\n        return a.toString() === b.toString();\r\n      }\r\n\r\n      const keys = Object.keys(a);\r\n      length = keys.length;\r\n\r\n      if (length !== Object.keys(b).length) {\r\n        // a and b have different number of properties\r\n        return false;\r\n      }\r\n\r\n      for (i = length; i-- !== 0;) {\r\n        if (!Object.prototype.hasOwnProperty.call(b, keys[i])) {\r\n          // b does not have the same properties as a\r\n          return false;\r\n        }\r\n      }\r\n\r\n      for (i = length; i-- !== 0;) {\r\n        key = keys[i];\r\n        if (!this.equal(a[key], b[key])) {\r\n          // property has not the same value\r\n          return false;\r\n        }\r\n      }\r\n\r\n      // both objects are equal\r\n      return true;\r\n    }\r\n\r\n    // return false, except both are NaN\r\n    return a !== a && b !== b;\r\n  }\r\n}\r\n","import { fi as defaultDictionary } from \"@salaxy/i18n\";\r\n\r\nimport { Configs } from \"./Configs\";\r\nimport { Objects } from \"../util/Objects\";\r\nimport { DictionaryLang } from \"./model\";\r\n\r\n/** Dictionary with all the known languages. */\r\nexport interface TranslationsDictionary {\r\n  /** Finnish: The primary and source language that comes as part of the @salaxy/core library. */\r\n  fi: DictionaryLang,\r\n  /** English */\r\n  en: DictionaryLang,\r\n  /** Swedish */\r\n  sv: DictionaryLang,\r\n}\r\n\r\n/**\r\n * Provides universal i18n methods: This is an instance class that can be instanciated for editing etc.\r\n * Use Translations static class to access the singleton instance attached to global / window:\r\n * This is woulc be the most common usecase.\r\n */\r\nexport class TranslationsInstance {\r\n\r\n  /** The path to the folder that contains the locales files (i18n). */\r\n  public localesPath = \"locales\";\r\n\r\n  /*\r\n   * Sets the function which is responsible for loading a dictionary for the given language.\r\n   * This is an alternative to the default locales path functionality.\r\n  */\r\n  public localesFunc: (lang: string) => Promise<DictionaryLang>;\r\n\r\n  /** Current language. */\r\n  private lang: string;\r\n\r\n  /** Assign the dictionary to static property that may be updated by the environment. */\r\n  private dictionary : TranslationsDictionary;\r\n\r\n\r\n  /** Tracking for languages that are already loaded to prevent unnecessary reloads. */\r\n  private loadedLanguages: string[] = [];\r\n\r\n  /**\r\n   * Creates a new TranslationsInstance\r\n   * @param dict Optional dictionary object that contains the translations.\r\n   * The default Finnish dictionary is added in any case (for fallback) unless the Config has the\r\n   * noCache attribute set (used in dev-mode to get the templates and i18n directly from files instead of dist).\r\n   */\r\n  constructor(dict = null) {\r\n    this.dictionary = dict || {} as TranslationsDictionary;\r\n    this.dictionary.fi = this.dictionary.fi || defaultDictionary;\r\n    this.dictionary.sv = this.dictionary.sv || {};\r\n    this.dictionary.en = this.dictionary.en || {};\r\n    if (this.dictionary.fi.SALAXY) {\r\n      this.loadedLanguages.push(\"fi\");\r\n      this.lang = \"fi\";\r\n    }\r\n    if (this.dictionary.sv.SALAXY) {\r\n      this.loadedLanguages.push(\"sv\");\r\n    }\r\n    if (this.dictionary.en.SALAXY) {\r\n      this.loadedLanguages.push(\"en\");\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Translates given key to the current language.\r\n   * @param key - Key for the text.\r\n   * @param interpolateParams - Variables for the interpolation.\r\n   * @param lang Language to fetch. Default is the current language.\r\n   * @param templateOnly If true, will fetch the template directly without the interpolation.\r\n   * @returns The translated value in current/given language, potentially interpolated.\r\n   * If none is found...\r\n   *\r\n   * - If the key does not start with \"SALAXY.\" (plain text, not a key), returns the text as-is.\r\n   * - If the Finnish translation is found, returns it. Prefixed with red exclamation mark in test only.\r\n   * - If fi translation not found, returns the key - always prefixed with red exclamation mark (prod and test).\r\n   */\r\n  public get(key: string, interpolateParams?: any, lang?: string, templateOnly = false): string {\r\n    let template = this.getWithDefault(key, undefined, lang);\r\n\r\n    if (!template && key?.startsWith(\"SALAXY.\")) {\r\n      // Fallback to Finnish, Add exclamation mark in test\r\n      if (lang != \"fi\") {\r\n        template = this.getWithDefault(key, undefined, \"fi\");\r\n      }\r\n      if (!template) {\r\n        const keyPath = key.split(\".\");\r\n        let text = keyPath[keyPath.length - 1];\r\n        if ((text == \"label\" || text == \"description\" || text == \"title\") && keyPath.length > 2) {\r\n          text = keyPath[keyPath.length - 2];\r\n        }\r\n        return \"\\u2757\" + text;\r\n      }\r\n      if (Configs.current?.isTestData) {\r\n        template = \"\\u2757\" + template;\r\n      }\r\n    }\r\n    if (!template) {\r\n      return key;\r\n    }\r\n\r\n    if (templateOnly) {\r\n      return template;\r\n    }\r\n\r\n    // interpolate\r\n    const regex = /\\{\\{\\s*(\\S+)\\s*\\}\\}/g;\r\n\r\n    // array references not supported yet.\r\n    return template.replace(regex, (_unused, varName) => {\r\n      return this.readValue(interpolateParams, varName, \"\");\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Translates given key to the current language with default value.\r\n   * @param key - Key for the text.\r\n   * @param defaultValue - The default value that is returned if the key is not found. Null is the default.\r\n   * @param lang Language to fetch. Default is the current language.\r\n   * @returns The translated value in current language or if none is found the key.\r\n   */\r\n  public getWithDefault(key: string, defaultValue = \"\", lang?: string | null): string {\r\n    if (!key) {\r\n      return defaultValue;\r\n    }\r\n    const value = this.getAny(key, lang);\r\n    if (value && typeof value === \"string\") {\r\n      return value;\r\n    }\r\n    return defaultValue;\r\n  }\r\n\r\n  /**\r\n   * Gets any object (string or dictionary) with the given property path.\r\n   * @param key Key for the text.\r\n   * @param lang Language to fetch. Default is the current language.\r\n   * @returns The object if found using the key, null if none is found.\r\n   */\r\n  public getAny(key: string, lang?: string | null): any {\r\n    if (!key) {\r\n      return null;\r\n    }\r\n    const subKeys = key.split(\".\");\r\n    let value = this.getCurrentDictionary()[lang || this.lang];\r\n    for (const subKey of subKeys) {\r\n      if (Objects.has(value, subKey)) {\r\n        value = value[subKey];\r\n      } else {\r\n        return null;\r\n      }\r\n    }\r\n    return value;\r\n  }\r\n\r\n  /**\r\n   * Loads a language bundle from the server on-demand.\r\n   * The method will check the loadedLanguages collection, so it will load a language only once => Can be called every time the user language changes.\r\n   * This method is designed to fail outside browser. Browser is recognized based on having globalThis.fetch.\r\n   * The default Finnish dictionary is added added from code lib (not http) unless the Config has the\r\n   * noCache attribute set (used in dev-mode to get the templates and i18n directly from files instead of dist).\r\n   * @param lang Language to load.\r\n   */\r\n  public async loadLanguage(lang: string): Promise<void> {\r\n    if (!this.isBrowser()) {\r\n      const msg = \"Language resources can be loaded on-demand only in browser environments!\";\r\n      console.error(msg);\r\n      return Promise.reject(msg);\r\n    }\r\n\r\n    if (!this.dictionary?.[lang]) {\r\n      const msg = `Cannot load the requested language (${lang}), the language is not supported!`;\r\n      console.error(msg);\r\n      return Promise.reject(msg);\r\n    }\r\n\r\n    if (this.loadedLanguages.includes(lang)) {\r\n      return Promise.resolve();\r\n    }\r\n\r\n    if (lang == \"fi\" && !(Configs.current as any)?.noCache) {\r\n      this.loadedLanguages.push(lang);\r\n      this.addDictionary(lang, defaultDictionary);\r\n      return Promise.resolve();\r\n    }\r\n\r\n    const result = await this.fetchLanguage(lang);\r\n    this.loadedLanguages.push(lang);\r\n    this.addDictionary(lang, result);\r\n  }\r\n\r\n  /**\r\n   * Adds a dictionary. Note that adding is really merge: non-existent keys will not be removed.\r\n   * @param lang - ISO language code for the dictionary to be added: fi, en or sv.\r\n   * @param translations - A translations object (json).\r\n   */\r\n  public addDictionary(lang: string, translations: DictionaryLang): void {\r\n    const newDictionary = {};\r\n    newDictionary[lang] = translations;\r\n    this.dictionary = this.mergeDeep(this.dictionary, newDictionary);\r\n  }\r\n\r\n  /**\r\n   * Add all dictionaries from a single language object.\r\n   * Note that adding is really merge: non-existent keys will not be removed.\r\n   * @param translations - A translations object (json).\r\n   * This object must have language codes as first level keys.\r\n   */\r\n  public addDictionaries(translations: {[key: string]: DictionaryLang }): void {\r\n    for (const key in translations) {\r\n      if (Objects.has(translations, key)) {\r\n        this.addDictionary(key, translations[key]);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets a collection of terms (potentially different languages) that can be used in\r\n   * ad-hoc changes of terms or when loading customized texts in service model.\r\n   * @param terms An object with terms in format { [key: string]: string } where key\r\n   * is a full key starting from the language, e.g. \"fi.SALAXY.NG1_Sitemap.home\"\r\n   * and value is always an indidivual text (never an object).\r\n   */\r\n  public setTerms(terms: { [key: string]: string }): void {\r\n    if (!terms) {\r\n      return;\r\n    }\r\n    return Object.keys(terms).forEach((key) => {\r\n      Objects.setProperty(this.dictionary, key, terms[key]);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Sets the Salaxy user interface language.\r\n   * @param lang - One of the supported languages: \"fi\", \"en\" or \"sv\".\r\n   */\r\n  public setLanguage(lang: \"fi\" | \"en\" | \"sv\"): void {\r\n    this.lang = lang;\r\n  }\r\n\r\n  /**\r\n   * Gets the current user interface language\r\n   * @returns One of the supported languages: \"fi\", \"en\" or \"sv\".\r\n   */\r\n  public getLanguage(): \"fi\" | \"en\" | \"sv\" {\r\n    return this.lang as \"fi\" | \"en\" | \"sv\";\r\n  }\r\n\r\n  /** Gets the current core dictionary (all languages). */\r\n  public getCurrentDictionary(): TranslationsDictionary {\r\n    return this.dictionary;\r\n  }\r\n\r\n  /**\r\n   * Loads all languages from server using the locales path.\r\n   * @returns The full dictionary (this is not stored to current dictionary - just fetched).\r\n   */\r\n  public async getBaseDictionary(): Promise<TranslationsDictionary> {\r\n    const promises: any[] = [];\r\n    [\"fi\", \"sv\", \"en\"].forEach(lang => {\r\n      promises.push(this.fetchLanguage(lang));\r\n    });\r\n    const values = await Promise.all(promises);\r\n    const obj: any = {};\r\n    obj[\"fi\"] = values[0];\r\n    obj[\"sv\"] = values[1];\r\n    obj[\"en\"] = values[2];\r\n    return obj;\r\n  }\r\n\r\n  /**\r\n   * Fetches a single language from server language This method fails outside browser.\r\n   * @param lang url param\r\n   * @returns One language as dictionary object (this is not stored to current dictionary - just fetched).\r\n   */\r\n  private async fetchLanguage(lang: string): Promise<DictionaryLang> {\r\n\r\n    if (this.localesFunc) {\r\n      return this.localesFunc(lang);\r\n    }\r\n\r\n    const url = `${this.localesPath}/${lang}.json?t=${new Date().getTime()}`;\r\n    const response = await fetch(url);\r\n    if (response.ok) {\r\n      const data = await response.json();\r\n      // Do checks if necessary.\r\n      return data;\r\n    }\r\n    throw new Error(`Unable to fetch language \"${url}\"`);\r\n  }\r\n\r\n  /**\r\n   * Merges objects.\r\n   * @param objects - Objects to merge.\r\n   */\r\n  private mergeDeep(...objects: any[]) {\r\n    const isObject = (obj: any) => obj && typeof obj === \"object\";\r\n\r\n    return objects.reduce((result, current) => {\r\n      Object.keys(current).forEach((key) => {\r\n        const currentVal = current[key];\r\n        const resultVal = result[key];\r\n\r\n        if (Array.isArray(resultVal) && Array.isArray(currentVal)) {\r\n          result[key] = resultVal.concat(...currentVal);\r\n        } else if (isObject(resultVal) && isObject(currentVal)) {\r\n          result[key] = this.mergeDeep(resultVal, currentVal);\r\n        } else {\r\n          result[key] = currentVal;\r\n        }\r\n      });\r\n      return result;\r\n    }, {});\r\n  }\r\n\r\n  private readValue(object: any, path: string, defaultValue: any): any {\r\n    if (!object || !path) {\r\n      return defaultValue;\r\n    }\r\n    const subKeys = path.split(\".\");\r\n    let value = object;\r\n    for (const subKey of subKeys) {\r\n      if (Objects.has(value, subKey)) {\r\n        value = value[subKey];\r\n      } else {\r\n        return defaultValue;\r\n      }\r\n    }\r\n    return value;\r\n  }\r\n\r\n  private isBrowser(): boolean {\r\n    return typeof globalThis.fetch !== \"undefined\";\r\n  }\r\n\r\n}\r\n","import { DictionaryLang } from \"./model\";\r\nimport { TranslationsInstance } from \"./TranslationsInstance\";\r\n\r\n/**\r\n * Provides universal i18n methods (language versions) as a singleton service in global scope (browser window or NPM thread).\r\n */\r\nexport class Translations {\r\n\r\n  /**\r\n   * Gets the singleton instance behind the static methods:\r\n   * Can be used to access more advanced methods that are not available in static class.\r\n   */\r\n  public static readonly instance = new TranslationsInstance();\r\n\r\n  /**\r\n   * Sets the locales path from which the locales will loaded.\r\n   * @param path The path to the directory in wwwroot where locales can be found. Default is \"locales\".\r\n   */\r\n  public static setLocalesPath(path: string): void {\r\n    this.instance.localesPath = path?.replace(/[/]*$/gm, \"\") || this.instance.localesPath;\r\n  }\r\n\r\n  /**\r\n   * Sets the function which is responsible for loading a dictionary for the given language.\r\n   * This is an alternative to the default locales path functionality.\r\n   * @param localesFunc The function that will be called to load the dictionary for the given language.\r\n   */\r\n  public static setLocalesFunc(localesFunc: (lang: string) => Promise<DictionaryLang> ): void {\r\n    this.instance.localesFunc = localesFunc ;\r\n  }\r\n\r\n  /**\r\n   * Translates given key to the current language.\r\n   * @param key - Key for the text.\r\n   * @param interpolateParams - Variables for the interpolation.\r\n   * @param lang Language to fetch. Default is the current language.\r\n   * @param templateOnly If true, will fetch the template directly without the interpolation.\r\n   * @returns The translated value in current/given language, potentially interpolated.\r\n   * If none is found...\r\n   *\r\n   * - If the key does not start with \"SALAXY.\" (plain text, not a key), returns the text as-is.\r\n   * - If the Finnish translation is found, returns it. Prefixed with red exclamation mark in test only.\r\n   * - If fi translation not found, returns the key - always prefixed with red exclamation mark (prod and test).\r\n   */\r\n  public static get(key: string, interpolateParams?: any, lang?: string, templateOnly = false): string {\r\n    return this.instance.get(key, interpolateParams, lang, templateOnly);\r\n  }\r\n\r\n  /**\r\n   * Translates given key to the current language with default value.\r\n   * @param key - Key for the text.\r\n   * @param defaultValue - The default value that is returned if the key is not found. Null is the default.\r\n   * @param lang Language to fetch. Default is the current language.\r\n   * @returns The translated value in current language or if none is found the key.\r\n   */\r\n  public static getWithDefault(key: string, defaultValue = \"\", lang?: string | null): string {\r\n    return this.instance.getWithDefault(key, defaultValue, lang);\r\n  }\r\n\r\n\r\n  /**\r\n   * Gets any object (string or dictionary) with the given property path.\r\n   * @param key Key for the text.\r\n   * @param lang Language to fetch. Default is the current language.\r\n   * @returns The object if found using the key, null if none is found.\r\n   */\r\n  public static getAny(key: string, lang?: string): any {\r\n    return this.instance.getAny(key, lang);\r\n  }\r\n\r\n  /**\r\n   * Loads a language bundle from the server on-demand.\r\n   * The method will check the loadedLanguages collection, so it will load a language only once => Can be called every time the user language changes.\r\n   * This method is designed to fail outside browser. Browser is recognized based on having globalThis.fetch.\r\n   * The default Finnish dictionary is added added from code lib (not http) unless the Config has the\r\n   * noCache attribute set (used in dev-mode to get the templates and i18n directly from files instead of dist).\r\n   * @param lang Language to load.\r\n   */\r\n  public static loadLanguage(lang: string): Promise<void> {\r\n    return this.instance.loadLanguage(lang);\r\n  }\r\n\r\n  /**\r\n   * Adds a dictionary.\r\n   * @param lang - ISO language code for the dictionary to be added: fi, en or sv.\r\n   * @param translations - A translations object (json).\r\n   */\r\n  public static addDictionary(lang: string, translations: DictionaryLang): void {\r\n    return this.instance.addDictionary(lang, translations);\r\n  }\r\n\r\n  /**\r\n   * Add all dictionaries from a single language object.\r\n   * @param translations - A translations object (json).\r\n   * This object must have language codes as first level keys.\r\n   */\r\n  public static addDictionaries(translations: {[key: string]: DictionaryLang }): void {\r\n    return this.instance.addDictionaries(translations);\r\n  }\r\n\r\n  /**\r\n   * Sets the Salaxy user interface language.\r\n   * @param lang - One of the supported languages: \"fi\", \"en\" or \"sv\".\r\n   */\r\n  public static setLanguage(lang: \"fi\" | \"en\" | \"sv\"): void {\r\n    return this.instance.setLanguage(lang);\r\n  }\r\n\r\n  /**\r\n   * Gets the current user interface language\r\n   * @returns One of the supported languages: \"fi\", \"en\" or \"sv\".\r\n   */\r\n  public static getLanguage(): \"fi\" | \"en\" | \"sv\" {\r\n    return this.instance.getLanguage();\r\n  }\r\n}\r\n","import { incomeTypeCodes } from \"../codegen/incomeTypeCodes\";\r\nimport { IncomeTypeMetadata } from \"./model\";\r\nimport { Translations } from \"./Translations\";\r\nimport { TransactionCode, Language } from \"../model\";\r\n\r\n\r\n/**\r\n * Provides business logic for Income types in Incomes Registry (Tulorekisteri).\r\n */\r\nexport class IncomeTypesLogic {\r\n  /**\r\n   * Searches the income type texts (supportedTypes) using the current language version.\r\n   * Returns all types if the search string is less than 2 chars.\r\n   * @param searchString Search text - will be used as case-insensitive. Will be trimmed. Minimum length 2.\r\n   */\r\n  public static search(searchString: string): IncomeTypeMetadata[] {\r\n    const supportedTypes = IncomeTypesLogic.getAll().filter((x) => x.isSupported);\r\n    if (!searchString || searchString.trim().length < 2) {\r\n      return supportedTypes;\r\n    }\r\n    searchString = searchString.trim().toLowerCase();\r\n    return supportedTypes.filter((x) => x.code.toString().indexOf(searchString) >= 0\r\n      || x.label.toLowerCase().indexOf(searchString) >= 0);\r\n  }\r\n\r\n  /**\r\n   * Gets all codes in Incomes register reporting.\r\n   * This also includes the Salaxy internal codes eg. 1: \"Ignored\" / \"Not reported\"\r\n   * For normal language-versioned behavior use cached allTypes field.\r\n   * @param language Language for the label.\r\n   */\r\n  public static getAll(language: Language | undefined = undefined): IncomeTypeMetadata[] {\r\n    language = language || Translations.getLanguage() as any || Language.Fi;\r\n    const allCodes: IncomeTypeMetadata[]  = [{\r\n      code: 1,\r\n      label: (language === Language.En ? \"No IR reporting\" : (language === Language.Sv ? \"Ingen IR reporting\" : \"Ei ilmoiteta tulorekisteriin\")),\r\n      isNegativeSupported: true,\r\n      pensionInsurance: false,\r\n      accidentInsurance: false,\r\n      unemploymentInsurance: false,\r\n      healthInsurance: false,\r\n      insuranceInformationAllowed: true,\r\n      taxDefault: 0,\r\n      notSupportedError: null,\r\n      description: Translations.get(\"SALAXY.CORE.IncomeTypesLogic.incomeTypeMetaData.desription\"),\r\n      taxAndSidecostsDescr: Translations.get(\"SALAXY.CORE.IncomeTypesLogic.incomeTypeMetaData.taxAndSidecostsDescr\"),\r\n      isSupported: true,\r\n      paymentDefault: 1,\r\n      calcGrouping: \"expenses\",\r\n    }].concat(this.getOriginal(language));\r\n    return allCodes;\r\n  }\r\n\r\n  /**\r\n   * Gets the original codes in Incomes register.\r\n   * This does not include virtual codes, eg. 1: \"Ignored\" / \"Not reported\"\r\n   * For normal language-versioned behavior use cached originalTypes field.\r\n   * @param language Language for the label. Typically use null for automatic language versioning.\r\n   */\r\n  private static getOriginal(language: Language | undefined = undefined): IncomeTypeMetadata[] {\r\n    return incomeTypeCodes.map((x) => ({\r\n      code: x.code,\r\n      label: (language === Language.En ? x.nameEn : (language === Language.Sv ? x.nameSv : x.nameFi)),\r\n      isNegativeSupported: x.isNegativeSupported,\r\n      pensionInsurance: x.pensionInsurance,\r\n      accidentInsurance: x.accidentInsurance,\r\n      unemploymentInsurance: x.unemploymentInsurance,\r\n      healthInsurance: x.healthInsurance,\r\n      insuranceInformationAllowed: x.insuranceInformationAllowed,\r\n      taxDefault: x.taxDefault,\r\n      notSupportedError: x.notSupportedError,\r\n      description: (language === Language.En ? x.descriptionEn : (language === Language.Sv ? x.descriptionSv : x.descriptionFi)),\r\n      taxAndSidecostsDescr: (language === Language.En ? x.taxAndSideCostsDescrEn : (language === Language.Sv ? x.taxAndSideCostsDescrSv : x.taxAndSideCostsDescrFi)),\r\n      isSupported: x.isSupported,\r\n      paymentDefault: x.paymentDefault,\r\n      calcGrouping: x.calcGrouping,\r\n      transactionCode: x.transactionCode as TransactionCode,\r\n    }));\r\n  }\r\n}\r\n","/**\r\n * This data is generated from\r\n * ****************************************************\r\n * DEVELOPERS NOTE: COPY from https://test-api.salaxy.com/docs/EnumJson/v03 / http://localhost:82/docs/EnumJson/v03\r\n * DO NOT EDIT DIRECTLY\r\n * @ignore\r\n */\r\nexport const generatedEnumData = [\r\n  {\r\n    \"name\": \"AbcSection\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"doNotShow\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"employment\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"insurance\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"salary\"\r\n      },\r\n      {\r\n        \"order\": 40,\r\n        \"name\": \"examples\"\r\n      },\r\n      {\r\n        \"order\": 50,\r\n        \"name\": \"palkkausGeneral\"\r\n      },\r\n      {\r\n        \"order\": 60,\r\n        \"name\": \"palkkausInstructions\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"blog\"\r\n      },\r\n      {\r\n        \"order\": 110,\r\n        \"name\": \"press\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"personEmployer\"\r\n      },\r\n      {\r\n        \"order\": 201,\r\n        \"name\": \"householdEmployer\"\r\n      },\r\n      {\r\n        \"order\": 210,\r\n        \"name\": \"worker\"\r\n      },\r\n      {\r\n        \"order\": 211,\r\n        \"name\": \"employee\"\r\n      },\r\n      {\r\n        \"order\": 220,\r\n        \"name\": \"entrepreneur\"\r\n      },\r\n      {\r\n        \"order\": 221,\r\n        \"name\": \"association\"\r\n      },\r\n      {\r\n        \"order\": 222,\r\n        \"name\": \"businessOwner\"\r\n      },\r\n      {\r\n        \"order\": 301,\r\n        \"name\": \"productLongDescription\"\r\n      },\r\n      {\r\n        \"order\": 302,\r\n        \"name\": \"documentTemplates\"\r\n      },\r\n      {\r\n        \"order\": 303,\r\n        \"name\": \"instructionsAndExamples\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AbsenceCauseCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"unpaidLeave\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"personalReason\"\r\n      },\r\n      {\r\n        \"order\": 1001,\r\n        \"name\": \"illness\"\r\n      },\r\n      {\r\n        \"order\": 1002,\r\n        \"name\": \"partTimeSickLeave\"\r\n      },\r\n      {\r\n        \"order\": 1003,\r\n        \"name\": \"parentalLeave\"\r\n      },\r\n      {\r\n        \"order\": 1004,\r\n        \"name\": \"specialMaternityLeave\"\r\n      },\r\n      {\r\n        \"order\": 1005,\r\n        \"name\": \"rehabilitation\"\r\n      },\r\n      {\r\n        \"order\": 1006,\r\n        \"name\": \"childIllness\"\r\n      },\r\n      {\r\n        \"order\": 1007,\r\n        \"name\": \"partTimeChildCareLeave\"\r\n      },\r\n      {\r\n        \"order\": 1008,\r\n        \"name\": \"training\"\r\n      },\r\n      {\r\n        \"order\": 1009,\r\n        \"name\": \"jobAlternationLeave\"\r\n      },\r\n      {\r\n        \"order\": 1010,\r\n        \"name\": \"studyLeave\"\r\n      },\r\n      {\r\n        \"order\": 1011,\r\n        \"name\": \"industrialAction\"\r\n      },\r\n      {\r\n        \"order\": 1012,\r\n        \"name\": \"interruptionInWorkProvision\"\r\n      },\r\n      {\r\n        \"order\": 1013,\r\n        \"name\": \"leaveOfAbsence\"\r\n      },\r\n      {\r\n        \"order\": 1014,\r\n        \"name\": \"militaryRefresherTraining\"\r\n      },\r\n      {\r\n        \"order\": 1015,\r\n        \"name\": \"militaryService\"\r\n      },\r\n      {\r\n        \"order\": 1016,\r\n        \"name\": \"layOff\"\r\n      },\r\n      {\r\n        \"order\": 1017,\r\n        \"name\": \"childCareLeave\"\r\n      },\r\n      {\r\n        \"order\": 1018,\r\n        \"name\": \"midWeekHoliday\"\r\n      },\r\n      {\r\n        \"order\": 1019,\r\n        \"name\": \"accruedHoliday\"\r\n      },\r\n      {\r\n        \"order\": 1020,\r\n        \"name\": \"occupationalAccident\"\r\n      },\r\n      {\r\n        \"order\": 1021,\r\n        \"name\": \"annualLeave\"\r\n      },\r\n      {\r\n        \"order\": 1022,\r\n        \"name\": \"partTimeAbsenceDueToRehabilitation\"\r\n      },\r\n      {\r\n        \"order\": 1099,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AccountantType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"unknown\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"unlinkedPrimaryPartner\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"unlinkedAccountingOnly\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"pendingPrimaryPartner\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"primaryPartner\"\r\n      },\r\n      {\r\n        \"order\": 99,\r\n        \"name\": \"none\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AccountingChannel\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 2010,\r\n        \"name\": \"procountor\"\r\n      },\r\n      {\r\n        \"order\": 2020,\r\n        \"name\": \"vismaNetvisor\"\r\n      },\r\n      {\r\n        \"order\": 2060,\r\n        \"name\": \"vismaFivaldi\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AccountingPeriodClosingOption\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"accounting\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"periodicInvoices\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"accountingAndPeriodicInvoices\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"irReports\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"accountingAndIrReports\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"periodicInvoicesAndIrReports\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"accountingAndPeriodicInvoicesAndIrReports\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AccountingReportRowType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"debit\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"credit\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"total\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"groupHeader\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"groupTotal\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"childRow\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AccountingReportTableType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"classic\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"simple\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"mapped\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AccountingTargetStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"ownedTarget\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"productTarget\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"sharedTarget\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AgeGroupCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"a\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"b\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"c\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"u\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AgeRange\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"unknown\"\r\n      },\r\n      {\r\n        \"order\": 15,\r\n        \"name\": \"age_15\"\r\n      },\r\n      {\r\n        \"order\": 16,\r\n        \"name\": \"age16\"\r\n      },\r\n      {\r\n        \"order\": 17,\r\n        \"name\": \"age17\"\r\n      },\r\n      {\r\n        \"order\": 18,\r\n        \"name\": \"age18_52\"\r\n      },\r\n      {\r\n        \"order\": 53,\r\n        \"name\": \"age53_62\"\r\n      },\r\n      {\r\n        \"order\": 63,\r\n        \"name\": \"age63_64\"\r\n      },\r\n      {\r\n        \"order\": 65,\r\n        \"name\": \"age65_67\"\r\n      },\r\n      {\r\n        \"order\": 68,\r\n        \"name\": \"age68AndOVer\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AllowanceCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"mealAllowance\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"partialDailyAllowance\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"fullDailyAllowance\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"internationalDailyAllowance\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"taxExemptReimbursementsAbroad\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AnnualLeavePaymentKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"planned\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"manualSalary\"\r\n      },\r\n      {\r\n        \"order\": 102,\r\n        \"name\": \"manualCompensation\"\r\n      },\r\n      {\r\n        \"order\": 103,\r\n        \"name\": \"manualBonus\"\r\n      },\r\n      {\r\n        \"order\": 201,\r\n        \"name\": \"paidCalc\"\r\n      },\r\n      {\r\n        \"order\": 202,\r\n        \"name\": \"draftCalc\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ApiCheckStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"ignored\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"success\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"warning\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"error\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ApiImportStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"ignored\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"success\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"warning\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"error\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ApiListItemType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"unknown\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"accountBase\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"companyAccount\"\r\n      },\r\n      {\r\n        \"order\": 12,\r\n        \"name\": \"personAccount\"\r\n      },\r\n      {\r\n        \"order\": 13,\r\n        \"name\": \"workerAccount\"\r\n      },\r\n      {\r\n        \"order\": 14,\r\n        \"name\": \"certificate\"\r\n      },\r\n      {\r\n        \"order\": 15,\r\n        \"name\": \"sessionUserCredential\"\r\n      },\r\n      {\r\n        \"order\": 16,\r\n        \"name\": \"onboarding\"\r\n      },\r\n      {\r\n        \"order\": 17,\r\n        \"name\": \"profile\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"calculation\"\r\n      },\r\n      {\r\n        \"order\": 21,\r\n        \"name\": \"calculationPaid\"\r\n      },\r\n      {\r\n        \"order\": 22,\r\n        \"name\": \"eSalaryPayment\"\r\n      },\r\n      {\r\n        \"order\": 23,\r\n        \"name\": \"payment\"\r\n      },\r\n      {\r\n        \"order\": 24,\r\n        \"name\": \"earningsPayment\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"employment\"\r\n      },\r\n      {\r\n        \"order\": 31,\r\n        \"name\": \"workerAbsences\"\r\n      },\r\n      {\r\n        \"order\": 32,\r\n        \"name\": \"holidayYear\"\r\n      },\r\n      {\r\n        \"order\": 40,\r\n        \"name\": \"taxcard\"\r\n      },\r\n      {\r\n        \"order\": 50,\r\n        \"name\": \"payrollDetails\"\r\n      },\r\n      {\r\n        \"order\": 61,\r\n        \"name\": \"invoice\"\r\n      },\r\n      {\r\n        \"order\": 62,\r\n        \"name\": \"report\"\r\n      },\r\n      {\r\n        \"order\": 63,\r\n        \"name\": \"blobFile\"\r\n      },\r\n      {\r\n        \"order\": 64,\r\n        \"name\": \"payerSummary\"\r\n      },\r\n      {\r\n        \"order\": 71,\r\n        \"name\": \"calendarEvent\"\r\n      },\r\n      {\r\n        \"order\": 72,\r\n        \"name\": \"usecase\"\r\n      },\r\n      {\r\n        \"order\": 73,\r\n        \"name\": \"dataset\"\r\n      },\r\n      {\r\n        \"order\": 81,\r\n        \"name\": \"article\"\r\n      },\r\n      {\r\n        \"order\": 82,\r\n        \"name\": \"messageThread\"\r\n      },\r\n      {\r\n        \"order\": 83,\r\n        \"name\": \"emailMessage\"\r\n      },\r\n      {\r\n        \"order\": 91,\r\n        \"name\": \"accountProducts\"\r\n      },\r\n      {\r\n        \"order\": 92,\r\n        \"name\": \"varmaPensionOrder\"\r\n      },\r\n      {\r\n        \"order\": 93,\r\n        \"name\": \"ifInsuranceOrder\"\r\n      },\r\n      {\r\n        \"order\": 9999,\r\n        \"name\": \"historical\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ApiTestErrorType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"userFriendly\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ApiItemType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"calculation\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"calculationPaid\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"dataset\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"payrollDetails\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"invoice\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"earningsPaymentReport\"\r\n      },\r\n      {\r\n        \"order\": 40,\r\n        \"name\": \"payerSummaryReport\"\r\n      },\r\n      {\r\n        \"order\": 50,\r\n        \"name\": \"employment\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"messageThread\"\r\n      },\r\n      {\r\n        \"order\": 110,\r\n        \"name\": \"calendarEvent\"\r\n      },\r\n      {\r\n        \"order\": 500,\r\n        \"name\": \"listItems\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ApiValidationErrorType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"general\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"required\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"invalid\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"warning\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AuthenticationMethod\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"emailPwdLocal\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"facebook\"\r\n      },\r\n      {\r\n        \"order\": 12,\r\n        \"name\": \"google\"\r\n      },\r\n      {\r\n        \"order\": 13,\r\n        \"name\": \"microsoft\"\r\n      },\r\n      {\r\n        \"order\": 14,\r\n        \"name\": \"linkedIn\"\r\n      },\r\n      {\r\n        \"order\": 15,\r\n        \"name\": \"auth0Database\"\r\n      },\r\n      {\r\n        \"order\": 16,\r\n        \"name\": \"x509\"\r\n      },\r\n      {\r\n        \"order\": 17,\r\n        \"name\": \"salaxy\"\r\n      },\r\n      {\r\n        \"order\": 18,\r\n        \"name\": \"test\"\r\n      },\r\n      {\r\n        \"order\": 19,\r\n        \"name\": \"webAuthn\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"microsoftOAuth\"\r\n      },\r\n      {\r\n        \"order\": 21,\r\n        \"name\": \"googleOAuth\"\r\n      },\r\n      {\r\n        \"order\": 1000,\r\n        \"name\": \"internalLocalhost\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AuthorizationStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"oK\"\r\n      },\r\n      {\r\n        \"order\": -40,\r\n        \"name\": \"accessDenied\"\r\n      },\r\n      {\r\n        \"order\": -30,\r\n        \"name\": \"expiredOauthToken\"\r\n      },\r\n      {\r\n        \"order\": -20,\r\n        \"name\": \"invalidOAuthToken\"\r\n      },\r\n      {\r\n        \"order\": -10,\r\n        \"name\": \"noOauthToken\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AuthorizationType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"none\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"employerAuthorization\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"workerContract\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"companyContract\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"partnerContract\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"manual\"\r\n      },\r\n      {\r\n        \"order\": 999,\r\n        \"name\": \"temporary\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AvatarPictureType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"icon\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"uploaded\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"gravatar\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"BankPaymentType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"unknown\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"error\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"paytrailBatch\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"netvisorPayment\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"salaryGrossPayment\"\r\n      },\r\n      {\r\n        \"order\": 21,\r\n        \"name\": \"refundPayment\"\r\n      },\r\n      {\r\n        \"order\": 22,\r\n        \"name\": \"partialRefundPayment\"\r\n      },\r\n      {\r\n        \"order\": 23,\r\n        \"name\": \"doubleRefundPayment\"\r\n      },\r\n      {\r\n        \"order\": 24,\r\n        \"name\": \"transferToEcfaPayment\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"insuranceGrossPayment\"\r\n      },\r\n      {\r\n        \"order\": 50,\r\n        \"name\": \"netSalary\"\r\n      },\r\n      {\r\n        \"order\": 51,\r\n        \"name\": \"salaryAdvance\"\r\n      },\r\n      {\r\n        \"order\": 52,\r\n        \"name\": \"netSalaryRepayment\"\r\n      },\r\n      {\r\n        \"order\": 53,\r\n        \"name\": \"netSalaryCorrection\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"taxAccount\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"tvr\"\r\n      },\r\n      {\r\n        \"order\": 210,\r\n        \"name\": \"tvrRfnd\"\r\n      },\r\n      {\r\n        \"order\": 300,\r\n        \"name\": \"palkkausFees\"\r\n      },\r\n      {\r\n        \"order\": 310,\r\n        \"name\": \"bankFees\"\r\n      },\r\n      {\r\n        \"order\": 320,\r\n        \"name\": \"paytrailFees\"\r\n      },\r\n      {\r\n        \"order\": 501,\r\n        \"name\": \"insuranceLahiTapiola\"\r\n      },\r\n      {\r\n        \"order\": 1000,\r\n        \"name\": \"tyel\"\r\n      },\r\n      {\r\n        \"order\": 1101,\r\n        \"name\": \"tyelEteraContract\"\r\n      },\r\n      {\r\n        \"order\": 1102,\r\n        \"name\": \"tyelEteraTemp\"\r\n      },\r\n      {\r\n        \"order\": 1103,\r\n        \"name\": \"tyelEteraUnknown\"\r\n      },\r\n      {\r\n        \"order\": 1201,\r\n        \"name\": \"tyelEloContract\"\r\n      },\r\n      {\r\n        \"order\": 1202,\r\n        \"name\": \"tyelEloTemp\"\r\n      },\r\n      {\r\n        \"order\": 1203,\r\n        \"name\": \"tyelEloInitialImport\"\r\n      },\r\n      {\r\n        \"order\": 1301,\r\n        \"name\": \"tyelVarmaContract\"\r\n      },\r\n      {\r\n        \"order\": 1302,\r\n        \"name\": \"tyelVarmaTemp\"\r\n      },\r\n      {\r\n        \"order\": 1401,\r\n        \"name\": \"tyelIlmarinenContract\"\r\n      },\r\n      {\r\n        \"order\": 1402,\r\n        \"name\": \"tyelIlmarinenTemp\"\r\n      },\r\n      {\r\n        \"order\": 2000,\r\n        \"name\": \"union\"\r\n      },\r\n      {\r\n        \"order\": 2001,\r\n        \"name\": \"unionRaksa\"\r\n      },\r\n      {\r\n        \"order\": 2010,\r\n        \"name\": \"foreclosure\"\r\n      },\r\n      {\r\n        \"order\": 10001,\r\n        \"name\": \"saldoYearBegin\"\r\n      },\r\n      {\r\n        \"order\": 10002,\r\n        \"name\": \"saldoYearEnd\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"BenefitCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"accommodationBenefit\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"telephoneBenefit\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"mealBenefit\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"otherBenefits\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"BlobFileType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"unknown\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"authorizationPdf\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"avatar\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"taxCard\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"expensesReceipt\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"raksaloki\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"template\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"eInvoice\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"temporary\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"settings\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"messages\"\r\n      },\r\n      {\r\n        \"order\": 21,\r\n        \"name\": \"record\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"monthlyReport\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"yearlyReport\"\r\n      },\r\n      {\r\n        \"order\": 102,\r\n        \"name\": \"calcReport\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"BlobRepository\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"userFiles\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"versionHistory\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"systemFiles\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"payload\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"reports\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"cdnImages\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"iam\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"gitContent\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"fileSystemContent\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"BootstrapStyle\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"primary\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"success\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"info\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"warning\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"danger\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CalcGroup\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"baseSalary\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"salaryAdditions\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"benefits\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"expenses\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"deductions\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"otherNoPayment\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"totals\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"disabled\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CalculationFlag\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"exclude\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"pensionInsurance\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"accidentInsurance\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"unemploymentInsurance\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"healthInsurance\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"insurancesDeduction\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"noTax\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"tax\"\r\n      },\r\n      {\r\n        \"order\": 102,\r\n        \"name\": \"taxDeduction\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"cfNoPayment\"\r\n      },\r\n      {\r\n        \"order\": 201,\r\n        \"name\": \"cfPayment\"\r\n      },\r\n      {\r\n        \"order\": 202,\r\n        \"name\": \"cfDeduction\"\r\n      },\r\n      {\r\n        \"order\": 203,\r\n        \"name\": \"cfDeductionAtSalaxy\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CalculationRefresh\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"worker\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"employer\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"employment\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"taxcard\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"insurances\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CalculationResultRowType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"totalBenefits\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"totalExpenses\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"totalSocialSecurityEmployer\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"totalSocialSecurityEmployerDebt\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"totalSocialSecurityEmployerPayment\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"totalPension\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"totalPensionPayment\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"totalPensionEmployer\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"totalPensionEmployerDebt\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"totalPensionWorker\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"totalUnemployment\"\r\n      },\r\n      {\r\n        \"order\": 12,\r\n        \"name\": \"totalUnemploymentPayment\"\r\n      },\r\n      {\r\n        \"order\": 13,\r\n        \"name\": \"totalUnemploymentEmployer\"\r\n      },\r\n      {\r\n        \"order\": 14,\r\n        \"name\": \"totalUnemploymentEmployerDebt\"\r\n      },\r\n      {\r\n        \"order\": 15,\r\n        \"name\": \"totalUnemploymentWorker\"\r\n      },\r\n      {\r\n        \"order\": 16,\r\n        \"name\": \"totalPalkkaus\"\r\n      },\r\n      {\r\n        \"order\": 17,\r\n        \"name\": \"totalSalary\"\r\n      },\r\n      {\r\n        \"order\": 18,\r\n        \"name\": \"totalTax\"\r\n      },\r\n      {\r\n        \"order\": 19,\r\n        \"name\": \"totalTaxPayment\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"totalPayment\"\r\n      },\r\n      {\r\n        \"order\": 21,\r\n        \"name\": \"totalWorkerPayment\"\r\n      },\r\n      {\r\n        \"order\": 22,\r\n        \"name\": \"totalService\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CalculationRowSource\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"disabled\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"manualRow\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"worktimeImport\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"priceEmployment\"\r\n      },\r\n      {\r\n        \"order\": 201,\r\n        \"name\": \"priceCompany\"\r\n      },\r\n      {\r\n        \"order\": 210,\r\n        \"name\": \"copyEmployment\"\r\n      },\r\n      {\r\n        \"order\": 211,\r\n        \"name\": \"copyCompany\"\r\n      },\r\n      {\r\n        \"order\": 300,\r\n        \"name\": \"customRowtype\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CalculationRowType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"unknown\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"salary\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"hourlySalary\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"monthlySalary\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"totalWorkerPayment\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"totalEmployerPayment\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"timeRatePay\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"compensation\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"overtime\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"tesWorktimeShortening\"\r\n      },\r\n      {\r\n        \"order\": 12,\r\n        \"name\": \"eveningAddition\"\r\n      },\r\n      {\r\n        \"order\": 13,\r\n        \"name\": \"nightimeAddition\"\r\n      },\r\n      {\r\n        \"order\": 14,\r\n        \"name\": \"saturdayAddition\"\r\n      },\r\n      {\r\n        \"order\": 15,\r\n        \"name\": \"sundayWork\"\r\n      },\r\n      {\r\n        \"order\": 19,\r\n        \"name\": \"otherAdditions\"\r\n      },\r\n      {\r\n        \"order\": 31,\r\n        \"name\": \"paidSickLeaveSalary\"\r\n      },\r\n      {\r\n        \"order\": 32,\r\n        \"name\": \"paidSickLeaveHourlySalary\"\r\n      },\r\n      {\r\n        \"order\": 33,\r\n        \"name\": \"paidSickLeaveMonthlySalary\"\r\n      },\r\n      {\r\n        \"order\": 34,\r\n        \"name\": \"trainingSalary\"\r\n      },\r\n      {\r\n        \"order\": 35,\r\n        \"name\": \"trainingHourlySalary\"\r\n      },\r\n      {\r\n        \"order\": 36,\r\n        \"name\": \"trainingMonthlySalary\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"accomodationBenefit\"\r\n      },\r\n      {\r\n        \"order\": 102,\r\n        \"name\": \"mealBenefit\"\r\n      },\r\n      {\r\n        \"order\": 103,\r\n        \"name\": \"phoneBenefit\"\r\n      },\r\n      {\r\n        \"order\": 104,\r\n        \"name\": \"carBenefit\"\r\n      },\r\n      {\r\n        \"order\": 105,\r\n        \"name\": \"bicycleBenefit\"\r\n      },\r\n      {\r\n        \"order\": 199,\r\n        \"name\": \"otherBenefit\"\r\n      },\r\n      {\r\n        \"order\": 201,\r\n        \"name\": \"holidayCompensation\"\r\n      },\r\n      {\r\n        \"order\": 202,\r\n        \"name\": \"holidayBonus\"\r\n      },\r\n      {\r\n        \"order\": 203,\r\n        \"name\": \"holidaySalary\"\r\n      },\r\n      {\r\n        \"order\": 301,\r\n        \"name\": \"dailyAllowance\"\r\n      },\r\n      {\r\n        \"order\": 302,\r\n        \"name\": \"dailyAllowanceHalf\"\r\n      },\r\n      {\r\n        \"order\": 303,\r\n        \"name\": \"mealCompensation\"\r\n      },\r\n      {\r\n        \"order\": 304,\r\n        \"name\": \"milageOwnCar\"\r\n      },\r\n      {\r\n        \"order\": 305,\r\n        \"name\": \"toolCompensation\"\r\n      },\r\n      {\r\n        \"order\": 306,\r\n        \"name\": \"expenses\"\r\n      },\r\n      {\r\n        \"order\": 307,\r\n        \"name\": \"milageDaily\"\r\n      },\r\n      {\r\n        \"order\": 308,\r\n        \"name\": \"milageOther\"\r\n      },\r\n      {\r\n        \"order\": 401,\r\n        \"name\": \"unionPayment\"\r\n      },\r\n      {\r\n        \"order\": 402,\r\n        \"name\": \"foreclosure\"\r\n      },\r\n      {\r\n        \"order\": 403,\r\n        \"name\": \"advance\"\r\n      },\r\n      {\r\n        \"order\": 404,\r\n        \"name\": \"foreclosureByPalkkaus\"\r\n      },\r\n      {\r\n        \"order\": 405,\r\n        \"name\": \"prepaidExpenses\"\r\n      },\r\n      {\r\n        \"order\": 406,\r\n        \"name\": \"otherDeductions\"\r\n      },\r\n      {\r\n        \"order\": 407,\r\n        \"name\": \"deductibleOfExerciseAndCultureBenefit\"\r\n      },\r\n      {\r\n        \"order\": 901,\r\n        \"name\": \"childCareSubsidy\"\r\n      },\r\n      {\r\n        \"order\": 902,\r\n        \"name\": \"chainsawReduction\"\r\n      },\r\n      {\r\n        \"order\": 1010,\r\n        \"name\": \"nonProfitOrg\"\r\n      },\r\n      {\r\n        \"order\": 1020,\r\n        \"name\": \"subsidisedCommute\"\r\n      },\r\n      {\r\n        \"order\": 1030,\r\n        \"name\": \"irIncomeType\"\r\n      },\r\n      {\r\n        \"order\": 1040,\r\n        \"name\": \"board\"\r\n      },\r\n      {\r\n        \"order\": 1050,\r\n        \"name\": \"remuneration\"\r\n      },\r\n      {\r\n        \"order\": 1060,\r\n        \"name\": \"otherCompensation\"\r\n      },\r\n      {\r\n        \"order\": 1070,\r\n        \"name\": \"workingTimeCompensation\"\r\n      },\r\n      {\r\n        \"order\": 1080,\r\n        \"name\": \"employmentTermination\"\r\n      },\r\n      {\r\n        \"order\": 1090,\r\n        \"name\": \"hourlySalaryWithWorkingTimeCompensation\"\r\n      },\r\n      {\r\n        \"order\": 1100,\r\n        \"name\": \"paidSickLeave\"\r\n      },\r\n      {\r\n        \"order\": 1110,\r\n        \"name\": \"training\"\r\n      },\r\n      {\r\n        \"order\": 1120,\r\n        \"name\": \"payStats\"\r\n      },\r\n      {\r\n        \"order\": 2010,\r\n        \"name\": \"taxAtSource\"\r\n      },\r\n      {\r\n        \"order\": 2011,\r\n        \"name\": \"taxWithholding\"\r\n      },\r\n      {\r\n        \"order\": 3000,\r\n        \"name\": \"absencePeriod\"\r\n      },\r\n      {\r\n        \"order\": 8000,\r\n        \"name\": \"serviceCharge\"\r\n      },\r\n      {\r\n        \"order\": 8001,\r\n        \"name\": \"service\"\r\n      },\r\n      {\r\n        \"order\": 9000,\r\n        \"name\": \"script\"\r\n      },\r\n      {\r\n        \"order\": 9999,\r\n        \"name\": \"totals\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CalculationRowUnit\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"count\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"percent\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"days\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"kilometers\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"hours\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"weeks\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"months\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CalculationStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"draft\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"paymentStarted\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"paymentSucceeded\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"paymentCanceled\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"paymentError\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"paymentWorkerCopy\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"workerRequested\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"workerRequestAccepted\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"workerRequestDeclined\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"paymentRefunded\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"paymentRepairCopy\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"waitingApproval\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"payrollDraft\"\r\n      },\r\n      {\r\n        \"order\": 210,\r\n        \"name\": \"repair\"\r\n      },\r\n      {\r\n        \"order\": 220,\r\n        \"name\": \"proDraft\"\r\n      },\r\n      {\r\n        \"order\": 300,\r\n        \"name\": \"sharedWaiting\"\r\n      },\r\n      {\r\n        \"order\": 310,\r\n        \"name\": \"sharedApproved\"\r\n      },\r\n      {\r\n        \"order\": 320,\r\n        \"name\": \"sharedRejected\"\r\n      },\r\n      {\r\n        \"order\": 400,\r\n        \"name\": \"history\"\r\n      },\r\n      {\r\n        \"order\": 1000,\r\n        \"name\": \"template\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CalculationStatusCategory\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"all\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"readonly\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"editable\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"sent\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"shared\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"received\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"error\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CalendarActionType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"display\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"email\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"audio\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"createItem\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"script\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"paymentDate\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CalendarEventStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"cancelled\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"confirmed\"\r\n      },\r\n      {\r\n        \"order\": 102,\r\n        \"name\": \"tentative\"\r\n      },\r\n      {\r\n        \"order\": 111,\r\n        \"name\": \"needsAction\"\r\n      },\r\n      {\r\n        \"order\": 112,\r\n        \"name\": \"completed\"\r\n      },\r\n      {\r\n        \"order\": 113,\r\n        \"name\": \"inProcess\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CarBenefitCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"limitedCarBenefit\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"fullCarBenefit\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CompanyType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"unknown\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"fiOy\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"fiTm\"\r\n      },\r\n      {\r\n        \"order\": 102,\r\n        \"name\": \"fiRy\"\r\n      },\r\n      {\r\n        \"order\": 103,\r\n        \"name\": \"fiYy\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ContractPartyType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"person\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"customContact\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ContactType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"workerAccount\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"employerOverride\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"foreign\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CostAccountingDimensionScope\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"none\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"calculation\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"row\"\r\n      },\r\n      {\r\n        \"order\": 999,\r\n        \"name\": \"hidden\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"Country\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"fi\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"ae\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"at\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"ba\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"bg\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"by\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"cn\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"de\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"eg\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"fr\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"gg\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"hr\"\r\n      },\r\n      {\r\n        \"order\": 12,\r\n        \"name\": \"ie\"\r\n      },\r\n      {\r\n        \"order\": 13,\r\n        \"name\": \"in\"\r\n      },\r\n      {\r\n        \"order\": 14,\r\n        \"name\": \"je\"\r\n      },\r\n      {\r\n        \"order\": 15,\r\n        \"name\": \"kr\"\r\n      },\r\n      {\r\n        \"order\": 16,\r\n        \"name\": \"lk\"\r\n      },\r\n      {\r\n        \"order\": 17,\r\n        \"name\": \"lv\"\r\n      },\r\n      {\r\n        \"order\": 18,\r\n        \"name\": \"me\"\r\n      },\r\n      {\r\n        \"order\": 19,\r\n        \"name\": \"mx\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"no\"\r\n      },\r\n      {\r\n        \"order\": 21,\r\n        \"name\": \"pk\"\r\n      },\r\n      {\r\n        \"order\": 22,\r\n        \"name\": \"rs\"\r\n      },\r\n      {\r\n        \"order\": 23,\r\n        \"name\": \"sg\"\r\n      },\r\n      {\r\n        \"order\": 24,\r\n        \"name\": \"th\"\r\n      },\r\n      {\r\n        \"order\": 25,\r\n        \"name\": \"tr\"\r\n      },\r\n      {\r\n        \"order\": 26,\r\n        \"name\": \"us\"\r\n      },\r\n      {\r\n        \"order\": 27,\r\n        \"name\": \"vg\"\r\n      },\r\n      {\r\n        \"order\": 28,\r\n        \"name\": \"zm\"\r\n      },\r\n      {\r\n        \"order\": 29,\r\n        \"name\": \"am\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"au\"\r\n      },\r\n      {\r\n        \"order\": 31,\r\n        \"name\": \"bb\"\r\n      },\r\n      {\r\n        \"order\": 32,\r\n        \"name\": \"bm\"\r\n      },\r\n      {\r\n        \"order\": 33,\r\n        \"name\": \"ca\"\r\n      },\r\n      {\r\n        \"order\": 34,\r\n        \"name\": \"cy\"\r\n      },\r\n      {\r\n        \"order\": 35,\r\n        \"name\": \"dk\"\r\n      },\r\n      {\r\n        \"order\": 36,\r\n        \"name\": \"es\"\r\n      },\r\n      {\r\n        \"order\": 37,\r\n        \"name\": \"gb\"\r\n      },\r\n      {\r\n        \"order\": 38,\r\n        \"name\": \"gr\"\r\n      },\r\n      {\r\n        \"order\": 39,\r\n        \"name\": \"hu\"\r\n      },\r\n      {\r\n        \"order\": 40,\r\n        \"name\": \"il\"\r\n      },\r\n      {\r\n        \"order\": 41,\r\n        \"name\": \"is\"\r\n      },\r\n      {\r\n        \"order\": 42,\r\n        \"name\": \"jp\"\r\n      },\r\n      {\r\n        \"order\": 43,\r\n        \"name\": \"ky\"\r\n      },\r\n      {\r\n        \"order\": 44,\r\n        \"name\": \"lt\"\r\n      },\r\n      {\r\n        \"order\": 45,\r\n        \"name\": \"ma\"\r\n      },\r\n      {\r\n        \"order\": 46,\r\n        \"name\": \"mk\"\r\n      },\r\n      {\r\n        \"order\": 47,\r\n        \"name\": \"my\"\r\n      },\r\n      {\r\n        \"order\": 48,\r\n        \"name\": \"nz\"\r\n      },\r\n      {\r\n        \"order\": 49,\r\n        \"name\": \"pl\"\r\n      },\r\n      {\r\n        \"order\": 50,\r\n        \"name\": \"ru\"\r\n      },\r\n      {\r\n        \"order\": 51,\r\n        \"name\": \"si\"\r\n      },\r\n      {\r\n        \"order\": 52,\r\n        \"name\": \"tj\"\r\n      },\r\n      {\r\n        \"order\": 53,\r\n        \"name\": \"tz\"\r\n      },\r\n      {\r\n        \"order\": 54,\r\n        \"name\": \"uy\"\r\n      },\r\n      {\r\n        \"order\": 55,\r\n        \"name\": \"vn\"\r\n      },\r\n      {\r\n        \"order\": 56,\r\n        \"name\": \"ar\"\r\n      },\r\n      {\r\n        \"order\": 57,\r\n        \"name\": \"az\"\r\n      },\r\n      {\r\n        \"order\": 58,\r\n        \"name\": \"be\"\r\n      },\r\n      {\r\n        \"order\": 59,\r\n        \"name\": \"br\"\r\n      },\r\n      {\r\n        \"order\": 60,\r\n        \"name\": \"ch\"\r\n      },\r\n      {\r\n        \"order\": 61,\r\n        \"name\": \"cz\"\r\n      },\r\n      {\r\n        \"order\": 62,\r\n        \"name\": \"ee\"\r\n      },\r\n      {\r\n        \"order\": 63,\r\n        \"name\": \"ge\"\r\n      },\r\n      {\r\n        \"order\": 64,\r\n        \"name\": \"hk\"\r\n      },\r\n      {\r\n        \"order\": 65,\r\n        \"name\": \"id\"\r\n      },\r\n      {\r\n        \"order\": 66,\r\n        \"name\": \"im\"\r\n      },\r\n      {\r\n        \"order\": 67,\r\n        \"name\": \"it\"\r\n      },\r\n      {\r\n        \"order\": 68,\r\n        \"name\": \"kg\"\r\n      },\r\n      {\r\n        \"order\": 69,\r\n        \"name\": \"kz\"\r\n      },\r\n      {\r\n        \"order\": 70,\r\n        \"name\": \"lu\"\r\n      },\r\n      {\r\n        \"order\": 71,\r\n        \"name\": \"md\"\r\n      },\r\n      {\r\n        \"order\": 72,\r\n        \"name\": \"mt\"\r\n      },\r\n      {\r\n        \"order\": 73,\r\n        \"name\": \"nl\"\r\n      },\r\n      {\r\n        \"order\": 74,\r\n        \"name\": \"ph\"\r\n      },\r\n      {\r\n        \"order\": 75,\r\n        \"name\": \"ro\"\r\n      },\r\n      {\r\n        \"order\": 76,\r\n        \"name\": \"se\"\r\n      },\r\n      {\r\n        \"order\": 77,\r\n        \"name\": \"sk\"\r\n      },\r\n      {\r\n        \"order\": 78,\r\n        \"name\": \"tm\"\r\n      },\r\n      {\r\n        \"order\": 79,\r\n        \"name\": \"ua\"\r\n      },\r\n      {\r\n        \"order\": 80,\r\n        \"name\": \"uz\"\r\n      },\r\n      {\r\n        \"order\": 81,\r\n        \"name\": \"za\"\r\n      },\r\n      {\r\n        \"order\": 82,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CustomerInvoiceStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"forecast\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"preview\"\r\n      },\r\n      {\r\n        \"order\": 50,\r\n        \"name\": \"waitingPalkkaus\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"unread\"\r\n      },\r\n      {\r\n        \"order\": 110,\r\n        \"name\": \"read\"\r\n      },\r\n      {\r\n        \"order\": 130,\r\n        \"name\": \"paymentStarted\"\r\n      },\r\n      {\r\n        \"order\": 135,\r\n        \"name\": \"warning\"\r\n      },\r\n      {\r\n        \"order\": 140,\r\n        \"name\": \"paid\"\r\n      },\r\n      {\r\n        \"order\": 150,\r\n        \"name\": \"canceled\"\r\n      },\r\n      {\r\n        \"order\": 160,\r\n        \"name\": \"error\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CustomerWebApp\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"palkkaus\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"customSso\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"customPalkkaus\"\r\n      },\r\n      {\r\n        \"order\": 999,\r\n        \"name\": \"noCustomerUi\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"EarningsPaymentReportStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"new\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"scheduled\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"succeeded\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"canceled\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"error\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"invalid\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"sending\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"EmploymentRelationSalaryPaymentMethod\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"bankAccount\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"external\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"EmploymentRelationStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"unknown\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"primary\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"secondaryCurrent\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"archived\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"EmploymentRelationTaxcard\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"auto\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"manual\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"noTaxCard\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"taxAtSource\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"EmploymentRelationType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"salary\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"hourlySalary\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"monthlySalary\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"compensation\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"boardMember\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"entrepreneur\"\r\n      },\r\n      {\r\n        \"order\": 201,\r\n        \"name\": \"farmer\"\r\n      },\r\n      {\r\n        \"order\": 301,\r\n        \"name\": \"employedByStateEmploymentFund\"\r\n      },\r\n      {\r\n        \"order\": 308,\r\n        \"name\": \"athlete\"\r\n      },\r\n      {\r\n        \"order\": 309,\r\n        \"name\": \"performingArtist\"\r\n      },\r\n      {\r\n        \"order\": 401,\r\n        \"name\": \"foreignWorker\"\r\n      },\r\n      {\r\n        \"order\": 402,\r\n        \"name\": \"workingAbroad\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ExportMethod\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"fileExcel\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"fileCsv\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"filePdf\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"fileText\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"copyExcel\"\r\n      },\r\n      {\r\n        \"order\": 102,\r\n        \"name\": \"copyCsv\"\r\n      },\r\n      {\r\n        \"order\": 104,\r\n        \"name\": \"copyText\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"paymentChannel\"\r\n      },\r\n      {\r\n        \"order\": 201,\r\n        \"name\": \"api\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"DatasetStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"draft\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"instance\"\r\n      },\r\n      {\r\n        \"order\": 1000,\r\n        \"name\": \"template\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"DatasetType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"reportAdHoc\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"import\"\r\n      },\r\n      {\r\n        \"order\": 21,\r\n        \"name\": \"export\"\r\n      },\r\n      {\r\n        \"order\": 31,\r\n        \"name\": \"batch\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"DateOfBirthAccuracy\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"assumption\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"ageBased\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"ageGroupBased\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"monthCorrect\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"exact\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"verified\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"FrameworkAgreement\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"notDefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"construction\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"mll\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"childCare\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"cleaning\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"santaClaus\"\r\n      },\r\n      {\r\n        \"order\": 1000,\r\n        \"name\": \"entrepreneur\"\r\n      },\r\n      {\r\n        \"order\": 9999,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"Gender\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"unknown\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"male\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"female\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"HelttiIndustry\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"notDefined\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"i\"\r\n      },\r\n      {\r\n        \"order\": 110,\r\n        \"name\": \"j\"\r\n      },\r\n      {\r\n        \"order\": 120,\r\n        \"name\": \"k\"\r\n      },\r\n      {\r\n        \"order\": 140,\r\n        \"name\": \"m\"\r\n      },\r\n      {\r\n        \"order\": 160,\r\n        \"name\": \"o\"\r\n      },\r\n      {\r\n        \"order\": 170,\r\n        \"name\": \"n\"\r\n      },\r\n      {\r\n        \"order\": 170,\r\n        \"name\": \"n\"\r\n      },\r\n      {\r\n        \"order\": 180,\r\n        \"name\": \"q\"\r\n      },\r\n      {\r\n        \"order\": 190,\r\n        \"name\": \"r\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"s\"\r\n      },\r\n      {\r\n        \"order\": 999,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"HelttiProductPackage\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"notDefined\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"small\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"medium\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"large\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"IncomeEarnerType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"employedByStateEmploymentFund\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"jointOwnerWithPayer\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"partialOwner\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"keyEmployee\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"leasedEmployeeLivingAbroad\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"personWorkingInFrontierDistrict\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"personWorkingAbroad\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"athlete\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"performingArtist\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"restrictedPeriodInFinland\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"netOfTaxContract\"\r\n      },\r\n      {\r\n        \"order\": 12,\r\n        \"name\": \"organization\"\r\n      },\r\n      {\r\n        \"order\": 13,\r\n        \"name\": \"personWorkingOnAlandFerry\"\r\n      },\r\n      {\r\n        \"order\": 14,\r\n        \"name\": \"entrepreneurOrFarmerNoPensionRequired\"\r\n      },\r\n      {\r\n        \"order\": 15,\r\n        \"name\": \"dimplomaticMission\"\r\n      },\r\n      {\r\n        \"order\": 16,\r\n        \"name\": \"eppo\"\r\n      },\r\n      {\r\n        \"order\": 17,\r\n        \"name\": \"lightEntrepreneur\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"IncomeLogDiff\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"new\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"changed\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"removed\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"InternationalIdentifier\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"taxIdentificationNumber\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"foreignPersonalIdentificationNumber\"\r\n      },\r\n      {\r\n        \"order\": 99,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"InvoiceStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"forecast\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"preview\"\r\n      },\r\n      {\r\n        \"order\": 50,\r\n        \"name\": \"waitingPalkkaus\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"unread\"\r\n      },\r\n      {\r\n        \"order\": 110,\r\n        \"name\": \"read\"\r\n      },\r\n      {\r\n        \"order\": 120,\r\n        \"name\": \"waitingConfirmation\"\r\n      },\r\n      {\r\n        \"order\": 130,\r\n        \"name\": \"paymentStarted\"\r\n      },\r\n      {\r\n        \"order\": 135,\r\n        \"name\": \"warning\"\r\n      },\r\n      {\r\n        \"order\": 140,\r\n        \"name\": \"paid\"\r\n      },\r\n      {\r\n        \"order\": 150,\r\n        \"name\": \"canceled\"\r\n      },\r\n      {\r\n        \"order\": 160,\r\n        \"name\": \"error\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"InvoiceType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"net\"\r\n      },\r\n      {\r\n        \"order\": 110,\r\n        \"name\": \"tax\"\r\n      },\r\n      {\r\n        \"order\": 111,\r\n        \"name\": \"taxWithholding\"\r\n      },\r\n      {\r\n        \"order\": 112,\r\n        \"name\": \"taxSocialSecurity\"\r\n      },\r\n      {\r\n        \"order\": 113,\r\n        \"name\": \"taxAtSource\"\r\n      },\r\n      {\r\n        \"order\": 120,\r\n        \"name\": \"unemployment\"\r\n      },\r\n      {\r\n        \"order\": 130,\r\n        \"name\": \"pension\"\r\n      },\r\n      {\r\n        \"order\": 140,\r\n        \"name\": \"union\"\r\n      },\r\n      {\r\n        \"order\": 150,\r\n        \"name\": \"foreclosure\"\r\n      },\r\n      {\r\n        \"order\": 160,\r\n        \"name\": \"payroll\"\r\n      },\r\n      {\r\n        \"order\": 170,\r\n        \"name\": \"service\"\r\n      },\r\n      {\r\n        \"order\": 180,\r\n        \"name\": \"fee\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"gross\"\r\n      },\r\n      {\r\n        \"order\": 300,\r\n        \"name\": \"verification\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"Holiday\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"newYearsDay\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"epiphany\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"goodFriday\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"easterSunday\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"easterSaturday\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"easterMonday\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"mayDay\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"ascensionDay\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"pentecost\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"midsummerEve\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"midsummerDay\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"allSaintsDay\"\r\n      },\r\n      {\r\n        \"order\": 12,\r\n        \"name\": \"independenceDay\"\r\n      },\r\n      {\r\n        \"order\": 13,\r\n        \"name\": \"christmasEve\"\r\n      },\r\n      {\r\n        \"order\": 14,\r\n        \"name\": \"christmasDay\"\r\n      },\r\n      {\r\n        \"order\": 15,\r\n        \"name\": \"stStephensDay\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"HolidayAccrualSource\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"initial\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"manual\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"calcDraft\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"calcPaid\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"HolidayBonusPaymentMethod\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"none\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"payForHolidaySalary\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"paySummerBonus\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"paySelectedDays\"\r\n      },\r\n      {\r\n        \"order\": 24,\r\n        \"name\": \"pay24Days\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"payAllBonus\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"HolidayCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"permanent14Days\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"permanent35Hours\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"temporaryTimeOff\"\r\n      },\r\n      {\r\n        \"order\": 21,\r\n        \"name\": \"holidayCompensation\"\r\n      },\r\n      {\r\n        \"order\": 22,\r\n        \"name\": \"holidayCompensationIncluded\"\r\n      },\r\n      {\r\n        \"order\": 99,\r\n        \"name\": \"noHolidays\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"other\"\r\n      },\r\n      {\r\n        \"script\": 9000,\r\n        \"name\": \"script\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"HolidayGroup\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"official\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"nonBanking\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"holiday\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"HolidayPayCalculation\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"normalMonthlyPay\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"averageDailyPay\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"percentageBasedPay\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"averageHourlyPay\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"holidayCompensation\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"otherPay\"\r\n      },\r\n      {\r\n        \"order\": 9000,\r\n        \"name\": \"scriptPay\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"HouseholdYearProcessingStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"open\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"closed\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"printed\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"HouseholdYearStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"ok\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"okWithModifications\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"willHandleMyself\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"InsuranceCompany\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"none\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"lähiTapiola\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"pohjola\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"if\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"fennia\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"aVakuutus\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"aktia\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"pohjantähti\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"tryg\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"ålands\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"turva\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"redarnas\"\r\n      },\r\n      {\r\n        \"order\": 12,\r\n        \"name\": \"folksam\"\r\n      },\r\n      {\r\n        \"order\": 13,\r\n        \"name\": \"alandia\"\r\n      },\r\n      {\r\n        \"order\": 14,\r\n        \"name\": \"protector\"\r\n      },\r\n      {\r\n        \"order\": 999999,\r\n        \"name\": \"other\"\r\n      },\r\n      {\r\n        \"order\": 1000000,\r\n        \"name\": \"pending\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"InternationalSocialSecurityException\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"notSubjectToEarningsRelatedPensionInsurance\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"notSubjectToAccidentAndOccupationalDiseaseInsurance\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"notSubjectToUnemploymentInsurance\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"notSubjectToHealthInsurance\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"voluntaryEarningsRelatedPensionInsurance\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"noObligationToHealthInsuranceDailyAllowanceContribution\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"InternationalSocialSecurityType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"foreign\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"mixed\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"InvoiceDateKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"invoiceDate\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"dueDate\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"logicalDate\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"InvoicePaymentType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"salary\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"salaryInPast\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"IrFlags\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"noMoney\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"oneOff\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"unjustEnrichment\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"IrInsuranceExceptions\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 501,\r\n        \"name\": \"includeAll\"\r\n      },\r\n      {\r\n        \"order\": 502,\r\n        \"name\": \"includePension\"\r\n      },\r\n      {\r\n        \"order\": 503,\r\n        \"name\": \"includeHealthInsurance\"\r\n      },\r\n      {\r\n        \"order\": 505,\r\n        \"name\": \"includeUnemployment\"\r\n      },\r\n      {\r\n        \"order\": 506,\r\n        \"name\": \"includeAccidentInsurance\"\r\n      },\r\n      {\r\n        \"order\": 601,\r\n        \"name\": \"excludeAll\"\r\n      },\r\n      {\r\n        \"order\": 602,\r\n        \"name\": \"excludePension\"\r\n      },\r\n      {\r\n        \"order\": 603,\r\n        \"name\": \"excludeHealthInsurance\"\r\n      },\r\n      {\r\n        \"order\": 605,\r\n        \"name\": \"excludeUnemployment\"\r\n      },\r\n      {\r\n        \"order\": 606,\r\n        \"name\": \"excludeAccidentInsurance\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"IrRowSourceType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"manual\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"usecase\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"usecaseV02\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"Language\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"fi\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"sv\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"en\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"LegalEntityType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"person\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"company\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"personCreatedByEmployer\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"partner\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"LocalTapiolaInsuranceOrderAuthorizationType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"procuration\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"powerOfAttorney\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"apparentAuthority\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"LocalTapiolaInsuranceOrderStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"draft\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"waitingApproval\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"checked\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"sent\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"handled\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"canceled\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"LocalTapiolaInsuranceOrderType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"newWorkerInsurance\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"moveWorkerInsurance\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"newEntrepreneurInsurance\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"moveEntrepreneurInsurance\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"RowMergeOption\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"removeAllRows\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"removeImportedRows\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"MessageFrom\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"owner\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"otherParty\"\r\n      },\r\n      {\r\n        \"order\": 90,\r\n        \"name\": \"system\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"MessageThreadStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"draft\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"active\"\r\n      },\r\n      {\r\n        \"order\": 21,\r\n        \"name\": \"approved\"\r\n      },\r\n      {\r\n        \"order\": 22,\r\n        \"name\": \"rejected\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"archived\"\r\n      },\r\n      {\r\n        \"order\": 1000,\r\n        \"name\": \"template\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"MessageType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"email\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"sms\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"OnboardingStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"created\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"open\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"error\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"cancel\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"done\"\r\n      },\r\n      {\r\n        \"order\": 110,\r\n        \"name\": \"expired\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PayerSummaryReportStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"new\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"scheduled\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"succeeded\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"canceled\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"error\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"invalid\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"sending\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PaymentChannel\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"test\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"zeroPayment\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"external\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"palkkausManual\"\r\n      },\r\n      {\r\n        \"order\": 102,\r\n        \"name\": \"palkkausWS\"\r\n      },\r\n      {\r\n        \"order\": 103,\r\n        \"name\": \"palkkausPersonal\"\r\n      },\r\n      {\r\n        \"order\": 104,\r\n        \"name\": \"palkkausInvoices\"\r\n      },\r\n      {\r\n        \"order\": 105,\r\n        \"name\": \"palkkausPSD\"\r\n      },\r\n      {\r\n        \"order\": 201,\r\n        \"name\": \"palkkausCfaPaytrail\"\r\n      },\r\n      {\r\n        \"order\": 203,\r\n        \"name\": \"palkkausCfaReference\"\r\n      },\r\n      {\r\n        \"order\": 204,\r\n        \"name\": \"palkkausCfaFinvoice\"\r\n      },\r\n      {\r\n        \"order\": 205,\r\n        \"name\": \"palkkausEcfaPaytrail\"\r\n      },\r\n      {\r\n        \"order\": 206,\r\n        \"name\": \"palkkausEcfaReference\"\r\n      },\r\n      {\r\n        \"order\": 207,\r\n        \"name\": \"palkkausEcfaFinvoice\"\r\n      },\r\n      {\r\n        \"order\": 210,\r\n        \"name\": \"palkkausCfaTest\"\r\n      },\r\n      {\r\n        \"order\": 1010,\r\n        \"name\": \"accountorGo\"\r\n      },\r\n      {\r\n        \"order\": 1020,\r\n        \"name\": \"talenomOnline\"\r\n      },\r\n      {\r\n        \"order\": 1021,\r\n        \"name\": \"talenomCfa\"\r\n      },\r\n      {\r\n        \"order\": 1030,\r\n        \"name\": \"holviCfa\"\r\n      },\r\n      {\r\n        \"order\": 1040,\r\n        \"name\": \"finagoSolo\"\r\n      },\r\n      {\r\n        \"order\": 1050,\r\n        \"name\": \"procountor\"\r\n      },\r\n      {\r\n        \"order\": 1060,\r\n        \"name\": \"kevytyrittaja\"\r\n      },\r\n      {\r\n        \"order\": 1070,\r\n        \"name\": \"vismaNetvisor\"\r\n      },\r\n      {\r\n        \"order\": 1080,\r\n        \"name\": \"askelma\"\r\n      },\r\n      {\r\n        \"order\": 1090,\r\n        \"name\": \"briox\"\r\n      },\r\n      {\r\n        \"order\": 1100,\r\n        \"name\": \"lemonaid\"\r\n      },\r\n      {\r\n        \"order\": 1110,\r\n        \"name\": \"laskupiste\"\r\n      },\r\n      {\r\n        \"order\": 1120,\r\n        \"name\": \"holvi\"\r\n      },\r\n      {\r\n        \"order\": 1130,\r\n        \"name\": \"kompassi\"\r\n      },\r\n      {\r\n        \"order\": 1140,\r\n        \"name\": \"domus\"\r\n      },\r\n      {\r\n        \"order\": 1150,\r\n        \"name\": \"passeliMerit\"\r\n      },\r\n      {\r\n        \"order\": 1160,\r\n        \"name\": \"odoo\"\r\n      },\r\n      {\r\n        \"order\": 1170,\r\n        \"name\": \"ecom\"\r\n      },\r\n      {\r\n        \"order\": 1180,\r\n        \"name\": \"kitsas\"\r\n      },\r\n      {\r\n        \"order\": 1190,\r\n        \"name\": \"talenomManual\"\r\n      },\r\n      {\r\n        \"order\": 1200,\r\n        \"name\": \"hausvise\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PaymentMethod\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"sepa\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"siirto\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"test\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PaymentStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"new\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"sentToBank\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"bankTechApproval\"\r\n      },\r\n      {\r\n        \"order\": 102,\r\n        \"name\": \"bankDelivered\"\r\n      },\r\n      {\r\n        \"order\": 109,\r\n        \"name\": \"bankPartialError\"\r\n      },\r\n      {\r\n        \"order\": 110,\r\n        \"name\": \"bankError\"\r\n      },\r\n      {\r\n        \"order\": 1000,\r\n        \"name\": \"paid\"\r\n      },\r\n      {\r\n        \"order\": 8999,\r\n        \"name\": \"unknown\"\r\n      },\r\n      {\r\n        \"order\": 9999,\r\n        \"name\": \"cancelled\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PayrollStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"draft\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"paymentStarted\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"paymentSucceeded\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"paymentCanceled\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"paymentError\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"paymentAllowed\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"waitingApproval\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"waitingPartnerApproval\"\r\n      },\r\n      {\r\n        \"order\": 500,\r\n        \"name\": \"handled\"\r\n      },\r\n      {\r\n        \"order\": 1000,\r\n        \"name\": \"template\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PayStatsPeriodLength\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"year\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"halfYear\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"quarter\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"month\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"lastPayPeriod\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PayStatsKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"averageHourlyPay\"\r\n      },\r\n      {\r\n        \"order\": 9000,\r\n        \"name\": \"script\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PensionCalculation\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"employee\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"entrepreneur\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"farmer\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"partialOwner\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"athlete\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"compensation\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"boardRemuneration\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"smallEntrepreneur\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"smallFarmer\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"publicSector\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PensionCompany\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"none\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"etera\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"ilmarinen\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"elo\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"pensionsAlandia\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"varma\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"veritas\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"apteekkien\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"verso\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"kevaMunicipal\"\r\n      },\r\n      {\r\n        \"order\": 24,\r\n        \"name\": \"kevaAland\"\r\n      },\r\n      {\r\n        \"order\": 25,\r\n        \"name\": \"kevaChurch\"\r\n      },\r\n      {\r\n        \"order\": 29,\r\n        \"name\": \"kevaKela\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"kevaState\"\r\n      },\r\n      {\r\n        \"order\": 80001,\r\n        \"name\": \"valio\"\r\n      },\r\n      {\r\n        \"order\": 999999,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PensionRule\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"monthlyLowerLimit\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PeriodDateKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"paidAtDate\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"salaryDate\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"workDate\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"workDateStart\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"workDateEnd\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PeriodType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"month\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"quarter\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"year\"\r\n      },\r\n      {\r\n        \"order\": 99,\r\n        \"name\": \"custom\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PricingModel\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"palkkausFee\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"noFee\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"fixedFee\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ProductPackage\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"partnerBasic\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"partnerPro\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ProductListFilter\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"available\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"all\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"RecurringEventCreateMode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"createRecurrence\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ReportCategory\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"all\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"monthly\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"yearly\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ReportType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"example\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"monthlyDetails\"\r\n      },\r\n      {\r\n        \"order\": 110,\r\n        \"name\": \"taxMonthly4001\"\r\n      },\r\n      {\r\n        \"order\": 111,\r\n        \"name\": \"payerSummaryReport\"\r\n      },\r\n      {\r\n        \"order\": 120,\r\n        \"name\": \"monthlyPension\"\r\n      },\r\n      {\r\n        \"order\": 190,\r\n        \"name\": \"monthlyLiikekirjuri\"\r\n      },\r\n      {\r\n        \"order\": 191,\r\n        \"name\": \"monthlyLiikekirjuriLegacy\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"monthlyRapko\"\r\n      },\r\n      {\r\n        \"order\": 201,\r\n        \"name\": \"monthlyAccounting\"\r\n      },\r\n      {\r\n        \"order\": 202,\r\n        \"name\": \"monthlyAccountingExcel\"\r\n      },\r\n      {\r\n        \"order\": 1000,\r\n        \"name\": \"yearlyDetails\"\r\n      },\r\n      {\r\n        \"order\": 1001,\r\n        \"name\": \"yearEndReport\"\r\n      },\r\n      {\r\n        \"order\": 1010,\r\n        \"name\": \"yearlyWorkerSummary\"\r\n      },\r\n      {\r\n        \"order\": 1100,\r\n        \"name\": \"taxYearly7801\"\r\n      },\r\n      {\r\n        \"order\": 1200,\r\n        \"name\": \"unemployment\"\r\n      },\r\n      {\r\n        \"order\": 1210,\r\n        \"name\": \"insurance\"\r\n      },\r\n      {\r\n        \"order\": 1800,\r\n        \"name\": \"householdDeduction\"\r\n      },\r\n      {\r\n        \"order\": 1814,\r\n        \"name\": \"taxHouseholdDeduction14B\"\r\n      },\r\n      {\r\n        \"order\": 1815,\r\n        \"name\": \"taxHouseholdDeduction14BSpouseA\"\r\n      },\r\n      {\r\n        \"order\": 1816,\r\n        \"name\": \"taxHouseholdDeduction14BSpouseB\"\r\n      },\r\n      {\r\n        \"order\": 2000,\r\n        \"name\": \"salarySlip\"\r\n      },\r\n      {\r\n        \"order\": 2001,\r\n        \"name\": \"salarySlipPaid\"\r\n      },\r\n      {\r\n        \"order\": 2002,\r\n        \"name\": \"salarySlipCopy\"\r\n      },\r\n      {\r\n        \"order\": 2006,\r\n        \"name\": \"eSalarySpecification\"\r\n      },\r\n      {\r\n        \"order\": 2010,\r\n        \"name\": \"employerReport\"\r\n      },\r\n      {\r\n        \"order\": 2020,\r\n        \"name\": \"paymentReport\"\r\n      },\r\n      {\r\n        \"order\": 2021,\r\n        \"name\": \"paymentSummaryReport\"\r\n      },\r\n      {\r\n        \"order\": 2022,\r\n        \"name\": \"totalsReport\"\r\n      },\r\n      {\r\n        \"order\": 2030,\r\n        \"name\": \"earningsPaymentReport\"\r\n      },\r\n      {\r\n        \"order\": 2040,\r\n        \"name\": \"accountingReport\"\r\n      },\r\n      {\r\n        \"order\": 2050,\r\n        \"name\": \"invoice\"\r\n      },\r\n      {\r\n        \"order\": 2060,\r\n        \"name\": \"invoiceList\"\r\n      },\r\n      {\r\n        \"order\": 2200,\r\n        \"name\": \"employmentContract\"\r\n      },\r\n      {\r\n        \"order\": 2300,\r\n        \"name\": \"authorization\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"Role\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"accountant\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"trustedPartner\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"accountantCandidate\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"pricingPartner\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"sepaPartner\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"SalaryDateKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"inPast\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"SalaryKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"fixedSalary\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"hourlySalary\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"monthlySalary\"\r\n      },\r\n      {\r\n        \"order\": 50,\r\n        \"name\": \"compensation\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"totalWorkerPayment\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"totalEmployerPayment\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"SalaryType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"tyel\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"yel\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"compensation\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"LegacyServiceModel\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"shared\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"partnerOnly\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"SettingsStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"checked\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"pending\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"SharingUriType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"url\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"employer\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TaxcardApiIncomeType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 24,\r\n        \"name\": \"salary\"\r\n      },\r\n      {\r\n        \"order\": 27,\r\n        \"name\": \"dividendsForWorkAsSalary\"\r\n      },\r\n      {\r\n        \"order\": 28,\r\n        \"name\": \"personnelFundIncome\"\r\n      },\r\n      {\r\n        \"order\": 29,\r\n        \"name\": \"salaryOneOff\"\r\n      },\r\n      {\r\n        \"order\": 33,\r\n        \"name\": \"compensationForUseEarnedIncome\"\r\n      },\r\n      {\r\n        \"order\": 34,\r\n        \"name\": \"compensationForUseCapitalIncome\"\r\n      },\r\n      {\r\n        \"order\": 35,\r\n        \"name\": \"compensationVatResponsible\"\r\n      },\r\n      {\r\n        \"order\": 36,\r\n        \"name\": \"compensation\"\r\n      },\r\n      {\r\n        \"order\": 37,\r\n        \"name\": \"dividendsForWorkAsCompensation\"\r\n      },\r\n      {\r\n        \"order\": 38,\r\n        \"name\": \"athletePay\"\r\n      },\r\n      {\r\n        \"order\": 39,\r\n        \"name\": \"otherTaxableIncome\"\r\n      },\r\n      {\r\n        \"order\": 40,\r\n        \"name\": \"otherTaxableIncomeOneOff\"\r\n      },\r\n      {\r\n        \"order\": 42,\r\n        \"name\": \"employeeStockOption\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TaxcardApprovalMethod\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"assureWaiting\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"approve\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"reject\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TaxcardCalcDiffCheck\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"getDiff\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"noCheck\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"commitDiff\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TaxCardIncomeType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"unknown\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"salaxyCalculation\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"previousEmployerSalaries\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"externalSalaries\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"sharedCardExtSum\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"diff\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TaxcardState\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"new\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"approved\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"employerAdded\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"verifiedVero\"\r\n      },\r\n      {\r\n        \"order\": 300,\r\n        \"name\": \"sharedWaiting\"\r\n      },\r\n      {\r\n        \"order\": 310,\r\n        \"name\": \"sharedApproved\"\r\n      },\r\n      {\r\n        \"order\": 320,\r\n        \"name\": \"sharedRejected\"\r\n      },\r\n      {\r\n        \"order\": 330,\r\n        \"name\": \"sharedRejectedWithoutOpen\"\r\n      },\r\n      {\r\n        \"order\": 500,\r\n        \"name\": \"shared\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TaxcardKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"noTaxCard\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"auto\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"defaultYearly\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"replacement\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"noWithholdingHousehold\"\r\n      },\r\n      {\r\n        \"order\": 99,\r\n        \"name\": \"others\"\r\n      },\r\n      {\r\n        \"order\": 900,\r\n        \"name\": \"historical\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TaxcardValidity\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"valid\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"validJanuary\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"future\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"expired\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TaxAtSourceKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"noDeduction\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"monthlyDeduction\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"dailyDeduction\"\r\n      },\r\n      {\r\n        \"order\": 40,\r\n        \"name\": \"fixedValues\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TaxDeductionWorkCategories\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"none\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"householdwork\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"carework\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"homeImprovement\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"ownPropety\"\r\n      },\r\n      {\r\n        \"order\": 16,\r\n        \"name\": \"relativesProperty\"\r\n      },\r\n      {\r\n        \"order\": 32,\r\n        \"name\": \"oilHeatingReplacementWork\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TaxReportHandling\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"noZeroSalaryReport\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"noMonthlyReport\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"always\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TaxWithholdingKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"percentage\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"fixedValue\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TesSubtype\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"notSelected\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"constructionCarpenter\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"constructionFloor\"\r\n      },\r\n      {\r\n        \"order\": 105,\r\n        \"name\": \"constructionOther\"\r\n      },\r\n      {\r\n        \"order\": 109,\r\n        \"name\": \"constructionFreeContract\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TestEnum\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"valueZero\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"valueOne\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"valueTwo\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"valueThree\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"valueFour\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"valueFive\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"valueSix\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"valueSeven\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"valueEight\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"valueNine\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"valueTen\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ThreadedMessageType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"text\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"blobFile\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"calculation\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"payroll\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"workerAccount\"\r\n      },\r\n      {\r\n        \"order\": 500,\r\n        \"name\": \"email\"\r\n      },\r\n      {\r\n        \"order\": 501,\r\n        \"name\": \"salaxyEmail\"\r\n      },\r\n      {\r\n        \"order\": 510,\r\n        \"name\": \"sms\"\r\n      },\r\n      {\r\n        \"order\": 511,\r\n        \"name\": \"salaxySms\"\r\n      },\r\n      {\r\n        \"order\": 512,\r\n        \"name\": \"timer\"\r\n      },\r\n      {\r\n        \"order\": 513,\r\n        \"name\": \"timerEdited\"\r\n      },\r\n      {\r\n        \"order\": 514,\r\n        \"name\": \"hourlyReport\"\r\n      },\r\n      {\r\n        \"order\": 515,\r\n        \"name\": \"timeReport\"\r\n      },\r\n      {\r\n        \"order\": 516,\r\n        \"name\": \"absence\"\r\n      },\r\n      {\r\n        \"order\": 517,\r\n        \"name\": \"annualLeave\"\r\n      },\r\n      {\r\n        \"order\": 518,\r\n        \"name\": \"calcRow\"\r\n      },\r\n      {\r\n        \"order\": 519,\r\n        \"name\": \"travel\"\r\n      },\r\n      {\r\n        \"order\": 520,\r\n        \"name\": \"expense\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TimeRatePayKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"paidSickLeave\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"training\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"military\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"travel\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"UnemploymentPayrollLimitStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"higher\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"UnionPaymentType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"notSelected\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"raksaNormal\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"raksaUnemploymentOnly\"\r\n      },\r\n      {\r\n        \"order\": 9999,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"Unit\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"hours\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"days\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"weeks\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"period\"\r\n      },\r\n      {\r\n        \"order\": 1000,\r\n        \"name\": \"one\"\r\n      },\r\n      {\r\n        \"order\": 1001,\r\n        \"name\": \"count\"\r\n      },\r\n      {\r\n        \"order\": 1002,\r\n        \"name\": \"percent\"\r\n      },\r\n      {\r\n        \"order\": 1004,\r\n        \"name\": \"kilometers\"\r\n      },\r\n      {\r\n        \"order\": 2000,\r\n        \"name\": \"euro\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"UsecaseActionType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"clientScript\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"clientScriptAsync\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"serverScript\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"serverScriptAsync\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"webServiceCall\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"powerAutomateFlow\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"UsecaseStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"active\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"inactive\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"VarmaPensionOrderAction\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"newYel\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"newTyel\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"move\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"VarmaPensionOrderYelPayer\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"entrepreneur\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"company\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"VatRate\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"none\"\r\n      },\r\n      {\r\n        \"order\": 10000,\r\n        \"name\": \"vat0000\"\r\n      },\r\n      {\r\n        \"order\": 11000,\r\n        \"name\": \"vat1000\"\r\n      },\r\n      {\r\n        \"order\": 11350,\r\n        \"name\": \"vat1350\"\r\n      },\r\n      {\r\n        \"order\": 11400,\r\n        \"name\": \"vat1400\"\r\n      },\r\n      {\r\n        \"order\": 12400,\r\n        \"name\": \"vat2400\"\r\n      },\r\n      {\r\n        \"order\": 12550,\r\n        \"name\": \"vat2550\"\r\n      },\r\n      {\r\n        \"order\": 99999,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"WageBasis\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"monthly\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"hourly\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"performanceBased\"\r\n      },\r\n      {\r\n        \"order\": 999,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"WebSiteUserRole\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"none\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"household\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"worker\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"company\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"WorkerSalaryNotification\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"always\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"silent\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"WorkerSalarySlipDeliveryMethod\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"default\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"payslip\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"omapalkka\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"WorkflowEventFeatures\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"none\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"isActive\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"isEditable\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"isRemovable\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"isOnHold\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"YearEndAdminCheck\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"notChecked\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"ok\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"okWithWarning\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"errors\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"YearEndFeedbackCalculationType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"unknown\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"salaxyPayment\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"external\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"correction\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"YearEndUserFeedback\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"notChecked\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"ok\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"okWithModifications\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"willHandleMyself\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"noYearlyReports\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"YtjCompanyType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"noCompanyType\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"housingCooperative\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"condominium\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"asoAssociation\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"openCompany\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"association\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"hypoAssociation\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"mutualRealEstateCompany\"\r\n      },\r\n      {\r\n        \"order\": 13,\r\n        \"name\": \"ky\"\r\n      },\r\n      {\r\n        \"order\": 14,\r\n        \"name\": \"osuuskunta\"\r\n      },\r\n      {\r\n        \"order\": 15,\r\n        \"name\": \"cooperativeBank\"\r\n      },\r\n      {\r\n        \"order\": 16,\r\n        \"name\": \"oy\"\r\n      },\r\n      {\r\n        \"order\": 17,\r\n        \"name\": \"publicLimitedCompany\"\r\n      },\r\n      {\r\n        \"order\": 18,\r\n        \"name\": \"foundation\"\r\n      },\r\n      {\r\n        \"order\": 19,\r\n        \"name\": \"branch\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"savingsBank\"\r\n      },\r\n      {\r\n        \"order\": 21,\r\n        \"name\": \"financialAssociation\"\r\n      },\r\n      {\r\n        \"order\": 22,\r\n        \"name\": \"stateEstablishment\"\r\n      },\r\n      {\r\n        \"order\": 25,\r\n        \"name\": \"insuranceAssociation\"\r\n      },\r\n      {\r\n        \"order\": 26,\r\n        \"name\": \"privateEntrepreneur\"\r\n      },\r\n      {\r\n        \"order\": 29,\r\n        \"name\": \"otherAssociation\"\r\n      },\r\n      {\r\n        \"order\": 31,\r\n        \"name\": \"specialPurposeAssociation\"\r\n      },\r\n      {\r\n        \"order\": 35,\r\n        \"name\": \"forestCareAssociation\"\r\n      },\r\n      {\r\n        \"order\": 38,\r\n        \"name\": \"otherFinancialAssociation\"\r\n      },\r\n      {\r\n        \"order\": 46,\r\n        \"name\": \"religiousCommunity\"\r\n      },\r\n      {\r\n        \"order\": 50,\r\n        \"name\": \"jointInterestGroups\"\r\n      },\r\n      {\r\n        \"order\": 51,\r\n        \"name\": \"taxableGrouping\"\r\n      },\r\n      {\r\n        \"order\": 53,\r\n        \"name\": \"deathEstate\"\r\n      },\r\n      {\r\n        \"order\": 58,\r\n        \"name\": \"mutualInsuranceAssociation\"\r\n      },\r\n      {\r\n        \"order\": 60,\r\n        \"name\": \"foreignOrganisation\"\r\n      },\r\n      {\r\n        \"order\": 61,\r\n        \"name\": \"municipalEstablishment\"\r\n      },\r\n      {\r\n        \"order\": 62,\r\n        \"name\": \"federationOfMunicipalitiesEstablishment\"\r\n      },\r\n      {\r\n        \"order\": 64,\r\n        \"name\": \"alandFederation\"\r\n      },\r\n      {\r\n        \"order\": 83,\r\n        \"name\": \"europeanCooperative\"\r\n      },\r\n      {\r\n        \"order\": 84,\r\n        \"name\": \"europeanCooperativeBank\"\r\n      },\r\n      {\r\n        \"order\": 90,\r\n        \"name\": \"reindeerHerdingCooperative\"\r\n      },\r\n      {\r\n        \"order\": 999,\r\n        \"name\": \"unknown\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CarBenefitKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"limitedCarBenefit\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"fullCarBenefit\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"BicycleBenefitKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"noDeduction\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"singleDeduction\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"periodicalDeduction\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"UnionPaymentKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"fixed\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"percentage\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"percentageAndLimits\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"raksaNormal\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"raksaUnemploymentOnly\"\r\n      },\r\n      {\r\n        \"order\": 9999,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"NonProfitOrgKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 357,\r\n        \"name\": \"kilometreAllowance\"\r\n      },\r\n      {\r\n        \"order\": 358,\r\n        \"name\": \"dailyAllowance\"\r\n      },\r\n      {\r\n        \"order\": 1358,\r\n        \"name\": \"accomodationAllowance\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"SubsidisedCommuteKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"noDeduction\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"singleDeduction\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"periodicalDeduction\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"MealBenefitKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"cateringContract\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"mealTicket\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"taxableAmount\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"mealAllowance\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"institute\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"teacher\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"restaurantWorker\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"collectedReimbursement\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"DailyAllowanceKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"fullDailyAllowance\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"partialDailyAllowance\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"internationalDailyAllowance\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"mealAllowance\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"BoardKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"RemunerationKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 202,\r\n        \"name\": \"initiativeFee\"\r\n      },\r\n      {\r\n        \"order\": 203,\r\n        \"name\": \"bonusPay\"\r\n      },\r\n      {\r\n        \"order\": 220,\r\n        \"name\": \"commission\"\r\n      },\r\n      {\r\n        \"order\": 223,\r\n        \"name\": \"performanceBonus\"\r\n      },\r\n      {\r\n        \"order\": 226,\r\n        \"name\": \"shareIssueForEmployees\"\r\n      },\r\n      {\r\n        \"order\": 233,\r\n        \"name\": \"profitSharingBonus\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"OtherCompensationKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 210,\r\n        \"name\": \"meetingFee\"\r\n      },\r\n      {\r\n        \"order\": 214,\r\n        \"name\": \"lectureFee\"\r\n      },\r\n      {\r\n        \"order\": 215,\r\n        \"name\": \"positionOfTrustCompensation\"\r\n      },\r\n      {\r\n        \"order\": 225,\r\n        \"name\": \"accruedTimeOffCompensation\"\r\n      },\r\n      {\r\n        \"order\": 308,\r\n        \"name\": \"membershipOfGoverningBodyCompensation\"\r\n      },\r\n      {\r\n        \"order\": 310,\r\n        \"name\": \"monetaryGiftForEmployees\"\r\n      },\r\n      {\r\n        \"order\": 313,\r\n        \"name\": \"useCompensationAsEarnedIncome\"\r\n      },\r\n      {\r\n        \"order\": 314,\r\n        \"name\": \"useCompensationAsCapitalIncome\"\r\n      },\r\n      {\r\n        \"order\": 316,\r\n        \"name\": \"otherTaxableIncomeAsEarnedIncome\"\r\n      },\r\n      {\r\n        \"order\": 320,\r\n        \"name\": \"stockOptionsAndGrants\"\r\n      },\r\n      {\r\n        \"order\": 326,\r\n        \"name\": \"employeeInventionCompensation\"\r\n      },\r\n      {\r\n        \"order\": 332,\r\n        \"name\": \"capitalIncomePayment\"\r\n      },\r\n      {\r\n        \"order\": 339,\r\n        \"name\": \"workEffortBasedDividendsAsWage\"\r\n      },\r\n      {\r\n        \"order\": 340,\r\n        \"name\": \"workEffortBasedDividendsAsNonWage\"\r\n      },\r\n      {\r\n        \"order\": 343,\r\n        \"name\": \"employeeStockOption\"\r\n      },\r\n      {\r\n        \"order\": 361,\r\n        \"name\": \"employeeStockOptionWithLowerPrice\"\r\n      },\r\n      {\r\n        \"order\": 366,\r\n        \"name\": \"copyrightRoyaltiesEarnedIncome\"\r\n      },\r\n      {\r\n        \"order\": 367,\r\n        \"name\": \"stockGrantPaidInMoney\"\r\n      },\r\n      {\r\n        \"order\": 368,\r\n        \"name\": \"employeeStockOptionPaidInMoney\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PaidSickLeaveKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"paidSickLeaveSalary\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"paidSickLeaveHourlySalary\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"paidSickLeaveMonthlySalary\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"WorkingTimeCompensationKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 205,\r\n        \"name\": \"emergencyWorkCompensation\"\r\n      },\r\n      {\r\n        \"order\": 206,\r\n        \"name\": \"eveningWorkCompensation\"\r\n      },\r\n      {\r\n        \"order\": 207,\r\n        \"name\": \"eveningShiftAllowance\"\r\n      },\r\n      {\r\n        \"order\": 211,\r\n        \"name\": \"saturdayPay\"\r\n      },\r\n      {\r\n        \"order\": 212,\r\n        \"name\": \"extraWorkPremium\"\r\n      },\r\n      {\r\n        \"order\": 216,\r\n        \"name\": \"otherCompensation\"\r\n      },\r\n      {\r\n        \"order\": 217,\r\n        \"name\": \"waitingTimeCompensation\"\r\n      },\r\n      {\r\n        \"order\": 221,\r\n        \"name\": \"sundayWorkCompensation\"\r\n      },\r\n      {\r\n        \"order\": 230,\r\n        \"name\": \"standByCompensation\"\r\n      },\r\n      {\r\n        \"order\": 232,\r\n        \"name\": \"weeklyRestCompensation\"\r\n      },\r\n      {\r\n        \"order\": 235,\r\n        \"name\": \"overtimeCompensation\"\r\n      },\r\n      {\r\n        \"order\": 236,\r\n        \"name\": \"nightWorkAllowance\"\r\n      },\r\n      {\r\n        \"order\": 237,\r\n        \"name\": \"nightShiftCompensation\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"WorkingTimeCompensationPricing\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"percent\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"fixed\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"EmploymentTerminationKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 208,\r\n        \"name\": \"noticePeriodCompensation\"\r\n      },\r\n      {\r\n        \"order\": 224,\r\n        \"name\": \"monetaryWorkingTimeBankCompensation\"\r\n      },\r\n      {\r\n        \"order\": 229,\r\n        \"name\": \"terminationAndLayOffDamages\"\r\n      },\r\n      {\r\n        \"order\": 231,\r\n        \"name\": \"voluntaryTerminationCompensation\"\r\n      },\r\n      {\r\n        \"order\": 338,\r\n        \"name\": \"pensionPaidByEmployer\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ForeclosureKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"fixed\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"periodic\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"nonPeriodic\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TotalWorkerPaymentKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"totalWorkerPayment\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"totalWorkerWorkerPaymentExcludingExpenses\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"totalWorkerPaymentAndTax\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"totalWorkerWorkerPaymentAndTaxExcludingExpenses\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TransactionCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"unknown\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"ignored\"\r\n      },\r\n      {\r\n        \"order\": 201,\r\n        \"name\": \"timeRatePay\"\r\n      },\r\n      {\r\n        \"order\": 202,\r\n        \"name\": \"initiativeFee\"\r\n      },\r\n      {\r\n        \"order\": 203,\r\n        \"name\": \"bonusPay\"\r\n      },\r\n      {\r\n        \"order\": 204,\r\n        \"name\": \"complementaryWagePaidDuringBenefitPeriod\"\r\n      },\r\n      {\r\n        \"order\": 205,\r\n        \"name\": \"emergencyWorkCompensation\"\r\n      },\r\n      {\r\n        \"order\": 206,\r\n        \"name\": \"eveningWorkCompensation\"\r\n      },\r\n      {\r\n        \"order\": 207,\r\n        \"name\": \"eveningShiftAllowance\"\r\n      },\r\n      {\r\n        \"order\": 208,\r\n        \"name\": \"noticePeriodCompensation\"\r\n      },\r\n      {\r\n        \"order\": 209,\r\n        \"name\": \"kilometreAllowanceTaxable\"\r\n      },\r\n      {\r\n        \"order\": 210,\r\n        \"name\": \"meetingFee\"\r\n      },\r\n      {\r\n        \"order\": 211,\r\n        \"name\": \"saturdayPay\"\r\n      },\r\n      {\r\n        \"order\": 212,\r\n        \"name\": \"extraWorkPremium\"\r\n      },\r\n      {\r\n        \"order\": 213,\r\n        \"name\": \"holidayBonus\"\r\n      },\r\n      {\r\n        \"order\": 214,\r\n        \"name\": \"lectureFee\"\r\n      },\r\n      {\r\n        \"order\": 215,\r\n        \"name\": \"compensationForTrustPosition\"\r\n      },\r\n      {\r\n        \"order\": 216,\r\n        \"name\": \"otherCompensation\"\r\n      },\r\n      {\r\n        \"order\": 217,\r\n        \"name\": \"waitingTimeCompensation\"\r\n      },\r\n      {\r\n        \"order\": 218,\r\n        \"name\": \"workingConditionCompensation\"\r\n      },\r\n      {\r\n        \"order\": 219,\r\n        \"name\": \"partialPayDuringSickLeave\"\r\n      },\r\n      {\r\n        \"order\": 220,\r\n        \"name\": \"commission\"\r\n      },\r\n      {\r\n        \"order\": 221,\r\n        \"name\": \"sundayWorkCompensation\"\r\n      },\r\n      {\r\n        \"order\": 222,\r\n        \"name\": \"benefitArisingFromSyntheticOption\"\r\n      },\r\n      {\r\n        \"order\": 223,\r\n        \"name\": \"performanceBonus\"\r\n      },\r\n      {\r\n        \"order\": 224,\r\n        \"name\": \"monetaryCompensationFromWorkingTimeBank\"\r\n      },\r\n      {\r\n        \"order\": 225,\r\n        \"name\": \"compensationForAccruedTimeOff\"\r\n      },\r\n      {\r\n        \"order\": 226,\r\n        \"name\": \"shareIssueForEmployees\"\r\n      },\r\n      {\r\n        \"order\": 227,\r\n        \"name\": \"contractPay\"\r\n      },\r\n      {\r\n        \"order\": 229,\r\n        \"name\": \"damagesInConjunctionWithTermination\"\r\n      },\r\n      {\r\n        \"order\": 230,\r\n        \"name\": \"standByCompensation\"\r\n      },\r\n      {\r\n        \"order\": 231,\r\n        \"name\": \"voluntaryCompensationInConjunctionWithTermination\"\r\n      },\r\n      {\r\n        \"order\": 232,\r\n        \"name\": \"weeklyRestCompensation\"\r\n      },\r\n      {\r\n        \"order\": 233,\r\n        \"name\": \"profitSharingBonus\"\r\n      },\r\n      {\r\n        \"order\": 234,\r\n        \"name\": \"annualHolidayCompensation\"\r\n      },\r\n      {\r\n        \"order\": 235,\r\n        \"name\": \"overtimeCompensation\"\r\n      },\r\n      {\r\n        \"order\": 236,\r\n        \"name\": \"nightWorkAllowance\"\r\n      },\r\n      {\r\n        \"order\": 237,\r\n        \"name\": \"nightShiftCompensation\"\r\n      },\r\n      {\r\n        \"order\": 238,\r\n        \"name\": \"otherRegularCompensation\"\r\n      },\r\n      {\r\n        \"order\": 239,\r\n        \"name\": \"compensationForUnusedCompensatoryLeave\"\r\n      },\r\n      {\r\n        \"order\": 301,\r\n        \"name\": \"accommodationBenefit\"\r\n      },\r\n      {\r\n        \"order\": 302,\r\n        \"name\": \"interestBenefitForHousingLoan\"\r\n      },\r\n      {\r\n        \"order\": 303,\r\n        \"name\": \"mealAllowance\"\r\n      },\r\n      {\r\n        \"order\": 304,\r\n        \"name\": \"carBenefit\"\r\n      },\r\n      {\r\n        \"order\": 308,\r\n        \"name\": \"compensationForGoverningBodyMembership\"\r\n      },\r\n      {\r\n        \"order\": 309,\r\n        \"name\": \"shareOfReserveDrawnFromPersonnelFund\"\r\n      },\r\n      {\r\n        \"order\": 310,\r\n        \"name\": \"monetaryGiftForEmployees\"\r\n      },\r\n      {\r\n        \"order\": 311,\r\n        \"name\": \"kilometreAllowanceTaxExempt\"\r\n      },\r\n      {\r\n        \"order\": 312,\r\n        \"name\": \"treatmentFeeForMunicipalVeterinarian\"\r\n      },\r\n      {\r\n        \"order\": 313,\r\n        \"name\": \"compensationForUseEarnedIncome\"\r\n      },\r\n      {\r\n        \"order\": 314,\r\n        \"name\": \"compensationForUseCapitalIncome\"\r\n      },\r\n      {\r\n        \"order\": 315,\r\n        \"name\": \"otherTaxableBenefitForEmployees\"\r\n      },\r\n      {\r\n        \"order\": 316,\r\n        \"name\": \"otherTaxableIncomeDeemedEarnedIncome\"\r\n      },\r\n      {\r\n        \"order\": 317,\r\n        \"name\": \"otherFringeBenefit\"\r\n      },\r\n      {\r\n        \"order\": 319,\r\n        \"name\": \"kinshipCarersFee\"\r\n      },\r\n      {\r\n        \"order\": 320,\r\n        \"name\": \"stockOptions\"\r\n      },\r\n      {\r\n        \"order\": 321,\r\n        \"name\": \"wagesPaidBySubstitutePayerIncludingSocialInsurance\"\r\n      },\r\n      {\r\n        \"order\": 322,\r\n        \"name\": \"wagesPaidBySubstitutePayerIncludingEarningsRelatedPensionInsurance\"\r\n      },\r\n      {\r\n        \"order\": 323,\r\n        \"name\": \"wagesPaidBySubstitutePayerIncludingUnemploymentInsurance\"\r\n      },\r\n      {\r\n        \"order\": 324,\r\n        \"name\": \"wagesPaidBySubstitutePayerIncludingAccidentAndOccupationalDiseaseInsurance\"\r\n      },\r\n      {\r\n        \"order\": 325,\r\n        \"name\": \"wagesPaidBySubstitutePayerIncludingHealthInsurance\"\r\n      },\r\n      {\r\n        \"order\": 326,\r\n        \"name\": \"compensationForEmployeeInvention\"\r\n      },\r\n      {\r\n        \"order\": 327,\r\n        \"name\": \"reimbursementOfPrivateCaretakersExpenses\"\r\n      },\r\n      {\r\n        \"order\": 328,\r\n        \"name\": \"privateCaretakersFee\"\r\n      },\r\n      {\r\n        \"order\": 329,\r\n        \"name\": \"reimbursementOfFamilyDayCareProvidersExpenses\"\r\n      },\r\n      {\r\n        \"order\": 330,\r\n        \"name\": \"telephoneBenefit\"\r\n      },\r\n      {\r\n        \"order\": 331,\r\n        \"name\": \"dailyAllowance\"\r\n      },\r\n      {\r\n        \"order\": 332,\r\n        \"name\": \"capitalIncomePayment\"\r\n      },\r\n      {\r\n        \"order\": 334,\r\n        \"name\": \"mealBenefit\"\r\n      },\r\n      {\r\n        \"order\": 335,\r\n        \"name\": \"reimbursementOfCostsPaidToConciliator\"\r\n      },\r\n      {\r\n        \"order\": 336,\r\n        \"name\": \"nonWageCompensationForWork\"\r\n      },\r\n      {\r\n        \"order\": 337,\r\n        \"name\": \"supplementaryDailyAllowancePaidByEmployerSpecificHealthInsuranceFund\"\r\n      },\r\n      {\r\n        \"order\": 338,\r\n        \"name\": \"pensionPaidByEmployer\"\r\n      },\r\n      {\r\n        \"order\": 339,\r\n        \"name\": \"dividendsBasedOnWages\"\r\n      },\r\n      {\r\n        \"order\": 340,\r\n        \"name\": \"dividendsBasedOnNonWage\"\r\n      },\r\n      {\r\n        \"order\": 341,\r\n        \"name\": \"employerSubsidisedCommuterTicketTaxExempt\"\r\n      },\r\n      {\r\n        \"order\": 342,\r\n        \"name\": \"employerSubsidisedCommuterTicketTaxable\"\r\n      },\r\n      {\r\n        \"order\": 343,\r\n        \"name\": \"employeeStockOption\"\r\n      },\r\n      {\r\n        \"order\": 350,\r\n        \"name\": \"wagesTransferredToAthletesSpecialFund\"\r\n      },\r\n      {\r\n        \"order\": 351,\r\n        \"name\": \"wagesPaidFromAthletesSpecialFund\"\r\n      },\r\n      {\r\n        \"order\": 352,\r\n        \"name\": \"wagesForInsurancePurposes\"\r\n      },\r\n      {\r\n        \"order\": 353,\r\n        \"name\": \"taxableReimbursementOfExpenses\"\r\n      },\r\n      {\r\n        \"order\": 354,\r\n        \"name\": \"privateDayCareAllowanceMunicipalSupplement\"\r\n      },\r\n      {\r\n        \"order\": 355,\r\n        \"name\": \"privateDayCareAllowanceWages\"\r\n      },\r\n      {\r\n        \"order\": 356,\r\n        \"name\": \"privateDayCareAllowanceNonWage\"\r\n      },\r\n      {\r\n        \"order\": 357,\r\n        \"name\": \"kilometreAllowancePaidByNonProfitOrganisation\"\r\n      },\r\n      {\r\n        \"order\": 358,\r\n        \"name\": \"dailyAllowancePaidByNonProfitOrganisation\"\r\n      },\r\n      {\r\n        \"order\": 359,\r\n        \"name\": \"unjustEnrichment\"\r\n      },\r\n      {\r\n        \"order\": 361,\r\n        \"name\": \"employeeStockOptionLowerMarketPrice\"\r\n      },\r\n      {\r\n        \"order\": 362,\r\n        \"name\": \"royaltyPaidToNonResidentTaxpayer\"\r\n      },\r\n      {\r\n        \"order\": 363,\r\n        \"name\": \"bicycleBenefitTaxExempt\"\r\n      },\r\n      {\r\n        \"order\": 364,\r\n        \"name\": \"bicycleBenefitTaxable\"\r\n      },\r\n      {\r\n        \"order\": 365,\r\n        \"name\": \"conditionalStockOptions\"\r\n      },\r\n      {\r\n        \"order\": 366,\r\n        \"name\": \"copyrightRoyaltiesEarnedIncome\"\r\n      },\r\n      {\r\n        \"order\": 367,\r\n        \"name\": \"stockGrantPaidInMoney\"\r\n      },\r\n      {\r\n        \"order\": 368,\r\n        \"name\": \"employeeStockOptionPaidInMoney\"\r\n      },\r\n      {\r\n        \"order\": 369,\r\n        \"name\": \"earningsFromJuELEmployerToLightEntrepreneur\"\r\n      },\r\n      {\r\n        \"order\": 401,\r\n        \"name\": \"compensationCollectedForCarBenefit\"\r\n      },\r\n      {\r\n        \"order\": 402,\r\n        \"name\": \"withholdingTax\"\r\n      },\r\n      {\r\n        \"order\": 403,\r\n        \"name\": \"electedOfficialFee\"\r\n      },\r\n      {\r\n        \"order\": 404,\r\n        \"name\": \"taxAtSource\"\r\n      },\r\n      {\r\n        \"order\": 405,\r\n        \"name\": \"taxAtSourceDeduction\"\r\n      },\r\n      {\r\n        \"order\": 406,\r\n        \"name\": \"wagesPaid\"\r\n      },\r\n      {\r\n        \"order\": 407,\r\n        \"name\": \"reimbursementCollectedForOtherFringeBenefits\"\r\n      },\r\n      {\r\n        \"order\": 408,\r\n        \"name\": \"otherItemDeductibleFromNetWage\"\r\n      },\r\n      {\r\n        \"order\": 409,\r\n        \"name\": \"netWage\"\r\n      },\r\n      {\r\n        \"order\": 410,\r\n        \"name\": \"employerPaidPremiumForCollectiveAdditionalPensionInsurance\"\r\n      },\r\n      {\r\n        \"order\": 411,\r\n        \"name\": \"employerPaidPremiumForCollectiveAdditionalPensionInsuranceEmployeesContribution\"\r\n      },\r\n      {\r\n        \"order\": 412,\r\n        \"name\": \"employeesHealthInsuranceContribution\"\r\n      },\r\n      {\r\n        \"order\": 413,\r\n        \"name\": \"employeesPensionInsuranceContribution\"\r\n      },\r\n      {\r\n        \"order\": 414,\r\n        \"name\": \"employeesUnemploymentInsuranceContribution\"\r\n      },\r\n      {\r\n        \"order\": 415,\r\n        \"name\": \"reimbursementForEmployerSubsidisedCommuterTicket\"\r\n      },\r\n      {\r\n        \"order\": 416,\r\n        \"name\": \"taxPaidAbroad\"\r\n      },\r\n      {\r\n        \"order\": 417,\r\n        \"name\": \"distraint\"\r\n      },\r\n      {\r\n        \"order\": 418,\r\n        \"name\": \"voluntaryIndividualPensionInsurancePremium\"\r\n      },\r\n      {\r\n        \"order\": 419,\r\n        \"name\": \"deductionBeforeWithholding\"\r\n      },\r\n      {\r\n        \"order\": 420,\r\n        \"name\": \"reimbursementCollectedForBicycleBenefit\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TrainingKind\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"trainingSalary\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"trainingHourlySalary\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"trainingMonthlySalary\"\r\n      }\r\n    ]\r\n  }\r\n];","/**\r\n * This data is generated from\r\n * ****************************************************\r\n * DEVELOPERS NOTE: COPY from https://test-api.salaxy.com/docs/EnumJson/ir / http://localhost:82/docs/EnumJson/ir\r\n * DO NOT EDIT DIRECTLY\r\n * @ignore\r\n */\r\n export const generatedIrEnumData = [\r\n  {\r\n    \"name\": \"ActionCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"newReport\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"replacementReport\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AddressType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"addressInHomeCountry\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"addressInTheCountryOfWork\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AgeGroupCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"a\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"b\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"c\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"u\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"AllowanceCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"mealAllowance\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"partialDailyAllowance\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"fullDailyAllowance\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"internationalDailyAllowance\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"taxExemptReimbursementsAbroad\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ApiValidationErrorType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"general\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"required\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"invalid\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"warning\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"BenefitCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"accommodationBenefit\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"telephoneBenefit\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"mealBenefit\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"otherBenefits\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CalcGroup\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"baseSalary\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"salaryAdditions\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"benefits\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"expenses\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"deductions\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"otherNoPayment\"\r\n      },\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"totals\"\r\n      },\r\n      {\r\n        \"order\": 200,\r\n        \"name\": \"disabled\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"CarBenefitCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"limitedCarBenefit\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"fullCarBenefit\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"DeliveryDataType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 100,\r\n        \"name\": \"earningsPaymentReports\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"employersSeparateReports\"\r\n      },\r\n      {\r\n        \"order\": 102,\r\n        \"name\": \"benefitsPaymentReports\"\r\n      },\r\n      {\r\n        \"order\": 103,\r\n        \"name\": \"recordSubscription\"\r\n      },\r\n      {\r\n        \"order\": 104,\r\n        \"name\": \"messages\"\r\n      },\r\n      {\r\n        \"order\": 105,\r\n        \"name\": \"cancellationOfEarningsPaymentReports\"\r\n      },\r\n      {\r\n        \"order\": 106,\r\n        \"name\": \"cancellationOfEmployersSeparateReports\"\r\n      },\r\n      {\r\n        \"order\": 107,\r\n        \"name\": \"cancellationOfBenefitsPaymentReports\"\r\n      },\r\n      {\r\n        \"order\": 108,\r\n        \"name\": \"cancellationOfARecordSubscription\"\r\n      },\r\n      {\r\n        \"order\": 109,\r\n        \"name\": \"cancellationOfARecordContainingEarningsPaymentReports\"\r\n      },\r\n      {\r\n        \"order\": 110,\r\n        \"name\": \"cancellationOfARecordContainingEmployersSeparateReports\"\r\n      },\r\n      {\r\n        \"order\": 111,\r\n        \"name\": \"cancellationOfARecordContainingBenefitsPaymentReports\"\r\n      },\r\n      {\r\n        \"order\": 112,\r\n        \"name\": \"cancellationOfARecordContainingARecordSubscription\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"EarningsPaymentReportStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"new\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"scheduled\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"succeeded\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"canceled\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"error\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"invalid\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"EmploymentCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"fullTime\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"partTime\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"notAvailable\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"EmploymentEndingCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"employeesResignation\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"other\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"terminationGroundsRelatedToEmployeesPerson\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"financialAndProductionRelatedGrounds\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"jointAgreement\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"retirement\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"terminationOfaFixedTermEmployment\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"EmploymentEndingType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"kevaCodes\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"bankOfFinlandCodes\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"incomesRegisterCodes\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"EmploymentRegType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"kevasGroundsForRegistration\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"bankOfFinlandsGroundsForRegistration\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ExceptionCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"noObligationToSocialInsurance\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"noObligationToHealthInsurance\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"noObligationToEarningsRelatedPensionInsurance\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"noObligationToAccidentAndOccupationalDiseaseInsurance\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"noObligationToUnemploymentInsurance\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"notSubjectToSocialInsurance\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"notSubjectToEarningsRelatedPensionInsurance\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"notSubjectToAccidentAndOccupationalDiseaseInsurance\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"notSubjectToUnemploymentInsurance\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"notSubjectToHealthInsurance\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"voluntaryEarningsRelatedPensionInsurance\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"FaultyControl\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"onlyInvalidItems\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"entireRecordIsRejected\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"Gender\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"male\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"female\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"IdType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"businessId\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"personalIdentificationNumber\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"vat\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"giin\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"taxIdentificationNumber\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"finnishTradeRegistrationNumber\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"foreignBusinessRegistrationNumber\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"foreignPersonalIdentificationNumber\"\r\n      },\r\n      {\r\n        \"order\": 99,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"IncomeEarnerType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"employedByStateEmploymentFund\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"jointOwnerWithPayer\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"partialOwner\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"keyEmployee\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"leasedEmployeeLivingAbroad\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"personWorkingInFrontierDistrict\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"personWorkingAbroad\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"athlete\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"performingArtist\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"restrictedPeriodInFinland\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"netOfTaxContract\"\r\n      },\r\n      {\r\n        \"order\": 12,\r\n        \"name\": \"organization\"\r\n      },\r\n      {\r\n        \"order\": 13,\r\n        \"name\": \"personWorkingOnAlandFerry\"\r\n      },\r\n      {\r\n        \"order\": 14,\r\n        \"name\": \"entrepreneurOrFarmerNoPensionRequired\"\r\n      },\r\n      {\r\n        \"order\": 15,\r\n        \"name\": \"dimplomaticMission\"\r\n      },\r\n      {\r\n        \"order\": 16,\r\n        \"name\": \"eppo\"\r\n      },\r\n      {\r\n        \"order\": 17,\r\n        \"name\": \"lightEntrepreneur\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"InsuranceCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"subjectToSocialInsuranceContributions\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"subjectToEarningsRelatedPensionInsuranceContribution\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"subjectToHealthInsuranceContribution\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"subjectToUnemploymentInsuranceContribution\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"subjectToAccidentInsuranceAndOccupationalDiseaseInsuranceContribution\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"IrScheduleAction\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"send\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"cancel\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"Language\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"fi\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"sv\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"en\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PaidAbsenceCauseCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"illness\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"partTimeSickLeave\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"parentalLeave\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"specialMaternityLeave\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"rehabilitation\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"childIllness\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"partTimeChildCareLeave\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"training\"\r\n      },\r\n      {\r\n        \"order\": 13,\r\n        \"name\": \"leaveOfAbsence\"\r\n      },\r\n      {\r\n        \"order\": 14,\r\n        \"name\": \"militaryRefresherTraining\"\r\n      },\r\n      {\r\n        \"order\": 18,\r\n        \"name\": \"midWeekHoliday\"\r\n      },\r\n      {\r\n        \"order\": 19,\r\n        \"name\": \"accruedHoliday\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"occupationalAccident\"\r\n      },\r\n      {\r\n        \"order\": 21,\r\n        \"name\": \"annualLeave\"\r\n      },\r\n      {\r\n        \"order\": 22,\r\n        \"name\": \"partTimeAbsenceDueToRehabilitation\"\r\n      },\r\n      {\r\n        \"order\": 99,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PayerSubOrgType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"kevasSubmitterCodes\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"payersOwnCodes\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"governmentAgencyIdentifier\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PayerSummaryReportStatus\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"new\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"scheduled\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"succeeded\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"canceled\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"error\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"invalid\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PayerType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"publicSector\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"household\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"temporaryEmployer\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"foreignEmployer\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"state\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"unincorporatedStateEnterpriseOrGovernmentalInstitution\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"specialisedAgency\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"foreignGroupCompany\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"poolOfHouseholdEmployers\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PaymentType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"monthly\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"hourly\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"contractPay\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PensionActCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"employeesEarningsRelatedPensionInsurance\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"pensionInsuranceForFarmers\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"pensionInsuranceForTheSelfEmployed\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"PensionProvIdCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"none\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"finnishCentreForPensions\"\r\n      },\r\n      {\r\n        \"order\": 16,\r\n        \"name\": \"clergyOfTheOrthodoxChurch\"\r\n      },\r\n      {\r\n        \"order\": 20,\r\n        \"name\": \"kevaMemberOrganisations\"\r\n      },\r\n      {\r\n        \"order\": 24,\r\n        \"name\": \"kevaÅlandLandskapsregeringsPensionssystem\"\r\n      },\r\n      {\r\n        \"order\": 25,\r\n        \"name\": \"kevaChurch\"\r\n      },\r\n      {\r\n        \"order\": 27,\r\n        \"name\": \"bankOfFinland\"\r\n      },\r\n      {\r\n        \"order\": 29,\r\n        \"name\": \"kevaKelaEmploymentPensions\"\r\n      },\r\n      {\r\n        \"order\": 30,\r\n        \"name\": \"kevaState\"\r\n      },\r\n      {\r\n        \"order\": 34,\r\n        \"name\": \"seafarers\"\r\n      },\r\n      {\r\n        \"order\": 35,\r\n        \"name\": \"farmers\"\r\n      },\r\n      {\r\n        \"order\": 40,\r\n        \"name\": \"alandia\"\r\n      },\r\n      {\r\n        \"order\": 46,\r\n        \"name\": \"ilmarinen\"\r\n      },\r\n      {\r\n        \"order\": 54,\r\n        \"name\": \"elo\"\r\n      },\r\n      {\r\n        \"order\": 55,\r\n        \"name\": \"varma\"\r\n      },\r\n      {\r\n        \"order\": 56,\r\n        \"name\": \"veritas\"\r\n      },\r\n      {\r\n        \"order\": 90,\r\n        \"name\": \"etera\"\r\n      },\r\n      {\r\n        \"order\": 70014,\r\n        \"name\": \"uPM\"\r\n      },\r\n      {\r\n        \"order\": 70047,\r\n        \"name\": \"sanoma\"\r\n      },\r\n      {\r\n        \"order\": 70072,\r\n        \"name\": \"sandvik\"\r\n      },\r\n      {\r\n        \"order\": 70076,\r\n        \"name\": \"kontino\"\r\n      },\r\n      {\r\n        \"order\": 70078,\r\n        \"name\": \"yleisradio\"\r\n      },\r\n      {\r\n        \"order\": 70088,\r\n        \"name\": \"aBB\"\r\n      },\r\n      {\r\n        \"order\": 70093,\r\n        \"name\": \"lFashionGroup\"\r\n      },\r\n      {\r\n        \"order\": 70109,\r\n        \"name\": \"honeywell\"\r\n      },\r\n      {\r\n        \"order\": 70199,\r\n        \"name\": \"telia\"\r\n      },\r\n      {\r\n        \"order\": 70200,\r\n        \"name\": \"yaraSuomi\"\r\n      },\r\n      {\r\n        \"order\": 70202,\r\n        \"name\": \"orion\"\r\n      },\r\n      {\r\n        \"order\": 80001,\r\n        \"name\": \"valio\"\r\n      },\r\n      {\r\n        \"order\": 80005,\r\n        \"name\": \"oP\"\r\n      },\r\n      {\r\n        \"order\": 80008,\r\n        \"name\": \"verso\"\r\n      },\r\n      {\r\n        \"order\": 80009,\r\n        \"name\": \"apteekkien\"\r\n      },\r\n      {\r\n        \"order\": 80012,\r\n        \"name\": \"viabek\"\r\n      },\r\n      {\r\n        \"order\": 80014,\r\n        \"name\": \"reka\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ProfessionType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"statisticsFinland\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"keva\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"bankOfFinland\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"trafi\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"RefPaymentType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"earningsRelatedPensionProvider\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ReimbPaymentType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"kelaDailyAllowanceApplication\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"kelaFamilyLeaveCompensation\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"RemunerationCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"dailyAllowance\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"accommodationBenefit\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"carBenefit\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"otherBenefit\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ReportLogEventType\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"sent\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"canceled\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"error\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"ResponsibilityCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"contentIssues\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"technicalIssues\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"SummaryTransactionCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"undefined\"\r\n      },\r\n      {\r\n        \"order\": 101,\r\n        \"name\": \"noWagesPayable\"\r\n      },\r\n      {\r\n        \"order\": 102,\r\n        \"name\": \"employersHealthInsuranceContribution\"\r\n      },\r\n      {\r\n        \"order\": 103,\r\n        \"name\": \"deductionsToBeMadeFromTheEmployersHealthInsuranceContribution\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TermCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"untilFurtherNotice\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"fixedTerm\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"TransactionCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 0,\r\n        \"name\": \"unknown\"\r\n      },\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"ignored\"\r\n      },\r\n      {\r\n        \"order\": 201,\r\n        \"name\": \"timeRatePay\"\r\n      },\r\n      {\r\n        \"order\": 202,\r\n        \"name\": \"initiativeFee\"\r\n      },\r\n      {\r\n        \"order\": 203,\r\n        \"name\": \"bonusPay\"\r\n      },\r\n      {\r\n        \"order\": 204,\r\n        \"name\": \"complementaryWagePaidDuringBenefitPeriod\"\r\n      },\r\n      {\r\n        \"order\": 205,\r\n        \"name\": \"emergencyWorkCompensation\"\r\n      },\r\n      {\r\n        \"order\": 206,\r\n        \"name\": \"eveningWorkCompensation\"\r\n      },\r\n      {\r\n        \"order\": 207,\r\n        \"name\": \"eveningShiftAllowance\"\r\n      },\r\n      {\r\n        \"order\": 208,\r\n        \"name\": \"noticePeriodCompensation\"\r\n      },\r\n      {\r\n        \"order\": 209,\r\n        \"name\": \"kilometreAllowanceTaxable\"\r\n      },\r\n      {\r\n        \"order\": 210,\r\n        \"name\": \"meetingFee\"\r\n      },\r\n      {\r\n        \"order\": 211,\r\n        \"name\": \"saturdayPay\"\r\n      },\r\n      {\r\n        \"order\": 212,\r\n        \"name\": \"extraWorkPremium\"\r\n      },\r\n      {\r\n        \"order\": 213,\r\n        \"name\": \"holidayBonus\"\r\n      },\r\n      {\r\n        \"order\": 214,\r\n        \"name\": \"lectureFee\"\r\n      },\r\n      {\r\n        \"order\": 215,\r\n        \"name\": \"compensationForTrustPosition\"\r\n      },\r\n      {\r\n        \"order\": 216,\r\n        \"name\": \"otherCompensation\"\r\n      },\r\n      {\r\n        \"order\": 217,\r\n        \"name\": \"waitingTimeCompensation\"\r\n      },\r\n      {\r\n        \"order\": 218,\r\n        \"name\": \"workingConditionCompensation\"\r\n      },\r\n      {\r\n        \"order\": 219,\r\n        \"name\": \"partialPayDuringSickLeave\"\r\n      },\r\n      {\r\n        \"order\": 220,\r\n        \"name\": \"commission\"\r\n      },\r\n      {\r\n        \"order\": 221,\r\n        \"name\": \"sundayWorkCompensation\"\r\n      },\r\n      {\r\n        \"order\": 222,\r\n        \"name\": \"benefitArisingFromSyntheticOption\"\r\n      },\r\n      {\r\n        \"order\": 223,\r\n        \"name\": \"performanceBonus\"\r\n      },\r\n      {\r\n        \"order\": 224,\r\n        \"name\": \"monetaryCompensationFromWorkingTimeBank\"\r\n      },\r\n      {\r\n        \"order\": 225,\r\n        \"name\": \"compensationForAccruedTimeOff\"\r\n      },\r\n      {\r\n        \"order\": 226,\r\n        \"name\": \"shareIssueForEmployees\"\r\n      },\r\n      {\r\n        \"order\": 227,\r\n        \"name\": \"contractPay\"\r\n      },\r\n      {\r\n        \"order\": 229,\r\n        \"name\": \"damagesInConjunctionWithTermination\"\r\n      },\r\n      {\r\n        \"order\": 230,\r\n        \"name\": \"standByCompensation\"\r\n      },\r\n      {\r\n        \"order\": 231,\r\n        \"name\": \"voluntaryCompensationInConjunctionWithTermination\"\r\n      },\r\n      {\r\n        \"order\": 232,\r\n        \"name\": \"weeklyRestCompensation\"\r\n      },\r\n      {\r\n        \"order\": 233,\r\n        \"name\": \"profitSharingBonus\"\r\n      },\r\n      {\r\n        \"order\": 234,\r\n        \"name\": \"annualHolidayCompensation\"\r\n      },\r\n      {\r\n        \"order\": 235,\r\n        \"name\": \"overtimeCompensation\"\r\n      },\r\n      {\r\n        \"order\": 236,\r\n        \"name\": \"nightWorkAllowance\"\r\n      },\r\n      {\r\n        \"order\": 237,\r\n        \"name\": \"nightShiftCompensation\"\r\n      },\r\n      {\r\n        \"order\": 238,\r\n        \"name\": \"otherRegularCompensation\"\r\n      },\r\n      {\r\n        \"order\": 239,\r\n        \"name\": \"compensationForUnusedCompensatoryLeave\"\r\n      },\r\n      {\r\n        \"order\": 301,\r\n        \"name\": \"accommodationBenefit\"\r\n      },\r\n      {\r\n        \"order\": 302,\r\n        \"name\": \"interestBenefitForHousingLoan\"\r\n      },\r\n      {\r\n        \"order\": 303,\r\n        \"name\": \"mealAllowance\"\r\n      },\r\n      {\r\n        \"order\": 304,\r\n        \"name\": \"carBenefit\"\r\n      },\r\n      {\r\n        \"order\": 308,\r\n        \"name\": \"compensationForGoverningBodyMembership\"\r\n      },\r\n      {\r\n        \"order\": 309,\r\n        \"name\": \"shareOfReserveDrawnFromPersonnelFund\"\r\n      },\r\n      {\r\n        \"order\": 310,\r\n        \"name\": \"monetaryGiftForEmployees\"\r\n      },\r\n      {\r\n        \"order\": 311,\r\n        \"name\": \"kilometreAllowanceTaxExempt\"\r\n      },\r\n      {\r\n        \"order\": 312,\r\n        \"name\": \"treatmentFeeForMunicipalVeterinarian\"\r\n      },\r\n      {\r\n        \"order\": 313,\r\n        \"name\": \"compensationForUseEarnedIncome\"\r\n      },\r\n      {\r\n        \"order\": 314,\r\n        \"name\": \"compensationForUseCapitalIncome\"\r\n      },\r\n      {\r\n        \"order\": 315,\r\n        \"name\": \"otherTaxableBenefitForEmployees\"\r\n      },\r\n      {\r\n        \"order\": 316,\r\n        \"name\": \"otherTaxableIncomeDeemedEarnedIncome\"\r\n      },\r\n      {\r\n        \"order\": 317,\r\n        \"name\": \"otherFringeBenefit\"\r\n      },\r\n      {\r\n        \"order\": 319,\r\n        \"name\": \"kinshipCarersFee\"\r\n      },\r\n      {\r\n        \"order\": 320,\r\n        \"name\": \"stockOptions\"\r\n      },\r\n      {\r\n        \"order\": 321,\r\n        \"name\": \"wagesPaidBySubstitutePayerIncludingSocialInsurance\"\r\n      },\r\n      {\r\n        \"order\": 322,\r\n        \"name\": \"wagesPaidBySubstitutePayerIncludingEarningsRelatedPensionInsurance\"\r\n      },\r\n      {\r\n        \"order\": 323,\r\n        \"name\": \"wagesPaidBySubstitutePayerIncludingUnemploymentInsurance\"\r\n      },\r\n      {\r\n        \"order\": 324,\r\n        \"name\": \"wagesPaidBySubstitutePayerIncludingAccidentAndOccupationalDiseaseInsurance\"\r\n      },\r\n      {\r\n        \"order\": 325,\r\n        \"name\": \"wagesPaidBySubstitutePayerIncludingHealthInsurance\"\r\n      },\r\n      {\r\n        \"order\": 326,\r\n        \"name\": \"compensationForEmployeeInvention\"\r\n      },\r\n      {\r\n        \"order\": 327,\r\n        \"name\": \"reimbursementOfPrivateCaretakersExpenses\"\r\n      },\r\n      {\r\n        \"order\": 328,\r\n        \"name\": \"privateCaretakersFee\"\r\n      },\r\n      {\r\n        \"order\": 329,\r\n        \"name\": \"reimbursementOfFamilyDayCareProvidersExpenses\"\r\n      },\r\n      {\r\n        \"order\": 330,\r\n        \"name\": \"telephoneBenefit\"\r\n      },\r\n      {\r\n        \"order\": 331,\r\n        \"name\": \"dailyAllowance\"\r\n      },\r\n      {\r\n        \"order\": 332,\r\n        \"name\": \"capitalIncomePayment\"\r\n      },\r\n      {\r\n        \"order\": 334,\r\n        \"name\": \"mealBenefit\"\r\n      },\r\n      {\r\n        \"order\": 335,\r\n        \"name\": \"reimbursementOfCostsPaidToConciliator\"\r\n      },\r\n      {\r\n        \"order\": 336,\r\n        \"name\": \"nonWageCompensationForWork\"\r\n      },\r\n      {\r\n        \"order\": 337,\r\n        \"name\": \"supplementaryDailyAllowancePaidByEmployerSpecificHealthInsuranceFund\"\r\n      },\r\n      {\r\n        \"order\": 338,\r\n        \"name\": \"pensionPaidByEmployer\"\r\n      },\r\n      {\r\n        \"order\": 339,\r\n        \"name\": \"dividendsBasedOnWages\"\r\n      },\r\n      {\r\n        \"order\": 340,\r\n        \"name\": \"dividendsBasedOnNonWage\"\r\n      },\r\n      {\r\n        \"order\": 341,\r\n        \"name\": \"employerSubsidisedCommuterTicketTaxExempt\"\r\n      },\r\n      {\r\n        \"order\": 342,\r\n        \"name\": \"employerSubsidisedCommuterTicketTaxable\"\r\n      },\r\n      {\r\n        \"order\": 343,\r\n        \"name\": \"employeeStockOption\"\r\n      },\r\n      {\r\n        \"order\": 350,\r\n        \"name\": \"wagesTransferredToAthletesSpecialFund\"\r\n      },\r\n      {\r\n        \"order\": 351,\r\n        \"name\": \"wagesPaidFromAthletesSpecialFund\"\r\n      },\r\n      {\r\n        \"order\": 352,\r\n        \"name\": \"wagesForInsurancePurposes\"\r\n      },\r\n      {\r\n        \"order\": 353,\r\n        \"name\": \"taxableReimbursementOfExpenses\"\r\n      },\r\n      {\r\n        \"order\": 354,\r\n        \"name\": \"privateDayCareAllowanceMunicipalSupplement\"\r\n      },\r\n      {\r\n        \"order\": 355,\r\n        \"name\": \"privateDayCareAllowanceWages\"\r\n      },\r\n      {\r\n        \"order\": 356,\r\n        \"name\": \"privateDayCareAllowanceNonWage\"\r\n      },\r\n      {\r\n        \"order\": 357,\r\n        \"name\": \"kilometreAllowancePaidByNonProfitOrganisation\"\r\n      },\r\n      {\r\n        \"order\": 358,\r\n        \"name\": \"dailyAllowancePaidByNonProfitOrganisation\"\r\n      },\r\n      {\r\n        \"order\": 359,\r\n        \"name\": \"unjustEnrichment\"\r\n      },\r\n      {\r\n        \"order\": 361,\r\n        \"name\": \"employeeStockOptionLowerMarketPrice\"\r\n      },\r\n      {\r\n        \"order\": 362,\r\n        \"name\": \"royaltyPaidToNonResidentTaxpayer\"\r\n      },\r\n      {\r\n        \"order\": 363,\r\n        \"name\": \"bicycleBenefitTaxExempt\"\r\n      },\r\n      {\r\n        \"order\": 364,\r\n        \"name\": \"bicycleBenefitTaxable\"\r\n      },\r\n      {\r\n        \"order\": 365,\r\n        \"name\": \"conditionalStockOptions\"\r\n      },\r\n      {\r\n        \"order\": 366,\r\n        \"name\": \"copyrightRoyaltiesEarnedIncome\"\r\n      },\r\n      {\r\n        \"order\": 367,\r\n        \"name\": \"stockGrantPaidInMoney\"\r\n      },\r\n      {\r\n        \"order\": 368,\r\n        \"name\": \"employeeStockOptionPaidInMoney\"\r\n      },\r\n      {\r\n        \"order\": 369,\r\n        \"name\": \"earningsFromJuELEmployerToLightEntrepreneur\"\r\n      },\r\n      {\r\n        \"order\": 401,\r\n        \"name\": \"compensationCollectedForCarBenefit\"\r\n      },\r\n      {\r\n        \"order\": 402,\r\n        \"name\": \"withholdingTax\"\r\n      },\r\n      {\r\n        \"order\": 403,\r\n        \"name\": \"electedOfficialFee\"\r\n      },\r\n      {\r\n        \"order\": 404,\r\n        \"name\": \"taxAtSource\"\r\n      },\r\n      {\r\n        \"order\": 405,\r\n        \"name\": \"taxAtSourceDeduction\"\r\n      },\r\n      {\r\n        \"order\": 406,\r\n        \"name\": \"wagesPaid\"\r\n      },\r\n      {\r\n        \"order\": 407,\r\n        \"name\": \"reimbursementCollectedForOtherFringeBenefits\"\r\n      },\r\n      {\r\n        \"order\": 408,\r\n        \"name\": \"otherItemDeductibleFromNetWage\"\r\n      },\r\n      {\r\n        \"order\": 409,\r\n        \"name\": \"netWage\"\r\n      },\r\n      {\r\n        \"order\": 410,\r\n        \"name\": \"employerPaidPremiumForCollectiveAdditionalPensionInsurance\"\r\n      },\r\n      {\r\n        \"order\": 411,\r\n        \"name\": \"employerPaidPremiumForCollectiveAdditionalPensionInsuranceEmployeesContribution\"\r\n      },\r\n      {\r\n        \"order\": 412,\r\n        \"name\": \"employeesHealthInsuranceContribution\"\r\n      },\r\n      {\r\n        \"order\": 413,\r\n        \"name\": \"employeesPensionInsuranceContribution\"\r\n      },\r\n      {\r\n        \"order\": 414,\r\n        \"name\": \"employeesUnemploymentInsuranceContribution\"\r\n      },\r\n      {\r\n        \"order\": 415,\r\n        \"name\": \"reimbursementForEmployerSubsidisedCommuterTicket\"\r\n      },\r\n      {\r\n        \"order\": 416,\r\n        \"name\": \"taxPaidAbroad\"\r\n      },\r\n      {\r\n        \"order\": 417,\r\n        \"name\": \"distraint\"\r\n      },\r\n      {\r\n        \"order\": 418,\r\n        \"name\": \"voluntaryIndividualPensionInsurancePremium\"\r\n      },\r\n      {\r\n        \"order\": 419,\r\n        \"name\": \"deductionBeforeWithholding\"\r\n      },\r\n      {\r\n        \"order\": 420,\r\n        \"name\": \"reimbursementCollectedForBicycleBenefit\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"UnpaidAbsenceCauseCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"illness\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"partTimeSickLeave\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"parentalLeave\"\r\n      },\r\n      {\r\n        \"order\": 4,\r\n        \"name\": \"specialMaternityLeave\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"rehabilitation\"\r\n      },\r\n      {\r\n        \"order\": 6,\r\n        \"name\": \"childIllness\"\r\n      },\r\n      {\r\n        \"order\": 7,\r\n        \"name\": \"partTimeChildCareLeave\"\r\n      },\r\n      {\r\n        \"order\": 8,\r\n        \"name\": \"training\"\r\n      },\r\n      {\r\n        \"order\": 9,\r\n        \"name\": \"jobAlternationLeave\"\r\n      },\r\n      {\r\n        \"order\": 10,\r\n        \"name\": \"studyLeave\"\r\n      },\r\n      {\r\n        \"order\": 11,\r\n        \"name\": \"industrialAction\"\r\n      },\r\n      {\r\n        \"order\": 12,\r\n        \"name\": \"interruptionInWorkProvision\"\r\n      },\r\n      {\r\n        \"order\": 13,\r\n        \"name\": \"leaveOfAbsence\"\r\n      },\r\n      {\r\n        \"order\": 14,\r\n        \"name\": \"militaryRefresherTraining\"\r\n      },\r\n      {\r\n        \"order\": 15,\r\n        \"name\": \"militaryService\"\r\n      },\r\n      {\r\n        \"order\": 16,\r\n        \"name\": \"layOff\"\r\n      },\r\n      {\r\n        \"order\": 17,\r\n        \"name\": \"childCareLeave\"\r\n      },\r\n      {\r\n        \"order\": 99,\r\n        \"name\": \"other\"\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    \"name\": \"WageUnitCode\",\r\n    \"description\": null,\r\n    \"values\": [\r\n      {\r\n        \"order\": 1,\r\n        \"name\": \"hour\"\r\n      },\r\n      {\r\n        \"order\": 2,\r\n        \"name\": \"day\"\r\n      },\r\n      {\r\n        \"order\": 3,\r\n        \"name\": \"week\"\r\n      },\r\n      {\r\n        \"order\": 5,\r\n        \"name\": \"period\"\r\n      }\r\n    ]\r\n  }\r\n];\r\n","import { generatedEnumData } from \"../codegen/enumerations\";\r\nimport { generatedIrEnumData } from \"../codegen/enumerationsIr\";\r\nimport { EnumMetadata, EnumValueMetadata } from \"./model\";\r\nimport { Translations } from \"./Translations\";\r\nimport { Language } from \"../model\";\r\n\r\n/**\r\n * Provides metadata and other helpers for enumerations.\r\n */\r\nexport class EnumerationsLogic {\r\n\r\n  /**\r\n   * Gets a label text for an enumeration value.\r\n   * @param enumType Name of the Type of the enumeration with or without the namespace. The default namespace for the type is SALAXY.ENUM.\r\n   * @param memberName Name of the member for which the label is fetched.\r\n   * Also supports the value of the member if there is only difference in casing (which is the normal convention).\r\n   * @param defaultValue The default value if the translation is not found.\r\n   * Supports special keys \"#name\" and \"name\" to return the member name either with or without hash in the beginning.\r\n   * Default is \"#name\", which returns \"#[MemberName]\" if the translation is not found.\r\n   * @param language Optional language, for forcing the result as given language.\r\n   * @returns Language specific text form translations or the memberName text if no translation is found.\r\n   */\r\n  public static getEnumLabel(enumType: string, memberName: string, defaultValue: undefined | string | \"#name\" | \"name\" = \"#name\", language: Language | null = null): string {\r\n    if (!enumType || !memberName) {\r\n      return `#err ${enumType || \"NoEnumType\"}.${memberName || \"NoEnumValue\"}`;\r\n    }\r\n    memberName = this.lowerCamelCase(memberName);\r\n    if (defaultValue === \"name\") {\r\n      defaultValue = this.upperCamelCase(memberName);\r\n    } else if (defaultValue === \"#name\") {\r\n      defaultValue = this.upperCamelCase(memberName);\r\n    }\r\n\r\n    const label = Translations.getWithDefault(`${this.getFullEnumType(enumType)}.${memberName}.label`,undefined, language) || defaultValue;\r\n    if (!label) {\r\n      return this.upperCamelCase(memberName);\r\n    }\r\n    return label;\r\n  }\r\n\r\n  /**\r\n   * Gets a description text for an enumeration value in current language.\r\n   * @param enumType - Name of the Type of the enumeration with or without the namespace. The default namespace for the type is SALAXY.ENUM.\r\n   * @param memberName Name of the member for which the description is fetched.\r\n   * Also supports the value of the member if there is only difference in casing (which is the normal convention).\r\n   * @param defaultValue The default value if the translation is not found. Default is null.\r\n   * Supports special keys \"#name\" and \"name\" to return the member name either with or without hash in the beginning.\r\n   * @param language Optional language, for forcing the result as given language.\r\n   * @returns Language specific text form translations or null if none is found.\r\n   */\r\n  public static getEnumDescr(enumType: string, memberName: string, defaultValue?: undefined | string | \"#name\" | \"name\", language: Language | null = null): string | undefined {\r\n    if (!enumType || !memberName) {\r\n      return `#err ${enumType || \"NoEnumType\"}.${memberName || \"NoEnumValue\"}`;\r\n    }\r\n    memberName = this.lowerCamelCase(memberName);\r\n    if (defaultValue === \"name\") {\r\n      defaultValue = this.upperCamelCase(memberName);\r\n    } else if (defaultValue === \"#name\") {\r\n      defaultValue = this.upperCamelCase(memberName);\r\n    }\r\n    return Translations.getWithDefault(`${this.getFullEnumType(enumType)}.${memberName}.description`, undefined, language) || defaultValue;\r\n  }\r\n\r\n  /**\r\n   * Gets a very short user interface text for an enumeration.\r\n   * Currently only suppotrted for Unit, but we expect more of these.\r\n   * If the texts will be language-versioned, that logic will be here as well.\r\n   * @param enumType - Name of the Type of the enumeration.\r\n   * @param enumValue - Value for which the text is fetched.\r\n   */\r\n  public static getEnumShortText(enumType: string, enumValue: string): string {\r\n    if (!enumType || !enumValue) {\r\n      return `#err ${enumType || \"NoEnumType\"}.${enumValue || \"NoEnumValue\"}`;\r\n    }\r\n    enumType = this.upperCamelCase(enumType);\r\n    enumValue = this.lowerCamelCase(enumValue);\r\n    switch (enumType) {\r\n      case \"Unit\": {\r\n        const unitTexts = {\r\n          undefined: \"kpl?\",\r\n          hour: \"h\",\r\n          day: \"pv\",\r\n          week: \"vko\",\r\n          period: \"jaksoa\",\r\n          one: \"\",\r\n          count: \"kpl\",\r\n          percent: \"%\",\r\n          kilometers: \"km\",\r\n        };\r\n        return unitTexts[enumValue];\r\n      }\r\n      default: {\r\n        throw new Error(`Enum type ${enumType} is not supported in getEnumShortText().`);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the metadata (texts etc.) for an enumeration value.\r\n   * @param enumType -  Name of the Type of the enumeration with or without the namespace. The default namespace for the type is SALAXY.ENUM.\r\n   * @param enumValue - Value for which the label is fetched.\r\n   * @param language Optional language, for forcing the result as given language.\r\n   */\r\n  public static getEnumValueMetadata(enumType: string, enumValue: string, language: Language | null = null): EnumValueMetadata | undefined {\r\n    const typeMetaData = this.getEnumMetadata(enumType, language);\r\n    if (!enumValue || !typeMetaData) {\r\n      return undefined;\r\n    }\r\n    enumValue = this.lowerCamelCase(enumValue);\r\n    const enumValueObj = typeMetaData.values.filter((x) => x.name === enumValue)[0];\r\n    return enumValueObj;\r\n  }\r\n\r\n  /**\r\n   * Gets the metadata (texts etc.) for an enumeration and its values.\r\n   * @param enumType -  Name of the Type of the enumeration with or without the namespace. The default namespace for the type is SALAXY.ENUM.\r\n   * @param language Optional language, for forcing the result as given language.\r\n   */\r\n  public static getEnumMetadata(enumType: string, language: Language | null = null): EnumMetadata | undefined {\r\n    if (!enumType) {\r\n      return undefined;\r\n    }\r\n    const fullEnumType = this.getFullEnumType(enumType);\r\n    const enumNames = fullEnumType.split(\".\");\r\n    if (enumNames.length !== 3) {\r\n      console.warn(`Invalid enum type ${enumType}`);\r\n      return undefined;\r\n    }\r\n    const enumName = enumNames[2];\r\n    const enumData = this.getGeneratedEnumData(`${enumNames[0]}.${enumNames[1]}`);\r\n    if (!enumData) {\r\n      console.warn(`Invalid enum namespace ${enumType}`);\r\n      return undefined;\r\n    }\r\n\r\n    let enumObj = enumData.filter((x) => x.name === enumName)[0];\r\n    const override = this.enumDataOverride.filter((x) => x.name === enumName)[0];\r\n    enumObj = override || enumObj;\r\n    if (!enumObj) {\r\n      console.warn(`No enum metadata for  ${enumType}`);\r\n      return undefined;\r\n    }\r\n\r\n    const result: EnumMetadata = {\r\n      name: enumObj.name,\r\n      descr: enumObj.description,\r\n      values: enumObj.values.map((x) => {\r\n        return {\r\n          name: x.name,\r\n          order: x.order,\r\n          label: this.getEnumLabel(fullEnumType, x.name, undefined, language),\r\n          descr: this.getEnumDescr(fullEnumType, x.name, undefined, language),\r\n        };\r\n      }),\r\n    };\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Gets the currently known enumerations.\r\n   * @param ns - Namespace for the enumeration. By default this is SALAXY.ENUM\r\n   */\r\n  public static getEnums(ns =\"SALAXY.ENUM\"): string[] {\r\n    return (this.getGeneratedEnumData(ns) ?? []).map((x) => x.name);\r\n  }\r\n\r\n  private static getGeneratedEnumData(ns = \"SALAXY.ENUM\") {\r\n    switch(ns) {\r\n      case \"SALAXY.ENUM\":\r\n        return generatedEnumData;\r\n      case \"SALAXY.ENUM_IR\":\r\n        return generatedIrEnumData;\r\n      default:\r\n        return null;\r\n    }\r\n  }\r\n\r\n  private static getFullEnumType(enumType: string): string {\r\n    return enumType.indexOf(\".\") >= 0 ? enumType : `SALAXY.ENUM.${this.upperCamelCase(enumType)}`;\r\n  }\r\n\r\n  /**\r\n   * You can override values of generatedEnumData without generating the entire set of enums from server.\r\n   * TODO: These enums (if any) should be moved to C# code server-side and removed from here.\r\n   */\r\n  private static enumDataOverride: any[] = [{\r\n    name: \"NewEnumName\",\r\n    description: null,\r\n    values: [\r\n      { order: 0, name: \"undefined\" },\r\n      { order: 1, name: \"enum1\" },\r\n    ],\r\n  },{\r\n    name: \"Culture\",\r\n    description: \"Defines the supported cultures in the user interfaces and logic.\",\r\n    values: [\r\n      { order: 0, name: \"fi\" },\r\n      { order: 1, name: \"en\" },\r\n    ],\r\n  },{\r\n    name: \"SitemapVisibility\",\r\n    description: \"Different values for visibility of sitemap node.\",\r\n    values: [\r\n      { order: 0, name: \"default\" },\r\n      { order: 1, name: \"visible\" },\r\n      { order: 2, name: \"hidden\" },\r\n      { order: 3, name: \"readOnly\" },\r\n      { order: 4, name: \"hiddenReadOnly\" },\r\n      { order: 5, name: \"disabled\" },\r\n    ],\r\n  },{\r\n    name: \"WorkflowEventUi\",\r\n    description: \"This is really 'BootstrapStyle' on server-side code. WorkflowEventUi is autogen. Should be fixed: Added to GetApiEnumTypes.\",\r\n    values: [\r\n      { order: 0, name: \"default\" },\r\n      { order: 1, name: \"primary\" },\r\n      { order: 2, name: \"success\" },\r\n      { order: 3, name: \"info\" },\r\n      { order: 4, name: \"warning\" },\r\n      { order: 5, name: \"danger\" },\r\n    ],\r\n  },{\r\n    name: \"ExpensesVatRate\",\r\n    description: \"VAT rates for expenses\",\r\n    values: [\r\n      { order: 0, name: \"undefined\" },\r\n      { order: 1, name: \"tax255\" },\r\n      { order: 2, name: \"tax24\" },\r\n      { order: 3, name: \"tax14\" },\r\n      { order: 4, name: \"tax135\" },\r\n      { order: 5, name: \"tax10\" },\r\n      { order: 6, name: \"tax0\" },\r\n      { order: 7, name: \"none\" },\r\n      { order: 8, name: \"other\" },\r\n      { order: 9, name: \"multiple\" },\r\n    ],\r\n  },\r\n  ];\r\n\r\n  private static lowerCamelCase(text: string) {\r\n    text = \"\" + text; // Ensure it is a string\r\n    return text.substr(0, 1).toLowerCase() + text.substr(1);\r\n  }\r\n\r\n  private static upperCamelCase(text: string) {\r\n    text = \"\" + text; // Ensure it is a string\r\n    return text.substr(0, 1).toUpperCase() + text.substr(1);\r\n  }\r\n\r\n}\r\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d\\d/,r=/\\d\\d?/,i=/\\d*[^-_:/,()\\s\\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[r,a(\"seconds\")],ss:[r,a(\"seconds\")],m:[r,a(\"minutes\")],mm:[r,a(\"minutes\")],H:[r,a(\"hours\")],h:[r,a(\"hours\")],HH:[r,a(\"hours\")],hh:[r,a(\"hours\")],D:[r,a(\"day\")],DD:[n,a(\"day\")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],M:[r,a(\"month\")],MM:[n,a(\"month\")],MMM:[i,function(e){var t=h(\"months\"),n=(h(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,a(\"year\")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\\d{4}/,a(\"year\")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f<a;f+=1){var h=s[f],u=d[h],c=u&&u[0],l=u&&u[1];s[f]=l?{regex:c,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=s[n];if(\"string\"==typeof i)r+=i.length;else{var o=i.regex,f=i.parser,h=e.slice(r),u=o.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,s=e.args;this.$u=r;var a=s[1];if(\"string\"==typeof a){var f=!0===s[2],h=!0===s[3],u=f||h,d=s[2];h&&(d=s[2]),o=this.$locale(),!f&&d&&(o=n.Ls[d]),this.$d=function(e,t,n){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date(\"\")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_advancedFormat=t()}(this,(function(){\"use strict\";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||\"YYYY-MM-DDTHH:mm:ssZ\").replace(/\\[([^\\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case\"Q\":return Math.ceil((t.$M+1)/3);case\"Do\":return r.ordinal(t.$D);case\"gggg\":return t.weekYear();case\"GGGG\":return t.isoWeekYear();case\"wo\":return r.ordinal(t.week(),\"W\");case\"w\":case\"ww\":return s.s(t.week(),\"w\"===e?1:2,\"0\");case\"W\":case\"WW\":return s.s(t.isoWeek(),\"W\"===e?1:2,\"0\");case\"k\":case\"kk\":return s.s(String(0===t.$H?24:t.$H),\"k\"===e?1:2,\"0\");case\"X\":return Math.floor(t.$d.getTime()/1e3);case\"x\":return t.$d.getTime();case\"z\":return\"[\"+t.offsetName()+\"]\";case\"zzz\":return\"[\"+t.offsetName(\"long\")+\"]\";default:return e}}));return n.bind(this)(a)}}}));","!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,d=2628e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,h={years:u,months:d,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof g},f=function(t,s,n){return new g(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},v=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},g=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*h[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*h[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/d),t%=d,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=v(this.$d.years,\"Y\"),s=v(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=v(n,\"D\"),e=v(this.$d.hours,\"H\"),r=v(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3,o=Math.round(1e3*o)/1e3);var u=v(o,\"S\"),d=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",h=(d?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===h||\"-P\"===h?\"P0D\":h},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/h[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/h[n]):this.$d[n],s||0},y.add=function(t,s,n){var i;return i=s?t*h[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.valueOf=function(){return this.asMilliseconds()},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}(),p=function(t,s,n){return t.add(s.years()*n,\"y\").add(s.months()*n,\"M\").add(s.days()*n,\"d\").add(s.hours()*n,\"h\").add(s.minutes()*n,\"m\").add(s.seconds()*n,\"s\").add(s.milliseconds()*n,\"ms\")};return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)?p(this,t,1):r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)?p(this,t,-1):o.bind(this)(t,s)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeek=t()}(this,(function(){\"use strict\";var e=\"day\";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf(\"year\"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,\"week\")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return\"isoweek\"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf(\"day\"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf(\"day\"):n.bind(this)(e,t)}}}));","!function(e,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isSameOrBefore=i()}(this,(function(){\"use strict\";return function(e,i){i.prototype.isSameOrBefore=function(e,i){return this.isSame(e,i)||this.isBefore(e,i)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isSameOrAfter=t()}(this,(function(){\"use strict\";return function(e,t){t.prototype.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)}}}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_quarterOfYear=n()}(this,(function(){\"use strict\";var t=\"month\",n=\"quarter\";return function(e,i){var r=i.prototype;r.quarter=function(t){return this.$utils().u(t)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(t-1))};var s=r.add;r.add=function(e,i){return e=Number(e),this.$utils().p(i)===n?this.add(3*e,t):s.bind(this)(e,i)};var u=r.startOf;r.startOf=function(e,i){var r=this.$utils(),s=!!r.u(i)||i;if(r.p(e)===n){var o=this.quarter()-1;return s?this.month(3*o).startOf(t).startOf(\"day\"):this.month(3*o+2).endOf(t).endOf(\"day\")}return u.bind(this)(e,i)}}}));","/* eslint-disable */\r\n\r\nimport {YearlyHolidays} from \"../model\";\r\n\r\n/**\r\n * Yearly holidays.\r\n */\r\n\r\nexport const yearlyHolidaysYears =\r\n[\r\n  {\r\n    \"year\": 2014,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2014-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2014-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2014-04-18\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2014-04-19\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2014-04-20\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2014-04-21\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2014-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2014-05-29\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2014-06-08\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2014-06-20\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2014-06-21\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2014-11-22\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2014-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2014-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2014-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2014-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"year\": 2015,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2015-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2015-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2015-04-03\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2015-04-04\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2015-04-05\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2015-04-06\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2015-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2015-05-14\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2015-05-24\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2015-06-19\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2015-06-20\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2015-11-21\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2015-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2015-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2015-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2015-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"year\": 2016,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2016-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2016-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2016-03-25\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2016-03-26\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2016-03-27\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2016-03-28\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2016-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2016-05-05\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2016-05-15\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2016-06-24\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2016-06-25\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2016-11-19\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2016-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2016-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2016-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2016-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"year\": 2017,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2017-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2017-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2017-04-14\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2017-04-15\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2017-04-16\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2017-04-17\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2017-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2017-05-25\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2017-06-04\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2017-06-23\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2017-06-24\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2017-11-25\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2017-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2017-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2017-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2017-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"year\": 2018,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2018-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2018-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2018-03-30\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2018-03-31\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2018-04-01\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2018-04-02\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2018-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2018-05-10\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2018-05-20\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2018-06-22\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2018-06-23\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2018-11-24\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2018-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2018-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2018-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2018-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"year\": 2019,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2019-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2019-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2019-04-19\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2019-04-20\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2019-04-21\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2019-04-22\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2019-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2019-05-30\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2019-06-09\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2019-06-21\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2019-06-22\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2019-11-23\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2019-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2019-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2019-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2019-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"year\": 2020,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2020-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2020-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2020-04-10\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2020-04-11\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2020-04-12\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2020-04-13\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2020-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2020-05-21\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2020-05-31\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2020-06-19\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2020-06-20\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2020-11-21\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2020-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2020-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2020-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2020-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"year\": 2021,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2021-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2021-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2021-04-02\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2021-04-03\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2021-04-04\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2021-04-05\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2021-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2021-05-13\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2021-05-23\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2021-06-25\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2021-06-26\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2021-11-20\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2021-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2021-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2021-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2021-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"year\": 2022,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2022-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2022-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2022-04-15\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2022-04-16\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2022-04-17\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2022-04-18\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2022-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2022-05-26\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2022-06-05\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2022-06-24\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2022-06-25\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2022-11-19\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2022-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2022-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2022-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2022-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"year\": 2023,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2023-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2023-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2023-04-07\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2023-04-08\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2023-04-09\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2023-04-10\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2023-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2023-05-18\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2023-05-28\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2023-06-23\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2023-06-24\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2023-11-25\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2023-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2023-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2023-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2023-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"year\": 2024,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2024-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2024-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2024-03-29\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2024-03-30\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2024-03-31\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2024-04-01\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2024-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2024-05-09\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2024-05-19\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2024-06-21\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2024-06-22\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2024-11-23\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2024-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2024-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2024-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2024-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"year\": 2025,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2025-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2025-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2025-04-18\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2025-04-19\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2025-04-20\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2025-04-21\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2025-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2025-05-29\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2025-06-08\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2025-06-20\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2025-06-21\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2025-11-22\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2025-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2025-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2025-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2025-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"year\": 2026,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2026-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2026-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2026-04-03\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2026-04-04\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2026-04-05\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2026-04-06\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2026-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2026-05-14\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2026-05-24\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2026-06-19\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2026-06-20\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2026-11-21\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2026-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2026-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2026-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2026-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"year\": 2027,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2027-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2027-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2027-03-26\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2027-03-27\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2027-03-28\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2027-03-29\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2027-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2027-05-06\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2027-05-16\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2027-06-25\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2027-06-26\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2027-11-20\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2027-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2027-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2027-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2027-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"year\": 2028,\r\n    \"holidays\": {\r\n      \"newYearsDay\": {\r\n        \"date\": \"2028-01-01\",\r\n        \"holiday\": \"newYearsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"uudenvuodenpäivä\",\r\n        \"name\": \"New Year's Day\"\r\n      },\r\n      \"epiphany\": {\r\n        \"date\": \"2028-01-06\",\r\n        \"holiday\": \"epiphany\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"loppiainen\",\r\n        \"name\": \"Epiphany\"\r\n      },\r\n      \"goodFriday\": {\r\n        \"date\": \"2028-04-14\",\r\n        \"holiday\": \"goodFriday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pitkäperjantai\",\r\n        \"name\": \"Good Friday\"\r\n      },\r\n      \"easterSaturday\": {\r\n        \"date\": \"2028-04-15\",\r\n        \"holiday\": \"easterSaturday\",\r\n        \"holidayGroups\": [\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäislauantai\",\r\n        \"name\": \"Easter Saturday\"\r\n      },\r\n      \"easterSunday\": {\r\n        \"date\": \"2028-04-16\",\r\n        \"holiday\": \"easterSunday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pääsiäispäivä\",\r\n        \"name\": \"Easter Sunday\"\r\n      },\r\n      \"easterMonday\": {\r\n        \"date\": \"2028-04-17\",\r\n        \"holiday\": \"easterMonday\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. pääsiäispäivä\",\r\n        \"name\": \"Easter Monday\"\r\n      },\r\n      \"mayDay\": {\r\n        \"date\": \"2028-05-01\",\r\n        \"holiday\": \"mayDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"vappu\",\r\n        \"name\": \"May Day\"\r\n      },\r\n      \"ascensionDay\": {\r\n        \"date\": \"2028-05-25\",\r\n        \"holiday\": \"ascensionDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helatorstai\",\r\n        \"name\": \"Ascension Day\"\r\n      },\r\n      \"pentecost\": {\r\n        \"date\": \"2028-06-04\",\r\n        \"holiday\": \"pentecost\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"helluntaipäivä\",\r\n        \"name\": \"Pentecost\"\r\n      },\r\n      \"midsummerEve\": {\r\n        \"date\": \"2028-06-23\",\r\n        \"holiday\": \"midsummerEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannusaatto\",\r\n        \"name\": \"Midsummer Eve\"\r\n      },\r\n      \"midsummerDay\": {\r\n        \"date\": \"2028-06-24\",\r\n        \"holiday\": \"midsummerDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"juhannuspäivä\",\r\n        \"name\": \"Midsummer Day\"\r\n      },\r\n      \"allSaintsDay\": {\r\n        \"date\": \"2028-11-25\",\r\n        \"holiday\": \"allSaintsDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"pyhäinpäivä\",\r\n        \"name\": \"All Saints' Day\"\r\n      },\r\n      \"independenceDay\": {\r\n        \"date\": \"2028-12-06\",\r\n        \"holiday\": \"independenceDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"itsenäisyyspäivä\",\r\n        \"name\": \"Independence Day\"\r\n      },\r\n      \"christmasEve\": {\r\n        \"date\": \"2028-12-24\",\r\n        \"holiday\": \"christmasEve\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"jouluaatto\",\r\n        \"name\": \"Christmas Eve\"\r\n      },\r\n      \"christmasDay\": {\r\n        \"date\": \"2028-12-25\",\r\n        \"holiday\": \"christmasDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"joulupäivä\",\r\n        \"name\": \"Christmas Day\"\r\n      },\r\n      \"stStephensDay\": {\r\n        \"date\": \"2028-12-26\",\r\n        \"holiday\": \"stStephensDay\",\r\n        \"holidayGroups\": [\r\n          \"official\",\r\n          \"nonBanking\",\r\n          \"holiday\"\r\n        ],\r\n        \"localName\": \"2. joulupäivä\",\r\n        \"name\": \"St. Stephen's Day\"\r\n      }\r\n    }\r\n  }\r\n] as any as YearlyHolidays[];\r\n","\r\nimport dayjs from \"dayjs\";\r\nimport CustomParseFormat from \"dayjs/plugin/customParseFormat\";\r\nimport AdvancedFormat from \"dayjs/plugin/advancedFormat\";\r\nimport Duration from \"dayjs/plugin/duration\";\r\nimport IsoWeek from \"dayjs/plugin/isoWeek\";\r\nimport IsSameOrBefore from \"dayjs/plugin/isSameOrBefore\";\r\nimport IsSameOrAfter from \"dayjs/plugin/isSameOrAfter\";\r\nimport UTC from \"dayjs/plugin/utc\";\r\nimport QuarterOfYear from \"dayjs/plugin/quarterOfYear\";\r\n\r\ndayjs.extend(CustomParseFormat);\r\ndayjs.extend(AdvancedFormat);\r\ndayjs.extend(Duration);\r\ndayjs.extend(IsoWeek);\r\ndayjs.extend(IsSameOrBefore);\r\ndayjs.extend(IsSameOrAfter);\r\ndayjs.extend(UTC);\r\ndayjs.extend(QuarterOfYear);\r\n\r\nimport { DateRange, HolidayDate, HolidayGroup, Holidays } from \"../model\";\r\n//import { Objects } from \"./Objects\";\r\nimport { DatelyObject } from \"./DatelyObject\";\r\nimport { yearlyHolidaysYears } from \"../codegen/yearlyHolidaysYears\";\r\n\r\n/**\r\n * Date parsing, formatting and other operations within the Salaxy framework.\r\n * We use ISO 8601 as our Date format even inside JavaScript objects.\r\n * This is because of the following reasons:\r\n *\r\n * 1. Generally, we do not want to use JavaScript Date because it presents so many problems.\r\n * 2. We store dates in JSON as ISO 8601 date strings - this is universally the best practice\r\n * 3. ISO 8601 provides a way to present a date without time and most importantly timezone information\r\n * 4. ISO 8601 date also works best for most UI components (because of similar reasons as above).\r\n *\r\n * This library is only for Dates. Time / DateTime functionality is in DateTimes util library.\r\n *\r\n * Implementation uses Day.js\r\n */\r\nexport class Dates {\r\n\r\n\r\n  /**\r\n   * Gets an object and returns it as the date format that is stored in the data structure with ISO 8601 format.\r\n   *\r\n   * @param datelyObject - Object that should be converted to Salaxy date: A string, JS Date object, Day.js etc.\r\n   *\r\n   * @returns The date in simplest possible ISO 8601 compliant format \"YYYY-MM-DD\", undefined if empty, not valid date etc.\r\n   */\r\n\r\n  public static asDate(datelyObject: DatelyObject | any): string | undefined {\r\n    const dayJs = this.getDayJs(datelyObject);\r\n    return dayJs ? dayJs.format(\"YYYY-MM-DD\") : undefined;\r\n  }\r\n\r\n  /**\r\n   * Gets a date based on year, month and day (1-based).\r\n   * NOTE: Unlike Date() constructor or dayjs() constructor, all numbers are 1-based:\r\n   * (2017, 2, 2) results to \"2017-02-02\" and not \"2017-01-01T22:00:00.000Z\" like in those constructors.\r\n   *\r\n   * @param year Year component of the date or \"today\" for today's year.\r\n   * @param month Month component of the date (1-12) or \"today\" for today's month.\r\n   * @param day Day of month component of the date (1-31) or \"today\" for today's day of month.\r\n   */\r\n  public static getDate(year: number | \"today\", month: number | \"today\", day: number | \"today\"): string | undefined {\r\n    year = (year === \"today\") ? Dates.getDayJs(\"today\").year() as number : year;\r\n    month = (month === \"today\") ? Dates.getDayJs(\"today\").month() as number : (month - 1);\r\n    day = (day === \"today\") ? Dates.getDayJs(\"today\").date() : day;\r\n    if (!day || month == null || month < 0 || month > 11 || !year) {\r\n      return undefined;\r\n    }\r\n    return this.asDate([year, month, day]);\r\n  }\r\n\r\n  /**\r\n   * Constructs a DatelyObject (DayJs) from any DayJs compatible object\r\n   * @param timestamp any DayJs compatible object to construct a DatelyObject.\r\n   * @returns DatelyObject\r\n   */\r\n    public static getDatelyObject(timestamp: any) : DatelyObject | undefined {\r\n      return Dates.getDayJs(timestamp);\r\n    }\r\n\r\n  /**\r\n   * Converts the date to a JavaScript Date. Please note, that also time part is returned.\r\n   * @param  datelyObject - Object that should be converted: A string, JS Date object, DayJs etc.\r\n   *\r\n   * @returns JavaScript date corresponding to input or null.\r\n   */\r\n  public static asJSDate(datelyObject: DatelyObject | null | undefined): Date | undefined {\r\n    const dayJs = this.getDayJs(datelyObject);\r\n    return dayJs ? dayJs.toDate() : undefined;\r\n  }\r\n\r\n\r\n  /**\r\n   * Checks whether a string is in ISO format.\r\n   *\r\n   * @param dateProspect Value that is evaluated.\r\n   * @param required If set to true, the value is required. If required is null the false will be returned.\r\n   * @param format Date or datetime format. Default is ISO_8601 (ISO datetime). TODO other supported formats.\r\n   *\r\n   * @returns True if the given date is in the correct format.\r\n   */\r\n  public static isValidDateTime(dateProspect: string, required = false, format : string | undefined = undefined): boolean {\r\n    if (!dateProspect) {\r\n      return !required;\r\n    }\r\n    let djs: dayjs.Dayjs;\r\n    if (format) {\r\n      djs = dayjs(dateProspect, format, true);\r\n    }\r\n    else {\r\n      djs = dayjs(dateProspect);\r\n    }\r\n\r\n    if (djs) {\r\n      return djs.isValid();\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Parses a date. In ISO format by default.\r\n   *\r\n   * @param dateProspect Value that is parsed.\r\n   * @param format Date or datetime format. Default is ISO_8601 (ISO datetime).\r\n   * Note that result is just a date (not datetime).\r\n   *\r\n   * @returns True if the given date is in the correct format.\r\n   */\r\n  public static parseDate(dateProspect: string, format: string | undefined = undefined): string | undefined {\r\n    if (!dateProspect) {\r\n      return undefined;\r\n    } else {\r\n      let djs: dayjs.Dayjs;\r\n      if (format) {\r\n        djs = dayjs(dateProspect, format, true);\r\n      }\r\n      else {\r\n        djs = dayjs(dateProspect);\r\n      }\r\n      return Dates.asDate(djs);\r\n    }\r\n  }\r\n\r\n  /** Get the date of today as ISO 8601 string format (YYYY-MM-DD)  */\r\n  public static getToday(): string {\r\n    return this.asDate(dayjs())!;\r\n  }\r\n\r\n\r\n\r\n\r\n  /**\r\n   * Returns Day.Js -object.\r\n   *\r\n   * @param datelyObject Object that should be converted to Day.js -object: A string, JS Date object, Day.js, Number[3] etc.\r\n   * @param allowInvalid If true and datelyObject is faulty string, returns invalid Day.js -object object. By default returns undefined, if parameter cannot be parsed.\r\n   *\r\n   * @returns A Day.js -object or undefined.\r\n   */\r\n  public static getDayJs(datelyObject: DatelyObject | null | undefined, allowInvalid = false): any | undefined {\r\n    if (!datelyObject) {\r\n      return undefined;\r\n    }\r\n\r\n    let djs: dayjs.Dayjs;\r\n    if (datelyObject instanceof Date){\r\n      djs = dayjs(datelyObject);\r\n    } else if (Number.isInteger(datelyObject as number)) {\r\n      djs = dayjs(datelyObject as number);\r\n    } else if (Array.isArray(datelyObject)) {\r\n      let d: Date;\r\n      switch (datelyObject.length) {\r\n        case 3: // YYYY-MM-DD\r\n          d = new Date(datelyObject[0],datelyObject[1],datelyObject[2]);\r\n          break;\r\n        case 5: // YYYY-MM-DD HH:mm\r\n          d = new Date(datelyObject[0],datelyObject[1],datelyObject[2],datelyObject[3],datelyObject[4]);\r\n          break;\r\n        case 6: // YYYY-MM-DD HH:mm:ss\r\n          d = new Date(datelyObject[0],datelyObject[1],datelyObject[2],datelyObject[3],datelyObject[4],datelyObject[5]);\r\n          break;\r\n        default:\r\n          return undefined;\r\n      }\r\n      djs = dayjs(d);\r\n    } else if (datelyObject === \"today\") {\r\n      djs = dayjs(new Date());\r\n      djs = djs.startOf(\"day\");\r\n    } else if (datelyObject === \"yesterday\") {\r\n      djs = dayjs(new Date());\r\n      djs = djs.startOf(\"day\");\r\n      djs = djs.add(-1, \"day\");\r\n    } else if (datelyObject === \"tomorrow\") {\r\n      djs = dayjs(new Date());\r\n      djs = djs.startOf(\"day\");\r\n      djs = djs.add(1, \"day\");\r\n    }\r\n    else {\r\n      djs = dayjs(datelyObject);\r\n    }\r\n\r\n    if (djs.isValid() || allowInvalid) {\r\n      return djs;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n\r\n  /**\r\n   * Returns the duration  object. If parameter is empty or null, defaults to Today (not Now).\r\n   *\r\n   * @param startDatelyObject Duration start that is parsed using getDayJs().\r\n   * Null before conversion defaults to today. Invalid objects result to invalid duration.\r\n   * @param endDatelyObject Duration start that is parsed using getDayJs().\r\n   * Null before conversion defaults to today. Invalid objects result to invalid duration.\r\n   *\r\n   * @returns A Duration object, which may also be invalid\r\n   */\r\n  public static getDuration(startDatelyObject: DatelyObject, endDatelyObject: DatelyObject): any {\r\n    const start = this.getDayJs(startDatelyObject, true) || this.getDayJs(\"today\");\r\n    const end = this.getDayJs(endDatelyObject, true)|| this.getDayJs(\"today\");\r\n\r\n    const d = dayjs.duration(end.diff(start));\r\n    return d;\r\n  }\r\n\r\n  /**\r\n   * Gets a date range based on start and end dates.\r\n   * Days count is calculated using getWorkdays() (Add parameter if you need other day count methods).\r\n   *\r\n   * @param start DateRange start, DatelyObject that should be converted to Salaxy date: A string, JS Date object, Day.js  etc.\r\n   * @param end DateRange end, DatelyObject that should be converted to Salaxy date: A string, JS Date object, Day.js etc.\r\n   *\r\n   * @returns DateRange based on start and end dates.\r\n   */\r\n  public static getDateRange(start: DatelyObject, end: DatelyObject): DateRange {\r\n    const result: DateRange = {\r\n      start: this.asDate(start),\r\n      end: this.asDate(end),\r\n    };\r\n    result.daysCount = this.getWorkdays(result.start!, result.end!).length;\r\n    return result;\r\n  }\r\n\r\n\r\n\r\n\r\n  /**\r\n   * Returns earliest workday counted from startDate parameter. If startDate is workday, it is returned.\r\n   * @param startDate start date, where to start searching a work day\r\n   * @returns Workday in simple ISO format YYYY-MM-DD\r\n   */\r\n  public static getWorkday(startDate: DatelyObject): string | undefined {\r\n\r\n    let newDayJs = Dates.getDayJs(Dates.asDate(startDate));\r\n    if (!newDayJs) {\r\n      return undefined;\r\n    }\r\n    let maxTurns = 365;\r\n    while (maxTurns>0) {\r\n\r\n      if (Dates.isWorkday(newDayJs)) {\r\n        return Dates.asDate(newDayJs);\r\n      }\r\n      maxTurns -=1;\r\n      if (maxTurns == 0) {\r\n        return undefined;\r\n      }\r\n      newDayJs = newDayJs.add(1, \"day\");\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n   /**\r\n    * Gets the workdays between two dates including both days.\r\n    * Returns empty array if there is no start or if end is before start.\r\n    * Returns 1 day if there is no end: we assume that the user selected just one day.\r\n    *\r\n    * @param start A dately value as the start date (a string, JS Date object, DayJs etc.).\r\n    * @param end Corresponding end date.\r\n    * @param holidayGroup The holiday group for defining which days not to count as working day. The default group is Holiday.\r\n    *\r\n    * @returns The work days between the two dates (inclusive).\r\n    */\r\n   public static getWorkdays(start: DatelyObject, end: DatelyObject, holidayGroup: HolidayGroup = HolidayGroup.Holiday): string[] {\r\n    let startDate = this.asDate(start);\r\n    const endDate = this.asDate(end) || startDate;\r\n    if (!startDate) {\r\n      return [];\r\n    }\r\n    const result: string[] = [];\r\n    while (startDate! <= endDate!) {\r\n      if (this.isWorkday(startDate!, holidayGroup)) {\r\n        result.push(startDate!);\r\n      }\r\n      startDate = this.asDate(this.getDayJs(startDate).add(1, \"day\"));\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Gets the first workday between start and end dates.\r\n   *\r\n   * @param start A dately value as the start date (a string, JS Date object, DayJs etc.).\r\n   * @param end Corresponding end date.\r\n   *\r\n   * @returns The first work day in a range of to dates (or undefined if none found).\r\n   */\r\n  public static getFirstWorkDay(start: DatelyObject, end: DatelyObject): string | undefined {\r\n    const startDate = this.asJSDate(start);\r\n    if (!startDate) return;\r\n\r\n    const endDate = this.asJSDate(end) || startDate;\r\n\r\n    for (let current = startDate; current <= endDate; current = this.getDayJs(current).add(1, \"day\").toDate()) {\r\n      if (this.isWorkday(current)) return this.asDate(current);\r\n    }\r\n    return;\r\n  }\r\n\r\n  /**\r\n   * Gets the vacation days (6 day week Mon-Sat) between two dates including both days.\r\n   * Returns empty array if there is no start or if end is before start.\r\n   * Returns 1 day if there is no end: we assume that the user selected just one day.\r\n   *\r\n   * @param start A dately value as the start date (a string, JS Date object, DayJs etc.).\r\n   * @param end Corresponding end date.\r\n   * @param holidayGroup The holiday group for defining which days not to count as working day. The default group is Holiday.\r\n   *\r\n   * @returns The work days between the two dates (inclusive).\r\n   */\r\n  public static getVacationDays(start: DatelyObject, end: DatelyObject, holidayGroup: HolidayGroup = HolidayGroup.Holiday): string[] {\r\n    let startDate = this.asDate(start);\r\n    const endDate = this.asDate(end) || startDate;\r\n    if (!startDate) {\r\n      return [];\r\n    }\r\n    const result: string[] = [];\r\n    while (startDate && endDate && startDate <= endDate) {\r\n      if (this.isVacationday(startDate, holidayGroup)) {\r\n        result.push(startDate);\r\n      }\r\n      startDate = this.asDate(this.getDayJs(startDate).add(1, \"day\"));\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Gets a formatted range of two dates.\r\n   *\r\n   * @param startDate A dately value as the start date (a string, JS Date object, DayJs etc.).\r\n   * @param endDate Corresponding end date.\r\n   *\r\n   * @returns A date range string with possible formats:\r\n   * \"12. - 25.11.2019\", \"12.11. - 02.12.2019\", \"12.11.2019 - 12.01.2020\", \"12.01.2020 -\" or \"- 12.01.2020\".\r\n   */\r\n  public static getFormattedRange(startDate: DatelyObject, endDate: DatelyObject): string {\r\n    const formatFull = \"DD.MM.YYYY\";\r\n    const start = this.getDayJs(startDate);\r\n    const end = this.getDayJs(endDate);\r\n    if (!start && !end) {\r\n      return \"-\";\r\n    }\r\n    if (!start && end) {\r\n      return \" - \" + end.format(formatFull);\r\n    }\r\n    if (start && !end) {\r\n      return start.format(formatFull) + \" - \";\r\n    }\r\n    if (start.isSame(end)) {\r\n      return start.format(formatFull);\r\n    }\r\n    const formatMonthDay = \"DD.MM.\";\r\n    const formatDay = \"DD.\";\r\n    const sameYear = start.year() === end.year();\r\n    const sameMonth = start.month() === end.month();\r\n    return start.format(sameYear ? (sameMonth ? formatDay : formatMonthDay) : formatFull) + \" - \" + end.format(formatFull);\r\n  }\r\n\r\n  /**\r\n   * Output a formatted date with default date format (may later be localized).\r\n   * @param date A dately value (a string, JS Date object, DayJs etc.) that is formatted.\r\n   * @returns A Simple date string e.g. \"12.11.2019\", if the value is empty or null returns \"-\".\r\n   */\r\n  public static getFormattedDate(date: DatelyObject | null | undefined): string {\r\n    return this.format(date!, \"DD.MM.YYYY\", \"-\")!;\r\n  }\r\n\r\n  /**\r\n   * Formats a dately object using DayJs formatting:\r\n   * Default is \"DD.MM.YYYY\"\r\n   * For all format string options, see https://day.js.org/docs/en/display/format\r\n   */\r\n  public static format(date: DatelyObject, format = \"DD.MM.YYYY\", nullValue: string | undefined = undefined): string | undefined {\r\n    const dayJs = this.getDayJs(date);\r\n    return dayJs ? dayJs.format(format) : nullValue;\r\n  }\r\n\r\n  /**\r\n   * Gets the day of month as 1-based number: 1-31.\r\n   *\r\n   * @param datelyObject - Object that represents date: A string, JS Date object, DayJs etc.\r\n   * Special string \"today\" can be used for fetching today's date.\r\n   *\r\n   * @returns Day of month between 1-31 or undefined if the object is not a dately object.\r\n   */\r\n  public static getDay(datelyObject: DatelyObject): number | undefined {\r\n    const dayJs = this.getDayJs(datelyObject);\r\n    return dayJs ? dayJs.date() : undefined;\r\n  }\r\n\r\n  /**\r\n   * Sets the day of month as 1-based number: 1-31.\r\n   *\r\n   * @param datelyObject - Object that represents date: A string, JS Date object, DayJs etc.\r\n   * Special string \"today\" can be used for fetching today's date.\r\n   * @param dayOfMonth - day of the month to be set (1-31 depending on month, will bubble to next if beyond endof month)\r\n   * @returns Day of month between 1-31 or undefined if the object is not a dately object.\r\n   */\r\n  public static setDay(datelyObject: DatelyObject, dayOfMonth: number): string | undefined {\r\n    const dayJs = this.getDayJs(datelyObject);\r\n    return dayJs ? this.asDate(dayJs.date(dayOfMonth)) : undefined;\r\n  }\r\n\r\n\r\n  /**\r\n   * Gets the day of week as ISO 1-based number: 1-7.\r\n   *\r\n   * @param datelyObject - Object that represents date: A string, JS Date object, DayJs etc.\r\n   * Special string \"today\" can be used for fetching today's date.\r\n   *\r\n   * @returns Day of week\r\n   */\r\n    public static getWeekday(datelyObject: DatelyObject): number | undefined {\r\n      const dayJs = this.getDayJs(datelyObject);\r\n      return dayJs ? dayJs.isoWeekday() : undefined;\r\n    }\r\n\r\n\r\n  /**\r\n   * Gets isoWeek-number for provided date\r\n   * @param date Base date for week number\r\n   * @returns week number\r\n   */\r\n  public static getWeekNumber(date: DatelyObject): number | undefined {\r\n    const dayJs = this.getDayJs(date);\r\n    return dayJs ? dayJs.isoWeek(): undefined;\r\n  }\r\n\r\n  /**\r\n   * Gets number of day in month in given datelyObject.\r\n   * @param date Base date for getting the month\r\n   * @returns numbber of days in the month of the given base date.\r\n   */\r\n  public static getDaysInMonth(date: DatelyObject): number | undefined {\r\n    const dayJs = this.getDayJs(date);\r\n    return dayJs ? dayJs.daysInMonth(): undefined;\r\n  }\r\n\r\n\r\n  /**\r\n   * Gets the month as 1-based number: 1-12.\r\n   *\r\n   * @param datelyObject - Object that represents month: A string, JS Date object, DayJs etc.\r\n   * Special string \"today\" can be used for fetching today's date.\r\n   *\r\n   * @returns Month between 1-12 or undefined if the object is not a dately object.\r\n   */\r\n  public static getMonth(datelyObject: DatelyObject): number | undefined {\r\n    const dayJs = this.getDayJs(datelyObject);\r\n    return dayJs ? dayJs.month() + 1 : undefined;\r\n  }\r\n\r\n  /**\r\n   * Gets the year of a date or today.\r\n   *\r\n   * @param datelyObject - Object that represents month: A string, JS Date object, DayJs etc.\r\n   * Special string \"today\" can be used for fetching today's date.\r\n   *\r\n   * @returns Year, e.g. 2019 or null if the object is not a dately object.\r\n   */\r\n  public static getYear(datelyObject: DatelyObject): number | undefined {\r\n    const dayJs = this.getDayJs(datelyObject);\r\n    return dayJs ? dayJs.year() : undefined;\r\n  }\r\n\r\n  /**\r\n   * Returns true if the given dately object is a holiday.\r\n   * Please note that the weekend days are not by default holidays\r\n   *\r\n   * @param datelyObject - Object that should be converted to date: A string, JS Date object, DayJs etc.\r\n   * @param holidayGroup - The holiday group for defining which days to count as holiday day. The default group is Holiday.\r\n   *\r\n   * @returns True, if the given dately object is a holiday.\r\n   */\r\n  public static isHoliday(datelyObject: DatelyObject,  holidayGroup: HolidayGroup = HolidayGroup.Holiday ): boolean {\r\n      const djs = this.getDayJs(datelyObject);\r\n      if (!djs) {\r\n        return false;\r\n      }\r\n      if (!holidayGroup) {\r\n        return false;\r\n      }\r\n      const holidays = Object.values(this.getYearlyHolidays(djs) ?? {}) as HolidayDate[];\r\n      return !!holidays.find((x) => x.date == this.asDate(djs) && x.holidayGroups &&x.holidayGroups.indexOf(holidayGroup) >= 0);\r\n  }\r\n\r\n  /**\r\n   * Returns true if the given dately object is a working day (5 day week).\r\n   * The day must not be Saturday or Sunday or not any day in the given holiday categoria.\r\n   *\r\n   * @param datelyObject - Object that should be converted to date: A string, JS Date object, DayJs etc.\r\n   * @param holidayGroup - The holiday group for defining which days to count as holiday day. The default group is Holiday.\r\n   *\r\n   * @returns True, if the given dately object is a working day.\r\n   */\r\n  public static isWorkday(datelyObject: DatelyObject, holidayGroup: HolidayGroup = HolidayGroup.Holiday): boolean {\r\n\r\n    const djs = this.getDayJs(datelyObject);\r\n    if (!djs) {\r\n      return false;\r\n    }\r\n\r\n    if (djs.isoWeekday() === 6 || // Saturday\r\n        djs.isoWeekday() === 7) { // Sunday\r\n      return false;\r\n    }\r\n\r\n    if (!holidayGroup) {\r\n      return true;\r\n    }\r\n\r\n    return !this.isHoliday(djs, holidayGroup);\r\n  }\r\n\r\n  /**\r\n   * Returns true if the given dately object is a vacation day (6 day week).\r\n   * The day must not be Sunday or not any day in the given holiday categoria.\r\n   *\r\n   * @param datelyObject - Object that should be converted to date: A string, JS Date object, DayJs etc.\r\n   * @param holidayGroup - The holiday group for defining which days to count as holiday day. The default group is Holiday.\r\n   *\r\n   * @returns True, if the given dately object is a working day.\r\n   */\r\n  public static isVacationday(datelyObject: DatelyObject, holidayGroup: HolidayGroup = HolidayGroup.Holiday): boolean {\r\n\r\n    const djs = this.getDayJs(datelyObject);\r\n    if (!djs) {\r\n      return false;\r\n    }\r\n\r\n    if ( djs.isoWeekday() === 7) { // Sunday\r\n      return false;\r\n    }\r\n\r\n    if (!holidayGroup) {\r\n      return true;\r\n    }\r\n\r\n    return !this.isHoliday(djs, holidayGroup);\r\n  }\r\n\r\n/**\r\n * Adds given amount of working days to given day.\r\n *\r\n * @param datelyObject - Object that should be converted to date: A string, JS Date object, DatyJs etc.\r\n * @param days - Working days to add (positive or negative number).\r\n * If zero or not set, returns datelyObject or next workday if datelyObject is not a workday.\r\n * @param holidayGroup - The holiday group for defining which days to count as holiday day. The default group is Holiday.\r\n *\r\n * @returns New working day with amount of given working days ahead.\r\n */\r\n  public static addWorkdays(datelyObject: DatelyObject, days: number, holidayGroup: HolidayGroup = HolidayGroup.Holiday): string | undefined {\r\n    let newDayJs = this.getDayJs(datelyObject);\r\n    if (!newDayJs) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!days) {\r\n      // eslint-disable-next-line no-constant-condition\r\n      while (true) {\r\n        if (this.isWorkday(newDayJs, holidayGroup)) {\r\n          return this.asDate(newDayJs);\r\n        }\r\n        newDayJs = newDayJs.add(1, \"d\");\r\n      }\r\n    }\r\n    let count = 0;\r\n    const step = days > 0 ? 1 : -1;\r\n    // eslint-disable-next-line no-constant-condition\r\n    while (true) {\r\n      newDayJs = newDayJs.add(step, \"d\");\r\n      if (this.isWorkday(newDayJs, holidayGroup)) {\r\n        count += step;\r\n        if (count === days) {\r\n          return this.asDate(newDayJs);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Adds (or substracts) days, months or years to a dately object.\r\n   * @param datelyObject Base date for the addition.\r\n   * @param amount Number of days/months/years to add\r\n   * @param unit Unit for the addition: day,month,year\r\n   */\r\n  public static add(datelyObject: DatelyObject, amount: number, unit: \"day\" | \"week\" | \"month\" | \"quarter\" | \"year\"): string | undefined {\r\n    const newDayJs = this.getDayJs(datelyObject);\r\n    if (!newDayJs) {\r\n      return undefined;\r\n    }\r\n    switch (unit) {\r\n      case \"day\":\r\n        return this.asDate(newDayJs.add(amount, \"d\"));\r\n      case \"week\":\r\n        return this.asDate(newDayJs.add(amount, \"w\"));\r\n      case \"month\":\r\n        return this.asDate(newDayJs.add(amount, \"M\"));\r\n      case \"quarter\":\r\n        return this.asDate(newDayJs.add(amount, \"Q\"));\r\n      case \"year\":\r\n        return this.asDate(newDayJs.add(amount, \"y\"));\r\n      default:\r\n        throw new Error(`Unit \"${unit}\" is not supported.`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Changes a date to start/end of week/month/quarter/year\r\n   * @param datelyObject Base date that is converted.\r\n   * @param type Type of change: start-week, start-month, start-quarter, start-year, end-week, end-month, end-quarter, end-year\r\n   */\r\n  public static startEnd(datelyObject: DatelyObject, type: \"start-week\" | \"start-month\" | \"start-quarter\" | \"start-year\" | \"end-week\" | \"end-month\" | \"end-quarter\" | \"end-year\"): string | undefined {\r\n    const newDayJs = this.getDayJs(datelyObject);\r\n    if (!newDayJs) {\r\n      return undefined;\r\n    }\r\n\r\n\r\n    switch (type) {\r\n      case \"start-week\":\r\n        return this.asDate(newDayJs.startOf(\"isoWeek\"));\r\n      case \"start-month\":\r\n        return this.asDate(newDayJs.startOf(\"month\"));\r\n      case \"start-quarter\":\r\n        return this.asDate(newDayJs.startOf(\"quarter\"));\r\n      case \"start-year\":\r\n        return this.asDate(newDayJs.startOf(\"year\"));\r\n      case \"end-week\":\r\n        return this.asDate(newDayJs.endOf(\"isoWeek\"));\r\n      case \"end-month\":\r\n        return this.asDate(newDayJs.endOf(\"month\"));\r\n      case \"end-quarter\":\r\n        return this.asDate(newDayJs.endOf(\"quarter\"));\r\n      case \"end-year\":\r\n        return this.asDate(newDayJs.endOf(\"year\"));\r\n      default:\r\n        throw new Error(`Start/end type \"${type}\" is not supported.`);\r\n    }\r\n  }\r\n\r\n\r\n  /**\r\n   * Parses the given date range string to a DateRange. Parsing is implemented for optimized date\r\n   * range inputs. Optimized date range means that dates can be given in a shorter/truncated form,\r\n   * for improved user efficiency, by omitting some components from the date strings:\r\n   *\r\n   * - For the end date the day is the only mandatory component, if month and/or year are omitted\r\n   * they default to current month and year respectively\r\n   * - For the start date all components are optional, any omitted components default to the\r\n   * respective components from the end date.\r\n   *\r\n   * For example the result of parsing a user inputted optimized date range string \"1 - 20\" would be\r\n   * { start: 2021-04-01, end: 2021-04-20, }.\r\n   *\r\n   * @param dateRange The optimized date range string to be parsed. The dates in the date range\r\n   * should be in finnish format (dd.mm.yyyy or without leading zeros d.m.yyyy). Start and end dates\r\n   * should be separated by a hyphen (-). Examples of valid date range strings could be e.g.\r\n   * \"1.4 - 1.5.2021\" or \"1\" which would be parsed as { start: 2021-04-01, end: 2021-05-01 } and\r\n   * { start: 2021-04-01, end: 2021-05-01 } respectively (at the time of writing this documentation).\r\n   * @returns The parsed DateRange.\r\n   */\r\n  public static parseOptimizedDateRange(dateRange: string): DateRange | undefined {\r\n    if (!this.validateDaterangeInput(dateRange)){\r\n      return undefined;\r\n    }\r\n    const dr = this.parseDateRange(dateRange);\r\n    if (!dr){\r\n      return undefined;\r\n    }\r\n    if (!this.validateDaterangeOrder(dr)){\r\n      return undefined;\r\n    }\r\n    return dr;\r\n  }\r\n\r\n  /**\r\n   * Parses a start date from an optimized date range string. Uses the end date as the default if\r\n   * start date or some of its components are not given.\r\n   * @param dateRange - String to be parsed as start of DateRange\r\n   * @returns string\r\n   */\r\n  private static parseStartDateFrom(dateRange: string): string | undefined {\r\n    if (dateRange.indexOf(\"-\") < 0) {\r\n      return this.parseEndDateFrom(dateRange);\r\n    }\r\n    const fromDate = dateRange.substring(0, dateRange.indexOf(\"-\")).trim();\r\n    return this.parseOptimizedDate(fromDate, this.parseEndDateFrom(dateRange));\r\n  }\r\n\r\n  /**\r\n   * Parses an end date from an optimized date range string. Uses the current date as the default if\r\n   * month and/or year are not given.\r\n   * @param dateRange - String to be parsed as end of DateRange\r\n   * @returns string\r\n   */\r\n  private static parseEndDateFrom(dateRange: string): string | undefined {\r\n    const toDate = dateRange.substring(dateRange.indexOf(\"-\") + 1).trim();\r\n    return this.parseOptimizedDate(toDate);\r\n  }\r\n\r\n  /**\r\n   * Parses an optimized date string. The date string should be in finnish format (dd.mm.yyyy with\r\n   * or without leading zeros). Month and/or year component can be omitted from the date string\r\n   * (optimized date string...) in which case they are taken from the default date. If default date\r\n   * is not given the current date is used\r\n   * @param date - String to be parsed as DateRange\r\n   * @param defaultDate default date, fallbacks to today\r\n   * @returns string\r\n   */\r\n  private static parseOptimizedDate(date: string, defaultDate: string = this.getToday()!): string | undefined {\r\n    const dateComponents = date.split(\".\");\r\n    dateComponents[0] = this.parseDay(dateComponents[0]);\r\n    dateComponents[1] = this.parseMonth(dateComponents[1], defaultDate);\r\n    dateComponents[2] = this.parseYear(dateComponents[2], defaultDate);\r\n    const joinedDate = dateComponents.reverse().join(\"-\");\r\n    if (this.isValidDateTime(joinedDate, true, \"YYYY-MM-DD\")){\r\n      return joinedDate;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  private static parseDay(day: string): string {\r\n    if (!day || day.length > 2) {\r\n      return \"\";\r\n    }\r\n    return day.length === 1 ? \"0\" + day : day;\r\n  }\r\n\r\n  /**\r\n   * Parses an optimized month string. If the month is not given it is taken from the default date.\r\n   */\r\n  private static parseMonth(month: string, defaultDate: string): string {\r\n    if (month?.length > 2) {\r\n      return \"\";\r\n    }\r\n    if (!month) {\r\n      month = this.getMonth(defaultDate)?.toString() ?? \"\";\r\n    }\r\n    return month.length === 1 ? \"0\" + month : month;\r\n\r\n\r\n  }\r\n\r\n  /**\r\n   * Parses an optimized year string. Defaults to the 3rd millenium, if the given year doesn't\r\n   * contain the millenia e.g. \"21\" --> \"2021\". If the year is not given at all, it is taken from\r\n   * the default date.\r\n   */\r\n  private static parseYear(year: string, defaultDate: string): string {\r\n    if (year?.length > 4) {\r\n      return \"\";\r\n    }\r\n    if (!year) {\r\n      return this.getYear(defaultDate)?.toString() ?? \"\";\r\n\r\n    }\r\n    return (parseInt(year)%2000 + 2000).toString();\r\n  }\r\n\r\n\r\n  /**\r\n   * Parses DateRange from a string\r\n   * @param dateRange string to be parsed as date range\r\n   * @returns DateRange\r\n   */\r\n  private static parseDateRange(dateRange: string): DateRange | undefined {\r\n    const dr =  { start: this.parseStartDateFrom(dateRange), end: this.parseEndDateFrom(dateRange) };\r\n    return dr;\r\n  }\r\n\r\n\r\n\r\n\r\n  /**\r\n   * Validates that the given date range string only contains allowed character (numbers, periods,\r\n   * dashes, spaces).\r\n   */\r\n  private static validateDaterangeInput(dateRange: string): boolean {\r\n    if (dateRange.match(/^[0-9 -.]*$/) == null) {\r\n      return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n\r\n\r\n  /**\r\n   * Validates a date range by checking that the start date is not after the end date.\r\n   * This method does not validate start and end dates strictly, so 30.2.2023 will be translated internally dy Day.js to\r\n   * 2.3.2023.\r\n   * @param dateRange - date range to be validated\r\n   */\r\n  private static validateDaterangeOrder(dateRange: DateRange): boolean | undefined {\r\n    const sdjs = this.getDayJs(dateRange.start);\r\n    if (!sdjs){\r\n      return undefined;\r\n    }\r\n    if (!sdjs.isValid()){\r\n      return undefined;\r\n    }\r\n    const edjs = this.getDayJs(dateRange.end);\r\n    if (!edjs){\r\n      return undefined;\r\n    }\r\n    if (!edjs.isValid()){\r\n      return undefined;\r\n    }\r\n\r\n    if (sdjs.isAfter(edjs)) {\r\n      return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Gets holidays for the given year.\r\n   *\r\n   * @param forYear - Dately object (JavaScript date, ISO string formatted date, or DayJs-object) for which the holidays are fetched.\r\n   *\r\n   * @returns The holidays for the given year.\r\n   */\r\n   public static getYearlyHolidays(forYear: DatelyObject): Holidays | undefined | null {\r\n    const year = Dates.getYear(forYear);\r\n    const yearlyHolidays = yearlyHolidaysYears.find((x) => x.year === year);\r\n    if (!yearlyHolidays) {\r\n      throw new Error(`Year ${year} not supported.`);\r\n    }\r\n    return yearlyHolidays.holidays;\r\n  }\r\n\r\n  /**\r\n   * Checks if date1 is after date2\r\n   * @param date1 comparable date1\r\n   * @param date2 comparable date1\r\n   * @param granularity granularity for isAfter, default is date\r\n   * @returns true if date1 is after date2\r\n   */\r\n  public static isAfter(date1: DatelyObject, date2: DatelyObject, granularity = \"date\"): boolean {\r\n    const date1AsDayJs = this.getDayJs(date1);\r\n    const date2AsDayJs = this.getDayJs(date2);\r\n\r\n    if (date1AsDayJs && date2AsDayJs ) {\r\n      return date1AsDayJs.isAfter(this.getDayJs(date2AsDayJs), granularity);\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Checks if date1 is before date2\r\n   * @param date1 comparable date1\r\n   * @param date2 comparable date1\r\n   * @param granularity granularity for isBefore, default is date\r\n   * @returns true if date1 is before date2\r\n   */\r\n  public static isBefore(date1: DatelyObject, date2: DatelyObject, granularity = \"date\"): boolean {\r\n    const date1AsDayJs = this.getDayJs(date1);\r\n    const date2AsDayJs = this.getDayJs(date2);\r\n\r\n    if (date1AsDayJs && date2AsDayJs ) {\r\n      return date1AsDayJs.isBefore(this.getDayJs(date2AsDayJs), granularity);\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Checks if date1 is same or after date2\r\n   * @param date1 comparable date1\r\n   * @param date2 comparable date1\r\n   * @param granularity granularity for isAfter, default is date\r\n   * @returns true if date1 is is same or after date2\r\n   */\r\n  public static isSameOrAfter(date1: DatelyObject, date2: DatelyObject, granularity = \"date\"): boolean {\r\n    const date1AsDayJs = this.getDayJs(date1);\r\n    const date2AsDayJs = this.getDayJs(date2);\r\n    if (date1AsDayJs && date2AsDayJs ) {\r\n      return date1AsDayJs.isSameOrAfter(this.getDayJs(date2AsDayJs), granularity);\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Checks if date1 is same or before date2\r\n   * @param date1 comparable date1\r\n   * @param date2 comparable date1\r\n   * @param granularity granularity for isAfter, default is date\r\n   * @returns true if date1 is same or before date2\r\n   */\r\n  public static isSameOrBefore(date1: DatelyObject, date2: DatelyObject, granularity = \"date\"): boolean {\r\n    const date1AsDayJs = this.getDayJs(date1);\r\n    const date2AsDayJs = this.getDayJs(date2);\r\n    if (date1AsDayJs && date2AsDayJs ) {\r\n      return date1AsDayJs.isSameOrBefore(this.getDayJs(date2AsDayJs), granularity);\r\n    }\r\n    return false;\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n}\r\n","/** Codegen namespace is interfaces and data that is generated in Salaxy server */\r\n\r\n/* eslint-disable */\r\n\r\n/**\r\n * Generated products data from the server.\r\n * To update, go to: https://test-api.salaxy.com/v02/api/accounts/products/anon\r\n * @ignore\r\n * TODO: Add language versioning to the server side and generation.\r\n * TODO: Can we package this entire namespace in a way that it is hidden to be internal only?\r\n */\r\nexport const accountProductDefaults: any = {\r\n    \"baseService\": {\r\n        \"campaignCode\": null,\r\n        \"id\": \"baseService\",\r\n        \"title\": \"Palkkaus.fi-tili\",\r\n        \"status\": \"Palkkaamisen peruspalvelut\",\r\n        \"description\": \"Digiajan palkanmaksupalvelu\",\r\n        \"img\": \"https://cdn.salaxy.com/img/elems/product-logos/palkkaus.png\",\r\n        \"articleId\": \"product_baseService\",\r\n        \"enabled\": true,\r\n        \"visible\": true\r\n    },\r\n    \"tax\": {\r\n        \"paymentReferenceNumber\": null,\r\n        \"isSalariesPaidThisYear\": false,\r\n        \"isMonthlyReportingEnabled\": true,\r\n        \"isYearlyReportingEnabled\": true,\r\n        \"isNotificationsSelfHandling\": false,\r\n        \"isPaymentsSelfHandling\": false,\r\n        \"id\": \"tax\",\r\n        \"title\": \"Yhteydet verottajaan\",\r\n        \"status\": \"Ennakonpidätys ja ilmoitukset\",\r\n        \"description\": \"Ennakonpidätykset ja Sotu-maksut\",\r\n        \"img\": \"https://cdn.salaxy.com/img/elems/product-logos/tax.png\",\r\n        \"articleId\": \"product_tax\",\r\n        \"enabled\": true,\r\n        \"visible\": true\r\n    },\r\n    \"unemployment\": {\r\n        \"isSalariesPaidThisYear\": false,\r\n        \"isPrepayments\": false,\r\n        \"isNotificationsSelfHandling\": false,\r\n        \"id\": \"unemployment\",\r\n        \"title\": \"Työttömyysvakuutus (TVR)\",\r\n        \"status\": \"Maksut ja ilmoitukset TVR:ään\",\r\n        \"description\": \"Työttömyysturva rahoitetaan TVR-maksuilla\",\r\n        \"img\": \"https://cdn.salaxy.com/img/elems/product-logos/tvr.png\",\r\n        \"articleId\": \"product_unemployment\",\r\n        \"enabled\": true,\r\n        \"visible\": true\r\n    },\r\n    \"pension\": {\r\n        \"status\": \"Ei sopimusta: TyEL maksetaan tilapäisenä työnantajana\",\r\n        \"isPensionContractDone\": false,\r\n        \"pensionCompany\": \"none\",\r\n        \"pensionContractNumber\": null,\r\n        \"isPensionSelfHandling\": false,\r\n        \"isPendingContract\": false,\r\n        \"enabled\": true,\r\n        \"id\": \"pension\",\r\n        \"title\": \"TyEL-eläkevakuutus\",\r\n        \"description\": \"TyEL-vakuutus on työntekijän eläketurva\",\r\n        \"img\": \"https://cdn.salaxy.com/img/elems/product-logos/varma-tyel.png\",\r\n        \"articleId\": \"product_pension\",\r\n        \"visible\": true\r\n    },\r\n    \"insurance\": {\r\n        \"status\": \"Ei sopimusta - Huom! 1200 € :n sääntö.\",\r\n        \"isPartnerInsurance\": false,\r\n        \"isInsuranceContractDone\": false,\r\n        \"insuranceCompany\": \"none\",\r\n        \"insuranceContractNumber\": null,\r\n        \"enabled\": false,\r\n        \"id\": \"insurance\",\r\n        \"title\": \"Työtapaturmavakuutus\",\r\n        \"description\": \"Tapaturmavakuutus vakuuttaa työntekijäsi\",\r\n        \"img\": \"https://cdn.salaxy.com/img/elems/product-logos/if.png\",\r\n        \"articleId\": \"product_insurance\",\r\n        \"visible\": true\r\n    },\r\n    \"accounting\": {\r\n        \"status\": \"Ei käytössä\",\r\n        \"accountantName\": null,\r\n        \"accountantEmail\": null,\r\n        \"accountantPhone\": null,\r\n        \"enabled\": false,\r\n        \"id\": \"accounting\",\r\n        \"title\": \"Kirjanpitoraportit\",\r\n        \"description\": \"Palkkalaskelmien tiedot helposti kirjanpitäjälle\",\r\n        \"img\": \"https://cdn.salaxy.com/img/elems/product-logos/accounting.png\",\r\n        \"articleId\": \"product_accounting\",\r\n        \"visible\": true\r\n    },\r\n    \"healthCareHeltti\": {\r\n        \"package\": \"notDefined\",\r\n        \"industry\": \"notDefined\",\r\n        \"status\": \"Ei sopimusta\",\r\n        \"enabled\": false,\r\n        \"id\": \"healthCareHeltti\",\r\n        \"title\": \"Työterveyshuolto\",\r\n        \"description\": \"Tuottavammat ja terveemmät työntekijät\",\r\n        \"img\": \"https://cdn.salaxy.com/img/elems/product-logos/heltti.png\",\r\n        \"articleId\": \"product_healthCareHeltti\",\r\n        \"visible\": true\r\n    },\r\n    \"pensionEntrepreneur\": {\r\n        \"status\": \"Ei YEL-sopimusta\",\r\n        \"tempContractMarker\": false,\r\n        \"enabled\": false,\r\n        \"id\": \"pensionEntrepreneur\",\r\n        \"title\": \"Yrittäjän eläke\",\r\n        \"description\": \"YEL-vakuutus on yrittäjän eläketurva\",\r\n        \"img\": \"https://cdn.salaxy.com/img/elems/product-logos/varma-yel.png\",\r\n        \"articleId\": \"product_pensionEntrepreneur\",\r\n        \"visible\": true\r\n    },\r\n    \"taxCard\": {\r\n        \"currentCard\": null,\r\n        \"status\": \"Ei verokorttia\",\r\n        \"id\": \"taxCard\",\r\n        \"title\": \"Verokortti (TT)\",\r\n        \"description\": \"Työntekijän verokortti ja sen käsittely\",\r\n        \"img\": \"https://cdn.salaxy.com/img/elems/product-logos/palkkaus.png\",\r\n        \"articleId\": \"product_taxCard\",\r\n        \"enabled\": false,\r\n        \"visible\": true\r\n    }\r\n}\r\n","/* eslint-disable */\r\n\r\n/**\r\n * Authentication methods for VismaSign.\r\n * This is the raw list of methods as returned by https://www.onnistuu.fi/api/v1/auth/methods\r\n * We will override most of these images as the ones below are pretty outdated.\r\n * @ignore\r\n */\r\nexport const vismaSignOriginalMethods = [{\r\n  \"identifier\": \"tupas-osuuspankki\",\r\n  \"name\": \"Osuuspankki\",\r\n  \"image\": \"https://www.onnistuu.fi/img/banks/op_white_bgr-14.gif\"\r\n},\r\n{\r\n  \"identifier\": \"tupas-nordea\",\r\n  \"name\": \"Nordea\",\r\n  \"image\": \"https://www.onnistuu.fi/img/banks/nordea_button_70x70px.gif\"\r\n},\r\n{\r\n  \"identifier\": \"tupas-danske\",\r\n  \"name\": \"Danske Bank\",\r\n  \"image\": \"https://www.onnistuu.fi/img/banks/danskebank.png\"\r\n},\r\n{\r\n  \"identifier\": \"tupas-spankki\",\r\n  \"name\": \"S-Pankki\",\r\n  \"image\": \"https://www.onnistuu.fi/img/banks/s-pankki.png\"\r\n},\r\n{\r\n  \"identifier\": \"tupas-handelsbanken\",\r\n  \"name\": \"Handelsbanken\",\r\n  \"image\": \"https://www.onnistuu.fi/img/banks/handelsbanken_painike.jpg\"\r\n},\r\n{\r\n  \"identifier\": \"tupas-elisa\",\r\n  \"name\": \"Mobiilivarmenne\",\r\n  \"image\": \"https://www.onnistuu.fi/img/banks/elisa.png\"\r\n},\r\n{\r\n  \"identifier\": \"tupas-aktia\",\r\n  \"name\": \"Aktia\",\r\n  \"image\": \"https://www.onnistuu.fi/img/banks/aktia.png\"\r\n},\r\n{\r\n  \"identifier\": \"tupas-poppankki\",\r\n  \"name\": \"POP Pankki\",\r\n  \"image\": \"https://www.onnistuu.fi/img/banks/POPmaksunappi.png\"\r\n},\r\n{\r\n  \"identifier\": \"tupas-sp\",\r\n  \"name\": \"S\\u00e4\\u00e4st\\u00f6pankki\",\r\n  \"image\": \"https://www.onnistuu.fi/img/banks/Spmaksunappi.png\"\r\n},\r\n{\r\n  \"identifier\": \"tupas-omasp\",\r\n  \"name\": \"Oma S\\u00e4\\u00e4st\\u00f6pankki\",\r\n  \"image\": \"https://www.onnistuu.fi/img/banks/omasp.png\"\r\n},\r\n{\r\n  \"identifier\": \"tupas-alandsbanken\",\r\n  \"name\": \"\\u00c5landsbanken\",\r\n  \"image\": \"https://www.onnistuu.fi/img/banks/alandsbanken.gif\"\r\n}];\r\n","/* eslint-disable */\r\n\r\nimport { TaxDeductionWorkCategories, VatRate, YearlyChangingNumbers } from \"../model\";\r\nimport { DatelyObject } from \"../util/DatelyObject\";\r\nimport { Dates } from \"../util/Dates\";\r\n\r\n/**\r\n * Yearly changing numbers. Contains side cost percentages.\r\n *\r\n */\r\n\r\nexport const getYearlyChangingNumbersYears = (refDate: DatelyObject) =>\r\n  [\r\n    {\r\n      \"year\": 2014,\r\n      \"sideCosts\": {\r\n        \"unemploymentEmployerPercent\": 0.0075,\r\n        \"unemploymentHigherEmployerPercent\": 0.0295,\r\n        \"unemploymentWorkerPercent\": 0.005,\r\n        \"unemploymentPartialOwnerWorkerPercent\": 0.0019,\r\n        \"tyelIncomeLimit\": 56.55,\r\n        \"tyelBasePercent\": 0.242,\r\n        \"tyelWorkerPercent\": 0.0555,\r\n        \"tyel53Percent\": 0.0705,\r\n        \"tyelContractEmployerLimit\": 8100.0,\r\n        \"socSecPercent\": 0.0214,\r\n        \"illnessInsurancePercent\": 0.0216,\r\n        \"healthInsuranceMedicalCareContribution\": 0.0132,\r\n        \"healthInsuranceDailyAllowanceContribution\": 0.0084\r\n      }\r\n    },\r\n    {\r\n      \"year\": 2015,\r\n      \"sideCosts\": {\r\n        \"unemploymentEmployerPercent\": 0.008,\r\n        \"unemploymentHigherEmployerPercent\": 0.0315,\r\n        \"unemploymentWorkerPercent\": 0.0065,\r\n        \"unemploymentPartialOwnerWorkerPercent\": 0.0024,\r\n        \"tyelIncomeLimit\": 57.1,\r\n        \"tyelBasePercent\": 0.247,\r\n        \"tyelWorkerPercent\": 0.057,\r\n        \"tyel53Percent\": 0.072,\r\n        \"tyelContractEmployerLimit\": 8178.0,\r\n        \"socSecPercent\": 0.0208,\r\n        \"illnessInsurancePercent\": 0.021,\r\n        \"healthInsuranceMedicalCareContribution\": 0.0132,\r\n        \"healthInsuranceDailyAllowanceContribution\": 0.0078\r\n      }\r\n    },\r\n    {\r\n      \"year\": 2016,\r\n      \"sideCosts\": {\r\n        \"unemploymentEmployerPercent\": 0.01,\r\n        \"unemploymentHigherEmployerPercent\": 0.039,\r\n        \"unemploymentWorkerPercent\": 0.0115,\r\n        \"unemploymentPartialOwnerWorkerPercent\": 0.0046,\r\n        \"tyelIncomeLimit\": 57.51,\r\n        \"tyelBasePercent\": 0.251,\r\n        \"tyelWorkerPercent\": 0.057,\r\n        \"tyel53Percent\": 0.072,\r\n        \"tyelContractEmployerLimit\": 8238.0,\r\n        \"socSecPercent\": 0.0212,\r\n        \"illnessInsurancePercent\": 0.0212,\r\n        \"healthInsuranceMedicalCareContribution\": 0.013,\r\n        \"healthInsuranceDailyAllowanceContribution\": 0.0082\r\n      }\r\n    },\r\n    {\r\n      \"year\": 2017,\r\n      \"sideCosts\": {\r\n        \"unemploymentEmployerPercent\": 0.008,\r\n        \"unemploymentHigherEmployerPercent\": 0.033,\r\n        \"unemploymentWorkerPercent\": 0.016,\r\n        \"unemploymentPartialOwnerWorkerPercent\": 0.007,\r\n        \"tyelIncomeLimit\": 58.19,\r\n        \"tyelBasePercent\": 0.251,\r\n        \"tyelWorkerPercent\": 0.0615,\r\n        \"tyel53Percent\": 0.0765,\r\n        \"tyelContractEmployerLimit\": 8334.0,\r\n        \"socSecPercent\": 0.0108,\r\n        \"illnessInsurancePercent\": 0.0158,\r\n        \"healthInsuranceMedicalCareContribution\": 0.0,\r\n        \"healthInsuranceDailyAllowanceContribution\": 0.0158\r\n      }\r\n    },\r\n    {\r\n      \"year\": 2018,\r\n      \"sideCosts\": {\r\n        \"unemploymentEmployerPercent\": 0.0065,\r\n        \"unemploymentHigherEmployerPercent\": 0.026,\r\n        \"unemploymentWorkerPercent\": 0.019,\r\n        \"unemploymentPartialOwnerWorkerPercent\": 0.0078,\r\n        \"tyelIncomeLimit\": 58.27,\r\n        \"tyelBasePercent\": 0.253,\r\n        \"tyelWorkerPercent\": 0.0635,\r\n        \"tyel53Percent\": 0.0785,\r\n        \"tyelContractEmployerLimit\": 8346.0,\r\n        \"socSecPercent\": 0.0086,\r\n        \"illnessInsurancePercent\": 0.0153,\r\n        \"healthInsuranceMedicalCareContribution\": 0.0,\r\n        \"healthInsuranceDailyAllowanceContribution\": 0.0153,\r\n        \"taxFreeDailyAllowance\": 42,\r\n        \"taxFreeDailyHalfAllowance\": 19,\r\n        \"taxFreeMealAllowance\": 10.5,\r\n        \"taxFreeKmAllowance\": 0.42,\r\n        \"unionPaymentRaksaA\": 0.0155,\r\n        \"unionPaymentRaksaAoTa\": 0.0055,\r\n        \"stepsTaxCardLimit1\": 10500,\r\n        \"stepsTaxCardLimit2\": 17950,\r\n        \"householdDeduction\": 0.20,\r\n      }\r\n    },\r\n    {\r\n      \"year\": 2019,\r\n      \"sideCosts\": {\r\n        \"unemploymentEmployerPercent\": 0.005,\r\n        \"unemploymentHigherEmployerPercent\": 0.0205,\r\n        \"unemploymentWorkerPercent\": 0.015,\r\n        \"unemploymentPartialOwnerWorkerPercent\": 0.0078,\r\n        \"tyelIncomeLimit\": 59.36,\r\n        \"tyelBasePercent\": 0.252,\r\n        \"tyelWorkerPercent\": 0.0675,\r\n        \"tyel53Percent\": 0.0825,\r\n        \"tyelContractEmployerLimit\": 8502.0,\r\n        \"socSecPercent\": 0.0077,\r\n        \"illnessInsurancePercent\": 0.0154,\r\n        \"healthInsuranceMedicalCareContribution\": 0.0,\r\n        \"healthInsuranceDailyAllowanceContribution\": 0.0154,\r\n        \"taxFreeDailyAllowance\": 42,\r\n        \"taxFreeDailyHalfAllowance\": 19,\r\n        \"taxFreeMealAllowance\": 10.5,\r\n        \"taxFreeKmAllowance\": 0.43,\r\n        \"unionPaymentRaksaA\": 0.0149,\r\n        \"unionPaymentRaksaAoTa\": 0.0052,\r\n        \"stepsTaxCardLimit1\": 10500,\r\n        \"stepsTaxCardLimit2\": 17950,\r\n        \"householdDeduction\": 0.20,\r\n      }\r\n    },\r\n    {\r\n      \"year\": 2020,\r\n      \"sideCosts\": {\r\n        \"unemploymentEmployerPercent\": 0.0045,\r\n        \"unemploymentHigherEmployerPercent\": 0.017,\r\n        \"unemploymentWorkerPercent\": 0.0125,\r\n        \"unemploymentPartialOwnerWorkerPercent\": 0.0065,\r\n        \"tyelIncomeLimit\": 60.57,\r\n        \"tyelBasePercent\": 0.253,\r\n        \"tyelWorkerPercent\": 0.0715,\r\n        \"tyel53Percent\": 0.0865,\r\n        \"tyelContractEmployerLimit\": 8676.0,\r\n        \"socSecPercent\": 0.0134,\r\n        \"illnessInsurancePercent\": 0.0186,\r\n        \"healthInsuranceMedicalCareContribution\": 0.0068,\r\n        \"healthInsuranceDailyAllowanceContribution\": 0.0118,\r\n        \"taxFreeDailyAllowance\": 43.0,\r\n        \"taxFreeDailyHalfAllowance\": 20.0,\r\n        \"taxFreeMealAllowance\": 10.75,\r\n        \"taxFreeKmAllowance\": 0.43,\r\n        \"unionPaymentRaksaA\": 0.0149,\r\n        \"unionPaymentRaksaAoTa\": 0.0052,\r\n        \"palkkausVatPercent\": 0.24,\r\n        \"householdDeduction\": 0.15,\r\n        \"mealBenefitCateringContract\": 6.8,\r\n        \"mealBenefitInstitute\": 5.1,\r\n        \"mealBenefitRestaurantWorker\": 5.78,\r\n        \"mealBenefitTeacher\": 4.08,\r\n        \"mealTicketLowerLimit\": 6.8,\r\n        \"mealTicketUpperLimit\": 10.7,\r\n        \"mealTicketTaxable\": 0.75,\r\n        \"protectedPortionBase\": 22.63,\r\n        \"protectedPortionDependant\": 8.12\r\n      },\r\n    },\r\n    {\r\n      \"year\": 2021,\r\n      \"sideCosts\": {\r\n        \"unemploymentEmployerPercent\": 0.005,\r\n        \"unemploymentHigherEmployerPercent\": 0.019,\r\n        \"unemploymentWorkerPercent\": 0.014,\r\n        \"unemploymentPartialOwnerWorkerPercent\": 0.0065,\r\n        \"tyelIncomeLimit\": 61.37,\r\n        \"tyelBasePercent\": 0.248,\r\n        \"tyelWorkerPercent\": 0.0715,\r\n        \"tyel53Percent\": 0.0865,\r\n        \"tyelContractEmployerLimit\": 8790.0,\r\n        \"socSecPercent\": 0.0153,\r\n        \"illnessInsurancePercent\": 0.0204,\r\n        \"healthInsuranceMedicalCareContribution\": 0.0068,\r\n        \"healthInsuranceDailyAllowanceContribution\": 0.0136,\r\n        \"taxFreeDailyAllowance\": 44.0,\r\n        \"taxFreeDailyHalfAllowance\": 20.0,\r\n        \"taxFreeMealAllowance\": 11.0,\r\n        \"taxFreeKmAllowance\": 0.44,\r\n        \"unionPaymentRaksaA\": 0.0149,\r\n        \"unionPaymentRaksaAoTa\": 0.0052,\r\n        \"palkkausVatPercent\": 0.24,\r\n        \"householdDeduction\": 0.15,\r\n        \"householdDeductionMaxAmount\": 2250,\r\n        \"householdDeductionDeductible\": 100,\r\n        \"mealBenefitCateringContract\": 6.9,\r\n        \"mealBenefitInstitute\": 5.18,\r\n        \"mealBenefitRestaurantWorker\": 5.87,\r\n        \"mealBenefitTeacher\": 4.14,\r\n        \"mealTicketLowerLimit\": 6.9,\r\n        \"mealTicketUpperLimit\": 10.9,\r\n        \"mealTicketTaxable\": 0.75,\r\n        \"protectedPortionBase\": 22.71,\r\n        \"protectedPortionDependant\": 8.15\r\n      },\r\n    },\r\n    {\r\n      \"year\": 2022,\r\n      \"sideCosts\": {\r\n        \"unemploymentEmployerPercent\": 0.005,\r\n        \"unemploymentHigherEmployerPercent\": 0.0205,\r\n        \"unemploymentWorkerPercent\": 0.015,\r\n        \"unemploymentPartialOwnerWorkerPercent\": 0.0074,\r\n        \"tyelIncomeLimit\": 62.88,\r\n        \"tyelBasePercent\": 0.2585,\r\n        \"tyelWorkerPercent\": 0.0715,\r\n        \"tyel53Percent\": 0.0865,\r\n        \"tyelContractEmployerLimit\": 9006.0,\r\n        \"socSecPercent\": 0.0134,\r\n        \"illnessInsurancePercent\": 0.0171,\r\n        \"healthInsuranceMedicalCareContribution\": 0.0053,\r\n        \"healthInsuranceDailyAllowanceContribution\": 0.0118,\r\n        \"taxFreeBicycleBenefit\": 1200,\r\n        \"taxFreeDailyAllowance\": 45.0,\r\n        \"taxFreeDailyHalfAllowance\": 20.0,\r\n        \"taxFreeMealAllowance\": 11.25,\r\n        \"taxFreeKmAllowance\": 0.46,\r\n        \"taxFreeSubsidisedCommute\": 3400,\r\n        \"unionPaymentRaksaA\": 0.0149,\r\n        \"unionPaymentRaksaAoTa\": 0.0052,\r\n        \"palkkausVatPercent\": 0.24,\r\n        \"householdDeduction\": 0.15,\r\n        \"householdDeductionExtended\": 0.30,\r\n        \"householdDeductionMaxAmount\": 2250,\r\n        \"householdDeductionMaxAmountExtended\": 3500,\r\n        \"householdDeductionDeductible\": 100,\r\n        \"householdDeductionCategoriesExtended\": [\r\n          TaxDeductionWorkCategories.Householdwork,\r\n          TaxDeductionWorkCategories.Carework,\r\n          TaxDeductionWorkCategories.OilHeatingReplacementWork\r\n        ],\r\n        \"mealBenefitCateringContract\": 7.15,\r\n        \"mealBenefitInstitute\": 5.36,\r\n        \"mealBenefitRestaurantWorker\": 6.08,\r\n        \"mealBenefitTeacher\": 4.29,\r\n        \"mealTicketLowerLimit\": 7.15,\r\n        \"mealTicketUpperLimit\": 11.30,\r\n        \"mealTicketTaxable\": 0.75,\r\n        \"protectedPortionBase\": 23.20,\r\n        \"protectedPortionDependant\": 8.34\r\n      },\r\n    },\r\n    {\r\n      \"year\": 2023,\r\n      \"sideCosts\": {\r\n        \"unemploymentEmployerPercent\": 0.0052,\r\n        \"unemploymentHigherEmployerPercent\": 0.0206,\r\n        \"unemploymentWorkerPercent\": 0.015,\r\n        \"unemploymentPartialOwnerWorkerPercent\": 0.0075,\r\n        \"tyelIncomeLimit\": 65.26,\r\n        \"tyelBasePercent\": 0.262,\r\n        \"tyelWorkerPercent\": 0.0715,\r\n        \"tyel53Percent\": 0.0865,\r\n        \"tyelContractEmployerLimit\": 9348.0,\r\n        \"socSecPercent\": 0.0153,\r\n        \"illnessInsurancePercent\": 0.0196,\r\n        \"healthInsuranceMedicalCareContribution\": 0.006,\r\n        \"healthInsuranceDailyAllowanceContribution\": 0.0136,\r\n        \"taxFreeBicycleBenefit\": 1200,\r\n        \"taxFreeDailyAllowance\": 48.0,\r\n        \"taxFreeDailyHalfAllowance\": 22.0,\r\n        \"taxFreeMealAllowance\": 12.00,\r\n        \"taxFreeKmAllowance\": 0.53,\r\n        \"taxFreeSubsidisedCommute\": 3400,\r\n        \"unionPaymentRaksaA\": 0.0149,\r\n        \"unionPaymentRaksaAoTa\": 0.0052,\r\n        \"palkkausVatPercent\": 0.24,\r\n        \"householdDeduction\": 0.15,\r\n        \"householdDeductionExtended\": 0.30,\r\n        \"householdDeductionMaxAmount\": 2250,\r\n        \"householdDeductionMaxAmountExtended\": 3500,\r\n        \"householdDeductionDeductible\": 100,\r\n        \"householdDeductionCategoriesExtended\": [\r\n          TaxDeductionWorkCategories.Householdwork,\r\n          TaxDeductionWorkCategories.Carework,\r\n          TaxDeductionWorkCategories.OilHeatingReplacementWork\r\n        ],\r\n        \"mealBenefitCateringContract\": 8.00,\r\n        \"mealBenefitInstitute\": 6.00,\r\n        \"mealBenefitRestaurantWorker\": 6.80,\r\n        \"mealBenefitTeacher\": 4.80,\r\n        \"mealTicketLowerLimit\": 8.00,\r\n        \"mealTicketUpperLimit\": 12.70,\r\n        \"mealTicketTaxable\": 0.75,\r\n        \"protectedPortionBase\": 30.75,\r\n        \"protectedPortionDependant\": 8.99\r\n      },\r\n    },\r\n    {\r\n      \"year\": 2024,\r\n      \"sideCosts\": {\r\n        \"unemploymentEmployerPercent\": 0.0027,\r\n        \"unemploymentHigherEmployerPercent\": 0.0109,\r\n        \"unemploymentWorkerPercent\": 0.0079,\r\n        \"unemploymentPartialOwnerWorkerPercent\": 0.0043,\r\n        \"tyelIncomeLimit\": 68.57,\r\n        \"tyelBasePercent\": 0.2612,\r\n        \"tyelWorkerPercent\": 0.0715,\r\n        \"tyel53Percent\": 0.0865,\r\n        \"tyelContractEmployerLimit\": 9822.0,\r\n        \"socSecPercent\": 0.0116,\r\n        \"illnessInsurancePercent\": 0.0152,\r\n        \"healthInsuranceMedicalCareContribution\": 0.0051,\r\n        \"healthInsuranceDailyAllowanceContribution\": 0.0101,\r\n        \"taxFreeDailyAllowance\": 51.0,\r\n        \"taxFreeDailyHalfAllowance\": 24.0,\r\n        \"taxFreeMealAllowance\": 12.75,\r\n        \"taxFreeBicycleBenefit\": 1200.0,\r\n        \"taxFreeSubsidisedCommute\": 3400.0,\r\n        \"taxFreeKmAllowance\": 0.57,\r\n        \"unionPaymentRaksaA\": 0.0149,\r\n        \"unionPaymentRaksaAoTa\": 0.0052,\r\n        \"palkkausVatPercent\": Dates.isSameOrAfter(refDate, \"2024-09-01\") ? 0.255 : 0.24,\r\n        \"palkkausVatRate\": Dates.isSameOrAfter(refDate, \"2024-09-01\") ? VatRate.Vat2550 : VatRate.Vat2400,\r\n        \"householdDeduction\": 0.15,\r\n        \"householdDeductionExtended\": 0.3,\r\n        \"householdDeductionMaxAmount\": 2250.0,\r\n        \"householdDeductionMaxAmountExtended\": 3500.0,\r\n        \"householdDeductionCategoriesExtended\": [\r\n           TaxDeductionWorkCategories.Householdwork,\r\n           TaxDeductionWorkCategories.Carework,\r\n           TaxDeductionWorkCategories.OilHeatingReplacementWork\r\n        ],\r\n        \"householdDeductionDeductible\": 100.0,\r\n        \"mealBenefitCateringContract\": 8.5,\r\n        \"mealBenefitInstitute\": 6.37,\r\n        \"mealBenefitRestaurantWorker\": 7.22,\r\n        \"mealBenefitTeacher\": 5.1,\r\n        \"mealTicketLowerLimit\": 8.5,\r\n        \"mealTicketUpperLimit\": 13.5,\r\n        \"mealTicketTaxable\": 0.75,\r\n        \"protectedPortionBase\": 32.56,\r\n        \"protectedPortionDependant\": 9.52\r\n      },\r\n    },\r\n    {\r\n      \"year\": 2025,\r\n      \"sideCosts\": {\r\n        \"unemploymentEmployerPercent\": 0.002,\r\n        \"unemploymentHigherEmployerPercent\": 0.008,\r\n        \"unemploymentWorkerPercent\": 0.0059,\r\n        \"unemploymentPartialOwnerWorkerPercent\": 0.003,\r\n        \"tyelIncomeLimit\": 70.08,\r\n        \"tyelBasePercent\": 0.2628,\r\n        \"tyelWorkerPercent\": 0.0715,\r\n        \"tyel53Percent\": 0.0865,\r\n        \"tyelContractEmployerLimit\": 10038.0,\r\n        \"socSecPercent\": 0.0187,\r\n        \"illnessInsurancePercent\": 0.019,\r\n        \"healthInsuranceMedicalCareContribution\": 0.0106,\r\n        \"healthInsuranceDailyAllowanceContribution\": 0.0084,\r\n        \"taxFreeDailyAllowance\": 53.0,\r\n        \"taxFreeDailyHalfAllowance\": 24.0,\r\n        \"taxFreeMealAllowance\": 13.25,\r\n        \"taxFreeBicycleBenefit\": 1200.0,\r\n        \"taxFreeSubsidisedCommute\": 3400.0,\r\n        \"taxFreeKmAllowance\": 0.59,\r\n        \"unionPaymentRaksaA\": 0.0149,\r\n        \"unionPaymentRaksaAoTa\": 0.0052,\r\n        \"palkkausVatPercent\": 0.255,\r\n        \"palkkausVatRate\": VatRate.Vat2550,\r\n        \"householdDeduction\": 0.13,\r\n        \"householdDeductionExtended\": 0.3,\r\n        \"householdDeductionMaxAmount\": 1600.0,\r\n        \"householdDeductionMaxAmountExtended\": 3500.0,\r\n        \"householdDeductionCategoriesExtended\": [\r\n          TaxDeductionWorkCategories.OilHeatingReplacementWork\r\n        ],\r\n        \"householdDeductionDeductible\": 150.0,\r\n        \"mealBenefitCateringContract\": 8.6,\r\n        \"mealBenefitInstitute\": 6.45,\r\n        \"mealBenefitRestaurantWorker\": 7.31,\r\n        \"mealBenefitTeacher\": 5.16,\r\n        \"mealTicketLowerLimit\": 8.6,\r\n        \"mealTicketUpperLimit\": 13.7,\r\n        \"mealTicketTaxable\": 0.75,\r\n        \"protectedPortionBase\": 32.88,\r\n        \"protectedPortionDependant\": 9.61\r\n      }\r\n    },\r\n    {\r\n      \"year\": 2026,\r\n      \"sideCosts\": {\r\n        \"unemploymentEmployerPercent\": 0.0031,\r\n        \"unemploymentHigherEmployerPercent\": 0.0123,\r\n        \"unemploymentWorkerPercent\": 0.0089,\r\n        \"unemploymentPartialOwnerWorkerPercent\": 0.0039,\r\n        \"tyelIncomeLimit\": 71.72,\r\n        \"tyelBasePercent\": 0.2585,\r\n        \"tyelWorkerPercent\": 0.073,\r\n        \"tyel53Percent\": 0.073,\r\n        \"tyelContractEmployerLimit\": 10272.0,\r\n        \"socSecPercent\": 0.0191,\r\n        \"illnessInsurancePercent\": 0.0198,\r\n        \"healthInsuranceMedicalCareContribution\": 0.011,\r\n        \"healthInsuranceDailyAllowanceContribution\": 0.0088,\r\n        \"taxFreeDailyAllowance\": 54.0,\r\n        \"taxFreeDailyHalfAllowance\": 25.0,\r\n        \"taxFreeMealAllowance\": 13.5,\r\n        \"taxFreeBicycleBenefit\": 0.0,\r\n        \"taxFreeSubsidisedCommute\": 3400.0,\r\n        \"taxFreeKmAllowance\": 0.55,\r\n        \"unionPaymentRaksaA\": 0.0149,\r\n        \"unionPaymentRaksaAoTa\": 0.0,\r\n        \"palkkausVatPercent\": 0.255,\r\n        \"palkkausVatRate\": VatRate.Vat2550,\r\n        \"householdDeduction\": 0.13,\r\n        \"householdDeductionExtended\": 0.3,\r\n        \"householdDeductionMaxAmount\": 1600.0,\r\n        \"householdDeductionMaxAmountExtended\": 3500.0,\r\n        \"householdDeductionCategoriesExtended\": [\r\n          TaxDeductionWorkCategories.OilHeatingReplacementWork\r\n        ],\r\n        \"householdDeductionDeductible\": 150.0,\r\n        \"mealBenefitCateringContract\": 8.8,\r\n        \"mealBenefitInstitute\": 6.6,\r\n        \"mealBenefitRestaurantWorker\": 7.48,\r\n        \"mealBenefitTeacher\": 5.28,\r\n        \"mealTicketLowerLimit\": 8.8,\r\n        \"mealTicketUpperLimit\": 14.0,\r\n        \"mealTicketTaxable\": 0.75,\r\n        \"protectedPortionBase\": 33.03,\r\n        \"protectedPortionDependant\": 9.65\r\n      }\r\n    }\r\n  ] as any as YearlyChangingNumbers[];\r\n","import { YearlyTaxFreeNumbers } from \"../model\";\r\n\r\n/**\r\n * Yearly tax-free decisions from the tax authorities starting from year 2023\r\n */\r\nexport const yearlyTaxFreeYears: Array<YearlyTaxFreeNumbers & { year: number }> =\r\n  [\r\n    {\r\n      year: 2022,\r\n      milage: {\r\n        car: 46,\r\n        carAdditions: {\r\n          trailer: 8,\r\n          caravan: 12,\r\n          canteen: 23,\r\n          largeMachinery: 3,\r\n          docInTheCar: 3,\r\n          contstructionSite: 10,\r\n        },\r\n        carLimitedBenefit: 10,\r\n        passanger: 3,\r\n        other: {\r\n          motorboatUpTo50Hp: 80,\r\n          motorboatOver50Hp: 116,\r\n          snowMobile: 110,\r\n          quadbike: 104,\r\n          motorcycle: 35,\r\n          moped: 19,\r\n          otherTransport: 11,\r\n        }\r\n      },\r\n      countries:{\r\n        Afghanistan: 47,\r\n        Albania: 67,\r\n        Algeria: 60,\r\n        Andorra: 59,\r\n        Angola: 57,\r\n        AntiquaAndBarbuda: 78,\r\n        Argentina: 37,\r\n        Armenia: 54,\r\n        Aruba: 60,\r\n        Australia: 69,\r\n        Austria: 68,\r\n        Azerbaidzhan: 54,\r\n        Azores: 61,\r\n        Bahamas: 76,\r\n        Bahrain: 73,\r\n        Bangladesh: 66,\r\n        Barbados: 73,\r\n        Belarus: 51,\r\n        Belgium: 67,\r\n        Belize: 46,\r\n        Benin: 43,\r\n        Bermuda: 75,\r\n        Bhutan: 44,\r\n        Bolivia: 41,\r\n        BosniaAndHercegovina: 51,\r\n        Botswana: 43,\r\n        Brazil: 59,\r\n        Brunei: 40,\r\n        Bulgaria: 57,\r\n        BurkinaFaso: 38,\r\n        Burundi: 43,\r\n        Cambodia: 59,\r\n        Cameroon: 54,\r\n        Canada: 71,\r\n        CanaryIslands: 63,\r\n        CapeVerde: 43,\r\n        CentralAfricanRepublic: 92,\r\n        Chad: 56,\r\n        Chile: 48,\r\n        China: 73,\r\n        HongKong: 76,\r\n        Colombia: 48,\r\n        Comoros: 33,\r\n        CongoBrazzaville: 61,\r\n        CongoKinshasa: 40,\r\n        CookIslands: 68,\r\n        CostaRica: 49,\r\n        Croatia: 63,\r\n        Cuba: 44,\r\n        Curaçao: 50,\r\n        Cyprus: 61,\r\n        CzechRepublic: 68,\r\n        Denmark: 71,\r\n        Djibouti: 71,\r\n        Dominica: 54,\r\n        DominicanRepublic: 53,\r\n        EastTimor: 46,\r\n        Ecuador: 55,\r\n        Egypt: 72,\r\n        ElSalvador: 48,\r\n        Eritrea: 77,\r\n        Estonia: 58,\r\n        Eswatini: 41,\r\n        Ethiopia: 41,\r\n        FaroeIslands: 55,\r\n        Fiji: 50,\r\n        France: 70,\r\n        Gabon: 87,\r\n        Gambia: 43,\r\n        Georgia: 42,\r\n        Germany: 66,\r\n        Ghana: 52,\r\n        Greece: 59,\r\n        Greenland: 56,\r\n        Grenada: 64,\r\n        Guadeloupe: 51,\r\n        Guatemala: 64,\r\n        Guinea: 69,\r\n        GuineaBissau: 37,\r\n        Guyana: 43,\r\n        Haiti: 48,\r\n        Honduras: 48,\r\n        Hungary: 56,\r\n        Iceland: 75,\r\n        India: 56,\r\n        Indonesia: 51,\r\n        Iran: 80,\r\n        Iraq: 51,\r\n        Ireland: 67,\r\n        Israel: 87,\r\n        Italy: 66,\r\n        IvoryCoast: 73,\r\n        Jamaica: 51,\r\n        Japan: 76,\r\n        Jordania: 80,\r\n        Kazakhstan: 45,\r\n        Kenya: 74,\r\n        NorthKorea: 63,\r\n        SouthKorea: 81,      \r\n        Kosovo: 50,\r\n        Kuwait: 72,\r\n        Kyrgystan: 39,\r\n        Laos: 47,\r\n        Latvia: 57,\r\n        Lebanon: 92,\r\n        Lesotho: 36,\r\n        Liberia: 53,\r\n        Libya: 47,\r\n        Liechtenstein: 66,\r\n        Lithuania: 55,\r\n        Luxembourg: 69,\r\n        Madagascar: 40,\r\n        Madeira: 60,\r\n        Malawi: 68,\r\n        Malaysia: 49,\r\n        Maldives: 60,\r\n        Mali: 41,\r\n        Malta: 66,\r\n        MarshallIslands: 55,\r\n        Martinique: 53,\r\n        Mauritania: 46,\r\n        Mauritius: 45,\r\n        Mexico: 55,\r\n        Micronesia: 50,\r\n        Moldova: 56,\r\n        Monaco: 92,\r\n        Mongolia: 39,\r\n        Montenegro: 59,\r\n        Morocco: 69,\r\n        Mozambique: 45,\r\n        Myanmar: 57,\r\n        Namibia: 39,\r\n        Nepal: 47,\r\n        Netherlands: 72,\r\n        NewZealand: 72,\r\n        Nicaragua: 42,\r\n        Niger: 46,\r\n        Nigeria: 76,\r\n        NorthMacedonia: 54,\r\n        Norway: 71,\r\n        Oman: 66,\r\n        Pakistan: 33,\r\n        Palau: 77,\r\n        Palestinianterritory: 77,\r\n        Panama: 54,\r\n        PapuaNewGuinea: 64,\r\n        Paraguay: 32,\r\n        Peru: 49,\r\n        Philippines: 65,\r\n        Poland: 57,\r\n        Portugal: 62,\r\n        PuertoRico: 57,\r\n        Qatar: 67,\r\n        Romania: 59,\r\n        RussianFederation: 56,\r\n        Moscow: 79,\r\n        StPetersburg: 64,\r\n        Rwanda: 36,\r\n        SaintKittsAndNevis: 59,\r\n        SaintLucia: 71,\r\n        SaintVincentAndTheGrenadines: 71,\r\n        Samoa: 53,\r\n        SanMarino: 61,\r\n        SaoTomeAndPrincipe: 85,\r\n        SaudiArabia: 68,\r\n        Senegal: 53,\r\n        Serbia: 63,\r\n        Seychelles: 74,\r\n        SierraLeone: 57,\r\n        Singapore: 68,\r\n        Slovakia: 64,\r\n        Slovenia: 61,\r\n        SolomonIslands: 53,\r\n        Somalia: 67,\r\n        SouthAfrica: 53,\r\n        SouthSudan: 92,\r\n        Spain: 65,\r\n        SriLanka: 39,\r\n        Sudan: 25,\r\n        Suriname: 72,\r\n        Sweden: 63,\r\n        Switzerland: 78,\r\n        Syria: 84,\r\n        Tadzhikistan: 35,\r\n        Taiwan: 67,\r\n        Tanzania: 49,\r\n        Thailand: 60,\r\n        Togo: 52,\r\n        Tonga: 53,\r\n        TrinidadAndTobago: 70,\r\n        Tunisia: 54,\r\n        Turkey: 37,\r\n        Istanbul: 39,\r\n        Turkmenistan: 80,\r\n        Uganda: 43,\r\n        Ukraine: 70,\r\n        UnitedArabEmirates: 73,\r\n        UnitedKingdom: 68,\r\n        LondonAndEdinburgh: 72,\r\n        UnitedStates: 72,\r\n        NewYorkLosAngelesWashington: 78,\r\n        Uruguay: 51,\r\n        Uzbekistan: 31,\r\n        Vanuatu: 60,\r\n        Venezuela: 85,\r\n        Vietnam: 64,\r\n        VirginIslands: 51,\r\n        Yemen: 92,\r\n        Zimbabwe: 51,\r\n        Zambia: 58,\r\n        Other: 46\r\n      }\r\n    },\r\n    {\r\n      year: 2023,\r\n      milage: {\r\n        car: 53,\r\n        carAdditions: {\r\n          trailer: 9,\r\n          caravan: 14,\r\n          canteen: 27,\r\n          largeMachinery: 4,\r\n          docInTheCar: 4,\r\n          contstructionSite: 11,\r\n        },\r\n        carLimitedBenefit: 14,\r\n        passanger: 4,\r\n        other: {\r\n          motorboatUpTo50Hp: 93,\r\n          motorboatOver50Hp: 135,\r\n          snowMobile: 129,\r\n          quadbike: 121,\r\n          motorcycle: 41,\r\n          moped: 22,\r\n          otherTransport: 13,\r\n        }\r\n      },\r\n      countries: {\r\n        Afghanistan: 55,\r\n        Albania: 71,\r\n        Algeria: 74,\r\n        Andorra: 59,\r\n        Angola: 73,\r\n        AntiquaAndBarbuda: 95,\r\n        Argentina: 45,\r\n        Armenia: 62,\r\n        Aruba: 74,\r\n        Australia: 77,\r\n        Austria: 75,\r\n        Azerbaidzhan: 68,\r\n        Azores: 67,\r\n        Bahamas: 92,\r\n        Bahrain: 86,\r\n        Bangladesh: 68,\r\n        Barbados: 90,\r\n        Belarus: 66,\r\n        Belgium: 74,\r\n        Belize: 54,\r\n        Benin: 45,\r\n        Bermuda: 94,\r\n        Bhutan: 52,\r\n        Bolivia: 49,\r\n        BosniaAndHercegovina: 52,\r\n        Botswana: 46,\r\n        Brazil: 77,\r\n        Brunei: 46,\r\n        Bulgaria: 59,\r\n        BurkinaFaso: 40,\r\n        Burundi: 54,\r\n        Cambodia: 72,\r\n        Cameroon: 55,\r\n        Canada: 86,\r\n        CanaryIslands: 70,\r\n        CapeVerde: 44,\r\n        CentralAfricanRepublic: 96,\r\n        Chad: 56,\r\n        Chile: 55,\r\n        China: 82,\r\n        HongKong: 92,\r\n        Colombia: 55,\r\n        Comoros: 38,\r\n        CongoBrazzaville: 62,\r\n        CongoKinshasa: 50,\r\n        CookIslands: 69,\r\n        CostaRica: 60,\r\n        Croatia: 65,\r\n        Cuba: 52,\r\n        Curaçao: 60,\r\n        Cyprus: 63,\r\n        CzechRepublic: 82,\r\n        Denmark: 77,\r\n        Djibouti: 85,\r\n        Dominica: 64,\r\n        DominicanRepublic: 58,\r\n        EastTimor: 51,\r\n        Ecuador: 65,\r\n        Egypt: 73,\r\n        ElSalvador: 59,\r\n        Eritrea: 95,\r\n        Estonia: 72,\r\n        Eswatini: 41,\r\n        Ethiopia: 43,\r\n        FaroeIslands: 60,\r\n        Fiji: 56,\r\n        France: 74,\r\n        Gabon: 88,\r\n        Gambia: 50,\r\n        Georgia: 48,\r\n        Germany: 71,\r\n        Ghana: 41,\r\n        Greece: 66,\r\n        Greenland: 61,\r\n        Grenada: 76,\r\n        Guadeloupe: 51,\r\n        Guatemala: 78,\r\n        Guinea: 82,\r\n        GuineaBissau: 38,\r\n        Guyana: 53,\r\n        Haiti: 55,\r\n        Honduras: 59,\r\n        Hungary: 56,\r\n        Iceland: 89,\r\n        India: 64,\r\n        Indonesia: 61,\r\n        Iran: 122,\r\n        Iraq: 65,\r\n        Ireland: 73,\r\n        Israel: 100,\r\n        Italy: 72,\r\n        IvoryCoast: 77,\r\n        Jamaica: 64,\r\n        Japan: 70,\r\n        Jordania: 96,\r\n        Kazakhstan: 51,\r\n        Kenya: 85,\r\n        NorthKorea: 75,\r\n        SouthKorea: 85,      \r\n        Kosovo: 52,\r\n        Kuwait: 86,\r\n        Kyrgystan: 42,\r\n        Laos: 35,\r\n        Latvia: 69,\r\n        Lebanon: 122,\r\n        Lesotho: 37,\r\n        Liberia: 71,\r\n        Libya: 53,\r\n        Liechtenstein: 77,\r\n        Lithuania: 68,\r\n        Luxembourg: 74,\r\n        Madagascar: 46,\r\n        Madeira: 66,\r\n        Malawi: 69,\r\n        Malaysia: 54,\r\n        Maldives: 71,\r\n        Mali: 43,\r\n        Malta: 67,\r\n        MarshallIslands: 67,\r\n        Martinique: 54,\r\n        Mauritania: 53,\r\n        Mauritius: 53,\r\n        Mexico: 71,\r\n        Micronesia: 60,\r\n        Moldova: 64,\r\n        Monaco: 92,\r\n        Mongolia: 44,\r\n        Montenegro: 61,\r\n        Morocco: 69,\r\n        Mozambique: 55,\r\n        Myanmar: 61,\r\n        Namibia: 40,\r\n        Nepal: 53,\r\n        Netherlands: 80,\r\n        NewZealand: 75,\r\n        Nicaragua: 51,\r\n        Niger: 49,\r\n        Nigeria: 81,\r\n        NorthMacedonia: 56,\r\n        Norway: 76,\r\n        Oman: 79,\r\n        Pakistan: 31,\r\n        Palau: 94,\r\n        Palestinianterritory: 86,\r\n        Panama: 65,\r\n        PapuaNewGuinea: 79,\r\n        Paraguay: 39,\r\n        Peru: 51,\r\n        Philippines: 70,\r\n        Poland: 64,\r\n        Portugal: 68,\r\n        PuertoRico: 72,\r\n        Qatar: 81,\r\n        Romania: 62,\r\n        RussianFederation: 69,\r\n        Moscow: 85,\r\n        StPetersburg: 78,\r\n        Rwanda: 40,\r\n        SaintKittsAndNevis: 70,\r\n        SaintLucia: 86,\r\n        SaintVincentAndTheGrenadines: 86,\r\n        Samoa: 60,\r\n        SanMarino: 62,\r\n        SaoTomeAndPrincipe: 101,\r\n        SaudiArabia: 83,\r\n        Senegal: 55,\r\n        Serbia: 66,\r\n        Seychelles: 93,\r\n        SierraLeone: 53,\r\n        Singapore: 79,\r\n        Slovakia: 73,\r\n        Slovenia: 68,\r\n        SolomonIslands: 63,\r\n        Somalia: 87,\r\n        SouthAfrica: 55,\r\n        SouthSudan: 119,\r\n        Spain: 72,\r\n        SriLanka: 34,\r\n        Sudan: 50,\r\n        Suriname: 74,\r\n        Sweden: 66,\r\n        Switzerland: 91,\r\n        Syria: 98,\r\n        Tadzhikistan: 39,\r\n        Taiwan: 73,\r\n        Tanzania: 59,\r\n        Thailand: 65,\r\n        Togo: 54,\r\n        Tonga: 59,\r\n        TrinidadAndTobago: 84,\r\n        Tunisia: 59,\r\n        Turkey: 38,\r\n        Istanbul: 39,\r\n        Turkmenistan: 92,\r\n        Uganda: 50,\r\n        Ukraine: 62,\r\n        UnitedArabEmirates: 84,\r\n        UnitedKingdom: 73,\r\n        LondonAndEdinburgh: 77,\r\n        UnitedStates: 92,\r\n        NewYorkLosAngelesWashington: 100,\r\n        Uruguay: 56,\r\n        Uzbekistan: 35,\r\n        Vanuatu: 70,\r\n        Venezuela: 100,\r\n        Vietnam: 74,\r\n        VirginIslands: 66,\r\n        Yemen: 122,\r\n        Zimbabwe: 75,\r\n        Zambia: 70,\r\n        Other: 53\r\n      }\r\n    },\r\n    {\r\n      year: 2024,\r\n      milage: {\r\n        car: 57,\r\n        carAdditions: {\r\n          trailer: 10,\r\n          caravan: 15,\r\n          canteen: 29,\r\n          largeMachinery: 4,\r\n          docInTheCar: 4,\r\n          contstructionSite: 12,\r\n        },\r\n        carLimitedBenefit: 13,\r\n        passanger: 4,\r\n        other: {\r\n          motorboatUpTo50Hp: 100,\r\n          motorboatOver50Hp: 145,\r\n          snowMobile: 138,\r\n          quadbike: 130,\r\n          motorcycle: 44,\r\n          moped: 23,\r\n          otherTransport: 14,\r\n        }\r\n      },\r\n      countries: {\r\n        Afghanistan: 59,\r\n        Albania: 81,\r\n        Algeria: 78,\r\n        Andorra: 63,\r\n        Angola: 71,\r\n        AntiquaAndBarbuda: 94,\r\n        Argentina: 38,\r\n        Armenia: 61,\r\n        Aruba: 70,\r\n        Australia: 74,\r\n        Austria: 80,\r\n        Azerbaidzhan: 70,\r\n        Azores: 69,\r\n        Bahamas: 91,\r\n        Bahrain: 80,\r\n        Bangladesh: 57,\r\n        Barbados: 83,\r\n        Belarus: 63,\r\n        Belgium: 77,\r\n        Belize: 52,\r\n        Benin: 47,\r\n        Bermuda: 90,\r\n        Bhutan: 49,\r\n        Bolivia: 48,\r\n        BosniaAndHercegovina: 54,\r\n        Botswana: 41,\r\n        Brazil: 80,\r\n        Brunei: 45,\r\n        Bulgaria: 64,\r\n        BurkinaFaso: 40,\r\n        Burundi: 46,\r\n        Cambodia: 67,\r\n        Cameroon: 59,\r\n        Canada: 82,\r\n        CanaryIslands: 71,\r\n        CapeVerde: 45,\r\n        CentralAfricanRepublic: 101,\r\n        Chad: 47,\r\n        Chile: 56,\r\n        China: 74,\r\n        HongKong: 86,\r\n        Colombia: 64,\r\n        Comoros: 42,\r\n        CongoBrazzaville: 64,\r\n        CongoKinshasa: 51,\r\n        CookIslands: 70,\r\n        CostaRica: 65,\r\n        Croatia: 69,\r\n        Cuba: 68,\r\n        Curaçao: 58,\r\n        Cyprus: 65,\r\n        CzechRepublic: 89,\r\n        Denmark: 79,\r\n        Djibouti: 83,\r\n        Dominica: 61,\r\n        DominicanRepublic: 53,\r\n        EastTimor: 46,\r\n        Ecuador: 53,\r\n        Egypt: 66,\r\n        ElSalvador: 60,\r\n        Eritrea: 95,\r\n        Estonia: 75,\r\n        Eswatini: 37,\r\n        Ethiopia: 49,\r\n        FaroeIslands: 61,\r\n        Fiji: 52,\r\n        France: 78,\r\n        Gabon: 92,\r\n        Gambia: 46,\r\n        Georgia: 49,\r\n        Germany: 76,\r\n        Ghana: 47,\r\n        Greece: 68,\r\n        Greenland: 63,\r\n        Grenada: 73,\r\n        Guadeloupe: 53,\r\n        Guatemala: 76,\r\n        Guinea: 83,\r\n        GuineaBissau: 41,\r\n        Guyana: 51,\r\n        Haiti: 62,\r\n        Honduras: 58,\r\n        Hungary: 69,\r\n        Iceland: 82,\r\n        India: 62,\r\n        Indonesia: 57,\r\n        Iran: 102,\r\n        Iraq: 70,\r\n        Ireland: 78,\r\n        Israel: 88,\r\n        Italy: 76,\r\n        IvoryCoast: 80,\r\n        Jamaica: 62,\r\n        Japan: 66,\r\n        Jordania: 90,\r\n        Kazakhstan: 59,\r\n        Kenya: 70,\r\n        NorthKorea: 70,\r\n        SouthKorea: 87,      \r\n        Kosovo: 58,\r\n        Kuwait: 84,\r\n        Kyrgystan: 41,\r\n        Laos: 32,\r\n        Latvia: 73,\r\n        Lebanon: 102,\r\n        Lesotho: 34,\r\n        Liberia: 60,\r\n        Libya: 52,\r\n        Liechtenstein: 79,\r\n        Lithuania: 72,\r\n        Luxembourg: 77,\r\n        Madagascar: 45,\r\n        Madeira: 68,\r\n        Malawi: 77,\r\n        Malaysia: 50,\r\n        Maldives: 68,\r\n        Mali: 47,\r\n        Malta: 71,\r\n        MarshallIslands: 65,\r\n        Martinique: 55,\r\n        Mauritania: 52,\r\n        Mauritius: 53,\r\n        Mexico: 81,\r\n        Micronesia: 59,\r\n        Moldova: 73,\r\n        Monaco: 92,\r\n        Mongolia: 42,\r\n        Montenegro: 66,\r\n        Morocco: 71,\r\n        Mozambique: 53,\r\n        Myanmar: 58,\r\n        Namibia: 36,\r\n        Nepal: 51,\r\n        Netherlands: 83,\r\n        NewZealand: 74,\r\n        Nicaragua: 51,\r\n        Niger: 50,\r\n        Nigeria: 78,\r\n        NorthMacedonia: 64,\r\n        Norway: 70,\r\n        Oman: 74,\r\n        Pakistan: 29,\r\n        Palau: 99,\r\n        Palestinianterritory: 76,\r\n        Panama: 61,\r\n        PapuaNewGuinea: 76,\r\n        Paraguay: 36,\r\n        Peru: 52,\r\n        Philippines: 69,\r\n        Poland: 72,\r\n        Portugal: 70,\r\n        PuertoRico: 70,\r\n        Qatar: 78,\r\n        Romania: 68,\r\n        RussianFederation: 66,\r\n        Moscow: 82,\r\n        StPetersburg: 76,\r\n        Rwanda: 37,\r\n        SaintKittsAndNevis: 68,\r\n        SaintLucia: 86,\r\n        SaintVincentAndTheGrenadines: 85,\r\n        Samoa: 61,\r\n        SanMarino: 59,\r\n        SaoTomeAndPrincipe: 102,\r\n        SaudiArabia: 80,\r\n        Senegal: 58,\r\n        Serbia: 75,\r\n        Seychelles: 87,\r\n        SierraLeone: 47,\r\n        Singapore: 79,\r\n        Slovakia: 79,\r\n        Slovenia: 72,\r\n        SolomonIslands: 63,\r\n        Somalia: 86,\r\n        SouthAfrica: 50,\r\n        SouthSudan: 102,\r\n        Spain: 74,\r\n        SriLanka: 29,\r\n        Sudan: 83,\r\n        Suriname: 78,\r\n        Sweden: 64,\r\n        Switzerland: 93,\r\n        Syria: 91,\r\n        Tadzhikistan: 35,\r\n        Taiwan: 69,\r\n        Tanzania: 54,\r\n        Thailand: 63,\r\n        Togo: 58,\r\n        Tonga: 62,\r\n        TrinidadAndTobago: 83,\r\n        Tunisia: 61,\r\n        Turkey: 35,\r\n        Istanbul: 37,\r\n        Turkmenistan: 92,\r\n        Uganda: 49,\r\n        Ukraine: 64,\r\n        UnitedArabEmirates: 73,\r\n        UnitedKingdom: 79,\r\n        LondonAndEdinburgh: 83,\r\n        UnitedStates: 89,\r\n        NewYorkLosAngelesWashington: 97,\r\n        Uruguay: 59,\r\n        Uzbekistan: 32,\r\n        Vanuatu: 70,\r\n        Venezuela: 102,\r\n        Vietnam: 69,\r\n        VirginIslands: 64,\r\n        Yemen: 102,\r\n        Zimbabwe: 102,\r\n        Zambia: 55,\r\n        Other: 52\r\n      }\r\n    },\r\n    {\r\n      year: 2025,\r\n      milage: {\r\n        car: 59,\r\n        carAdditions: {\r\n          trailer: 10,\r\n          caravan: 15,\r\n          canteen: 30,\r\n          largeMachinery: 4,\r\n          docInTheCar: 4,\r\n          contstructionSite: 13,\r\n        },\r\n        carLimitedBenefit: 12,\r\n        passanger: 4,\r\n        other: {\r\n          motorboatUpTo50Hp: 103,\r\n          motorboatOver50Hp: 149,\r\n          snowMobile: 142,\r\n          quadbike: 134,\r\n          motorcycle: 45,\r\n          moped: 24,\r\n          otherTransport: 14,\r\n        }\r\n      },\r\n      countries: {\r\n        Afghanistan:61,\r\n        Albania:89,\r\n        Algeria:82,\r\n        Andorra:65,\r\n        Angola:69,\r\n        AntiquaAndBarbuda:95,\r\n        Argentina:45,\r\n        Armenia:59,\r\n        Aruba:69,\r\n        Australia:77,\r\n        Austria:82,\r\n        Azerbaidzhan:69,\r\n        Azores:70,\r\n        Bahamas:89,\r\n        Bahrain:78,\r\n        Bangladesh:56,\r\n        Barbados:79,\r\n        Belarus:50,\r\n        Belgium:79,\r\n        Belize:52,\r\n        Benin:47,\r\n        Bermuda:89,\r\n        Bhutan:37,\r\n        Bolivia:48,\r\n        BosniaAndHercegovina:62,\r\n        Botswana:42,\r\n        Brazil:70,\r\n        Brunei:45,\r\n        Bulgaria:66,\r\n        BurkinaFaso:41,\r\n        Burundi:55,\r\n        Cambodia:66,\r\n        Cameroon:62,\r\n        Canada:80,\r\n        CanaryIslands:73,\r\n        CapeVerde:45,\r\n        CentralAfricanRepublic:102,\r\n        Chad:52,\r\n        Chile:55,\r\n        China:73,\r\n        HongKong:83,\r\n        Colombia:61,\r\n        Comoros:46,\r\n        CongoBrazzaville:66,\r\n        CongoKinshasa:58,\r\n        CookIslands:73,\r\n        CostaRica:64,\r\n        Croatia:71,\r\n        Cuba:64,\r\n        Curaçao:57,\r\n        Cyprus:66,\r\n        CzechRepublic:89,\r\n        Denmark:80,\r\n        Djibouti:83,\r\n        Dominica:60,\r\n        DominicanRepublic:50,\r\n        EastTimor:47,\r\n        Ecuador:62,\r\n        Egypt:51,\r\n        ElSalvador:58,\r\n        Eritrea:97,\r\n        Estonia:78,\r\n        Eswatini:40,\r\n        Ethiopia:46,\r\n        FaroeIslands:62,\r\n        Fiji:54,\r\n        France:79,\r\n        Gabon:95,\r\n        Gambia:44,\r\n        Georgia:46,\r\n        Germany:77,\r\n        Ghana:41,\r\n        Greece:70,\r\n        Greenland:63,\r\n        Grenada:72,\r\n        Guadeloupe:54,\r\n        Guatemala:77,\r\n        Guinea:85,\r\n        GuineaBissau:45,\r\n        Guyana:51,\r\n        Haiti:79,\r\n        Honduras:58,\r\n        Hungary:69,\r\n        Iceland:93,\r\n        India:61,\r\n        Indonesia:56,\r\n        Iran:119,\r\n        Iraq:71,\r\n        Ireland:79,\r\n        Israel:89,\r\n        Italy:77,\r\n        IvoryCoast:83,\r\n        Jamaica:61,\r\n        Japan:69,\r\n        Jordania:88,\r\n        Kazakhstan:60,\r\n        Kenya:80,\r\n        NorthKorea:67,\r\n        SouthKorea:85,\r\n        Kosovo:61,\r\n        Kuwait:84,\r\n        Kyrgystan:43,\r\n        Laos:34,\r\n        Latvia:73,\r\n        Lebanon:95,\r\n        Lesotho:37,\r\n        Liberia:59,\r\n        Libya:52,\r\n        Liechtenstein:81,\r\n        Lithuania:72,\r\n        Luxembourg:79,\r\n        Madagascar:46,\r\n        Madeira:69,\r\n        Malawi:61,\r\n        Malaysia:54,\r\n        Maldives:66,\r\n        Mali:49,\r\n        Malta:72,\r\n        MarshallIslands:67,\r\n        Martinique:57,\r\n        Mauritania:49,\r\n        Mauritius:49,\r\n        Mexico:73,\r\n        Micronesia:60,\r\n        Moldova:76,\r\n        Monaco:92,\r\n        Mongolia:44,\r\n        Montenegro:68,\r\n        Morocco:72,\r\n        Mozambique:52,\r\n        Myanmar:71,\r\n        Namibia:39,\r\n        Nepal:51,\r\n        Netherlands:86,\r\n        NewZealand:77,\r\n        Nicaragua:50,\r\n        Niger:56,\r\n        Nigeria:68,\r\n        NorthMacedonia:66,\r\n        Norway:70,\r\n        Oman:72,\r\n        Pakistan:33,\r\n        Palau:107,\r\n        Palestinianterritory:89,\r\n        Panama:60,\r\n        PapuaNewGuinea:67,\r\n        Paraguay:34,\r\n        Peru:50,\r\n        Philippines:70,\r\n        Poland:81,\r\n        Portugal:72,\r\n        PuertoRico:71,\r\n        Qatar:75,\r\n        Romania:71,\r\n        RussianFederation:73,\r\n        Moscow:91,\r\n        StPetersburg:83,\r\n        Rwanda:33,\r\n        SaintKittsAndNevis:65,\r\n        SaintLucia:83,\r\n        SaintVincentAndTheGrenadines:85,\r\n        Samoa:61,\r\n        SanMarino:60,\r\n        SaoTomeAndPrincipe:119,\r\n        SaudiArabia:78,\r\n        Senegal:57,\r\n        Serbia:78,\r\n        Seychelles:81,\r\n        SierraLeone:58,\r\n        Singapore:82,\r\n        Slovakia:81,\r\n        Slovenia:73,\r\n        SolomonIslands:62,\r\n        Somalia:88,\r\n        SouthAfrica:54,\r\n        SouthSudan:119,\r\n        Spain:75,\r\n        SriLanka:31,\r\n        Sudan:119,\r\n        Suriname:104,\r\n        Sweden:68,\r\n        Switzerland:96,\r\n        Syria:78,\r\n        Tadzhikistan:35,\r\n        Taiwan:67,\r\n        Tanzania:49,\r\n        Thailand:65,\r\n        Togo:63,\r\n        Tonga:65,\r\n        TrinidadAndTobago:80,\r\n        Tunisia:65,\r\n        Turkey:41,\r\n        Istanbul:42,\r\n        Turkmenistan:86,\r\n        Uganda:49,\r\n        Ukraine:57,\r\n        UnitedArabEmirates:72,\r\n        UnitedKingdom:83,\r\n        LondonAndEdinburgh:87,\r\n        UnitedStates:88,\r\n        NewYorkLosAngelesWashington:95,\r\n        Uruguay:55,\r\n        Uzbekistan:33,\r\n        Vanuatu:72,\r\n        Venezuela:119,\r\n        Vietnam:69,\r\n        VirginIslands:63,\r\n        Yemen:97,\r\n        Zimbabwe:119,\r\n        Zambia:46,\r\n        Other:52        \r\n      }\r\n    },\r\n    {\r\n      year: 2026,\r\n      milage: {\r\n        car: 55,\r\n        carAdditions: {\r\n          trailer: 9,\r\n          caravan: 15,\r\n          canteen: 28,\r\n          largeMachinery: 4,\r\n          docInTheCar: 4,\r\n          contstructionSite: 12,\r\n        },\r\n        carLimitedBenefit: 11,\r\n        passanger: 4,\r\n        other: {\r\n          motorboatUpTo50Hp: 97,\r\n          motorboatOver50Hp: 141,\r\n          snowMobile: 134,\r\n          quadbike: 126,\r\n          motorcycle: 42,\r\n          moped: 23,\r\n          otherTransport: 13,\r\n        }\r\n      },\r\n      countries: {\r\n        Afghanistan:58,\r\n        Albania:93,\r\n        Algeria:79,\r\n        Andorra:66,\r\n        Angola:80,\r\n        AntiquaAndBarbuda:92,\r\n        Argentina:43,\r\n        Armenia:59,\r\n        Aruba:66,\r\n        Australia:72,\r\n        Austria:85,\r\n        Azerbaidzhan:69,\r\n        Azores:72,\r\n        Bahamas:85,\r\n        Bahrain:73,\r\n        Bangladesh:57,\r\n        Barbados:75,\r\n        Belarus:49,\r\n        Belgium:81,\r\n        Belize:50,\r\n        Benin:48,\r\n        Bermuda:86,\r\n        Bhutan:35,\r\n        Bolivia:57,\r\n        BosniaAndHercegovina:64,\r\n        Botswana:44,\r\n        Brazil:72,\r\n        Brunei:43,\r\n        Bulgaria:69,\r\n        BurkinaFaso:32,\r\n        Burundi:62,\r\n        Cambodia:65,\r\n        Cameroon:65,\r\n        Canada:76,\r\n        CanaryIslands:75,\r\n        CapeVerde:46,\r\n        CentralAfricanRepublic:104,\r\n        Chad:50,\r\n        Chile:52,\r\n        China:69,\r\n        HongKong:79,\r\n        Colombia:63,\r\n        Comoros:48,\r\n        CongoBrazzaville:70,\r\n        CongoKinshasa:58,\r\n        CookIslands:67,\r\n        CostaRica:62,\r\n        Croatia:74,\r\n        Cuba:70,\r\n        Curaçao:55,\r\n        Cyprus:65,\r\n        CzechRepublic:94,\r\n        Denmark:82,\r\n        Djibouti:79,\r\n        Dominica:59,\r\n        DominicanRepublic:48,\r\n        EastTimor:43,\r\n        Ecuador:59,\r\n        Egypt:55,\r\n        ElSalvador:55,\r\n        Eritrea:100,\r\n        Estonia:82,\r\n        Eswatini:39,\r\n        Ethiopia:39,\r\n        FaroeIslands:64,\r\n        Fiji:50,\r\n        France:80,\r\n        Gabon:97,\r\n        Gambia:43,\r\n        Georgia:46,\r\n        Germany:78,\r\n        Ghana:49,\r\n        Greece:72,\r\n        Greenland:65,\r\n        Grenada:70,\r\n        Guadeloupe:55,\r\n        Guatemala:75,\r\n        Guinea:83,\r\n        GuineaBissau:46,\r\n        Guyana:50,\r\n        Haiti:98,\r\n        Honduras:55,\r\n        Hungary:72,\r\n        Iceland:102,\r\n        India:57,\r\n        Indonesia:52,\r\n        Iran:134,\r\n        Iraq:67,\r\n        Ireland:81,\r\n        Israel:97,\r\n        Italy:78,\r\n        IvoryCoast:86,\r\n        Jamaica:59,\r\n        Japan:64,\r\n        Jordania:85,\r\n        Kazakhstan:57,\r\n        Kenya:79,\r\n        NorthKorea:64,\r\n        SouthKorea:78,\r\n        Kosovo:62,\r\n        Kuwait:82,\r\n        Kyrgystan:43,\r\n        Laos:35,\r\n        Latvia:76,\r\n        Lebanon:103,\r\n        Lesotho:37,\r\n        Liberia:61,\r\n        Libya:44,\r\n        Liechtenstein:81,\r\n        Lithuania:75,\r\n        Luxembourg:81,\r\n        Madagascar:48,\r\n        Madeira:71,\r\n        Malawi:75,\r\n        Malaysia:53,\r\n        Maldives:66,\r\n        Mali:53,\r\n        Malta:74,\r\n        MarshallIslands:67,\r\n        Martinique:57,\r\n        Mauritania:46,\r\n        Mauritius:49,\r\n        Mexico:74,\r\n        Micronesia:60,\r\n        Moldova:81,\r\n        Monaco:92,\r\n        Mongolia:31,\r\n        Montenegro:71,\r\n        Morocco:75,\r\n        Mozambique:52,\r\n        Myanmar:85,\r\n        Namibia:38,\r\n        Nepal:47,\r\n        Netherlands:88,\r\n        NewZealand:72,\r\n        Nicaragua:48,\r\n        Niger:43,\r\n        Nigeria:32,\r\n        NorthMacedonia:69,\r\n        Norway:72,\r\n        Oman:69,\r\n        Pakistan:32,\r\n        Palau:104,\r\n        Palestinianterritory:120,\r\n        Panama:57,\r\n        PapuaNewGuinea:62,\r\n        Paraguay:36,\r\n        Peru:51,\r\n        Philippines:66,\r\n        Poland:84,\r\n        Portugal:74,\r\n        PuertoRico:69,\r\n        Qatar:71,\r\n        Romania:74,\r\n        RussianFederation:87,\r\n        Moscow:108,\r\n        StPetersburg:100,\r\n        Rwanda:31,\r\n        SaintKittsAndNevis:62,\r\n        SaintLucia:80,\r\n        SaintVincentAndTheGrenadines:84,\r\n        Samoa:58,\r\n        SanMarino:61,\r\n        SaoTomeAndPrincipe:132,\r\n        SaudiArabia:75,\r\n        Senegal:58,\r\n        Serbia:82,\r\n        Seychelles:71,\r\n        SierraLeone:58,\r\n        Singapore:79,\r\n        Slovakia:85,\r\n        Slovenia:75,\r\n        SolomonIslands:64,\r\n        Somalia:87,\r\n        SouthAfrica:53,\r\n        SouthSudan:134,\r\n        Spain:78,\r\n        SriLanka:29,\r\n        Sudan:134,\r\n        Suriname:85,\r\n        Sweden:70,\r\n        Switzerland:95,\r\n        Syria:86,\r\n        Tadzhikistan:40,\r\n        Taiwan:69,\r\n        Tanzania:51,\r\n        Thailand:63,\r\n        Togo:63,\r\n        Tonga:62,\r\n        TrinidadAndTobago:78,\r\n        Tunisia:69,\r\n        Turkey:43,\r\n        Istanbul:44,\r\n        Turkmenistan:86,\r\n        Uganda:51,\r\n        Ukraine:62,\r\n        UnitedArabEmirates:69,\r\n        UnitedKingdom:84,\r\n        LondonAndEdinburgh:89,\r\n        UnitedStates:86,\r\n        NewYorkLosAngelesWashington:93,\r\n        Uruguay:56,\r\n        Uzbekistan:34,\r\n        Vanuatu:69,\r\n        Venezuela:107,\r\n        Vietnam:63,\r\n        VirginIslands:61,\r\n        Yemen:109,\r\n        Zimbabwe:122,\r\n        Zambia:58,\r\n        Other:52\r\n      }\r\n    }\r\n  ];","/* eslint-disable */\r\n/**\r\n * Keva employment registration codes.\r\n * Created manually.\r\n */\r\nexport const kevaEmploymentRegCodes = [\r\n  { \"pensionCompany\": \"kevaMunicipal\", \"code\": \"01\", \"labelFi\": \"virka-/työsuhde\", \"labelSv\": \"tjänste-/arbetsavtalsförhållande\" },\r\n  { \"pensionCompany\": \"kevaMunicipal\", \"code\": \"05\", \"labelFi\": \"toimeksiantosuhde\", \"labelSv\": \"uppdragsförhållande\" },\r\n  { \"pensionCompany\": \"kevaMunicipal\", \"code\": \"06\", \"labelFi\": \"perhehoitaja\", \"labelSv\": \"familjevårdare\" },\r\n  { \"pensionCompany\": \"kevaMunicipal\", \"code\": \"07\", \"labelFi\": \"luottamushenkilö\", \"labelSv\": \"förtroendevald\" },\r\n  { \"pensionCompany\": \"kevaMunicipal\", \"code\": \"08\", \"labelFi\": \"omaishoitaja\", \"labelSv\": \"närståendevårdare\" },\r\n  { \"pensionCompany\": \"kevaMunicipal\", \"code\": \"13\", \"labelFi\": \"eläinlääkärin toimenpidepalkkiot\", \"labelSv\": \"veterinärers åtgärdsarvoden\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"01\", \"labelFi\": \"virkasuhde\", \"labelSv\": \"tjänsteförhållande\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"02\", \"labelFi\": \"sotilas\", \"labelSv\": \"militär\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"03\", \"labelFi\": \"rajavartija\", \"labelSv\": \"gränsbevakare\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"04\", \"labelFi\": \"lentäjä\", \"labelSv\": \"flygare\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"05\", \"labelFi\": \"ilma-aluksen päällikkö\", \"labelSv\": \"luftfartygs befälhavare\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"06\", \"labelFi\": \"aliupseeri\", \"labelSv\": \"underofficer\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"07\", \"labelFi\": \"merivartija\", \"labelSv\": \"sjöbevakare\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"08\", \"labelFi\": \"lakkautuspalkka-aika (palkka maksettu kokonaan)\", \"labelSv\": \"tid med lön på indragningsstat (hela lönen betald)\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"09\", \"labelFi\": \"lakkautuspalkka-aika (palkka pid. osaksi tai kokonaan)\", \"labelSv\": \"tid med lön på indragningsstat (lönen indr. helt eller delvis)\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"10\", \"labelFi\": \"työsuhde\", \"labelSv\": \"anställning\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"12\", \"labelFi\": \"erikoisupseerit ja sotilaspapit\", \"labelSv\": \"specialofficerare och militärpräster\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"13\", \"labelFi\": \"RVL:n sotilasteknikot ja sotilasyliteknikot\", \"labelSv\": \"KBV:s militärtekniker och militärövertekniker\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"14\", \"labelFi\": \"siviili (entinen värvätty)\", \"labelSv\": \"civil (tidigare värvad)\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"15\", \"labelFi\": \"siviili (entinen erikoisupseeri)\", \"labelSv\": \"civil (tidigare specialofficer)\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"16\", \"labelFi\": \"määräaikainen sotilas\", \"labelSv\": \"militär för viss tid\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"17\", \"labelFi\": \"työllistetty\", \"labelSv\": \"sysselsatt\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"18\", \"labelFi\": \"vajaakuntoinen työntekijä\", \"labelSv\": \"handikappad arbetstagare\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"20\", \"labelFi\": \"kansanedustaja\", \"labelSv\": \"riksdagsledamot\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"21\", \"labelFi\": \"VN:n jäsen\", \"labelSv\": \"medlem i statsrådet\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"24\", \"labelFi\": \"EU-parlamentaarikko\", \"labelSv\": \"EU-parlamentariker\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"37\", \"labelFi\": \"toimeksiantosuhde\", \"labelSv\": \"uppdragsförhållande\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"38\", \"labelFi\": \"luottamushenkilö\", \"labelSv\": \"förtroendevald\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"40\", \"labelFi\": \"kunnan koululaitoksen palvelus\", \"labelSv\": \"anställning vid kommunal skolinrättning\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"51\", \"labelFi\": \"VALTAVA-palvelus\", \"labelSv\": \"VALTAVA-anställning\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"52\", \"labelFi\": \"yksityinen VAEL-palvelus\", \"labelSv\": \"privat StaPL-anställning\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"53\", \"labelFi\": \"yksityinen oppilaitos/perus- tai lukio-opetus\", \"labelSv\": \"privat läroanstalt/grundläggande eller gymnasieundervisning\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"54\", \"labelFi\": \"Pohjoismaisen instituutin palvelus\", \"labelSv\": \"anställning vid nordisk institution\" },\r\n  { \"pensionCompany\": \"kevaState\", \"code\": \"55\", \"labelFi\": \"asemamaasta palkattu\", \"labelSv\": \"anställd från stationeringslandet\" },\r\n  { \"pensionCompany\": \"kevaChurch\", \"code\": \"V\", \"labelFi\": \"virkasuhde\", \"labelSv\": \"tjänsteförhållande\" },\r\n  { \"pensionCompany\": \"kevaChurch\", \"code\": \"T\", \"labelFi\": \"työsuhde\", \"labelSv\": \"arbetsavtalsförhållande\" },\r\n  { \"pensionCompany\": \"kevaChurch\", \"code\": \"L\", \"labelFi\": \"luottamustoimi\", \"labelSv\": \"förtroendeuppdrag\" },\r\n  { \"pensionCompany\": \"kevaChurch\", \"code\": \"K\", \"labelFi\": \"konsultti/toimeksianto\", \"labelSv\": \"konsult/uppdrag\" },\r\n  { \"pensionCompany\": \"kevaAland\", \"code\": \"91\", \"labelFi\": \"Ahvenanmaan palvelus virkasuhteisena\", \"labelSv\": \"Ålands tjänst i tjänsteförhållande\" },\r\n  { \"pensionCompany\": \"kevaAland\", \"code\": \"92\", \"labelFi\": \"Ahvenanmaan palvelus työsuhteisena\", \"labelSv\": \"Ålands tjänst i arbetsavtalsförhållande\" },\r\n  { \"pensionCompany\": \"kevaAland\", \"code\": \"20\", \"labelFi\": \"maakuntapäivien edustajat\", \"labelSv\": \"lagtingsledamöter\" },\r\n  { \"pensionCompany\": \"kevaAland\", \"code\": \"21\", \"labelFi\": \"ministerit, valtioneuvoston jäsenet\", \"labelSv\": \"ministrar, medlemmar av statsrådet\" },\r\n  { \"pensionCompany\": \"kevaKela\", \"code\": \"01\", \"labelFi\": \"Kelan työsuhde\", \"labelSv\": \"Anställning hos FPA\" },\r\n  { \"pensionCompany\": \"kevaKela\", \"code\": \"02\", \"labelFi\": \"Palkkionsaaja\", \"labelSv\": \"Arvodesmottagare\" }\r\n];","/* eslint-disable */\r\n\r\n\r\n/**\r\n * CBACodes generated from the server.\r\n *\r\n * @generator https://test-ir.salaxy.com/v01/api/codes/cba\r\n * Fetch this data from https://test-ir.salaxy.com/v01/api/codes/cba\r\n * There is no automatic fetching because the data updated quite seldomly\r\n */\r\nexport const cbaCodes = [\r\n  {\r\n    \"code\": 1,\r\n    \"labelFi\": \"Ahtausalan teknisten toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Technical Salaried Stevedoring Personnel\",\r\n    \"labelSv\": \"Kollektivavtal för tekniska tjänstemän i stuveribranschen\"\r\n  },\r\n  {\r\n    \"code\": 2,\r\n    \"labelFi\": \"Ahtausalan toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Stedoring Sector\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän i stuveribranschen\"\r\n  },\r\n  {\r\n    \"code\": 3,\r\n    \"labelFi\": \"Ahtausalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Stevedoring Sector\",\r\n    \"labelSv\": \"Kollektivavtal för stuveribranschen\"\r\n  },\r\n  {\r\n    \"code\": 4,\r\n    \"labelFi\": \"Ammatillisten aikuiskoulutuskeskusten työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Vocational Adult Education Centres\",\r\n    \"labelSv\": \"Kollektivavtal för yrkesinriktade vuxenutbildningscenter\"\r\n  },\r\n  {\r\n    \"code\": 5,\r\n    \"labelFi\": \"Ammattikorkeakoulujen opiskelijakuntien työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Student Unions of Universities of Applied Sciences\",\r\n    \"labelSv\": \"Kollektivavtalet för yrkeshögskolornas studerandekårer\"\r\n  },\r\n  {\r\n    \"code\": 6,\r\n    \"labelFi\": \"Apteekkien työntekijöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Pharmacy Employees\",\r\n    \"labelSv\": \"Kollektivavtal för arbetstagare på apotek\"\r\n  },\r\n  {\r\n    \"code\": 10,\r\n    \"labelFi\": \"Arkkitehtisuunnittelualan ylempien toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Senior Salaried Employees in the Architectural Sector\",\r\n    \"labelSv\": \"Kollektivavtal för högre tjänstemän inom arkitektplaneringsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 11,\r\n    \"labelFi\": \"Asfalttialan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Asphalting Sector\",\r\n    \"labelSv\": \"Kollektivavtal för asfaltbranschen\"\r\n  },\r\n  {\r\n    \"code\": 12,\r\n    \"labelFi\": \"Asiakaspalvelua, liikenteenhoitoa ja -ohjausta sekä hallinnollisia ja muita toimistotehtäviä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Customer Service, Traffic Management and Control and Administrative and Other Office Work\",\r\n    \"labelSv\": \"Kollektivavtal gällande kundtjänst, trafikskötsel och -ledning samt administration och andra kontorsuppgifter\"\r\n  },\r\n  {\r\n    \"code\": 13,\r\n    \"labelFi\": \"Autoalan kaupan ja korjaamotoiminnan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Trade and Repair Workshop Activities in the Automotive Sector\",\r\n    \"labelSv\": \"Kollektivavtal för handel och verkstadsverksamhet inom bilbranschen\"\r\n  },\r\n  {\r\n    \"code\": 14,\r\n    \"labelFi\": \"Autoalan toimihenkilöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Automotive Sector\",\r\n    \"labelSv\": \"Kollektivavtal för bilbranschens tjänstemän\"\r\n  },\r\n  {\r\n    \"code\": 15,\r\n    \"labelFi\": \"Autoliikennealojen toimihenkilöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in Road Transport Sectors\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän i biltrafikbranscherna\"\r\n  },\r\n  {\r\n    \"code\": 16,\r\n    \"labelFi\": \"Autonrengasalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Vehicle Tire Sector\",\r\n    \"labelSv\": \"Kollektivavtal för bildäcksbranschen\"\r\n  },\r\n  {\r\n    \"code\": 17,\r\n    \"labelFi\": \"Avaintyönantajat AVAINTA ry:n ja Terveys- ja sosiaalialan neuvottelujärjestö TSN ry:n välinen työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement between Avaintyönantajat AVAINTA Association and the TSN Association of the Health and Social Services Sector\",\r\n    \"labelSv\": \"Kollektivavtal mellan Serviceinrättningarnas arbetsgivarförening rf och Hälso- och socialvårdens förhandlingsorganisation TSN rf\"\r\n  },\r\n  {\r\n    \"code\": 18,\r\n    \"labelFi\": \"Avaintyönantajat AVAINTA ry:n opetusalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Education of the Avaintyönantajat AVAINTA Association\",\r\n    \"labelSv\": \"Kollektivavtal för AVAINTA Arbetsgivarna rf (Kollektivavtal för undervisningssektorn inom Serviceinrättningarnas arbetsgivarförening)\"\r\n  },\r\n  {\r\n    \"code\": 19,\r\n    \"labelFi\": \"Avaintyönantajat AVAINTA ry:n työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Avaintyönantajat AVAINTA Association\",\r\n    \"labelSv\": \"Kollektivavtal gällande Serviceinrättningarnas arbetsgivarförening\"\r\n  },\r\n  {\r\n    \"code\": 20,\r\n    \"labelFi\": \"Bingotyöntekijöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Bingo Employees\",\r\n    \"labelSv\": \"Kollektivavtal för bingoanställda\"\r\n  },\r\n  {\r\n    \"code\": 21,\r\n    \"labelFi\": \"Bioenergiateollisuuden palveluyritysten työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Service Companies in the Bioenergy Industry\",\r\n    \"labelSv\": \"Kollektivavtal för serviceföretag inom torv- och pelletindustrin\"\r\n  },\r\n  {\r\n    \"code\": 22,\r\n    \"labelFi\": \"Elintarvikealan automiesten työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Road Haulage Workers in the Food Sector\",\r\n    \"labelSv\": \"Kollektivavtal för bilmän inom livsmedelsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 23,\r\n    \"labelFi\": \"Elintarviketeollisuusliitto ry:n ja Suomen elintarviketyöläisten liitto SEL ry:n välinen elintarvikealojen työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Food Sectors between the Finnish Food and Drink Industries' Federation and the Finnish Food Workers' Union SEL\",\r\n    \"labelSv\": \"Kollektivavtal för livsmedelbranschen mellan Finlands livsmedelindustriförbund rf och Finlands livsmedelsarbetareförbund SEL rf\"\r\n  },\r\n  {\r\n    \"code\": 24,\r\n    \"labelFi\": \"Elintarviketeollisuuden sähkömiesten työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Electricians in the Food Industry\",\r\n    \"labelSv\": \"Kollektivavtal för elektriker inom livsmedelsindustrin\"\r\n  },\r\n  {\r\n    \"code\": 25,\r\n    \"labelFi\": \"Elintarviketeollisuuden toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Food Industry\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän inom livsmedelsindustrin\"\r\n  },\r\n  {\r\n    \"code\": 26,\r\n    \"labelFi\": \"Elokuva- ja tv-tuotantoa koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Cinema and TV Production\",\r\n    \"labelSv\": \"Kollektivavtal för film- och tv-produktionen\"\r\n  },\r\n  {\r\n    \"code\": 27,\r\n    \"labelFi\": \"Energiateollisuuden toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Energy Industry\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän i energibranschen\"\r\n  },\r\n  {\r\n    \"code\": 28,\r\n    \"labelFi\": \"Energiateollisuuden ylempien toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Senior Salaried Employees in the Energy Industry\",\r\n    \"labelSv\": \"Kollektivavtal för högre tjänstemän i energibranschen\"\r\n  },\r\n  {\r\n    \"code\": 29,\r\n    \"labelFi\": \"Ensihoitopalvelualan työehtosopimus \",\r\n    \"labelEn\": \"Collective Agreement for the Emergency Care Services Industry \",\r\n    \"labelSv\": \"Kollektivavtal för den prehospitala akutsjukvården\"\r\n  },\r\n  {\r\n    \"code\": 30,\r\n    \"labelFi\": \"Farmaseuttisen henkilöstön työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Pharmaceutical Personnel\",\r\n    \"labelSv\": \"Kollektivavtal för farmaceutisk personal\"\r\n  },\r\n  {\r\n    \"code\": 31,\r\n    \"labelFi\": \"Golf-alan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Golf Sector\",\r\n    \"labelSv\": \"Kollektivavtal för golfbranschen\"\r\n  },\r\n  {\r\n    \"code\": 32,\r\n    \"labelFi\": \"Hammaslaboratorioalan työehtosopimus \",\r\n    \"labelEn\": \"Collective Agreement for the Dental Laboratory Sector \",\r\n    \"labelSv\": \"Kollektivavtal för tandlaboratoriebranschen\"\r\n  },\r\n  {\r\n    \"code\": 33,\r\n    \"labelFi\": \"Hammaslääkärien työnantajayhdistys ry:n ja Tehy ry:n välinen työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement between the Employer's Association of Dentists and the Union of Health and Social Care Professionals in Finland\",\r\n    \"labelSv\": \"Kollektivavtal för personalen inom munhälsovården\"\r\n  },\r\n  {\r\n    \"code\": 34,\r\n    \"labelFi\": \"Harja- ja sivellinalojen työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Sweeper and Brush Sectors\",\r\n    \"labelSv\": \"Kollektivavtal för borst- och penselbranscherna\"\r\n  },\r\n  {\r\n    \"code\": 35,\r\n    \"labelFi\": \"Henkilökohtaisia avustajia koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Personal Assistants\",\r\n    \"labelSv\": \"Kollektivavtal för personlig assistans\"\r\n  },\r\n  {\r\n    \"code\": 37,\r\n    \"labelFi\": \"Hiihtokeskusalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Skiing Centre Sector\",\r\n    \"labelSv\": \"Kollektivavtal för skidcenterbranschen\"\r\n  },\r\n  {\r\n    \"code\": 39,\r\n    \"labelFi\": \"Huolinta-alan toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Forwarding Sector\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän i speditionsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 40,\r\n    \"labelFi\": \"Huolinta-alan varastoterminaali- ja satamatyöntekijöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Warehouse Terminal and Port Employees in the Forwarding Sector\",\r\n    \"labelSv\": \"Kollektivavtal för lagerterminal- och hamnarbetstagarna inom speditionsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 41,\r\n    \"labelFi\": \"Huolto- ja kunnossapitoalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Servicing and Maintenance Sector\",\r\n    \"labelSv\": \"Kollektivavtal för service- och underhållsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 42,\r\n    \"labelFi\": \"Huoltokorjaamoiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Service Workshops\",\r\n    \"labelSv\": \"Kollektivavtal för serviceverkstäder\"\r\n  },\r\n  {\r\n    \"code\": 43,\r\n    \"labelFi\": \"Huvi-, teema- ja elämyspuistoja koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Amusement, Theme and Experience Parks\",\r\n    \"labelSv\": \"Kollektivavtal som gäller nöjes-, tema- och äventyrsparker\"\r\n  },\r\n  {\r\n    \"code\": 44,\r\n    \"labelFi\": \"ICT-alan työehtosopimus toimihenkilöille\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the ICT Sector\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän i ICT-branschen\"\r\n  },\r\n  {\r\n    \"code\": 45,\r\n    \"labelFi\": \"ICT-alan työehtosopimus ylemmille toimihenkilöille\",\r\n    \"labelEn\": \"Collective Agreement for Senior Salaried Employees in the ICT Sector\",\r\n    \"labelSv\": \"Kollektivavtal för högre tjänstemän i ICT-branschen\"\r\n  },\r\n  {\r\n    \"code\": 46,\r\n    \"labelFi\": \"Jakelua koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Deliveries\",\r\n    \"labelSv\": \"Kollektivavtal för utdelning\"\r\n  },\r\n  {\r\n    \"code\": 47,\r\n    \"labelFi\": \"Jalometallialan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Precious Metal Sector\",\r\n    \"labelSv\": \"Kollektivavtal för ädelmetallbranschen\"\r\n  },\r\n  {\r\n    \"code\": 48,\r\n    \"labelFi\": \"Kansipäällystöä ja sairaanhoitajia koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Deck Officers and Nurses\",\r\n    \"labelSv\": \"Kollektivavtal för däcksbefäl och sjukskötare\"\r\n  },\r\n  {\r\n    \"code\": 49,\r\n    \"labelFi\": \"Kaupan automiesten työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Commercial Road Haulage Workers\",\r\n    \"labelSv\": \"Kollektivavtal för chaufförer inom handelsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 50,\r\n    \"labelFi\": \"Kaupan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Trade\",\r\n    \"labelSv\": \"Handelns kollektivavtal\"\r\n  },\r\n  {\r\n    \"code\": 51,\r\n    \"labelFi\": \"Kemian perusteollisuuden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Basic Chemical Industry\",\r\n    \"labelSv\": \"Kollektivavtal för den kemiska basindustrin\"\r\n  },\r\n  {\r\n    \"code\": 52,\r\n    \"labelFi\": \"Kemianalan toimihenkilösopimus\",\r\n    \"labelEn\": \"Agreement for Salaried Employees in the Chemical Sector\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän inom den kemiska branschen\"\r\n  },\r\n  {\r\n    \"code\": 53,\r\n    \"labelFi\": \"Kemianteollisuuden ylempien toimihenkilöiden pöytäkirja\",\r\n    \"labelEn\": \"Protocol for Senior Salaried Employees in the Chemical Industry\",\r\n    \"labelSv\": \"Protokoll gällande högre tjänstemän inom kemiindustrin\"\r\n  },\r\n  {\r\n    \"code\": 54,\r\n    \"labelFi\": \"Kenkä- ja nahkateollisuuden ja kultaseppäteollisuuden sekä harja- ja sivellinalojen toimihenkilösopimus\",\r\n    \"labelEn\": \"Agreement for Salaried Employees in the Leather and Shoe Industry, the Goldsmith Industry and the Sweeper and Brush Sectors\",\r\n    \"labelSv\": \"Tjänstemannaavtal för sko- och läderindustrin och guldsmedsindustrin samt borst- och penselbranschen\"\r\n  },\r\n  {\r\n    \"code\": 55,\r\n    \"labelFi\": \"Kenkä- ja nahkateollisuuden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Shoe and Leather Industry\",\r\n    \"labelSv\": \"Kollektivavtal för sko- och läderindustrin\"\r\n  },\r\n  {\r\n    \"code\": 56,\r\n    \"labelFi\": \"Kiinteistöalan toimihenkilöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Real Property Sector\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän i fastighetsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 57,\r\n    \"labelFi\": \"Kiinteistöpalvelualan työntekijöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Employees in the Real Property Services Sector\",\r\n    \"labelSv\": \"Kollektivavtal för arbetstagare i fastighetsservicebranschen\"\r\n  },\r\n  {\r\n    \"code\": 58,\r\n    \"labelFi\": \"Konepäällystöä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Engine Officers\",\r\n    \"labelSv\": \"Kollektivavtal för maskinbefäl\"\r\n  },\r\n  {\r\n    \"code\": 60,\r\n    \"labelFi\": \"Kotimaan matkustaja-alusliikenteen työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Domestic Passenger Vessel Traffic\",\r\n    \"labelSv\": \"Kollektivavtal för passagerarfartyg i inrikestrafiken\"\r\n  },\r\n  {\r\n    \"code\": 61,\r\n    \"labelFi\": \"Kotitalouskone- ja kodintekniikkahuoltoa sekä palveluautomaattialaa koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Domestic Appliance and Home Technology Service and the Service Automation Sector\",\r\n    \"labelSv\": \"Kollektivavtal för hushållsmaskin- och hemelektronikservice samt serviceautomatbranschen\"\r\n  },\r\n  {\r\n    \"code\": 62,\r\n    \"labelFi\": \"Kristillisiä järjestöjä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Christian Organisations\",\r\n    \"labelSv\": \"Kollektivavtal för kristliga organisationer\"\r\n  },\r\n  {\r\n    \"code\": 63,\r\n    \"labelFi\": \"Kemianteollisuus ry:n, Kumiteollisuus ry:n ja Sähköalojen ammattiliitto ry:n välinen sähköalan työntekijöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Electrical Employees between the Chemical Industry Federation of Finland, the Rubber Manufacturers' Association of Finland and the Finnish Electrical Workers' Union\",\r\n    \"labelSv\": \"Kollektivavtal mellan Kemiindustrin rf, Gummiindustrin rf och Elbranschernas fackförbund rf för arbetstagare i elbranschen\"\r\n  },\r\n  {\r\n    \"code\": 64,\r\n    \"labelFi\": \"Kumiteollisuuden toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Rubber Industry\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän inom gummiindustrin\"\r\n  },\r\n  {\r\n    \"code\": 65,\r\n    \"labelFi\": \"Kumiteollisuuden työntekijöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Employees in the Rubber Industry\",\r\n    \"labelSv\": \"Kollektivavtal för arbetstagare inom gummiindustrin\"\r\n  },\r\n  {\r\n    \"code\": 66,\r\n    \"labelFi\": \"Kuorma-autoalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Truck Drivers\",\r\n    \"labelSv\": \"Kollektivavtal för lastbilsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 67,\r\n    \"labelFi\": \"Kuvanvalmistamoita koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Photographic Development Studios\",\r\n    \"labelSv\": \"Kollektivavtal för bildframställningsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 68,\r\n    \"labelFi\": \"Lasikeraamisen teollisuuden sähkömiesten työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Electricians in the Glass-Ceramic Industry\",\r\n    \"labelSv\": \"Kollektivavtal för elektriker inom den glaskeramiska industrin\"\r\n  },\r\n  {\r\n    \"code\": 69,\r\n    \"labelFi\": \"Lasikeraamisen teollisuuden toimihenkilöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Glass-Ceramic Industry\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän inom den glaskeramiska industrin\"\r\n  },\r\n  {\r\n    \"code\": 70,\r\n    \"labelFi\": \"Lasikeraamisen teollisuuden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Glass-Ceramic Industry\",\r\n    \"labelSv\": \"Kollektivavtal för den glaskeramiska industrin\"\r\n  },\r\n  {\r\n    \"code\": 71,\r\n    \"labelFi\": \"Lasitus-, rakennuslasitus- ja lasinjalostusalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Glazing, Building Glazing and Glass Processing Industry\",\r\n    \"labelSv\": \"Kollektivavtal för glasnings-, byggnadsglasnings- och glasförädlingsindustrin\"\r\n  },\r\n  {\r\n    \"code\": 72,\r\n    \"labelFi\": \"Lattianpäällystysalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Flooring Industry\",\r\n    \"labelSv\": \"Kollektivavtal för golvbeläggningsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 73,\r\n    \"labelFi\": \"Losseja koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Cable Ferries\",\r\n    \"labelSv\": \"Kollektivavtal för färjör mellan Arbetsgivarna för servicebranscherna PALTA rf samt Förbundet för den offentliga sektorn och välfärdsområdena JHL rf och Finlands Sjömans-Union FSU rf\"\r\n  },\r\n  {\r\n    \"code\": 74,\r\n    \"labelFi\": \"Leipomoiden työntekijöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Bakery Employees\",\r\n    \"labelSv\": \"Kollektivavtal för bageriarbetstagare\"\r\n  },\r\n  {\r\n    \"code\": 75,\r\n    \"labelFi\": \"Lentoliikenteen palveluja koskeva työehtosopimus \",\r\n    \"labelEn\": \"Collective Agreement for Air Transport Services \",\r\n    \"labelSv\": \"Kollektivavtal gällande tjänster inom flygtrafiken\"\r\n  },\r\n  {\r\n    \"code\": 76,\r\n    \"labelFi\": \"Lentoliikenteen toimihenkilöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in Air Transport\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän inom flygtrafiken\"\r\n  },\r\n  {\r\n    \"code\": 77,\r\n    \"labelFi\": \"Liha-alan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Meat Industry\",\r\n    \"labelSv\": \"Kollektivavtal för köttbranschen\"\r\n  },\r\n  {\r\n    \"code\": 79,\r\n    \"labelFi\": \"Liikenneopetusalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Driving Instructor Industry\",\r\n    \"labelSv\": \"Kollektivavtal för trafikundervisningsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 80,\r\n    \"labelFi\": \"Linja-autohenkilökunnan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Bus and Coach Personnel\",\r\n    \"labelSv\": \"Kollektivavtal för busspersonalen\"\r\n  },\r\n  {\r\n    \"code\": 81,\r\n    \"labelFi\": \"Luottotieto- ja perintäalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Credit Information and Debt Recovery Sector\",\r\n    \"labelSv\": \"Kollektivavtal för kreditupplysnings- och inkassobranschen\"\r\n  },\r\n  {\r\n    \"code\": 82,\r\n    \"labelFi\": \"Infra-alan työehtosopimus\",\r\n    \"labelEn\": \"Collective agreement for the infrastructural sector\",\r\n    \"labelSv\": \"Infrastrukturbranschens kollektivavtal\"\r\n  },\r\n  {\r\n    \"code\": 83,\r\n    \"labelFi\": \"Maalausalan työehtosopimus urakkahinnoitteluineen\",\r\n    \"labelEn\": \"Collective Agreement for the Painting Sector, with Contract Rates\",\r\n    \"labelSv\": \"Kollektivavtal för målningsbranschen inklusive entreprenadprissättning\"\r\n  },\r\n  {\r\n    \"code\": 84,\r\n    \"labelFi\": \"Maarakennusalan työehtosopimus (Koneyrittäjien liitto)\",\r\n    \"labelEn\": \"Collective Agreement for the Earthworks Sector (the Trade Association of Finnish Forestry and Earth Moving Contractors)\",\r\n    \"labelSv\": \"Kollektivavtal för markbyggnadsbranschen (Maskinföretagarnas förbund)\"\r\n  },\r\n  {\r\n    \"code\": 85,\r\n    \"labelFi\": \"Maaseutuelinkeinojen työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Rural Industries\",\r\n    \"labelSv\": \"Kollektivavtal för landsbygdsnäringarna\"\r\n  },\r\n  {\r\n    \"code\": 87,\r\n    \"labelFi\": \"Malmikaivosten työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Ore Mines\",\r\n    \"labelSv\": \"Kollektivavtal för arbetstagare i malmgruvor\"\r\n  },\r\n  {\r\n    \"code\": 89,\r\n    \"labelFi\": \"Matkailu-, ravintola ja vapaa-ajan palveluita koskeva työehtosopimus - työntekijät\",\r\n    \"labelEn\": \"Collective Agreement for Tourism, Restaurant and Recreational Services - Employees\",\r\n    \"labelSv\": \"Kollektivavtal för arbetstagare i branschen för turism-, restaurang- och fritidstjänster\"\r\n  },\r\n  {\r\n    \"code\": 90,\r\n    \"labelFi\": \"Matkatoimistoja koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Travel Agencies\",\r\n    \"labelSv\": \"Kollektivavtal för resebyråer\"\r\n  },\r\n  {\r\n    \"code\": 91,\r\n    \"labelFi\": \"Matkustamohenkilöstöä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Cabin Crew\",\r\n    \"labelSv\": \"Kollektivavtal för kabinpersonal\"\r\n  },\r\n  {\r\n    \"code\": 92,\r\n    \"labelFi\": \"Meijereiden erikoiskoulutuksen saaneiden ja teknisten toimihenkilöiden työehtosopimus \",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees with Special or Technical Education in Dairies \",\r\n    \"labelSv\": \"Kollektivavtal för meijeriernas specialutbildade och tekniska funktionärer\"\r\n  },\r\n  {\r\n    \"code\": 93,\r\n    \"labelFi\": \"Meijerityöntekijöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Dairy Employees\",\r\n    \"labelSv\": \"Kollektivavtal för mejeriarbetstagare\"\r\n  },\r\n  {\r\n    \"code\": 98,\r\n    \"labelFi\": \"Metsäalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Forestry Sector\",\r\n    \"labelSv\": \"Kollektivavtal för skogsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 99,\r\n    \"labelFi\": \"Metsäkonealan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Forestry Machine Sector\",\r\n    \"labelSv\": \"Kollektivavtal för skogsmaskinbranschen\"\r\n  },\r\n  {\r\n    \"code\": 100,\r\n    \"labelFi\": \"Metsänhoitoyhdistysten toimihenkilöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in Forest Management Associations\",\r\n    \"labelSv\": \"Kollektivavtal för skogsvårdsföreningarnas tjänstemän\"\r\n  },\r\n  {\r\n    \"code\": 103,\r\n    \"labelFi\": \"Muovituoteteollisuuden ja kemian tuoteteollisuuden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Plastics Product Industry and the Chemical Product Industry\",\r\n    \"labelSv\": \"Kollektivavtal för plastproduktindustrin och kemiproduktindustrin\"\r\n  },\r\n  {\r\n    \"code\": 104,\r\n    \"labelFi\": \"Museoiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Museums\",\r\n    \"labelSv\": \"Kollektivavtal gällande museer\"\r\n  },\r\n  {\r\n    \"code\": 105,\r\n    \"labelFi\": \"Neuvonta-alan runkosopimus\",\r\n    \"labelEn\": \"Framework Agreement for the Counselling Sector\",\r\n    \"labelSv\": \"Ramavtal för rådgivningsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 106,\r\n    \"labelFi\": \"Näyttelijöiden teatterityöehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Theatrical Actors\",\r\n    \"labelSv\": \"Kollektivavtal för skådespelare\"\r\n  },\r\n  {\r\n    \"code\": 107,\r\n    \"labelFi\": \"Ohjelmapalvelualan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Programme Services Industry\",\r\n    \"labelSv\": \"Kollektivavtal för programservicebranschen\"\r\n  },\r\n  {\r\n    \"code\": 108,\r\n    \"labelFi\": \"Optikoiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Opticians\",\r\n    \"labelSv\": \"Kollektivavtal för optiker\"\r\n  },\r\n  {\r\n    \"code\": 110,\r\n    \"labelFi\": \"Pahvin- ja paperinjalostusalan toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Board and Paper Processing Sector\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän inom kartong- och pappersförädlingsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 111,\r\n    \"labelFi\": \"Pahvin- ja paperinjalostusalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Board and Paper Processing Sector\",\r\n    \"labelSv\": \"Kollektivavtal för kartong- och pappersförädlingsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 113,\r\n    \"labelFi\": \"PALTAn toimihenkilöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Palta's Salaried Employees\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän hos medlemsföretag i PALTA\"\r\n  },\r\n  {\r\n    \"code\": 116,\r\n    \"labelFi\": \"Panimoiden ja virvoitusjuomatehtaiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Breweries and Beverage Plants\",\r\n    \"labelSv\": \"Kollektivavtal för bryggerier och läskedrycksfabriker\"\r\n  },\r\n  {\r\n    \"code\": 119,\r\n    \"labelFi\": \"Pelti- ja teollisuuseristysalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Sheet Metal and Industrial Insulation Sector\",\r\n    \"labelSv\": \"Kollektivavtal för plåt- och industriisoleringsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 120,\r\n    \"labelFi\": \"Puusepänteollisuuden toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Carpentry Industry\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän inom snickeriindustrin\"\r\n  },\r\n  {\r\n    \"code\": 121,\r\n    \"labelFi\": \"Puusepänteollisuuden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Carpentry Industry\",\r\n    \"labelSv\": \"Kollektivavtal för snickeriindustrin\"\r\n  },\r\n  {\r\n    \"code\": 122,\r\n    \"labelFi\": \"Puutarha-alan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Gardening Sector\",\r\n    \"labelSv\": \"Kollektivavtal för trädgårdsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 124,\r\n    \"labelFi\": \"Rahoitusalan siivoojia koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Cleaners in the Financial Sector\",\r\n    \"labelSv\": \"Kollektivavtal för städare i finansieringsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 125,\r\n    \"labelFi\": \"Rahoitusalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Financial Sector\",\r\n    \"labelSv\": \"Kollektivavtal för finansbranschen\"\r\n  },\r\n  {\r\n    \"code\": 126,\r\n    \"labelFi\": \"Rakennusaine- ja betoniteollisuuden toimihenkilöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Construction Material and Concrete Industry\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän i byggämnes- och betongindustrin\"\r\n  },\r\n  {\r\n    \"code\": 127,\r\n    \"labelFi\": \"Rakennusalan toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Construction Sector\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän i byggbranschen\"\r\n  },\r\n  {\r\n    \"code\": 128,\r\n    \"labelFi\": \"Rakennusalan työehtosopimus urakkahinnoitteluineen\",\r\n    \"labelEn\": \"Collective Agreement for the Construction Sector, with Contract Rates\",\r\n    \"labelSv\": \"Kollektivavtal för byggbranschen\"\r\n  },\r\n  {\r\n    \"code\": 129,\r\n    \"labelFi\": \"Rakennustuoteteollisuuden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Construction Product Industry\",\r\n    \"labelSv\": \"Kollektivavtal för byggproduktindustrin\"\r\n  },\r\n  {\r\n    \"code\": 130,\r\n    \"labelFi\": \"Rautatiealan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Railway Sector\",\r\n    \"labelSv\": \"Kollektivavtal för järnvägsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 131,\r\n    \"labelFi\": \"Seminologien ja keinosiemennysasemien työehtosopimus \",\r\n    \"labelEn\": \"Collective Agreement for Seminologists and Artificial Insemination Stations \",\r\n    \"labelSv\": \"Kollektivavtal för seminologer och stationer för artificiell\"\r\n  },\r\n  {\r\n    \"code\": 132,\r\n    \"labelFi\": \"Sosiaalialan järjestöjä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Social Services Organisations\",\r\n    \"labelSv\": \"Kollektivavtal för organisationer inom det sociala området\"\r\n  },\r\n  {\r\n    \"code\": 133,\r\n    \"labelFi\": \"Suunnittelu- ja konsulttialan toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Design and Consultancy Sector\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän I planerings- och konsultbranschen\"\r\n  },\r\n  {\r\n    \"code\": 134,\r\n    \"labelFi\": \"Suunnittelu- ja konsulttialan ylempien toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Senior Salaried Employees in the Design and Consultancy Sector\",\r\n    \"labelSv\": \"Kollektivavtal för högre tjänstemän i planerings- och konsultbranschen\"\r\n  },\r\n  {\r\n    \"code\": 135,\r\n    \"labelFi\": \"Sähköalan tes - energia - ICT - verkosto -työehtosopimus \",\r\n    \"labelEn\": \"Collective Agreement for the Electricity Sector - Energy - ICT - Network - Collective Agreement \",\r\n    \"labelSv\": \"Kollektivavtal för elbranschen - energi - ICT - nätverk\"\r\n  },\r\n  {\r\n    \"code\": 136,\r\n    \"labelFi\": \"Sähköistys- ja sähköasennusalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Electrification and Electrical Installations Sector\",\r\n    \"labelSv\": \"Kollektivavtal för elektrifierings- och elinstallationsbranchen\"\r\n  },\r\n  {\r\n    \"code\": 137,\r\n    \"labelFi\": \"Säiliöauto- ja öljytuotealaa sekä niihin liittyviä toimintoja koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Tank Truck and Oil Product Sector and Related Functions\",\r\n    \"labelSv\": \"Kollektivavtal för tankbil- och oljeproduktbranschen och för funktioner med anknytning till dessa\"\r\n  },\r\n  {\r\n    \"code\": 138,\r\n    \"labelFi\": \"Taimitarha-alan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Nursery Garden Sector\",\r\n    \"labelSv\": \"Kollektivavtal för plantskolebranschen\"\r\n  },\r\n  {\r\n    \"code\": 139,\r\n    \"labelFi\": \"Taksiliikenteen työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Taxi Transport\",\r\n    \"labelSv\": \"Kollektivavtal gällande taxitrafiken\"\r\n  },\r\n  {\r\n    \"code\": 140,\r\n    \"labelFi\": \"Talotekniikka-alan LVI-toimialan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the HVAC Sector of Building Services Engineering\",\r\n    \"labelSv\": \"Kollektivavtal för VVS-branschen inom husteknikbranschen\"\r\n  },\r\n  {\r\n    \"code\": 142,\r\n    \"labelFi\": \"Talotekniikka-alan toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Building Services Engineering Sector\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän i husteknikbranschen\"\r\n  },\r\n  {\r\n    \"code\": 143,\r\n    \"labelFi\": \"Taloushallintoalaa koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Financial Management Sector\",\r\n    \"labelSv\": \"Kollektivavtal för ekonomiförvaltningsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 144,\r\n    \"labelFi\": \"Tanssinopettajien työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Dance Instructors\",\r\n    \"labelSv\": \"Kollektivavtal för danslärare\"\r\n  },\r\n  {\r\n    \"code\": 145,\r\n    \"labelFi\": \"Teatterialan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Theatre Sector\",\r\n    \"labelSv\": \"Kollektivavtal för teaterbranschen\"\r\n  },\r\n  {\r\n    \"code\": 146,\r\n    \"labelFi\": \"Teknisen huollon ja kunnossapidon työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Technical Servicing and Maintenance\",\r\n    \"labelSv\": \"Kollektivavtal för tekniska service- och underhållsuppgifter\"\r\n  },\r\n  {\r\n    \"code\": 148,\r\n    \"labelFi\": \"Teknologiateollisuuden toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Technology Industry\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän inom teknologiindustrin\"\r\n  },\r\n  {\r\n    \"code\": 150,\r\n    \"labelFi\": \"Teknologiateollisuuden ylempien toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Senior Salaried Employees in the Technology Industry\",\r\n    \"labelSv\": \"Kollektivavtal för teknologiindustrins högre tjänstemän\"\r\n  },\r\n  {\r\n    \"code\": 151,\r\n    \"labelFi\": \"Tekstiilihuoltoalan työehtosopimus \",\r\n    \"labelEn\": \"Collective Agreement for the Textile Care Sector \",\r\n    \"labelSv\": \"Kollektivavtal för textilservicebranschen\"\r\n  },\r\n  {\r\n    \"code\": 152,\r\n    \"labelFi\": \"Tekstiili- ja muotialan toimihenkilösopimus\",\r\n    \"labelEn\": \"Agreement for Salaried Employees in the Textile and Fashion Sector\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän i textil- och modelbranchen\"\r\n  },\r\n  {\r\n    \"code\": 153,\r\n    \"labelFi\": \"Tekstiili- ja muotialan työehtosopimus \",\r\n    \"labelEn\": \"Collective Agreement for the Textile and Fashion Sector \",\r\n    \"labelSv\": \"Kollektivavtal för textil- och modebranchen\"\r\n  },\r\n  {\r\n    \"code\": 154,\r\n    \"labelFi\": \"Terminaalitoimintaa koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Terminal Operations\",\r\n    \"labelSv\": \"Kollektivavtal gällande terminalverksamhet\"\r\n  },\r\n  {\r\n    \"code\": 155,\r\n    \"labelFi\": \"Terveyspalvelualan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Health Services Sector\",\r\n    \"labelSv\": \"Kollektivavtal för hälsovårdsbranchen\"\r\n  },\r\n  {\r\n    \"code\": 156,\r\n    \"labelFi\": \"Terveyspalvelualan työehtosopimus (Unioni) \",\r\n    \"labelEn\": \"Collective Agreement for the Health Services Sector (Union) \",\r\n    \"labelSv\": \"Kollektivavtal gällande hälsoservicebranschen (Unioni)\"\r\n  },\r\n  {\r\n    \"code\": 157,\r\n    \"labelFi\": \"Tietotekniikan palvelualan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Information Technology Services Sector\",\r\n    \"labelSv\": \"Kollektivavtal för den datatekniska servicebranschen\"\r\n  },\r\n  {\r\n    \"code\": 158,\r\n    \"labelFi\": \"Tilapäisten teatterimuusikkojen työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Temporary Theatre Musicians\",\r\n    \"labelSv\": \"Kollektivavtal för tillfälliga teatermusiker\"\r\n  },\r\n  {\r\n    \"code\": 159,\r\n    \"labelFi\": \"Turkistuotantoalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Fur Production Sector\",\r\n    \"labelSv\": \"Kollektivavtal för pälsproduktion\"\r\n  },\r\n  {\r\n    \"code\": 160,\r\n    \"labelFi\": \"Turvetuotantoalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Peat Mining Sector\",\r\n    \"labelSv\": \"Kollektivavtal för torvproduktionsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 162,\r\n    \"labelFi\": \"Ulkomaanliikenteen kauppa-aluksia koskeva työehtosopimus \",\r\n    \"labelEn\": \"Collective Agreement for Merchant Vessels in International Traffic \",\r\n    \"labelSv\": \"Kollektivavtal för utrikesfartens handelsfartyg\"\r\n  },\r\n  {\r\n    \"code\": 163,\r\n    \"labelFi\": \"Ulkomaanliikenteen matkustaja-alussopimus\",\r\n    \"labelEn\": \"Agreement for Passenger Vessels in International Traffic\",\r\n    \"labelSv\": \"Kollektivavtal för passagerarfartyg i utrikestrafik\"\r\n  },\r\n  {\r\n    \"code\": 164,\r\n    \"labelFi\": \"Ulkomaanliikenteen pientonniston kansipäällystöä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Deck Officers of Small-Tonnage Vessels in International Traffic\",\r\n    \"labelSv\": \"Kollektivavtal för småtonnage i utrikesfart som gäller däcksbefäl\"\r\n  },\r\n  {\r\n    \"code\": 165,\r\n    \"labelFi\": \"Ulkomaanliikenteen pientonniston konepäällystöä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Engine Officers of Small-Tonnage Vessels in International Traffic\",\r\n    \"labelSv\": \"Kollektivavtal för småtonnage i utrikesfart som gäller maskinbefäl\"\r\n  },\r\n  {\r\n    \"code\": 166,\r\n    \"labelFi\": \"Urheilujärjestöjen valmentajia koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Coaches of Sports Organisations\",\r\n    \"labelSv\": \"Kollektivavtal för tränare i idrottsorganisationer\"\r\n  },\r\n  {\r\n    \"code\": 167,\r\n    \"labelFi\": \"Urheilujärjestöjä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Sports Organisations\",\r\n    \"labelSv\": \"Kollektivavtal gällande idrottsorganisationer\"\r\n  },\r\n  {\r\n    \"code\": 168,\r\n    \"labelFi\": \"Vakinaisten teatterimuusikkojen työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Permanent Theatre Musicians\",\r\n    \"labelSv\": \"Kollektivavtal för ordinarie teatermusiker\"\r\n  },\r\n  {\r\n    \"code\": 169,\r\n    \"labelFi\": \"Vakuutusalan työehto- ja palkkasopimukset\",\r\n    \"labelEn\": \"Collective and Salary Agreements for the Insurance Sector\",\r\n    \"labelSv\": \"Försäkringsbranschens kollektiv- och löneavtal\"\r\n  },\r\n  {\r\n    \"code\": 171,\r\n    \"labelFi\": \"Vartiointialan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Security Services Sector\",\r\n    \"labelSv\": \"Kollektivavtal för bevakningsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 172,\r\n    \"labelFi\": \"Vedeneristysalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Waterproofing Sector\",\r\n    \"labelSv\": \"Kollektivavtal för vattenisoleringsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 173,\r\n    \"labelFi\": \"Veneenrakennusteollisuuden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Boat Construction Industry\",\r\n    \"labelSv\": \"Kollektivavtal för båtbyggnadsindustrin\"\r\n  },\r\n  {\r\n    \"code\": 174,\r\n    \"labelFi\": \"Veturimiestehtäviä rautatieliikenteessä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Train Driver Duties in Rail Traffic\",\r\n    \"labelSv\": \"Kollektivavtal för lokmannauppgifter inom järnvägstrafiken\"\r\n  },\r\n  {\r\n    \"code\": 175,\r\n    \"labelFi\": \"Medialiiton ja Ammattiliitto Pron välinen toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees between the Finnish Media Federation and Trade Union Pro\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän mellan Medieförbundet rf och Fackförbundet Pro\"\r\n  },\r\n  {\r\n    \"code\": 176,\r\n    \"labelFi\": \"Medialiiton ja Ammattiliitto Pron välinen viestintäalan teknisiä toimihenkilöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Technical Salaried Communication Employees between the Finnish Media Federation and Trade Union Pro\",\r\n    \"labelSv\": \"Kollektivavtal för tekniska tjänstemän mellan Medieförbundet och Fackförbundet Pro\"\r\n  },\r\n  {\r\n    \"code\": 177,\r\n    \"labelFi\": \"Medialiiton ja Suomen Journalistiliiton välinen kustannustoimittajien työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Editors between the Finnish Media Federation and the Union of Journalists in Finland\",\r\n    \"labelSv\": \"Kollektivavtal för förlagsredaktörer mellan Mediernas cetralförbund och Finlands Journalistförbund\"\r\n  },\r\n  {\r\n    \"code\": 178,\r\n    \"labelFi\": \"Medialiiton ja Suomen Journalistiliiton välinen työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement between the Finnish Media Federation and the Union of Journalists in Finland\",\r\n    \"labelSv\": \"Kollektivavtal mellan Medieförbundet och Finlands journalistförbund\"\r\n  },\r\n  {\r\n    \"code\": 179,\r\n    \"labelFi\": \"Medialiiton ja Teollisuusliiton sekä Viestintäalan toimihenkilöt Grafinet ry:n välinen toimihenkilöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees between the Finnish Media Federation, the Industrial Union and the Grafinet Association for Salaried Employees in the Media Industry\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän mellan Medieförbundet och Industrifacket samt Viestintäalan toimihenkilöt Grafinet ry\"\r\n  },\r\n  {\r\n    \"code\": 180,\r\n    \"labelFi\": \"Medialiiton ja Teollisuusliiton välinen media- ja painoalan työntekijöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Employees in the Media and Printing Industries between the Finnish Media Federation and the Industrial Union\",\r\n    \"labelSv\": \"Kollektivavtal för arbetstargare inom medie- och tryckeribranchen mellan Medieförbundet och Industrifacket\"\r\n  },\r\n  {\r\n    \"code\": 181,\r\n    \"labelFi\": \"Viestinvälitys- ja logistiikka-alan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Messaging and Logistics Sector\",\r\n    \"labelSv\": \"Kollektivavtal för kommunikationsförmedlings- och logistikbranschen\"\r\n  },\r\n  {\r\n    \"code\": 182,\r\n    \"labelFi\": \"Viestinvälitys- ja logistiikka-alan ylempien toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Senior Salaried Employees in the Messaging and Logistics Sector\",\r\n    \"labelSv\": \"Kollektivavtal för högre tjänstemän i kommunikationsförmedlings- och logistikbranschen\"\r\n  },\r\n  {\r\n    \"code\": 183,\r\n    \"labelFi\": \"Viher- ja ympäristörakentamisalan työehtosopimus \",\r\n    \"labelEn\": \"Collective Agreement for Green Area and Environmental Construction Sector \",\r\n    \"labelSv\": \"Kollektivavtal för grön- och miljöanläggningsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 186,\r\n    \"labelFi\": \"Yksityisen laboratorioalan toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Private Laboratory Sector\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän inom den privata laboratoriebranschen\"\r\n  },\r\n  {\r\n    \"code\": 187,\r\n    \"labelFi\": \"Yksityisen opetusalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Private Education Sector\",\r\n    \"labelSv\": \"Kollektivavtal för den privata undervisningssektorn\"\r\n  },\r\n  {\r\n    \"code\": 188,\r\n    \"labelFi\": \"Yksityisen sosiaalipalvelualan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Private Social Services Sector\",\r\n    \"labelSv\": \"Kollektivavtal för den privata socialservicebranschen\"\r\n  },\r\n  {\r\n    \"code\": 189,\r\n    \"labelFi\": \"Yliopistojen yleinen työehtosopimus\",\r\n    \"labelEn\": \"General Collective Agreement for Universities\",\r\n    \"labelSv\": \"Allmänt kollektivavtal för universitet\"\r\n  },\r\n  {\r\n    \"code\": 190,\r\n    \"labelFi\": \"Ylioppilaskuntien työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Student Unions\",\r\n    \"labelSv\": \"Kollektivavtal för studentkårer\"\r\n  },\r\n  {\r\n    \"code\": 191,\r\n    \"labelFi\": \"Yrityskehitysorganisaatioiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Business Development Organisations\",\r\n    \"labelSv\": \"Kollektivavtal för organisationer inom företagsutvecklingen\"\r\n  },\r\n  {\r\n    \"code\": 192,\r\n    \"labelFi\": \"Äänilevytuottajayhtiöiden palveluksessa olevia muusikkoja, laulajia ja kapellimestareita koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Musicians, Singers and Conductors in the Service of Record Producer Companies\",\r\n    \"labelSv\": \"Kollektivavtal för musiker, sångare och kapellmästare i tjänst hos skivproducentbolag\"\r\n  },\r\n  {\r\n    \"code\": 193,\r\n    \"labelFi\": \"Öljy-, maakaasu- ja petrokemianteollisuuden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Oil, Natural Gas and Petrochemical Industry\",\r\n    \"labelSv\": \"Kollektivavtal för olje-, naturgas- och petrokemiska industrin\"\r\n  },\r\n  {\r\n    \"code\": 194,\r\n    \"labelFi\": \"Muu työehtosopimus\",\r\n    \"labelEn\": \"Other collective agreement\",\r\n    \"labelSv\": \"Annat kollektivavtal\"\r\n  },\r\n  {\r\n    \"code\": 195,\r\n    \"labelFi\": \"Alalla ei ole valtakunnallista työehtosopimusta\",\r\n    \"labelEn\": \"No national collective agreement for the field\",\r\n    \"labelSv\": \"Branschen saknar riksomfattande kollektivavtal\"\r\n  },\r\n  {\r\n    \"code\": 196,\r\n    \"labelFi\": \"Kunnan työehtosopimukset\",\r\n    \"labelEn\": \"Municipal collective agreements\",\r\n    \"labelSv\": \"Kommunens kollektivavtal\"\r\n  },\r\n  {\r\n    \"code\": 197,\r\n    \"labelFi\": \"Valtion työehtosopimukset\",\r\n    \"labelEn\": \"State collective agreements\",\r\n    \"labelSv\": \"Statens kollektivavtal\"\r\n  },\r\n  {\r\n    \"code\": 198,\r\n    \"labelFi\": \"Kirkon työehtosopimukset\",\r\n    \"labelEn\": \"Church collective agreements\",\r\n    \"labelSv\": \"Kyrkans kollektivavtal\"\r\n  },\r\n  {\r\n    \"code\": 199,\r\n    \"labelFi\": \"Asiakaspalvelu- ja telemarkkinointialaa koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Customer Service and Telemarketing Sector\",\r\n    \"labelSv\": \"Kollektivavtal för kundservice- och telemarketingbranschen\"\r\n  },\r\n  {\r\n    \"code\": 200,\r\n    \"labelFi\": \"Avaintyönantajat AVAINTA ry:n ja Suomen Muusikkojen liiton välinen työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement between Avaintyönantajat AVAINTA Association and the Finnish Musicians’ Union\",\r\n    \"labelSv\": \"Kollektivavtal mellan AVAINTA Arbetsgivarna rf och och Finlands musikers förbund rf\"\r\n  },\r\n  {\r\n    \"code\": 201,\r\n    \"labelFi\": \"Elokuvateattereita koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Cinemas\",\r\n    \"labelSv\": \"Kollektivavtal för biografteatrar\"\r\n  },\r\n  {\r\n    \"code\": 202,\r\n    \"labelFi\": \"Huolto- ja kunnossapitopalvelualan työehtosopimus ylemmille toimihenkilöille\",\r\n    \"labelEn\": \"Collective Agreement for Senior Salaried Employees in the Repair and Maintenance Service Sector\",\r\n    \"labelSv\": \"Kollektivavtal för högre tjänstemän i service- och underhållsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 204,\r\n    \"labelFi\": \"Muuttopalvelualan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Removal Services Sector\",\r\n    \"labelSv\": \"Kollektivavtal för flyttservicebranschen\"\r\n  },\r\n  {\r\n    \"code\": 207,\r\n    \"labelFi\": \"Tarkastusalan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Inspection Sector\",\r\n    \"labelSv\": \"Kollektivavtal för inspektionsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 208,\r\n    \"labelFi\": \"Rakennustuoteteollisuuden sähkömiesten työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Electricians in the Construction Product Industry\",\r\n    \"labelSv\": \"Kollektivavtal för elektriker inom byggproduktindustrin\"\r\n  },\r\n  {\r\n    \"code\": 209,\r\n    \"labelFi\": \"Tullaajien ja huolintatyönjohtajien työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Customs Brokers and Freight Forwarding Supervisors\",\r\n    \"labelSv\": \"Kollektivavtal för förtullare och speditionsarbetsledare\"\r\n  },\r\n  {\r\n    \"code\": 210,\r\n    \"labelFi\": \"Tekstiilihuoltoalan toimihenkilöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Textile Care Sector\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän inom textilvårdsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 211,\r\n    \"labelFi\": \"Suorajakelua koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Delivery of Unaddressed Direct Mail\",\r\n    \"labelSv\": \"Kollektivavtal för direktutdelning\"\r\n  },\r\n  {\r\n    \"code\": 212,\r\n    \"labelFi\": \"Partiotyönantajia koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective agreement for Scout associations as employers\",\r\n    \"labelSv\": \"Kollektivavtal för scoutarbetsgivare\"\r\n  },\r\n  {\r\n    \"code\": 213,\r\n    \"labelFi\": \"Rautatiealan toimihenkilöitä koskeva työehtosopimus\",\r\n    \"labelEn\": \"Collective agreement for salaried employees in the rail sector\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän inom järnvägsbranschen\"\r\n  },\r\n  {\r\n    \"code\": 214,\r\n    \"labelFi\": \"Satama-alan työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Ports Sector\",\r\n    \"labelSv\": \"Kollektivavtal för hamnbranschen\"\r\n  },\r\n  {\r\n    \"code\": 215,\r\n    \"labelFi\": \"Urheiluseuroja koskeva liityntäpöytäkirja\",\r\n    \"labelEn\": \"Protocol on adherence for sports associations\",\r\n    \"labelSv\": \"Anslutningsprotokoll gällande idrottsföreningar\"\r\n  },\r\n  {\r\n    \"code\": 216,\r\n    \"labelFi\": \"Teknologiateollisuuden työntekijät työehtosopimus\",\r\n    \"labelEn\": \"Collective agreement for employees in technology industry\",\r\n    \"labelSv\": \"Kollektivavtal för arbetstagare inom teknologiindustrin\"\r\n  },\r\n  {\r\n    \"code\": 217,\r\n    \"labelFi\": \"Hirsitaloteollisuuden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for the Log House Industry\",\r\n    \"labelSv\": \"Kollektivavtal för timmerhusindustrin\"\r\n  },\r\n  {\r\n    \"code\": 218,\r\n    \"labelFi\": \"Hirsitaloteollisuuden toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Log House Industry\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän inom timmerhusindustrin\"\r\n  },\r\n  {\r\n    \"code\": 219,\r\n    \"labelFi\": \"Metsäkonealan toimihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Salaried Employees in the Forest Machinery sector\",\r\n    \"labelSv\": \"Kollektivavtal för tjänstemän inom skogsmaskinbranschen\"\r\n  },\r\n  {\r\n    \"code\": 220,\r\n    \"labelFi\": \"Matkailu-, ravintola- ja vapaa-ajan palveluita koskeva työehtosopimus – esihenkilöt\",\r\n    \"labelEn\": \"Collective agreement for supervisors in hotel, restaurant and leisure industry \",\r\n    \"labelSv\": \"Kollektivavtal för chefer i branschen för turism-, restaurang- och fritidstjänster\"\r\n  },\r\n  {\r\n    \"code\": 221,\r\n    \"labelFi\": \"Kaupan logistiikan esihenkilöiden työehtosopimus \",\r\n    \"labelEn\": \"Collective Agreement for Supervisors in Trade Logistics\",\r\n    \"labelSv\": \"Kollektivavtal för chefer inom logistik inom handeln\"\r\n  },\r\n  {\r\n    \"code\": 222,\r\n    \"labelFi\": \"Vähittäiskaupan esihenkilöiden työehtosopimus\",\r\n    \"labelEn\": \"Collective agreement for retail supervisors\",\r\n    \"labelSv\": \"Kollektivavtal för chefer inom detaljhandeln\"\r\n  },\r\n  {\r\n    \"code\": 223,\r\n    \"labelFi\": \"Henkilöstöalan työehtosopimus \",\r\n    \"labelEn\": \"Collective Agreement for Employment Industry\",\r\n    \"labelSv\": \"Kollektivavtal för personalbranschen\"\r\n  },\r\n  {\r\n    \"code\": 224,\r\n    \"labelFi\": \"Ammattikorkeakoulujen työehtosopimus\",\r\n    \"labelEn\": \"Collective Agreement for Universities of Applied Sciences\",\r\n    \"labelSv\": \"Kollektivavtal för yrkeshögskolor\"\r\n  }\r\n];","import { DatelyObject } from \"./DatelyObject\";\r\nimport { Dates } from \"./Dates\";\r\n\r\nimport { getYearlyChangingNumbersYears, yearlyTaxFreeYears } from \"../codegen\";\r\nimport { Holidays, YearlyChangingNumbers, YearlyTaxFreeNumbers } from \"../model\";\r\n\r\n/**\r\n * Helper for yearly changing sidecost percentages and holidays.\r\n */\r\nexport class Years {\r\n\r\n  /**\r\n   * Gets salary calculation parameters that are changing yearly and holidays of the year.\r\n   * The method is designed for the end-of-year and as such it only supports 2 years:\r\n   * the current / previous year (from Jan to Nov) OR current / next year (in approx. December).\r\n   *\r\n   * @param refDate - Dately object (JavaScript date, ISO string formatted date, or DayJS-object) for which the numbers are fetched.\r\n   * @param nullIfNotSupported - Boolean indicating whether to return null if the year is not supported. By default the method throws an error if no year for the date found.\r\n   *\r\n   * @returns The yearly changing numbers if year supported. Error if year not supported.\r\n   */\r\n  public static getYearlyChangingNumbers(refDate: DatelyObject | undefined,  nullIfNotSupported = false): YearlyChangingNumbers | undefined {\r\n    if (!refDate) {\r\n      return undefined;\r\n    }\r\n    const year = Dates.getYear(refDate);\r\n    const numbers = getYearlyChangingNumbersYears(refDate).find((x) => x.year === year);\r\n    if (!numbers) {\r\n\r\n      if (nullIfNotSupported) {\r\n        return undefined;\r\n      }\r\n      throw new Error(`Year ${year} not supported.`);\r\n\r\n    }\r\n    numbers.holidays = this.getYearlyHolidays(refDate);\r\n    return numbers;\r\n  }\r\n\r\n  /**\r\n   * Gets holidays for the given year.\r\n   *\r\n   * @param forYear - Dately object (JavaScript date, ISO string formatted date, or DayJS-object\r\n   * @returns The holidays for the given year.\r\n   */\r\n  public static getYearlyHolidays(forYear: DatelyObject): Holidays | undefined | null {\r\n    // Implementation is moved to Dates to avoid circular dependencies.\r\n    return Dates.getYearlyHolidays(forYear);\r\n  }\r\n\r\n  /**\r\n   * Gets the yearly tax-free numbers from the tax authorities.\r\n   * @param forYear - Dately object (JavaScript date, ISO string formatted date, or DayJS-object) for which the numbers are fetched.\r\n   * @returns The numbers for the given year or current year. If given year is not supported, gives an error in the console (does not fail).\r\n   */\r\n  public static getYearlyTaxFreeNumbers(forYear: DatelyObject): YearlyTaxFreeNumbers {\r\n    const year = Dates.getYear(forYear);\r\n    let numbers = yearlyTaxFreeYears.find((x) => x.year == year);\r\n    if (!numbers) {\r\n      console.error(`getYearlyTaxFreeNumbers does not support year ${forYear || \"-\"}`);\r\n      numbers = yearlyTaxFreeYears[yearlyTaxFreeYears.length - 1];\r\n    }\r\n    return numbers;\r\n  }\r\n}\r\n","import { CalculationRowUnit, CalcRowConfig, CalculationRowCategory, CalcRowConfigNumberInput } from \"../../model\";\r\nimport { Years } from \"../../util/Years\";\r\n\r\n/**\r\n * Calculation rows configuration: categories, UI elements etc.\r\n * The texts are stored in translations.\r\n */\r\nexport const calcRowsMetadata: Partial<CalcRowConfig>[] = [\r\n  {\r\n    order: 1,\r\n    name: \"salary\",\r\n    category: CalculationRowCategory.Salary,\r\n    color: \"#4a92e9\",\r\n    amount: {\r\n      default: 1,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {},\r\n    incomeTypes: [227]\r\n  },\r\n  {\r\n    order: 2,\r\n    name: \"hourlySalary\",\r\n    category: CalculationRowCategory.Salary,\r\n    color: \"#4a92e9\",\r\n    amount: {},\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [201]\r\n  },\r\n  {\r\n    order: 3,\r\n    name: \"monthlySalary\",\r\n    category: CalculationRowCategory.Salary,\r\n    color: \"#4a92e9\",\r\n    amount: {\r\n      default: 1,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {},\r\n    incomeTypes: [201]\r\n  },\r\n  {\r\n    order: 8,\r\n    name: \"timeRatePay\",\r\n    category: CalculationRowCategory.Salary,\r\n    color: \"#4a92e9\",\r\n    amount: { unit: CalculationRowUnit.Hours, units: [CalculationRowUnit.Hours, CalculationRowUnit.Days, CalculationRowUnit.Weeks, CalculationRowUnit.Months] },\r\n    kind: { name: \"TimeRatePayKind\", values: null },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [201]\r\n  },\r\n  {\r\n    order: 4,\r\n    name: \"compensation\",\r\n    category: CalculationRowCategory.Salary,\r\n    color: \"#4a92e9\",\r\n    amount: {\r\n      default: 1,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {},\r\n    incomeTypes: [336]\r\n  },\r\n  {\r\n    order: 5,\r\n    name: \"totalWorkerPayment\",\r\n    category: CalculationRowCategory.SalaryCalc,\r\n    color: \"#4a92e9\",\r\n    amount: {\r\n      default: 1,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {},\r\n  },\r\n  {\r\n    order: 6,\r\n    name: \"totalEmployerPayment\",\r\n    category: CalculationRowCategory.SalaryCalc,\r\n    color: \"#4a92e9\",\r\n    amount: {\r\n      default: 1,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {},\r\n  },\r\n  {\r\n    order: 7,\r\n    name: \"board\",\r\n    category: CalculationRowCategory.Salary,\r\n    kind: { name: \"BoardKind\", values: null },\r\n    color: \"#4a92e9\",\r\n    amount: { default: 1 },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [308]\r\n  },\r\n  {\r\n    order: 9,\r\n    name: \"hourlySalaryWithWorkingTimeCompensation\",\r\n    category: CalculationRowCategory.SalaryAdditions,\r\n    kind: { name: \"WorkingTimeCompensationKind\", values: null },\r\n    color: \"#15535d\",\r\n    amount: { default: 1 },\r\n    total: {},\r\n    price: {},\r\n  },\r\n  {\r\n    order: 10,\r\n    name: \"overtime\",\r\n    category: CalculationRowCategory.SalaryAdditions,\r\n    color: \"#15535d\",\r\n    amount: {\r\n      default: 0.5,\r\n      unit: CalculationRowUnit.Percent,\r\n    },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [235]\r\n  },\r\n  {\r\n    order: 11,\r\n    name: \"tesWorktimeShortening\",\r\n    category: CalculationRowCategory.SalaryAdditions,\r\n    color: \"#15535d\",\r\n    favorite: 90,\r\n    amount: {\r\n      default: 0.077,\r\n      unit: CalculationRowUnit.Percent,\r\n    },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [216]\r\n  },\r\n  {\r\n    order: 12,\r\n    name: \"eveningAddition\",\r\n    category: CalculationRowCategory.SalaryAdditions,\r\n    color: \"#15535d\",\r\n    amount: {\r\n      unit: CalculationRowUnit.Hours,\r\n    },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [206]\r\n  },\r\n  {\r\n    order: 13,\r\n    name: \"nightimeAddition\",\r\n    category: CalculationRowCategory.SalaryAdditions,\r\n    color: \"#15535d\",\r\n    amount: {\r\n      unit: CalculationRowUnit.Hours,\r\n    },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [236]\r\n  },\r\n  {\r\n    order: 14,\r\n    name: \"saturdayAddition\",\r\n    category: CalculationRowCategory.SalaryAdditions,\r\n    color: \"#15535d\",\r\n    amount: {\r\n      default: 0.5,\r\n      unit: CalculationRowUnit.Percent,\r\n    },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [211]\r\n  },\r\n  {\r\n    order: 15,\r\n    name: \"sundayWork\",\r\n    category: CalculationRowCategory.SalaryAdditions,\r\n    color: \"#15535d\",\r\n    favorite: 10,\r\n    amount: {},\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [221]\r\n  },\r\n  {\r\n    order: 19,\r\n    name: \"otherAdditions\",\r\n    category: CalculationRowCategory.SalaryAdditions,\r\n    color: \"#15535d\",\r\n    amount: { default: 1 },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [216]\r\n  },\r\n  {\r\n    order: 20,\r\n    name: \"remuneration\",\r\n    category: CalculationRowCategory.SalaryAdditions,\r\n    kind: { name: \"RemunerationKind\", values: null },\r\n    color: \"#15535d\",\r\n    amount: { default: 1, unit: CalculationRowUnit.Percent, units: [CalculationRowUnit.Percent, CalculationRowUnit.Count]},\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [202, 203, 220, 223, 226, 233]\r\n  },\r\n  {\r\n    order: 21,\r\n    name: \"otherCompensation\",\r\n    category: CalculationRowCategory.SalaryAdditions,\r\n    kind: { name: \"OtherCompensationKind\", values: null },\r\n    color: \"#15535d\",\r\n    amount: { default: 1 },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [210, 214, 215, 225, 308, 310, 313, 314, 316, 320, 326, 332, 339, 340, 343, 361, 366, 367, 368]\r\n  },\r\n  {\r\n    order: 22,\r\n    name: \"workingTimeCompensation\",\r\n    category: CalculationRowCategory.SalaryAdditions,\r\n    kind: { name: \"WorkingTimeCompensationKind\", values: null },\r\n    color: \"#15535d\",\r\n    amount: { default: 1 },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes:[205, 206, 207, 211, 212, 216, 217, 221, 230, 232, 235, 236, 237]\r\n  },\r\n  {\r\n    order: 23,\r\n    name: \"employmentTermination\",\r\n    category: CalculationRowCategory.SalaryAdditions,\r\n    kind: { name: \"EmploymentTerminationKind\", values: null },\r\n    color: \"#15535d\",\r\n    amount: { default: 1 },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [208, 224, 229, 231, 338]\r\n  },\r\n  {\r\n    order: 101,\r\n    name: \"accomodationBenefit\",\r\n    category: CalculationRowCategory.Benefits,\r\n    color: \"#4fcdc4\",\r\n    amount: { default: 1 },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [301]\r\n  },\r\n  {\r\n    order: 102,\r\n    name: \"mealBenefit\",\r\n    category: CalculationRowCategory.Benefits,\r\n    kind: { name: \"MealBenefitKind\", values: null }, // TODO: Add support for marking kinds/rowTypes as obsolete (must be invisible in searches but supported older calculations)\r\n    color: \"#4fcdc4\",\r\n    amount: {},\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [303, 334, 407, 408]\r\n  },\r\n  {\r\n    order: 103,\r\n    name: \"phoneBenefit\",\r\n    category: CalculationRowCategory.Benefits,\r\n    color: \"#4fcdc4\",\r\n    amount: { default: 1 },\r\n    price: { default: 20 },\r\n    total: {},\r\n    incomeTypes: [330]\r\n  },\r\n  {\r\n    order: 104,\r\n    name: \"carBenefit\",\r\n    category: CalculationRowCategory.Benefits,\r\n    kind: { name: \"CarBenefitKind\", values: null },\r\n    color: \"#4fcdc4\",\r\n    amount: {\r\n      default: 1,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [304, 401]\r\n  },\r\n  {\r\n    order: 105,\r\n    name: \"bicycleBenefit\",\r\n    category: CalculationRowCategory.Benefits,\r\n    kind: { name: \"BicycleBenefitKind\", values: null },\r\n    color: \"#4fcdc4\",\r\n    amount: {\r\n      default: 1,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [363, 364, 420]\r\n  },\r\n  {\r\n    order: 199,\r\n    name: \"otherBenefit\",\r\n    category: CalculationRowCategory.Benefits,\r\n    color: \"#4fcdc4\",\r\n    amount: {},\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [317]\r\n  },\r\n  {\r\n    order: 201,\r\n    name: \"holidayCompensation\",\r\n    category: CalculationRowCategory.Holidays,\r\n    color: \"#ffe66d\",\r\n    favorite: 80,\r\n    amount: {\r\n      default: 0.115,\r\n      unit: CalculationRowUnit.Percent, units: [CalculationRowUnit.Percent, CalculationRowUnit.Count],\r\n    },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [234]\r\n  },\r\n  {\r\n    order: 202,\r\n    name: \"holidayBonus\",\r\n    category: CalculationRowCategory.Holidays,\r\n    color: \"#ffe66d\",\r\n    amount: {\r\n      unit: CalculationRowUnit.Percent, units: [CalculationRowUnit.Percent, CalculationRowUnit.Count],\r\n    },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [213]\r\n  },\r\n  {\r\n    order: 203,\r\n    name: \"holidaySalary\",\r\n    category: CalculationRowCategory.Holidays,\r\n    color: \"#ffe66d\",\r\n    amount: {\r\n      default: 1,\r\n      unit: CalculationRowUnit.Count\r\n    },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [201]\r\n  },\r\n  {\r\n    order: 301,\r\n    name: \"dailyAllowance\",\r\n    category: CalculationRowCategory.Expenses,\r\n    kind: { name: \"DailyAllowanceKind\", values: null },\r\n    color: \"#ffa900\",\r\n    favorite: 100,\r\n    price: { default: Years.getYearlyChangingNumbers(new Date(), true)?.sideCosts?.taxFreeDailyAllowance },\r\n    amount: {},\r\n    total: {},\r\n    incomeTypes: [331]\r\n  },\r\n  {\r\n    order: 302,\r\n    name: \"dailyAllowanceHalf\",\r\n    category: CalculationRowCategory.Expenses,\r\n    color: \"#ffa900\",\r\n    price: { default: Years.getYearlyChangingNumbers(new Date(), true)?.sideCosts?.taxFreeDailyHalfAllowance },\r\n    amount: { unit: CalculationRowUnit.Days },\r\n    total: {},\r\n    incomeTypes: [331]\r\n\r\n  },\r\n  {\r\n    order: 303,\r\n    name: \"mealCompensation\",\r\n    category: CalculationRowCategory.Expenses,\r\n    color: \"#ffa900\",\r\n    price: { default: Years.getYearlyChangingNumbers(new Date(), true)?.sideCosts?.taxFreeMealAllowance },\r\n    amount: { unit: CalculationRowUnit.Days },\r\n    total: {},\r\n    incomeTypes: [303]\r\n  },\r\n  {\r\n    order: 304,\r\n    name: \"milageOwnCar\",\r\n    category: CalculationRowCategory.Expenses,\r\n    color: \"#ffa900\",\r\n    favorite: 20,\r\n    price: { default: Years.getYearlyChangingNumbers(new Date(), true)?.sideCosts?.taxFreeKmAllowance },\r\n    amount: { unit: CalculationRowUnit.Kilometers },\r\n    total: {},\r\n    incomeTypes: [311]\r\n  },\r\n  {\r\n    order: 305,\r\n    name: \"toolCompensation\",\r\n    category: CalculationRowCategory.Expenses,\r\n    color: \"#ffa900\",\r\n    favorite: 60,\r\n    amount: { unit: CalculationRowUnit.Days },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [353]\r\n  },\r\n  {\r\n    order: 306,\r\n    name: \"expenses\",\r\n    category: CalculationRowCategory.Expenses,\r\n    color: \"#ffa900\",\r\n    favorite: 70,\r\n    amount: {},\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [1]\r\n  },\r\n  {\r\n    order: 307,\r\n    name: \"milageDaily\",\r\n    category: CalculationRowCategory.Expenses,\r\n    color: \"#ffa900\",\r\n    favorite: 30,\r\n    amount: { unit: CalculationRowUnit.Days },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [311]\r\n  },\r\n  {\r\n    order: 308,\r\n    name: \"milageOther\",\r\n    category: CalculationRowCategory.Expenses,\r\n    color: \"#ffa900\",\r\n    amount: { unit: CalculationRowUnit.Days },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [311]\r\n  },\r\n  {\r\n    order: 401,\r\n    name: \"unionPayment\",\r\n    category: CalculationRowCategory.Deductions,\r\n    kind: { name: \"UnionPaymentKind\", values: null },\r\n    color: \"#ff6738\",\r\n    amount: { input: CalcRowConfigNumberInput.Hidden },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: { input: CalcRowConfigNumberInput.Hidden },\r\n    incomeTypes: [408]\r\n  },\r\n  {\r\n    order: 402,\r\n    name: \"foreclosure\",\r\n    category: CalculationRowCategory.Deductions,\r\n    kind: { name: \"ForeclosureKind\", values: null },\r\n    color: \"#ff6738\",\r\n    amount: { input: CalcRowConfigNumberInput.Hidden },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: { input: CalcRowConfigNumberInput.Hidden },\r\n    incomeTypes: [417]\r\n  },\r\n  {\r\n    order: 403,\r\n    name: \"advance\",\r\n    category: CalculationRowCategory.Deductions,\r\n    color: \"#ff6738\",\r\n    favorite: 40,\r\n    amount: { input: CalcRowConfigNumberInput.Hidden },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {},\r\n    incomeTypes: [1]\r\n  },\r\n  {\r\n    order: 405,\r\n    name: \"prepaidExpenses\",\r\n    category: CalculationRowCategory.Deductions,\r\n    color: \"#ff6738\",\r\n    amount: { input: CalcRowConfigNumberInput.Hidden },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {},\r\n    incomeTypes: [1]\r\n  },\r\n  {\r\n    order: 406,\r\n    name: \"otherDeductions\",\r\n    category: CalculationRowCategory.Deductions,\r\n    color: \"#ff6738\",\r\n    amount: { input: CalcRowConfigNumberInput.Hidden },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {},\r\n    incomeTypes: [408]\r\n  },\r\n  {\r\n    order: 407,\r\n    name: \"deductibleOfExerciseAndCultureBenefit\",\r\n    category: CalculationRowCategory.Deductions,\r\n    color: \"#ff6738\",\r\n    amount: { input: CalcRowConfigNumberInput.Hidden },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {},\r\n    incomeTypes: [408]\r\n  },\r\n  {\r\n    order: 500,\r\n    name: \"taxAtSource\",\r\n    category: CalculationRowCategory.Deductions,\r\n    kind: { name: \"TaxAtSourceKind\", values: null },\r\n    color: \"#ff6738\",\r\n    amount: {\r\n      unit: CalculationRowUnit.Percent,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: {},\r\n    price: {\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    incomeTypes: [404, 405, 412]\r\n  },\r\n  {\r\n    order: 501,\r\n    name: \"taxWithholding\",\r\n    category: CalculationRowCategory.Deductions,\r\n    kind: { name: \"TaxWithholdingKind\", values: null },\r\n    color: \"#ff6738\",\r\n    amount: {\r\n      unit: CalculationRowUnit.Percent,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: {},\r\n    price: {\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    incomeTypes: [402]\r\n  },\r\n  {\r\n    order: 505,\r\n    name: \"absencePeriod\",\r\n    category: CalculationRowCategory.Deductions,\r\n    kind: { name: \"AbsenceCauseCode\", values: null },\r\n    color: \"#ff6738\",\r\n    amount: {},\r\n    total: {},\r\n    price: {\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    incomeTypes: []\r\n  },\r\n  {\r\n    order: 901,\r\n    name: \"childCareSubsidy\",\r\n    category: CalculationRowCategory.Deductions,\r\n    color: \"#4fcdc4\",\r\n    favorite: 50,\r\n    amount: { input: CalcRowConfigNumberInput.Hidden },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {},\r\n    incomeTypes: [321]\r\n  },\r\n  {\r\n    order: 1010,\r\n    name: \"nonProfitOrg\",\r\n    category: CalculationRowCategory.Expenses,\r\n    kind: { name: \"NonProfitOrgKind\", values: null },\r\n    color: \"#ffa900\",\r\n    amount: {},\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [357,358]\r\n  },\r\n  {\r\n    order: 1020,\r\n    name: \"subsidisedCommute\",\r\n    category: CalculationRowCategory.Benefits,\r\n    kind: { name: \"SubsidisedCommuteKind\", values: null },\r\n    color: \"#4fcdc4\",\r\n    amount: {\r\n      default: 1,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [341,342,415]\r\n  },\r\n  {\r\n    order: 1100,\r\n    name: \"paidSickLeave\",\r\n    category: CalculationRowCategory.Salary,\r\n    kind: { name: \"PaidSickLeaveKind\", values: null },\r\n    color: \"#4a92e9\",\r\n    amount: {},\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [201,227]\r\n  },\r\n  {\r\n    order: 1110,\r\n    name: \"training\",\r\n    category: CalculationRowCategory.Salary,\r\n    kind: { name: \"TrainingKind\", values: null },\r\n    color: \"#4a92e9\",\r\n    amount: {},\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [201,227]\r\n  },\r\n  {\r\n    order: 3001,\r\n    name: \"paidSickLeaveSalary\",\r\n    category: CalculationRowCategory.Salary,\r\n    color: \"#4a92e9\",\r\n    amount: {\r\n      default: 1,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {},\r\n    incomeTypes: [227]\r\n  },\r\n  {\r\n    order: 3002,\r\n    name: \"paidSickLeaveHourlySalary\",\r\n    category: CalculationRowCategory.Salary,\r\n    color: \"#4a92e9\",\r\n    amount: {},\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [201]\r\n  },\r\n  {\r\n    order: 3003,\r\n    name: \"paidSickLeaveMonthlySalary\",\r\n    category: CalculationRowCategory.Salary,\r\n    color: \"#4a92e9\",\r\n    amount: {\r\n      default: 1,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {},\r\n    incomeTypes: [201]\r\n  },\r\n  {\r\n    order: 3004,\r\n    name: \"trainingSalary\",\r\n    category: CalculationRowCategory.Salary,\r\n    color: \"#4a92e9\",\r\n    amount: {\r\n      default: 1,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {},\r\n    incomeTypes: [227]\r\n  },\r\n  {\r\n    order: 3005,\r\n    name: \"trainingHourlySalary\",\r\n    category: CalculationRowCategory.Salary,\r\n    color: \"#4a92e9\",\r\n    amount: {},\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [201]\r\n  },\r\n  {\r\n    order: 3003,\r\n    name: \"trainingMonthlySalary\",\r\n    category: CalculationRowCategory.Salary,\r\n    color: \"#4a92e9\",\r\n    amount: {\r\n      default: 1,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {},\r\n    incomeTypes: [201]\r\n  },\r\n  {\r\n    order: 9999,\r\n    name: \"irIncomeType\",\r\n    category: CalculationRowCategory.Salary,\r\n    kind: { name: \"TransactionCode\", values: null },\r\n    color: \"#4a92e9\",\r\n    amount: { default: 1 },\r\n    total: {},\r\n    price: {},\r\n  },\r\n  {\r\n    order: 10000,\r\n    name: \"script\",\r\n    category: CalculationRowCategory.Other,\r\n    color: \"#f7df1e\",\r\n    amount: {\r\n      default: 0,\r\n      input: CalcRowConfigNumberInput.Hidden,\r\n    },\r\n    total: { input: CalcRowConfigNumberInput.Hidden },\r\n    price: {\r\n      default: 0,\r\n      input: CalcRowConfigNumberInput.Hidden\r\n    },\r\n  },\r\n  {\r\n    order: 10001,\r\n    name: \"serviceCharge\",\r\n    category: CalculationRowCategory.Other,\r\n    color: \"#289548\",\r\n    amount: { default: 1 },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [1]\r\n  },\r\n  {\r\n    order: 10002,\r\n    name: \"service\",\r\n    category: CalculationRowCategory.Other,\r\n    color: \"#289548\",\r\n    amount: { default: 1 },\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [1]\r\n  },\r\n  {\r\n    order: 10003,\r\n    name: \"payStats\",\r\n    category: CalculationRowCategory.Other,\r\n    kind: { name: \"PayStatsKind\", values: null },\r\n    color: \"#289548\",\r\n    amount: {},\r\n    total: {},\r\n    price: {},\r\n    incomeTypes: [1]\r\n  }\r\n];\r\n","import { CalculationRowType } from \"../../model/v01\";\r\n\r\n/** Categorization / grouping for CalculationRowType */\r\nexport class CalculationRowCategories {\r\n\r\n  /** Base salary types: the ones that you define directly */\r\n  public static baseSalary = [\r\n    CalculationRowType.Salary,\r\n    CalculationRowType.HourlySalary,\r\n    CalculationRowType.MonthlySalary,\r\n    CalculationRowType.TimeRatePay,\r\n    CalculationRowType.TotalWorkerPayment,\r\n    CalculationRowType.TotalEmployerPayment,\r\n    CalculationRowType.Compensation,\r\n    // CalculationRowType.IrIncomeType,\r\n    CalculationRowType.Board,\r\n  ];\r\n\r\n  /** Additions to base salary - typically a percentage of base salary */\r\n  public static salaryAdditions = [\r\n    CalculationRowType.Overtime,\r\n    CalculationRowType.TesWorktimeShortening,\r\n    CalculationRowType.EveningAddition,\r\n    CalculationRowType.NightimeAddition,\r\n    CalculationRowType.SaturdayAddition,\r\n    CalculationRowType.SundayWork,\r\n    CalculationRowType.HolidayCompensation,\r\n    CalculationRowType.HolidayBonus,\r\n    CalculationRowType.HolidaySalary,\r\n    CalculationRowType.OtherAdditions,\r\n    // CalculationRowType.Remuneration,\r\n    // CalculationRowType.OtherCompensation,\r\n    // CalculationRowType.WorkingTimeCompensation,\r\n    // CalculationRowType.EmploymentTermination,\r\n  ];\r\n\r\n  /** All salary types: baseSalary and salaryAdditions together */\r\n  public static salary = CalculationRowCategories.baseSalary.concat(CalculationRowCategories.salaryAdditions);\r\n\r\n  /** Benefits: Not paid as money but taxable income */\r\n  public static benefits = [\r\n    CalculationRowType.AccomodationBenefit,\r\n    CalculationRowType.MealBenefit,\r\n    CalculationRowType.PhoneBenefit,\r\n    CalculationRowType.OtherBenefit,\r\n  ];\r\n\r\n  /** Expenses and other non-taxed compensations */\r\n  public static expenses = [\r\n    CalculationRowType.Expenses,\r\n    CalculationRowType.MilageOwnCar,\r\n    CalculationRowType.DailyAllowance,\r\n    CalculationRowType.DailyAllowanceHalf,\r\n    CalculationRowType.MealCompensation,\r\n    CalculationRowType.ToolCompensation,\r\n    CalculationRowType.MilageDaily,\r\n    CalculationRowType.MilageOther,\r\n    CalculationRowType.ChildCareSubsidy,\r\n  ];\r\n\r\n  /** Deductions */\r\n  public static deductions = [\r\n    CalculationRowType.Advance,\r\n    CalculationRowType.Foreclosure,\r\n    CalculationRowType.OtherDeductions,\r\n    CalculationRowType.PrepaidExpenses,\r\n    CalculationRowType.UnionPayment,\r\n    CalculationRowType.AbsencePeriod,\r\n  ];\r\n\r\n  /** Holidays */\r\n  public static holidays = [\r\n    CalculationRowType.HolidayCompensation,\r\n    CalculationRowType.HolidayBonus,\r\n    CalculationRowType.HolidaySalary,\r\n    // CalculationRowType.HolidayDays\r\n  ];\r\n\r\n  /**\r\n   * Items in the section called \"expenses\". Besides expenses, contains also benefits.\r\n   */\r\n  public static expensesSection = CalculationRowCategories.expenses.concat(CalculationRowCategories.benefits, CalculationRowCategories.deductions);\r\n}\r\n","/**\r\n * Data that is sent to external dialog and received back from it.\r\n * Used in cross-site communication.\r\n */\r\nexport class ExternalDialogData<TItem> {\r\n\r\n  /**\r\n   * Result of from the external dialog is typically OK, Cancel.\r\n   * Edit dialogs often also have \"delete\", but you may add custom actions.\r\n   */\r\n  public action: \"ok\" | \"cancel\" | \"delete\" | string;\r\n\r\n  /**\r\n   * Data that is being edited in the dialog.\r\n   */\r\n  public item: TItem;\r\n\r\n  /**\r\n   * If true, the item has been edited by the user and should typically be saved.\r\n   * NOTE that this is calculated by the Salaxy calling logic: The external dialog does not need to set this.\r\n   */\r\n  public hasChanges?: boolean;\r\n}\r\n","/**\r\n * Enumerates the system roles:\r\n * The roles that are not returned from server as account roles but\r\n * rather as derived from properties of the current session.\r\n */\r\nexport enum SystemRole {\r\n\r\n  /** Session check is in progress: The role of the user is unknown. */\r\n  Unknown = \"unknown\",\r\n\r\n  /** User is anonymous: The session has been checked and there is no token, token has expired or the token is invalid. */\r\n  Anon =  \"anon\",\r\n\r\n  /** User is authenticated either as Company or Person */\r\n  Auth = \"auth\",\r\n\r\n  /**\r\n   * Initialization is in progress:\r\n   * At the moment, this is the same as Session check period (SystemRole Unknown),\r\n   * but there may later be other server-checks in the initialization.\r\n   */\r\n  Init = \"init\",\r\n\r\n  /** User is in Worker role.  */\r\n  Worker = \"worker\",\r\n\r\n  /** User is in Employer role: Either Household or Company. */\r\n  Employer = \"employer\",\r\n\r\n  /** User is Household (Employer) */\r\n  Household = \"household\",\r\n\r\n  /** User is Company (Employer) */\r\n  Company = \"company\",\r\n\r\n  /** User is a Person: Employer and/or Worker (not Company) */\r\n  Person = \"person\",\r\n\r\n  /** Hidden always returns false. Used to hide items in navigation. */\r\n  Hidden = \"hidden\",\r\n\r\n  /** System is running with test data */\r\n  Test = \"test\",\r\n\r\n  /** System is runnin with production data */\r\n  Prod = \"prod\",\r\n\r\n  /** Finnish personal company (\"Yksityinen elinkeinonharjoittaja\"). */\r\n  FiTm = \"fiTm\",\r\n\r\n  /** Finnish Limited liability company (\"Osakeyhtiö\"). */\r\n  FiOy = \"fiOy\",\r\n\r\n  /** Finnish Association (\"yhdistys\") */\r\n  FiRy = \"fiRy\",\r\n\r\n  /**\r\n   * Any user (\"any\" or \"*\") always returns true.\r\n   * Note that in most scenarios also no roles ([], \"\" or null) are equivalent to Any.\r\n   */\r\n  Any = \"any\",\r\n\r\n  /**\r\n   * System role for account that is not verified.\r\n   * Typically this means that the onboarding object should be shown e.g. before payment or on the fornt page.\r\n   * The role is not set while account is not there (anonymous or session check in progress).\r\n   */\r\n  NonVerified = \"nonVerified\",\r\n\r\n  /**\r\n   * Roles which are coming from the primary partner.\r\n   * Indicates that the partner messaging is enabled.\r\n   */\r\n  PartnerMessaging  = \"partnerMessaging\",\r\n\r\n  /** Local environment */\r\n  EnvLocal = \"envLocal\",\r\n  /** Test environment */\r\n  EnvTest = \"envTest\",\r\n  /** Demo environment */\r\n  EnvDemo = \"envDemo\",\r\n  /** Production environment */\r\n  EnvProd = \"envProd\",\r\n  /** Release candidate environment */\r\n  EnvRc = \"envRc\"\r\n}\r\n","/** Defines the possible tax rates for expenses etc. */\r\nexport enum ExpensesVatRate {\r\n  /** No VAT specified. */\r\n  Undefined = \"undefined\",\r\n  /** No rate applied (not even 0%).  */\r\n  None = \"none\",\r\n  /** 25.5% – general VAT rate */\r\n  Tax255 = \"tax255\",\r\n  /** 24% – general VAT rate */\r\n  Tax24 = \"tax24\",\r\n   /** 14% – groceries, restaurant services and catering services */\r\n  Tax135 = \"tax135\",\r\n  /** 13.50% – groceries, restaurant services and catering services */\r\n  Tax14 = \"tax14\",\r\n  /** 10% VAT rate – Books, culture, passenger transport and accommodation */\r\n  Tax10 = \"tax10\",\r\n  /** 0% – Zero VAT rate */\r\n  Tax0 = \"tax0\",\r\n  /** Other VAT rate, manually specified. */\r\n  Other = \"other\",\r\n  /** Multiple VAT rates: Used in expense report when the expense is split to several rows. */\r\n  Multiple = \"multiple\",\r\n}","import { IncomeTypesLogic } from \"./IncomeTypesLogic\";\r\nimport { CalculationRowType, CalculationRowUnit, Unit, Language, CompanyAccountSettings, CalculationRowSource, RowTypeDefinition, CalcRowConfig, CalculationRowCategory, CalcRowConfigNumberInput, CalcRowConfigTypeGroup} from \"../model\";\r\nimport { EnumerationsLogic } from \"./EnumerationsLogic\";\r\nimport { calcRowsMetadata } from \"./model\";\r\nimport { Translations } from \"./Translations\";\r\n\r\n/**\r\n * Provides business logic for Calculation rows:\r\n * How to create user interfaces, reports etc. based on them and their categories.\r\n */\r\nexport class CalcRowsLogic {\r\n\r\n  /**\r\n   * Gets a single UI configuration for Calculation row (built-in row types only).\r\n   * Searches through all row types without role filtering.\r\n   * @param type Type for which the configuration is fetched.\r\n   */\r\n  public static getRowConfig(type: CalculationRowType): CalcRowConfig | undefined {\r\n    if (!type) {\r\n      return undefined;\r\n    }\r\n    if (type == CalculationRowType.Unknown) {\r\n      return this.getUnknownConfig();\r\n    }\r\n    const result = CalcRowsLogic.getBuiltInRowConfigs().find((x) => x.name === type);\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Gets an indicator string (1-2 characters) for a unit.\r\n   * @param unit Unit that should be described.\r\n   * @returns Given unit indicator or undefined if none is matched (convert to empty string if necessary).\r\n   */\r\n  public static getUnitIndicator(unit: CalculationRowUnit | Unit | string | undefined, language: Language | undefined = undefined): string | undefined {\r\n    language = language || Translations.getLanguage() as any || Language.Fi;\r\n    // TODO: Consider another location as this is more generic than just Calculations.\r\n    switch (unit) {\r\n      // TODO: Do views go-through and remove these non-standard strings.\r\n      case \"eur\":\r\n      case \"euros\":\r\n      case \"€\":\r\n        unit = Unit.Euro;\r\n        break;\r\n      case \"day\":\r\n        unit = Unit.Days;\r\n        break;\r\n      case \"hour\":\r\n        unit = Unit.Hours;\r\n        break;\r\n      case \"km\":\r\n        unit = Unit.Kilometers;\r\n        break;\r\n      case \"%\":\r\n        unit = Unit.Percent;\r\n        break;\r\n      case \"week\":\r\n        unit = Unit.Weeks;\r\n        break;\r\n      case \"month\":\r\n        unit = CalculationRowUnit.Months;\r\n        break;\r\n    }\r\n    if (!unit || unit == Unit.Undefined || unit == Unit.One) {\r\n      return undefined;\r\n    }\r\n    if (unit == CalculationRowUnit.Months) {\r\n      return Translations.get(`SALAXY.ENUM.CalculationRowUnit.${unit}.label`, undefined, language || undefined);\r\n    }\r\n    // CalculationRowUnit is the same value as Unit for all the above.\r\n    return Translations.get(`SALAXY.ENUM.Unit.${unit}.shortIndicator`, undefined, language || undefined);\r\n  }\r\n\r\n  /** Gets the row configuration for row type \"unknown\". */\r\n  public static getUnknownConfig(): CalcRowConfig | undefined {\r\n    if (!this.unknownRowConfig) {\r\n      this.unknownRowConfig = this.getRowConfigInternal({\r\n        order: 0,\r\n        name: \"unknown\",\r\n        category: CalculationRowCategory.Other,\r\n        color: \"#ccc\",\r\n        amount: {\r\n          default: 1,\r\n          input: CalcRowConfigNumberInput.Hidden,\r\n        },\r\n        total: { input: CalcRowConfigNumberInput.Hidden },\r\n        price: { input: CalcRowConfigNumberInput.Hidden },\r\n        group: CalcRowConfigTypeGroup.BuiltIn,\r\n      });\r\n    }\r\n    return this.unknownRowConfig;\r\n  }\r\n\r\n  /** Row configuration for unknown row type. */\r\n  private static unknownRowConfig: CalcRowConfig | undefined;\r\n\r\n  private role: \"company\" | \"household\";\r\n\r\n  private settings: CompanyAccountSettings;\r\n\r\n  /**\r\n   * Creates a new CalcRowsLogic helper wichh adapts to role logic (company/household).\r\n   * @param settings The company account settings that may contain company specific roles or just a role marker for \"household\".\r\n   */\r\n  constructor(settings: CompanyAccountSettings | \"household\" | \"company\" = \"company\") {\r\n    this.role = settings === \"household\" ? \"household\" : \"company\";\r\n    if (typeof settings === \"object\") {\r\n      this.settings = settings;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the custom row configs from company settings if provided in the constructor.\r\n   */\r\n  public getCustomRowConfigs(): CalcRowConfig[] {\r\n    if (!(this.settings as CompanyAccountSettings)?.calc?.salaryDefaults) {\r\n      return [];\r\n    }\r\n    return (this.settings as CompanyAccountSettings)?.calc?.salaryDefaults?.filter(x => x.source == CalculationRowSource.CustomRowtype)\r\n      .map(x => (x as RowTypeDefinition).config as CalcRowConfig) ?? [];\r\n  }\r\n\r\n  /**\r\n   * Gets the row types by category.\r\n   * The instance methods filter types based on role.\r\n   * @param category Category to fetch\r\n   */\r\n  public getRowTypesByCategory(category: CalculationRowCategory): CalculationRowType[] {\r\n    return CalcRowsLogic.rowsByCategory[category] || [];\r\n  }\r\n\r\n  /**\r\n   * Gets the row configurations by category(ies).\r\n   * The instance methods filter types based on role.\r\n   * @param categories List of categories to filter by.\r\n   */\r\n  public getRowConfigsByCategory(categories: CalculationRowCategory[]): CalcRowConfig[] {\r\n    const types: CalculationRowType[] = [];\r\n    for (const cat of categories || []) {\r\n      types.push(...this.getRowTypesByCategory(cat));\r\n    }\r\n    return this.getRowConfigsByType(types);\r\n  }\r\n\r\n  /**\r\n   * Gets the row configurations based on a list of row types.\r\n   * The instance methods filter types based on role.\r\n   * @param types List of types to filter by.\r\n   */\r\n  public getRowConfigsByType(types: CalculationRowType[]): CalcRowConfig[] {\r\n    types = types || [];\r\n    return this.getRowConfigs().filter((x) => types.indexOf(x.rowType as CalculationRowType) >= 0);\r\n  }\r\n\r\n  /**\r\n   * Gets a single UI configuration for Calculation row.\r\n   * This method filters for user role. Use static method to return any row configuration (also faster).\r\n   * The instance methods filter types based on role.\r\n   * @param type Type for which the configuration is fetched.\r\n   */\r\n  public getRowConfig(type: CalculationRowType): CalcRowConfig | undefined {\r\n    if (!type) {\r\n      return undefined;\r\n    }\r\n    if (type == CalculationRowType.Unknown) {\r\n      return CalcRowsLogic.getUnknownConfig();\r\n    }\r\n    const result = this.getRowConfigs().find((x) => x.name === type);\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Gets all the UI configuration objects for calculation rows.\r\n   * Caches the data based on role and language.\r\n   */\r\n  public getRowConfigs(): CalcRowConfig[] {\r\n    if (this.role === \"household\") {\r\n      return CalcRowsLogic.getBuiltInRowConfigs().filter((x) =>\r\n        x.name !== CalculationRowType.Compensation\r\n        && x.name !== CalculationRowType.Board\r\n        && x.name !== CalculationRowType.IrIncomeType\r\n        && x.name !== CalculationRowType.OtherCompensation\r\n        && x.name !== CalculationRowType.NonProfitOrg\r\n      );\r\n    } else {\r\n      return this.getCustomRowConfigs()\r\n        .concat(CalcRowsLogic.getBuiltInRowConfigs().filter((x) => x.name !== CalculationRowType.ChildCareSubsidy))\r\n        .sort((a, b) => (((a.order ?? 0) * 100) + (a.group == CalcRowConfigTypeGroup.BuiltIn ? 1 : 0)) - (((b.order ?? 0) * 100) + (b.group == CalcRowConfigTypeGroup.BuiltIn ? 1 : 0)))\r\n        ;\r\n    }\r\n  }\r\n\r\n  /** Gets all the row configs cached for each language if language changes. */\r\n  public static getBuiltInRowConfigs(): CalcRowConfig[] {\r\n    const lang = Translations.getLanguage();\r\n    if (!CalcRowsLogic.rowsCache[lang]) {\r\n      CalcRowsLogic.rowsCache[lang] = calcRowsMetadata.map((x) => CalcRowsLogic.getRowConfigInternal(x));\r\n    }\r\n    return CalcRowsLogic.rowsCache[lang];\r\n  }\r\n\r\n  /** Raw classification of row types to primary categories. */\r\n  public static rowsByCategory = {\r\n\r\n    /** Base salary types: the ones that you define directly */\r\n    salary: [\r\n      CalculationRowType.Salary,\r\n      CalculationRowType.HourlySalary,\r\n      CalculationRowType.MonthlySalary,\r\n      CalculationRowType.TimeRatePay,\r\n      CalculationRowType.Compensation,\r\n      CalculationRowType.IrIncomeType,\r\n      CalculationRowType.Board,\r\n      CalculationRowType.PaidSickLeave,\r\n      CalculationRowType.PaidSickLeaveSalary,\r\n      CalculationRowType.PaidSickLeaveHourlySalary,\r\n      CalculationRowType.PaidSickLeaveMonthlySalary,\r\n      CalculationRowType.Training,\r\n    ],\r\n\r\n    /** Additions to base salary - typically a percentage of base salary */\r\n    salaryAdditions: [\r\n      CalculationRowType.Overtime,\r\n      CalculationRowType.TesWorktimeShortening,\r\n      CalculationRowType.EveningAddition,\r\n      CalculationRowType.NightimeAddition,\r\n      CalculationRowType.SaturdayAddition,\r\n      CalculationRowType.SundayWork,\r\n      CalculationRowType.OtherAdditions,\r\n      CalculationRowType.Remuneration,\r\n      CalculationRowType.OtherCompensation,\r\n      CalculationRowType.WorkingTimeCompensation,\r\n      CalculationRowType.EmploymentTermination,\r\n      CalculationRowType.HourlySalaryWithWorkingTimeCompensation,\r\n    ],\r\n\r\n    /** Benefits: Not paid as money but taxable income */\r\n    benefits: [\r\n      CalculationRowType.MealBenefit,\r\n      CalculationRowType.PhoneBenefit,\r\n      CalculationRowType.SubsidisedCommute,\r\n      CalculationRowType.CarBenefit,\r\n      CalculationRowType.BicycleBenefit,\r\n      CalculationRowType.AccomodationBenefit,\r\n      CalculationRowType.OtherBenefit,\r\n      CalculationRowType.ChildCareSubsidy,\r\n    ],\r\n\r\n    /** Expenses and other non-taxed compensations */\r\n    expenses: [\r\n      CalculationRowType.DailyAllowance,\r\n      CalculationRowType.Expenses,\r\n      CalculationRowType.MilageOwnCar,\r\n      CalculationRowType.MealCompensation,\r\n      CalculationRowType.ToolCompensation,\r\n      CalculationRowType.MilageDaily,\r\n      CalculationRowType.MilageOther,\r\n      CalculationRowType.NonProfitOrg,\r\n      CalculationRowType.DailyAllowanceHalf,\r\n    ],\r\n\r\n    /** Holidays */\r\n    holidays: [\r\n      CalculationRowType.HolidayCompensation,\r\n      CalculationRowType.HolidayBonus,\r\n      CalculationRowType.HolidaySalary,\r\n    ],\r\n\r\n    /** Deductions */\r\n    deductions: [\r\n      CalculationRowType.UnionPayment,\r\n      CalculationRowType.Advance,\r\n      CalculationRowType.Foreclosure,\r\n      CalculationRowType.OtherDeductions,\r\n      CalculationRowType.DeductibleOfExerciseAndCultureBenefit,\r\n      CalculationRowType.PrepaidExpenses,\r\n      CalculationRowType.TaxAtSource,\r\n      CalculationRowType.TaxWithholding,\r\n      CalculationRowType.AbsencePeriod,\r\n    ],\r\n\r\n    /** Types that are used only as temporary / input types in Calculations - not in the results. */\r\n    salaryCalc: [\r\n      CalculationRowType.TotalWorkerPayment,\r\n      CalculationRowType.TotalEmployerPayment,\r\n      CalculationRowType.Script\r\n    ],\r\n\r\n    /** Other row types */\r\n    other: [\r\n      // CalculationRowType.ChildCareSubsidy,\r\n      CalculationRowType.Service,\r\n      CalculationRowType.PayStats\r\n    ],\r\n  };\r\n\r\n  private static rowsCache: any = {};\r\n\r\n  /** Converts a raw excel generated row configuration to language-versioned JSON object. */\r\n  private static getRowConfigInternal(rowConfig: Partial<CalcRowConfig>): CalcRowConfig | undefined {\r\n    if (!rowConfig) {\r\n      return undefined;\r\n    }\r\n    let kind = rowConfig.kind?.name ? EnumerationsLogic.getEnumMetadata(rowConfig.kind.name) : undefined;\r\n    // TransactionCodes has been translated in incometypelogic, not in enumerationlogic\r\n    if (kind?.name === \"TransactionCode\") {\r\n      const allTypes = IncomeTypesLogic.getAll();\r\n      for (const value of kind.values) {\r\n        value.label = allTypes.find(x => x.transactionCode === value.name)?.label;\r\n        value.descr = allTypes.find(x => x.transactionCode === value.name)?.description;\r\n      }\r\n    }\r\n    if ((kind?.values?.length ?? 0) < 2) {\r\n      kind = undefined;\r\n    }\r\n    return {\r\n      name: rowConfig!.name!,\r\n      rowType: rowConfig.name as CalculationRowType,\r\n      type: \"/builtIn/\" + rowConfig.name,\r\n      order: rowConfig.order ?? 0,\r\n      kind: kind,\r\n      label: Translations.get(\"SALAXY.ENUM.CalculationRowType.\" + rowConfig.name + \".label\"),\r\n      descr: Translations.get(\"SALAXY.ENUM.CalculationRowType.\" + rowConfig.name + \".description\"),\r\n      moreInfo: Translations.getWithDefault(\"SALAXY.ENUM.CalculationRowType.\" + rowConfig.name + \".moreInfo\", undefined),\r\n      category: rowConfig.category!,\r\n      favorite: rowConfig.favorite || 0,\r\n      color: rowConfig.color || \"#eee\",\r\n      iconText: Translations.getWithDefault(\"SALAXY.ENUM.CalculationRowType.\" + rowConfig.name + \".iconText\", undefined) || \"€\",\r\n      price: {\r\n        label: Translations.getWithDefault(\"SALAXY.ENUM.CalculationRowType.\" + rowConfig.name + \".priceLabel\", undefined) || Translations.get(\"SALAXY.UI_Terms.price\"),\r\n        input: rowConfig.price?.input || CalcRowConfigNumberInput.Number,\r\n        default: rowConfig.price?.default || undefined,\r\n      },\r\n      amount: {\r\n        label: Translations.getWithDefault(\"SALAXY.ENUM.CalculationRowType.\" + rowConfig.name + \".amountLabel\", undefined) || Translations.get(\"SALAXY.UI_Terms.amount\"),\r\n        input: rowConfig?.amount?.input || CalcRowConfigNumberInput.Number,\r\n        default: rowConfig?.amount?.default || undefined,\r\n        unit: rowConfig?.amount?.unit || undefined,\r\n        units: rowConfig?.amount?.units || undefined,\r\n      },\r\n      total: {\r\n        input: rowConfig?.total?.input || CalcRowConfigNumberInput.ReadOnly,\r\n      },\r\n      incomeTypes: rowConfig?.incomeTypes || undefined,\r\n      group: CalcRowConfigTypeGroup.BuiltIn,\r\n    };\r\n  }\r\n}\r\n","import { Unit } from \"../model\";\r\nimport { CalcRowsLogic } from \"../logic/CalcRowsLogic\";\r\nimport { Translations } from \"../logic/Translations\";\r\n/**\r\n * Helpers for handling numbers: Mathematical operations, parsing and formatting numbers in our supported languages etc.\r\n */\r\nexport class Numeric {\r\n\r\n  /**\r\n   * Parses a user input to a float taking into consideration the Finnish culture.\r\n   * Main case is that decimal separator is usually a comma (,).\r\n   * If there is both comma (,) and point (.) in the same string, NaN is returned.\r\n   * Whitespaces are removed and if string contains commas they are replaced with points before conversion to Number.\r\n   * Null, undefined return original value, empty strings (or whitespace only) return null.\r\n   *\r\n   * @param numCandidate - text that should be converted to a number if possible.\r\n   */\r\n  public static parseNumber(numCandidate: string | number): number | undefined {\r\n    if (numCandidate == null || typeof (numCandidate) === \"number\") {\r\n      return numCandidate as number;\r\n    }\r\n    if (typeof (numCandidate) === \"string\") {\r\n      if (numCandidate.indexOf(\",\") >= 0 && numCandidate.indexOf(\".\") >= 0) {\r\n        return Number.NaN;\r\n      }\r\n      numCandidate = numCandidate.replace(/\\s/, \"\");\r\n      if (numCandidate === \"\") {\r\n        return undefined;\r\n      }\r\n      return Number(numCandidate.replace(\",\", \".\"));\r\n    }\r\n    return Number(numCandidate);\r\n  }\r\n\r\n  /**\r\n   * Formats a number as a euro price. Uses comma as decimal separator.\r\n   * @param value - Numeric value to format\r\n   * @param addSuffix - If true (default), adds the €-suffix.\r\n   * @param nullChar The character or string for null or Nan value, the default is '-'.\r\n   */\r\n  public static formatPrice(value: any,  addSuffix = true, nullChar = \"-\" ): string {\r\n    // TODO: Add localization for English language (dot instead of comma as decimal separator).\r\n    // TODO: Add thousand separator?\r\n\r\n    return Numeric.formatNumber(value, 2, (addSuffix ? \"€\" : \"\"), nullChar );\r\n  }\r\n\r\n  /**\r\n   * Rounds a JavaScript number in a reliable way.\r\n   * @param value Number that is rounded. If null given, returns null.\r\n   * @param decimals Number of decimals after the decimal separator. Default is 2 as in money.\r\n   * @returns Number properly rounded, Null/undefined as null, Non-numeric values return Number.NaN\r\n   */\r\n  public static round(value: number | undefined | null, decimals: number | undefined = 2): number | undefined {\r\n    if (value == undefined || decimals == undefined) { // '==' handles both null and undefined values, do not use here '==='\r\n      return undefined;\r\n    }\r\n    if (value < 0) {\r\n      // Round away from zero\r\n      return -1 * Numeric.round(-1 * value, decimals)!;\r\n    }\r\n    let sValue = `${value}`;\r\n    if (sValue.indexOf(\"e\") >= 0) {\r\n      sValue = `${value.toFixed(15)}`;\r\n    }\r\n    return Number(Math.round(`${sValue}e${decimals}` as any).toString() + `e-${decimals}`);\r\n  }\r\n\r\n  /**\r\n   * Fixes floating point problems in typical number.toString() scenarios.\r\n   * E.g. `console.debug((0.07 * 100).toString());` returns \"7.000000000000001\".\r\n   * Null/undefined returns empty string, numbers fixed and otherwise toString() is called.\r\n   * @param value Number to show as string.\r\n   * @returns Number rounded to specified number of decimals. Null/undefined returns empty string.\r\n   * @example\r\n   * console.debug(Numeric.toString(0.07 * 100)); // returns \"7\"\r\n   * console.debug((0.07 * 100).toString());      // returns \"7.000000000000001\"\r\n   */\r\n  public static toString(value: number): string {\r\n    if (value == null) {\r\n      return \"\";\r\n    }\r\n    return value.toFixed ? parseFloat(value.toFixed(12)).toString() : value.toString() ;\r\n  }\r\n\r\n  /**\r\n   * Fixes floating point problems in typical number.toFixed() scenarios.\r\n   * E.g. `console.debug((1.005).toFixed(2));` returns \"1.00\"\r\n   * @param value Number to show as string. Supports null/undefined, but otherwise should be a number.\r\n   * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.\r\n   * @returns Number rounded to specified number of decimals. Null/undefined returns empty string.\r\n   * @example\r\n   * console.debug(Numeric.toFixed(1.005, 2)) // returns \"1.01\"\r\n   * console.debug((1.005).toFixed(2))        // returns 1.00\r\n   */\r\n  public static toFixed(value: number | undefined, fractionDigits = 0): string {\r\n    value = Numeric.round(value, fractionDigits);\r\n    return value == null ? \"\" : value.toFixed(fractionDigits);\r\n  }\r\n\r\n  /**\r\n   * Rounds a JavaScript number in a reliable way in percentage format.\r\n   *\r\n   * @param value Number that is rounded.\r\n   * @param decimals Number of decimals after the decimal separator. Default is 2 as in money.\r\n   * If decimals is null, no rounding is done.\r\n   * @param addSuffix If true, adds '%' sign at the end.\r\n   * @param nullChar The character or string for null or Nan value, the default is '-'.\r\n   */\r\n  public static formatPercent(value: any, decimals = 2, addSuffix = true, nullChar = \"-\"): string {\r\n    return Numeric.formatNumber(value, decimals, (addSuffix ? \"%\" : \"\"), nullChar  );\r\n  }\r\n\r\n  /**\r\n   * Rounds a JavaScript number and formats it using comma as a separator and optional suffix.\r\n   *\r\n   * @param value Number that is rounded.\r\n   * @param decimals Number of decimals after the decimal separator. Default is 2 as in money. If decimals is null, no rounding is done.\r\n   * @param suffix The suffix to add to the number.\r\n   * @param nullChar The character or string for null or Nan value, the default is '-'.\r\n   */\r\n  public static formatNumber(value: any, decimals = 2, suffix = \"\",  nullChar = \"-\"): string {\r\n    const asFloat = parseFloat(value);\r\n    if (isNaN(asFloat)) { return nullChar; }\r\n    let asFixed = Numeric.toFixed(asFloat, decimals == null ? 10 : decimals);\r\n    if (decimals == null) {\r\n        asFixed = `${parseFloat(asFixed)}`;\r\n    }\r\n    return asFixed.replace(/\\./, \",\") + suffix;\r\n  }\r\n\r\n  /**\r\n   * Formats a number as count optionally taking into account the related unit\r\n   * @param input Input to format\r\n   * @param unit Unit that is used in formatting\r\n   * @param decimals Number of decimals to show\r\n   * @param nullText Text to show if the value is null / undefined. By default returns null, which can then be cought by another filter or logical or (\"||\")\r\n   * @param zeroText If specified, will use this text without the Unit formatting if the value is zero. By default zero is formatted as \"0 [unitText]\"\r\n   * @returns formatted input\r\n   */\r\n  public static formatUnit(input: number,\r\n    unit: Unit | undefined = undefined,\r\n    decimals: number | undefined = undefined,\r\n    nullText: string | undefined = undefined,\r\n    zeroText: string| undefined = undefined): string | undefined {\r\n      if (input == null) {\r\n        return nullText;\r\n      }\r\n      if (zeroText != null && input === 0) {\r\n        return zeroText;\r\n      }\r\n      const rounded = Numeric.round(input, decimals || 2);\r\n      switch (unit) {\r\n        case Unit.One:\r\n          return \"\";\r\n        case Unit.Period:\r\n          return rounded + Translations.get(\"SALAXY.NG1.FilterFunctions.sxyCount.period\" + (rounded === 1 ? \"\" : \"s\"));\r\n        case Unit.Percent:\r\n          return Numeric.round(input * 100, decimals || 2) + \"%\";\r\n        case Unit.Hours:\r\n        case Unit.Days:\r\n        case Unit.Weeks:\r\n        case Unit.Count:\r\n        case Unit.Kilometers:\r\n        case Unit.Undefined:\r\n        default:\r\n          return rounded + \" \" + (CalcRowsLogic.getUnitIndicator(unit) || \"\");\r\n      }\r\n    }\r\n\r\n  /**\r\n   * Checks if the given object is a number.\r\n   * @param numberCandidate Object to check\r\n   */\r\n  public static isNumber(numberCandidate: any): boolean {\r\n    return !isNaN(parseFloat(numberCandidate)) && isFinite(numberCandidate);\r\n  }\r\n\r\n}\r\n","import { Numeric } from \"../Numeric\";\r\nimport type { IJsonSchema, OpenAPIV2, OpenAPIV3 } from \"../../@types\";\r\nimport type { JsonSchemaProperty } from \"./JsonSchemaProperty\";\r\nimport type { InputEnumOption } from \"../../ui/InputEnumOption\";\r\n\r\n/** Static utilities for JSON Schemas an Open API documents. */\r\nexport class JsonSchemaUtils {\r\n\r\n  /**\r\n   * Checks if the given object can be rendered/parsed as a table:\r\n   * All properties are single values: type != \"object\".\r\n   * NOTE: The function may later consider some known object types (e.g. Avatar, DateRange)\r\n   * as single values without that being a breaking change.\r\n   * @param schema The schema to evaluate.\r\n   * @returns True if the schema can be rendered as a non-hierarchical table.\r\n   */\r\n  public static isTable(schema: OpenAPIV3.NonArraySchemaObject): boolean {\r\n    if (!schema?.properties) {\r\n      return false;\r\n    }\r\n    return Object.getOwnPropertyNames(schema.properties)\r\n      .filter((key) => !key.startsWith(\"$\"))\r\n      .every((key) => (schema?.properties?.[key] && schema.properties[key] as OpenAPIV3.NonArraySchemaObject)?.type != \"object\" );\r\n  }\r\n\r\n  /**\r\n   * Gets all the properties (the entire tree) from the schema\r\n   * @param schema Schema from which to fetch the properties\r\n   * @param prefix Prefix to add to property path: Mainly used in recursion.\r\n   * @returns InputEnumOptions (typically used in UI) where value and text are\r\n   * the property path, e.g. \"owner.avatar.sortableName\" and title shows the title or description from the schema.\r\n   */\r\n  public static getAllProperties(schema: OpenAPIV3.SchemaObject, prefix = \"\"): InputEnumOption[] {\r\n    const result: InputEnumOption[] = [];\r\n    Object.keys(schema.properties || {}).forEach(key => {\r\n      const prop = schema.properties?.[key] as OpenAPIV3.SchemaObject;\r\n      if (prop) {\r\n        result.push({\r\n          value: prefix + key,\r\n          text: prefix + key,\r\n          title: prop.title || prop.description,\r\n        });\r\n        if (prop.type == \"object\") {\r\n          result.push(...this.getAllProperties(prop as OpenAPIV3.SchemaObject, prefix + key + \".\"));\r\n        }\r\n      }\r\n    });\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Guesses the schema based on a data object.\r\n   * @param data A data object, e.g. the first line (after header) of incoming data.\r\n   */\r\n  public static guessSchema(data: { [key: string]: any }, typeResolve: \"string\" | \"guess\" = \"guess\"): OpenAPIV3.NonArraySchemaObject | undefined {\r\n    if (!data) {\r\n      return undefined;\r\n    }\r\n    const schema: OpenAPIV3.NonArraySchemaObject = {\r\n      description: `Schema generated based on data: ${JSON.stringify(data)}.`,\r\n      type: \"object\",\r\n      format: \"table\",\r\n      properties: {},\r\n    };\r\n    Object.keys(data).forEach((key) => {\r\n      let type: OpenAPIV3.NonArraySchemaObjectType = \"string\";\r\n      if (typeResolve == \"guess\") {\r\n        const val: any = data[key];\r\n        if (Numeric.isNumber(val)) {\r\n          type = \"number\";\r\n        }\r\n        if ([\"true\", \"false\"].indexOf(val) > -1) {\r\n          type = \"boolean\";\r\n        }\r\n        // TODO: Add Date format and perhaps others.\r\n      }\r\n      schema.properties ??= {};\r\n      schema.properties[key] = {\r\n        type,\r\n      };\r\n    });\r\n    return schema;\r\n  }\r\n\r\n  /**\r\n   * Gets a property from a schema document. Supports single property names or longer property paths.\r\n   * @param schema The root type from which the property is found.\r\n   * @param path Property path starting with the root schema.\r\n   */\r\n  public static getProperty(schema: OpenAPIV3.SchemaObject, path: string): JsonSchemaProperty | undefined {\r\n    if (!schema || !path?.trim()) {\r\n      return undefined;\r\n    }\r\n    const pathArr = path.split(\".\");\r\n    let member: OpenAPIV3.SchemaObject = schema;\r\n    let parentName: string | undefined = undefined;\r\n    let propertyName: string | undefined = undefined;\r\n    let isRequired = false;\r\n    while (pathArr.length) {\r\n      propertyName = pathArr.shift()?.trim();\r\n      if (!propertyName) {\r\n        return undefined;\r\n      }\r\n      const memberOrRef = member.properties ? member.properties?.[propertyName] : null;\r\n      parentName = member.format;\r\n      isRequired = ((member.required?.indexOf(propertyName) ?? -1) >= 0) || false;\r\n      if (memberOrRef &&JsonSchemaUtils.isReferenceObject(memberOrRef)) {\r\n\r\n        throw new Error(`Unresolved reference in ${propertyName}`);\r\n      }\r\n      if (!memberOrRef) {\r\n        return undefined;\r\n      }\r\n      member = memberOrRef;\r\n    }\r\n    return {\r\n      parentName: parentName ?? \"\",\r\n      propertyName: propertyName ?? \"\",\r\n      schema: member,\r\n      isRequired,\r\n    };\r\n\r\n  }\r\n\r\n  /**\r\n   * Checks if the given schema is defined in the current usecase: Exists and has any properties.\r\n   * @param schemaDoc Schema document, typically Usecase.Schema\r\n   * @param schemaNames One or several names of the schema to check whether they are defined.\r\n   * If any schema is exists and has properties, returns true.\r\n   */\r\n   public static isDefined(schemaDoc: OpenAPIV3.Document, ...schemaNames: string[]): boolean {\r\n    if (schemaNames.length === 1) {\r\n      const schema: any = schemaDoc?.components?.schemas?.[schemaNames[0]];\r\n      if (!schema) {\r\n        return false;\r\n      }\r\n      return Object.keys(schema.properties).length > 0;\r\n    }\r\n    return !!schemaNames.find((x) => {\r\n      return this.isDefined(schemaDoc, x);\r\n    });\r\n  }\r\n\r\n  /** Typeguard for OpenAPIV2 */\r\n  public static isOpenAPIV3(doc: OpenAPIV3.Document | OpenAPIV2.Document | IJsonSchema): doc is OpenAPIV3.Document {\r\n    return (doc as OpenAPIV3.Document)?.openapi?.startsWith(\"3.\") || false;\r\n  }\r\n\r\n  /** Typeguard for OpenAPIV3 */\r\n  public static isOpenAPIV2(doc: OpenAPIV3.Document | OpenAPIV2.Document | IJsonSchema): doc is OpenAPIV2.Document {\r\n    return (doc as OpenAPIV2.Document)?.swagger?.startsWith(\"2.\") || false;\r\n  }\r\n\r\n  /** Typeguard for JSON schema (TODO: consider adding more generic Schema typing).) */\r\n  public static isSchemaDocument(doc: OpenAPIV3.Document | OpenAPIV2.Document | IJsonSchema): doc is IJsonSchema {\r\n    return !!(doc as IJsonSchema)?.$schema;\r\n  }\r\n\r\n  /** Typeguard for OpenAPIV3.ReferenceObject  */\r\n  public static isReferenceObject(schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject): schema is OpenAPIV3.ReferenceObject {\r\n    return !!(schema as OpenAPIV3.ReferenceObject)?.$ref;\r\n  }\r\n\r\n  /** Typeguard for OpenAPIV3.NonArraySchemaObject  */\r\n  public static isNonArraySchemaObject(schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject): schema is OpenAPIV3.NonArraySchemaObject {\r\n    return [\"boolean\", \"object\", \"number\", \"string\", \"integer\"].indexOf((schema as any).type) >= 0;\r\n  }\r\n\r\n  /** Typeguard for OpenAPIV3.ArraySchemaObject  */\r\n  public static isArraySchemaObject(schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject): schema is OpenAPIV3.ArraySchemaObject {\r\n    return (schema as OpenAPIV3.ArraySchemaObject).type === \"array\";\r\n  }\r\n}\r\n","import type { IJsonSchema, OpenAPIV2, OpenAPIV3 } from \"../../@types\";\r\n\r\nimport { Ajax } from \"../../api/infra\";\r\nimport type { JsonSchemaCacheItem } from \"./JsonSchemaCacheItem\";\r\nimport { JsonSchemaUtils } from \"./JsonSchemaUtils\";\r\n\r\n/**\r\n * Implemenatation of cache of resolved schemas and methods on reading their structure.\r\n */\r\nexport class JsonSchemaCache {\r\n\r\n  /** Cache for loaded schema elements. */\r\n  public schemaCache: JsonSchemaCacheItem[] = [];\r\n\r\n  private ajax: Ajax;\r\n\r\n  constructor(ajax: Ajax) {\r\n    this.ajax = ajax;\r\n  }\r\n\r\n  /**\r\n   * Adds a local schema document and derefernces it.\r\n   * @param url URL that identifies the schema\r\n   * @param doc The schema document as object.\r\n   * @returns A promise of the object.\r\n   */\r\n  public addSchemaDocument(url: string, doc: OpenAPIV3.Document | OpenAPIV2.Document | IJsonSchema): OpenAPIV3.Document {\r\n    url = this.getAbsoluteUrl(url).toLowerCase().trim();\r\n    this.schemaCache = this.schemaCache.filter((x) => x.url !== url);\r\n    if (JsonSchemaUtils.isOpenAPIV2(doc)) {\r\n      const v3doc: OpenAPIV3.Document = {\r\n        \"openapi\": \"3.0.1\",\r\n        \"info\": doc.info,\r\n        paths: doc.paths,\r\n        components: {\r\n          // HACK: There are differneces in two schema objects. Go through what they are exactly and migrate/mitigate if possible.\r\n          schemas: doc.definitions as any,\r\n        }\r\n      };\r\n      doc = v3doc;\r\n    }\r\n    if (JsonSchemaUtils.isSchemaDocument(doc)) {\r\n      const v3doc: OpenAPIV3.Document | any = {\r\n        openapi: \"3.0.1\",\r\n        info: {\r\n          title: doc.title,\r\n          version: \"1.0\",\r\n          description: doc.description,\r\n        },\r\n        paths: {},\r\n        components: {\r\n          // TODO: There may be differneces in two schema objects (depending on the version). Go through what they are exactly and migrate/mitigate if possible.\r\n          schemas: doc.definitions as any,\r\n        }\r\n      };\r\n      doc = v3doc;\r\n    }\r\n    if (JsonSchemaUtils.isOpenAPIV3(doc)) {\r\n      this.prepareSchema(doc);\r\n      // Add to cache\r\n      this.schemaCache.push({\r\n        url: url.toLowerCase(),\r\n        doc,\r\n        type: \"OpenAPIV3\",\r\n      });\r\n      return doc;\r\n    }\r\n    throw new Error(\"Unsupported JSON schema / open api: \" + url);\r\n  }\r\n\r\n  /**\r\n   * Prepares the scehma for our use:\r\n   * Dereferences the internal references ($ref-attribute) as JavaScript references.\r\n   * Also adds the schema names to the format attribute of schema.\r\n   * External references are currently not handled.\r\n   */\r\n  public prepareSchema(doc: OpenAPIV3.Document): void {\r\n    Object.keys(doc.components?.schemas ?? {}).forEach((schemaName) => {\r\n      const schema = doc.components?.schemas?.[schemaName];\r\n      if (!schema) {\r\n        return;\r\n      }\r\n      // TODO: Consider adding as a new property instead of recycling format attribute.\r\n      (schema as OpenAPIV3.SchemaObject).format = schemaName;\r\n      if (JsonSchemaUtils.isNonArraySchemaObject(schema)) {\r\n\r\n        // JsonSchemaCache.sortSchemaProperties(schema);\r\n        if (schema.type === \"object\") {\r\n          if (schema.properties) {\r\n            // First resolve references as JavaScript references\r\n            Object.keys(schema.properties).forEach((propName) => {\r\n              const prop: any = schema.properties?.[propName];\r\n              let ref = (prop as OpenAPIV3.ReferenceObject).$ref;\r\n              if (!ref && (prop as OpenAPIV3.NonArraySchemaObject).oneOf) {\r\n                // HACK: Just a quick hack => Go through in more detail and make more generic (oneOf, allOf etc.)\r\n                // Also add support for JsonSchema style oneOf[\"string\", \"null\"] for nullable items.\r\n                ref = ((prop as OpenAPIV3.NonArraySchemaObject).oneOf as OpenAPIV3.ReferenceObject[])[0].$ref;\r\n              }\r\n              if (ref) {\r\n                if (ref.startsWith(\"#/components/schemas/\")) {\r\n                  (schema as any).properties[propName] = doc.components?.schemas?.[ref.replace(\"#/components/schemas/\", \"\")];\r\n                } else if (ref.startsWith(\"#/definitions/\")) {\r\n                  (schema as any).properties[propName] = doc.components?.schemas?.[ref.replace(\"#/definitions/\", \"\")];\r\n\r\n\r\n                } else {\r\n                  console.error(`Unhandled $ref: ${ref}`);\r\n                }\r\n              } else if (JsonSchemaUtils.isArraySchemaObject(prop as any)) {\r\n                const arrayRef = (prop.items as OpenAPIV3.ReferenceObject)?.$ref;\r\n                if (arrayRef) {\r\n                  if (arrayRef.startsWith(\"#/components/schemas/\")) {\r\n                    prop.items = doc.components?.schemas?.[arrayRef.replace(\"#/components/schemas/\", \"\")];\r\n                  } else if (arrayRef.startsWith(\"#/definitions/\")) {\r\n                    prop.items = doc.components?.schemas?.[arrayRef.replace(\"#/definitions/\", \"\")];\r\n                  } else {\r\n                    console.error(`Unhandled array items $ref in ${propName}: ${ref}`);\r\n                  }\r\n\r\n                }\r\n              }\r\n            });\r\n            // Handle differences in Swagger/OpenApi 2, OpenApi 3 and Json Schema\r\n            Object.keys(schema.properties).forEach((propName) => {\r\n              const prop = schema.properties?.[propName];\r\n              if ((prop as any).readonly != null) {\r\n                (prop as OpenAPIV3.NonArraySchemaObject | OpenAPIV3.ArraySchemaObject).readOnly = (prop as any).readonly;\r\n              } else if ((prop as any)[\"x-readonly\"] != null) {\r\n                (prop as OpenAPIV3.NonArraySchemaObject | OpenAPIV3.ArraySchemaObject).readOnly = (prop as any)[\"x-readonly\"];\r\n              }\r\n              // TODO: Consider other cases, at least nullability.\r\n              // See logic in NJsonSchema: https://github.com/RicoSuter/NJsonSchema/blob/master/src/NJsonSchema/JsonSchema.Serialization.cs\r\n            });\r\n          }\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Sorts the properties in JSON schema according to some misc. logic rules\r\n   * (e.g. id first, objects and arrays lower and unknown last).\r\n   * TODO: We could potentially put this in another place: Server-side? UI framework?\r\n   */\r\n  public static sortSchemaProperties(schema: OpenAPIV3.SchemaObject): void {\r\n    if (schema.properties) {\r\n      const orderedArray = Object.keys(schema.properties).map((key) => {\r\n        const prop = schema.properties?.[key] as OpenAPIV3.SchemaObject;\r\n        const orderResult = {\r\n          key,\r\n          prop,\r\n          sort: 50,\r\n        };\r\n        switch (prop.type) {\r\n          case \"number\":\r\n          case \"integer\":\r\n          case \"boolean\":\r\n            break;\r\n          case \"string\":\r\n            if (key.endsWith(\"At\")) {\r\n              orderResult.sort = 20;\r\n            } else if (key === \"id\") {\r\n              orderResult.sort = 10;\r\n            }\r\n            break;\r\n          case \"array\":\r\n            orderResult.sort = 70;\r\n            break;\r\n          case \"object\":\r\n            {\r\n              switch (prop.format) {\r\n                case \"DateRange\":\r\n                case \"Avatar\":\r\n                  orderResult.sort = 50;\r\n                  break;\r\n                default:\r\n                  orderResult.sort = 60;\r\n                  break;\r\n              }\r\n            }\r\n            break;\r\n          default:\r\n            orderResult.sort = 80;\r\n            break;\r\n        }\r\n        return orderResult;\r\n      });\r\n      const ordered = {};\r\n      orderedArray.sort((a, b) => (a.sort.toString() + a.key).localeCompare(b.sort.toString() + b.key))\r\n        .forEach((x) => {\r\n          ordered[x.key] = x.prop;\r\n        });\r\n      schema.properties = ordered;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Assures that a schema document identified by URL is loaded from server to the cache.\r\n   * Currently, supports only OpenApi 3, but we may later support OpenApi 2 and/or plain JSON schema.\r\n   * @param openApiUrl URL to the open API document.\r\n   * @returns A promise that resolves when the document has been loaded and you can call other methods on it.\r\n   */\r\n  public assureSchemaDocument(openApiUrl: string): Promise<OpenAPIV3.Document | undefined> {\r\n    openApiUrl = this.getAbsoluteUrl(openApiUrl);\r\n    const cachedSchema = this.schemaCache.find((x) => x.url === openApiUrl);\r\n    if (cachedSchema) {\r\n      if (cachedSchema.loadingDonePromise != null) {\r\n        return cachedSchema.loadingDonePromise;\r\n      }\r\n      return Promise.resolve(cachedSchema.doc);\r\n    }\r\n    const loadingDonePromise = new Promise<OpenAPIV3.Document>((resolve, reject) => {\r\n      this.ajax.getJSON(openApiUrl).then((data: OpenAPIV2.Document | OpenAPIV3.Document) => {\r\n        if (!data) {\r\n          throw new Error(\"No data from the schema: \" + openApiUrl);\r\n        }\r\n        resolve(this.addSchemaDocument(openApiUrl, data));\r\n      }).catch((reason) => {\r\n        reject(reason);\r\n      });\r\n    });\r\n    this.schemaCache.push({\r\n      url: openApiUrl,\r\n      type: \"OpenAPIV3\",\r\n      doc: undefined,\r\n      loadingDonePromise,\r\n    });\r\n    return loadingDonePromise;\r\n  }\r\n\r\n  /**\r\n   * Finds a schema document from the cache.\r\n   * This method is syncronous base method for other schema operations\r\n   * Make sure that the schme document has been loaded before calling as this will not load the document,\r\n   * but will fail instead if the schema document is not there.\r\n   * @param openApiUrl URL to the open API document.\r\n   * @param throwIfNotFound If true, will throw an error if the document is not found in the cache.\r\n   */\r\n  public findSchemaDoc(openApiUrl: string, throwIfNotFound: boolean): JsonSchemaCacheItem | undefined {\r\n    openApiUrl = this.getAbsoluteUrl(openApiUrl).toLowerCase().trim();\r\n    if (!openApiUrl) {\r\n      throw new Error(\"Empty Open API URL.\");\r\n    }\r\n    const result = this.schemaCache.find((x) => x.url === openApiUrl);\r\n    if (!result && throwIfNotFound) {\r\n      throw new Error(\"Schema document not loaded: \" + openApiUrl);\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Finds a single schema (Data model) within a schema document\r\n   * Make sure that the schema document has been loaded before calling as this will not load the document,\r\n   * but will fail instead if the schema document is not there.\r\n   * @param openApiUrl URL to the open API document.\r\n   * @param name Name of the schema (data model)\r\n   */\r\n  public findSchema(openApiUrl: string, name: string): OpenAPIV3.SchemaObject | null {\r\n    openApiUrl = this.getAbsoluteUrl(openApiUrl);\r\n    const schema = this.findSchemaDoc(openApiUrl, true)?.doc?.components?.schemas?.[name];\r\n    if (!schema) {\r\n      return null;\r\n    }\r\n    if (JsonSchemaUtils.isReferenceObject(schema)) {\r\n      throw new Error(`Unresolved reference in ${openApiUrl} - ${name}`);\r\n    }\r\n\r\n    return schema;\r\n  }\r\n\r\n  /**\r\n   * Gets an absolute, environment-specific URL for a relative URL:\r\n   * Directs \"salaxy-secure/[...rest of url]\" to the API server specified by Ajax and\r\n   * \"/[...rest of url]\" to the root of window.location.href (requires browser context).\r\n   * @param url URL that is potentially relative either to current site or API server.\r\n   */\r\n   private getAbsoluteUrl (url: string): string {\r\n    if (url.startsWith(\"/\")) {\r\n      if (!window) {\r\n        throw new Error(`Relative url not supported outside browser scope: '${url}'.`);\r\n      }\r\n      const urlArr = window.location.href.split(\"/\");\r\n      url = `${urlArr[0]}//${urlArr[2]}${url}`;\r\n    } else {\r\n      url = url.replace(/^salaxy-secure\\//g, `${this.ajax.getServerAddress()}/`);\r\n    }\r\n    return url;\r\n  }\r\n}\r\n","/**\r\n * Helpers for handling arrays.\r\n */\r\nexport class Arrays {\r\n\r\n    /**\r\n     * Takes in an array or string or null and always returns an array.\r\n     * If the incoming value is a string, splits it by commas. This is especaially useful for HTML attributes.\r\n     * Note that null (or other falsy objects) are returned as an empty array.\r\n     *\r\n     * @param arrayCandidate - A string array or string that is split by comma.\r\n     */\r\n    public static assureArray(arrayCandidate: string | string[]): string[] {\r\n        if (!arrayCandidate) {\r\n            return [];\r\n        }\r\n        if (Array.isArray(arrayCandidate)) {\r\n            return arrayCandidate;\r\n        }\r\n        return arrayCandidate.split(\",\");\r\n    }\r\n\r\n    /**\r\n     * Calculates a sum of array items.\r\n     * Null items will be added as zero.\r\n     * @param array Array to sum\r\n     * @param selector Selector for a number to sum.\r\n     */\r\n    public static sum<T>(array: T[], selector: (item: T) => number): number {\r\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n      return array.reduce((prev, current, ix) => current ? (prev + (selector(current) || 0)) : 0, 0);\r\n    }\r\n\r\n    /**\r\n     * Sequence generator function gets an array between two numbers (inclusive).\r\n     * (commonly referred to as \"range\", e.g. Clojure, PHP etc)\r\n     * @param start Start number of the sequence\r\n     * @param stop End number of the sequence\r\n     * @param step Step between the numbers, default is 1.\r\n     * @example\r\n     * Arrays.getRange(2019, 2023);\r\n     * // [2019, 2020, 2021, 2022, 2023]\r\n     */\r\n    public static getRange(start: number, stop: number, step = 1): number[] {\r\n      const range = (start: number, stop: number, step: number) =>\r\n        Array.from({ length: (stop - start) / step + 1}, (_, i) => start + (i * step));\r\n      return range(start, stop, step);\r\n    }\r\n\r\n    /**\r\n     * Does a group-by of an array of objects with given key.\r\n     * @param source The source array.\r\n     * @param selector Selector for the key in the array.\r\n     * @returns An object that is the array grouped by the keys.\r\n     */\r\n    public static groupBy<T>(source: T[], selector: (x:T) => string | undefined | null): ({ [key: string]: T[]}) {\r\n      return source.reduce((previous, current) => {\r\n        const key = selector(current);\r\n        if (key !== undefined && key !== null) {\r\n          (previous[key] ??= []).push(current);\r\n        }\r\n        return previous;\r\n      }, {});\r\n    }\r\n\r\n    /**\r\n     * Returns distinct elements from an array based on a selector function.\r\n     * @param source The source array to filter\r\n     * @param selector Function to select the key to compare for uniqueness\r\n     * @returns Array with duplicate elements removed\r\n     */\r\n    public static distinct<T>(source: T[], selector: (x:T) => string): T[] {\r\n      return source.filter((x, ix, self) => self.findIndex(y => selector(x) === selector(y)) === ix);\r\n    }\r\n\r\n    /** Moves an item of given index one position up or down in the array */\r\n    public static moveItem<T>(array: T[], index: number, direction: \"up\" | \"down\"):void {\r\n      if (direction === \"up\" && index > 0) {\r\n        this.moveItemInArray(array, index, index - 1);\r\n      } else if (direction === \"down\" && index < (array.length - 1)) {\r\n        this.moveItemInArray(array, index, index + 1);\r\n      }\r\n    }\r\n\r\n    private static moveItemInArray<T>(array: T[], fromIndex: number, toIndex: number): void {\r\n      const element = array[fromIndex];\r\n      array.splice(fromIndex, 1);\r\n      array.splice(toIndex, 0, element);\r\n    }\r\n}\r\n","/**\n *  base64.ts\n *\n *  Licensed under the BSD 3-Clause License.\n *    http://opensource.org/licenses/BSD-3-Clause\n *\n *  References:\n *    http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.7.7';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _hasBuffer = typeof Buffer === 'function';\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n    let tab = {};\n    a.forEach((c, i) => tab[c] = i);\n    return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n    ? Uint8Array.from.bind(Uint8Array)\n    : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));\nconst _mkUriSafe = (src) => src\n    .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n    // console.log('polyfilled');\n    let u32, c0, c1, c2, asc = '';\n    const pad = bin.length % 3;\n    for (let i = 0; i < bin.length;) {\n        if ((c0 = bin.charCodeAt(i++)) > 255 ||\n            (c1 = bin.charCodeAt(i++)) > 255 ||\n            (c2 = bin.charCodeAt(i++)) > 255)\n            throw new TypeError('invalid character found');\n        u32 = (c0 << 16) | (c1 << 8) | c2;\n        asc += b64chs[u32 >> 18 & 63]\n            + b64chs[u32 >> 12 & 63]\n            + b64chs[u32 >> 6 & 63]\n            + b64chs[u32 & 63];\n    }\n    return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)\n    : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')\n        : btoaPolyfill;\nconst _fromUint8Array = _hasBuffer\n    ? (u8a) => Buffer.from(u8a).toString('base64')\n    : (u8a) => {\n        // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n        const maxargs = 0x1000;\n        let strs = [];\n        for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n            strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n        }\n        return _btoa(strs.join(''));\n    };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n    if (c.length < 2) {\n        var cc = c.charCodeAt(0);\n        return cc < 0x80 ? c\n            : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n                + _fromCC(0x80 | (cc & 0x3f)))\n                : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n                    + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n                    + _fromCC(0x80 | (cc & 0x3f)));\n    }\n    else {\n        var cc = 0x10000\n            + (c.charCodeAt(0) - 0xD800) * 0x400\n            + (c.charCodeAt(1) - 0xDC00);\n        return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n            + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n            + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n            + _fromCC(0x80 | (cc & 0x3f)));\n    }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _hasBuffer\n    ? (s) => Buffer.from(s, 'utf8').toString('base64')\n    : _TE\n        ? (s) => _fromUint8Array(_TE.encode(s))\n        : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n    ? _mkUriSafe(_encode(src))\n    : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n    switch (cccc.length) {\n        case 4:\n            var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n                | ((0x3f & cccc.charCodeAt(1)) << 12)\n                | ((0x3f & cccc.charCodeAt(2)) << 6)\n                | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n            return (_fromCC((offset >>> 10) + 0xD800)\n                + _fromCC((offset & 0x3FF) + 0xDC00));\n        case 3:\n            return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n                | ((0x3f & cccc.charCodeAt(1)) << 6)\n                | (0x3f & cccc.charCodeAt(2)));\n        default:\n            return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n                | (0x3f & cccc.charCodeAt(1)));\n    }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n    // console.log('polyfilled');\n    asc = asc.replace(/\\s+/g, '');\n    if (!b64re.test(asc))\n        throw new TypeError('malformed base64.');\n    asc += '=='.slice(2 - (asc.length & 3));\n    let u24, bin = '', r1, r2;\n    for (let i = 0; i < asc.length;) {\n        u24 = b64tab[asc.charAt(i++)] << 18\n            | b64tab[asc.charAt(i++)] << 12\n            | (r1 = b64tab[asc.charAt(i++)]) << 6\n            | (r2 = b64tab[asc.charAt(i++)]);\n        bin += r1 === 64 ? _fromCC(u24 >> 16 & 255)\n            : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255)\n                : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255);\n    }\n    return bin;\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc))\n    : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')\n        : atobPolyfill;\n//\nconst _toUint8Array = _hasBuffer\n    ? (a) => _U8Afrom(Buffer.from(a, 'base64'))\n    : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _hasBuffer\n    ? (a) => Buffer.from(a, 'base64').toString('utf8')\n    : _TD\n        ? (a) => _TD.decode(_toUint8Array(a))\n        : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string.  Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n  */\nconst isValid = (src) => {\n    if (typeof src !== 'string')\n        return false;\n    const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n    return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n    return {\n        value: v, enumerable: false, writable: true, configurable: true\n    };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n    const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n    _add('fromBase64', function () { return decode(this); });\n    _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n    _add('toBase64URI', function () { return encode(this, true); });\n    _add('toBase64URL', function () { return encode(this, true); });\n    _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n    const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n    _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n    _add('toBase64URI', function () { return fromUint8Array(this, true); });\n    _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n    extendString();\n    extendUint8Array();\n};\nconst gBase64 = {\n    version: version,\n    VERSION: VERSION,\n    atob: _atob,\n    atobPolyfill: atobPolyfill,\n    btoa: _btoa,\n    btoaPolyfill: btoaPolyfill,\n    fromBase64: decode,\n    toBase64: encode,\n    encode: encode,\n    encodeURI: encodeURI,\n    encodeURL: encodeURI,\n    utob: utob,\n    btou: btou,\n    decode: decode,\n    isValid: isValid,\n    fromUint8Array: fromUint8Array,\n    toUint8Array: toUint8Array,\n    extendString: extendString,\n    extendUint8Array: extendUint8Array,\n    extendBuiltins: extendBuiltins\n};\n// makecjs:CUT //\nexport { version };\nexport { VERSION };\nexport { _atob as atob };\nexport { atobPolyfill };\nexport { _btoa as btoa };\nexport { btoaPolyfill };\nexport { decode as fromBase64 };\nexport { encode as toBase64 };\nexport { utob };\nexport { encode };\nexport { encodeURI };\nexport { encodeURI as encodeURL };\nexport { btou };\nexport { decode };\nexport { isValid };\nexport { fromUint8Array };\nexport { toUint8Array };\nexport { extendString };\nexport { extendUint8Array };\nexport { extendBuiltins };\n// and finally,\nexport { gBase64 as Base64 };\n","import { Base64 as Base64lib } from \"js-base64\";\r\n\r\n/**\r\n * Wrapper around js-base64 library provides basic methods for Base64 encoding / decoding.\r\n * Use this wrapper instead of methods directly to assure compatibility with both browser and Node.\r\n * TODO: Consider switching to native methods: separate for broser and Node.\r\n */\r\nexport class Base64 {\r\n\r\n  /**\r\n   * Encodes a string with Base64 encoding.\r\n   * @param text The text that should be encoded.\r\n   * @returns The base64 encoded string.\r\n   */\r\n  public static encode(text: string): string {\r\n    return Base64lib.encode(text);\r\n  }\r\n\r\n  /**\r\n   * Encodes a string with Base64 URL encoding.\r\n   * @param text The text that should be encoded.\r\n   * @returns The base64 URL encoded string.\r\n   */\r\n  public static encodeUrl(text: string): string {\r\n    return Base64lib.encodeURL(text);\r\n  }\r\n\r\n  /**\r\n   * Decodes a Base64 encoded string. Wrapper around js-base64 library.\r\n   * @param text The Base64 encoded string to be decoded\r\n   * @returns The decoded string.\r\n   */\r\n  public static decode(text: string): string {\r\n    return Base64lib.decode(text);\r\n  }\r\n\r\n  /**\r\n   * Creates a Base64-encoded ASCII string from a binary string (i.e., a string in which each character in the string is treated as a byte of binary data).\r\n   * Corresponds to browser btoa() method.\r\n   * @param text The binary array that should be encoded.\r\n   * @returns The base64 encoded string.\r\n   */\r\n  public static btoa(text: string): string {\r\n    return Base64lib.btoa(text);\r\n  }\r\n\r\n  /**\r\n   * Decodes a Base64 encoded string as binary bytes. The same as browser atob.\r\n   * @param text The Base64 encoded string to be decoded\r\n   * @returns The decoded bytes array.\r\n   */\r\n  public static atob(text: string): string {\r\n    return Base64lib.atob(text);\r\n  }\r\n\r\n  /**\r\n   * Creates a Base64-encoded ASCII string from a Uint8Array (e.g. `new Uint8Array()` of `ArrayBuffer`).\r\n   * @param array The ASCII int array that should be encoded.\r\n   * @returns The base64 encoded string.\r\n   */\r\n  public static fromUint8Array(array: Uint8Array): string {\r\n    return Base64lib.fromUint8Array(array);\r\n  }\r\n\r\n  /**\r\n   * Decodes a Base64 encoded string as an ASCII array.\r\n   * @param text The Base64 encoded string to be decoded\r\n   * @returns The result as an ASCII array.\r\n   */\r\n  public static toUint8Array(text: string): Uint8Array {\r\n    return Base64lib.toUint8Array(text);\r\n  }\r\n\r\n}","/**\r\n * Utility for accessing brand specific style definitions.\r\n */\r\nexport class Brand {\r\n\r\n    /**\r\n     * Returns the brand color defined as a global variable.\r\n     *\r\n     * @param color - Named brand color to get.\r\n     * @param format - Color format: hex like '#289548', rgb like 'rgb(40, 149, 72)' or rgba like 'rgba(40, 149, 72, 1.0'. Default value is hex.\r\n     */\r\n    public static getBrandColor(color: \"primary\" | \"success\" | \"info\" | \"warning\" | \"danger\", format: \"hex\" | \"rgb\" | \"rgba\" = \"hex\"): string | undefined {\r\n        let value = Brand.getStylePropertyValue(\"--salaxy-brand-\" + color);\r\n        if (!value) {\r\n            switch (color) {\r\n                case \"primary\":\r\n                    value = \"#009fd8\";\r\n                    break;\r\n                case \"success\":\r\n                    value = \"#289548\";\r\n                    break;\r\n                case \"info\":\r\n                    value = \"#91d214\";\r\n                    break;\r\n                case \"warning\":\r\n                    value = \"#ff911e\";\r\n                    break;\r\n                case \"danger\":\r\n                    value = \"#d55552\";\r\n                    break;\r\n            }\r\n        }\r\n        switch (format) {\r\n            case \"rgb\":\r\n                return Brand.hex2rgb(value);\r\n            case \"rgba\":\r\n                return Brand.hex2rgba(value);\r\n            case \"hex\":\r\n            default:\r\n                return value;\r\n        }\r\n\r\n    }\r\n\r\n    /**\r\n     * Returns the css global style variable.\r\n     * E.g. --salaxy-brand-primary\r\n     * @param variableName - Variable name.\r\n     */\r\n    public static getStylePropertyValue(variableName: string): string | undefined {\r\n        const style = getComputedStyle(document.body);\r\n        if (!style) {\r\n            return undefined;\r\n        }\r\n        let value = style.getPropertyValue(variableName);\r\n        if (!value) {\r\n            return undefined;\r\n        }\r\n        value = value.trim();\r\n        return value;\r\n    }\r\n\r\n   /**\r\n    * Returns the hex color value as rgb css function.\r\n    * For example:  value '#289548' as 'rgba(40, 149, 72)'\r\n    *\r\n    * @param hexValue - Hex value.\r\n    */\r\n    public static hex2rgb(hexValue: string): string | undefined {\r\n        const values = this.hex2rgbaValues(hexValue);\r\n        if (!values) {\r\n            return undefined;\r\n        }\r\n        return `rgb(${values[0]}, ${values[1]}, ${values[2]})`;\r\n    }\r\n\r\n\r\n   /**\r\n    * Returns the hex color value as rgba css function.\r\n    * For example:  value '#289548ff' as 'rgba(40, 149, 72, 1)'\r\n    *\r\n    * @param hexValue - Hex value.\r\n    */\r\n    public static hex2rgba(hexValue: string): string | undefined {\r\n        const values = this.hex2rgbaValues(hexValue);\r\n        if (!values) {\r\n            return undefined;\r\n        }\r\n        return `rgba(${values[0]}, ${values[1]}, ${values[2]}, ${values[3].toFixed(2)})`;\r\n    }\r\n\r\n\r\n    /**\r\n     * Returns the rgb value as hex string.\r\n     * For example: 40, 149, 72 as #289548.\r\n     *\r\n     * @param r - red parameter.\r\n     * @param g - green parameter.\r\n     * @param b - blue parameter.\r\n     */\r\n    public static rgb2hex(r: number, g: number, b: number): string {\r\n        /* eslint-disable-next-line */\r\n        return \"#\" + ((b | g << 8 | r << 16) | 1 << 24).toString(16).substring(1)\r\n    }\r\n\r\n    /**\r\n     * Returns the rgba value as hex string.\r\n     * For example: 40, 149, 72, 1 as #289548ff.\r\n     *\r\n     * @param r - red parameter.\r\n     * @param g - green parameter.\r\n     * @param b - blue parameter.\r\n     * @param a - alpha parameter.\r\n     */\r\n    public static rgba2hex(r: number, g: number, b: number, a: number): string {\r\n        /* eslint-disable-next-line */\r\n        const hexA = (Math.round(255 * a) | 1 << 8).toString(16).substring(1);\r\n        return Brand.rgb2hex(r, g, b) + hexA;\r\n    }\r\n\r\n    private static hex2rgbaValues(hexValue: string): number[] | undefined {\r\n        if (!hexValue) {\r\n            return undefined;\r\n        }\r\n\r\n        hexValue = hexValue.trim().toLowerCase();\r\n\r\n        if (hexValue.length === 0) {\r\n            return undefined;\r\n        }\r\n\r\n        if (hexValue.charAt(0) === \"#\") {\r\n            // remove #\r\n            hexValue = hexValue.substring(1);\r\n        }\r\n\r\n        if (hexValue.length === 3) {\r\n            // add alpha\r\n            hexValue += \"f\";\r\n        }\r\n        if (hexValue.length === 4) {\r\n            // convert to 8 digits\r\n            hexValue =\r\n            hexValue.charAt(0) +\r\n            hexValue.charAt(0) +\r\n            hexValue.charAt(1) +\r\n            hexValue.charAt(1) +\r\n            hexValue.charAt(2) +\r\n            hexValue.charAt(2) +\r\n            hexValue.charAt(3) +\r\n            hexValue.charAt(3);\r\n        }\r\n        if (hexValue.length === 6) {\r\n            // add alpha\r\n            hexValue += \"ff\";\r\n        }\r\n        if (hexValue.length !== 8) {\r\n            // invalid length\r\n            return undefined;\r\n        }\r\n        const r = parseInt(hexValue.substring(0, 2), 16);\r\n        const g = parseInt(hexValue.substring(2, 4), 16);\r\n        const b = parseInt(hexValue.substring(4, 6), 16);\r\n\r\n        const a =  ((0.0 + parseInt(hexValue.substring(6, 8), 16)) / 255.0);\r\n\r\n        return [r, g, b, a];\r\n    }\r\n}\r\n","/**\r\n * Accessors for browser-specific functionality without needing a reference DOM in TypeScript.\r\n * => These can be used in libraries that should be able to run in Node to check we are currently in a browser environment.\r\n */\r\nexport class BrowserUtil {\r\n\r\n  /**\r\n   * Checks if the code is running in a browser environment.\r\n   * @returns True if the code is running in a browser environment, false otherwise.\r\n   */\r\n  static isBrowser(): boolean {\r\n    return typeof globalThis !== \"undefined\" && \"window\" in globalThis && \"localStorage\" in globalThis;\r\n  }\r\n\r\n  /**\r\n   * Gets the window object as any if this is a browser environment.\r\n   * @returns The window object as any if this is a browser environment, undefined otherwise.\r\n   */\r\n  static getWindow(): any | undefined {\r\n    return this.isBrowser() ? (globalThis as any).window : undefined;\r\n  }\r\n\r\n  /**\r\n   * Gets the localStorage object as any if this is a browser environment.\r\n   * NOTE: Use this for string values only, for complex objects, consider using MemoryStorage / SimpleStorage instead.\r\n   * @returns The localStorage object as any if this is a browser environment, undefined otherwise.\r\n   */\r\n  static getLocalStorage(): any | undefined {\r\n    return this.isBrowser() ? (globalThis as any).localStorage : undefined;\r\n  }\r\n\r\n  /**\r\n   * Gets the sessionStorage object as any if this is a browser environment.\r\n   * NOTE: Use this for string values only, for complex objects, consider using MemoryStorage / SimpleStorage instead.\r\n   * @returns The sessionStorage object as any if this is a browser environment, undefined otherwise.\r\n   */\r\n  static getSessionStorage(): any | undefined {\r\n    return this.isBrowser() ? (globalThis as any).sessionStorage : undefined;\r\n  }\r\n\r\n}\r\n","/**\r\n * Very simple cookie implementation - at the moment for token storage only.\r\n * Expand if needed for other use cases (see todo section in the docs).\r\n *\r\n * @todo Expand this class as necessary e.g. something like this: https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie/Simple_document.cookie_framework\r\n * or this https://github.com/Booyanach/cookie-wrapper ... which unfortunately cannot be used at the moment, because they are GPL license.\r\n */\r\nexport class Cookies {\r\n\r\n    /**\r\n     * Gets a cookie value by a key\r\n     * @param key - CName / key to look for.\r\n     */\r\n    public get(key: string): string | undefined {\r\n        const cookie = document.cookie;\r\n        const cookieParts = cookie.split(\";\");\r\n        for (const item of cookieParts) {\r\n            const cookiePart = decodeURIComponent(item).trim();\r\n            if (cookiePart.indexOf(key + \"=\") === 0) {\r\n                return cookiePart.substring(key.length + 1);\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n\r\n    /**\r\n     * Sets a cookie value for the specified CName\r\n     * @param cname - CName for the cookie value. Name is uri encoded as a fallback, but generally, you should make sure this is a valid cname.\r\n     * @param value - Value to set for the cookie. Value is uri encoded.\r\n     * @param expirationDays - Days until the cookie expires.\r\n     * Set this to null or 0 to not set the expiration date at all.\r\n     * This defaults the behavior where cookie is deleted when browser is closed.\r\n     */\r\n    public setCookie(cname: string, value: string, expirationDays?: number): void {\r\n        cname = encodeURIComponent(cname);\r\n        value = encodeURIComponent(value);\r\n\r\n        if (expirationDays && expirationDays > 0) {\r\n            const d = new Date();\r\n            d.setTime(d.getTime() + (expirationDays * 24 * 60 * 60 * 1000));\r\n            const expires = \"expires=\" + d.toUTCString();\r\n            document.cookie = cname + \"=\" + value + \";\" + expires + \";path=/\";\r\n        } else {\r\n            document.cookie = cname + \"=\" + value + \";path=/\";\r\n        }\r\n    }\r\n}\r\n","\r\nimport { Translations } from \"../logic/Translations\";\r\nimport { DatelyObject } from \"./DatelyObject\";\r\nimport { Dates } from \"./Dates\";\r\n\r\n\r\nimport dayjs from \"dayjs\";\r\nimport CustomParseFormat from \"dayjs/plugin/customParseFormat\";\r\nimport AdvancedFormat from \"dayjs/plugin/advancedFormat\";\r\nimport Duration from \"dayjs/plugin/duration\";\r\nimport IsoWeek from \"dayjs/plugin/isoWeek\";\r\nimport IsSameOrBefore from \"dayjs/plugin/isSameOrBefore\";\r\nimport IsSameOrAfter from \"dayjs/plugin/isSameOrAfter\";\r\nimport UTC from \"dayjs/plugin/utc\";\r\nimport QuarterOfYear from \"dayjs/plugin/quarterOfYear\";\r\n\r\ndayjs.extend(CustomParseFormat);\r\ndayjs.extend(AdvancedFormat);\r\ndayjs.extend(Duration);\r\ndayjs.extend(IsoWeek);\r\ndayjs.extend(IsSameOrBefore);\r\ndayjs.extend(IsSameOrAfter);\r\ndayjs.extend(UTC);\r\ndayjs.extend(QuarterOfYear);\r\n\r\n\r\n/**\r\n * Date/Time parsing, formatting and other operations within the Salaxy framework.\r\n * We use ISO 8601 as our Date/Time format even inside JavaScript objects.\r\n * This is because of the following reasons:\r\n *\r\n * 1. Generally, we do not want to use JavaScript Date because it presents so many problems.\r\n * 2. We store dates in JSON as ISO 8601 date strings - this is universally the best practice\r\n * 3. ISO 8601 provides a way to present a date without time and most importantly timezone information\r\n * 4. ISO 8601 date also works best for most UI components (because of similar reasons as above).\r\n *\r\n * IMPORTANT: Use Date/Time only where TIME and/or timezone is relevant.\r\n * Otherwise use Date (Dates library) that does not have time or timezone.\r\n *\r\n * Implementation uses Day.js\r\n */\r\nexport class DateTimes {\r\n\r\n  /**\r\n   * Adds (or substracts) hours, minutes or seconds to a dately object.\r\n   * @param datelyObject Base timestamp for the addition.\r\n   * @param amount Number of units to add\r\n   * @param unit Unit for the addition: hour,minute,second\r\n   * @returns DatelyObject\r\n   */\r\n  public static add(datelyObject: DatelyObject | undefined, amount: number, unit: \"hour\" | \"minute\" | \"second\" | undefined ): DatelyObject | undefined {\r\n    const newDayJs = Dates.getDayJs(datelyObject);\r\n    if (!newDayJs || !amount || !unit) {\r\n      return undefined;\r\n\r\n    }\r\n    switch (unit) {\r\n      case \"hour\":\r\n        return newDayJs.add(amount, \"hour\");\r\n      case \"minute\":\r\n        return newDayJs.add(amount, \"minute\");\r\n      case \"second\":\r\n        return newDayJs.add(amount, \"second\");\r\n      default:\r\n        throw new Error(`Unit \"${unit}\" is not supported.`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets date in HH:mm formatted string\r\n   * @param date Object that should be formatted\r\n   * @returns HH:mm formatted string\r\n   */\r\n    public static asTime(date: Date): string | undefined {\r\n      const dayJs = Dates.getDayJs(date);\r\n      return dayJs ? dayJs.format(\"HH:mm\") : undefined;\r\n    }\r\n\r\n    /**\r\n     * Gets hours and minutes from date and convert them to minutes integer\r\n     * @param date Date used to get hours and minutes\r\n     * @returns Minutes as integer\r\n     */\r\n      public static asMinutes(date: Date): number | undefined {\r\n        const dayJs = Dates.getDayJs(date);\r\n        return dayJs ? dayJs.hour() * 60 + dayJs.minute() : undefined;\r\n      }\r\n\r\n      /**\r\n       * Convert time to ISO datetime string.\r\n       * @param time Timestamp, HH:mm\r\n       * @returns Iso datetime\r\n       */\r\n      public static fromTime(time: string): Date {\r\n        if (!time) {\r\n          return new Date();\r\n        }\r\n        return new Date(`${Dates.getToday()}T${time}:00`);\r\n      }\r\n\r\n      /**\r\n       * Converts minutes to JSDate object. Adds minutes to start of current day.\r\n       * @param minutes Used minutes to create JSDate\r\n       * @returns JSDate\r\n       */\r\n      public static fromMinutes(minutes: number): Date | undefined {\r\n        return Dates.asJSDate(Dates.getDayJs(\"today\").minute(minutes));\r\n      }\r\n\r\n\r\n\r\n\r\n\r\n\r\n  /**\r\n   * Formats a datetime ISO string (or other dately object)\r\n   * as time with texts \"Today\", \"Yesterday\", \"D.M. HH:mm\" for this year\r\n   * and \"D.M.YYYY\" for other years (if necessary, add option for adding time to previous years).\r\n   *\r\n   * @param time Dately object to format\r\n   */\r\n  public static format(time: DatelyObject): string {\r\n    const djs = Dates.getDayJs(time);\r\n    if (!djs) {\r\n      return \"-\";\r\n    }\r\n    if (Dates.getDayJs(\"today\").isSame(djs, \"date\")) {\r\n      return Translations.getWithDefault(\"SALAXY.UI_Terms.timeToday\", \"Today\") + \" \" + djs.format(\"HH:mm\");\r\n    }\r\n    if (Dates.getDayJs(\"yesterday\").isSame(djs, \"date\")) {\r\n      return Translations.getWithDefault(\"SALAXY.UI_Terms.timeYesterday\", \"Yesterday\") + \" \" + djs.format(\"HH:mm\");\r\n    }\r\n    if (Dates.getDayJs(\"today\").isSame(djs, \"y\")) {\r\n      return djs.format(\"D.M. HH:mm\");\r\n    }\r\n    return djs.format(\"D.M.YYYY\");\r\n  }\r\n\r\n  /**\r\n   * Formats a date/time range to an end-user friendly duration text. Note that durations are not context bound.\r\n   * So translation of longer durations depend on context (years, months)\r\n   * @param start Start of the range as ISO string.\r\n   * @param end End of the range as ISO string.\r\n   * @param nullValue Value if start or end is missing or cannot be parsed.\r\n   */\r\n  public static formatRangeToDuration(start: string, end: string, nullValue = \"-\"): string {\r\n    if (!start || !end) {\r\n      return nullValue;\r\n    }\r\n    if (end < start) {\r\n      return this.formatDurationFromDayJs(Dates.getDuration(end, start), nullValue) + \" ennen\";\r\n    }\r\n    return this.formatDurationFromDayJs(Dates.getDuration(start, end), nullValue);\r\n  }\r\n\r\n  /**\r\n   * Formats a date/time range to an end-user friendly duration text.\r\n   * @param duration Duration as ISO duration string (e.g. P3Y6M4DT12H30M5S)\r\n   * @param nullValue Value if duration is missing or cannot be parsed.\r\n   */\r\n  public static formatDuration(duration: string, nullValue = \"-\"): string {\r\n    if (!duration) {\r\n      return nullValue;\r\n    }\r\n    let postfix = \"\";\r\n    if (duration.startsWith(\"-\")) {\r\n      postfix = \" ennen\";\r\n      duration = duration.substr(1);\r\n    }\r\n    return this.formatDurationFromDayJs(dayjs.duration(duration), nullValue) + postfix;\r\n  }\r\n\r\n  private static formatDurationFromDayJs(duration: any, nullValue: string): string {\r\n    if(!duration){\r\n      return nullValue;\r\n    }\r\n    if (!dayjs.isDuration(duration)) {\r\n      return nullValue;\r\n    }\r\n    let result = \"\";\r\n    if (duration.years() !== 0)\r\n    {\r\n      result += duration.years() + \" \" +Translations.getWithDefault(\"SALAXY.UI_Terms.years\", \"vuotta\")+ \" \";\r\n    }\r\n    if (duration.months() !== 0)\r\n    {\r\n      result += duration.months() + \" \" +Translations.getWithDefault(\"SALAXY.UI_Terms.months\", \"kk\")+ \" \";\r\n    }\r\n    if (duration.days() !== 0)\r\n    {\r\n      result += duration.days() + \" \" +Translations.getWithDefault(\"SALAXY.UI_Terms.days\", \"pv\")+ \" \";\r\n    }\r\n    if (duration.hours() !== 0)\r\n    {\r\n      result += duration.hours() + \" \" +Translations.getWithDefault(\"SALAXY.UI_Terms.hours\", \"h\")+ \" \";\r\n    }\r\n    if (duration.minutes() !== 0)\r\n    {\r\n      result += duration.minutes() + \" \" +Translations.getWithDefault(\"SALAXY.UI_Terms.minutes\", \"min\")+ \" \";\r\n    }\r\n    return result.trim();\r\n  }\r\n\r\n  /**\r\n   * Gets the hour as 0-based number: 0-23.\r\n   *\r\n   * @param datelyObject - Object that represents datetime: A string, JS Date object, DayJs etc.\r\n   *\r\n   * @returns hour as 0-23 or undefined if the object is not a dately object.\r\n   */\r\n  public static getHour(datelyObject: DatelyObject | undefined): number | undefined {\r\n    const dayJs = Dates.getDayJs(datelyObject);\r\n    return dayJs ? dayJs.hour() : undefined;\r\n  }\r\n\r\n  /**\r\n   * Gets the minute as 0-based number: 0-59.\r\n   *\r\n   * @param datelyObject - Object that represents datetime: A string, JS Date object, DayJs etc.\r\n   *\r\n   * @returns hour as 0-59 or undefined if the object is not a dately object.\r\n   */\r\n  public static getMinute(datelyObject: DatelyObject): number | undefined {\r\n    const dayJs = Dates.getDayJs(datelyObject);\r\n    return dayJs ? dayJs.minute() : undefined;\r\n  }\r\n\r\n  /**\r\n   * Gets the second as 0-based number: 0-59.\r\n   *\r\n   * @param datelyObject - Object that represents datetime: A string, JS Date object, DayJs etc.\r\n   *\r\n   * @returns second as 0-59 or undefined if the object is not a dately object.\r\n   */\r\n  public static getSecond(datelyObject: DatelyObject): number | undefined {\r\n    const dayJs = Dates.getDayJs(datelyObject);\r\n    return dayJs ? dayJs.second() : undefined;\r\n  }\r\n\r\n  /**\r\n   * WARNING: Don't use this method. This may be refactored away.\r\n   * Wraps DayJs UTC offset (minutes).\r\n   * See: https://day.js.org/docs/en/manipulate/utc-offset\r\n   * @param timestamp any DayJs compatible DatelyObject\r\n   * @returns number UTC offset in minutes\r\n   */\r\n    public static getUTCOffset(timestamp: DatelyObject | undefined) : number | undefined {\r\n      const d = Dates.getDayJs(timestamp);\r\n      return d ? d.utcOffset() : undefined;\r\n    }\r\n\r\n\r\n}\r\n","/**\r\n * Helpers for handling Iban bank account numbers\r\n */\r\nexport class Iban {\r\n\r\n  /**\r\n   * Format an Iban number in 4 digits segments and trim out other than alphanum characters.\r\n   * @param value - String value to format\r\n   * @returns string value\r\n   */\r\n  public static formatIban(value: string): string {\r\n    if (!value) {\r\n      return value;\r\n    }\r\n    // Remove spaces.\r\n    const trimmed = value.toUpperCase().replace(/ /g, \"\");\r\n    // Format into four characters segments\r\n    const numbers: any[] = [];\r\n    for (let i = 0; i < trimmed.length; i += 4) {\r\n      numbers.push(trimmed.substr(i, 4));\r\n    }\r\n    return numbers.join(\" \");\r\n  }\r\n\r\n  /**\r\n   * Returns true if the value is a valid IBAN number.\r\n   * Checks for the country specific length as well as checksum.\r\n   * @param value IBAN number number candidate.\r\n   */\r\n  public static isIban(value: string): boolean {\r\n    if (!value) {\r\n      return false;\r\n    }\r\n    // Source: https://stackoverflow.com/questions/21928083/iban-validation-check\r\n    const CODE_LENGTHS = {\r\n      AD: 24, AE: 23, AT: 20, AZ: 28, BA: 20, BE: 16, BG: 22, BH: 22, BR: 29,\r\n      CH: 21, CR: 21, CY: 28, CZ: 24, DE: 22, DK: 18, DO: 28, EE: 20, ES: 24,\r\n      FI: 18, FO: 18, FR: 27, GB: 22, GI: 23, GL: 18, GR: 27, GT: 28, HR: 21,\r\n      HU: 28, IE: 22, IL: 23, IS: 26, IT: 27, JO: 30, KW: 30, KZ: 20, LB: 28,\r\n      LI: 21, LT: 20, LU: 20, LV: 21, MC: 27, MD: 24, ME: 22, MK: 19, MR: 27,\r\n      MT: 31, MU: 30, NL: 18, NO: 15, PK: 24, PL: 28, PS: 29, PT: 25, QA: 29,\r\n      RO: 24, RS: 22, SA: 24, SE: 24, SI: 19, SK: 24, SM: 27, TN: 24, TR: 26,\r\n    };\r\n    const iban = value.toUpperCase().replace(/ /g, \"\"); // replace only spaces, no other white space, they are illegal\r\n    /* eslint-disable-next-line @typescript-eslint/prefer-regexp-exec */\r\n    const code = iban.match(/^([A-Z]{2})(\\d{2})([A-Z\\d]+)$/); // match and capture (1) the country code, (2) the check digits, and (3) the rest\r\n    // check syntax and length\r\n    if (!code || iban.length !== CODE_LENGTHS[code[1]]) {\r\n      return false;\r\n    }\r\n    // rearrange country code and check digits, and convert chars to ints\r\n    const digits = (code[3] + code[1] + code[2]).replace(/[A-Z]/g, (letter) => {\r\n      return (letter.charCodeAt(0) - 55) as any;\r\n    });\r\n    // final check\r\n    return Iban.mod97(digits) === 1;\r\n  }\r\n\r\n  /** Gets a dummy iban using random numbers. */\r\n  public static getDummyIban(): string {\r\n    const bank = (100000 + Math.round((Math.random() * 99999)));\r\n    const account = (100000 + Math.round((Math.random() * 99999)));\r\n    const bankAccount = `${bank}00${account}`;\r\n    const ibanValue = bankAccount + \"15\" + \"18\" + \"00\";\r\n    const remainder = 98 - this.mod97(ibanValue);\r\n    const ibanChecksum = remainder < 10 ? \"0\" + remainder.toString() : remainder.toString();\r\n    return Iban.formatIban(\"FI\" + ibanChecksum + bankAccount);\r\n  }\r\n\r\n  /**\r\n   * Checks if the given value is an international IBAN.\r\n   * @param value - The value to check.\r\n   * @returns `true` if the value is an international IBAN, `false` otherwise.\r\n   */\r\n  public static isInternationalIban(value: string): boolean {\r\n    if (!value) {\r\n      return false;\r\n    }\r\n    return !value.toUpperCase().startsWith(\"FI\");\r\n  }\r\n\r\n  private static mod97(value: string) {\r\n    let checksum: any = value.slice(0, 2);\r\n    for (let offset = 2; offset < value.length; offset += 7) {\r\n      const fragment = String(checksum) + value.substring(offset, offset + 7);\r\n      checksum = parseInt(fragment, 10) % 97;\r\n    }\r\n    return checksum;\r\n  }\r\n}\r\n","import { BrowserUtil } from \"./BrowserUtil.js\";\r\n\r\n/**\r\n * Memory persistent store of JS objects for different contexts:\r\n *\r\n * - local: Local storage, persistent across sessions, current available in browser environment only (localStorage).\r\n * - session: Session storage, for one browser tab only, current available in browser environment only (sessionStorage). Later implementations may support session storage also on the server side as in user session.\r\n * - global: Singleton cache for the whole application. Uses globalThis in both browser and server environments. Note that server-side this is shared by all users of the application.\r\n *\r\n * The objects are stored as JSON strings in the session and local storage (must be JSON serializable).\r\n * The objects are stored directly as-is in \"global\" (can be any type).\r\n *\r\n * @param T The type of the value to store. Must be JSON serializable for local and session storage, can be any type for global storage.\r\n */\r\nexport class MemoryStorage<T extends Record<string, any> = Record<string, any>> {\r\n\r\n  private readonly fullKey: string;\r\n\r\n  /**\r\n   * Creates a new MemoryStorage.\r\n   * @param type The type of store to use. See description for possible values.\r\n   * @param name Unique name of the store.\r\n   */\r\n  constructor(private readonly type: \"local\" | \"session\" | \"global\", readonly name: string) {\r\n    this.fullKey = \"salaxy.\" + name;\r\n  }\r\n\r\n  public get<T>(): T | undefined;\r\n  public get<T>(defaultValue: T): T;\r\n  /**\r\n   * Gets a value from the store.\r\n   * @param defaultValue The default value to return if the value is not found.\r\n   * @returns The value from the store or the default value if the value is not found.\r\n   */\r\n  public get<T>(defaultValue?: T): T | undefined {\r\n    if (this.type === \"local\" || this.type === \"session\") {\r\n      const storage = this.getLocalOrSessionStorage();\r\n      const value = storage.getItem(this.fullKey);\r\n      if (value) {\r\n        return JSON.parse(value) as T;\r\n      }\r\n      if (!defaultValue) {\r\n        return undefined;\r\n      }\r\n      storage.setItem(this.fullKey, JSON.stringify(defaultValue));\r\n      return defaultValue;\r\n    }\r\n    if (this.type === \"global\") {\r\n      const value = (globalThis as any)[this.fullKey];\r\n      if (!value && defaultValue) {\r\n        (globalThis as any)[this.fullKey] = defaultValue;\r\n        return defaultValue;\r\n      }\r\n      return value as T;\r\n    }\r\n    throw new Error(\"Invalid store type: \" + this.type + \" for key: \" + this.fullKey);\r\n  }\r\n\r\n  /**\r\n   * Gets a value from the store with default value as an asynchronous function that returns the default value.\r\n   * Designed for situation where the value is fetched from a remote source and we want to cache the result.\r\n   * @param defaultValue A function that returns the default value.\r\n   * @returns The value from the store or the default value if the value is not found.\r\n   */\r\n  public async getAsync(defaultValue: () => Promise<T>): Promise<T> {\r\n    const result = this.get<T>();\r\n    if (result) {\r\n      return result;\r\n    }\r\n    const value = await defaultValue();\r\n    this.set(value);\r\n    return value;\r\n  }\r\n\r\n  /**\r\n   * Sets a value in the store.\r\n   * @param value The value to set.\r\n   */\r\n  public set(value: T): void {\r\n    if (this.type === \"local\" || this.type === \"session\") {\r\n      const storage = this.getLocalOrSessionStorage();\r\n      storage.setItem(this.fullKey, JSON.stringify(value));\r\n      return;\r\n    }\r\n    if (this.type === \"global\") {\r\n      (globalThis as any)[this.fullKey] = value;\r\n      return;\r\n    }\r\n    throw new Error(\"Invalid store type: \" + this.type + \" for key: \" + this.fullKey);\r\n  }\r\n\r\n  /**\r\n   * Clears the value of the store (not the entire store, just value identified by the name).\r\n   */\r\n  public clear(): void {\r\n    if (this.type === \"local\" || this.type === \"session\") {\r\n      const storage = this.getLocalOrSessionStorage();\r\n      storage.removeItem(this.fullKey);\r\n      return;\r\n    }\r\n    if (this.type === \"global\") {\r\n      (globalThis as any)[this.fullKey] = undefined;\r\n      return;\r\n    }\r\n    throw new Error(\"Invalid store type: \" + this.type + \" for key: \" + this.fullKey);\r\n  }\r\n\r\n  /**\r\n   * Gets the local or session storage.\r\n   * @returns The local or session storage.\r\n   */\r\n  private getLocalOrSessionStorage(): {\r\n    getItem(key: string): string | null;\r\n    setItem(key: string, value: string): void;\r\n    removeItem(key: string): void;\r\n  } {\r\n    const storage = this.type === \"local\" ? BrowserUtil.getLocalStorage() : BrowserUtil.getSessionStorage();\r\n    if (!storage) {\r\n      throw new Error(\"Storage not available outside of browser environment: \" + this.type);\r\n    }\r\n    return storage;\r\n  }\r\n}","import { Translations } from \"../logic/Translations\";\r\nimport { ApiListItem } from \"../model\";\r\nimport { progressNotification } from \"../ui\";\r\nimport { Ajax } from \"../api/infra/\";\r\nimport { Objects } from \"./Objects\";\r\nimport { ODataQueryOptions } from \"./ODataQueryOptions\";\r\nimport { ODataResult } from \"./ODataResult\";\r\n\r\n/** Provides helpers for handling OData queries */\r\nexport class OData {\r\n\r\n  /**\r\n   * Makes an OData query to the the given service URL.\r\n   * @param baseUrl The service URL that is used, e.g. \"/v03/api/taxcards/current\".\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   * @param ajax The Ajax implementation that is used for HTTP get.\r\n   */\r\n  public static getOData<T>(baseUrl: string, query: ODataQueryOptions | string | undefined, ajax: Ajax): Promise<ODataResult<T>> {\r\n    let fullPath;\r\n    if (typeof query === \"string\") {\r\n      query = query.trim();\r\n      if (query.length > 0 && query.substr(0, 1) === \"?\") {\r\n        query = query.substr(1);\r\n      }\r\n      fullPath = (query.length === 0) ? baseUrl : (baseUrl + \"?\" + query);\r\n    } else {\r\n      query = query || {};\r\n      fullPath = OData.getUrl(baseUrl, query);\r\n    }\r\n    return ajax.getJSON(fullPath).then((data) => {\r\n      return OData.getODataResult<T>(data);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Export items: Fetches multiple pages (of 50 items) from the storage to achieve high $top (all if zero / null).\r\n   * @param baseUrl The service URL that is used, e.g. \"/v03/api/taxcards/current\".\r\n   * @param options The options for the query: Filter, search sort etc.\r\n   * @param ajax The Ajax implementation that is used for HTTP get.\r\n   * @param notify Function for notifying progress.\r\n   */\r\n  public static exportItems(baseUrl: string, options: ODataQueryOptions, ajax: Ajax, notify: progressNotification<void>): Promise<ApiListItem[]> {\r\n    const items: ApiListItem[] = [];\r\n    const pageSize = 50;\r\n    options = options ? Objects.copy(options) : {};\r\n    const maxLength = options.$top || 0;\r\n    options.$top = pageSize;\r\n    options.$skip = options.$skip || 0;\r\n\r\n    const next = (): Promise<void> => {\r\n      return this.getOData(baseUrl, options, ajax).then((odataResult) => {\r\n        items.push(...odataResult.items as ApiListItem[]);\r\n        if (notify) {\r\n          notify(Translations.get(\"SALAXY.UI_Terms.wait\"), items.length - 1, undefined);\r\n        }\r\n        if (!odataResult.items.length || (maxLength > 0 && maxLength === items.length)) {\r\n          return Promise.resolve();\r\n        }\r\n        options.$skip = items.length;\r\n        options.$top = maxLength <= 0 ? pageSize : ((maxLength - items.length) > pageSize ? pageSize : maxLength - items.length);\r\n        return next();\r\n      });\r\n    };\r\n    return next().then(() => {\r\n      return items;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Export items: Fetches multiple pages (server default page size) from the storage to achieve high $top (all if zero / null).\r\n   * @param odataMethod The OData method that is called. Note that Salaxy API methods need the this, so you will need to pass\r\n   * e.g. `(options) => srv.getOData(options)`, not simply `srv.getOData` because the call needs `this`.\r\n   * @param options The options for the query: Filter, search sort etc.\r\n   * Use $top to restrict the amount of items\r\n   * Note that $top currently only restricts within page size (e.g. 50, 100), not exactly to the number of items. This may later change without being a breaking change.\r\n   * @param notify Optional function for notifying progress. Called before each page await.\r\n   */\r\n  public static async getAllItems<T>(odataMethod: (options: ODataQueryOptions) => Promise<ODataResult<T>>, options: ODataQueryOptions, notify?: progressNotification<void>): Promise<T[]> {\r\n    return (await (this.getAllPages<T>(odataMethod, options, notify))).items;\r\n  }\r\n\r\n  /**\r\n   * Export items: Fetches multiple pages (server default page size) from the storage to achieve high $top (all if zero / null).\r\n   * @param odataMethod The OData method that is called. Note that Salaxy API methods need the this, so you will need to pass\r\n   * e.g. `(options) => srv.getOData(options)`, not simply `srv.getOData` because the call needs `this`.\r\n   * @param options The options for the query: Filter, search sort etc.\r\n   * Use $top to restrict the amount of items\r\n   * Note that $top currently only restricts within page size (e.g. 50, 100), not exactly to the number of items. This may later change without being a breaking change.\r\n   * @param notify Optional function for notifying progress. Called before each page await.\r\n   */\r\n  public static async getAllPages<T>(odataMethod: (options: ODataQueryOptions) => Promise<ODataResult<T>>, options: ODataQueryOptions, notify?: progressNotification<void>): Promise<ODataResult<T>> {\r\n    // const pageSize = 50;\r\n    options = options ? Objects.copy(options) : {};\r\n    const maxLength = options.$top || 0;\r\n    if (options.$top) {\r\n      delete(options.$top);\r\n    }\r\n    if (notify) {\r\n      notify(Translations.get(\"SALAXY.UI_Terms.wait\"), 0);\r\n    }\r\n    const result = await odataMethod(options);\r\n    while (result.nextPageLink) {\r\n      options.$skip = result.items.length;\r\n      // We could usee this if we wanted to use $top instead of NextPageLink\r\n      // options.$top = maxLength <= 0 ? pageSize : ((maxLength - result.items.length) > pageSize ? pageSize : maxLength - result.items.length);\r\n      if (notify) {\r\n        notify(Translations.get(\"SALAXY.UI_Terms.wait\"), result.items.length - 1, result.count);\r\n      }\r\n      const nextPage = await odataMethod(options);\r\n      result.count = nextPage.count;\r\n      result.items = [...result.items, ...nextPage.items];\r\n      result.nextPageLink = nextPage.nextPageLink;\r\n      if (!nextPage.items.length || (maxLength > 0 && maxLength <= result.items.length)) {\r\n        return result;\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Gets the result from Ajax result (json) to strongly typed result.\r\n   * @param data Result data coming from the ajax call.\r\n   * This may be either an OData object with count and next page link or just an array depending on the call.\r\n   */\r\n  public static getODataResult<T>(data: ODataResult<T> | T[]): ODataResult<T> {\r\n    const result: ODataResult<T> = {\r\n      items: [],\r\n    };\r\n    if ((data as ODataResult<T>).items) {\r\n      data = data as ODataResult<T>;\r\n      result.items = data.items;\r\n      result.count = data.count || undefined;\r\n      result.nextPageLink = data.nextPageLink || undefined;\r\n    } else if ((data as any).value) {\r\n      // TODO: Need to check this OData v4 format. Is this really the format supported by Azure services etc.?\r\n      const v4Data = data as any;\r\n      result.items = v4Data.value;\r\n      result.count = v4Data[\"@odata.count\"] || undefined;\r\n      result.nextPageLink = v4Data[\"@odata.nextLink\"] || undefined;\r\n    } else if (Array.isArray(data)) {\r\n      result.items = data;\r\n      result.count = undefined;\r\n      result.nextPageLink = undefined;\r\n    } else {\r\n      throw Error(\"Unexpected result: \" + typeof (data));\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Escapes the Lucene search language special characters in search text values.\r\n   * Special characters in Lucene Full syntax are: \"+-&|!(){}[]^\"~*?:\\/\"\r\n   * and in simple syntax: \"-*+|\"()'\\\"\r\n   * @param searchValue Search text value to escape for Lucene.\r\n   * @param isSimpleSyntax If true, only escapes the necessary characters for simple syntax.\r\n   */\r\n  public static escapeSearchValue(searchValue: string, isSimpleSyntax = false): string {\r\n    // TODO: Escapes here are probably really useless, but would need testing.\r\n    if (isSimpleSyntax) {\r\n      // eslint-disable-next-line no-useless-escape\r\n      return searchValue.replace(/[\\-\\*\\+\\|\\(\\)\\'\\\\]/g, (substring) => \"\\\\\" + substring);\r\n    }\r\n    // eslint-disable-next-line no-useless-escape\r\n    return searchValue.replace(/[\\+\\-\\&\\|\\!\\(\\)\\{\\}\\[\\]\\^\\\"\\~\\*\\?\\:\\\\\\/]/g, (substring) => \"\\\\\" + substring);\r\n  }\r\n\r\n  /**\r\n   * Gets the URL including the query string using the provided OData query options.\r\n   * @param baseUrl Base URL of the service to which the query is added.\r\n   * If null, the returned URL is the query string part starting with the question mark\r\n   * ...or if none of the options is set, returns just an empty string.\r\n   * @param queryOptions options based on which the query is constructed.\r\n   */\r\n  public static getUrl(baseUrl: string, queryOptions: ODataQueryOptions): string {\r\n    queryOptions = queryOptions || {};\r\n    baseUrl = (baseUrl || \"\").trim();\r\n    const queries: string[] = [];\r\n    if (queryOptions.$count) {\r\n      queries.push(\"$count=true\");\r\n    }\r\n    if (queryOptions.$expand) {\r\n      queries.push(\"$expand=\" + queryOptions.$expand);\r\n    }\r\n    if (queryOptions.$filter) {\r\n      queries.push(\"$filter=\" + queryOptions.$filter);\r\n    }\r\n    if (queryOptions.$orderby) {\r\n      queries.push(\"$orderby=\" + queryOptions.$orderby);\r\n    }\r\n    if (queryOptions.$select) {\r\n      queries.push(\"$select=\" + queryOptions.$select);\r\n    }\r\n    if (queryOptions.$skip) {\r\n      queries.push(`$skip=${queryOptions.$skip}`);\r\n    }\r\n    if (queryOptions.$top) {\r\n      queries.push(`$top=${queryOptions.$top}`);\r\n    }\r\n    if (queryOptions.fullSearch) {\r\n      queries.push(\"$search=\" + encodeURIComponent(queryOptions.fullSearch));\r\n    } else if (queryOptions.$search) {\r\n      let search = queryOptions.$search;\r\n      if (search.indexOf(\"\\\"\") >= 0) {\r\n        // phrase search\r\n        queries.push(\"$search=\" + encodeURIComponent(`${search}`));\r\n      } else {\r\n        search = this.escapeSearchValue(queryOptions.$search, true);\r\n        // HACK: This is probably not necessary: The searches should work simply by escaping, but\r\n        //       we must test the behavior of \"@\" (email) and \"-\" (official id) before removing this.\r\n        //       Also note that $search may be depracted in favor of fullSearch.\r\n        // search by phrase, term and wildcard\r\n        search = search.endsWith(\"*\") ? search.substring(0, search.length - 1) : search;\r\n        queries.push(\"$search=\" + encodeURIComponent(`\"${search}\" | ${search} | ${search}*`));\r\n      }\r\n    }\r\n    return baseUrl + (queries.length === 0 ? \"\" : (baseUrl.indexOf(\"?\") >= 0 ? \"&\" : \"?\") + queries.join(\"&\"));\r\n  }\r\n\r\n}\r\n","import { Objects } from \"./Objects.js\";\r\nimport { MemoryStorage } from \"./MemoryStorage.js\";\r\n\r\n/**\r\n * Implements the MemoryStorage in away that the default value is set in the constructor.\r\n * This simplified version will always return a value (never undefined) and does not have async methods,\r\n * however, it provides a convenient way to get and set properties of the value in the store.\r\n *\r\n * Memory persistent store of JS objects for different contexts:\r\n *\r\n * - local: Local storage, persistent across sessions, current available in browser environment only (localStorage).\r\n * - session: Session storage, for one browser tab only, current available in browser environment only (sessionStorage). Later implementations may support session storage also on the server side as in user session.\r\n * - global: Singleton cache for the whole application. Uses globalThis in both browser and server environments. Note that server-side this is shared by all users of the application.\r\n *\r\n * The objects are stored as JSON strings in the session and local storage (must be JSON serializable).\r\n * The objects are stored directly as-is in \"global\" (can be any type).\r\n */\r\nexport class SimpleStorage<T extends Record<string, any> = Record<string, any>> {\r\n\r\n  private readonly baseUtil: MemoryStorage;\r\n\r\n  /**\r\n   * Creates a new SimpleStorage.\r\n   * @param type The type of store to use. See description for possible values.\r\n   * @param name Unique name of the store.\r\n   * @param defaultValue The default value to return if the value is not found.\r\n   */\r\n  constructor(type: \"local\" | \"session\" | \"global\", readonly name: string, private readonly defaultValue: T) {\r\n    this.baseUtil = new MemoryStorage(type, name);\r\n  }\r\n\r\n  /**\r\n   * Gets the value from the store.\r\n   * @returns The value from the store or the default value if the value is not found.\r\n   */\r\n  public get(): T {\r\n    return this.baseUtil.get<T>(this.defaultValue) || this.defaultValue;\r\n  }\r\n\r\n  /** Gets a property of the value in the store. */\r\n  public getProp<V>(propertyPath: string): V | undefined {\r\n    return Objects.getProperty(this.get(), propertyPath) as V | undefined;\r\n  }\r\n\r\n  /** Sets a property of the value in the store. */\r\n  public setProp(propertyPath: string, value: any): void {\r\n    Objects.setProperty(this.get(), propertyPath, value);\r\n  }\r\n\r\n  /**\r\n   * Sets the value in the store.\r\n   * @param value The value to set.\r\n   */\r\n  public set(value: T): void {\r\n    this.baseUtil.set(value);\r\n  }\r\n\r\n  /**\r\n   * Clears the value of the store (not the entire store, just value identified by the name).\r\n   */\r\n  public clear(): void {\r\n    this.baseUtil.clear();\r\n  }\r\n\r\n}","/**\r\n * Helpers for formatting and encoding / decoding texts.\r\n */\r\nexport class Texts {\r\n  /**\r\n   * Escapes HTML\r\n   * @param html HTML text to escape\r\n   * @returns HTML escaped (&<>!'/)\r\n   */\r\n  public static escapeHtml(html: string): string {\r\n    const entityMap = {\r\n      \"&\": \"&amp;\",\r\n      \"<\": \"&lt;\",\r\n      \">\": \"&gt;\",\r\n      \"\\\"\": \"&quot;\",\r\n      \"'\": \"&#39;\",\r\n      \"/\": \"&#x2F;\"\r\n    };\r\n    // TODO: The escape is probably useless, but needs testing\r\n    // eslint-disable-next-line no-useless-escape\r\n    return String(html).replace(/[&<>\"'\\/]/g, (s) => {\r\n      return entityMap[s];\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Replaces characters in strings that are illegal/unsafe for filenames.\r\n   * Unsafe characters are either removed or replaced by a substitute set\r\n   * in the optional `options` object.\r\n   *\r\n   * Illegal Characters on Various Operating Systems\r\n   * / ? < > \\ : * | \"\r\n   * https://kb.acronis.com/content/39790\r\n   *\r\n   * Unicode Control codes\r\n   * C0 0x00-0x1f & C1 (0x80-0x9f)\r\n   * http://en.wikipedia.org/wiki/C0_and_C1_control_codes\r\n   *\r\n   * Reserved filenames on Unix-based systems (\".\", \"..\")\r\n   * Reserved filenames in Windows (\"CON\", \"PRN\", \"AUX\", \"NUL\", \"COM1\",\r\n   * \"COM2\", \"COM3\", \"COM4\", \"COM5\", \"COM6\", \"COM7\", \"COM8\", \"COM9\",\r\n   * \"LPT1\", \"LPT2\", \"LPT3\", \"LPT4\", \"LPT5\", \"LPT6\", \"LPT7\", \"LPT8\", and\r\n   * \"LPT9\") case-insesitively and with or without filename extensions.\r\n   *\r\n   * Capped at 255 characters in length.\r\n   * http://unix.stackexchange.com/questions/32795/what-is-the-maximum-allowed-filename-and-folder-size-with-ecryptfs\r\n   *\r\n   * @param name File name to escape.\r\n   */\r\n  public static escapeFileName(name: string): string {\r\n    // External code: We do not want to fix and retest it. At least the second line is probably justified. The 1. and 3. perhaps not.\r\n    const illegal = /[\\/\\?<>\\\\:\\*\\|\"]/g; // eslint-disable-line\r\n    const control = /[\\x00-\\x1f\\x80-\\x9f]/g; // eslint-disable-line\r\n    const reserved = /^\\.+$/;\r\n    const windowsReserved = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\\..*)?$/i;\r\n    const windowsTrailing = /[\\. ]+$/;  // eslint-disable-line\r\n    const r = \"_\";\r\n    if (!name) {\r\n      return name;\r\n    }\r\n    return name\r\n      .replace(illegal, r)\r\n      .replace(control, r)\r\n      .replace(reserved, r)\r\n      .replace(windowsReserved, r)\r\n      .replace(windowsTrailing, r);\r\n  }\r\n\r\n}\r\n","import { Base64 } from \"./Base64\";\r\n\r\n/**\r\n * Helper class for JWT tokens.\r\n */\r\nexport class Token {\r\n\r\n  /**\r\n   * Validates the JWT token. Please note that the method does not check the signature.\r\n   * Returns:\r\n   * noToken - the token is null,\r\n   * invalid - the token has invalid format, or some payload values (e.g. exp) are missing,\r\n   * expired - the token has expired,\r\n   * ok - token is valid.\r\n   */\r\n  public static validate(token: string | null): \"noToken\" | \"ok\" | \"expired\" | \"invalid\" {\r\n    if (!token) {\r\n      return \"noToken\";\r\n    }\r\n    const payload = this.parsePayload(token);\r\n    if (!payload || !payload.exp) {\r\n      return \"invalid\";\r\n    }\r\n\r\n    if (payload.exp * 1000 <= new Date().getTime()) {\r\n      return \"expired\";\r\n    }\r\n\r\n    return \"ok\";\r\n  }\r\n\r\n  /**\r\n   * Decodes and parses the payload from the string formatted token.\r\n   * @param token Token as a string.\r\n   * @returns Payload of the token as JSON object.\r\n   */\r\n  public static parsePayload(token: string): any {\r\n    const tokenParts = token.split(\".\");\r\n    if (tokenParts.length === 3) {\r\n      let payload = tokenParts[1];\r\n      // TODO: Use decodeURIComponent() or decodeURI(), but need to assure and test which. => Remove dependency to unescape in all places.\r\n      payload = Base64.decode(unescape(payload));\r\n      const data = JSON.parse(payload);\r\n      return data;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Decodes and parses the header from the string formatted token.\r\n   * @param token Token as a string.\r\n   * @returns Payload of the token as JSON object.\r\n   */\r\n  public static parseHeader(token: string): any {\r\n    const tokenParts = token.split(\".\");\r\n    if (tokenParts.length === 3) {\r\n      let payload = tokenParts[0];\r\n      payload = Base64.decode(unescape(payload));\r\n      const data = JSON.parse(payload);\r\n      return data;\r\n    }\r\n    return null;\r\n  }\r\n}\r\n","\r\nimport { ApiValidationError, ApiValidationErrorType, PensionCompany } from \"../model\";\r\n\r\nimport { Iban } from \"./Iban\";\r\nimport { Dates } from \"./Dates\";\r\n\r\n/**\r\n * Provides base methods for validation.\r\n * These are typically used in user interface validator components.\r\n */\r\nexport class Validation {\r\n\r\n  /**\r\n   * Converts a validation error to a string that is in the same format as the messages in ApiList items.\r\n   * Used in moving validatiaon errors to list items.\r\n   */\r\n  public static validationErrorAsMessage(error: ApiValidationError): string | undefined {\r\n    if (!error) {\r\n      return undefined;\r\n    }\r\n    let uiClass: string;\r\n    let type = \"UnknownValidationError\";\r\n    switch (error.type) {\r\n      case ApiValidationErrorType.Warning:\r\n        uiClass = \"Warning\";\r\n        type = \"ValidationWarning\";\r\n        break;\r\n      case ApiValidationErrorType.General:\r\n        uiClass = \"Danger\";\r\n        type = \"ValidationErrorGeneral\";\r\n        break;\r\n      case ApiValidationErrorType.Invalid:\r\n        uiClass = \"Danger\";\r\n        type = \"ValidationErrorInvalid\";\r\n        break;\r\n      case ApiValidationErrorType.Required:\r\n        uiClass = \"Danger\";\r\n        type = \"ValidationErrorRequired\";\r\n        break;\r\n      default:\r\n        uiClass = \"Danger\";\r\n        break;\r\n    }\r\n    return `${type} (Ui${uiClass}): ${error.msg} (ANON at ${Dates.getToday()} 00:00)`;\r\n  }\r\n\r\n  /**\r\n   * Returns true if the given value is a valid Finnish Personal ID (HETU / SSN).\r\n   * Checks the format and checksum.\r\n   * @param value Candidate for Finnish Personal ID.\r\n   */\r\n  public static isPersonalIdFi(value: string): boolean {\r\n\r\n    if (!value) {\r\n      return true;\r\n    }\r\n\r\n    const pattern = /^(\\d{6})([+\\-ABCDEFUVWXY])(\\d{3})([a-zA-Z0-9*])$/;\r\n    const groups = pattern.exec(value);\r\n\r\n    if (!groups) {\r\n      return false;\r\n    }\r\n\r\n    const date = groups[1];\r\n    const centenry = groups[2];\r\n    const person = groups[3];\r\n    const checksum = groups[4];\r\n\r\n    const cc =  [\"A\",\"B\",\"C\",\"D\",\"E\",\"F\"].includes(centenry) ? \"20\" :\r\n    [\"-\", \"U\", \"V\", \"W\", \"X\", \"Y\" ].includes(centenry)  ? \"19\" :\r\n    [\"+\" ].includes(centenry) ? \"18\" : null;\r\n\r\n    if (cc == null) {\r\n      return false;\r\n    }\r\n\r\n    if (date[0] !== \"4\") {\r\n      // Check date if not artificial ones beginning with 4\r\n      if (!Dates.isValidDateTime(date.substr(0, 4) + cc + date.substr(4, 2), true, \"DDMMYYYY\")) {\r\n        return false;\r\n      }\r\n    }\r\n    else {\r\n       // Check date if artificial ones beginning with 4\r\n      if (!Dates.isValidDateTime(\"0101\" + cc + date.substr(4, 2), true, \"DDMMYYYY\")) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    // Reject ages older than 110. This is to combat erroneous values for people born in the 2000's.\r\n    if (centenry == \"-\") {\r\n      const dd = parseInt(date.slice(0, 2), 10);\r\n      const mm = parseInt(date.slice(2, 4), 10) - 1;\r\n      const yyyy = parseInt(cc + date.slice(4, 6), 10);\r\n\r\n      const birth = new Date(Date.UTC(yyyy, mm, dd));\r\n\r\n      if (new Date().getUTCFullYear() - birth.getUTCFullYear() > 110) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    if (checksum === \"*\") {\r\n      return true;\r\n    }\r\n\r\n    const checksumLetters = \"0123456789ABCDEFHJKLMNPRSTUVWXY\";\r\n    const calculatedChecksum = checksumLetters[parseInt(date + person, 10) % 31];\r\n    return calculatedChecksum === checksum.toUpperCase();\r\n  }\r\n\r\n  /**\r\n   * Returns true if the value is a valid e-mail.\r\n   * Currently uses a simple regex (source?).\r\n   * @param value E-mail candidate.\r\n   */\r\n  public static isEmail(value: string): boolean {\r\n    // TODO: The escape is probably useless, but needs testing\r\n    // eslint-disable-next-line no-useless-escape\r\n    const regExp = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n    return regExp.test(value);\r\n  }\r\n\r\n  /**\r\n   * Returns true if the value is a valid mobile phone number: 5-16 numbers and spaces (5-18 if there is a \"+\" in the beginning).\r\n   * Currently uses a naive regex, but we could extend this to take into account the regional differences.\r\n   * @param value Mobile phone number candidate.\r\n   */\r\n  public static isMobilePhone(value: string): boolean {\r\n    // TODO: Check lengths.\r\n    const regExp = /^(\\+[\\d ]{1,3}[\\d ]{4,15})$|^([\\d ]{5,16})$/;\r\n    return regExp.test(value);\r\n  }\r\n\r\n  /**\r\n   * Returns true if the value is a valid currency amount with maximum two decimals.\r\n   * @param value Currency amount candidate\r\n   */\r\n  public static isCurrency(value: string): boolean {\r\n    const regExp = /^\\d+(([.]|[,])\\d{1,2})?$/;\r\n    return regExp.test(value);\r\n  }\r\n\r\n  /**\r\n   * Returns true if the value is a valid number.\r\n   * @param value Number candidate\r\n   */\r\n  public static isNumber(value: string): boolean {\r\n    const regExp = /^\\d+(([.]|[,])\\d+)?$/;\r\n    return regExp.test(value);\r\n  }\r\n\r\n  /**\r\n   * Returns true if the value is a valid integer.\r\n   * @param value Number candidate\r\n   */\r\n  public static isInteger(value: string): boolean {\r\n    const regExp = /^\\d+$/;\r\n    return regExp.test(value);\r\n  }\r\n\r\n  /**\r\n   * Returns true if the value is a valid tax percent amount with maximum one decimal.\r\n   * @param value Tax percent candidate\r\n   */\r\n  public static isTaxPercent(value: string): boolean {\r\n    const regExp = /^\\d{1,2}(([.]|[,])\\d{1})?$/;\r\n    return regExp.test(value);\r\n  }\r\n\r\n  /** Returns true if the value is a valid Finnish Postal code: 5 numbers. */\r\n  public static isPostalCodeFi(value: string): boolean {\r\n    const regExp = /^\\d{5}$/;\r\n    return regExp.test(value);\r\n  }\r\n\r\n  /**\r\n   * Returns true if the value is a valid Finnish Company ID. If the format is not correct, will return false.\r\n   * @param companyIdCandidate String to validate / format\r\n   * @param allowStarAsChecksum If true, allows the checksum character (the last char) to be an asterix (*).\r\n   * @returns boolean\r\n   */\r\n  public static formatCompanyIdFi(companyIdCandidate: string, allowStarAsChecksum = true): boolean {\r\n    if (!companyIdCandidate) {\r\n      return false;\r\n    }\r\n    companyIdCandidate = companyIdCandidate.toUpperCase().trim().replace(\"-\", \"\").replace(\"–\", \"\").replace(\"—\", \"\"); // dash, n-dash, m-dash\r\n    if (companyIdCandidate.substr(0, 2) === \"FI\") {\r\n      companyIdCandidate = companyIdCandidate.substr(2);\r\n    }\r\n    if (companyIdCandidate.length === 7) {\r\n      // Some old companies may have 6+1 numbers\r\n      companyIdCandidate = \"0\" + companyIdCandidate;\r\n    }\r\n    if (companyIdCandidate.length !== 8) {\r\n      return false;\r\n    }\r\n    const multipliers = [7, 9, 10, 5, 8, 4, 2];\r\n    let total = 0;\r\n    for (let i = 0; i < 7; i++) {\r\n      const num = Number(companyIdCandidate.charAt(i));\r\n      if (num < 0 || num > 9) {\r\n        return false;\r\n      }\r\n      total += num * multipliers[i];\r\n    }\r\n    const modulo = total % 11;\r\n    if (modulo === 1) {\r\n      return false;\r\n    }\r\n    const checksum = modulo === 0 ? 0 : (11 - modulo);\r\n    return (allowStarAsChecksum && companyIdCandidate.charAt(7) === \"*\") || Number(companyIdCandidate[7]) === checksum;\r\n  }\r\n\r\n  /**\r\n   * Returns true if the value is a valid IBAN number.\r\n   * Checks for the country specific length as well as checksum.\r\n   * @param value IBAN number number candidate.\r\n   */\r\n  public static isIban(value: string): boolean {\r\n    return Iban.isIban(value);\r\n  }\r\n\r\n  /**\r\n   * For validating (RF) reference number.\r\n   * @param value - (RF) reference number.\r\n   *\r\n   * In Finland, the RF reference is formed on the basis of the Finnish reference number. Structure of the RF reference is as follows:\r\n   * RFXX1234561, in which\r\n   * RF is the identifier\r\n   * XX are the two check digits\r\n   * 1234561 is the Finnish reference number, which can be freely formed by the customer.\r\n   * Maximum length of the number is 20 digits, and the final number is a check digit calculated using the algorithm for Finnish reference numbers.\r\n   * The Finnish reference number is appended with the numbers \"2715\" (the letters RF converted into integers) and \"00\"\r\n   * The modulo 97 operation is performed on the resulting figure.\r\n   * The remainder is then deducted from 98, which then results in the checksum. If the checksum is smaller than 10, a leading zero is added.\r\n   */\r\n   public static isFinnishBankReferenceNumber(value: string): boolean {\r\n\r\n    if (value == null) {\r\n      return false;\r\n    }\r\n    // Remove spaces\r\n    value = value.split(\" \").join(\"\");\r\n\r\n    // Check if given value is RF reference number\r\n    const isRf = value.toUpperCase().startsWith(\"RF\");\r\n    // If number is RF reference number\r\n    if(isRf){\r\n      // Check if value starts with RF, lower case not allowed\r\n      if (value.slice(0, 2) !== \"RF\") {\r\n        return false;\r\n      }\r\n      // The two digit RF checksum\r\n      const checksum = value.slice(2, 4);\r\n\r\n      // Referencenumber\r\n      let referenceNumber = value.slice(4);\r\n      // remove leading zeros\r\n      referenceNumber = referenceNumber.replace(/^0+/, \"\");\r\n\r\n      const referenceNumberWithoutCheck =  referenceNumber.substring(0, referenceNumber.length - 1);\r\n      const referenceCheck = parseInt(referenceNumber.slice(-1));\r\n      // Move the first two characters (RF = 2715) to the end of the string and add 00\r\n      const rearrangedValue = value.slice(4)  + \"271500\";\r\n      // to number\r\n      let num: bigint;\r\n      try {\r\n        num = BigInt(rearrangedValue);\r\n      } catch (error) {\r\n        console.error(error);\r\n        return false;\r\n      }\r\n      let calculatedChecksum = Number(num % 97n);\r\n      calculatedChecksum = 98 - calculatedChecksum;\r\n\r\n      let calculatedChecksumString = calculatedChecksum.toString();\r\n\r\n      if (calculatedChecksum < 10){\r\n        calculatedChecksumString = calculatedChecksumString.padStart(2, \"0\");\r\n      }\r\n      // Does RF checksum and reference checksum match the calculated values\r\n      if(calculatedChecksumString == checksum && Validation.getCheckNumber(referenceNumberWithoutCheck) == referenceCheck){\r\n        return true;\r\n      }else{\r\n        return false;\r\n      }\r\n\r\n    }else if(!isRf){\r\n      // Remove leading zeros\r\n      const referenceNumber = value.replace(/^0+/, \"\");\r\n\r\n      const referenceNumberWithoutCheck =  referenceNumber.substring(0, referenceNumber.length - 1);\r\n      const referenceCheck = parseInt(referenceNumber.slice(-1));\r\n\r\n      // Given value is not a RF reference number. Check if reference number valid.\r\n      if(Validation.getCheckNumber(referenceNumberWithoutCheck) == referenceCheck){\r\n        return true;\r\n      }else{\r\n        return false;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n\r\n  /**\r\n   * For calculating bank reference checksum number.\r\n   * @param value - Reference number without checksum.\r\n   *\r\n   * The reference number must always include a checksum. The checksum is calculated as follows:\r\n   * All digits of the reference number are multiplied from right to left with the values 7, 3, 1.\r\n   * The products are then summed up and the sum is subtracted from the following full ten.\r\n   * The resulting difference is the checksum, the final digit in the reference number.\r\n   * If the difference is 10, the checksum is 0.\r\n   */\r\n  public static getCheckNumber(value: string): number | undefined{\r\n\r\n    const multipliers = [7, 3, 1];\r\n    const reverse = value.split(\"\").reverse();\r\n    if (reverse.length > 19)\r\n    {\r\n      return undefined;\r\n    }\r\n    let sum = 0;\r\n\r\n    for (let i = 0; i < reverse.length; i++) {\r\n      const num = parseInt(reverse[i]);\r\n      sum += num * multipliers[i % 3];\r\n    }\r\n    return ((10 - (sum % 10)) % 10);\r\n  }\r\n\r\n  /**\r\n   * Returns PensionCompany for the given pension contract number.\r\n   * @param value - Pension contract number.\r\n   */\r\n  public static isPensionContractNumber(value: string): PensionCompany | undefined {\r\n\r\n    if (value == null) {\r\n      return undefined;\r\n    }\r\n\r\n    let regExp: RegExp | undefined = undefined;\r\n\r\n    // TODO: The escape is probably useless, but needs testing\r\n    if (value.startsWith(\"7\") || value.startsWith(\"8\")) {\r\n      // eslint-disable-next-line no-useless-escape\r\n      regExp = /^(\\d{5})\\-?(\\d{4})([a-zA-Z0-9\\*])$/;\r\n    } else {\r\n      // eslint-disable-next-line no-useless-escape\r\n      regExp = /^(\\d{2})\\-?(\\d{7})([a-zA-Z0-9\\*])$/;\r\n    }\r\n    const result = regExp.exec(value);\r\n    if (!result) {\r\n      return undefined;\r\n    }\r\n\r\n    const company = result[1];\r\n    const contract = result[2];\r\n    const check = result[3];\r\n\r\n    const checksumLetters = \"0123456789ABCDEFHJKLMNPRSTUVWXY\";\r\n    const calculatedChecksum = checksumLetters[parseInt(company + contract, 10) % 31];\r\n    if (calculatedChecksum !== check) {\r\n      return undefined;\r\n    }\r\n    switch (company) {\r\n      case \"80009\":\r\n        return PensionCompany.Apteekkien;\r\n      case \"80008\":\r\n        return PensionCompany.Verso;\r\n      case \"54\":\r\n        return PensionCompany.Elo;\r\n      case \"90\":\r\n        return PensionCompany.Etera;\r\n      case \"46\":\r\n        if(contract?.startsWith(\"4\")){\r\n          // This is Yel\r\n          return undefined;\r\n        }\r\n        return PensionCompany.Ilmarinen;\r\n      case \"40\":\r\n        return PensionCompany.PensionsAlandia;\r\n      case \"55\":\r\n        if(contract?.startsWith(\"2\")){\r\n          // This is Yel\r\n          return undefined;\r\n        }\r\n        return PensionCompany.Varma;\r\n      case \"56\":\r\n        return PensionCompany.Veritas;\r\n      case \"20\":\r\n        return PensionCompany.KevaMunicipal;\r\n      case \"24\":\r\n        return PensionCompany.KevaAland;\r\n      case \"25\":\r\n        return PensionCompany.KevaChurch;\r\n      case \"29\":\r\n        return PensionCompany.KevaKela;\r\n      case \"30\":\r\n        return PensionCompany.KevaState;\r\n      case \"80001\":\r\n        return PensionCompany.Valio;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Returns PensionCompany for the given *temporary* pension contract number.\r\n   * @param value - TemporaryPension contract number.\r\n   */\r\n  public static isTemporaryPensionContractNumber(value: string | undefined): PensionCompany | undefined {\r\n\r\n    if (value == undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    switch (value) {\r\n      case \"55-3999990D\":\r\n        return PensionCompany.Varma;\r\n      case \"46-3000000V\":\r\n        return PensionCompany.Ilmarinen;\r\n      case \"54-0000000U\":\r\n        return PensionCompany.Elo;\r\n      case \"56-0049990P\":\r\n        return PensionCompany.Veritas;\r\n    }\r\n    return undefined;\r\n  }\r\n}\r\n","/**\r\n * Helpers for handling promises.\r\n */\r\nexport class Promises {\r\n\r\n  /**\r\n   * Runs promises in sequence (not paralles as in Promise.all)\r\n   * @param promiseTasks Tasks creating promises to resolve in sequence.\r\n   * @returns Result array of promises.\r\n   */\r\n  public static async sequence<T>(promiseTasks: Array<() => Promise<T>>): Promise<T[]> {\r\n    const result: any[] = [];\r\n\r\n    for (const promiseTask of promiseTasks) {\r\n      result.push(await promiseTask());\r\n    }\r\n\r\n    return result;\r\n  }\r\n}","import { ApiListItem, VersionInfo, WorkflowData, WorkflowEvent } from \"../../model\";\r\nimport { OData, ODataResult, ODataQueryOptions } from \"../../util\";\r\nimport { Ajax } from \"./Ajax\";\r\n\r\n/**\r\n * Base class for CRUD services.\r\n * Type TItem is the type of the object that is stored in the service (CrudObject).\r\n * Type TListItem is the type of the object that is returned in lists (based on Api).\r\n */\r\nexport abstract class CrudApiBase<TItem, TListItem extends ApiListItem> {\r\n\r\n  /**\r\n   * Deriving classes should define the baseURl for the method. E.g. \"/calculations\"\r\n   * Ajax implementations will add the beginning (e.g. \"https://test-api.salaxy.com/api/v03\")\r\n   */\r\n  protected abstract baseUrl: string;\r\n\r\n  /** Constructor creates a new CRUD api with given Ajax-implementation */\r\n  constructor(protected ajax: Ajax) { }\r\n\r\n  /**\r\n   * Client-side (synchronous) method for getting a new blank CRUD item as bases for UI binding.\r\n   * The basic idea is that all the child object properties should be non-null to avoid null reference exceptions.\r\n   * In special cases, when null is significant it may be used: e.g. Calculation.result is null untill the recalculation has been done.\r\n   * Strings, dates and booleans may be null (false if bool), but typically just undefined.\r\n   */\r\n  public abstract getBlank(): TItem;\r\n\r\n  /**\r\n   * Makes an OData query to the service's main OData method.\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public getOData(query: ODataQueryOptions | string): Promise<ODataResult<TListItem>> {\r\n    const baseUrl = this.getODataUrl();\r\n    return OData.getOData<TListItem>(baseUrl, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Makes an OData query to the the given service URL.\r\n   * @param baseUrl The service URL that is used, e.g. \"/v03/api/taxcards/current\".\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   * @deprecated You should use the OData.getOData() static util method instead.\r\n   */\r\n  public getODataBase(baseUrl: string, query: ODataQueryOptions | string): Promise<ODataResult<TListItem>> {\r\n    // TODO: Check that it is not used and remove.\r\n    return OData.getOData<TListItem>(baseUrl, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Retrieves the Ajax instance used by this CRUD API.\r\n   * @returns {Ajax} The Ajax instance that is used for making HTTP requests.\r\n   */\r\n  public getAjax(): Ajax {\r\n    return this.ajax;\r\n  }\r\n\r\n  /**\r\n   * Gets a single item based on identier\r\n   * @param id - Unique identifier for the object\r\n   * @returns A Promise with result data.\r\n   */\r\n  public getSingle(id: string): Promise<TItem> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/${id}`);\r\n  }\r\n\r\n  /**\r\n   * Deletes an single item from the sotrage\r\n   * @param id - Unique identifier for the object\r\n   * @returns A Promise with result data \"Object deleted\".\r\n   */\r\n  public delete(id: string): Promise<string> {\r\n    return this.ajax.remove(`${this.baseUrl}/${id}`);\r\n  }\r\n\r\n  /**\r\n   * Saves an item to the storage.\r\n   * If id is null, this is add/insert. If id exists, this is update.\r\n   * @param itemToSave - The item that is updated/inserted.\r\n   * @param options - Additional options for the save operation. Can be any object with fields that are used as query parameters.\r\n   * @returns A Promise with result data as saved to the storage (contains id, createAt, owner etc.).\r\n   */\r\n  public save(itemToSave: TItem, options: any = undefined): Promise<TItem> {\r\n    return this.ajax.postJSON(this.getUrlWithOptions(this.baseUrl, options), itemToSave);\r\n  }\r\n\r\n  /** Gets the OData URL for v03 compatible services */\r\n  public getODataUrl(): string {\r\n    if (this.baseUrl.startsWith(\"/v03\") || this.baseUrl.startsWith(\"/v04\")){\r\n      // e.g. \"/v03/api/messages\"\r\n      return this.baseUrl;\r\n    }\r\n    if (this.baseUrl.startsWith(\"http\")) {\r\n      return this.baseUrl;\r\n    }\r\n    throw new Error(`Service ${this.baseUrl} does not support OData interface.`);\r\n  }\r\n\r\n  /** Returns the base url for this api. */\r\n  public getBaseUrl(): string {\r\n    return this.baseUrl;\r\n  }\r\n\r\n  /**\r\n   * Adds/updates the workflow event for the item.\r\n   *\r\n   * @param item - Item for which to set the workflow event.\r\n   * @param wfEvent - Event to add or update.\r\n   * @returns Workflow data for the item.\r\n   */\r\n  public saveWorkflowEvent(item: TItem, wfEvent: WorkflowEvent): Promise<WorkflowData> {\r\n    const id = (item as any as { /** required id */ id: string }).id;\r\n    return this.ajax.postJSON(`${this.baseUrl}/${id}/workflows`, wfEvent);\r\n  }\r\n\r\n  /**\r\n   * Deletes the workflow item or items from the item.\r\n   * @param item - Item for which to delete workflow events.\r\n   * @param wfIdOrType - Event id or type.\r\n   * @returns A Promise with result data \"Object deleted\".\r\n   */\r\n  public deleteWorkflowEvent(item: TItem, wfIdOrType: string): Promise<string> {\r\n    const id = (item as any as { /** required id */ id: string }).id;\r\n    return this.ajax.remove(`${this.baseUrl}/${id}/workflows/${wfIdOrType}`);\r\n  }\r\n\r\n  /**\r\n   * Gets a single workflow event for the item.\r\n   * @param item - Item for which to get the single event.\r\n   * @param wfId - Event id.\r\n   * @returns A Promise with event data.\r\n   */\r\n  public getWorkflowEvent(item: TItem, wfId: string): Promise<WorkflowEvent> {\r\n    const id = (item as any as { /** required id */ id: string }).id;\r\n    return this.ajax.getJSON(`${this.baseUrl}/${id}/workflows/events/${wfId}`);\r\n  }\r\n\r\n  /**\r\n   * Lists versions for the object.\r\n   * @param id - Unique identifier for the object\r\n   * @returns A Promise with result data.\r\n   */\r\n  public getVersions(id: string): Promise<VersionInfo[]> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/${id}/versions`);\r\n  }\r\n\r\n  /**\r\n   * Get the given version for the object.\r\n   * @param id - Unique identifier for the object\r\n   * @param versionId - Version identifier\r\n   * @returns A Promise with result data.\r\n   */\r\n  public getVersion(id: string, versionId: string): Promise<TItem> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/${id}/versions/${versionId}`);\r\n  }\r\n\r\n  protected getUrlWithOptions(url: string, options: any): string {\r\n    const prmsArr: string[] = [];\r\n    options ??= {};\r\n    Object.keys(options).forEach(key => {\r\n      const val = options[key];\r\n      if (val !== undefined && val !== null) {\r\n        prmsArr.push(`${key}=${encodeURIComponent(val)}`);\r\n      }\r\n    });\r\n    const prms = prmsArr.join(\"&\");\r\n    return `${url}${prms ? \"?\"+prms : \"\"}`;\r\n  }\r\n}\r\n","import { OAuthMessage } from \"../../model\";\r\nimport { Ajax } from \"./Ajax\";\r\n\r\n/**\r\n * Methods for oauth2 communication.\r\n */\r\nexport class OAuth2 {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  constructor(private ajax: Ajax) {}\r\n\r\n  /**\r\n   * Token endpoint.\r\n   *\r\n   * @param msg - OAuth 2.0 authorization request.\r\n   *\r\n   * @returns A Promise with OAuthMessage.\r\n   */\r\n  public token(msg: OAuthMessage): Promise<OAuthMessage> {\r\n    return this.ajax.postJSON(this.ajax.getServerAddress() + \"/oauth2/token\", msg);\r\n  }\r\n\r\n  /**\r\n   * Gets a federation message for the currently signed-in account as OpenID Connect UserInfo Response\r\n   * (http://openid.net/specs/openid-connect-core-1_0.html#UserInfo).\r\n   * This message can be used by trusted authentication providers (mainly Banks) to federate authentication and authorization information to Salaxy.\r\n   * In such a flow this service end-point provides an example that could be used in testing.\r\n   *\r\n   * @returns A Promise with federation message {OpenIdUserInfoSupportedClaims}.\r\n   */\r\n  public getFederationMessage(): Promise<any> {\r\n    return this.ajax.getJSON(this.ajax.getServerAddress() + \"/oauth2/federationMessage\");\r\n  }\r\n}\r\n","import { Ajax } from \"./Ajax\";\r\n\r\n/**\r\n * Base class for APIs that return only one item (not a list as in CRUD).\r\n */\r\nexport abstract class SingleItemApiBase<T> {\r\n\r\n  /**\r\n   * Deriving classes should define the baseURL for the method. E.g. \"/v03/api/settings/accounting\"\r\n   * Ajax implementations will add the beginning.\r\n   */\r\n  protected abstract baseUrl: string;\r\n\r\n  /** Constructor creates a new CRUD api with given Ajax-implementation */\r\n  constructor(protected ajax: Ajax) {}\r\n\r\n  /**\r\n   * Gets a single settings object.\r\n   * @returns A Promise with settings object.\r\n   */\r\n  public get(): Promise<T> {\r\n    return this.ajax.getJSON(this.baseUrl);\r\n  }\r\n\r\n  /**\r\n   * Saves the settings to the storage.\r\n   * @param settings - The settings that is saved.\r\n   * @returns A Promise with settings object.\r\n   */\r\n  public save(settings: T): Promise<T> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/`, settings);\r\n  }\r\n}\r\n","import { Configs } from \"../../logic/Configs\";\r\nimport { Cookies } from \"../../util/Cookies\";\r\nimport { Token } from \"../../util/Token\";\r\nimport { Ajax } from \"./Ajax\";\r\n\r\n/**\r\n * The fetch access to the server methods: GET, POST and DELETE\r\n * with different return types and authentication / error events.\r\n */\r\nexport class AjaxFetch implements Ajax {\r\n  /**\r\n   * By default (true) the token is set to salaxy-token -cookie.\r\n   * Disable cookies with this flag.\r\n   */\r\n  public useCookie = true;\r\n\r\n  /**\r\n   * By default credentials are not used in http-calls.\r\n   * Enable credentials with this flag (force disabled when the token is set).\r\n   */\r\n  public useCredentials: boolean;\r\n\r\n  /**\r\n   * The server address - root of the server. This is settable field.\r\n   * Will probably be changed to a configuration object in the final version.\r\n   */\r\n  public serverAddress = \"https://test-api.salaxy.com\";\r\n\r\n  private token: string | null;\r\n\r\n  /**\r\n   * Creates a new instance of AjaxFetch\r\n   */\r\n  constructor() {\r\n    const config = Configs.current;\r\n    if (config) {\r\n      // apiServer\r\n      if (config.apiServer) {\r\n        this.serverAddress = config.apiServer;\r\n      }\r\n\r\n      // useCredentials\r\n      if (config.useCredentials != null) {\r\n        this.useCredentials = config.useCredentials;\r\n      }\r\n\r\n      // useCookie\r\n      if (config.useCookie != null) {\r\n        this.useCookie = config.useCookie;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the API address with version information. E.g. 'https://test-api.salaxy.com/v03/api'.\r\n   * Default version, as of writing 2.0\r\n   */\r\n  public getApiAddress(): string {\r\n    return this.serverAddress + \"/v03/api\";\r\n  }\r\n\r\n  /** Gets the Server address that is used as bases to the HTML queries. E.g. 'https://test-api.salaxy.com' */\r\n  public getServerAddress(): string {\r\n    return this.serverAddress;\r\n  }\r\n\r\n  /**\r\n   * Gets the current token.\r\n   * Will check the salaxy-token cookie if the token is persisted there\r\n   */\r\n  public getCurrentToken(): string | null {\r\n    if (!this.token && this.useCookie) {\r\n      this.token = new Cookies().get(\"salaxy-token\") || \"\";\r\n    }\r\n    return this.token;\r\n  }\r\n\r\n  /** Gets the status of the current token. */\r\n  public getTokenStatus(): \"noToken\" | \"ok\" | \"expired\" | \"invalid\" {\r\n    const token = this.getCurrentToken();\r\n    return Token.validate(token);\r\n  }\r\n\r\n  /**\r\n   * Sets the current token. Persists it to cookie until the browser window\r\n   *\r\n   * @param token - the authentication token to persist.\r\n   */\r\n  public setCurrentToken(token: string | null): void {\r\n    if (this.useCookie) {\r\n      new Cookies().setCookie(\"salaxy-token\", token || \"\");\r\n    }\r\n    this.token = token;\r\n  }\r\n\r\n  /**\r\n   * POSTS data to server and receives back a JSON-message.\r\n   *\r\n   * @param method - The API method is the url path after the api version segments (e.g. '/v03/api')\r\n   * and starts with a forward slash, e.g. '/calculator/new'.\r\n   * @param data - The data that is posted to the server.\r\n   *\r\n   * @returns A Promise with result data. Standard Promise rejection to be used for error handling.\r\n   */\r\n  public async postJSON(method: string, data: any): Promise<any> {\r\n    const init: RequestInit = this.setAuthorization({\r\n      method: \"POST\",\r\n      body: JSON.stringify(data),\r\n      headers: {\r\n        Accept: \"application/json, text/plain, */*; charset=UTF-8\",\r\n        \"Content-Type\": \"application/json;charset=UTF-8\",\r\n      },\r\n    });\r\n\r\n    const response = await fetch(this.getUrl(method), init);\r\n    if (!response.ok) {\r\n      return this.handleErrors(response);\r\n    }\r\n    return await response.json();\r\n  }\r\n\r\n  /**\r\n   * Gets a JSON-message from server using the API\r\n   *\r\n   * @param method The API method is the url path after the api version segments (e.g. '/v03/api')\r\n   * and starts with a forward slash, e.g. '/calculator/new'.\r\n   *\r\n   * @returns A Promise with result data. Standard Promise rejection to be used for error handling.\r\n   */\r\n  public async getJSON(method: string): Promise<any> {\r\n    const init: RequestInit = this.setAuthorization({\r\n      method: \"GET\",\r\n      headers: {\r\n        Accept: \"application/json, text/plain, */*; charset=UTF-8\",\r\n        \"Content-Type\": \"application/json; charset=UTF-8\",\r\n      },\r\n    });\r\n    const response = await fetch(this.getUrl(method), init);\r\n    if (!response.ok) {\r\n      return this.handleErrors(response);\r\n    }\r\n    return await response.json();\r\n  }\r\n\r\n  /**\r\n   * POSTS data to server and receives back a blob (binary data).\r\n   *\r\n   * @param method - The API method is the url path after the api version segments (e.g. '/v03/api')\r\n   * and starts with a forward slash, e.g. '/calculator/new', or a full URL address.\r\n   * @param data - The data that is posted to the server.\r\n   * @returns A Promise that resolves to an object containing:\r\n   * - data: The blob data from the response\r\n   * - headers: An object containing the response headers as key-value pairs\r\n   */\r\n   public async postBlob(method: string, data: any): Promise<{data: Blob, headers: {[key: string]: string}}> {\r\n    const init: RequestInit = this.setAuthorization({\r\n      method: \"POST\",\r\n      body: JSON.stringify(data),\r\n      headers: {\r\n        Accept: \"*/*\",\r\n        \"Content-Type\": \"application/json; charset=UTF-8\"\r\n      },\r\n    });\r\n\r\n    const response = await fetch(this.getUrl(method), init);\r\n    if (!response.ok) {\r\n      return this.handleErrors(response);\r\n    }\r\n    const headers: {[key: string]: string} = {};\r\n    response.headers.forEach((value, key) => {\r\n      headers[key] = value;\r\n    });\r\n    return {data: await response.blob(), headers};\r\n  }\r\n\r\n  /**\r\n   * Gets a Blob from server using the API\r\n   *\r\n   * @param method The API method is the url path after the api version segments (e.g. '/v03/api')\r\n   * and starts with a forward slash, e.g. '/calculator/new'.\r\n   *\r\n   * @returns A Promise with result blob. Standard Promise rejection to be used for error handling.\r\n   */\r\n  public async getBlob(method: string): Promise<{data: Blob, headers: {[key: string]: string}}> {\r\n    const init: RequestInit = this.setAuthorization({\r\n      method: \"GET\",\r\n      headers: {\r\n        Accept: \"*/*\"\r\n      },\r\n    });\r\n    const response = await fetch(this.getUrl(method), init);\r\n    if (!response.ok) {\r\n      return this.handleErrors(response);\r\n    }\r\n    const headers: {[key: string]: string} = {};\r\n    response.headers.forEach((value, key) => {\r\n      headers[key] = value;\r\n    });\r\n    return {data: await response.blob(), headers};\r\n  }\r\n\r\n  /**\r\n   * POSTS data to server and receives back HTML.\r\n   *\r\n   * @param method - The API method is the url path after the api version segments (e.g. '/v03/api')\r\n   * and starts with a forward slash, e.g. '/calculator/new'.\r\n   * @param data - The data that is posted to the server.\r\n   *\r\n   * @returns A Promise with result data. Standard Promise rejection to be used for error handling.\r\n   */\r\n  public async postHTML(method: string, data: any): Promise<string> {\r\n    const init: RequestInit = this.setAuthorization({\r\n      method: \"POST\",\r\n      body: (!data || typeof data === \"string\") ? data : JSON.stringify(data),\r\n      headers: {\r\n        Accept: \"text\",\r\n        \"Content-Type\": \"text/plain\",\r\n      },\r\n    });\r\n\r\n    const response = await fetch(this.getUrl(method), init);\r\n    if (!response.ok) {\r\n      return this.handleErrors(response);\r\n    }\r\n    return await response.text();\r\n  }\r\n\r\n  /**\r\n   * Gets a HTML-message from server using the API\r\n   *\r\n   * @param method - The API method is the url path after the api version segments (e.g. '/v03/api')\r\n   * and starts with a forward slash, e.g. '/calculator/new'.\r\n   *\r\n   * @returns A Promise with result data. Standard Promise rejection to be used for error handling.\r\n   */\r\n  public async getHTML(method: string): Promise<string> {\r\n    const init: RequestInit = this.setAuthorization({\r\n      method: \"GET\",\r\n      headers: {\r\n        Accept: \"text\"\r\n      },\r\n    });\r\n\r\n    const response = await fetch(this.getUrl(method), init);\r\n    if (!response.ok) {\r\n      return this.handleErrors(response);\r\n    }\r\n    return await response.text();\r\n  }\r\n\r\n  /**\r\n   * Sends a DELETE-message to server using the API\r\n   *\r\n   * @param method - The API method is the url path after the api version segments (e.g. '/v03/api')\r\n   * and starts with a forward slash, e.g. '/calculator/new'.\r\n   *\r\n   * @returns A Promise with result data. Standard Promise rejection to be used for error handling.\r\n   */\r\n  public async remove(method: string): Promise<any> {\r\n    const init: RequestInit = this.setAuthorization({\r\n      method: \"DELETE\",\r\n      headers: {\r\n        Accept: \"application/json; charset=UTF-8\"\r\n      },\r\n    });\r\n\r\n    const response = await fetch(this.getUrl(method), init);\r\n    if (!response.ok) {\r\n      return this.handleErrors(response);\r\n    }\r\n    return await response.json();\r\n  }\r\n\r\n  /** If missing, append the API server address to the given url method string */\r\n  private getUrl(method: string): string {\r\n    if (!method || method.trim() === \"\") {\r\n      return \"\";\r\n    }\r\n    if (method.toLowerCase().startsWith(\"http\")) {\r\n      return method;\r\n    }\r\n    if (method.toLowerCase().startsWith(\"/v\")) {\r\n      return this.getServerAddress() + method;\r\n    }\r\n    return this.getApiAddress() + method;\r\n  }\r\n\r\n  private setAuthorization(options: RequestInit): RequestInit {\r\n    const token = this.getCurrentToken();\r\n    if (token) {\r\n      (options.headers as any).Authorization = \"Bearer \" + token;\r\n    } else if (this.useCredentials) {\r\n      options.credentials = \"include\";\r\n    }\r\n    return options;\r\n  }\r\n\r\n  private handleErrors(response: Response): Promise<any> {\r\n    (response as any).data = {\r\n      error: `HTTP error: ${response.statusText} (${response.status})`,\r\n      messageHtml: \"\",\r\n    };\r\n    return response.json().then((content) => {\r\n      if (content) {\r\n        (response as any).data = content;\r\n      }\r\n      return Promise.reject(response);\r\n    });\r\n  }\r\n}\r\n","import { ApiListItem, WorkerAbsences } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for Absences of a Worker\r\n */\r\nexport class Absences extends CrudApiBase<WorkerAbsences, ApiListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/absences\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(employmentId?: string, workerId?: string): WorkerAbsences {\r\n    return {\r\n      employmentId: employmentId ?? \"\",\r\n      workerId,\r\n      periods: [],\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Gets all the Worker absences objects of specified year.\r\n   * @returns A Promise with result data: The full absences objects.\r\n   */\r\n  public getLatest(): Promise<WorkerAbsences[]> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/latest`);\r\n  }\r\n\r\n  /**\r\n   * Gets the Absences for a specific employment relation.\r\n   * @param employmentId Identifier for the Employment relation.\r\n   * @returns A Promise with Absences.\r\n   */\r\n  public getForEmployment(employmentId: string): Promise<WorkerAbsences> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/employment/${employmentId}`) as Promise<WorkerAbsences>;\r\n  }\r\n\r\n  /**\r\n   * Gets the Absences for the given employment relations.\r\n   * @param employmentIds Identifiers for the Employment relations.\r\n   * @returns A Promise with result data array.\r\n   */\r\n  public getForEmployments(employmentIds: string[]): Promise<WorkerAbsences[]> {\r\n    if (employmentIds.length === 0) {\r\n      return Promise.resolve([]);\r\n    }\r\n    let method = `${this.baseUrl}/employment/set?`;\r\n    employmentIds.forEach((x) => { method += \"employmentIds=\" + encodeURIComponent(\"\" + x) + \"&\"; });\r\n    method = method.replace(/[?&]$/, \"\");\r\n    return this.ajax.getJSON(method);\r\n  }\r\n}\r\n","import { AccountingTarget, AccountingTargetListItem } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for Accounting Targets\r\n */\r\nexport class AccountingTargets extends CrudApiBase<AccountingTarget, AccountingTargetListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/accounting-target\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): AccountingTarget {\r\n    return {\r\n      info: {\r\n        availableMethods: [],\r\n        target: {\r\n          avatar: {},\r\n        },\r\n        data: {},\r\n      },\r\n      ruleSet: {\r\n        accounts: [],\r\n        rows: [],\r\n        targetCoA: [],\r\n      },\r\n      workflowData: {\r\n        events: [],\r\n      },\r\n    };\r\n  }\r\n}\r\n\r\n\r\n","import { AuthorizedAvatar, CompanyAccount, PersonAccount } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for authenticated user to access a his/her own authorized accounts\r\n */\r\nexport class AuthorizedAccounts extends CrudApiBase<AuthorizedAvatar, never> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/accounts/authorizedAccount\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns an empty avatar without any values.\r\n   */\r\n  public getBlank(): AuthorizedAvatar {\r\n    return {\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Lists all accounts on behalf of which this account has been authorized to act.\r\n   *\r\n   * @returns A Promise with result data (list of account objects).\r\n   */\r\n  public getAuthorizingAccounts(): Promise<(PersonAccount|CompanyAccount)[]> {\r\n    const method = \"/accounts/authorizingAccount\";\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /**\r\n   * Lists all accounts that have authorized the current account to act on their behalf.\r\n   * Makes a GET request to the API base URL using the configured Ajax instance.\r\n   * @returns A Promise that resolves to an array of PersonAccount and CompanyAccount objects\r\n   */\r\n  public getAll(): Promise<(PersonAccount|CompanyAccount)[]> {\r\n    return this.ajax.getJSON(this.baseUrl);\r\n  }\r\n\r\n  /**\r\n   * OData query is not supported for authorized accounts.\r\n   * @param _query OData query parameters (not used)\r\n   * @throws Error indicating operation is not supported\r\n   */\r\n  public getOData(_query: any): any {\r\n    throw new Error(\"Not supported.\");\r\n  }\r\n\r\n  /**\r\n   * Getting a single authorized account is not supported.\r\n   * @param _id Identifier of the account (not used)\r\n   * @throws Error indicating operation is not supported\r\n   */\r\n  public getSingle(_id: any): any {\r\n    throw new Error(\"Not supported.\");\r\n  }\r\n}\r\n","import {\r\n  Avatar, Calculation, CalculationRowType, CalculationRowUnit,\r\n  CalculationStatus, FrameworkAgreement,\r\n  LegalEntityType, ResultRow, SalaryKind, UserDefinedRow,\r\n} from \"../model\";\r\nimport { CalculationRowCategories } from \"./model\";\r\nimport { Configs } from \"./Configs\";\r\nimport { Numeric } from \"../util\";\r\n\r\n/**\r\n * Provides business logic related to building a salary calculator.\r\n */\r\nexport class CalculatorLogic {\r\n\r\n  /**\r\n   * Gets a UI cache object that is used for storing UI properties\r\n   * to the calculation until a roundtrip to server (technically calc.$ui).\r\n   * When a round-trip to server occurs (typically recalculate or save),\r\n   * then the property is set to null => empty object.\r\n   */\r\n  public static getUiCache(calc: Calculation): any {\r\n    if (!calc) {\r\n      return null;\r\n    }\r\n    (calc as any).$ui = (calc as any).$ui || {};\r\n    return (calc as any).$ui;\r\n  }\r\n\r\n  /**\r\n   * Gets the first row of the calculation assuring that it exists\r\n   * AND that it is a known Salary row or Unknown.\r\n   * This should be the main row of the calculation that replaces the Salary object.\r\n   * @param calc Calculation from which the row is fetched.\r\n   * @param defaultType Default type for the new item if new item needs to be added.\r\n   */\r\n  public static getSalaryRow(calc: Calculation, defaultType: CalculationRowType = CalculationRowType.Unknown): UserDefinedRow | undefined {\r\n    if (!calc) {\r\n      return undefined;\r\n    }\r\n    const allowedTypes = [\r\n      CalculationRowType.Unknown,\r\n      CalculationRowType.Compensation,\r\n      CalculationRowType.Salary,\r\n      CalculationRowType.HourlySalary,\r\n      CalculationRowType.MonthlySalary,\r\n      CalculationRowType.TotalEmployerPayment,\r\n      CalculationRowType.TotalWorkerPayment,\r\n    ];\r\n    this.moveSalaryToRows(calc);\r\n    if (!calc.rows?.find((x) => x.rowType &&allowedTypes.indexOf(x.rowType) >= 0)) {\r\n      calc.rows ??= [];\r\n      calc.rows.unshift({\r\n        rowType: defaultType,\r\n      });\r\n    }\r\n    return calc.rows.find((x) => x.rowType && allowedTypes.indexOf(x.rowType) >= 0);\r\n  }\r\n\r\n  /**\r\n   * Gets the first row of the calculation assuring that it exists.\r\n   * This should be the main row of the calculation that replaces the Salary object.\r\n   * @param calc Calculation from which the row is fetched.\r\n   */\r\n  public static getFirstRow(calc: Calculation): UserDefinedRow | undefined {\r\n    // TODO: Consider generalizing this as the basis of getSalaryRow().\r\n    if (!calc) {\r\n      return undefined;\r\n    }\r\n    this.moveSalaryToRows(calc);\r\n\r\n    if (calc.rows?.length === 0) {\r\n      calc.rows.push({\r\n        rowType: CalculationRowType.Unknown,\r\n      });\r\n    }\r\n    return calc.rows?.[0];\r\n  }\r\n\r\n  /**\r\n   * Gets a new blank object with default values, suitable for UI binding.\r\n   * This is a synchronous method - does not go to the server.\r\n   */\r\n  public static getBlank(): Calculation {\r\n    const blank: Calculation = {\r\n      employer: {\r\n        avatar: {\r\n          entityType: LegalEntityType.Undefined,\r\n          initials: \"?\",\r\n        },\r\n        isSelf: true,\r\n      },\r\n      framework: {\r\n        type: FrameworkAgreement.NotDefined,\r\n      },\r\n      info: {\r\n        applicationId:  Configs.current?.applicationId,\r\n      },\r\n      rows: [],\r\n      salary: {\r\n        kind: SalaryKind.Undefined,\r\n        price: 0\r\n      },\r\n      worker: {\r\n        avatar: {\r\n          entityType: LegalEntityType.Person,\r\n          initials: \"?\",\r\n        },\r\n        paymentData: {},\r\n        tax: {},\r\n      },\r\n      usecase: {\r\n        data: {},\r\n      },\r\n      workflow: {\r\n        status: CalculationStatus.Draft,\r\n      },\r\n      result: {\r\n        irRows: [],\r\n      },\r\n    };\r\n    return blank;\r\n  }\r\n\r\n  /**\r\n   * Returns true if calculation totals should be shown:\r\n   * If there are any such rows that the calculation result makes sense.\r\n   */\r\n  public static shouldShowTotals(calc: Calculation): boolean {\r\n    if (!calc || !calc.result || !calc.result.totals) {\r\n      return false;\r\n    }\r\n    return (calc.result?.totals?.total ?? 0) > 0;\r\n  }\r\n\r\n  /**\r\n   * Moves the salary defined in Salary object to rows collection.\r\n   * This is needed in old calculations for backward compatibility until moving to v03.\r\n   * NOTE: In v03 this will be done server-side: The Salary will be removed completely.\r\n   * @param calc Calculation to modify\r\n   */\r\n  public static moveSalaryToRows(calc: Calculation): void {\r\n    const salary = calc.salary;\r\n    if (salary && salary.price > 0) {\r\n      let rowType = CalculationRowType.Salary;\r\n      switch (salary.kind) {\r\n        case SalaryKind.Compensation:\r\n        case SalaryKind.HourlySalary:\r\n        case SalaryKind.MonthlySalary:\r\n          // The same underlying enum string\r\n          rowType = salary.kind as any;\r\n          break;\r\n        case SalaryKind.FixedSalary: // One exception\r\n          rowType = CalculationRowType.Salary;\r\n          break;\r\n        case SalaryKind.TotalEmployerPayment:\r\n        case SalaryKind.TotalWorkerPayment:\r\n        case SalaryKind.Undefined:\r\n        default:\r\n          // Should never occur => Default to Unknown, which is probably an error.\r\n          rowType = CalculationRowType.Unknown;\r\n          break;\r\n      }\r\n      if (rowType !== CalculationRowType.Unknown) {\r\n        const newRow = {\r\n          count: salary.amount,\r\n          message: salary.message,\r\n          price: salary.price,\r\n          rowIndex: -1,\r\n          rowType,\r\n          unit: rowType === CalculationRowType.HourlySalary ? CalculationRowUnit.Hours : CalculationRowUnit.Count,\r\n        };\r\n        calc.rows ??= [];\r\n        calc.rows.push(newRow);\r\n        salary.price = 0;\r\n        salary.amount = 0;\r\n        salary.kind = SalaryKind.Undefined;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the Avatar of other party in a calculation:\r\n   * Employer or Worker\r\n   */\r\n  public static getOtherParty(calc: Calculation, currentAvatar: Avatar): Avatar | undefined | null {\r\n    if (currentAvatar) {\r\n      const id = currentAvatar.id;\r\n      if (calc.worker && calc.worker.accountId !== id) {\r\n        return calc.worker.avatar;\r\n      } else if (calc.employer && calc.employer.accountId !== id) {\r\n        return calc.employer.avatar;\r\n      }\r\n    }\r\n    return {\r\n      id: undefined,\r\n      displayName: \"?\",\r\n      sortableName: \"?\",\r\n      initials: \"?\",\r\n      firstName: \"n\",\r\n      lastName: \"n\",\r\n      entityType: LegalEntityType.Undefined,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Gets a total sum for a row category from calculation results.\r\n   * @param calc - Calculation object\r\n   * @param category - Row category (collection of row types)\r\n   */\r\n  public static getTotalForCategory(calc: Calculation, category: \"baseSalary\" | \"salaryAdditions\" | \"salary\" | \"benefits\" | \"expenses\" | \"deductions\" | \"holidays\" | \"expensesSection\"): number {\r\n    let total = 0.0;\r\n    this.getResultRowsByCategory(calc, category).forEach((row) => total += (row.total ?? 0));\r\n    return total;\r\n  }\r\n\r\n  /**\r\n   * Gets a total sum for a row category from calculation results.\r\n   * @param calc - Calculation object\r\n   * @param types - Array of row types that are included in the result\r\n   */\r\n  public static getTotalForRowsByType(calc: Calculation, ...types: CalculationRowType[]): number {\r\n    let total = 0.0;\r\n    this.getResultRowsByType(calc, ...types).forEach((row) => total += (row.total ?? 0));\r\n    return total;\r\n  }\r\n\r\n  /**\r\n   * Filter the result rows of a calculation based on the type\r\n   * @param calc - Calculation object\r\n   * @param types - Array of row types that are included in the result\r\n   */\r\n  public static getResultRowsByType(calc: Calculation, ...types: CalculationRowType[]): ResultRow[] {\r\n    return (!calc.result || !calc.result.rows) ? [] : calc.result.rows.filter((value) => value.rowType && types.indexOf(value.rowType) !== -1);\r\n  }\r\n\r\n  /**\r\n   * Filter the result rows of a calculation based on a row category\r\n   * @param calc - Calculation object\r\n   * @param category - Row category (collection of row types)\r\n   */\r\n  public static getResultRowsByCategory(calc: Calculation, category: \"baseSalary\" | \"salaryAdditions\" | \"salary\" | \"benefits\" | \"expenses\" | \"deductions\" | \"holidays\" | \"expensesSection\"): ResultRow[] {\r\n    const types = CalculationRowCategories[category];\r\n    return this.getResultRowsByType(calc, ...types);\r\n  }\r\n\r\n  /**\r\n   * Returns true if there is no net salary payment to worker at all.\r\n   * @param calc - Calculation object\r\n   */\r\n   public static isZeroPayment(calc: Calculation): boolean {\r\n    const workerNetPayment = Numeric.round(Math.max(0, calc?.result?.workerCalc?.totalWorkerPayment ?? 0));\r\n    const totals =  Numeric.round(Math.max(0, calc?.result?.totals?.total ?? 0));\r\n    return  (workerNetPayment ?? 0) <= 0 && (totals ?? 0) >= 0;\r\n  }\r\n}\r\n","import { AccountingReportTableType, Calculation, CalculationRowType, CalcWorktime, HolidayYear, SalaryKind, UnionPaymentType, WorkerAbsences, YearlyChangingNumbers } from \"../model\";\r\nimport { Numeric, Years } from \"../util\";\r\nimport { Ajax } from \"./infra\";\r\n\r\n/**\r\n * Calculator is the main module for creating and modifying salary calculations.\r\n * The module can be used completely anonymously without any authentication.\r\n */\r\nexport class Calculator {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  constructor(private ajax: Ajax) {}\r\n\r\n  /**\r\n   * OBSOLETE: use CalculatorLogic.getBlank() instead.\r\n   * @deprecated Factory method to create a new calculation on server-side.\r\n   * Typically, you do not need to call server-side factory methods in JavaScript.\r\n   * Instead, you can use client-side factory methods under logic. This saves you one round-trip to server.\r\n   * @ignore\r\n   */\r\n  public createNew(): Promise<Calculation> {\r\n    return this.ajax.getJSON(\"/calculator/new\");\r\n  }\r\n\r\n  /**\r\n   * Creates a new calucation with simple salary\r\n   *\r\n   * @param kind The type of the salary.\r\n   * @param amount The amount of typically hours (could be months etc.). Defaults to 1 if left as null.\r\n   * @param price The price of one unit of amount.\r\n   * @param message Message text for end user - used in salary calculation\r\n   * @param calc The calculation object that should be updated. This is optional - often null, but can be set if you are updating an existing calculation.\r\n   *\r\n   * @returns A Promise with the recalculated Calculation.\r\n   */\r\n  public calculateSalary(kind: SalaryKind, amount: number, price: number, message: string, calc = null): Promise<Calculation> {\r\n    const method = `/calculator/salary?kind=${kind}&amount=${Numeric.parseNumber(amount)}&price=${Numeric.parseNumber(price)}&message=${message}`;\r\n    return this.ajax.postJSON(method, calc);\r\n  }\r\n\r\n  /**\r\n   * Sets a household deduction to a calculation\r\n   *\r\n   * @param calc The calculation object to which household deduction is added\r\n   * @param setHouseHoldDeductionTo Boolean to which household\r\n   *\r\n   * @returns A Promise with the recalculated Calculation.\r\n   */\r\n  public setTaxDeduction(calc: Calculation, setHouseHoldDeductionTo: boolean): Promise<Calculation> {\r\n    const method = `/calculator/taxdeduction?setHouseHoldDeduction=${setHouseHoldDeductionTo}`;\r\n    return this.ajax.postJSON(method, calc);\r\n  }\r\n\r\n  /**\r\n   * Takes in a calculation - typically with modified parameters - and recalculates it.\r\n   *\r\n   * @param calc The salary calculation that should be recalculated\r\n   *\r\n   * @returns A Promise with the recalculated Calculation.\r\n   */\r\n  public recalculate(calc: Calculation): Promise<Calculation> {\r\n    return this.ajax.postJSON(\"/calculator/recalculate\", calc);\r\n  }\r\n\r\n  /**\r\n   * Recalculates a calculation taking into account holiday year and absences from the worktime property.\r\n   * This is an anonymous method that can be used for unit testing: Does not read / write from database.\r\n   * @param calc The salary calculation that should be recalculated.\r\n   * Worktime property should contian the bases for the recalculation.\r\n   *\r\n   * @returns A Promise with the recalculated Calculation.\r\n   */\r\n  public recalculateWorktime(calc: Calculation): Promise<Calculation> {\r\n    return this.ajax.postJSON(\"/calculator/recalculate-worktime\", calc);\r\n  }\r\n\r\n  /**\r\n   * Gets the worktime data for Period recalculation from raw calc, holidays andabsences data.\r\n   * This is an anonymous method that can be used for unit testing: Does not read / write from database.\r\n   *\r\n   * @param calc The salary calculation that should be recalculated.\r\n   * @param holidayYear Holiday year with holidays that should be added as salary rows. If not provided, holidays are not calculated.\r\n   * @param absences Absences that should be deducted from monthly salary. If not provided, absences are not calculated.\r\n   *\r\n   * @returns A Promise with Worktime data.\r\n   */\r\n  public getWorktimeData(calc: Calculation, holidayYear?: HolidayYear, absences?: WorkerAbsences): Promise<CalcWorktime> {\r\n    return this.ajax.postJSON(\"/calculator/worktime\", {\r\n      calc,\r\n      holidayYear,\r\n      absences,\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Sets a unionPayment to a calculation\r\n   *\r\n   * @param calc The calculation object to which union payment is added\r\n   * @param paymentType Type of union payment, options are 'notSelected', 'raksaNormal', 'raksaUnemploymentOnly' and 'other'\r\n   * @param unionPaymentPercent How many percents the union payment is from the salary\r\n   *\r\n   * @returns A Promise with the recalculated Calculation.\r\n   */\r\n  public setUnionPayment(calc: Calculation, paymentType: UnionPaymentType, unionPaymentPercent: number): Promise<Calculation> {\r\n    const method = `/calculator/setunionpayment?paymentType=${paymentType}&unionPaymentPercent=${Numeric.parseNumber(unionPaymentPercent)}`;\r\n    return this.ajax.postJSON(method, calc);\r\n  }\r\n\r\n  /**\r\n   * Adds a calculation row: An expenses, benefits or other such row and returns the recalculated calculation with full data.\r\n   *\r\n   * @param calc The salary calculation that should be modified.\r\n   * @param rowType Type of the calculation row that should be added.\r\n   * @param message Message text for end user - used in salary calculation\r\n   * @param price Price for the row (e.g. €/h, €/km, €/month. Default is 0.\r\n   * @param count Count of the items - default is 1.\r\n   *\r\n   * @returns A Promise with the recalculated Calculation.\r\n   */\r\n  public addRow(calc: Calculation, rowType: CalculationRowType, message: string, price: number, count: number): Promise<Calculation> {\r\n    const method = `/calculator/addrow?rowType=${rowType}&message=${message}&price=${Numeric.parseNumber(price)}&count=${Numeric.parseNumber(count)}`;\r\n    return this.ajax.postJSON(method, calc);\r\n  }\r\n\r\n  /**\r\n   * Deletes a calculation row: Expenses, benefits etc. item and returns the recalculated calculation with full data.\r\n   *\r\n   * @param calc The salary calculation that should be modified.\r\n   * @param rowIndex Zero based row index of the row that should be deleted.\r\n   *\r\n   * @returns A Promise with the recalculated Calculation.\r\n   */\r\n  public deleteRow(calc: Calculation, rowIndex: number): Promise<Calculation> {\r\n    return this.ajax.postJSON(`/calculator/deleterow?rowIndex=${rowIndex}`, calc);\r\n  }\r\n\r\n  /**\r\n   * Gets salary calculation parameters that are changing yearly.\r\n   * The method is designed for the end-of-year and as such it only supports 2 years:\r\n   * the current / previous year (from Jan to Nov) OR current / next year (in approx. December).\r\n   *\r\n   * @param forYear Date for which the numbers are fetched.\r\n   *\r\n   * @returns The yearly changing numbers if year supported. Error if year not supported.\r\n   */\r\n  public getYearlyChangingNumbers(forYear: Date | string): YearlyChangingNumbers | undefined {\r\n    return Years.getYearlyChangingNumbers(forYear);\r\n  }\r\n\r\n  /**\r\n   * Experimental: Returns a new Finvoice object for the given calculations.\r\n   * @param calculations Calculations for the Finvoice.\r\n   * @param tableType Accounting table type for the generated Finvoice.\r\n   * @ignore\r\n   */\r\n  public getFinvoice(calculations: Calculation[], tableType: AccountingReportTableType  = AccountingReportTableType.Classic): Promise<any> {\r\n    const method = `/calculator/finvoice/new?tableType=${encodeURIComponent(\"\" + tableType)}`;\r\n    return this.ajax.postJSON(method, calculations);\r\n  }\r\n}\r\n","import { CalculatorLogic, } from \"../../logic/CalculatorLogic\";\r\nimport { Configs, } from \"../../logic/Configs\";\r\nimport { Calculation, CalculationListItem, CalculationSharing, CalcWorktime, irepr, SharingUriType, DocumentFlowItem } from \"../../model\";\r\nimport { Calculator } from \"../Calculator\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for authenticated user to access a his/her own calculations\r\n */\r\nexport class Calculations extends CrudApiBase<Calculation, CalculationListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. (2) */\r\n  protected baseUrl = \"/v03/api/calculations\";\r\n\r\n  private calculator: Calculator;\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n    this.calculator = new Calculator(ajax);\r\n  }\r\n\r\n  /**\r\n   * Saves an item to the storage.\r\n   * If id is null, this is add/insert. If id exists, this is update.\r\n   * @param itemToSave - The item that is updated/inserted.\r\n   * @returns A Promise with result data as saved to the storage (contains id, createAt, owner etc.).\r\n   */\r\n  public save(itemToSave: Calculation): Promise<Calculation> {\r\n    if (itemToSave?.info) {\r\n      itemToSave.info.applicationId = Configs.current?.applicationId;\r\n    }\r\n    return super.save(itemToSave);\r\n  }\r\n\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): Calculation {\r\n    return CalculatorLogic.getBlank();\r\n  }\r\n\r\n  /**\r\n   * Takes in a calculation - typically with modified parameters - and recalculates it.\r\n   * @param calc The salary calculation that should be recalculated\r\n   * @returns A Promise with the recalculated Calculation.\r\n   */\r\n  public recalculate(calc: Calculation): Promise<Calculation> {\r\n    return this.calculator.recalculate(calc);\r\n  }\r\n\r\n  /**\r\n   * Recalculates a calculation taking into account holiday year and absences from the worktime property.\r\n   * This is an anonymous method that can be used for unit testing: Does not read / write from database.\r\n   * @param calc The salary calculation that should be recalculated.\r\n   * Worktime property should contian the bases for the recalculation.\r\n   *\r\n   * @returns A Promise with the recalculated Calculation.\r\n   */\r\n  public recalculateWorktime(calc: Calculation): Promise<Calculation> {\r\n    return this.calculator.recalculateWorktime(calc);\r\n  }\r\n\r\n  /**\r\n   * Gets the worktime data for Period recalculation based on given calculation\r\n   * but fetching absences and holidays from the database.\r\n   *\r\n   * @param calc The salary calculation that should be recalculated.\r\n   * It may potentially have changes to compared to the one in database or the calc may not have even been saved.\r\n   * The calculation MUST have emloymentId and period set for calculation to work properly.\r\n   * @returns A Promise with Worktime data.\r\n   */\r\n  public getWorktimeData(calc: Calculation): Promise<CalcWorktime> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/worktime`, calc);\r\n  }\r\n\r\n  /**\r\n   * Gets the Calculation objects for the given ids.\r\n   * @param ids Identifiers for the Calculation objects.\r\n   * @returns A Promise with result data array.\r\n   */\r\n  public getMulti(ids: string[]): Promise<Calculation[]> {\r\n    if (ids == null || ids.length === 0) {\r\n      return Promise.resolve([]);\r\n    }\r\n    let method = this.baseUrl + \"/set?\";\r\n    ids.forEach((x) => { method += \"ids=\" + encodeURIComponent(\"\" + x) + \"&\"; });\r\n    method = method.replace(/[?&]$/, \"\");\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /**\r\n   * Gets the Calculations for a specific employment relation.\r\n   * @param employmentId Identifier for the Employment relation.\r\n   * @returns A Promise with Calculations.\r\n   */\r\n  public getForEmployment(employmentId: string): Promise<Calculation[]> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/employment/${employmentId}`);\r\n  }\r\n\r\n  /**\r\n   * Gets the Calculations for the given employment relations.\r\n   * @param employmentIds Identifiers for the Employment relations.\r\n   * @returns A Promise with Calculations.\r\n   */\r\n  public getForEmployments(employmentIds: string[]): Promise<Calculation[]> {\r\n    if (employmentIds == null || employmentIds.length === 0) {\r\n      return Promise.resolve([]);\r\n    }\r\n    let method = `${this.baseUrl}/employment/set?`;\r\n    employmentIds.forEach((x) => { method += \"employmentIds=\" + encodeURIComponent(\"\" + x) + \"&\"; });\r\n    method = method.replace(/[?&]$/, \"\");\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /**\r\n   * Updates a calculation from employment relation by deleting all the rows and re-setting the employment.\r\n   * @param calc Calculation to update.\r\n   * @param save If true, saves the calculation. If false, only recalculates. Returns the result in any case.\r\n   * @param updateRows If true, updates also the default salary rows from employment data to calculation.\r\n   * False updates only other employment data IBAN, phone, E-mail, pension insurance code message etc.\r\n   * @returns The updated and saved or recalculated calculation\r\n   */\r\n  public updateFromEmployment(calc: Calculation, save: boolean, updateRows: boolean): Promise<Calculation> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/update-from-employment?save=${save}&updateRows=${updateRows}`, calc);\r\n  }\r\n\r\n  /**\r\n   * Updates (saves) the employment related information from Calculation to Employment relation.\r\n   * Currently only updates rows, OccupationCode and WorkDescription.\r\n   * @param calc Calculation to update.\r\n   */\r\n  public updateToEmployment(calc: Calculation): Promise<void> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/update-to-employment`, calc);\r\n  }\r\n\r\n  /**\r\n   * Shares the calculation.\r\n   * @param id Id for the calculation to share.\r\n   * @param type Type of the sharing action or link.\r\n   * @param employerId Id of the employer to share the calculation with.\r\n   * @param to Email address of the employer.\r\n   * @param cc Cc address for the email.\r\n   * @param message Message to the employer.\r\n   * @returns Sharing object of the calculation.\r\n   */\r\n  public share(id: string, type: SharingUriType = SharingUriType.Undefined, employerId: string | null = null, to: string | null = null, cc: string | null = null, message: string | null = null): Promise<CalculationSharing> {\r\n    let method = `${this.baseUrl}/sharing/${id}?type=${encodeURIComponent(type)}${employerId ? \"&employerId=\" + encodeURIComponent(employerId) : \"\"}`;\r\n    method += `${to ? \"&to=\" + encodeURIComponent(to) : \"\"}${cc ? \"&cc=\" + encodeURIComponent(cc) : \"\"}${message ? \"&message=\" + encodeURIComponent(message) : \"\"}`;\r\n    return this.ajax.postJSON(method, null);\r\n  }\r\n\r\n  /**\r\n   * Notifies the employer from the shared calculation.\r\n   * @param id Id of the shared calculation.\r\n   * @param to Email address of the employer.\r\n   * @param cc Cc address for the email.\r\n   * @param message Message to the employer.\r\n   * @returns True, if the send action was successful.\r\n   */\r\n  public notifySharing(id: string, to: string | null = null, cc: string | null = null, message: string | null = null): Promise<boolean> {\r\n    let method = `${this.baseUrl}/sharing/${id}/notification?`;\r\n    method += `${to ? \"&to=\" + encodeURIComponent(to) : \"\"}${cc ? \"&cc=\" + encodeURIComponent(cc) : \"\"}${message ? \"&message=\" + encodeURIComponent(message) : \"\"}`;\r\n    return this.ajax.postJSON(method, null);\r\n  }\r\n\r\n  /**\r\n   * Cancels the invoice or payment processing for the given calculation.\r\n   * Please note that this is possible only if the channel supports the cancel action.\r\n   * @param id Calculation for which the cancellation is requested.\r\n   * @returns Calculation which have been cancelled.\r\n   */\r\n  public cancel(id: string): Promise<Calculation> {\r\n    const url = `${this.baseUrl}/cancel/${id}`;\r\n    return this.ajax.getJSON(url);\r\n  }\r\n\r\n  /**\r\n   * Creates a copy of an existing calculation.\r\n   * @param id The ID of the calculation to copy.\r\n   * @returns A Promise containing the newly created copy of the calculation.\r\n   */\r\n  public copy(id: string): Promise<Calculation> {\r\n    const url = `${this.baseUrl}/copy/${id}`;\r\n    return this.ajax.getJSON(url);\r\n  }\r\n\r\n  /**\r\n   * Saves the IR -related data of the calculation.\r\n   * This operation can be done even if the calculation otherwise is in read only state.\r\n   * @param calculation Calculation object to save.\r\n   */\r\n  public saveIr(calculation: Calculation): Promise<Calculation> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/ir`, calculation);\r\n  }\r\n\r\n  /**\r\n   * Converts the given calculation to an earnings payment report.\r\n   * @param calculation - Calculation object.\r\n   * @returns A Promise with earnings payment report data.\r\n   */\r\n  public convertToEpr(calculation: Calculation): Promise<irepr.EarningsPayment> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/epr`, calculation);\r\n  }\r\n\r\n  /**\r\n   * Returns the earnings payment report for the given calculation.\r\n   * @param id Id of the calculation for the earnings payment report.\r\n   * @returns Earnings payment report for the calculation.\r\n   */\r\n  public getEpr(id: string): Promise<irepr.EarningsPayment> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/epr/${id}`);\r\n  }\r\n\r\n  /**\r\n   * Starts the repair process for the calculation.\r\n   * Returns a new modifiable copy of the calculation to be repaired.\r\n   * @param id Calculation for which the repair is requested.\r\n   * @returns A modifiable copy of the calculation to be repaired.\r\n   */\r\n  public startRepair(id: string): Promise<Calculation> {\r\n    const url = `${this.baseUrl}/repair/${id}`;\r\n    return this.ajax.getJSON(url);\r\n  }\r\n\r\n  /**\r\n   * Commits the repairs for the calculation.\r\n   * @param calculation Calculation which contains the repaired data.\r\n   * @returns A repaired version of the calculation which was repaired.\r\n   */\r\n  public commitRepair(calculation: Calculation): Promise<Calculation> {\r\n    const url = `${this.baseUrl}/repair/commit`;\r\n    return this.ajax.postJSON(url, calculation);\r\n  }\r\n\r\n  /**\r\n   * Saves the repairs for the calculation.\r\n   * @param calculation Calculation which contains the repaired data.\r\n   * @returns The saved repair calculation.\r\n   */\r\n  public saveRepair(calculation: Calculation): Promise<Calculation> {\r\n    const url = `${this.baseUrl}/repair`;\r\n    return this.ajax.postJSON(url, calculation);\r\n  }\r\n\r\n  /**\r\n   * Recalculates the repair for the calculation.\r\n   * @param calculation Calculation which contains the repaired data.\r\n   * @returns The recalculated repair calculation.\r\n   */\r\n  public recalculateRepair(calculation: Calculation): Promise<Calculation> {\r\n    const url = `${this.baseUrl}/repair/recalculate`;\r\n    return this.ajax.postJSON(url, calculation);\r\n  }\r\n\r\n  /**\r\n   * Returns the document flow for the given calculation.\r\n   * Documentflow contains invoices, earnings payment reports, payer suymmary reports and payrolls refering to the calculation.\r\n   * @param id Id of the calculation for the document flow.\r\n   * @returns Document flow for the calculation.\r\n   */\r\n  public getDocumentFlow(id: string): Promise<DocumentFlowItem> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/${id}/document-flow`);\r\n  }\r\n}","import { CalendarEvent, CalendarEventListItem } from \"../../model\";\r\nimport { DatelyObject, Dates } from \"../../util\";\r\nimport { Ajax } from \"../infra/Ajax\";\r\nimport { CrudApiBase } from \"../infra/CrudApiBase\";\r\n\r\n/**\r\n * Provides CRUD access for Calendar events and other calendar methods.\r\n */\r\nexport class CalendarEvents extends CrudApiBase<CalendarEvent, CalendarEventListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/calendar/events\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): CalendarEvent {\r\n    return {\r\n      event: {\r\n        isAllDay: true, // By default, we have all-day events of one day.\r\n        start: Dates.getToday(),\r\n        end: Dates.getToday(),\r\n        duration: \"1\",\r\n        actions: [],\r\n        attachments: [],\r\n        attendees: [],\r\n        categories: [],\r\n        recurrenceRules: [],\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Recalculates the occurence info based on the event.\r\n   * This is an anonymous method that does not commit anything to database.\r\n   * @param event Calendar event to recalculate.\r\n   * @param start Start of the period for which the events are fetched and occurences are calculated.\r\n   * If null, period is set 1 year before today. Max history/future 3 years. Max period 24 months.\r\n   * @param end End of the period for which the occurences are calculated.\r\n   * @returns A Promise with result data: The calendar event with occurenceInfo recalculated.\r\n   */\r\n  public recalculate(event: CalendarEvent, start: DatelyObject | null = null, end: DatelyObject | null = null): Promise<CalendarEvent> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/recalculate?start=${Dates.asDate(start) || \"\"}&end=${Dates.asDate(end) || \"\"}`, event);\r\n  }\r\n}\r\n","import { Certificate, IssuedCertificate } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for authenticated user to access a his/her own Certificates\r\n */\r\nexport class Certificates extends CrudApiBase<Certificate, never> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/accounts/certificate\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns an empty certificate without any values.\r\n   */\r\n  public getBlank(): Certificate {\r\n    return {};\r\n  }\r\n\r\n  /**\r\n   * Issues a new certificate for the account\r\n   * @param certificate The certificate to issue\r\n   * @param options Optional parameters for the issue operation\r\n   * @returns A Promise containing the issued certificate\r\n   */\r\n  public issueSertificate(certificate: Certificate, options: any = undefined): Promise<Certificate> {\r\n    return this.save(certificate, options);\r\n  }\r\n\r\n  /**\r\n   * Issues a new certificate for the account and provides the certificate in PEM format.\r\n   * For this method, also the Certificate Signing Request (CSR) may be passed in the certificate Text field.\r\n   * @param certificate A certificate object containing title for the new certificate.\r\n   * You may also pass the Certificate Signing Request (CSR) in the Password field. In this case the private key is not returned by the method.\r\n   * @returns PEM files in zip: crt (public key / certificate), key (private key) and (both in one pem file).\r\n   */\r\n  public issuePemCertificate(certificate: Certificate): Promise<IssuedCertificate> {\r\n    return this.ajax.postJSON(this.getUrlWithOptions(this.baseUrl + \"/pem\", undefined), certificate);\r\n  }\r\n\r\n  /**\r\n   * Gets all certificates from the API.\r\n   * @returns A Promise that resolves to an array of Certificate objects.\r\n   */\r\n  public getAll(): Promise<Certificate[]> {\r\n    return this.ajax.getJSON(this.baseUrl);\r\n  }\r\n\r\n  /**\r\n   * OData query is not supported for certificates.\r\n   * @param _query OData query parameters (not used)\r\n   * @throws Error indicating operation is not supported\r\n   */\r\n  public getOData(_query: any): any {\r\n    throw new Error(\"Not supported.\");\r\n  }\r\n\r\n  /**\r\n   * Getting a single certificate is not supported.\r\n   * @param _id Identifier of the certificate (not used)\r\n   * @throws Error indicating operation is not supported\r\n   */\r\n  public getSingle(_id: any): any {\r\n    throw new Error(\"Not supported.\");\r\n  }\r\n\r\n}\r\n","import { SessionUserCredential } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for authenticated user to access all credentials which can access this account.\r\n */\r\nexport class Credentials extends CrudApiBase<SessionUserCredential, never> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/accounts/credential\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns an empty credential without any values.\r\n   */\r\n  public getBlank(): SessionUserCredential {\r\n    return {};\r\n  }\r\n\r\n  /**\r\n   * Returns the url where to post the avatar file\r\n   */\r\n  public getAvatarUploadUrl(credentialId: string): string {\r\n\r\n    return this.ajax.getServerAddress()\r\n    +  this.baseUrl\r\n    + (credentialId ? `/${credentialId}` : \"\" )\r\n    + \"/avatar\";\r\n  }\r\n\r\n  /**\r\n   * Gets all credentials from the API.\r\n   * @returns A Promise that resolves to an array of SessionUserCredential objects.\r\n   */\r\n  public getAll(): Promise<SessionUserCredential[]> {\r\n    return this.ajax.getJSON(this.baseUrl);\r\n  }\r\n\r\n  /**\r\n   * OData query is not supported for credentials.\r\n   * @param _query OData query parameters (not used)\r\n   * @throws Error indicating operation is not supported\r\n   */\r\n  public getOData(_query: any): any {\r\n    throw new Error(\"Not supported.\");\r\n  }\r\n\r\n  /**\r\n   * Getting a single credential is not supported.\r\n   * @param _id Identifier of the credential (not used)\r\n   * @throws Error indicating operation is not supported\r\n   */\r\n  public getSingle(_id: any): any {\r\n    throw new Error(\"Not supported.\");\r\n  }\r\n\r\n}\r\n","import { CustomerInvoice, CustomerInvoiceListItem } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for Customer invoices\r\n */\r\nexport class CustomerInvoices extends CrudApiBase<CustomerInvoice, CustomerInvoiceListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03-rc/api/customer-invoices\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): CustomerInvoice {\r\n    return {\r\n      info: {},\r\n      bases: [],\r\n      invoice: {\r\n        rows: [],\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Saves an item to the storage.\r\n   * NOTE: Access to this method is very restricted by design as invoces are created by Palkkaus and cannot be modified by the Customer.\r\n   * Typically, you will not be able to save customer invoices in the production environment.\r\n   * @param itemToSave - The item that is updated/inserted.\r\n   * @returns A Promise with result data as saved to the storage (contains id, createAt, owner etc.).\r\n   */\r\n  public save(itemToSave: CustomerInvoice): Promise<CustomerInvoice> {\r\n    return super.save(itemToSave);\r\n  }\r\n}\r\n","import { Ajax, CrudApiBase } from \"../infra\";\r\nimport { Dataset, DatasetListItem, DatasetStatus } from \"../../model\";\r\n\r\n/**\r\n * Provides CRUD access to datasets.\r\n */\r\nexport class Datasets extends CrudApiBase<Dataset, DatasetListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/datasets\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): Dataset {\r\n    return {\r\n      info: {\r\n        status: DatasetStatus.Draft,\r\n      },\r\n      data: [],\r\n      workflowData: {\r\n        events: [],\r\n      },\r\n      usecase: {\r\n        data: {},\r\n      },\r\n    };\r\n  }\r\n}\r\n","/**\r\n * Defines the supported cultures in the user interfaces and logic.\r\n * Cultures define how e.g. numbers and dates are presented.\r\n * Currently only imports / exports support Cultures: Finnish culture is used typically in English and Swedish user interfaces.\r\n */\r\nexport enum Culture {\r\n  /** Finnish culture. Number 12,34 / Date: 1.2.2020 / CSV separator is semi-colon (\";\"). */\r\n  Fi = \"fi\",\r\n  /** International (en-US) culture. Number 12.34 / Date: 2020-02-01 / CSV separator is comma (\",\"). */\r\n  En = \"en\",\r\n}","import { JsonSchemaUtils, Objects } from \"../../util\";\r\nimport { OpenAPIV3 } from \"../../@types\";\r\nimport { InputEnumOption } from \"../../ui/InputEnumOption\";\r\n\r\n/** Defines either source or target in DataMapper */\r\nexport class DataMapperMember<T> {\r\n\r\n  /** Name of the member, typically the typeName in schema. */\r\n  public name: string;\r\n\r\n  /** Schema for the member IF explicitly set. */\r\n  public schema: OpenAPIV3.NonArraySchemaObject;\r\n\r\n  /** The value of the member. */\r\n  public value: T[];\r\n\r\n  /** If true, the member is two dimensional table, not a hierarchical object. */\r\n  public isTable: boolean;\r\n\r\n  /**\r\n   * Gets the schema either based on the defined schema or based on set data value if explicit schema is defined.\r\n   * @param typeResolve If \"guess\" will attempt to guess the data type/format based on the value.\r\n   * Otherwise, uses string type for all items.\r\n   */\r\n  public getSchema(typeResolve: \"string\" | \"guess\" = \"guess\"): OpenAPIV3.NonArraySchemaObject | undefined {\r\n    if (this.schema) {\r\n      return this.schema;\r\n    }\r\n    if (this.value?.length) {\r\n      return JsonSchemaUtils.guessSchema(this.value[0]!, typeResolve);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Gets the keys of first-level items in the data based on getSchema (cached).\r\n   */\r\n  public get keys(): string[] {\r\n    this.assureKeys();\r\n    return this.$cache.keys;\r\n  }\r\n\r\n  /**\r\n   * Gets all the properties (the entire tree) from the schema.\r\n   * Values are InputEnumOptions (typically used in UI) where value and text are\r\n   * the property path, e.g. \"owner.avatar.sortableName\" and title shows the title or description from the schema.\r\n   */\r\n  public get allKeys(): InputEnumOption {\r\n    this.assureKeys();\r\n    return this.$cache.allKeys;\r\n  }\r\n\r\n  private assureKeys() {\r\n    if (!Objects.equal(this.schema || this.value?.[0] , this.$cache.schema)) {\r\n      const schema = this.getSchema();\r\n      if (!schema?.properties) {\r\n        this.$cache.keys = [];\r\n        this.$cache.allKeys = [];\r\n      } else {\r\n        this.$cache.keys = Object.keys(schema.properties);\r\n        this.$cache.allKeys = JsonSchemaUtils.getAllProperties(schema);\r\n      }\r\n      this.$cache.schema = this.schema || this.value?.[0];\r\n    }\r\n  }\r\n\r\n  private $cache: any = {};\r\n\r\n}","import { OpenAPIV3 } from \"../../@types\";\r\nimport { JsonSchemaProperty, JsonSchemaUtils, Objects } from \"../../util\";\r\n\r\n/**\r\n * Selector for mapping from source to target.\r\n * @param <TSource> Type of the source object (root level).\r\n * @param <TTarget> Type of the target object (root level).\r\n */\r\nexport class DataMapperSelector<TSource, TTarget> {\r\n\r\n  /**\r\n   * Default constructor creates a new DataMapperSelector.\r\n   * @param source The source field / path\r\n   * @param target The target field / path\r\n   * @param func Optional function that maps from source to target.\r\n   */\r\n  public constructor(source: string | undefined = undefined, target: string | undefined = undefined, func: undefined | ((source: TSource, target: TTarget, selector: DataMapperSelector<TSource, TTarget>) => any) = undefined) {\r\n    this.source = source;\r\n    this.target = target;\r\n    this.func = func;\r\n  }\r\n\r\n  /** The path for selecting the source */\r\n  public source: string | undefined;\r\n\r\n  /** The path for selecting the target */\r\n  public target: string | undefined;\r\n\r\n  /** The JSON schema property, if found, after the selectors have been resolved */\r\n  public sourceProp: JsonSchemaProperty | undefined;\r\n\r\n  /** The JSON schema property, if found, after the selectors have been resolved */\r\n  public targetProp: JsonSchemaProperty | undefined;\r\n\r\n  /** Hierarchy in the source object that is flattened to the target. */\r\n  public flatten: DataMapperSelector<TSource, TTarget>[];\r\n\r\n  /**\r\n   * Custom function for data mapping.\r\n   * @param source The source object (root level).\r\n   * @param target The target object (root level): Possibility to set other fields than just the target field.\r\n   * @param selector This selector object: can be used e.g. for fetching source and target paths for generic functions.\r\n   * @returns The value that will be set to the target field of the target object.\r\n   */\r\n  public func?: (source: TSource, target: TTarget, selector: DataMapperSelector<TSource, TTarget>) => any;\r\n\r\n  /**\r\n   * Resolves the selector, i.e. sets the sourceProp and targetProp for types.\r\n   * @param sourceRootSchema Root source schema of the DataMapper or Item schema for flatten selector.\r\n   * @param targetRootSchema Root target schema of the DataMapper\r\n   */\r\n  public resolve(sourceRootSchema: OpenAPIV3.NonArraySchemaObject | undefined, targetRootSchema: OpenAPIV3.NonArraySchemaObject | undefined): void {\r\n    this.sourceProp = sourceRootSchema && this.source ? JsonSchemaUtils.getProperty(sourceRootSchema, this.source) : undefined;\r\n    this.targetProp = targetRootSchema && this.target ? JsonSchemaUtils.getProperty(targetRootSchema, this.target) : undefined;\r\n    if (this.flatten?.length) {\r\n      const flattenSourceSchema = (this.sourceProp?.schema as OpenAPIV3.ArraySchemaObject).items as OpenAPIV3.NonArraySchemaObject;\r\n      this.flatten.forEach((child) => child.resolve(flattenSourceSchema, targetRootSchema));\r\n    }\r\n  }\r\n\r\n  /** Does the mapping from source to target */\r\n  public doMap(source: TSource, target: TTarget): void {\r\n    if (this.flatten) {\r\n      return; // Flattening is handled on the parent level (as multiple items is needed).\r\n    }\r\n    let value = null;\r\n    if (this.func) {\r\n      value = this.func(source, target, this);\r\n    } else if (this.source?.trim()) {\r\n      value = Objects.getProperty(source, this.source);\r\n    }\r\n    if (this.target?.trim()) {\r\n      try {\r\n        // TODO: Handle type conversions here\r\n        Objects.setProperty(target, this.target, value);\r\n      } catch (ex) {\r\n        // TODO: Consider adding a validation error here.\r\n      }\r\n    }\r\n  }\r\n}","import { JsonSchemaCache, JsonSchemaUtils, Objects } from \"../../util\";\r\nimport { OpenAPIV3 } from \"../../@types\";\r\nimport { DataMapperMember } from \"./DataMapperMember\";\r\nimport { DataMapperSelector } from \"./DataMapperSelector\";\r\n\r\n/**\r\n * Defines a data mapper that maps data from a Data Source to Data Target.\r\n */\r\nexport class DataMapper<TSource, TTarget> {\r\n\r\n  /** Unique ID or uri for the mapper */\r\n  public uri: string;\r\n\r\n  /** Description for the mapper: Shown in the selection list. */\r\n  public title: string = \"\";\r\n\r\n  /** Defines the data source */\r\n  public source: DataMapperMember<TSource>;\r\n\r\n  /** Defines the target for the mapping */\r\n  public target: DataMapperMember<TTarget>;\r\n\r\n  /** The actual map: The selectors that map from source to target. */\r\n  public map: DataMapperSelector<TSource, TTarget>[];\r\n\r\n  /**\r\n   * If true, this is a list item mapper: Exportable.list() is used directly instead of\r\n   * calling Exportable.getSingle() when exporting and export is done directly without wizard and preview.\r\n   * RowType is also ApiListItem or derived from it.\r\n   */\r\n  public isSourceAList = false;\r\n\r\n  /**\r\n   * Constructor creates a new empty DataMapper.\r\n   * You typically need to call at least setSchema() (source or target) and ten create the map using one of the methods.\r\n   * @param uri Unique URI for the mapper\r\n   * @param title Translated end-user title for the mapper\r\n   */\r\n  public constructor(uri: string, title: string) {\r\n    this.uri = uri;\r\n    this.title = title;\r\n  }\r\n\r\n  /** Resolves all the schemas in the selectors. */\r\n  public resolve(): void {\r\n    this.map.forEach((selector) => {\r\n      selector.sourceProp = undefined;\r\n      selector.targetProp = undefined;\r\n      selector.resolve(this.source?.getSchema(), this.target?.getSchema());\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Does the mapping from source to target.\r\n   * @param sourceValue Optional source value that is mapped. If not specified, existing source.value is used.\r\n   * @returns The results of the mapping.\r\n   */\r\n  public doMap(sourceValue: TSource[] | undefined = undefined): TTarget[] {\r\n    this.target ??= new DataMapperMember();\r\n    this.target.value = [];\r\n    this.source ??= new DataMapperMember();\r\n    if (sourceValue) {\r\n      this.source.value = sourceValue;\r\n    }\r\n    this.source.value = this.source.value || [];\r\n    this.source.value.forEach((sourceRow) => {\r\n      const flattener = this.map.find((x) => x.flatten?.length);\r\n      if (flattener) {\r\n        // Only first level of flattening supported => Add hierarchy if necessary\r\n        const flattenItems = Objects.getProperty(sourceRow, flattener.source!) as any[];\r\n        flattenItems.forEach((flattenRow) => {\r\n          const targetRow: any = {};\r\n          this.target.value.push(targetRow);\r\n          this.map.forEach((x) => x.doMap(sourceRow, targetRow));\r\n          flattener.flatten.forEach((x) => x.doMap(flattenRow, targetRow));\r\n        });\r\n      } else {\r\n        const targetRow: any = {};\r\n        this.target.value.push(targetRow);\r\n        this.map.forEach((x) => x.doMap(sourceRow, targetRow));\r\n      }\r\n    });\r\n    return this.target.value;\r\n  }\r\n\r\n  /**\r\n   * Gets a simple key-to-key mapper for a schema object: no field conversion, just defining the columns and types.\r\n   * @param schema The schema that defineses the columns for the mapping.\r\n   * @param type The row type name (technical).\r\n   */\r\n  public setStringToSchemaMapping(schema: OpenAPIV3.NonArraySchemaObject, type: string): void {\r\n    this.setSchema(schema, type, \"target\");\r\n    const map = {};\r\n    Object.keys(schema?.properties || {}).forEach((key) => {\r\n      map[key] = key;\r\n    });\r\n    this.setPaths(map);\r\n    // TODO: Add support for source type as string and type conversion => Use SxyGridController.convertTypes()\r\n    this.generateSchema(type + \"Import\", \"source\");\r\n  }\r\n\r\n  /**\r\n   * Sets a schema in one of the members using the schema cache.\r\n   * Creates the member if none exists and also sets the isTable based on the schema.\r\n   * @param schemaCache The schema cache from which the schema is fetched.\r\n   * @param schemaDoc The URL for the Schema document that contains the schema\r\n   * @param schemaName Name of the schema\r\n   * @param member If set to \"target\", sets the target schema. Sets the source schema by default.\r\n   */\r\n  public async setSchemaFromCache(schemaCache: JsonSchemaCache, schemaDoc: string, schemaName: string, member: \"source\" | \"target\" = \"source\")\r\n    : Promise<void> {\r\n    await schemaCache.assureSchemaDocument(schemaDoc);\r\n    const schema = schemaCache.findSchema(schemaDoc, schemaName) as OpenAPIV3.NonArraySchemaObject;\r\n    this.setSchema(schema, schemaName, member);\r\n  }\r\n\r\n  /**\r\n   * Sets the schema for the given member.\r\n   * Creates the member if none exists and also sets the isTable based on the schema.\r\n   * @param schema Schema to set into a member\r\n   * @param schemaName Name of the schema\r\n   * @param member Member to set.\r\n   */\r\n  public setSchema(schema: OpenAPIV3.NonArraySchemaObject, schemaName: string, member: \"source\" | \"target\" = \"source\"): void {\r\n    let newMember: DataMapperMember<any>;\r\n    if (member == \"target\") {\r\n      newMember = this.target = this.target || new DataMapperMember();\r\n    } else {\r\n      newMember = this.source = this.source || new DataMapperMember();\r\n    }\r\n    newMember.schema = schema;\r\n    newMember.name = schemaName;\r\n    newMember.isTable = JsonSchemaUtils.isTable(schema);\r\n  }\r\n\r\n  /**\r\n   * Generates one schema based on another using the paths as mappers.\r\n   * @param name Name for the new schema\r\n   * @param member The member that is being generated based on the other member.\r\n   */\r\n  public generateSchema(name: string, member: \"source\" | \"target\" = \"target\"): void {\r\n    let srcMember: DataMapperMember<any>;\r\n    let newMember: DataMapperMember<any>;\r\n    if (member == \"target\") {\r\n      this.target = this.target || new DataMapperMember<any>();\r\n      newMember = this.target;\r\n      srcMember = this.source;\r\n    } else {\r\n      this.source = this.source || new DataMapperMember<any>();\r\n      newMember = this.source;\r\n      srcMember = this.target;\r\n    }\r\n    newMember.name = name;\r\n    newMember.isTable = true;\r\n    newMember.schema = {\r\n      description: `Schema ${name} generated based on ${srcMember.name} and paths mapper.`,\r\n      type: \"object\",\r\n      format: newMember.isTable ? \"table\" : newMember.name,\r\n      properties: {},\r\n    };\r\n    this.map.forEach((selector) => {\r\n      if (selector.flatten?.length) {\r\n        if (member == \"source\") {\r\n          throw new Error(`Only target generation supported for selectors with flatten ${name}.`);\r\n        }\r\n        selector.flatten.forEach((flattenSelector) => {\r\n          flattenSelector.targetProp = flattenSelector.sourceProp;\r\n          const flattenKey = flattenSelector.target || flattenSelector.source;\r\n          if (flattenKey && flattenKey.indexOf(\".\") > -1) {\r\n            (newMember.schema as any).sxyERROR = `Schema generation does not support hierarchical paths, e.g. ${flattenKey}. See console for all errors.`;\r\n            console.error(`Schema generation (flatten) does not support hierarchical paths: ${flattenKey}`);\r\n          } else {\r\n            newMember.schema.properties ??= {};\r\n            if (flattenKey) {\r\n              newMember.schema.properties[flattenKey] = flattenSelector.sourceProp?.schema ?? {};\r\n            }\r\n          }\r\n        });\r\n      } else {\r\n        if (member == \"target\") {\r\n          selector.targetProp = selector.sourceProp;\r\n        } else {\r\n          selector.sourceProp = selector.targetProp;\r\n        }\r\n        const key = member == \"target\" ? selector.target : selector.source;\r\n        if (key) {\r\n          if (key.indexOf(\".\") > -1) {\r\n            (newMember.schema as any).sxyERROR = `Schema generation does not support hierarchical paths, e.g. ${key}. See console for all errors.`;\r\n            console.error(`Schema generation does not support hierarchical paths: ${key}`);\r\n          } else {\r\n            newMember.schema.properties = newMember.schema.properties ?? {};\r\n            newMember.schema.properties[key] = selector.sourceProp?.schema ?? {}; // Both source and target should be the same at this point.\r\n            //x-salaxy- extensions\r\n            if (selector.sourceProp) {\r\n              newMember.schema.properties[key][\"x-salaxy-title\"] = `SALAXY.MODEL.${selector.sourceProp?.parentName}.${selector.sourceProp?.propertyName}.title`;\r\n              newMember.schema.properties[key][\"x-salaxy-description\"] = `SALAXY.MODEL.${selector.sourceProp?.parentName}.${selector.sourceProp?.propertyName}.description`;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Sets selectors with paths to both target and source using a key-value pair object.\r\n   * @param paths Paths as object where each key is a source path and value is\r\n   * either a target path or selector (key is selector source if not set in the selector).\r\n   */\r\n  public setPaths(paths: { [key: string]: string | DataMapperSelector<any, any> }): void {\r\n    // TODO: Support hierarchical paths object?\r\n    if (!paths) {\r\n      return;\r\n    }\r\n    this.map = [];\r\n    Object.keys(paths).forEach((key) => {\r\n      let selector = new DataMapperSelector();\r\n      if (paths[key] && typeof paths[key] === \"object\") {\r\n        selector = paths[key] as DataMapperSelector<any, any>;\r\n      } else {\r\n        selector.target = paths[key] as string;\r\n      }\r\n      selector.source = selector.source || key;\r\n      this.map.push(selector);\r\n    });\r\n    if (!this.target) {\r\n      // TODO: Support situation when both schemas are not known => optionally, guess the schema.\r\n      this.target = new DataMapperMember();\r\n    }\r\n    this.resolve();\r\n  }\r\n\r\n  /**\r\n   * Reverses the source / target.\r\n   * Can be used for creating two mappers from the same definition: One for import, one for export.\r\n   * @param uri Uri for the new reversed object.\r\n   * @param title Treanslated end-user title for the new object.\r\n   * @param isSourceAList If true, the reversed mapper is a list item mapper: Exportable.list() is used directly instead of\r\n   * calling Exportable.getSingle() when exporting and export is done directly without wizard and preview.\r\n   * RowType is also ApiListItem or derived from it.\r\n   */\r\n  public reverse(uri: string, title: string, isSourceAList = false): DataMapper<TTarget, TSource> {\r\n    const result = new DataMapper<TTarget, TSource>(uri, title);\r\n    result.target = this.source;\r\n    result.source = this.target;\r\n    result.isSourceAList = isSourceAList;\r\n    result.map = this.reverseChildren(this.map || []);\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Creates the Map based on source schema and property paths within that schema.\r\n   * Also the target schema is created based these two.\r\n   * Before calling this method, the source schema must be set or the method fails.\r\n   * @param paths Array of paths that are used in creating the mapper\r\n   * @param targetSchemaName Name for the new target schema.\r\n   */\r\n  public setPathsFromSourceSchema(paths: string[], targetSchemaName: string | undefined = undefined): void {\r\n    if (!this.source?.schema) {\r\n      throw new Error(\"Schema not set in setPathsFromSourceSchema().\");\r\n    }\r\n    const name = targetSchemaName || (this.source.name + \"_mapperTarget\");\r\n    const schema: OpenAPIV3.NonArraySchemaObject = {\r\n      description: `Schema ${name} generated based on ${this.source.name} and paths mapper.`,\r\n      type: \"object\",\r\n      format: \"table\",\r\n      properties: {},\r\n    };\r\n    this.map = [];\r\n    paths.forEach((path) => {\r\n      const selector = new DataMapperSelector();\r\n      selector.source = path;\r\n      const prop = JsonSchemaUtils.getProperty(this.source.schema, path);\r\n      // TODO: Handle situation of duplicate headers (last part of the path).\r\n      if (prop?.propertyName) {\r\n        selector.target = prop.propertyName;\r\n        schema.properties = schema.properties ?? {};\r\n        schema.properties[prop.propertyName] = prop.schema;\r\n        this.map.push(selector);\r\n      }\r\n    });\r\n    this.setSchema(schema, name, \"target\");\r\n    this.resolve();\r\n  }\r\n\r\n  private reverseChildren(originalChildren: DataMapperSelector<TSource, TTarget>[]): DataMapperSelector<TTarget, TSource>[] {\r\n    return (originalChildren || []).map((orig) => {\r\n      const inv = new DataMapperSelector<TTarget, TSource>();\r\n      inv.func = undefined;\r\n      inv.source = orig.target;\r\n      inv.sourceProp = orig.targetProp;\r\n      inv.target = orig.source;\r\n      inv.targetProp = orig.sourceProp;\r\n      if (orig.flatten?.length) {\r\n        throw new Error(\"Not supported: Cannot reverse a DataMapperSelector with flatten\");\r\n      }\r\n      return inv;\r\n    });\r\n  }\r\n}\r\n","import { EnumerationsLogic } from \"../EnumerationsLogic\";\r\nimport { Calculation, CalculationListItem } from \"../../model\";\r\nimport { JsonSchemaCache } from \"../../util\";\r\nimport { Translations } from \"../Translations\";\r\nimport { DataMapper } from \"./DataMapper\";\r\nimport { DataMapperInfo } from \"./DataMapperInfo\";\r\nimport { DataMapperSelector } from \"./DataMapperSelector\";\r\nimport { CalculationsDataRow } from \"./data/CalculationsDataRow\";\r\n\r\n/**\r\n * Provides in-built logc for data mappers.\r\n */\r\nexport class DataMappersLogic {\r\n\r\n  /**\r\n   * Gets the MapperInfo from a full DataMapper.\r\n   * @param mapper The full mapper.\r\n   * @returns The info part of the mapper.\r\n   */\r\n  public static getInfo(mapper: DataMapper<any, any>): DataMapperInfo | undefined {\r\n    if (!mapper) {\r\n      return undefined;\r\n    }\r\n    return {\r\n      sourceSchema: mapper.source.name,\r\n      targetSchema: mapper.target.name,\r\n      title: mapper.title,\r\n      uri: mapper.uri,\r\n    };\r\n  }\r\n\r\n  /** Gets the mappers for specific sources / targets. */\r\n  public static getMappers(sourceFilter?: string[], targetFilter?: string[]): DataMapperInfo[] {\r\n    return this.getBuiltInMappers().filter((mapper) =>\r\n      (!sourceFilter?.length || sourceFilter.find(x => x == mapper.sourceSchema)) &&\r\n      (!targetFilter?.length || targetFilter.find(x => x == mapper.targetSchema))\r\n    );\r\n  }\r\n\r\n  /** Gets the listing of all in-built data mappers in @salaxy/core library. */\r\n  public static getBuiltInMappers(): DataMapperInfo[] {\r\n    return [\r\n      {\r\n        uri: \"@salaxy/core/WorkerListItem_Default\",\r\n        title: Translations.get(\"SALAXY.CORE.WorkerMappers.preview\"),\r\n        sourceSchema: \"WorkerListItem\",\r\n        targetSchema: undefined,\r\n      },\r\n      {\r\n        uri: \"@salaxy/core/WorkerObjectExport\",\r\n        title: Translations.get(\"SALAXY.CORE.WorkerMappers.defaultMaterial\") + \" (export)\",\r\n        sourceSchema: \"WorkerAccount\",\r\n        targetSchema: \"WorkersDataRow\",\r\n      },\r\n      {\r\n        uri: \"@salaxy/core/EmploymentListItem_Default\",\r\n        title: Translations.get(\"SALAXY.CORE.WorkerMappers.preview\"),\r\n        sourceSchema: \"EmploymentListItem\",\r\n        targetSchema: undefined,\r\n      },\r\n      {\r\n        uri: \"@salaxy/core/EmploymentExport\",\r\n        title: Translations.get(\"SALAXY.CORE.WorkerMappers.defaultMaterial\") + \" (export)\",\r\n        sourceSchema: \"Employment\",\r\n        targetSchema: \"WorkersDataRow\",\r\n      },\r\n      {\r\n        uri: \"@salaxy/core/CalculationExport\",\r\n        title: Translations.get(\"SALAXY.CORE.CalculationMappers.defaultMaterial\") + \" (export)\",\r\n        sourceSchema: \"Calculation\",\r\n        targetSchema: \"CalculationsDataRow\",\r\n      },\r\n      {\r\n        uri: \"@salaxy/core/CalculationListItem_Default\",\r\n        title: Translations.get(\"SALAXY.CORE.CalculationMappers.preview\"),\r\n        sourceSchema: \"CalculationListItem\",\r\n        targetSchema: undefined,\r\n      },\r\n      {\r\n        uri: \"@salaxy/core/CalculationListItem_Pro\",\r\n        title: \"PRO Export\",\r\n        sourceSchema: \"CalculationListItem\",\r\n        targetSchema: undefined,\r\n      }\r\n    ];\r\n  }\r\n\r\n  /**\r\n   * Gets an export DataMapper, potentially loading the schema / mapping from the storage.\r\n   * @param id Identifier or URI for the mapper.\r\n   * URI starts with \"@salaxy/core/\", e.g. \"@salaxy/core/Calculation_Default\".\r\n   * Id is just the last part of the path, e.g. \"Calculation_Default\".\r\n   * @returns The mapper that maps the source to target. Null if none is found.\r\n   */\r\n  public static async getBuiltInMapper(id: string, schemaCache: JsonSchemaCache): Promise<DataMapper<any, any> | undefined> {\r\n    if (!id) {\r\n      return undefined;\r\n    }\r\n    id = this.getMapperUri(id);\r\n    switch (id) {\r\n      case \"EmploymentExport\": {\r\n        const paths = [\r\n          \"id\",\r\n          \"personalInfo.avatar.firstName\",\r\n          \"personalInfo.avatar.lastName\",\r\n          \"personalInfo.email\",\r\n          \"personalInfo.telephone\",\r\n          \"personalInfo.ibanNumber\",\r\n          \"personalInfo.officialId\",\r\n          \"info.startDate\",\r\n          \"info.endDate\",\r\n          \"info.isFixedTerm\",\r\n          \"info.taxcard\",\r\n          \"info.type\",\r\n          \"info.pensionCalculation\",\r\n          \"work.occupationCode\",\r\n          \"info.irIncomeEarnerTypes\",\r\n          \"isRegistered\",\r\n          \"info.workerAccountId\",\r\n          \"holidays.code\",\r\n          \"holidays.bonusMethod\",\r\n          \"updatedAt\",\r\n          \"createdAt\",\r\n        ];\r\n        const mapper = new DataMapper<any, any>(\"EmploymentExport\", Translations.get(\"SALAXY.CORE.WorkerMappers.defaultMaterial\") + \" (export)\");\r\n        await mapper.setSchemaFromCache(schemaCache, \"salaxy-secure/schemas/v02.json\", \"Employment\");\r\n        mapper.setPathsFromSourceSchema(paths);\r\n        return mapper;\r\n      }\r\n      case \"EmploymentListItem_Default\": {\r\n        const paths = [\r\n          \"otherPartyInfo.avatar.firstName\",\r\n          \"otherPartyInfo.avatar.lastName\",\r\n          \"otherPartyInfo.email\",\r\n          \"otherPartyInfo.telephone\",\r\n          \"otherPartyInfo.ibanNumber\",\r\n          \"otherPartyInfo.officialId\",\r\n          \"data.startDate\",\r\n          \"data.endDate\",\r\n          \"data.isFixedTerm\",\r\n          \"data.taxcard\",\r\n          \"data.type\",\r\n          \"data.pensionCalculation\",\r\n        ];\r\n        const mapper = new DataMapper<any, any>(\"EmploymentListItem_Default\", Translations.get(\"SALAXY.CORE.WorkerMappers.preview\"));\r\n        await mapper.setSchemaFromCache(schemaCache, \"salaxy-secure/schemas/v02.json\", \"EmploymentListItem\");\r\n        mapper.setPathsFromSourceSchema(paths);\r\n        mapper.isSourceAList = true;\r\n        return mapper;\r\n      }\r\n      case \"WorkerObjectExport\": {\r\n        const paths = [\r\n          \"id\",\r\n          \"avatar.firstName\",\r\n          \"avatar.lastName\",\r\n          \"contact.email\",\r\n          \"contact.telephone\",\r\n          \"ibanNumber\",\r\n          \"officialId\",\r\n        ];\r\n        const mapper = new DataMapper<any, any>(\"WorkerObjectExport\", Translations.get(\"SALAXY.CORE.WorkerMappers.defaultMaterial\") + \" (export)\");\r\n        await mapper.setSchemaFromCache(schemaCache, \"salaxy-secure/schemas/v02.json\", \"WorkerAccount\");\r\n        mapper.setPathsFromSourceSchema(paths);\r\n        return mapper;\r\n      }\r\n      case \"WorkerListItem_Default\": {\r\n        const paths = [\r\n          \"otherPartyInfo.avatar.firstName\",\r\n          \"otherPartyInfo.avatar.lastName\",\r\n          \"otherPartyInfo.email\",\r\n          \"otherPartyInfo.telephone\",\r\n          \"otherPartyInfo.ibanNumber\",\r\n          \"otherPartyInfo.officialId\"];\r\n        const mapper = new DataMapper<any, any>(\"WorkerListItem_Default\", Translations.get(\"SALAXY.CORE.WorkerMappers.preview\"));\r\n        await mapper.setSchemaFromCache(schemaCache, \"salaxy-secure/schemas/v02.json\", \"WorkerListItem\");\r\n        mapper.setPathsFromSourceSchema(paths);\r\n        mapper.isSourceAList = true;\r\n        return mapper;\r\n      }\r\n      case \"CalculationListItem_Default\": {\r\n        const paths = [\r\n          \"status\",\r\n          \"otherPartyInfo.avatar.displayName\",\r\n          \"otherPartyInfo.officialId\",\r\n          \"data.workStartDate\",\r\n          \"data.workEndDate\",\r\n          \"shortText\",\r\n          \"salaryDate\",\r\n          \"data.workerPayment\",\r\n          \"data.taxPayment\",\r\n          \"grossSalary\"];\r\n        const mapper = new DataMapper<any, any>(\"CalculationListItem_Default\", Translations.get(\"SALAXY.CORE.CalculationMappers.preview\"));\r\n        await mapper.setSchemaFromCache(schemaCache, \"salaxy-secure/schemas/v02.json\", \"CalculationListItem\");\r\n        mapper.setPathsFromSourceSchema(paths);\r\n        mapper.isSourceAList = true;\r\n        return mapper;\r\n      }\r\n      case \"CalculationListItem_Pro\": {\r\n        const mapper = new DataMapper(\"CalculationListItem_Pro\", \"PRO export\");\r\n        mapper.isSourceAList = true;\r\n        await mapper.setSchemaFromCache(schemaCache, \"salaxy-secure/schemas/v02.json\", \"CalculationListItem\");\r\n        const map = {\r\n          \"ownerInfo.avatar.displayName\": Translations.get(\"SALAXY.NG1_Other.Roles.employer\"),\r\n          \"ownerInfo.officialId\": Translations.get(\"SALAXY.NG1_Other.Roles.employer\") + \" ID\",\r\n          \"status\": new DataMapperSelector(undefined, Translations.get(\"SALAXY.MODEL.CalculationListItem.status.title\"),\r\n            (source: CalculationListItem) => EnumerationsLogic.getEnumLabel(\"CalculationStatus\", source.status ?? \"\")\r\n          ),\r\n          \"otherPartyInfo.avatar.displayName\": Translations.get(\"SALAXY.NG1_Other.Roles.worker\"),\r\n          \"otherPartyInfo.officialId\": Translations.get(\"SALAXY.NG1_Other.Roles.worker\") + \" ID\",\r\n          \"data.workStartDate\": Translations.get(\"SALAXY.MODEL.CalculationData.workStartDate.title\"),\r\n          \"data.workEndDate\": Translations.get(\"SALAXY.MODEL.CalculationData.workEndDate.title\"),\r\n          \"shortText\": Translations.get(\"SALAXY.MODEL.CalculationListItem.shortText.title\"),\r\n          \"salaryDate\": Translations.get(\"SALAXY.MODEL.CalculationListItem.salaryDate.title\"),\r\n          \"data.workerPayment\": Translations.get(\"SALAXY.MODEL.CalculationData.workerPayment.title\"),\r\n          \"data.taxPayment\": Translations.get(\"SALAXY.MODEL.CalculationData.taxPayment.title\"),\r\n          \"grossSalary\": Translations.get(\"SALAXY.MODEL.CalculationListItem.grossSalary.title\"),\r\n        };\r\n        mapper.setPaths(map);\r\n        mapper.generateSchema(\"CalculationListItem_Pro\", \"target\");\r\n        mapper.isSourceAList = true;\r\n        return mapper;\r\n      }\r\n      case \"CalculationExport\": {\r\n\r\n        const rowSelector = new DataMapperSelector<Calculation, CalculationsDataRow>(\"rows\");\r\n        rowSelector.flatten = [\r\n          new DataMapperSelector<Calculation, CalculationsDataRow>(\"rowType\", \"rowType\"),\r\n          new DataMapperSelector<Calculation, CalculationsDataRow>(\"message\", \"message\"),\r\n          new DataMapperSelector<Calculation, CalculationsDataRow>(\"count\", \"count\"),\r\n          new DataMapperSelector<Calculation, CalculationsDataRow>(\"price\", \"price\"),\r\n        ];\r\n\r\n        const paths = {\r\n          \"id\": \"id\",\r\n          \"workflow.status\": \"status\",\r\n          \"worker.paymentData.socialSecurityNumber\": \"personalId\",\r\n          \"worker.avatar.firstName\": \"firstName\",\r\n          \"worker.avatar.lastName\": \"lastName\",\r\n          \"worker.paymentData.email\": \"email\",\r\n          \"worker.paymentData.telephone\": \"telephone\",\r\n          \"worker.paymentData.ibanNumber\": \"ibanNumber\",\r\n          \"info.occupationCode\": \"occupationCode\",\r\n          \"info.workStartDate\": \"periodStart\",\r\n          \"info.workEndDate\": \"periodEnd\",\r\n          \"info.workDescription\": \"workDescription\",\r\n          \"info.salarySlipMessage\": \"salarySlipMessage\",\r\n          \"info.costCenter\": \"costCenter\",\r\n          \"workflow.salaryDate\": \"salaryDate\",\r\n          \"worker.tax.fixedTaxAmount\": \"fixedTaxAmount\",\r\n          \"rows\": rowSelector,\r\n        };\r\n        const mapper = new DataMapper<Calculation, CalculationsDataRow>(\"CalculationExport\", Translations.get(\"SALAXY.CORE.WorkerMappers.defaultMaterial\") + \" (export)\");\r\n        await mapper.setSchemaFromCache(schemaCache, \"salaxy-secure/schemas/v02.json\", \"Calculation\", \"source\");\r\n        mapper.setPaths(paths);\r\n        mapper.generateSchema(\"CalculationsDataRow\", \"target\");\r\n        return mapper;\r\n      }\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  /** TODO: try to figure out why this is required? */\r\n  public static getMapperUri(uri: string): string {\r\n    if (!uri) {\r\n      return uri;\r\n    }\r\n    return uri.replace(\"@salaxy/core/\", \"\");\r\n  }\r\n}","/** File format for a table. */\r\nexport enum FileDelimiter {\r\n    /** Tab separated table. */\r\n    Comma = \",\",\r\n    /** Comma separated table. */\r\n    Semicolon = \";\",\r\n    /** Comma separated table. */\r\n    Tab = \"\\t\",\r\n    /** Comma separated table. */\r\n    Unknown = \"\"\r\n  }","/** File format for a table. */\r\nexport enum TableFormat {\r\n  /** Tab separated table. */\r\n  Txt = \"txt\",\r\n  /** Comma separated table. */\r\n  Csv = \"csv\",\r\n  /** Excel formatted table. */\r\n  Xlsx = \"xlsx\",\r\n}\r\n","import { FileDelimiter } from \"./FileDelimiter\";\r\nimport { TableFormat } from \"./TableFormat\";\r\n\r\n/** Utility class for processing files. Eg. exporting and importing file data. */\r\nexport class FileLogic {\r\n\r\n  /**\r\n   * Return file extension from filename\r\n   * @param fileName import file name as string\r\n   * @returns TableFormat or null\r\n   */\r\n  public static getExtensionFromFileName(fileName: string): string | undefined {\r\n    const reqex = /(?:\\.([^.]+))?$/;\r\n    const match = reqex.exec(fileName);\r\n    return match?.[1];\r\n  }\r\n\r\n\r\n\r\n  /**\r\n   * Return delimiter from provided data\r\n   * @param data import data as string\r\n   * @returns returns FileDelimiter\r\n   */\r\n  public static getFileDelimiter(data: string): FileDelimiter {\r\n    if (data) {\r\n      const map = new Map<FileDelimiter, number>([\r\n        [FileDelimiter.Comma, data.split(FileDelimiter.Comma).length],\r\n        [FileDelimiter.Semicolon, data.split(FileDelimiter.Semicolon).length],\r\n        [FileDelimiter.Tab, data.split(FileDelimiter.Tab).length],\r\n      ]);\r\n\r\n      const result = [...map.entries()].reduce((a,c) => c[1]> a[1] ? c : a);\r\n      return result[1] > 0 ? result[0] : FileDelimiter.Unknown;\r\n    }\r\n    return FileDelimiter.Unknown;\r\n  }\r\n\r\n  /**\r\n   * Returns locale\r\n   * @param csv input csv data\r\n   * @returns returns locale as string\r\n   */\r\n  public static getCsvLocale(csv: FileDelimiter): any {\r\n    return csv === FileDelimiter.Semicolon ? \"fi\" : \"en\";\r\n  }\r\n\r\n  /**\r\n   * return table format\r\n   * @param fileDelimiter delimeter used to figure table format\r\n   * @returns table format\r\n   */\r\n  public static getTableFormatByDelimeter(fileDelimiter: FileDelimiter): TableFormat {\r\n    return fileDelimiter === FileDelimiter.Comma || fileDelimiter === FileDelimiter.Semicolon ? TableFormat.Csv : TableFormat.Txt;\r\n  }\r\n\r\n}\r\n","import { ApiValidationErrorType } from \"../../model\";\r\nimport { Dates, Numeric } from \"../../util\";\r\nimport { DataRow } from \"./DataRow\";\r\nimport { FileDelimiter } from \"./FileDelimiter\";\r\nimport { ImportResult } from \"./ImportResult\";\r\nimport { TableFormat } from \"./TableFormat\";\r\nimport { Culture } from \"./Culture\";\r\n\r\n/** Utility class for processing tables. Eg. exporting and importing table formatted data. */\r\nexport class Tables {\r\n\r\n  /**\r\n   * Exports table data as in defined format. The default is csv formatted table.\r\n   * @param rows  Rows as an array of objects with properties specified as headers.\r\n   * @param format File format for a table export.\r\n   * @param localeId Locale for data export. Defaults to Finnish (fi). Affects  separator (; vs ,), formatting of date (D.M.YYYY vs YYYY-MM-DD) and numeric fields (, vs . as decimal separator).\r\n   */\r\n  public static export<TRow extends DataRow>(rows: TRow[], format: TableFormat = TableFormat.Csv, localeId: Culture = Culture.Fi): any {\r\n    if (!rows || rows.length === 0) {\r\n      return null;\r\n    }\r\n\r\n    const data = this.exportAsArrays(rows);\r\n    switch (format) {\r\n      case TableFormat.Csv:\r\n        return this.objectToSeparated(data, localeId, (localeId === \"fi\" ? \";\" : \",\"));\r\n      case TableFormat.Txt:\r\n        return this.objectToSeparated(data, localeId, \"\\t\");\r\n      default:\r\n        throw new Error(`Table format ${format} not supported.`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Exports data as an array of rows, each of which consists of an array of cell values.\r\n   * @param rows Array of row objects.\r\n   */\r\n  public static exportAsArrays<TRow extends DataRow>(rows: TRow[]): any[][] {\r\n    const data: any[] = [];\r\n    const headers = Object.getOwnPropertyNames(rows[0]).filter((x) => x !== \"validation\");\r\n    data.push(headers);\r\n    for (const row of rows) {\r\n      const rowData: any[] = [];\r\n      for (const header of headers) {\r\n        rowData.push(row[header]);\r\n      }\r\n      data.push(rowData);\r\n    }\r\n\r\n    return data;\r\n  }\r\n\r\n  /**\r\n   * Imports table from the given data and format.\r\n   * @param data Table data.\r\n   * @param format Format for the table data.\r\n   * @param localeId Locale for data import. Defaults to Finnish (fi).\r\n   * Affects formatting of date (D.M.YYYY vs YYYY-MM-DD)and numeric fields (, vs . as decimal separator).\r\n   * @returns An import result which has the imported data as well as headers of the file, errors and number of ignored lines (typically empty lines).\r\n   */\r\n  public static import<TRow extends DataRow>(data: any, format: TableFormat = TableFormat.Csv, localeId: Culture = Culture.Fi, headers: string[] | undefined = undefined): ImportResult<TRow> {\r\n    switch (format) {\r\n      case TableFormat.Csv:\r\n        return this.objectFromSeparated(data, localeId, (localeId === \"fi\" ? \";\" : \",\"), headers);\r\n      case TableFormat.Txt:\r\n        return this.objectFromSeparated(data, localeId, \"\\t\", headers);\r\n      default:\r\n        throw new Error(`Table format ${format} not supported.`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets first row of data or a new object\r\n   * @param data from where to get first line\r\n   * @param separator file separator\r\n   * @returns Returns first row as object or {}\r\n   */\r\n  public static getFirstRow(data: any, separator: FileDelimiter): any {\r\n    let result = {};\r\n    if (!data) {\r\n      return result;\r\n    }\r\n    const rows = data.split(/\\r\\n|\\n/);\r\n    if (rows.length === 0) {\r\n      return result;\r\n    }\r\n    const headerRow = rows[0].split(separator);\r\n    return result = headerRow.map(this.fromHeaderField());\r\n  }\r\n\r\n  private static objectToSeparated(data: any[], localeId: Culture, separator: string) {\r\n    const toRow = this.toRow(localeId, separator);\r\n    const rows = data.map(toRow);\r\n    return (separator !== \"\\t\" ? \"\\uFEFF\" : \"\") + rows.join(\"\\r\\n\");\r\n  }\r\n\r\n  private static toRow(localeId: Culture, separator: string, addQuotes = true) {\r\n    const toField = this.toField(localeId, addQuotes);\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    return (row: any[], index: number, array: any[]) => {\r\n      return row.map(toField).join(separator);\r\n    };\r\n  }\r\n\r\n  private static toField(localeId: Culture, addQuotes = true) {\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    return (value: any, index: number, array: any[]) => {\r\n      if (value == null) {\r\n        return \"\";\r\n      }\r\n      if (typeof (value) === \"number\") {\r\n        if (localeId === \"fi\") {\r\n          return value.toString().replace(\".\", \",\");\r\n        }\r\n        return value;\r\n      }\r\n      if (typeof (value) === \"boolean\") {\r\n        return (value ? \"TRUE\" : \"FALSE\");\r\n      }\r\n      if (typeof (value) === \"string\") {\r\n        // try read date, always in ISO\r\n        if (Dates.isValidDateTime(value, true, \"YYYY-MM-DD\")) {\r\n          if (localeId === \"fi\") {\r\n            return Dates.format(value, \"D.M.YYYY\");\r\n          } else {\r\n            return Dates.format(value, \"YYYY-MM-DD\");\r\n          }\r\n        }\r\n        if (addQuotes) {\r\n          return \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\";\r\n        }\r\n        return value;\r\n      }\r\n      if (Array.isArray(value)) {\r\n        const text = value.map((x) => this.toField(localeId, false)(x, index, array)).join(\",\");\r\n        if (addQuotes) {\r\n          return \"\\\"\" + text.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\";\r\n        }\r\n        return text;\r\n      }\r\n      if (typeof (value) === \"object\") {\r\n        if (value instanceof Date) {\r\n          if (localeId === \"fi\") {\r\n            return Dates.format(value, \"D.M.YYYY\");\r\n          } else {\r\n            return Dates.format(value, \"YYYY-MM-DD\");\r\n          }\r\n        } else {\r\n          if (addQuotes) {\r\n            return \"\\\"\" + JSON.stringify(value).replace(/\"/g, \"\\\"\\\"\") + \"\\\"\";\r\n          }\r\n          return JSON.stringify(value);\r\n        }\r\n      }\r\n      return JSON.stringify(value);\r\n    };\r\n  }\r\n\r\n  private static objectFromSeparated<TRow extends DataRow>(data: string, localeId: Culture, separator: string, headers: string[] | undefined = undefined): ImportResult<TRow> {\r\n    const result: ImportResult<TRow> = {\r\n      ignoredLines: 0,\r\n      data: [],\r\n      headers: [],\r\n      errors: [],\r\n    };\r\n    if (!data) {\r\n      return result;\r\n    }\r\n\r\n    const rows = data.split(/\\r\\n|\\n/);\r\n    if (rows.length === 0) {\r\n      return result;\r\n    }\r\n\r\n    if (!headers) {\r\n      const headerRow = rows[0].split(separator);\r\n      result.headers = headerRow.map(this.fromHeaderField());\r\n\r\n      if (result.headers.some((x) => !x)) {\r\n        result.errors.push({\r\n          key: undefined,\r\n          type: ApiValidationErrorType.General,\r\n          code: \"InvalidHeader\",\r\n          msg: \"Some header field contains no value. This is not allowed.\",\r\n        });\r\n        return result;\r\n      }\r\n\r\n    } else {\r\n      result.headers = headers as any;\r\n    }\r\n\r\n    if (rows.length === 1) {\r\n      return result;\r\n    }\r\n    const dataRows = rows.slice(!headers ? 1 : 0);\r\n    const fromRow = this.fromRow(result, localeId, separator);\r\n    const rawData = dataRows.map(fromRow);\r\n    result.data = rawData.filter((x) => x != null) as any;\r\n    result.ignoredLines = rawData.filter((x) => x == undefined).length;\r\n    result.data.filter((x) => x.validation && x.validation.errors).forEach((x) => {\r\n      result.errors.push(...(x.validation?.errors ?? []));\r\n    });\r\n\r\n    return result;\r\n  }\r\n\r\n  private static fromRow<TRow extends DataRow>(result: ImportResult<TRow>, localeId: Culture, separator: string) {\r\n\r\n    const fromField = this.fromField(localeId);\r\n\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    return (row: string, index: number, array: any[]): TRow |  undefined => {\r\n      const rowData = row.split(separator);\r\n      let rowObject: TRow | undefined;\r\n\r\n      if (rowData.length !== result.headers.length) {\r\n        if (rowData.length === 1 && rowData[0] === \"\") {\r\n          rowObject = undefined;\r\n        } else {\r\n          rowObject = rowObject || {} as TRow;\r\n          rowObject.validation = rowObject.validation || { isValid: false, errors: [] };\r\n          rowObject.validation.errors?.push({\r\n            key: null,\r\n            type: ApiValidationErrorType.General,\r\n            code: \"InvalidColAmount\",\r\n\r\n            msg: `PARSE ERROR: Row ${index} has ${rowData.length} columns whereas the header row has ${result.headers.length}.`,\r\n          });\r\n        }\r\n      } else {\r\n        const typedRowData = rowData.map(fromField);\r\n\r\n        if (typedRowData.every((x) => !x)) {\r\n          rowObject = undefined;\r\n        } else {\r\n          for (let i = 0; i < result.headers.length; i++) {\r\n            rowObject = rowObject || {} as TRow;\r\n            rowObject[result.headers[i]] = typedRowData[i];\r\n          }\r\n        }\r\n      }\r\n      return rowObject;\r\n    };\r\n  }\r\n\r\n  private static fromHeaderField() {\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    return (value: string, index: number, array: any[]): string => {\r\n      if (!value) {\r\n        return value;\r\n      }\r\n      // trim\r\n      value = value.trim();\r\n      // remove double quotes\r\n      value = value.replace(/\"\"/g, \"\\\"\");\r\n      // remove leading and trailing quotes\r\n      value = value.replace(/^\"+/, \"\");\r\n      value = value.replace(/\"+$/, \"\");\r\n\r\n      return value;\r\n    };\r\n  }\r\n\r\n  private static fromField(localeId: Culture) {\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    return (value: string, index: number, array: any[]): any => {\r\n      if (!value) {\r\n        return null;\r\n      }\r\n      // trim\r\n      value = value.trim();\r\n      // remove double quotes\r\n      value = value.replace(/\"\"/g, \"\\\"\");\r\n      // remove leading and trailing quotes\r\n      value = value.replace(/^\"+/, \"\");\r\n      value = value.replace(/\"+$/, \"\");\r\n\r\n      // try booleans\r\n      if (value.toLowerCase() === \"true\") {\r\n        return true;\r\n      }\r\n      if (value.toLowerCase() === \"false\") {\r\n        return false;\r\n      }\r\n      // try date\r\n      const dateFormat = localeId === \"fi\" ? \"D.M.YYYY\" : \"YYYY-MM-DD\";\r\n      if (Dates.isValidDateTime(value, true, dateFormat)) {\r\n        return Dates.parseDate(value, dateFormat);\r\n      }\r\n      // try number\r\n      const sNumber = localeId === \"fi\" ? value.replace(\",\", \".\") : value;\r\n      if (Numeric.isNumber(sNumber)) {\r\n        return Numeric.parseNumber(sNumber);\r\n      }\r\n\r\n      // let it be string\r\n      return value;\r\n    };\r\n  }\r\n}\r\n","import { Translations } from \"../Translations\";\r\nimport { ExportMethod } from \"../../model\";\r\nimport { TableFormat } from \"./TableFormat\";\r\nimport { ImportResult } from \"./ImportResult\";\r\nimport { Tables } from \"./Tables\";\r\nimport { Culture } from \"./Culture\";\r\n\r\n/** Defines a parser that parses a file (e.g. csv) to stadard tabular format. */\r\nexport class FileParser {\r\n\r\n  public constructor(id: string, label: string, format: TableFormat, hasLocales = false) {\r\n    this.id = id;\r\n    this.label = label;\r\n    this.format = format;\r\n    this.hasLocales = hasLocales;\r\n  }\r\n\r\n  /** Id for the parser method */\r\n  public id: string;\r\n\r\n  /** Label for the method */\r\n  public label: string;\r\n\r\n  /** If true, supports locales for the data formatting.*/\r\n  public hasLocales: boolean;\r\n\r\n  /** Table format for the parser */\r\n  public format?: TableFormat;\r\n\r\n  /**\r\n   * Does the actual parsing. In custom FileParsers, override this method\r\n   * @param data Incoming data as a string\r\n   * @param locale Optional locale selected by the user if supported by the parser.\r\n   */\r\n  public parse(data: string, locale?: Culture): ImportResult<any> {\r\n    return Tables.import(data, this.format, this.hasLocales ? locale : undefined);\r\n  }\r\n\r\n  /**\r\n   * Guesses the parser and locale that may be correct for the given data.\r\n   * @param parsers Available parsers\r\n   * @param data Data to be imported.\r\n   * @returns Guessed parser and locale based on data or null if the parser cannot be guessed.\r\n   */\r\n  public static guessParser(parsers: FileParser[], data: string) : {parser: FileParser, locale: Culture,} | undefined {\r\n    if (!data) {\r\n      return undefined;\r\n    }\r\n    const lineFeedIx = /\\r\\n|\\n/.exec(data)?.index;\r\n    const firstRow = lineFeedIx ? data.substring(0, lineFeedIx) : data;\r\n    const dataWithoutHeader = lineFeedIx ? data.substring(lineFeedIx) : \"\";\r\n    if (firstRow.indexOf(\"\\t\") > 0) {\r\n      const parser = parsers.find((x) => x.id == ExportMethod.CopyExcel);\r\n      const decimalSeparator = /(^|\\t|\\n)-?\\d+([.|,])\\d+(\\n|\\t|$)/.exec(dataWithoutHeader)?.[2];\r\n      return parser ? {\r\n        parser,\r\n        locale: decimalSeparator == \".\" ? Culture.En : Culture.Fi,\r\n      } : undefined;\r\n    }\r\n    if (firstRow.indexOf(\";\") > 0) {\r\n      const parser = parsers.find((x) => x.id == ExportMethod.FileCsv);\r\n      return parser ? {\r\n        parser,\r\n        locale: Culture.Fi,\r\n      } : undefined;\r\n    }\r\n    if (firstRow.indexOf(\",\") > 0) {\r\n      const parser = parsers.find((x) => x.id == ExportMethod.FileCsv);\r\n      return parser ? {\r\n        parser,\r\n        locale: Culture.En,\r\n      } : undefined;\r\n    }\r\n  }\r\n\r\n  /** Gets the standard methods that are typically supported. */\r\n  public static getDefaultParsers(): FileParser[] {\r\n    // Using, ExportMethod as ID, however, this is in no way required => If there is more, you may create your own enum.\r\n    // TODO: Move texts to core and \"CSV-tiedosto\" => \"Testitiedosto (CSV)\"\r\n    return [\r\n      new FileParser(ExportMethod.CopyExcel, Translations.get(\"SALAXY.NG1.ODataActionsComponent.getDefaults.copyExcel\"), TableFormat.Txt, true),\r\n      new FileParser(ExportMethod.FileExcel, Translations.get(\"SALAXY.NG1.ODataActionsComponent.getDefaults.fileExcel\"), TableFormat.Txt),\r\n      new FileParser(ExportMethod.FileCsv, Translations.get(\"SALAXY.NG1.ODataActionsComponent.getDefaults.fileCsv\"), TableFormat.Csv, true),\r\n    ];\r\n  }\r\n}","import { PayrollDetails } from \"../model\";\r\nimport { Configs } from \"./Configs\";\r\n\r\n/**\r\n * Logic related to Payroll.\r\n */\r\nexport class PayrollLogic {\r\n\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public static getBlank(): PayrollDetails {\r\n    return {\r\n      input: {\r\n        period: {},\r\n        calculations: [],\r\n      },\r\n      info: {\r\n        applicationId: Configs.current?.applicationId,\r\n      },\r\n      calcs: [],\r\n      validations: [],\r\n      workflowData: {},\r\n    };\r\n  }\r\n}","import { Calculation, PayrollDetails, PayrollListItem } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\nimport { Configs } from \"../../logic/Configs\";\r\nimport { PayrollLogic } from \"../../logic/PayrollLogic\";\r\n\r\n/**\r\n * Provides CRUD access for authenticated user to access a his/her own PayrollDetails objects\r\n */\r\nexport class Payrolls extends CrudApiBase<PayrollDetails, PayrollListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/payroll\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /**\r\n   * Saves an item to the storage.\r\n   * If id is null, this is add/insert. If id exists, this is update.\r\n   * @param itemToSave - The item that is updated/inserted.\r\n   * @returns A Promise with result data as saved to the storage (contains id, createAt, owner etc.).\r\n   */\r\n   public save(itemToSave: PayrollDetails): Promise<PayrollDetails> {\r\n    if (itemToSave?.info) {\r\n      itemToSave.info.applicationId = Configs.current?.applicationId;\r\n    }\r\n    return super.save(itemToSave);\r\n  }\r\n\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): PayrollDetails {\r\n    return PayrollLogic.getBlank();\r\n  }\r\n\r\n  /** Because of historical reasons, Payrolls v03 has a non-standard endpoint for OData methods. */\r\n  public getODataUrl(): string {\r\n    return this.baseUrl + \"/odata\";\r\n  }\r\n\r\n  /**\r\n   * Validates a PayrollDetails object for payment.\r\n   * @param payrollToValidate PayrollDetails that should be validated.\r\n   * @returns The PayrollDetails object with Calculations added to the Result object and Validated.\r\n   */\r\n  public validate(payrollToValidate: PayrollDetails): Promise<PayrollDetails> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/validate`, payrollToValidate);\r\n  }\r\n\r\n  /**\r\n   * Saves changes to to a Calculation that is part of a Payroll and returns the Paryoll validation data.\r\n   * @param calc The calculation object that is updated.\r\n   * @param payrollId Payroll ID where calculation belongs to.\r\n   * Note, that the current implementation does not assure that the calculation is within a Payroll.\r\n   * The ID is simply used for assuring corrrect data in Calculation.\r\n   * @returns The Saved Payroll object with Calculations added to the Result object and Validated.\r\n   */\r\n  public calculationSave(calc: Calculation, payrollId: string): Promise<Calculation> {\r\n    const method = `${this.baseUrl}/${payrollId}/calcs`;\r\n    return this.ajax.postJSON(method, calc);\r\n  }\r\n\r\n  /**\r\n   * Adds existing calculations to the the payroll and saves the payroll object.\r\n   * If calculation is read-only, a copy is made. If it is draft, the calculation is moved.\r\n   * @param payroll The Payroll object to update and save.\r\n   * @param calculationIds Array of calculation id's that are copied / moved to the Payroll list.\r\n   * @returns The Saved Payroll object with Calculations added to the Result object and Validated.\r\n   */\r\n  public addCalculations(payroll: PayrollDetails, calculationIds: string[]): Promise<PayrollDetails> {\r\n    let method = `${this.baseUrl}/add-calc?`;\r\n    method += \"ids=\" +  calculationIds.join(\",\");\r\n    return this.ajax.postJSON(method, payroll);\r\n  }\r\n\r\n  /**\r\n   * Remove calculations from the payroll and saves the payroll object.\r\n   * The calculations are completely deleted.\r\n   * This can only be done if the calculations and the payroll have not been paid yet.\r\n   * @param payroll The Payroll  object.\r\n   * @param calculationIds Array of calculation id's that are deleted.\r\n   * @returns The Saved Payroll object with Calculations removed from the Result object and Validated.\r\n   */\r\n  public deleteCalculations(payroll: PayrollDetails, calculationIds: string[]): Promise<PayrollDetails> {\r\n    let method = `${this.baseUrl}/delete-calc?`;\r\n    method += \"ids=\" +  calculationIds.join(\",\");\r\n    return this.ajax.postJSON(method, payroll);\r\n  }\r\n\r\n  /**\r\n   * Remove calculations from the payroll and saves the payroll object.\r\n   * The calculations are unlinked and they become individual calculations in the draft list (and can then be processed individually).\r\n   * This can only be done if the calculations and the payroll have not been paid yet.\r\n   * @param payroll The Payroll  object.\r\n   * @param calculationIds Array of calculation id's that are unlinked from the Payroll list.\r\n   * @returns The Saved Payroll object with Calculations removed from the Result object and Validated.\r\n   */\r\n  public unlinkCalculations(payroll: PayrollDetails, calculationIds: string[]): Promise<PayrollDetails> {\r\n    let method = `${this.baseUrl}/unlink-calc?`;\r\n    method += \"ids=\" +  calculationIds.join(\",\");\r\n    return this.ajax.postJSON(method, payroll);\r\n  }\r\n\r\n  /**\r\n   * Adds new calculations to the the payroll and saves the payroll object.\r\n   * The calculations are added based on employment relation ID's.\r\n   * @param payroll The Payroll object to update and save.\r\n   * @param employmentIds Array of employment relation id's for which the a new calculation is added to the Payroll list.\r\n   * @returns The Saved Payroll object with Calculations added to the Result object and Validated.\r\n   */\r\n  public addEmployments(payroll: PayrollDetails, employmentIds: string[]): Promise<PayrollDetails> {\r\n    let method = `${this.baseUrl}/add-employment?`;\r\n    method += \"ids=\" +  employmentIds.join(\",\");\r\n    return this.ajax.postJSON(method, payroll);\r\n  }\r\n\r\n   /**\r\n    * Cancels the invoice or payment processing for the given payroll.\r\n    * Please note that this is possible only if the channel supports the cancel action.\r\n    * @param id Payroll for which the cancellation is requested.\r\n    * @returns Payroll which have been cancelled.\r\n    */\r\n    public cancel(id: string): Promise<Calculation> {\r\n      const url = `${this.baseUrl}/cancel/${id}`;\r\n      return this.ajax.getJSON(url);\r\n    }\r\n}\r\n","import { ApiValidation, ApiValidationErrorType } from \"../model\";\r\nimport { Objects } from \"../util\";\r\n\r\n/**\r\n * Helper for custom validation methods.\r\n */\r\nexport class ValidationHelper {\r\n\r\n  /** The validation object that is used for adding errors warnings etc. */\r\n  public validation: ApiValidation | undefined = undefined;\r\n\r\n  constructor(validation: ApiValidation) {\r\n    if (!validation) {\r\n      throw new Error(\"Validation object is null.\");\r\n    }\r\n    this.validation = validation;\r\n    (validation as any).errors = validation.errors || [];\r\n  }\r\n\r\n  /**\r\n   * Add a warning to the validations object\r\n   * @param message Required warning message\r\n   * @param code Optional unique code for the validation error\r\n   * @param field Full path to Name of the property / field (Member name in JSON).\r\n   */\r\n  public warn(message: string, code: string | undefined = undefined, field: string | undefined = undefined): void {\r\n    this.validation ??= {};\r\n    this.validation.errors?.push({\r\n      msg: message,\r\n      type: ApiValidationErrorType.Warning,\r\n      code,\r\n      key: field,\r\n    });\r\n    this.recalc();\r\n  }\r\n\r\n  /** Add a error to the validations object */\r\n  public error(message: string, code: string | undefined = undefined, field: string | undefined = undefined): void {\r\n    this.validation ??= {};\r\n    this.validation.errors?.push({\r\n      msg: message,\r\n      type: ApiValidationErrorType.General,\r\n      code,\r\n      key: field,\r\n    });\r\n    this.recalc();\r\n  }\r\n\r\n  /** Adds a missing required field to validations object */\r\n  public missing(field: string, message: string | undefined = undefined): void {\r\n    this.validation ??= {};\r\n    this.validation.errors?.push({\r\n      msg: message || \"Kenttä puuttuu\", // TODO: Add language versioned message.\r\n      type: ApiValidationErrorType.Required,\r\n      code: \"missing\", // TODO: Check what is the best practice for this.\r\n      key: field,\r\n    });\r\n    this.recalc();\r\n  }\r\n\r\n  /**\r\n   * Checks that the required item is not null / empty.\r\n   * If it is adds a required field missing error.\r\n   */\r\n   public checkNotEmpty(root: any, path: string, message: string | undefined = undefined): boolean {\r\n    const value = Objects.getProperty(root, path);\r\n    if (!value && value !== 0) {\r\n      this.missing(path, message);\r\n      return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Clears any existing validation errors\r\n   * @param code If specified clears only errors with specified code. May be a string or regexp.\r\n   */\r\n  public clear(code: RegExp | string | undefined = undefined): void {\r\n    let newValidations: any[] | undefined = [];\r\n    this.validation ??= {};\r\n    if (code) {\r\n      if ((code as RegExp).test) {\r\n        newValidations = this.validation.errors?.filter((x) => x.code &&!(code as RegExp).test(x.code));\r\n      } else {\r\n        newValidations = this.validation.errors?.filter((x) => x.code != code);\r\n      }\r\n    }\r\n    (this.validation as any).errors = newValidations;\r\n    this.recalc();\r\n  }\r\n\r\n  /**\r\n   * Merges the errors of another validation error to this validation.\r\n   * @param validation Another api validation object with potential errors.\r\n   * May also be null or with null error array without raising errors.\r\n   */\r\n  public merge(validation: ApiValidation): void {\r\n    if (validation?.errors && validation?.errors?.length > 0) {\r\n      this.validation?.errors?.push(...validation.errors);\r\n      this.recalc();\r\n    }\r\n  }\r\n\r\n  /** Recalculates the read-only helper properties based on the errors list. */\r\n  public recalc(): void {\r\n    const result = (this.validation as any);\r\n    result.errors = this.validation?.errors || [];\r\n    result.hasAllRequiredFields = !this.validation?.errors?.find((x) => x.type == ApiValidationErrorType.Required);\r\n    result.isValid = !this.validation?.errors?.find((x) => x.type != ApiValidationErrorType.Warning);\r\n\r\n  }\r\n\r\n}","import { Arrays, Numeric } from \"../../util\";\r\nimport { CalculationRowType, Employment, PayrollDetails, UserDefinedRow } from \"../../model\";\r\nimport { SalaryBasesRow } from \"./SalaryBasesRow\";\r\nimport { Ajax } from \"../../api/infra/Ajax\";\r\nimport { Calculations } from \"../../api/crud/Calculations\";\r\nimport { Payrolls } from \"../../api/crud/Payrolls\";\r\nimport { RowTypeMatch } from \"./RowTypeMatch\";\r\nimport { Culture } from \"./Culture\";\r\nimport { TableFormat } from \"./TableFormat\";\r\nimport { Tables } from \"./Tables\";\r\nimport { ValidationHelper } from \"../ValidationHelper\";\r\n\r\n/** Experimental helper class for importing data from HRSuunti sytem to Palkkaus.fi */\r\nexport class HrSuuntiImportLogic {\r\n\r\n  /**\r\n   * Adds a collection of salary bases rows to a given payroll.\r\n   * @param payrollId Identifier for the payroll where the calculations should be updated.\r\n   * @param salaryBases The rows that should be added.\r\n   * @param employments List of employments that are available in the current account.\r\n   * @param ajax Instance of Ajax that is use in connecting to the server.\r\n   * @returns A payroll object that is refreshed from the server.\r\n   */\r\n  public static async addToPayroll(payrollId: string, salaryBases: SalaryBasesRow[], employments: Employment[], ajax: Ajax): Promise<PayrollDetails> {\r\n    const payrolls = new Payrolls(ajax);\r\n    const calculations = new Calculations(ajax);\r\n    let payroll = await payrolls.getSingle(payrollId);\r\n    const groupByEmpId = salaryBases.reduce((group: { [key: string]: SalaryBasesRow[] }, row: SalaryBasesRow) => {\r\n      const empId = row.employmentId;\r\n      if (empId) {\r\n        group[empId] = group[empId] ?? [];\r\n        group[empId].push(row);\r\n      }\r\n      return group;\r\n    }, {});\r\n    const empIds = Object.keys(groupByEmpId).filter((x) => !!x);\r\n    console.debug(\"empIds\", empIds);\r\n    const missingIds = empIds.filter((id) => !payroll.calcs?.find((x) => x.worker && x.worker.employmentId == id));\r\n    if (missingIds.length) {\r\n      console.log(\"Adding employments: \" + missingIds);\r\n      payroll = await payrolls.addEmployments(payroll, missingIds);\r\n    }\r\n    let counter = 0;\r\n    empIds.forEach(async (key) => {\r\n      counter++;\r\n      const rows = groupByEmpId[key];\r\n      const calc = payroll.calcs?.find((x) => x.worker && x.worker.employmentId == key) ?? {};\r\n      calc.rows = calc.rows ?? [];\r\n      calc.rows.length = 0;\r\n      const emp = employments.find((emp) => emp.id == key);\r\n      if (emp) {\r\n        const fixedRows = emp.work?.salaryDefaults?.filter((row) =>\r\n          // TODO: Vaihda toisin päin: Kuukausi-/tuntipalkka otetaan suoraan ja sen arvot haetaan datasta.\r\n          //       Myös AY-jäsenmaksu jne. fiksatut rivit tähän logiikkaan?\r\n          row.rowType != CalculationRowType.MonthlySalary\r\n          && row.rowType != CalculationRowType.HourlySalary\r\n        );\r\n        if (fixedRows?.length) {\r\n          fixedRows.forEach((row) => {\r\n            row.sourceId = \"employment\";\r\n          });\r\n          calc.rows.push(...fixedRows);\r\n        }\r\n      }\r\n      rows.forEach((x) => {\r\n        const newRow: UserDefinedRow = {\r\n          count: x.count,\r\n          data: x.data || {},\r\n          message: x.message,\r\n          price: x.price,\r\n          rowType: x.rowType,\r\n          sourceId: \"import\",\r\n        };\r\n        if (x.costCenter) {\r\n          newRow.accounting = newRow.accounting ?? {};\r\n          newRow.accounting.dimensions = newRow.accounting.dimensions ?? [];\r\n          newRow.accounting.dimensions.push( {\r\n             id: \"costCenter\",\r\n             value: x.costCenter,\r\n           });\r\n        }\r\n        calc.rows = calc.rows ?? [];\r\n        calc.rows.push(newRow);\r\n      });\r\n      console.log(`Saving calculation for ${key}, (${counter}/${empIds.length})`);\r\n      await calculations.save(calc);\r\n    });\r\n    console.log(`Saving done!`);\r\n    payroll = await payrolls.getSingle(payrollId);\r\n    return payroll;\r\n  }\r\n\r\n  /**\r\n   * Does the full import for the given arrays\r\n   * @param input Original input from the HRSuunti software\r\n   * @param salaryBases The salary bases that are the target of this import before creating the Payroll objects\r\n   * @param employments The employment relations that have been created for the import.\r\n   */\r\n  public static doImport(input: HrSuuntiInput[], salaryBases: SalaryBasesRow[], employments: Employment[]): void {\r\n    const output = input.map((x) => this.mapToSalaryBases(x));\r\n    output.forEach((x) => this.resolveEmployment(x, employments));\r\n    this.resolveTypesAndPrices(output, this.getRowTypeMapperEditable());\r\n    salaryBases.length = 0;\r\n    salaryBases.push(...output);\r\n  }\r\n\r\n  /**\r\n   * Logic to resolve the employment relation.\r\n   * @param row A salary bases row where we attempt to fing an employment relation.\r\n   * @param employments All employment relations that are available for this account.\r\n   */\r\n  public static resolveEmployment(row: SalaryBasesRow, employments: Employment[]): void {\r\n    const id = (row.srcEmploymentId || \"\").toString().trim().toLowerCase();\r\n    if (!id) {\r\n      return;\r\n    }\r\n    row.employment = employments.find((x) =>\r\n      x?.id?.toLowerCase() == id ||\r\n      x?.personalInfo?.officialId?.toLowerCase() == id ||\r\n      x?.personalInfo?.avatar?.id?.toLowerCase() == id ||\r\n      x?.info?.sourceId?.toLowerCase() == id\r\n    );\r\n    if (row.employment) {\r\n      row.employmentId = row.employment.id;\r\n    }\r\n  }\r\n  /**\r\n   * Resolves the row types and prices based on\r\n   * raw data that has already been mapped to SalaryBasesRow and employments have been resolved.\r\n   * @param rows Incoming data where employments have already been resolved.\r\n   * @param mapper The mapper that is used in mapping source row types to Salaxy row types.\r\n   */\r\n  public static resolveTypesAndPrices(rows: SalaryBasesRow[], mapper: RowTypeMatch[]): void {\r\n    rows.forEach((row) => {\r\n      // Assure that the fields are strings, not numbers\r\n      // HACK: This should be done by the mapper based on the schema.\r\n      row.srcEmploymentId = row.srcEmploymentId?.toString();\r\n      row.srcRowTypeId = row.srcRowTypeId?.toString();\r\n      row.costCenter = row.costCenter?.toString();\r\n    });\r\n\r\n    const rowTypes = this.getRowTypeMapper(mapper);\r\n    rows.forEach((row) => this.resolveTypesAndPricesForRow(row, rowTypes));\r\n    const rowsByEmplyee = Arrays.groupBy(rows, (x) => x.employmentId);\r\n    Object.keys(rowsByEmplyee).forEach((key) => {\r\n      rowsByEmplyee[key].filter((val) => val.data?.kind == \"monthlySalary\").forEach((row, ix) => {\r\n        row.data = row.data ?? {};\r\n        row.data.kind = undefined;\r\n        if (ix > 0) {\r\n          row.rowType = undefined;\r\n          row.message = \"Useita kk-palkkoja, vain 1. laskelmaan\";\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  /** Temp method for getting the editable row type mapper. */\r\n  public static getRowTypeMapperEditable(): RowTypeMatch[] {\r\n    const res = Tables.import(this.rowTypeRaw, TableFormat.Txt, Culture.Fi);\r\n    res.data.forEach((row: RowTypeMatch) => {\r\n      row.data = row.data || {};\r\n      if (row.rowType) {\r\n        row.rowType = row.rowType.substring(0, 1).toLowerCase() + row.rowType.substring(1) as any;\r\n      }\r\n      if ((row as any).rowKind) {\r\n        row.data.kind = (row as any).rowKind.substring(0, 1).toLowerCase() + (row as any).rowKind.substring(1) as any;\r\n        delete((row as any).rowKind);\r\n      }\r\n    });\r\n    return res.data as any;\r\n  }\r\n\r\n  /** Gets and prepares a row type mapper for mapping */\r\n  public static getRowTypeMapper(mapper: RowTypeMatch[]): RowTypeMatch[] {\r\n    const mapperErrors = new ValidationHelper({});\r\n    mapper.forEach((match) => {\r\n      if (match.searchType == \"regExp\" && typeof match.search == \"string\") {\r\n        try {\r\n          match.search = new RegExp(match.search);\r\n        } catch (ex) {\r\n          mapperErrors.error(\"Invalid regex: \" + ex.message);\r\n          match.search = undefined;\r\n        }\r\n      }\r\n      if (match.search) {\r\n        if (match.type == \"row\") {\r\n          mapperErrors.checkNotEmpty(match, \"rowType\", `Match of type \"row\" must have a rowType (${match.search})`);\r\n        }\r\n      }\r\n    });\r\n    return mapper;\r\n  }\r\n\r\n  /**\r\n   * Modifies existing SalaryBasesRow that has preliminary data from the source\r\n   * @param row Row to modify as part of mapping process\r\n   */\r\n  public static resolveTypesAndPricesForRow(row: SalaryBasesRow, rowTypeMap: RowTypeMatch[]): void {\r\n\r\n    if (!row.employment) {\r\n      return; // This should no longer be allowed in import\r\n    }\r\n    // TODO: Set based on employment.work.wageBasis\r\n    const monthlySalary = row.employment.work?.salaryDefaults?.find((x) => x.rowType == CalculationRowType.MonthlySalary)?.price;\r\n    let hourlySalary = row.employment.work?.salaryDefaults?.find((x) => x.rowType == CalculationRowType.HourlySalary)?.price;\r\n    if (!hourlySalary && monthlySalary) {\r\n      // TODO: Default should be configurable per company / usecase\r\n      const hours = row.employment.work?.monthlyHours || 160;\r\n      hourlySalary = monthlySalary / hours;\r\n    }\r\n    const salaryType = monthlySalary ? CalculationRowType.MonthlySalary : (\r\n      hourlySalary ? CalculationRowType.HourlySalary : CalculationRowType.Salary\r\n    );\r\n\r\n    // TODO: add validation errors\r\n    row.srcRowTypeId = (row.srcRowTypeId || \"\").toString().trim();\r\n    if (!row.srcRowTypeId) {\r\n      row.rowType = CalculationRowType.Unknown;\r\n      row.message = \"Error: source row type is null/empty\";\r\n      return;\r\n    }\r\n    const match = rowTypeMap.filter((x) => !!x.search).find((x) =>\r\n      x.searchType == \"regExp\" ? (x.search as RegExp).test(row.srcRowTypeId || \"\")\r\n        : (x.search || \"\").toString().trim().toLowerCase() == (row.srcRowTypeId || \"\").trim().toLowerCase()\r\n    );\r\n    if (!match) {\r\n      row.rowType = CalculationRowType.Unknown;\r\n      row.message = \"No match for \" + row.srcRowTypeId;\r\n      return;\r\n    }\r\n    switch (match.type) {\r\n      case \"ignore\":\r\n        row.rowType = null;\r\n        row.message = match.message || match.comment;\r\n        break;\r\n      case \"hourlyRow\":\r\n        row.rowType = match.rowType || salaryType;\r\n        row.data = row.data || {};\r\n        row.data.kind = match.data?.kind;\r\n        row.message = match.message || match.comment;\r\n        row.price = (match.price || 1) * (hourlySalary ?? 0);\r\n        row.count = (match.count == null ? 1 : match.count) * (row.count == null ? 1 : row.count);\r\n        break;\r\n      case \"monthlySalary\":\r\n        row.rowType = CalculationRowType.MonthlySalary;\r\n        row.data = row.data || {};\r\n        row.data.kind = \"monthlySalary\";\r\n        row.message = match.message || match.comment;\r\n        row.price = match.price || monthlySalary;\r\n        row.count = match.count || row.count || 1; // Add more logic if necessary\r\n        break;\r\n      case \"row\": {\r\n        row.rowType = match.rowType;\r\n        row.data = row.data || {};\r\n        row.data.kind = match.data?.kind;\r\n        row.message = match.message || match.comment;\r\n        const priceCandidates = row.employment.work?.salaryDefaults?.filter((x) => x.rowType == row.rowType);\r\n        row.price = (priceCandidates?.find((x) => x.rowType == row.rowType && x.data?.kind == row.data?.kind)?.price)\r\n          || (priceCandidates?.find((x) => x.rowType == row.rowType && !x.data?.kind)?.price)\r\n          || match.price;\r\n      }\r\n    }\r\n    if (row.price) {\r\n      // Round the JavaScript-based calculations\r\n      row.price = Numeric.round(row.price, 6);\r\n    }\r\n    return;\r\n  }\r\n\r\n  /**\r\n   * Does the basic mapping from HrSuuntiInput to SalaryBases object.\r\n   * @param inputRow Input row from HR Suunti\r\n   * @returns The input mapped as SalaryBasesRow\r\n   */\r\n  public static mapToSalaryBases(inputRow: HrSuuntiInput): SalaryBasesRow {\r\n    // HACK: Replace this with a mapper\r\n    const result: SalaryBasesRow = {\r\n      date: inputRow.PVM,\r\n      srcEmploymentId: inputRow.TYNRO?.toString(),\r\n      srcRowTypeId: inputRow.PLNRO?.toString(),\r\n      message: null,\r\n      count: inputRow[\"KPL/MISTÄ\"],\r\n      price: null,\r\n      rowType: CalculationRowType.Unknown,\r\n      costCenter: inputRow.OSASTO?.toString(),\r\n    };\r\n    return result;\r\n  }\r\n\r\n  private static rowTypeRaw = `search\tsearchType\ttype\trowType\trowKind\tcount\tprice\tmessage\tcomment\r\n^[0-9]$\tregExp\tignore\t\t\t\t\t\tPLNRO 1-9 ei tuoda.\r\n140\t\thourlyRow\tHolidaySalary\t\t\t\tMuu lomapalkka\tMuu lomapalkka (perhevapaa ym)\r\n177\t\trow\tWorkingTimeCompensation\tEmergencyWorkCompensation\t\t\tHälytysraha\tTuntien tasaus TX => ei tuoda.\r\n11\t\tignore\t\t\t\t\t\t\r\n31\t\trow\tSalary\t\t\t50\tUinninvalvonta palkkio (krt)\t\r\n59\t\thourlyRow\tPaidSickLeaveHourlySalary\t\t\t\t\tSairasajan palkka/tt\r\n60\t\thourlyRow\tHourlySalary\t\t\t\t\tTuntityö (ATP)\r\n64\t\tignore\t\t\t\t\t\tTehtäväkoht. lisä => ei tuoda.\r\n^85|94$\tregExp\thourlyRow\tSundayWork\t\t\t\t\tSunnuntaityö 100 %/tt OR /kk\r\n^87|96$\tregExp\thourlyRow\tSaturdayAddition\t\t\t0,2\t\tLauantaityö 20 %/tt OR Lauantaityö 20% /kk\r\n90\t\thourlyRow\tOvertime\t\t\t0,5\tYlityöt 50%\tYlityö 50%/kk\r\n91\t\thourlyRow\tOvertime\t\t\t1\tYlityöt 100%\tYlityö 100%/kk\r\n99\t\thourlyRow\tWorkingTimeCompensation\tExtraWorkPremium\t\t\tLisätyökorvaus\tLisätyökorvaus/kk\r\n102\t\thourlyRow\tSaturdayAddition\t\t\t0,2\tAattolisä\tAattolisä/kk\r\n108\t\thourlyRow\t\t\t\t-1\tVäh. kk-palkka/tunti\tVäh. kk-palkka/tunti\r\n109\t\thourlyRow\tPaidSickLeaveMonthlySalary\t\t\t\t\tSairasajan palkka/kk/tunti\r\n188\t\thourlyRow\tNightimeAddition\t\t\t0,45\t\tYötyökorvaus %/kk\r\n^189|191$\tregExp\thourlyRow\tEveningAddition\t\t\t0,15\t\tIltatyökorvaus %/kk OR %/tt\r\n513\t\thourlyRow\t\t\t\t\tKoulutusajan palkka/kk/tunti\tKoulutusajan palkka/kk/tunti\r\n997\t\tmonthlySalary\tMonthlySalary\t\t1\t\t\tKk-palkka\r\n`;\r\n}\r\n\r\n/** Data model for the import from HR Suunti */\r\nexport interface HrSuuntiInput {\r\n  /** Logical date for the material */\r\n  PVM: string,\r\n  /** Worker ID in HR Suunti system. */\r\n  TYNRO: number,\r\n  /** Salary row type in Suunti system */\r\n  PLNRO: number,\r\n  /** Some unknown data that is not supported by this import. */\r\n  TVR: string,\r\n  /** Amount or from */\r\n  \"KPL/MISTÄ\": number,\r\n  /** Time or until */\r\n  \"AIKA/MIHIN\": number,\r\n  /** Price in euro */\r\n  \"MK/EUR\": number,\r\n  /** Cost center (dimension 1) */\r\n  \"OSASTO\": number,\r\n}\r\n","import { ApiValidation, ApiValidationErrorType } from \"../../model\";\r\nimport { DataRow } from \"./DataRow\";\r\nimport { ImportResult } from \"./ImportResult\";\r\nimport { Importable } from \"./Importable\";\r\nimport { FileParser } from \"./FileParser\";\r\nimport { Culture } from \"./Culture\";\r\nimport { progressNotification } from \"../../ui\";\r\nimport { DataMapper } from \"./DataMapper\";\r\nimport { ValidationHelper } from \"../ValidationHelper\";\r\nimport { JsonSchemaUtils } from \"../../util\";\r\nimport { Translations } from \"../Translations\";\r\n\r\n/**\r\n * Logic for the batch import of data from sequence files.\r\n * @param TTarget is the target item data type of the import.\r\n */\r\nexport class ImportBatch<TTarget> {\r\n\r\n  /** Raw file data for importing. E.g. csv or tab formatted file. */\r\n  public rawData: string;\r\n\r\n  /** Parsed tabular data but not mapped */\r\n  public unmappedData: ImportResult<DataRow>;\r\n\r\n  /** The data mapper used by the batch. */\r\n  public mapper: DataMapper<any, any>;\r\n\r\n  /**\r\n   * A pre-mapper for the parsing logic:\r\n   * Used by the user interface to map the parsed text file data to assumed / originally defined source.\r\n   */\r\n  public parserMapper: DataMapper<any, any> | undefined;\r\n\r\n  /**\r\n   * Creates a new batch for data import.\r\n   * @param mapper Mapper object for table to objects transformations.\r\n   * Preselected from the Importable API.\r\n   * @param api Api object for validting and posting data to API.\r\n   */\r\n  constructor(mapper: DataMapper<any, any>, private api: Importable<TTarget>) {\r\n    this.setMapper(mapper);\r\n  }\r\n\r\n  /** Result data of the current operation (map, validate, import). */\r\n  public get data(): TTarget[] {\r\n    return this.mapper?.target?.value;\r\n  }\r\n\r\n  /**\r\n   * Sets the mapper for the batch.\r\n   * @param mapper The new data mapper.\r\n   */\r\n  public setMapper(mapper: DataMapper<any, any>): void {\r\n    this.mapper = mapper;\r\n    this.resetParserMapper();\r\n  }\r\n\r\n  /** Resets the parser mapper according unmappedData (source) and mapper source (target) */\r\n  public resetParserMapper(): void {\r\n    const mainMapperSourceSchema = this.mapper?.source?.getSchema();\r\n    if (!mainMapperSourceSchema) {\r\n      this.parserMapper = undefined;\r\n      return;\r\n    }\r\n    const mapper = this.parserMapper = new DataMapper(\"temp/parserMapper\", \"Parser mapper: From text file to defined source.\");\r\n    mapper.setSchema(mainMapperSourceSchema, this.mapper?.source.name, \"target\");\r\n    const parserSourceSchema = JsonSchemaUtils.guessSchema(this.unmappedData?.data[0]);\r\n    if (!parserSourceSchema) {\r\n      return;\r\n    }\r\n    mapper.setSchema(parserSourceSchema, \"inputFileSource\", \"source\");\r\n    const map = {};\r\n    const targetKeys = mapper.target.keys;\r\n    mapper.source.keys.forEach((key) => {\r\n      map[key] = (targetKeys.indexOf(key) >= 0) ? key : null;\r\n    });\r\n    mapper.setPaths(map);\r\n    mapper.source.value = this.unmappedData?.data;\r\n  }\r\n\r\n  /**\r\n   * Read data into batch from the import file content (to unmappedData).\r\n   * @param rawData File content, e.g. csv or tab separated data.\r\n   * @param parser Parser for parsing data to tabular format.\r\n   * @param localeId If 'fi', the number and date formats are parsed using Finnish formats.\r\n   * @returns the status of the read.\r\n   */\r\n  public read(rawData: string | undefined = undefined, parser: FileParser, localeId: Culture = Culture.Fi): ApiValidation | undefined {\r\n    this.rawData = rawData || this.rawData;\r\n    this.unmappedData = parser.parse(this.rawData, localeId);\r\n    this.resetParserMapper();\r\n    const status = new ValidationHelper({\r\n      errors: this.unmappedData.errors,\r\n    });\r\n    if (!this.unmappedData.data.length) {\r\n      status.warn(\"WARNING: Import contains no data!\", \"import.warning.noData\");\r\n    }\r\n    if (this.unmappedData.ignoredLines) {\r\n      status.warn(`${this.unmappedData.ignoredLines} ${Translations.get(\"SALAXY.NG1.ODataImportComponent.step2.emptyRow\")}`, \"import.ignoredLines.warning\");\r\n    }\r\n    status.recalc();\r\n    return status.validation;\r\n  }\r\n\r\n  /**\r\n   * Maps the source format to the target format using the mapper.\r\n   */\r\n  public map(): void {\r\n    if (!this.mapper) {\r\n      return;\r\n    }\r\n    if (this.parserMapper) {\r\n      this.parserMapper.source.value = this.unmappedData.data;\r\n      this.parserMapper.doMap();\r\n      this.mapper.source.value = this.parserMapper.target.value;\r\n    } else {\r\n      this.mapper.source.value = this.unmappedData.data;\r\n    }\r\n    this.mapper.doMap();\r\n  }\r\n\r\n  /** Returns true if the import data is valid */\r\n  public get isDataValid(): boolean {\r\n    return (this.data?.length ?? 0) > 0 && this.data.every((x) => this.getMeta(x).validation?.isValid);\r\n  }\r\n\r\n   /** Returns true if the import data contains validation errors */\r\n   public get hasDataValidationErrors(): boolean {\r\n    return (this.data?.length ?? 0) > 0 && this.data.some((x) => this.getMeta(x).validation && this.getMeta(x).validation?.errors && !!(this.getMeta(x).validation?.errors?.length ?? 0));\r\n  }\r\n\r\n  /** Clears validation from the rows */\r\n  public clearValidation(): void {\r\n    for (const row of this.mapper.source.value) {\r\n      const metaObject = this.getMeta(row);\r\n      metaObject.validation = undefined;\r\n      metaObject.object = undefined;\r\n    }\r\n    for (const row of this.data) {\r\n      const metaObject = this.getMeta(row);\r\n      metaObject.validation = undefined;\r\n      metaObject.object = undefined;\r\n    }\r\n  }\r\n\r\n  private getMeta(obj: any): { validation: ApiValidation | undefined, object: any } {\r\n    return obj || {};\r\n  }\r\n\r\n  /**\r\n   * Validates the batch data.\r\n   * @param notify Function for notifying progress to caller.\r\n   * @returns A validation object with potential errors.\r\n   */\r\n  public validate(notify: progressNotification<ApiValidation> | undefined = undefined): Promise<ApiValidation | undefined> {\r\n\r\n    const tryValidate = (obj: TTarget, ix: number, all: TTarget[]): Promise<ApiValidation> => {\r\n      try {\r\n        return this.api.validate(obj, ix, all).then((apiResult) => {\r\n          return apiResult?.validation;\r\n        });\r\n      } catch (error) {\r\n        return Promise.resolve({\r\n          isValid: false,\r\n          errors: [{\r\n            key: null,\r\n            type: ApiValidationErrorType.General,\r\n            code: error.name || \"Server error\",\r\n            msg: error.message || JSON.stringify(error, Object.getOwnPropertyNames(error)),\r\n          }],\r\n        });\r\n      }\r\n    };\r\n\r\n    const status = new ValidationHelper({});\r\n\r\n    this.clearValidation();\r\n    const objects = this.data;\r\n    let index = 0;\r\n    const next = (): Promise<void> => {\r\n      if (index === objects.length) {\r\n        return Promise.resolve();\r\n      }\r\n      const obj = objects[index];\r\n      return tryValidate(obj, index, objects)\r\n        .then((validationResult) => {\r\n          if (notify) {\r\n            notify(\"validate\", index, objects.length, validationResult);\r\n          }\r\n          this.updateValidation(index, validationResult);\r\n          status.merge(validationResult);\r\n          index++;\r\n          return next();\r\n        });\r\n    };\r\n\r\n    return next().then(() => {\r\n      status.recalc();\r\n      return status.validation;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Imports the batch data.\r\n   * @param notify Function for notifying progress to caller.\r\n   */\r\n  public import(notify: progressNotification<ApiValidation> | undefined = undefined): Promise<ApiValidation | undefined> {\r\n\r\n    const tryImport = (obj: TTarget): Promise<\r\n      {\r\n        /** saved object */\r\n        object: TTarget,\r\n        /** error */\r\n        validation: ApiValidation,\r\n      }> => {\r\n      try {\r\n        return this.api.importItem!(obj).then((apiResult) => {\r\n          return { object: apiResult, validation: { isValid: true } };\r\n        });\r\n      } catch (error) {\r\n        return Promise.resolve({\r\n          object: obj,\r\n          validation: {\r\n            isValid: false,\r\n            errors: [{\r\n              key: null,\r\n              type: ApiValidationErrorType.General,\r\n              code: error.name || \"Server error\",\r\n              msg: error.message || JSON.stringify(error, Object.getOwnPropertyNames(error)),\r\n            }],\r\n          },\r\n        });\r\n      }\r\n    };\r\n\r\n    this.clearValidation();\r\n    const status = new ValidationHelper({});\r\n\r\n    const objects = this.data;\r\n    let index = 0;\r\n    const next = (): Promise<void> => {\r\n      if (index === objects.length || !this.api.importItem) {\r\n        return Promise.resolve();\r\n      }\r\n      const obj = objects[index];\r\n      return tryImport(obj)\r\n        .then((tryResult) => {\r\n          if (notify) {\r\n            notify(\"import\", index, objects.length, tryResult.validation);\r\n          }\r\n          this.updateValidation(index, tryResult.validation);\r\n          status.merge(tryResult.validation);\r\n          index++;\r\n          return next();\r\n        });\r\n    };\r\n    status.recalc();\r\n    return next().then(() => {\r\n      if (this.api.finalize) {\r\n        this.api.finalize(objects).then(() => {\r\n          return status.validation;\r\n        });\r\n      }\r\n      return status.validation;\r\n    });\r\n  }\r\n\r\n  private updateValidation(objectIndex: number, validation: ApiValidation): void {\r\n    // TODO: Consider is it possible to show validation when 1-to-n mapping\r\n    // TODO: Consider should we have this as $meta.validation\r\n    this.getMeta(this.mapper.source.value[objectIndex]).validation = validation;\r\n    this.getMeta(this.data[objectIndex]).validation = validation;\r\n  }\r\n}\r\n","import { progressNotification } from \"../../ui\";\r\nimport { ApiListItem } from \"../../model\";\r\nimport { DataMapper } from \"./DataMapper\";\r\nimport { Exportable } from \"./Exportable\";\r\nimport { Translations } from \"../Translations\";\r\n\r\n/** Methods for importing data into Salaxy system. */\r\nexport class ExportLogic {\r\n  /**\r\n   * Gets the export data and does the mapping potentially asynchronously and emitting notifications to the user interface.\r\n   * NOTE: This method is for EXPORT functionality. If there are more methods like this, create a separate ExportHelpers.\r\n   * @param exportApi The API that implements the Exportable interface: Fetching of the data.\r\n   * @param mapper The preloaded mapper that is selected and resoplved.\r\n   * @param maxCount Maximum count of items. null/0 for all items.\r\n   * @param notify Optional progress notification function\r\n   * @returns Result DataRows as mapped.\r\n   */\r\n  public static getExportData(exportApi: Exportable<any>, mapper: DataMapper<any, any>, maxCount?: number, notify: progressNotification<void> | undefined = undefined): Promise<any[]> {\r\n    if (mapper.isSourceAList) {\r\n      // The list is what it is => No need to query items separately\r\n      return exportApi.list(maxCount, notify).then((items) => {\r\n        return mapper.doMap(items);\r\n      });\r\n    } else {\r\n\r\n      // We are querying the payload items from API one-by-one.\r\n\r\n      const getRows: (items: ApiListItem[], notify?: progressNotification<void>) => Promise<any[]>\r\n        = (items, notify) => {\r\n          const rows: any[] = [];\r\n          let index = 0;\r\n          const next = (): Promise<void> => {\r\n            if (index === items.length) {\r\n              return Promise.resolve();\r\n            }\r\n            return exportApi.getSingle(items[index])\r\n              .then((apiResult) => {\r\n                rows.push(...mapper.doMap([apiResult]));\r\n                if (notify) {\r\n                  notify(Translations.get(\"SALAXY.NG1.ExportComponent.creatingRows\"), index, items.length);\r\n                }\r\n                index++;\r\n                return next();\r\n              });\r\n          };\r\n          return next().then(() => {\r\n            return rows;\r\n          });\r\n        };\r\n\r\n      return exportApi.list(maxCount, notify).then((items) => {\r\n        return getRows(items, notify).then((rows) => {\r\n          // this extra resolve is required for the post copy -paste call to succeed in NG1 library.\r\n          return Promise.resolve(rows);\r\n        });\r\n      });\r\n    }\r\n\r\n  }\r\n\r\n}\r\n","/** WorktimeImportKnownUsecase enumeration */\r\nexport enum WorktimeImportKnownUsecase {\r\n  Unknown = \"unknown\",\r\n  Palkkaus = \"palkkaus\",\r\n  Mepco = \"mepco\",\r\n  Tyovuorovelho = \"tyovuorovelho\",\r\n  MaraPlan = \"maraPlan\",\r\n  Other = \"other\",\r\n}","import { DateRange } from \"../../../model\";\r\n\r\n/**\r\n * Class that allows serializing the metadata of worktime preview calculation (in relation to payroll) to Blob storage metadata and back.\r\n */\r\nexport class WorktimeImportPreviewMetadata {\r\n\r\n  /** Period for the calculation */\r\n  public period: DateRange;\r\n\r\n  /** Salary date for the payroll, undefined for worktime. */\r\n  public salaryDate?: string;\r\n\r\n  /** Metadata about the preview calculations */\r\n  public calcs: {\r\n    /** Number of calculations, typically 1, except for \"totals\" */\r\n    count: number,\r\n    /** Total gross salary */\r\n    gross: number,\r\n    /** Total worker payment as net. */\r\n    net: number,\r\n  };\r\n\r\n  /** Number of rows */\r\n  public rows: {\r\n    /** Total number of rows. */\r\n    count: number,\r\n    /** Rows that are in preview state: Not yet approved in source system. */\r\n    preview: number,\r\n    /** New rows very for approval in staging / to be committed to Palkkaus (approved in source system). */\r\n    new: number;\r\n    /** Rows that have been committed to Palkkaus */\r\n    committed: number,\r\n    /** Marked as ignored by payroll expert, will not be committed. */\r\n    ignored: number,\r\n    /** Deleted rows: Only committed rows can be marked deleted. If a new or preview row is deleted in source system, it is simply removed from data. */\r\n    deleted: number,\r\n    /** Rows manually edited, not currently in use. */\r\n    edited: number,\r\n    /** Rows that have validation errors and cannot be committed. */\r\n    error: number,\r\n  };\r\n\r\n}\r\n\r\n(()=>{ /* Snowpack Noop HACK for: https://github.com/snowpackjs/snowpack/issues/3585 */ })();","/** WorktimeImportStatus enumeration */\r\nexport enum WorktimeImportStatus {\r\n  Uploaded = \"uploaded\",\r\n  Parsed = \"parsed\",\r\n  Processing = \"processing\",\r\n  Processed = \"processed\",\r\n  Error = \"error\",\r\n  Archived = \"archived\",\r\n}","/** Unit of accrued time. */\r\nexport enum WorktimeImportAccrualUnit {\r\n  /** Hours */\r\n  Hours = \"hours\",\r\n  /** Days */\r\n  Days = \"days\",\r\n}\r\n\r\n(()=>{ /* Snowpack Noop HACK for: https://github.com/snowpackjs/snowpack/issues/3585 */ })();","/** Kind of accrued time. */\r\nexport enum WorktimeImportAccrualKind {\r\n  /** Register addition/subtraction  */\r\n  Default = \"default\",\r\n  /** Current saldo for the total accruing period. For example, start saldo for the holiday year. */\r\n  Saldo = \"saldo\",\r\n}\r\n\r\n(()=>{ /* Snowpack Noop HACK for: https://github.com/snowpackjs/snowpack/issues/3585 */ })();","/** Type of accrued time. */\r\nexport enum WorktimeImportAccrualType {\r\n  /** Holiday accrual. Typically registered for a month. */\r\n  HolidayAccrual = \"holidayAccrual\",\r\n  /** Employees earn paid time off as 'accrued days off'*/\r\n  AccruedDaysOff = \"accruedDaysOff\",\r\n}\r\n\r\n(()=>{ /* Snowpack Noop HACK for: https://github.com/snowpackjs/snowpack/issues/3585 */ })();","import { Ajax } from \"../../api/infra\";\r\nimport type { WorktimeImport } from \"./model\";\r\n\r\n/** Connector for a single service in the staging API. */\r\nexport class StagingApiConnector<TDetails, TList> {\r\n\r\n  /** Current JSON for upload */\r\n  public currentJson = \"\";\r\n\r\n  /** The current selected item */\r\n  public current: TDetails | undefined;\r\n\r\n  /** List of items after they have been loaded from the server. */\r\n  public list: TList[] = [];\r\n\r\n  /** Error message from save operation. */\r\n  public error = \"\";\r\n\r\n  constructor(protected serviceUrl: string, protected ajax: Ajax, private getBlank: () => TDetails) {\r\n  }\r\n\r\n  /** Sets the current item */\r\n  public setCurrent(item: TDetails | undefined): void {\r\n    if (!item) {\r\n      this.currentJson = \"\";\r\n      this.current = undefined;\r\n      return;\r\n    }\r\n    this.current = item;\r\n    this.currentJson = JSON.stringify(item, null, 2);\r\n  }\r\n\r\n  /** Shows the details view */\r\n  public showDetails(id: string): void {\r\n    this.ajax.getJSON(this.serviceUrl + \"/\" + id).then((result) => {\r\n      this.setCurrent(result);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Gets an item by ID. This does not set the current item.\r\n   * @param id Item ID to get.\r\n   */\r\n  public async getItem(id: string): Promise<TDetails> {\r\n    return await this.ajax.getJSON(this.serviceUrl + \"/\" + id);\r\n  }\r\n\r\n  /**\r\n   * Save any item to the server: Not connected to current item in any way.\r\n   * @param item Item to save.\r\n   */\r\n  public async saveItem(item: TDetails): Promise<TDetails> {\r\n    const result: TDetails = await this.ajax.postJSON(this.serviceUrl, item);\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Saves changes to the current item.\r\n   * @returns The saved item after save done.\r\n   */\r\n  public async saveCurrent(): Promise<TDetails> {\r\n    if (!this.current) {\r\n      throw new Error(\"Current item is not set\");\r\n    }\r\n    const savedItem = await this.saveItem(this.current);\r\n    this.setCurrent(savedItem);\r\n    return savedItem;\r\n  }\r\n\r\n  /** Creates a new item */\r\n  public createNew(): void {\r\n    this.setCurrent(this.getBlank());\r\n  }\r\n\r\n  /**\r\n   * Reloads the list. Also sets the current item to undefined.\r\n   * @returns The list of items after reload.\r\n   */\r\n  public async reloadList(): Promise<TList[]> {\r\n    this.setCurrent(undefined);\r\n    const result = await this.ajax.getJSON(this.serviceUrl);\r\n    this.list = result.value;\r\n    return this.list;\r\n  }\r\n\r\n  /** Saves the current JSON. */\r\n  public saveJson(): void {\r\n    this.ajax.postJSON(this.serviceUrl, JSON.parse(this.currentJson)).then((result) => {\r\n      this.setCurrent(result);\r\n      this.reloadList();\r\n    }).catch((error) => {\r\n      this.error = error.data || error;\r\n    });\r\n  }\r\n\r\n  /** Deletes an item */\r\n  public delete(id: string): void {\r\n    this.ajax.remove(this.serviceUrl + \"/\" + id).then(() => {\r\n      this.setCurrent(undefined);\r\n      this.reloadList();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Calls the Update worktime method in the API (like the integrating services would).\r\n   * @param worktimeImportData Data that is sent to the API.\r\n   * This data may contain rows or employment relations or both and they are parsed, validated and saved in the API\r\n   * as one set of rows employment. Employments are created / updated as necessary.\r\n   */\r\n  public async callUpdateWorktime(worktimeImportData: WorktimeImport): Promise<WorktimeImport> {\r\n    const result: WorktimeImport = await this.ajax.postJSON(this.serviceUrl + \"/update-worktime\", worktimeImportData);\r\n    return result;\r\n  }\r\n\r\n}","import { Ajax } from \"../../api/infra\";\r\nimport { Dates, OData, ODataQueryOptions } from \"../../util\";\r\nimport { CalculationRowSource } from \"../../model\";\r\nimport type { Calculation } from \"../../model\";\r\nimport type { InputEnumOption } from \"../../ui\";\r\nimport { WorktimeImportStatus } from \"./model\";\r\nimport type { WorktimeImport, WorktimeImportRow, WorktimeImportInStagingListItem } from \"./model\";\r\nimport { StagingApiConnector } from \"./StagingApiConnector\";\r\nimport { Payrolls } from \"../../api\";\r\n\r\n/** Connects to Worktime service in the staging server */\r\nexport class WorktimeApiConnector extends StagingApiConnector<WorktimeImport, WorktimeImportInStagingListItem> {\r\n\r\n  /** The current rows filtered by current payroll */\r\n  public filteredRows: WorktimeImportRow[] | undefined = [];\r\n\r\n  /** Manually editable rows */\r\n  public editableRows: WorktimeImportRow[] | undefined = [];\r\n\r\n  /** Number of rows that are outside the already created Payrolls. */\r\n  public rowsOutsidePayrollCount: number = 0;\r\n\r\n  /**\r\n   * List of payrolls (metadata) available in the system.\r\n   * Undefined if the payrolls have not yet been fetched.\r\n   */\r\n  public payrolls: InputEnumOption[] | undefined = undefined;\r\n\r\n  private _detailsPayrollId: string | undefined = undefined;\r\n\r\n  constructor(serviceUrl: string, ajax: Ajax) {\r\n    super(serviceUrl, ajax, WorktimeApiConnector.getBlank);\r\n  }\r\n\r\n  /**\r\n   * Current payroll id in the details view (typically employment relations specific, but may carry out from one employment to another when swtiching).\r\n   * This is different from payrollId which is the payroll id in the list view.\r\n   */\r\n  public get detailsPayrollId(): string | undefined {\r\n    return this._detailsPayrollId;\r\n  }\r\n  public set detailsPayrollId(value: string | undefined) {\r\n    this._detailsPayrollId = value;\r\n    this.setFiltersForDetailsPayroll();\r\n  }\r\n\r\n  /**\r\n   * Gets the current payroll (metadata) in details view based on the detailsPayrollId.\r\n   * @returns The payroll metadata if found or undefined.\r\n   */\r\n  public get detailsPayroll(): InputEnumOption | undefined {\r\n    return this.payrolls?.find(x => x.value == this.detailsPayrollId);\r\n  }\r\n\r\n  /** Current calc is the main preview calculation if available. */\r\n  public get currentCalc(): Calculation | undefined {\r\n    if (!this.current?.preview?.calculations?.length || !this.detailsPayrollId) {\r\n      return undefined;\r\n    }\r\n    return this.current.preview.calculations.find(x => x.info?.payrollId == this.detailsPayrollId);\r\n  }\r\n\r\n  /**\r\n   * Gets the worktime imports filtered by payroll.\r\n   * @param payrollId - The payroll id to filter by.\r\n   * @returns The filtered list of worktime imports.\r\n   */\r\n  public getFilteredList(payrollId: string | undefined): WorktimeImportInStagingListItem[] {\r\n    if (!payrollId) {\r\n      return this.list;\r\n    }\r\n    return this.list.filter(x => x.payrolls[payrollId]);\r\n  }\r\n\r\n  /**\r\n   * Fetches all payrolls and stores them in the payrolls property.\r\n   * The calling components should typically call this method in init.\r\n   * It is not in the constructor because AngularJS needs to get the promise and call timeout to get the UI to update.\r\n   */\r\n  public async fetchAllPayrolls(): Promise<void> {\r\n    const payrolls = await OData.getAllItems((options: ODataQueryOptions) => {\r\n      return new Payrolls(this.ajax).getOData(options);\r\n    }, {});\r\n    this.payrolls = payrolls.map(x => ({\r\n      value: x.id,\r\n      text: x.data?.title,\r\n      ui: {\r\n        start: x.data?.periodStart,\r\n        end: x.data?.periodEnd,\r\n        date: x.salaryDate,\r\n        calcCount: x.data?.calcCount,\r\n        // Not sure if this is really needed.\r\n        rangeText: Dates.getFormattedRange(x.data?.periodStart || this.current?.header?.period?.start || \"1900-01-01\", x.data?.periodEnd || this.current?.header?.period?.end || \"2100-01-01\"),\r\n      }\r\n    })) as any;\r\n    this.payrolls?.splice(0, 0, {\r\n      value: \"unknown\",\r\n      text: \"Rivit palkkalistojen ulkopuolella\",\r\n      ui: {\r\n        start: Dates.getToday(),\r\n        end: Dates.getToday(),\r\n        date: Dates.getToday(),\r\n        calcCount: 0,\r\n        rowCount: 0,\r\n        previewCalcId: undefined,\r\n        previewCalcRowCount: 0,\r\n      }\r\n    });\r\n    this.payrolls = this.payrolls?.sort((a, b) => (b.ui?.start ?? \"\").localeCompare(a.ui?.start ?? \"\"));\r\n  }\r\n\r\n  /**\r\n   * Marks the selected rows with given state.\r\n   * @param rows - The rows to mark.\r\n   * @param status - The status to set.\r\n   * Status \"new\" is essentially reverting the state from \"ignored\" => final state may be \"preview\", \"new\" or \"error\" depending on other properties of the row.\r\n   */\r\n  public async setStatus(rows: WorktimeImportRow[], status: \"ignored\" | \"new\"): Promise<WorktimeImport> {\r\n    if (!this.current?.id) {\r\n      throw new Error(\"No current item to update status for.\");\r\n    }\r\n    const result = await this.ajax.postJSON(this.serviceUrl + \"/update-worktime-status\", {\r\n      id: this.current.id,\r\n      status,\r\n      rows,\r\n    }) as WorktimeImport;\r\n    this.setCurrent(result);\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Moves the selected rows to the given payroll.\r\n   * @param rows - The rows to move.\r\n   * @param payrollId - The payroll id to move to.\r\n   * @returns The updated worktime import.\r\n   */\r\n  public async moveToPayroll(rows: WorktimeImportRow[], payrollId: string): Promise<WorktimeImport> {\r\n    if (!this.current?.id) {\r\n      throw new Error(\"No current item to update status for.\");\r\n    }\r\n    if (!payrollId || !rows.length) {\r\n      throw new Error(\"Payroll ID and rows are required.\");\r\n    }\r\n    const result = await this.ajax.postJSON(this.serviceUrl + \"/move-to-payroll\", {\r\n      id: this.current.id,\r\n      payrollId,\r\n      rows,\r\n    }) as WorktimeImport;\r\n    this.setCurrent(result);\r\n    return result;\r\n  }\r\n\r\n  /** Sets the current item in the UI. */\r\n  public setCurrent(item: WorktimeImport | undefined): void {\r\n    super.setCurrent(item);\r\n    if (!item?.preview?.calculations?.length) {\r\n      this.rowsOutsidePayrollCount = 0;\r\n      this.setFiltersForDetailsPayroll();\r\n      return;\r\n    }\r\n    this.rowsOutsidePayrollCount = item.rows?.filter(x => (x.data?.payrollId || \"unknown\") == \"unknown\").length ?? 0;\r\n    this.payrolls?.forEach(x => {\r\n      if (x.value == \"unknown\") {\r\n        x.text = `Rivit palkkalistojen ulkopuolella`;\r\n\r\n        x.ui.rowCount = this.rowsOutsidePayrollCount;\r\n        x.ui.previewCalcId = undefined;\r\n        x.ui.previewCalcRowCount = 0;\r\n      } else {\r\n        x.ui.rowCount = item.rows?.filter(y => y.data?.payrollId == x.value).length ?? 0;\r\n        const calc = item.preview?.calculations?.find(y => y.info?.payrollId == x.value);\r\n        x.ui.previewCalcId = calc?.id;\r\n        x.ui.previewCalcRowCount = calc?.rows?.length ?? 0;\r\n      }\r\n\r\n    });\r\n    this.setFiltersForDetailsPayroll();\r\n  }\r\n\r\n  /**\r\n   * Client-side (synchronous) method for getting a new blank item as bases for UI binding.\r\n   * TODO: Move to helpers.\r\n   */\r\n  public static getBlank(): WorktimeImport {\r\n    return {\r\n      rows: [],\r\n      files: [],\r\n      header: {\r\n        period: {},\r\n        status: WorktimeImportStatus.Uploaded,\r\n      },\r\n      usecase: {\r\n        data: {},\r\n      },\r\n      workflowData: {\r\n        events: [],\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Recalculates a worktime item in storage.\r\n   * @param id Identifier of the worktime item to recalculate. If none, is specified recaculates the current (current is also set).\r\n   * @returns The recalculated worktime item or undefined if not found / no current & id.\r\n   */\r\n  public async recalculateWorktime(id?: string): Promise<WorktimeImport | undefined> {\r\n    const setCurrent = !id;\r\n    id = (id || this.current?.id) ?? undefined;\r\n    if (!id) {\r\n      return undefined;\r\n    }\r\n    const result = await this.ajax.postJSON(this.serviceUrl + \"/recalculate/\" + id, {});\r\n    if (setCurrent) {\r\n      this.setCurrent(result);\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Saves the manual rows to the server.\r\n   * @returns The updated worktime import.\r\n   */\r\n  public async saveManualRows(): Promise<void> {\r\n    if (!this.detailsPayrollId) {\r\n      throw new Error(\"No payroll selected for manual rows.\");\r\n    }\r\n    this.current ??= {};\r\n    this.current.rows ??= [];\r\n    this.current.rows = this.current.rows.filter(x => x.source != CalculationRowSource.ManualRow);\r\n    this.editableRows?.forEach(x => {\r\n      x.employmentId = this.current?.id;\r\n\r\n      x.source = CalculationRowSource.ManualRow;\r\n      x.status = \"edited\";\r\n      x.data ??= {};\r\n      x.data.payrollId = this.detailsPayrollId;\r\n      x.period = x.period || {};\r\n      x.period.start = x.period.start || this.detailsPayroll?.ui?.start;\r\n      x.period.end = x.period.end || this.detailsPayroll?.ui?.start;\r\n      this.current?.rows?.push(x);\r\n\r\n    });\r\n    this.setFiltersForDetailsPayroll();\r\n    await this.saveCurrent();\r\n  }\r\n\r\n  private setFiltersForDetailsPayroll() {\r\n    if (!this.current) {\r\n      this.filteredRows = [];\r\n      this.editableRows = [];\r\n      return;\r\n    }\r\n    if (this.detailsPayrollId) {\r\n      this.filteredRows = this.current.rows?.filter(x => x.data?.payrollId == this.detailsPayrollId);\r\n      this.editableRows = this.filteredRows?.filter(x => x.source == CalculationRowSource.ManualRow);\r\n      return;\r\n    }\r\n    this.filteredRows = this.current.rows?.filter(x => !x.data?.payrollId);\r\n    this.editableRows = [];\r\n  }\r\n\r\n}","import { Numeric } from \"../util/Numeric\";\r\nimport { AccountingData, ExportMethod, LedgerEntry } from \"../model\";\r\nimport { Dates } from \"../util/Dates\";\r\nimport { Translations } from \"../logic/Translations\";\r\n\r\n/** TargetOption */\r\ninterface TargetOptions {\r\n  [key: string]: TargetOption;\r\n}\r\n\r\n/** TargetOption */\r\ninterface TargetOption {\r\n  /** Export function */\r\n  getExportData?: (accountingData: AccountingData, schemeId?: string, target?: TargetOption) => any[];\r\n\r\n  /** List of supported schemes */\r\n  schemes?: { id: string, label: string }[],\r\n\r\n  /** Default export method */\r\n  defaultExportMethod?: string;\r\n  /** Boolean indicating if the csv export should contain quoted strings */\r\n  noCsvQuotedStrings?: boolean;\r\n\r\n  /** Boolean indicating if the csv export should contain byte order mark */\r\n  noCsvBom?: boolean;\r\n\r\n  /** Format data as text*/\r\n  formatAsText?: (data: any[], isFinnish: boolean) => string;\r\n\r\n  /** File extension for the text files. If not given, the default extension will be used */\r\n  textFileExtension?: string;\r\n\r\n  /** List of dimensions from the settings. */\r\n  dimensions?: string[];\r\n}\r\n\r\n/**\r\n * Provides business logic to AccountingReportTools\r\n */\r\nexport class AccountingTargetLogic {\r\n\r\n\r\n  /**\r\n   * Get supported TargetOptions\r\n   * @returns All supported export TargetOptions\r\n   */\r\n  public static getSupportedTargets(): TargetOptions {\r\n    return {\r\n      // Palkkaus.fi\r\n      \"36dff2e2-e181-4f0d-9004-0e4aa92f5e17\":\r\n      {\r\n        getExportData: (accountingData: AccountingData, schemeId: string) => {\r\n          return this.getPalkkausExportData(accountingData, schemeId);\r\n        },\r\n        schemes: [\r\n          {\r\n            id: \"default\",\r\n            label: Translations.get(\"SALAXY.NG1.AccountingReportToolsComponent.schemes.default.label\"),\r\n          },\r\n          {\r\n            id: \"compact\",\r\n            label: Translations.get(\"SALAXY.NG1.AccountingReportToolsComponent.schemes.compact.label\"),\r\n          },\r\n          {\r\n            id: \"extended\",\r\n            label: Translations.get(\"SALAXY.NG1.AccountingReportToolsComponent.schemes.extended.label\"),\r\n          },\r\n        ],\r\n        defaultExportMethod: ExportMethod.FileExcel,\r\n      },\r\n      // Palkkaus.fi ja lomat\r\n      \"8fd494ba-f98d-45e2-ae70-3570e16dfa3c\":\r\n      {\r\n        getExportData: (accountingData: AccountingData, schemeId: string) => {\r\n          return this.getPalkkausExportData(accountingData, schemeId);\r\n        },\r\n        schemes: [\r\n          {\r\n            id: \"default\",\r\n            label: Translations.get(\"SALAXY.NG1.AccountingReportToolsComponent.schemes.default.label\"),\r\n          },\r\n          {\r\n            id: \"compact\",\r\n            label: Translations.get(\"SALAXY.NG1.AccountingReportToolsComponent.schemes.compact.label\"),\r\n          },\r\n          {\r\n            id: \"extended\",\r\n            label: Translations.get(\"SALAXY.NG1.AccountingReportToolsComponent.schemes.extended.label\"),\r\n          },\r\n        ],\r\n        defaultExportMethod: ExportMethod.FileExcel,\r\n      },\r\n      // Fennoa\r\n      \"0db4e85f-93a8-46f1-b6d2-f7523d289d88\":\r\n      {\r\n        getExportData: (accountingData: AccountingData) => {\r\n          return this.getFennoaExportData(accountingData);\r\n        },\r\n        defaultExportMethod: ExportMethod.FileCsv,\r\n      },\r\n      // Finago Procountor\r\n      \"8613f133-3fce-4611-b372-51f6a2e007dd\":\r\n      {\r\n        getExportData: (accountingData: AccountingData) => {\r\n          return this.getProcountorExportData(accountingData);\r\n        },\r\n        defaultExportMethod: ExportMethod.CopyExcel,\r\n      },\r\n      // Accountor Go\r\n      \"4b3335ad-dfd2-48f5-a088-6449874a0732\":\r\n      {\r\n        getExportData: (accountingData: AccountingData) => {\r\n          return this.getProcountorExportData(accountingData);\r\n        },\r\n        defaultExportMethod: ExportMethod.CopyExcel,\r\n      },\r\n      // Passeli Merit\r\n      \"e62c10b0-222a-4170-b8b4-b1e02d9a7644\":\r\n      {\r\n        getExportData: (accountingData: AccountingData) => {\r\n          return this.getPasseliMeritExportData(accountingData);\r\n        },\r\n        defaultExportMethod: ExportMethod.FileCsv,\r\n        noCsvQuotedStrings: true,\r\n      },\r\n      // Heeros\r\n      \"53fd3863-b8f9-4909-86c9-cb4597595181\":\r\n      {\r\n        getExportData: (accountingData: AccountingData, schemeId: string) => {\r\n          return this.getHeerosExportData(accountingData, schemeId);\r\n        },\r\n        defaultExportMethod: ExportMethod.FileCsv,\r\n        noCsvQuotedStrings: true,\r\n        schemes: [\r\n          {\r\n            id: \"default\",\r\n            label: Translations.get(\"SALAXY.NG1.AccountingReportToolsComponent.schemes.default.label\"),\r\n          },\r\n          {\r\n            id: \"extended\",\r\n            label: Translations.get(\"SALAXY.NG1.AccountingReportToolsComponent.schemes.extended.label\"),\r\n          },\r\n        ],\r\n      },\r\n      // Asteri\r\n      \"2fc7899c-7a3d-4d56-ad2f-05d52782bbbc\":\r\n      {\r\n        getExportData: (accountingData: AccountingData) => {\r\n          return this.getAsteriExportData(accountingData);\r\n        },\r\n        defaultExportMethod: ExportMethod.CopyExcel\r\n      },\r\n      // Maestro\r\n      \"0a2bd312-06da-4862-aef5-75166e0bf461\":\r\n      {\r\n        getExportData: (accountingData: AccountingData) => {\r\n          return this.getMaestroExportData(accountingData);\r\n        },\r\n        defaultExportMethod: ExportMethod.FileCsv,\r\n        noCsvQuotedStrings: true,\r\n      },\r\n      // Visma Fivaldi\r\n      \"c04e0757-63f3-420d-a183-3427710fc954\":\r\n      {\r\n        getExportData: (accountingData: AccountingData) => {\r\n          return this.getVismaFivaldiExportData(accountingData);\r\n        },\r\n        defaultExportMethod: ExportMethod.FileCsv,\r\n        noCsvBom: true\r\n      },\r\n      // Netvisor\r\n      \"ba271dac-dd63-4036-9d70-053a09ca4d9e\":\r\n      {\r\n        getExportData: (accountingData: AccountingData) => {\r\n          return this.getVismaNetvisorExportData(accountingData);\r\n        },\r\n        defaultExportMethod: ExportMethod.FileCsv,\r\n      },\r\n      // Lemonsoft\r\n      \"27e271d5-41f5-4319-ab29-4d5d9eb945c6\":\r\n      {\r\n        getExportData: (accountingData: AccountingData) => {\r\n          return this.getLemonsoftExportData(accountingData);\r\n        },\r\n        defaultExportMethod: ExportMethod.CopyExcel\r\n      },\r\n      // Tampuuri\r\n      \"d311f9d3-8c3a-4fd8-a665-8e3698e41e87\": {\r\n        getExportData: (accountingData: AccountingData) => {\r\n          return this.getTampuuriExportData(accountingData);\r\n        },\r\n        defaultExportMethod: ExportMethod.CopyExcel\r\n      },\r\n      // Domus\r\n      \"d58e95b7-d0b5-40ac-992b-6d3b29efc45e\":\r\n      {\r\n        getExportData: (accountingData: AccountingData) => {\r\n          return this.getDomusExportData(accountingData);\r\n        },\r\n        defaultExportMethod: ExportMethod.FileCsv,\r\n      },\r\n      //Oscar Software\r\n      \"54e93c5f-bd74-4157-8a74-3515be7f585d\": {\r\n        getExportData: (accountingData: AccountingData) => {\r\n          return this.getOscarSoftwareExportData(accountingData);\r\n        },\r\n        defaultExportMethod: ExportMethod.FileExcel,\r\n        noCsvQuotedStrings: true,\r\n      },\r\n      //Digia Enterprise / Envision\r\n      \"0e4f0a71-dcb9-43ba-9028-0239e674711f\": {\r\n        getExportData: (accountingData: AccountingData) => {\r\n          return this.getDigiaExportData(accountingData);\r\n        },\r\n        defaultExportMethod: ExportMethod.FileText,\r\n        noCsvQuotedStrings: true,\r\n        formatAsText: (data: any[], isFinnish: boolean) => {\r\n          return this.formatAsDigiaText(data, isFinnish);\r\n        }\r\n      },\r\n      //Vilpe Digia Enterprise / Envision\r\n      \"2ccefa46-7992-46c5-9d87-b88336935916\": {\r\n        getExportData: (accountingData: AccountingData) => {\r\n          return this.getVilpeDigiaExportData(accountingData);\r\n        },\r\n        defaultExportMethod: ExportMethod.FileText,\r\n        noCsvQuotedStrings: true,\r\n        formatAsText: (data: any[], isFinnish: boolean) => {\r\n          return this.formatAsVilpeDigiaText(data, isFinnish);\r\n        }\r\n      },\r\n      //IScala\r\n      \"c36c24b9-5e2c-4f44-b67a-90d81aeea257\": {\r\n        getExportData: (accountingData: AccountingData, schemeId: string, target: TargetOption) => {\r\n          return this.getIScalaExportData(accountingData, target);\r\n        },\r\n        defaultExportMethod: ExportMethod.FileText,\r\n        noCsvQuotedStrings: true,\r\n        textFileExtension: \"xml\",\r\n        formatAsText: (data: any[], isFinnish: boolean) => {\r\n          return this.formatAsIScalaXml(data, isFinnish);\r\n        }\r\n      }\r\n    };\r\n  }\r\n\r\n  private static getPalkkausExportData(data: AccountingData, schemeId?: any): any[] {\r\n    if (schemeId === \"extended\" || schemeId === \"compact\") {\r\n      return this.getPalkkausExtendedExportData(data, schemeId == \"extended\");\r\n    }\r\n\r\n    return this.getPalkkausDefaultExportData(data);\r\n  }\r\n\r\n  /** Data exports for targets */\r\n  private static getPalkkausDefaultExportData(data: AccountingData): any[] {\r\n    const result: any[] = [];\r\n    const header: string[] = [\"Ehdotustili\", \"Selite\", \"ALV-%\"];\r\n    const dimensionHeaders: string[] = [];\r\n    const addToGlobal = (value: any, name: string) => {\r\n\r\n      if (value) {\r\n        if (!dimensionHeaders.includes(name) && name !== \"costCenter\") {\r\n\r\n          dimensionHeaders.push(name);\r\n          header.push(name);\r\n        }\r\n      }\r\n    };\r\n    // Find all dimensions\r\n    for (const rowData of data?.ledgerAccounts ?? []) {\r\n      for (const entryData of rowData?.entries ?? []) {\r\n\r\n        const costCenter = entryData.dimension?.costCenter || entryData.dimension?.dimensions?.costCenter;\r\n        addToGlobal(costCenter, \"Kustannuspaikka\");\r\n        const projectNumber = entryData.dimension?.projectNumber || entryData.dimension?.dimensions?.projectNumber;\r\n        addToGlobal(projectNumber, \"projectNumber\");\r\n\r\n        if (entryData.dimension?.dimensions) {\r\n          for (const [key, value] of this.getEntryDimensions(entryData)) {\r\n            addToGlobal(value, key);\r\n          }\r\n        }\r\n\r\n\r\n      }\r\n    }\r\n    header.push(\"Saldo\");\r\n    result.push(header);\r\n\r\n    for (const rowData of data?.ledgerAccounts ?? []) {\r\n      const keyEntriesRows: {\r\n        /** Entries */\r\n        entries: LedgerEntry[],\r\n        /** VAT */\r\n        vatPercent: number | undefined | null,\r\n        /** Dimensions */\r\n        dimensions: any[],\r\n        /** DimensionsId */\r\n        dimensionsId: string\r\n      }[] = [];\r\n      for (const entryData of rowData?.entries ?? []) {\r\n        const rowDataEntriesDimensions: string[] = [];\r\n        for (const dimensionHeader of dimensionHeaders) {\r\n          if (dimensionHeader === \"Kustannuspaikka\") {\r\n            const costCenter = entryData.dimension?.costCenter || entryData.dimension?.dimensions?.costCenter || \"\";\r\n            rowDataEntriesDimensions.push(costCenter);\r\n          }\r\n\r\n          else if (dimensionHeader === \"projectNumber\") {\r\n            const projectNumber = entryData.dimension?.projectNumber || entryData.dimension?.dimensions?.projectNumber || \"\";\r\n            rowDataEntriesDimensions.push(projectNumber);\r\n          } else {\r\n            rowDataEntriesDimensions.push(entryData.dimension?.dimensions ? (entryData.dimension.dimensions[dimensionHeader] || \"\") : \"\");\r\n          }\r\n\r\n        }\r\n        const vatPercent = entryData.vatPercent;\r\n        let keyEntryRows: {\r\n          /** Entries */\r\n          entries: LedgerEntry[],\r\n          /** VAT */\r\n          vatPercent: number | undefined | null,\r\n          /** Dimensions */\r\n          dimensions: any[],\r\n          /** DimensionsId */\r\n          dimensionsId: string\r\n        } | undefined = keyEntriesRows.find((x) => x.vatPercent === vatPercent && x.dimensionsId === rowDataEntriesDimensions.join(\"-\"));\r\n        if (keyEntryRows == null) {\r\n          keyEntryRows = { entries: [], vatPercent, dimensions: rowDataEntriesDimensions, dimensionsId: rowDataEntriesDimensions.join(\"-\") };\r\n          keyEntriesRows.push(keyEntryRows);\r\n        }\r\n        keyEntryRows.entries.push(entryData);\r\n      }\r\n      // Append results\r\n      for (const keyEntryRows of keyEntriesRows) {\r\n        const row: any[] = [];\r\n        row.push(rowData.accountNumber);\r\n        row.push(rowData.accountName);\r\n        row.push(keyEntryRows.vatPercent ?? 0 * 100);\r\n        for (let i = 0; i < dimensionHeaders.length; i++) {\r\n          row.push(keyEntryRows.dimensions[i]);\r\n        }\r\n\r\n        const saldo = Numeric.round(keyEntryRows.entries.reduce((sum, x) => sum + (x.isDebit ? (x.amount ?? 0) : -1.0 * (x.amount ?? 0)), 0));\r\n        row.push(saldo);\r\n        result.push(row);\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  private static getPalkkausExtendedExportData(data: AccountingData, isExtended: boolean): any[] {\r\n    const result: any[] = [];\r\n    const header: string[] = [];\r\n\r\n\r\n    const accountKeys = [\"accountNumber\", \"saldo\", \"accountName\"];\r\n    const accountKeyNames = [\"Tilinumero\", \"Summa\", \"Tilin nimi\"];\r\n    const entryKeys = [\"description\", \"isDebit\", \"amount\", \"vatPercent\"];\r\n    const entryKeyNames = [\"Kuvaus\", \"Debet\", \"Arvo\", \"ALV-prosentti\"];\r\n    const dimensionKeys = [\"calculationOwner\", \"calculationId\", \"calculationTitle\", \"projectNumber\", \"costCenter\", \"workerName\"];\r\n    const dimensionKeyNames = [\"Laskelman tili\", \"Laskelman id\", \"Laskelman kuvaus\", \"Projektinumero\", \"Kustannuspaikka\", \"Työntekijä\"];\r\n\r\n    for (const accountKeyName of accountKeyNames) {\r\n      header.push(accountKeyName);\r\n    }\r\n    if (isExtended) {\r\n      for (const entryKeyName of entryKeyNames) {\r\n        header.push(entryKeyName);\r\n      }\r\n      for (const dimensionKeyName of dimensionKeyNames) {\r\n        header.push(dimensionKeyName);\r\n      }\r\n    }\r\n    result.push(header);\r\n    for (const rowData of data?.ledgerAccounts ?? []) {\r\n      let row: any[] = [];\r\n      for (const accountKey of accountKeys) {\r\n        switch(accountKey) {\r\n          case \"saldo\":\r\n            row.push(Numeric.round(rowData[accountKey]));\r\n            break;\r\n          default:\r\n            row.push(rowData[accountKey]);\r\n            break;\r\n        }\r\n      }\r\n      if (isExtended) {\r\n        let first = true;\r\n        for (const entryData of rowData?.entries ?? []) {\r\n          if (first) {\r\n            first = false;\r\n          } else {\r\n            row = new Array(accountKeys.length);\r\n          }\r\n          for (const entryKey of entryKeys) {\r\n            switch(entryKey) {\r\n              case \"vatPercent\":\r\n                row.push((entryData[entryKey] ?? 0) * 100);\r\n                break;\r\n              case \"amount\":\r\n                row.push(Numeric.round(entryData[entryKey]));\r\n                break;\r\n              default:\r\n                row.push(entryData[entryKey]);\r\n                break;\r\n            }\r\n          }\r\n          for (const dimensionKey of dimensionKeys) {\r\n            if (dimensionKey === \"costCenter\") {\r\n              row.push(entryData.dimension?.costCenter || entryData.dimension?.dimensions?.costCenter);\r\n\r\n            }\r\n            else if (dimensionKey == \"projectNumber\") {\r\n              row.push(entryData.dimension?.projectNumber || entryData.dimension?.dimensions?.projectNumber);\r\n            }\r\n            else {\r\n              row.push(entryData.dimension?.[dimensionKey]);\r\n            }\r\n\r\n          }\r\n          result.push(row);\r\n        }\r\n      } else {\r\n        result.push(row);\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * https://procountor.finago.com/hc/fi/articles/360000254997-Tallennusty%C3%B6kalu-uusi-#LIIT%C3%84VIENTEJ%C3%84-TOIMINTO\r\n   */\r\n  private static getProcountorExportData(data: AccountingData): any[] {\r\n    const result: any[] = [];\r\n\r\n    const header = [\"Kp-tili\", \"Brutto\", \"ALV-%\", \"ALV-väh.%\", \"ALV-tyyppi\", \"ALV-status\", \"Vientiselite\"];\r\n    result.push(header);\r\n\r\n    for (const rowData of data?.ledgerAccounts ?? []) {\r\n      const keyEntriesRows: {\r\n        /** Vat key */\r\n        vatPercent: number,\r\n        /** Ledger entries */\r\n        entries: LedgerEntry[],\r\n      }[] = [];\r\n      for (const entryData of rowData?.entries ?? []) {\r\n        const vatPercent = entryData.vatPercent ?? 0;\r\n        let keyEntryRows: {\r\n          /** Vat key */\r\n          vatPercent: number,\r\n          /** Ledger entries */\r\n          entries: LedgerEntry[],\r\n        } | undefined = keyEntriesRows.find((x) => x.vatPercent === vatPercent);\r\n        if (keyEntryRows == null) {\r\n          keyEntryRows = { vatPercent, entries: [] };\r\n          keyEntriesRows.push(keyEntryRows);\r\n        }\r\n        keyEntryRows.entries.push(entryData);\r\n      }\r\n      // Append results\r\n      for (const keyEntryRows of keyEntriesRows) {\r\n        const row: any[] = [];\r\n        // \"Kp-tili\",\r\n        row.push(rowData.accountNumber);\r\n        // \"Brutto\",\r\n        row.push(Numeric.round(keyEntryRows.entries.reduce((sum, x) => sum + (x.isDebit ? (x.amount ?? 0) : -1.0 * (x.amount ?? 0)), 0)));\r\n        // \"ALV-%\",\r\n        row.push(keyEntryRows.vatPercent ? (keyEntryRows.vatPercent * 100) : \"\");\r\n        // \"ALV-väh.%\",\r\n        row.push(keyEntryRows.vatPercent ? 100 : \"\");\r\n\r\n        // \"ALV-tyyppi\",\r\n        row.push(keyEntryRows.vatPercent ? \"P\" : \"\");\r\n        // \"ALV-status\",\r\n        row.push(keyEntryRows.vatPercent ? \"vat_1\" : \"\");\r\n        // \"Vientiselite\"\r\n        row.push(rowData.accountName);\r\n\r\n        result.push(row);\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Merit aktiva format\r\n   */\r\n  private static getPasseliMeritExportData(data: AccountingData): any[] {\r\n    const result: any[] = [];\r\n    const header: Array<any> = [\"T\", data.officialId, data.employer?.displayName, Dates.asJSDate(data.period?.end), null, Dates.asJSDate(data.period?.start), Dates.asJSDate(data.period?.end)];\r\n    result.push(header);\r\n\r\n\r\n    for (const rowData of data?.ledgerAccounts ?? []) {\r\n      const row: any[] = [];\r\n      row.push(\"V\");\r\n      row.push(rowData.accountNumber);\r\n      row.push(rowData.accountName);\r\n      row.push(Numeric.round(rowData.saldo));\r\n      row.push(null);\r\n\r\n      row.push(null);\r\n      row.push(null);\r\n\r\n      result.push(row);\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * https://asteri.fi/aineistojen-tuonti-asteri-kirjanpitoon/\r\n   */\r\n  private static getAsteriExportData(data: AccountingData): any[] {\r\n\r\n    const result: any[] = [];\r\n\r\n    const header = [\"Tosno\", \"Päivämäärä\", \"Laji\", \"Kustp\", \"Lsno\", \"Selite 1\", \"Selite 2\", \"Debet\", \"Kredit\", \"Summa\"];\r\n    result.push(header);\r\n\r\n    const entryDate = this.getEntryDate(data);\r\n\r\n    for (const rowData of data?.ledgerAccounts ?? []) {\r\n      const keyEntriesRows: {\r\n        /** Cost center */\r\n        costCenter: string,\r\n        /** Ledger entries */\r\n        entries: LedgerEntry[],\r\n      }[] = [];\r\n      for (const entryData of rowData?.entries ?? []) {\r\n        const costCenter = entryData.dimension?.costCenter || entryData.dimension?.dimensions?.costCenter || \"\";\r\n        let keyEntryRows: {\r\n          /** Cost center */\r\n          costCenter: string,\r\n          /** Ledger entries */\r\n          entries: LedgerEntry[],\r\n        } | undefined = keyEntriesRows.find((x) => x.costCenter === costCenter);\r\n        if (keyEntryRows == null) {\r\n          keyEntryRows = { costCenter, entries: [] };\r\n          keyEntriesRows.push(keyEntryRows);\r\n        }\r\n        keyEntryRows.entries.push(entryData);\r\n      }\r\n      // Append results\r\n      for (const keyEntryRows of keyEntriesRows) {\r\n        const row: any[] = [];\r\n\r\n        // \"Tosno\",\r\n        row.push(null);\r\n        // \"Päivämäärä\",\r\n        row.push(Dates.asJSDate(entryDate));\r\n        // \"Laji\",\r\n        row.push(\"Palkkaus\");\r\n        // \"Kustannuspaikka\",\r\n        row.push(keyEntryRows.costCenter);\r\n        // \"Laskunnumero\",\r\n        row.push(null);\r\n        // \"Selite1\",\r\n        row.push(rowData.accountName);\r\n        // \"Selite2\",\r\n        row.push(null);\r\n        const saldo = Numeric.round(keyEntryRows.entries.reduce((sum, x) => sum + (x.isDebit ? (x.amount ?? 0) : -1.0 * (x.amount ?? 0)), 0)) ?? 0;\r\n        if (saldo >= 0) {\r\n          // \"Debet-tili\",\r\n          row.push(rowData.accountNumber);\r\n          // \"Kredit-tili\",\r\n          row.push(\"****\");\r\n          // \"Summa\"\r\n          row.push(saldo);\r\n        } else {\r\n          // \"Debet-tili\",\r\n          row.push(\"****\");\r\n          // \"Kredit-tili\",\r\n          row.push(rowData.accountNumber);\r\n          // \"Summa\"\r\n          row.push(saldo * -1.0);\r\n        }\r\n        result.push(row);\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Maestro\r\n   * +----------+--------------+-----------------------------------------+\r\n   * | Otsikko  |    Muoto     |                 Selite                  |\r\n   * +----------+--------------+-----------------------------------------+\r\n   * | TOSITE   | VVVV/L/NNNNN | Tositenumero                            |\r\n   * | PAIVAYS  | PP.KK.VVVV   | Kirjauspäivä                            |\r\n   * | ERN      | NUM          | Erityisraporttinro                      |\r\n   * | KAAVA    | NUM          | Tulos/Tasekaavanumero                   |\r\n   * | TNRO     | NUM          | Tilinumero                              |\r\n   * | RNRO     |              | Raporttinumero                          |\r\n   * | TILINIMI | AN           | Tilin Nimi                              |\r\n   * | TUPA     | NUM          | Tulospaikkanumero                       |\r\n   * | ATP      |              | Aputulospaikkanumero                    |\r\n   * | SELITE   | AN           | Vientiselite                            |\r\n   * | VARA1    |              | Varalla/1                               |\r\n   * | VARA2    |              | Varalla/2                               |\r\n   * | VARA3    |              | Varalla/3                               |\r\n   * | VARA4    |              | Varalla/4                               |\r\n   * | SUMMA    |              | Summa (2-desimaalisena erotin on piste) |\r\n   * +----------+--------------+-----------------------------------------+\r\n   */\r\n  private static getMaestroExportData(data: AccountingData): any[] {\r\n\r\n    const result: any[] = [];\r\n\r\n    const header = [\"TOSITE\", \"PAIVAYS\", \"ERN\", \"KAAVA\", \"TNRO\", \"RNRO\", \"TILINIMI\", \"TUPA\", \"ATP\", \"SELITE\", \"VARA1\", \"VARA2\", \"VARA3\", \"VARA4\", \"SUMMA\"];\r\n    result.push(header);\r\n\r\n    const entryDate = this.getEntryDate(data);\r\n\r\n    for (const rowData of data?.ledgerAccounts ?? []) {\r\n      const keyEntriesRows: {\r\n        /** Cost center */\r\n        costCenter: string,\r\n        /** Ledger entries */\r\n        entries: LedgerEntry[],\r\n      }[] = [];\r\n      for (const entryData of rowData?.entries ?? []) {\r\n        const costCenter = entryData.dimension?.costCenter || entryData.dimension?.dimensions?.costCenter || \"\";\r\n        let keyEntryRows: {\r\n          /** Cost center */\r\n          costCenter: string,\r\n          /** Ledger entries */\r\n          entries: LedgerEntry[],\r\n        }| undefined = keyEntriesRows.find((x) => x.costCenter === costCenter);\r\n        if (keyEntryRows == null) {\r\n          keyEntryRows = { costCenter, entries: [] };\r\n          keyEntriesRows.push(keyEntryRows);\r\n        }\r\n        keyEntryRows.entries.push(entryData);\r\n      }\r\n      // Append results\r\n      for (const keyEntryRows of keyEntriesRows) {\r\n        const row: any[] = [];\r\n        const saldo = Numeric.round(keyEntryRows.entries.reduce((sum, x) => sum + (x.isDebit ? (x.amount ?? 0) : -1.0 * (x.amount ?? 0)), 0)) ?? 0;\r\n        // TOSITE,\r\n        row.push(null);\r\n        // PAIVAYS,\r\n        row.push(Dates.asJSDate(entryDate));\r\n        // ERN\r\n        row.push(null);\r\n        // KAAVA\r\n        row.push(null);\r\n        // TNRO\r\n        row.push(Numeric.parseNumber(rowData.accountNumber ?? \"\"));\r\n        // RNRO\r\n        row.push(null);\r\n        // TILINIMI\r\n        row.push(rowData.accountName);\r\n        // TUPA\r\n        row.push(null);\r\n        // ATP\r\n        row.push(keyEntryRows.costCenter);\r\n        // SELITE\r\n        row.push(rowData.accountName);\r\n        // VARA1\r\n        row.push(null);\r\n        // VARA2\r\n        row.push(null);\r\n        // VARA3\r\n        row.push(null);\r\n        // VARA4\r\n        row.push(null);\r\n        // SUMMA\r\n        row.push(saldo);\r\n\r\n        result.push(row);\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * https://support.netvisor.fi/hc/fi/articles/235300547-Kirjanpitotietojen-tuonti\r\n   */\r\n  private static getVismaNetvisorExportData(data: AccountingData): any[] {\r\n    const result: any[] = [];\r\n\r\n    const header = [\r\n      \"TositeLaji\",\r\n      \"Tositenumero\",\r\n      \"Päivämäärä (PVM)\",\r\n      \"Selite 1\",\r\n      \"Selite 2\",\r\n      \"Selite 3\",\r\n      \"Selite 4\",\r\n      \"Selite 5\",\r\n      \"Tilinumero\",\r\n      \"Debet\",\r\n      \"Kredit\",\r\n      \"Summa\",\r\n      \"Summa\",\r\n      \"ALV-tunnus\",\r\n      \"ALV-prosentti\",\r\n    ];\r\n    result.push(header);\r\n\r\n    const entryDate = this.getEntryDate(data);\r\n\r\n    for (const rowData of data?.ledgerAccounts ?? []) {\r\n      const keyEntriesRows: {\r\n        /** Vat key */\r\n        vatPercent: number,\r\n        /** Ledger entries */\r\n        entries: LedgerEntry[],\r\n      }[] = [];\r\n      for (const entryData of rowData?.entries ?? []) {\r\n        const vatPercent = entryData.vatPercent ?? 0;\r\n        let keyEntryRows: {\r\n          /** Vat key */\r\n          vatPercent: number,\r\n          /** Ledger entries */\r\n          entries: LedgerEntry[],\r\n        } | undefined = keyEntriesRows.find((x) => x.vatPercent === vatPercent);\r\n        if (keyEntryRows == null) {\r\n          keyEntryRows = { vatPercent, entries: [] };\r\n          keyEntriesRows.push(keyEntryRows);\r\n        }\r\n        keyEntryRows.entries.push(entryData);\r\n      }\r\n      // Append results\r\n      for (const keyEntryRows of keyEntriesRows) {\r\n        const row: any[] = [];\r\n        // \"TositeLaji\",\r\n        row.push(null);\r\n        // \"Tositenumero\",\r\n        row.push(null);\r\n        // \"Päivämäärä (PVM)\",\r\n        row.push(Dates.asJSDate(entryDate));\r\n        // \"Selite 1\",\r\n        row.push(rowData.accountName);\r\n        // \"Selite 2\",\r\n        row.push(null);\r\n        // \"Selite 3\",\r\n        row.push(null);\r\n        // \"Selite 4\",\r\n        row.push(null);\r\n        // \"Selite 5\",\r\n        row.push(null);\r\n        // \"Tilinumero\",\r\n        row.push(rowData.accountNumber);\r\n        const saldo = Numeric.round(keyEntryRows.entries.reduce((sum, x) => sum + (x.isDebit ? (x.amount ?? 0) : -1.0 * (x.amount ?? 0)), 0)) ?? 0;\r\n        if (saldo >= 0) {\r\n          // \"Debet\",\r\n          row.push(saldo);\r\n          // \"Kredit\",\r\n          row.push(0);\r\n          // \"Summa\",\r\n          row.push(saldo);\r\n          // \"Summa\",\r\n          row.push(saldo * -1.0);\r\n        } else {\r\n          // \"Debet\",\r\n          row.push(0);\r\n          // \"Kredit\",\r\n          row.push(saldo * -1.0);\r\n          // \"Summa\",\r\n          row.push(saldo);\r\n          // \"Summa\",\r\n          row.push(saldo * -1.0);\r\n        }\r\n        // \"ALV-tunnus\",\r\n        row.push(keyEntryRows.vatPercent ? \"KOOS\" : \"\");\r\n        // \"ALV-prosentti\",\r\n        row.push(keyEntryRows.vatPercent ? (keyEntryRows.vatPercent * 100) : \"\");\r\n        result.push(row);\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Fennoa export data format.\r\n   * Tuetut sarakkeet:\r\n   *\r\n   * - PVM - Tositepäivä. Ensimmäiseltä riviltä otetaan Fennoan tositteelle päivämäärä.\r\n   * - TILI - Kirjanpidon tili\r\n   * - SELITE - Vientirivin selite\r\n   * - SUMMA (Debet +, Kredit -)\r\n   * - ALV-KOODI\r\n   * - tyhjä tarkoittaa tilikartasta tilin takaa haetaan oletus alv-koodi\r\n   * - viiva ”-” tarkoittaa ei alv-koodia\r\n   * - 1 = 24\r\n   * - 2 = 14\r\n   * - 3 = 10\r\n   * - numero on vientiriville halutun alv-koodin id numero, jotka löytyvät ohjekannastamme ALV-kooditaulukosta (3.9.5 ALV-koodit / Arvonlisäverokoodit Fennoassa).\r\n   * - LK1 - Laskentakohde 1\r\n   * - LK2 - Laskentakohde 2\r\n   * - LK… jne\r\n   */\r\n  private static getFennoaExportData(data: AccountingData): any[] {\r\n    const result: any[] = [];\r\n\r\n    const header = [\r\n      \"PVM\",\r\n      \"TILI\",\r\n      \"SELITE\",\r\n      \"SUMMA\",\r\n      \"ALV-KOODI\",\r\n      \"LK1\",\r\n    ];\r\n    result.push(header);\r\n\r\n    const entryDate = this.getEntryDate(data);\r\n\r\n    for (const rowData of data?.ledgerAccounts ?? []) {\r\n      const keyEntriesRows: {\r\n        /** Vat key */\r\n        vatPercent: number,\r\n        /** Cost center key */\r\n        costCenter: string,\r\n        /** Ledger entries */\r\n        entries: LedgerEntry[],\r\n      }[] = [];\r\n      for (const entryData of rowData?.entries ?? []) {\r\n        const vatPercent = entryData.vatPercent ?? 0;\r\n        const costCenter = entryData.dimension?.costCenter || entryData.dimension?.dimensions?.costCenter || \"\";\r\n        let keyEntryRows: {\r\n          /** Vat key */\r\n          vatPercent: number,\r\n          /** Cost center key */\r\n          costCenter: string,\r\n          /** Ledger entries */\r\n          entries: LedgerEntry[],\r\n        } | undefined = keyEntriesRows.find((x) => x.vatPercent === vatPercent && x.costCenter === costCenter);\r\n        if (keyEntryRows == null) {\r\n          keyEntryRows = { vatPercent, costCenter, entries: [] };\r\n          keyEntriesRows.push(keyEntryRows);\r\n        }\r\n        keyEntryRows.entries.push(entryData);\r\n      }\r\n      // Append results\r\n      for (const keyEntryRows of keyEntriesRows) {\r\n        const row: any[] = [];\r\n        // PVM\r\n        row.push(Dates.asJSDate(entryDate));\r\n        // TILI\r\n        row.push(rowData.accountNumber);\r\n        // SELITE,\r\n        row.push(rowData.accountName);\r\n        const saldo = Numeric.round(keyEntryRows.entries.reduce((sum, x) => sum + (x.isDebit ? (x.amount ?? 0) : -1.0 * (x.amount ?? 0)), 0)) ?? 0;\r\n        // SUMMA\r\n        row.push(saldo);\r\n        // ALV-KOODI\r\n        row.push(keyEntryRows.vatPercent ?\r\n          ((keyEntryRows.vatPercent * 100 === 24 || keyEntryRows.vatPercent * 100 === 25.5) ? 1 :\r\n            (keyEntryRows.vatPercent * 100 === 14) ? 2 :\r\n              (keyEntryRows.vatPercent * 100 === 10) ? 3 :\r\n                \"\") : \"\");\r\n        // LK\r\n        row.push(keyEntryRows.costCenter);\r\n\r\n        result.push(row);\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Domus export data format.\r\n   * Tuetut sarakkeet:\r\n   * - Y-TUNNUS - Yrityksen y-tunnus\r\n   * - PVM - Tositepäivä. Ensimmäiseltä riviltä otetaan Domus tositteelle päivämäärä.\r\n   * - TILI - Kirjanpidon tili\r\n   * - SELITE - Vientirivin selite\r\n   * - SUMMA (Debet +, Kredit -)\r\n   */\r\n  private static getDomusExportData(data: AccountingData): any[] {\r\n    const result: any[] = [];\r\n\r\n    const header = [\r\n      \"Y-TUNNUS\",\r\n      \"PVM\",\r\n      \"TILI\",\r\n      \"SELITE\",\r\n      \"SUMMA\",\r\n    ];\r\n    result.push(header);\r\n\r\n    const entryDate = this.getEntryDate(data);\r\n\r\n    for (const rowData of data?.ledgerAccounts ?? []) {\r\n        const row: any[] = [];\r\n        // Y-TUNNUS\r\n        row.push(data.officialId);\r\n        // PVM\r\n        row.push(Dates.asJSDate(entryDate));\r\n        // TILI\r\n        row.push(rowData.accountNumber);\r\n        // SELITE,\r\n        row.push(rowData.accountName);\r\n        // SUMMA\r\n        row.push(Numeric.round(rowData.saldo));\r\n        result.push(row);\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Oscar Software\r\n   * Aineisto on oltava Excel taulukosta muodossa \"Tabuloinnilla erotettu teksti (*.txt)\" tallennettu tiedosto. Excel taulukon on noudatettava seuraavia sääntöjä:\r\n   * Yhdessä taulukossa on aina yhden tositteen viennit. Vientien lukumäärä ei ole rajoitettu. Viennit ovat jokainen omalla rivillään ja vientejä edeltää sarakeotsikot sisältävä rivi.\r\n   * Ennen tätä riviä tiedostossa saa olla mitä tahansa tietoa, jota ohjelma ei mitenkään käsittele. Sarakeotsikoilla voidaan kertoa tiedoston sisältävän seuraavia tietoja:\r\n   * +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\r\n   * | Sarakeotsikko                        | Kuvaus                                                                                                                                                                                                          |\r\n   * +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\r\n   * | Tositelaji                           |Oltava perustettuna kirjanpitoon, annetaan ensimmäisellä vientirivillä. Jos tietoa ei ole, ohjelma käyttää oletustositelajia. Tositenumero määräytyy tositelajin perusteella kuten tositteita käsin syötettäessä.|                                                                       |\r\n   * | Pvm tai Pv                           | Tositteen päiväys, annetaan ensimmäisellä vientirivillä. Päivämäärä anneteen muodossa ppkkvv. Pakollinen tieto.                                                                                                 |\r\n   * | Selite tai Vientiselite              | Viennin selite. Tositekohtainen selite voidaan antaa rivillä, jolla ei anneta lainkaan tilinumeroa.                                                                                                             |\r\n   * | Tili                                 | Tilinumero, pakollinen tieto (lukuun ottamatta tositeselitettä).                                                                                                                                                |\r\n   * | Kp, Kust.paikka tai Kustannuspaikka  | Kustannuspaikka                                                                                                                                                                                                 |\r\n   * | Tunniste tai Projekti                | Tunniste/projekti                                                                                                                                                                                               |\r\n   * | Alv-menetelmä tai Alv-men            | Alv-menetelmä (käytössä vain tietyillä Tisma-käyttäjillä).                                                                                                                                                      |\r\n   * | Debet, Debetvienti tai Debetsumma    | Debet viennin summa                                                                                                                                                                                             |\r\n   * | Kredit, Kreditvienti tai Kreditsumma | Kredit viennin summa. Yhdellä rivillä ei voi olla sekä debet että kredit -vientiä. Jompi kumpi kuitenkin pitää olla.                                                                                            |\r\n   * +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\r\n   * Sarakeotsikoiden kirjoitusasu isojen ja pienten kirjainten suhteen on vapaa. Jos yllä on esitetty useampi kuin yksi kirjoitusasu, mikä tahansa näistä kelpaa.\r\n   * Vähintään sarakkeet \"Pvm\", \"Tili\", \"Debet\" ja \"Kredit\"on aineistosta löydyttävä. Sarakkeiden keskinäinen järjestys on vapaa.\r\n   * Jos tiedosto sisältää muitakin kuin kuvatut sarakkeet, ohjelma ei käsittele näitä mitenkään. Ohjelman käsittelemät tiedot täytyy sijaita 12 ensimmäisen sarakkeen joukossa.\r\n   * Selitteiden merkistö pitää olla ISO-Latin merkistöä\r\n   */\r\n  private static getOscarSoftwareExportData(data: AccountingData): any[] {\r\n    const result: any[] = [];\r\n    const header = [\"Tositelaji\", \"Pvm\", \"Selite\", \"Tili\", \"Kp\", \"Projekti\", \"Debet\", \"Kredit\"];\r\n    result.push(header);\r\n    const entryDate = this.getEntryDate(data);\r\n    for (const ledgerAccount of data?.ledgerAccounts ?? []) {\r\n      const keyEntriesRows: {\r\n        /** Cost center */\r\n        costCenter: string,\r\n        /** ProjectNumber */\r\n        projectNumber: string,\r\n        /** Ledger entries */\r\n        entries: LedgerEntry[],\r\n      }[] = [];\r\n      for (const ledgerEntry of ledgerAccount?.entries ?? []) {\r\n        const costCenter = ledgerEntry.dimension?.costCenter || ledgerEntry.dimension?.dimensions?.costCenter || \"\";\r\n        const projectNumber = ledgerEntry.dimension?.projectNumber || ledgerEntry.dimension?.dimensions?.projectNumber || ledgerEntry.dimension?.dimensions?.project || \"\";\r\n        let keyEntryRows = keyEntriesRows.find((x) =>  x.costCenter == costCenter && x.projectNumber == projectNumber);\r\n        if (keyEntryRows == null) {\r\n          keyEntryRows = { costCenter, projectNumber, entries: [] };\r\n          keyEntriesRows.push(keyEntryRows);\r\n        }\r\n        keyEntryRows.entries.push(ledgerEntry);\r\n      }\r\n      for (const keyEntryRows of keyEntriesRows) {\r\n        const row: any[] = [];\r\n        // Tositelaji\r\n        row.push(null);\r\n        // Pvm\r\n        row.push(Dates.format(entryDate, \"DDMMYY\"));\r\n        // Selite\r\n        row.push(ledgerAccount.accountName);\r\n        // Tili\r\n        row.push(ledgerAccount.accountNumber);\r\n        // Kp\r\n        row.push(keyEntryRows.costCenter);\r\n        // Projekti\r\n        row.push(keyEntryRows.projectNumber);\r\n        //Debet & Kredit\r\n        const saldo = Numeric.round(keyEntryRows.entries.reduce((sum, x) => sum + (x.isDebit ? (x.amount ?? 0) : -1.0 * (x.amount ?? 0)), 0)) ?? 0;\r\n        if (saldo >= 0) {\r\n          // \"Debet\",\r\n          row.push(saldo);\r\n          // \"Kredit\",\r\n          row.push(null);\r\n        } else {\r\n          // \"Debet\",\r\n          row.push(null);\r\n          // \"Kredit\",\r\n          row.push(saldo * -1.0);\r\n        }\r\n        result.push(row);\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Lemonsoft\r\n   * https://doc.lemonsoft.eu/lemonnethelp/default.htm#!Documents/excelcsv.htm\r\n   * +----------+--------------+---------------------------------------------------+\r\n   * | Otsikko  |    Muoto     |                 Selite                            |\r\n   * +----------+--------------+---------------------------------------------------+\r\n   * | Tosite   | 0            | Vakio = 0                                         |\r\n   * | Tlaji    | NUM          | Tositelaji                                        |\r\n   * | Tnro     | NUM          | Tositenumero                                      |\r\n   * | Pvm      | VVVV-KK-PP   | Päivämäärä muodossa VVVV-KK-PP (esim. 2009-10-20) |\r\n   * | Selite   | AN(60)       | Vientiselite                                      |\r\n   * | Kpaikka  | AN(40)       | Kustannuspaikka                                   |\r\n   * | LTA      | AN(40)       | Liiketoiminta-alue                                |\r\n   * | Tunniste | AN(30)       | Tunniste                                          |\r\n   * | Projekti | NUM          | Projektinumero                                    |\r\n   * | Tili     | AN(10)       | Kirjanpitotili                                    |\r\n   * | Debet    | NUM          | Debet                                             |\r\n   * | Kredit   | NUM          | Kredit                                            |\r\n   * | Vero     | NUM          | Veron määrä                                       |\r\n   * +----------+--------------+---------------------------------------------------+\r\n   */\r\n  private static getLemonsoftExportData(data: AccountingData): any[] {\r\n    const result: any[] = [];\r\n    const header = [\r\n      \"Tosite\",\r\n      \"Tlaji\",\r\n      \"Tnro\",\r\n      \"Pvm\",\r\n      \"Selite\",\r\n      \"Kpaikka\",\r\n      \"LTA\",\r\n      \"Tunniste\",\r\n      \"Projekti\",\r\n      \"Tili\",\r\n      \"Debet\",\r\n      \"Kredit\",\r\n      \"Vero\"\r\n    ];\r\n    result.push(header);\r\n    const entryDate = this.getEntryDate(data);\r\n      for (const ledgerAccount of data?.ledgerAccounts ?? []) {\r\n        const keyEntriesRows: {\r\n          /** Cost center */\r\n          costCenter: string,\r\n          /** ProjectNumber */\r\n          projectNumber: string,\r\n          /** Ledger entries */\r\n          entries: LedgerEntry[],\r\n        }[] = [];\r\n        for (const ledgerEntry of ledgerAccount?.entries ?? []) {\r\n          const costCenter = ledgerEntry.dimension?.costCenter || ledgerEntry.dimension?.dimensions?.costCenter || \"\";\r\n          const projectNumber = ledgerEntry.dimension?.projectNumber || ledgerEntry.dimension?.dimensions?.projectNumber || ledgerEntry.dimension?.dimensions?.project || \"\";\r\n          let keyEntryRows = keyEntriesRows.find((x) =>  x.costCenter == costCenter && x.projectNumber == projectNumber);\r\n          if (keyEntryRows == null) {\r\n            keyEntryRows = { costCenter, projectNumber, entries: [] };\r\n            keyEntriesRows.push(keyEntryRows);\r\n          }\r\n          keyEntryRows.entries.push(ledgerEntry);\r\n        }\r\n        // Append results\r\n        for (const keyEntryRows of keyEntriesRows) {\r\n          const row: any[] = [];\r\n          //Tosite\r\n          row.push(0);\r\n          //Tlaji\r\n          row.push(null);\r\n          //Tnro\r\n          row.push(null);\r\n          //Pvm\r\n          row.push(Dates.asJSDate(entryDate));\r\n          //Selite\r\n          row.push(ledgerAccount.accountName);\r\n          //Kpaikka\r\n          row.push(keyEntryRows.costCenter);\r\n          //LTA\r\n          row.push(null);\r\n          //Tunniste\r\n          row.push(null);\r\n          //Projekti\r\n          row.push(keyEntryRows.projectNumber);\r\n          //Tili\r\n          row.push(ledgerAccount.accountNumber);\r\n          //Debet && Kredit\r\n          const saldo = Numeric.round(keyEntryRows.entries.reduce((sum, x) => sum + (x.isDebit ? (x.amount ?? 0) : -1.0 * (x.amount ?? 0)), 0)) ?? 0;\r\n          if (saldo >= 0) {\r\n            // \"Debet\",\r\n            row.push(saldo);\r\n            // \"Kredit\",\r\n            row.push(0);\r\n          } else {\r\n            // \"Debet\",\r\n            row.push(0);\r\n            // \"Kredit\",\r\n            row.push(saldo * -1.0);\r\n          }\r\n          //Vero\r\n          row.push(Numeric.round(keyEntryRows.entries.reduce((a, b) => a + (b.vatAmount ?? 0), 0)));\r\n\r\n          result.push(row);\r\n        }\r\n      }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * | Nimi             | Tositepäivä             | Tositelaji | Tositenumero | Tili    | Alv-Koodi | Summa              | Kustannuspaikka | Laskentakohde1 | Laskentakohde2 | Laskentakohde3 | Laskentakohde4 | Laskentakohde5 | Laskentakohde6 | Laskentakohde7 | Laskentakohde8 | Laskentakohde9 | Laskentakohde10 | Laskentakohde11 | Laskentakohde12 | Laskunumero | Vientiselite |\r\n   * |------------------|-------------------------|------------|--------------|---------|-----------|--------------------|-----------------|----------------|----------------|----------------|----------------|----------------|----------------|----------------|----------------|----------------|-----------------|-----------------|-----------------|-------------|--------------|\r\n   * | Tyyppi           | Date                    | varchar    | biginit      | varchar | varchar   | desimal            | varchar         | varchar        | varchar        | varchar        | varchar        | varchar        | varchar        | varchar        | varchar        | varchar        | varchar         | varchar         | varchar         | varchar     | varchar      |\r\n   * |                  | Päivämäärä              | Teksti     | Kokonaisluku |         |           | Luku, 2 desimaalia |                 |                |                |                |                |                |                |                |                |                |                 |                 |                 |             |              |\r\n   * | Pituus           |                         | 10         | 20           | 6       | 10        | 13,2               | 30              | 30             | 30             | 30             | 30             | 30             | 30             | 30             | 30             | 30             | 30              | 30              | 30              | 30          | 100          |\r\n   * | Muoto            | pp.kk.vvvv tai p.k.vvvv |            |              |         |           |                    |                 |                |                |                |                |                |                |                |                |                |                 |                 |                 |             |              |\r\n   * | Pakollisuus      | V                       | V          | V            | P       | V         | P                  | V               | V              | V              | V              | V              | V              | V              | V              | V              | V              | V               | V               | V               | V           | V            |\r\n   * | Järjestys        | 1.00                    | 2.00       | 3.00         | 4.00    | 5.00      | 6.00               | 7.00            | 8.00           | 9.00           | 10.00          | 11.00          | 12.00          | 13.00          | 14.00          | 15.00          | 16.00          | 17.00           | 18.00           | 19.00           | 20.00       | 21.00        |\r\n   * | Sarake Excelissä | A                       | B          | C            | D       | E         | F                  | G               | H              | I              | J              | K              | L              | M              | N              | O              | P              | Q               | R               | S               | T           | U            |\r\n   */\r\n\r\n  private static getHeerosExportData(data: AccountingData, schemeId?: any): any[] {\r\n    const result: any[] = [];\r\n    const header: any[] = [\r\n      \"Tositepvm\",\r\n      \"Tositelaji\",\r\n      \"Tositenro\",\r\n      \"Tili\",\r\n      \"Alv-koodi\",\r\n      \"Summa\",\r\n      \"Kustp\",\r\n      \"Proj\",\r\n      \"Lask2\",\r\n      \"Lask3\",\r\n      \"Lask4\",\r\n      \"Lask5\",\r\n      \"Lask6\",\r\n      \"Lask7\",\r\n      \"Lask8\",\r\n      \"Lask9\",\r\n      \"Lask10\",\r\n      \"Lask11\",\r\n      \"Lask12\",\r\n      \"LaskuNro\",\r\n      \"Selite\"\r\n    ];\r\n    result.push(header);\r\n\r\n    if (schemeId === \"extended\") {\r\n      for (const ledgerAccount of data?.ledgerAccounts ?? []) {\r\n        for (const ledgerEntry of ledgerAccount?.entries ?? []) {\r\n          const row: any[] = [];\r\n          // Tositepvm\r\n          row.push(Dates.asJSDate(ledgerEntry.entryDate));\r\n          // Tositelaji\r\n          row.push(null);\r\n          // Tositenro\r\n          row.push(null);\r\n          // Tili\r\n          row.push(ledgerAccount.accountNumber);\r\n          // Alv-koodi\r\n          row.push(ledgerEntry.vatPercent ?\r\n            ((ledgerEntry.vatPercent * 100 === 24 || ledgerEntry.vatPercent * 100 === 25.5) ? 1 :\r\n              (ledgerEntry.vatPercent * 100 === 14) ? 2 :\r\n                (ledgerEntry.vatPercent * 100 === 10) ? 3 :\r\n                  \"\") : \"\");\r\n          // Summa\r\n          row.push(Numeric.round(ledgerEntry?.isDebit ? (ledgerEntry?.amount ?? 0) : -1.0 * (ledgerEntry?.amount ?? 0)));\r\n          // kustp\r\n          row.push(ledgerEntry?.dimension?.costCenter || ledgerEntry?.dimension?.dimensions?.costCenter || \"\");\r\n          // Proj\r\n          row.push(ledgerEntry?.dimension?.projectNumber || ledgerEntry?.dimension?.dimensions?.projectNumber || ledgerEntry?.dimension?.dimensions?.project || \"\");\r\n          // Lask2\r\n          row.push(null);\r\n          // Lask3\r\n          row.push(null);\r\n          // Laske4\r\n          row.push(null);\r\n          // Lask5\r\n          row.push(null);\r\n          // Lask6\r\n          row.push(null);\r\n          // Lask7\r\n          row.push(null);\r\n          // Lask8\r\n          row.push(null);\r\n          // Lask9\r\n          row.push(null);\r\n          // Lask10\r\n          row.push(null);\r\n          // Lask11\r\n          row.push(null);\r\n          // Lask12\r\n          row.push(null);\r\n          // LaskuNro\r\n          row.push(null);\r\n          // Selite\r\n          row.push(ledgerEntry.description);\r\n          result.push(row);\r\n        }\r\n      }\r\n    }\r\n    else\r\n    {\r\n      const entryDate = this.getEntryDate(data);\r\n      for (const ledgerAccount of data?.ledgerAccounts ?? []) {\r\n        const keyEntriesRows: {\r\n          /** VAT */\r\n          vatPercent: number,\r\n          /** Cost center */\r\n          costCenter: string,\r\n          /** ProjectNumber */\r\n          projectNumber: string,\r\n          /** Ledger entries */\r\n          entries: LedgerEntry[],\r\n        }[] = [];\r\n        for (const ledgerEntry of ledgerAccount?.entries ?? []) {\r\n          const vatPercent = ledgerEntry.vatPercent ?? 0;\r\n          const costCenter = ledgerEntry.dimension?.costCenter || ledgerEntry.dimension?.dimensions?.costCenter || \"\";\r\n          const projectNumber = ledgerEntry.dimension?.projectNumber || ledgerEntry.dimension?.dimensions?.projectNumber || ledgerEntry.dimension?.dimensions?.project || \"\";\r\n          let keyEntryRows = keyEntriesRows.find((x) => x.vatPercent == vatPercent && x.costCenter == costCenter && x.projectNumber == projectNumber);\r\n          if (keyEntryRows == null) {\r\n            keyEntryRows = { vatPercent, costCenter, projectNumber, entries: [] };\r\n            keyEntriesRows.push(keyEntryRows);\r\n          }\r\n          keyEntryRows.entries.push(ledgerEntry);\r\n        }\r\n        // Append results\r\n        for (const keyEntryRows of keyEntriesRows) {\r\n          const row: any[] = [];\r\n          // Tositepvm\r\n          row.push(Dates.asJSDate(entryDate));\r\n          // Tositelaji\r\n          row.push(null);\r\n          // Tositenro\r\n          row.push(null);\r\n          // Tili\r\n          row.push(ledgerAccount.accountNumber);\r\n          // Alv-koodi\r\n          row.push(keyEntryRows.vatPercent ?\r\n            ((keyEntryRows.vatPercent * 100 === 24 || keyEntryRows.vatPercent * 100 === 25.5) ? 1 :\r\n              (keyEntryRows.vatPercent * 100 === 14) ? 2 :\r\n                (keyEntryRows.vatPercent * 100 === 10) ? 3 :\r\n                  \"\") : \"\");\r\n          // Summa\r\n          const saldo = Numeric.round(keyEntryRows.entries.reduce((sum, x) => sum + (x.isDebit ? (x.amount ?? 0) : -1.0 * (x.amount ?? 0)), 0)) ?? 0;\r\n          row.push(saldo);\r\n          // Kustp\r\n          row.push(keyEntryRows.costCenter);\r\n          // Proj\r\n          row.push(keyEntryRows.projectNumber);\r\n          // Lask2\r\n          row.push(null);\r\n          // Lask3\r\n          row.push(null);\r\n          // Laske4\r\n          row.push(null);\r\n          // Lask5\r\n          row.push(null);\r\n          // Lask6\r\n          row.push(null);\r\n          // Lask7\r\n          row.push(null);\r\n          // Lask8\r\n          row.push(null);\r\n          // Lask9\r\n          row.push(null);\r\n          // Lask10\r\n          row.push(null);\r\n          // Lask11\r\n          row.push(null);\r\n          // Lask12\r\n          row.push(null);\r\n          // LaskuNro\r\n          row.push(null);\r\n          // Selite\r\n          row.push(ledgerAccount.accountName);\r\n          result.push(row);\r\n        }\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /*\r\n  Url: https://community.visma.com/t5/Visma-Fivaldi-kayttovinkit/Visma-Fivaldi-Kasikirja-RAJAPINNAT/ta-p/35780?attachment-id=11454 - Sivu 66\r\n  PVM Pakollinen N8 Kirjauspäivä tositteelle, muoto VVVVKKPP\r\n  TILI Pakollinen AN8 Kirjanpidon tili\r\n  TOSITE AN16 Tositenumero jolla tositteet erotetaan. Jos tositenumeroa ei ole, päiväyksen muuttuminen vaihtaa seuraavaan tositteeseen\r\n  SK1 AN8 Seurantakohde 1\r\n  SK2 AN8 Seurantakohde 2\r\n  SK3 AN8 Seurantakohde 3\r\n  SK4 AN8 Seurantakohde 4\r\n  SUMMA Pakollinen N15,2 Summa yrityksen valuutassa etumerkkeineen\r\n  SENTIT N15 Summa sentteinä etumerkkeineen\r\n  SELITE AN179 Vientiselite\r\n  VEROKANTA AN10 Verokantakoodi\r\n  VEROTILI AN8 Verotili\r\n  VEROTILI2 AN8 Verotili 2 (vastakirjaus)\r\n  VEROSUMMA N15,2 Veron määrä yrityksen valuutassa etumerkkeineen\r\n  VEROSENTIT N15 Veron määrä sentteinä etumerkkeineen\r\n  STATUS AN1 Viennin erikoiskäsittely\r\n  NETTOPVM N8 Laskun eräpäivä VVVVKKPP\r\n  ASIAKASTUNNUS AN10 Asiakkaan/toimittajan tunnus\r\n  VIENTILAJI AN2 Vientilajin tunnus\r\n  LASKUNO AN16 Laskun numero\r\n  YT N6 Fivaldi-yritysnumero jolle aineisto tuodaan\r\n  LAJI N3 Tositelajin numero jolle aineisto tuodaan\r\n  */\r\n  private static getVismaFivaldiExportData(data: AccountingData): any[] {\r\n    const result: any[] = [];\r\n    const header: any[] = [\r\n      \"PVM\",\r\n      \"TILI\",\r\n      \"TOSITE\",\r\n      \"SK1\",\r\n      \"SK2\",\r\n      \"SK3\",\r\n      \"SK4\",\r\n      \"SUMMA\",\r\n      \"SENTIT\",\r\n      \"SELITE\",\r\n      \"VEROKANTA\",\r\n      \"VEROTILI\",\r\n      \"VEROTILI2\",\r\n      \"VEROSUMMA\",\r\n      \"VEROSENTIT\",\r\n      \"STATUS\",\r\n      \"NETTOPVM\",\r\n      \"ASIAKASTUNNUS\",\r\n      \"VIENTILAJI\",\r\n      \"LASKUNO\",\r\n      \"YT\",\r\n      \"LAJI\",\r\n    ];\r\n\r\n    result.push(header);\r\n\r\n    const entryDate = this.getEntryDate(data);\r\n    for (const ledgerAccount of data?.ledgerAccounts ?? []) {\r\n      const keyEntriesRows: {\r\n        /** Cost center */\r\n        costCenter: string,\r\n        /** Ledger entries */\r\n        entries: LedgerEntry[],\r\n      }[] = [];\r\n      for (const ledgerEntry of ledgerAccount?.entries ?? []) {\r\n        const costCenter = ledgerEntry.dimension?.costCenter || ledgerEntry.dimension?.dimensions?.costCenter || \"\";\r\n        let keyEntryRows = keyEntriesRows.find((x) => x.costCenter == costCenter);\r\n        if (keyEntryRows == null) {\r\n          keyEntryRows = { costCenter, entries: [] };\r\n          keyEntriesRows.push(keyEntryRows);\r\n        }\r\n        keyEntryRows.entries.push(ledgerEntry);\r\n      }\r\n      // Append results\r\n      for (const keyEntryRows of keyEntriesRows) {\r\n        const row: any[] = [];\r\n        //PVM\r\n        row.push(Dates.format(entryDate, \"YYYYMMDD\"));\r\n        //TILI\r\n        row.push(ledgerAccount?.accountNumber);\r\n        //TOSITE\r\n        row.push(null);\r\n        //SK1\r\n        row.push(keyEntryRows.costCenter);\r\n        //SK2\r\n        row.push(null);\r\n        //SK3\r\n        row.push(null);\r\n        //SK4\r\n        row.push(null);\r\n        const saldo = Numeric.round(keyEntryRows.entries.reduce((sum, x) => sum + (x.isDebit ? (x.amount ?? 0) : -1.0 * (x.amount ?? 0)), 0)) ?? 0;\r\n        //SUMMA\r\n        row.push(saldo);\r\n        //SENTIT\r\n        row.push(saldo * 100);\r\n        //SELITE\r\n        row.push(ledgerAccount.accountName);\r\n        //VEROKANTA\r\n        row.push(null);\r\n        //VEROTILI\r\n        row.push(null);\r\n        //VEROTILI2\r\n        row.push(null);\r\n        //VEROSUMMA\r\n        const vat = Numeric.round(keyEntryRows.entries.reduce((a, b) => a + (b.isDebit ? (b.vatAmount ?? 0) : -1.0 * (b.vatAmount ?? 0)), 0));\r\n        row.push(vat);\r\n        //VEROSENTIT\r\n        row.push(vat ? vat * 100 : 0);\r\n        //STATUS\r\n        row.push(null);\r\n        //NETTOPVM\r\n        row.push(null);\r\n        //ASIAKASTUNNUS\r\n        row.push(null);\r\n        //VIENTILAJI\r\n        row.push(null);\r\n        //LASKUNO\r\n        row.push(null);\r\n        //YT\r\n        row.push(null);\r\n        //LAJI\r\n        row.push(null);\r\n\r\n        result.push(row);\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n  /**\r\n   * Tampuuri\r\n   * https://eteinen.tampuuri.fi/s/artikkelit?article=Tuonti-Excelista\r\n   * +--------------------------+-------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+\r\n   * | Sarakeotsikko            |    Pakollinen     |                 Kuvaus                                                                                                                                         |\r\n   * +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\r\n   * | Tositenro                | Ei                | Mikäli tositenumeroa ei anna, järjestelmä generoi sen tositelajin laskurin   mukaan.                                                                           |\r\n   * | Pvm                      | Kyllä             | Tositepäivä.                                                                                                                                                   |\r\n   * | Tositeselite             | Kyllä             | Tositeotsikon selite                                                                                                                                           |\r\n   * | Tili                     | Kyllä             | Kirjanpidon tili                                                                                                                                               |\r\n   * | Alvluokka                | Ei                | Arvolisäverokoodi, esim 024                                                                                                                                    |\r\n   * | Alvvähennysoikeus pros   | Ei                | Mikäli tositerivillä olevasta arvolisäverosta voidaan vain osa   vähentää, tässä annetaan vähennysoikeusprosentti                                              |\r\n   * | Vientiselite             | Ei                | Tositerivin selite.                                                                                                                                            |\r\n   * | Debet                    | (Kyllä)           | Viennille annettava debet-summa                                                                                                                                |\r\n   * | Kredit                   | (Kyllä)           | Viennille annettava kredit-summa (positiivisena, kuten tositteen   syötössä). Joko debet- tai -kredit kentässä on oltava arvo.                                 |\r\n   * | Tositelaji               | Ei                | Käytetty tositelaji, esimerkiksi Muistiotosite. Mikäli tietoa ei anna,   tositelajina käytetään sitä tositelajia, jonka tyypiksi on   merkitty Tositeliittymä. |\r\n   * +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\r\n   */\r\n  private static getTampuuriExportData(data: AccountingData): any[]  {\r\n    const result: any[] = [];\r\n    const header: any[] = [\"Tositenro\", \"Pvm\", \"Tositeselite\", \"Tili\", \"Alvluokka\", \"Alvvähennysoikeus pros\", \"Vientiselite\", \"Debet\", \"Kredit\", \"Tositelaji\"];\r\n    const dimensionHeaders: any[] = [];\r\n\r\n    const addToGlobal = (value: any, name: string) => {\r\n      if (value) {\r\n        if (!dimensionHeaders.includes(name)) {\r\n          dimensionHeaders.push(name);\r\n          header.push(name);\r\n        }\r\n      }\r\n    };\r\n    // Find all dimensions\r\n    for (const rowData of data?.ledgerAccounts ?? []) {\r\n      for (const entryData of rowData?.entries ?? []) {\r\n        const costCenter = entryData?.dimension?.costCenter || entryData?.dimension?.dimensions?.costCenter;\r\n        addToGlobal(costCenter, \"costCenter\");\r\n        const projectNumber = entryData?.dimension?.projectNumber || entryData?.dimension?.dimensions?.projectNumber;\r\n        addToGlobal(projectNumber, \"projectNumber\");\r\n        if (entryData?.dimension?.dimensions) {\r\n          for (const [key, value] of this.getEntryDimensions(entryData)) {\r\n            addToGlobal(value, key);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    result.push(header);\r\n    const entryDate = this.getEntryDate(data);\r\n\r\n    for (const ledgerAccount of data?.ledgerAccounts ?? []) {\r\n      const keyEntriesRows: {\r\n        /** Entries */\r\n        entries: LedgerEntry[],\r\n        /** VAT */\r\n        vatPercent: number,\r\n        /** Dimensions */\r\n        dimensions: any[],\r\n        /** DimensionsId */\r\n        dimensionsId: string\r\n      }[] = [];\r\n      for (const entryData of ledgerAccount?.entries ?? []) {\r\n        const rowDataEntriesDimensions: any[] = [];\r\n        for (const dimensionHeader of dimensionHeaders) {\r\n          if (dimensionHeader === \"costCenter\") {\r\n            const costCenter = entryData?.dimension?.costCenter || entryData?.dimension?.dimensions?.costCenter || \"\";\r\n            rowDataEntriesDimensions.push(costCenter);\r\n          }\r\n          else if (dimensionHeader === \"projectNumber\") {\r\n            const projectNumber = entryData?.dimension?.projectNumber || entryData?.dimension?.dimensions?.projectNumber || \"\";\r\n            rowDataEntriesDimensions.push(projectNumber);\r\n          } else {\r\n            rowDataEntriesDimensions.push(entryData?.dimension?.dimensions ? (entryData?.dimension?.dimensions[dimensionHeader] || \"\") : \"\");\r\n          }\r\n        }\r\n        const vatPercent = entryData.vatPercent ?? 0;\r\n        let keyEntryRows: {\r\n          /** Entries */\r\n          entries: LedgerEntry[],\r\n          /** VAT */\r\n          vatPercent: number,\r\n          /** Dimensions */\r\n          dimensions: any[],\r\n          /** DimensionsId */\r\n          dimensionsId: string\r\n        } | undefined = keyEntriesRows.find((x) => x.vatPercent === vatPercent && x.dimensionsId === rowDataEntriesDimensions.join(\"-\"));\r\n        if (keyEntryRows == null) {\r\n          keyEntryRows = { entries: [], vatPercent, dimensions: rowDataEntriesDimensions, dimensionsId: rowDataEntriesDimensions.join(\"-\") };\r\n          keyEntriesRows.push(keyEntryRows);\r\n        }\r\n        keyEntryRows.entries.push(entryData);\r\n      }\r\n      // Append results\r\n      for (const keyEntryRows of keyEntriesRows) {\r\n        const row: any[] = [];\r\n        //Tositenro\r\n        row.push(null);\r\n        //Pvm\r\n        row.push(Dates.asJSDate(entryDate));\r\n        //Tositeselite\r\n        row.push(\"PALKAT\");\r\n        //Tili\r\n        row.push(ledgerAccount.accountNumber);\r\n        //Alvluokka\r\n        row.push(keyEntryRows.vatPercent ?  Numeric.toFixed(1000 + (keyEntryRows.vatPercent * 100),0).substring(1) : null);\r\n        //Alvvähennysoikeus pros\r\n        row.push(null);\r\n        //Vientiselite\r\n        row.push(ledgerAccount.accountName);\r\n        //Debet & Kredit\r\n        const saldo = Numeric.round(keyEntryRows.entries.reduce((sum, x) => sum + (x.isDebit ? (x.amount ?? 0) : -1.0 * (x.amount ?? 0)), 0)) ?? 0;\r\n        if (saldo >= 0) {\r\n          // \"Debet\",\r\n          row.push(saldo);\r\n          // \"Kredit\",\r\n          row.push(0);\r\n        } else {\r\n          // \"Debet\",\r\n          row.push(0);\r\n          // \"Kredit\",\r\n          row.push(saldo * -1.0);\r\n        }\r\n        //Tositelaji\"\r\n        row.push(null);\r\n\r\n        for (let i = 0; i < dimensionHeaders.length; i++) {\r\n          row.push(keyEntryRows.dimensions[i]);\r\n        }\r\n        result.push(row);\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n\r\n  private static getDigiaExportData(data: AccountingData): any[] {\r\n    const result: any[] = [];\r\n    const header: any[] = [\"Kirjauspäivä\", \"Tositelaji\", \"Tositeno\", \"Kp-tili\", \"DebetKredit\", \"Rahamäärä\", \"Valuuttakoodi\", \"Valuuttakurssi\", \"Selite\", \"Alv\", \"Tulosyksikkö\", \"Seurantakohde1\", \"Seurantakohde2\", \"Seurantakohde3\", \"Seurantakohde4\", \"Seurantakohde5\", \"Seurantakohde6\", \"Seurantakohde7\", \"Seurantakohde8\", \"Seurantakohde9\"];\r\n    result.push(header);\r\n    const entryDate = this.getEntryDate(data);\r\n\r\n    for (const ledgerAccount of data?.ledgerAccounts ?? []) {\r\n      const keyEntriesRows: {\r\n        /** VAT */\r\n        vatPercent: number,\r\n        /** Cost center */\r\n        costCenter: string,\r\n        /** ProjectNumber */\r\n        projectNumber: string,\r\n        /** Ledger entries */\r\n        entries: LedgerEntry[],\r\n      }[] = [];\r\n      for (const ledgerEntry of ledgerAccount?.entries ?? []) {\r\n        const vatPercent = ledgerEntry.vatPercent ?? 0;\r\n        const costCenter = ledgerEntry.dimension?.costCenter || ledgerEntry.dimension?.dimensions?.costCenter || \"\";\r\n        const projectNumber = ledgerEntry.dimension?.projectNumber || ledgerEntry.dimension?.dimensions?.projectNumber || ledgerEntry.dimension?.dimensions?.project || \"\";\r\n        let keyEntryRows = keyEntriesRows.find((x) => x.vatPercent == vatPercent && x.costCenter == costCenter && x.projectNumber == projectNumber);\r\n        if (keyEntryRows == null) {\r\n          keyEntryRows = { vatPercent, costCenter, projectNumber, entries: [] };\r\n          keyEntriesRows.push(keyEntryRows);\r\n        }\r\n        keyEntryRows.entries.push(ledgerEntry);\r\n      }\r\n      // Append results\r\n      for (const keyEntryRows of keyEntriesRows) {\r\n\r\n        const row: any[] = [];\r\n        // Kirjauspäivä\r\n        row.push(Dates.asJSDate(entryDate));\r\n        // TositeLaji\r\n        row.push(null);\r\n        // Tositeno\r\n        row.push(null);\r\n        // Kp-tili\r\n        row.push(ledgerAccount.accountNumber);\r\n        // DebetKredit\r\n        const saldo = Numeric.round(keyEntryRows.entries.reduce((sum, x) => sum + (x.isDebit ? (x.amount ?? 0) : -1.0 * (x.amount ?? 0)), 0)) ?? 0;\r\n        row.push(saldo >= 0 ? \"+\" : \"-\");\r\n        // Rahamäärä\r\n        row.push(saldo < 0 ? saldo * -1.0 : saldo);\r\n        // Valuuttakoodi\r\n        row.push(\"EUR\");\r\n        // Valuuttakurssi\r\n        row.push(1);\r\n        // Selite\r\n        row.push(ledgerAccount.accountName);\r\n        // Alv\r\n        row.push(keyEntryRows.vatPercent * 100);\r\n        // Tulosyksikkö\r\n        row.push(null);\r\n        // Seurantakohde1\r\n        row.push(keyEntryRows.costCenter);\r\n        // Seurantakohde 2\r\n        row.push(keyEntryRows.projectNumber);\r\n        // Seurantakohde 3\r\n        row.push(null);\r\n        // Seurantakohde 4\r\n        row.push(null);\r\n       // Seurantakohde 5\r\n        row.push(null);\r\n        // Seurantakohde 6\r\n        row.push(null);\r\n        // Seurantakohde 7\r\n        row.push(null);\r\n        // Seurantakohde 8\r\n        row.push(null);\r\n        // Seurantakohde 9\r\n        row.push(null);\r\n\r\n        result.push(row);\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  private static formatAsDigiaText(data: any[], _isFinnish: boolean): string {\r\n    const textRows: any[] = [];\r\n    data = data.slice(1);\r\n    for (const row of data) {\r\n      row[0] = this.padRight(row[0] ? Dates.format(row[0], \"DDMMYY\") : \"\",6);\r\n      row[1] = this.padRight(row[1],4);\r\n      row[2] = this.padLeft(row[2],8);\r\n      row[3] = this.padRight(row[3],8);\r\n      row[4] = this.padLeft(row[4],1);\r\n      row[5] = this.padLeft(Numeric.toString(Numeric.round((row[5] ?? 0) * 100, 0) as number), 11, \"0\");\r\n      row[6] = this.padRight(row[6],3);\r\n      row[7] = this.padLeft(Numeric.toString(Numeric.round((row[7] ?? 0) * 1000000000, 0) as number), 17, \"0\");\r\n      row[8] = this.padRight(row[8],30);\r\n      row[9] = this.padRight(null,6);\r\n      row[10] = this.padRight(row[10],3);\r\n      row[11] = this.padRight(row[11],8);\r\n      row[12] = this.padRight(row[12],8);\r\n      row[13] = this.padRight(row[13],8);\r\n      row[14] = this.padRight(row[14],8);\r\n      row[15] = this.padRight(row[15],8);\r\n      row[16] = this.padRight(row[16],8);\r\n      row[17] = this.padRight(row[17],8);\r\n      row[18] = this.padRight(row[18],8);\r\n      row[19] = this.padRight(row[19],8);\r\n\r\n      textRows.push(row.join(\"\"));\r\n    }\r\n    if (textRows.length > 0) {\r\n      // This is required by Digia: every row must end to CRLF even the last.\r\n      textRows.push(\"\");\r\n    }\r\n    return textRows.join(\"\\r\\n\");\r\n  }\r\n  private static getVilpeDigiaExportData(data: AccountingData): any[] {\r\n\r\n    const getVatOsId = (vatPercent?: number): string => {\r\n      if (vatPercent == null) {\r\n        return \"\";\r\n      }\r\n      return `Os${vatPercent * 100}`;\r\n    };\r\n\r\n    const result: any[] = [];\r\n    const header: any[] = [\"Kirjauspäivä\", \"Tositelaji\", \"Tositeno\", \"Kp-tili\", \"DebetKredit\", \"Rahamäärä\", \"Valuuttakoodi\", \"Valuuttakurssi\", \"Selite\", \"Alv\", \"Tulosyksikkö\", \"Seurantakohde1\", \"Projekti\", \"Kustannuspaikka\", \"Seurantakohde4\", \"Seurantakohde5\", \"Seurantakohde6\", \"Seurantakohde7\", \"Seurantakohde8\", \"Seurantakohde9\"];\r\n    result.push(header);\r\n    const entryDate = this.getEntryDate(data);\r\n\r\n    for (const ledgerAccount of data?.ledgerAccounts ?? []) {\r\n      const keyEntriesRows: {\r\n        /** VAT */\r\n        vatPercent?: number,\r\n        /** Cost center */\r\n        costCenter: string,\r\n        /** ProjectNumber */\r\n        vilpeProjectNumber: string,\r\n        /** Profit center */\r\n        vilpeProfitCenter: string\r\n        /** Ledger entries */\r\n        entries: LedgerEntry[],\r\n      }[] = [];\r\n      for (const ledgerEntry of ledgerAccount?.entries ?? []) {\r\n        const vatPercent = ledgerEntry.vatPercent ?? undefined;\r\n        const costCenter = ledgerEntry.dimension?.costCenter || ledgerEntry.dimension?.dimensions?.costCenter || \"\";\r\n        let vilpeProjectNumber = (ledgerEntry.dimension?.dimensions?.project_work || \"\").trim();\r\n        if (vilpeProjectNumber === \"0\") {\r\n          vilpeProjectNumber = \"\";\r\n        }\r\n\r\n        const vilpeProfitCenter = ledgerEntry.dimension?.dimensions?.Tulosyksikkö || ledgerEntry.dimension?.dimensions?.tulosyksikkö || \"\";\r\n        let keyEntryRows = keyEntriesRows.find((x) => x.vatPercent == vatPercent && x.costCenter == costCenter && x.vilpeProjectNumber == vilpeProjectNumber && x.vilpeProfitCenter == vilpeProfitCenter);\r\n        if (keyEntryRows == null) {\r\n          keyEntryRows = { vatPercent, costCenter, vilpeProjectNumber, vilpeProfitCenter, entries: [] };\r\n          keyEntriesRows.push(keyEntryRows);\r\n        }\r\n        keyEntryRows.entries.push(ledgerEntry);\r\n      }\r\n      // Append results\r\n      for (const keyEntryRows of keyEntriesRows) {\r\n        const row: any[] = [];\r\n        // Kirjauspäivä\r\n        row.push(Dates.asJSDate(entryDate));\r\n        // TositeLaji\r\n        row.push(null);\r\n        // Tositeno\r\n        row.push(null);\r\n        // Kp-tili\r\n        row.push(ledgerAccount.accountNumber);\r\n        // DebetKredit\r\n        const saldo = Numeric.round(keyEntryRows.entries.reduce((sum, x) => sum + (x.isDebit ? (x.amount ?? 0) : -1.0 * (x.amount ?? 0)), 0)) ?? 0;\r\n        row.push(saldo >= 0 ? \"+\" : \"-\");\r\n        // Rahamäärä\r\n        row.push(saldo < 0 ? saldo * -1.0 : saldo);\r\n        // Valuuttakoodi\r\n        row.push(\"EUR\");\r\n        // Valuuttakurssi\r\n        row.push(1);\r\n        // Selite\r\n        row.push(ledgerAccount.accountName);\r\n        // Alv\r\n        row.push(getVatOsId(keyEntryRows.vatPercent));\r\n        // Tulosyksikkö\r\n        row.push(keyEntryRows.vilpeProfitCenter);\r\n        // Seurantakohde 1\r\n        row.push(null);\r\n        // Seurantakohde 2\r\n        row.push(null);\r\n        // Kustannuspaikka\r\n        row.push(keyEntryRows.costCenter);\r\n        // Projekti\r\n        row.push(keyEntryRows.vilpeProjectNumber);\r\n       // Seurantakohde 5\r\n        row.push(null);\r\n        // Seurantakohde 6\r\n        row.push(null);\r\n        // Seurantakohde 7\r\n        row.push(null);\r\n        // Seurantakohde 8\r\n        row.push(null);\r\n        // Seurantakohde 9\r\n        row.push(null);\r\n\r\n        result.push(row);\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  private static formatAsVilpeDigiaText(data: any[], _isFinnish: boolean): string {\r\n    const textRows: any[] = [];\r\n    data = data.slice(1);\r\n    for (const row of data) {\r\n      // Kirjauspäivä\r\n      row[0] = this.padRight(row[0] ? Dates.format(row[0], \"DDMMYY\") : \"\",6); // 1\r\n      // TositeLaji\r\n      row[1] = this.padRight(row[1],4); // 7\r\n      // Tositeno\r\n      row[2] = this.padLeft(row[2],8); // 11\r\n      // Kp-tili\r\n      row[3] = this.padRight(row[3],8); // 19\r\n      // DebetKredit\r\n      row[4] = this.padLeft(row[4],1); // 27\r\n      // Rahamäärä\r\n      row[5] = this.padLeft(Numeric.toString(Numeric.round((row[5] ?? 0) * 100, 0) as number), 11, \"0\"); // 28\r\n      // Valuuttakoodi\r\n      row[6] = this.padRight(row[6],3); // 39\r\n      // Valuuttakurssi\r\n      row[7] = this.padLeft(Numeric.toString(Numeric.round((row[7] ?? 0) * 1000000000, 0) as number), 17, \"0\"); // 42\r\n      // Selite\r\n      row[8] = this.padRight(row[8],30); // 59\r\n      // Alv\r\n      row[9] = this.padRight(row[9],6); // 89\r\n      // Tulosyksikkö\r\n      row[10] = this.padRight(row[10],3); // 95\r\n      row[11] = this.padRight(row[11],8);\r\n      row[12] = this.padRight(row[12],8);\r\n      row[13] = this.padRight(row[13],8);\r\n      row[14] = this.padRight(row[14],8);\r\n      row[15] = this.padRight(row[15],8);\r\n      row[16] = this.padRight(row[16],8);\r\n      row[17] = this.padRight(row[17],8);\r\n      row[18] = this.padRight(row[18],8);\r\n      row[19] = this.padRight(row[19],8);\r\n\r\n      textRows.push(row.join(\"\"));\r\n    }\r\n    if (textRows.length > 0) {\r\n      // This is required by Digia: every row must end to CRLF even the last.\r\n      textRows.push(\"\");\r\n    }\r\n    return textRows.join(\"\\r\\n\");\r\n  }\r\n\r\n  private static getIScalaExportData(data: AccountingData, target: TargetOption): any[] {\r\n\r\n    const result: any[] = [];\r\n    const header: any[] = [\"TransNum\", \"TransDate\",\"Flag\",\"Amnt\",\"TransTxt\",\"Code1\",\"Code2\",\"TransLineType\",\"UserEntryBy\",\"Account\"];\r\n\r\n    const dimensionHeaders = (target.dimensions ?? []).filter((x) => !((x[0] ?? \"_\").startsWith(\"_\"))).map((x) => x.toLowerCase());\r\n\r\n    header.push(...dimensionHeaders.map((x, i) => \"AccDim\" +(i+1)));\r\n\r\n    result.push(header);\r\n\r\n    const entryDate = this.getEntryDate(data) || Dates.getToday();\r\n\r\n    for (const rowData of data?.ledgerAccounts ?? []) {\r\n      const keyEntriesRows: {\r\n        /** Entries */\r\n        entries: LedgerEntry[],\r\n        /** Dimensions */\r\n        dimensions: any[],\r\n        /** DimensionsId */\r\n        dimensionsId: string\r\n      }[] = [];\r\n      for (const entryData of rowData?.entries ?? []) {\r\n        const rowDataEntriesDimensions: string[] = [];\r\n        for (const dimensionHeader of dimensionHeaders) {\r\n            rowDataEntriesDimensions.push(entryData.dimension?.dimensions ? (entryData.dimension.dimensions[dimensionHeader] || \"\") : \"\");\r\n        }\r\n        let keyEntryRows: {\r\n          /** Entries */\r\n          entries: LedgerEntry[],\r\n          /** Dimensions */\r\n          dimensions: any[],\r\n          /** DimensionsId */\r\n          dimensionsId: string\r\n        } | undefined = keyEntriesRows.find((x) => x.dimensionsId === rowDataEntriesDimensions.join(\"-\"));\r\n        if (keyEntryRows == null) {\r\n          keyEntryRows = { entries: [], dimensions: rowDataEntriesDimensions, dimensionsId: rowDataEntriesDimensions.join(\"-\") };\r\n          keyEntriesRows.push(keyEntryRows);\r\n        }\r\n        keyEntryRows.entries.push(entryData);\r\n      }\r\n      // Append results\r\n      for (const keyEntryRows of keyEntriesRows) {\r\n        const row: any[] = [];\r\n        // TransNum\r\n        row.push(null);\r\n        // TransDate\r\n        row.push(Dates.asJSDate(entryDate));\r\n        // Flag\r\n        row.push(\"0\");\r\n        // Amnt\r\n        const saldo = Numeric.round(keyEntryRows.entries.reduce((sum, x) => sum + (x.isDebit ? (x.amount ?? 0) : -1.0 * (x.amount ?? 0)), 0));\r\n        row.push(saldo);\r\n        //TransTxt\r\n        row.push(rowData.accountName);\r\n        //Code1\r\n        row.push(null);\r\n        //Code2\r\n        row.push(null);\r\n        //TransLineType\r\n        row.push(\"A\");\r\n        //UserEntryBy\r\n        row.push(\"SCSNepto\");\r\n        //Account\r\n        row.push(rowData.accountNumber);\r\n        // AccDimX\r\n        for (let i = 0; i < dimensionHeaders.length; i++) {\r\n          row.push(keyEntryRows.dimensions[i]);\r\n        }\r\n        result.push(row);\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  private static formatAsIScalaXml(data: any[], _isFinnish: boolean): string {\r\n    return `<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<msg:Msg xsi:schemaLocation=\"http://Epicor.com/Message/2.0 http://scshost/schemas/epicor/ScalaMessage.xsd\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:msg=\"http://Epicor.com/Message/2.0\">\r\n  <msg:Hdr>\r\n    <msg:Sender>\r\n      <msg:Name>NEPTON</msg:Name>\r\n      <msg:Subname></msg:Subname>\r\n    </msg:Sender>\r\n  </msg:Hdr>\r\n  <msg:Body>\r\n    <msg:Req msg-type=\"GL Journal\" action=\"Process_TT\">\r\n      <msg:Dta>\r\n        <dta:DayBookJrn xsi:schemaLocation=\"http://www.scala.net/DayBookJrn/1.1 http://scshost/schemas/Scala/1.1/DayBookJrn.xsd\" xmlns:msg=\"http://Epicor.com/InternalMessage/1.1\" xmlns:dta=\"http://www.scala.net/DayBookJrn/1.1\">\r\n          <dta:TransLines>\r\n          ${data.slice(1).map((row) =>\r\n            `<dta:TransLine>\r\n              <dta:TransNum>${row[0] ? row[0] : \"\"}</dta:TransNum>\r\n              <dta:TransDate>${row[1] ? Dates.asDate(row[1]) : \"\"}</dta:TransDate>\r\n              <dta:Flag>${row[2] ? row[2] : \"\"}</dta:Flag>\r\n              <dta:Amnt>${row[3] ? Numeric.toFixed(row[3], 2) : \"\"}</dta:Amnt>\r\n              <dta:TransTxt>${row[4] ? row[4] : \"\"}</dta:TransTxt>\r\n              <dta:Code1>${row[5] ? row[5] : \"\"}</dta:Code1>\r\n              <dta:Code2>${row[6] ? row[6] : \"\"}</dta:Code2>\r\n              <dta:TransLineType>${row[7] ? row[7] : \"\"}</dta:TransLineType>\r\n              <dta:UserEntryBy>${row[8] ? row[8] : \"\"}</dta:UserEntryBy>\r\n              <dta:AccStr>\r\n                <dta:Account>${row[9]}</dta:Account>\r\n                ${row.filter((_, i) => i >= 10).map((d, i) =>\r\n                  `<dta:AccDim${i + 1}>${d ? d : \"\"}</dta:AccDim${i + 1}>`\r\n                ).join(\"\\r\\n\")}\r\n              </dta:AccStr>\r\n            </dta:TransLine>`).join(\"\\r\\n\")}\r\n          </dta:TransLines>\r\n        </dta:DayBookJrn>\r\n      </msg:Dta>\r\n    </msg:Req>\r\n  </msg:Body>\r\n</msg:Msg>`;\r\n  }\r\n\r\n  private static padRight(value: string | null | undefined, length: number, padChar = \" \"): string {\r\n    const txt = value ?? \"\";\r\n    if (txt.length > length) {\r\n      return txt.substring(0, length);\r\n    }\r\n    return txt + padChar.repeat(length - txt.length);\r\n  }\r\n\r\n  private static padLeft(value: string | null, length: number, padChar = \" \"): string {\r\n    const txt = value ?? \"\";\r\n    if (txt.length > length) {\r\n      return txt.substring(0, length);\r\n    }\r\n    return padChar.repeat(length - txt.length) + txt;\r\n  }\r\n\r\n  private static getEntryDate(data: AccountingData): string {\r\n    // Return the period end, if given\r\n    if (data.period?.end) {\r\n      return data.period.end;\r\n    }\r\n    // Try to find the max entry date\r\n    let entryDate: string = \"\";\r\n    for (const ledgerAccount of data?.ledgerAccounts ?? []) {\r\n      for (const ledgerEntry of ledgerAccount?.entries ?? []) {\r\n        if (ledgerEntry.entryDate) {\r\n          if (!entryDate || Dates.isAfter(ledgerEntry.entryDate, entryDate)) {\r\n            entryDate = ledgerEntry.entryDate;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return entryDate;\r\n  }\r\n\r\n  private static getEntryDimensions(entryData: LedgerEntry): any {\r\n    return Object.entries(entryData?.dimension?.dimensions ?? {}).filter((x) => !((x[0] ?? \"_\").startsWith(\"_\")));\r\n  }\r\n}","import { ApiItemType } from \"../model\";\r\n\r\n/** Helpers for working with the API */\r\nexport class ApiLogic {\r\n\r\n  /** Gets the type string for an API item type enumeration. */\r\n  public static getType(apiListItem: ApiItemType): string | null {\r\n    if (!apiListItem || apiListItem.trim().length < 2) {\r\n      return null;\r\n    }\r\n    switch (apiListItem) {\r\n      case ApiItemType.Calculation:\r\n      case ApiItemType.CalculationPaid:\r\n        return \"Calculation\";\r\n      case ApiItemType.EarningsPaymentReport:\r\n        return \"EarningsPayment\";\r\n      case ApiItemType.PayerSummaryReport:\r\n        return \"PayerSummary\";\r\n      case ApiItemType.ListItems:\r\n        return \"ApiListItem[]\";\r\n      case ApiItemType.Undefined:\r\n        return null;\r\n      default:\r\n        return apiListItem.substring(0, 1).toUpperCase() + apiListItem.substring(1);\r\n    }\r\n  }\r\n\r\n}","import { Numeric, Objects } from \"../util\";\r\nimport { CalculationResult, EmployerCalculationDTO, TotalCalculationDTO, WorkerCalculationDTO } from \"../model\";\r\n\r\n/** Extension methods for CalculationResult */\r\nexport class CalculationResultLogic {\r\n\r\n  /**\r\n   * Adds Calculation Results together and returns a new CalculationResult\r\n   * @param calculationResults CalculationResults to add.\r\n   * @returns A new CalculationResult.\r\n   */\r\n  public static add(calculationResults: CalculationResult[] ): CalculationResult {\r\n    if (calculationResults == null || calculationResults.length === 0) {\r\n      return this.addResults(null, null);\r\n    }\r\n    return calculationResults.reduce( (sum, item) => this.addResults(sum, item), this.safeObj(null));\r\n  }\r\n\r\n\r\n  /**\r\n   * Calculates the difference between two results and returns a new CalculationResult\r\n   * @param original - The original result.\r\n   * @param modified - The modified result.\r\n   * @returns The difference between the result sets.\r\n   */\r\n   public static diff(original: CalculationResult, modified: CalculationResult): CalculationResult {\r\n    return this.addResults(modified, original, true);\r\n  }\r\n\r\n  private static addResults(c1: CalculationResult | null, c2: CalculationResult | null, subtract = false): CalculationResult {\r\n    c1 = this.safeObj(c1);\r\n    c2 = this.safeObj(c2);\r\n    return {\r\n      totals: this.addTotals(c1?.totals, c2?.totals, subtract),\r\n      workerCalc: this.addWorkerCalc(c1?.workerCalc, c2?.workerCalc, subtract),\r\n      employerCalc: this.addEmployerCalc(c1?.employerCalc, c2?.employerCalc, subtract),\r\n      rows: subtract ? this.safeArr(null) : this.safeArr(c1?.rows).concat(this.safeArr(c2?.rows)),\r\n      responsibilities: this.safeObj(c1?.responsibilities),\r\n      irRows: subtract ? this.safeArr(null) : this.safeArr(c1?.irRows).concat(this.safeArr(c2?.irRows)),\r\n    };\r\n  }\r\n\r\n  private static addTotals(c1: TotalCalculationDTO | null | undefined, c2: TotalCalculationDTO | null | undefined, subtract = false): TotalCalculationDTO {\r\n    c1 = this.safeObj(c1);\r\n    c2 = this.safeObj(c2);\r\n    return  {\r\n      pension: this.safeNum(c1?.pension) + this.safeNum(c2?.pension, subtract),\r\n      total: this.safeNum(c1?.total) + this.safeNum(c2?.total, subtract),\r\n      totalBaseSalary: this.safeNum(c1?.totalBaseSalary) + this.safeNum(c2?.totalBaseSalary, subtract),\r\n      totalExpenses: this.safeNum(c1?.totalExpenses) + this.safeNum(c2?.totalExpenses, subtract),\r\n      totalGrossSalary: this.safeNum(c1?.totalGrossSalary) + this.safeNum(c2?.totalGrossSalary, subtract),\r\n      totalSocialSecurityBase: this.safeNum(c1?.totalSocialSecurityBase) + this.safeNum(c2?.totalSocialSecurityBase, subtract),\r\n      totalTaxable: this.safeNum(c1?.totalTaxable) + this.safeNum(c2?.totalTaxable, subtract),\r\n      unemployment: this.safeNum(c1?.unemployment) + this.safeNum(c2?.unemployment, subtract),\r\n      totalAccidentInsuranceBase: this.safeNum(c1?.totalAccidentInsuranceBase) + this.safeNum(c2?.totalAccidentInsuranceBase, subtract),\r\n      totalHealthInsuranceBase: this.safeNum(c1?.totalHealthInsuranceBase) + this.safeNum(c2?.totalHealthInsuranceBase, subtract),\r\n      totalPayable: this.safeNum(c1?.totalPayable) + this.safeNum(c2?.totalPayable, subtract),\r\n      totalPensionInsuranceBase: this.safeNum(c1?.totalPensionInsuranceBase) + this.safeNum(c2?.totalPensionInsuranceBase, subtract),\r\n      totalUnemploymentInsuranceBase: this.safeNum(c1?.totalUnemploymentInsuranceBase) + this.safeNum(c2?.totalUnemploymentInsuranceBase, subtract),\r\n    };\r\n  }\r\n\r\n  private static addWorkerCalc(c1: WorkerCalculationDTO | null | undefined, c2: WorkerCalculationDTO | null | undefined, subtract = false): WorkerCalculationDTO {\r\n    c1 = this.safeObj(c1);\r\n    c2 = this.safeObj(c2);\r\n    return {\r\n      benefits : this.safeNum(c1?.benefits) + this.safeNum(c2?.benefits, subtract),\r\n      deductions : this.safeNum(c1?.deductions) + this.safeNum(c2?.deductions, subtract),\r\n      fullTax : this.safeNum(c1?.fullTax) + this.safeNum(c2?.fullTax, subtract),\r\n      fullOtherDeductions : this.safeNum(c1?.fullOtherDeductions) + this.safeNum(c2?.fullOtherDeductions, subtract),\r\n      fullPension : this.safeNum(c1?.fullPension) + this.safeNum(c2?.fullPension, subtract),\r\n      fullPrepaidExpenses : this.safeNum(c1?.fullPrepaidExpenses) + this.safeNum(c2?.fullPrepaidExpenses, subtract),\r\n      fullSalaryAdvance : this.safeNum(c1?.fullSalaryAdvance) + this.safeNum(c2?.fullSalaryAdvance, subtract),\r\n      fullUnemploymentInsurance : this.safeNum(c1?.fullUnemploymentInsurance) + this.safeNum(c2?.fullUnemploymentInsurance, subtract),\r\n      fullUnionPayment : this.safeNum(c1?.fullUnionPayment) + this.safeNum(c2?.fullUnionPayment, subtract),\r\n      otherDeductions : this.safeNum(c1?.otherDeductions) + this.safeNum(c2?.otherDeductions, subtract),\r\n      pension : this.safeNum(c1?.pension) + this.safeNum(c2?.pension, subtract),\r\n      prepaidExpenses : this.safeNum(c1?.prepaidExpenses) + this.safeNum(c2?.prepaidExpenses, subtract),\r\n      foreclosure : this.safeNum(c1?.foreclosure) + this.safeNum(c2?.foreclosure, subtract),\r\n      salaryAdvance : this.safeNum(c1?.salaryAdvance) + this.safeNum(c2?.salaryAdvance, subtract),\r\n      salaryAfterTax : this.safeNum(c1?.salaryAfterTax) + this.safeNum(c2?.salaryAfterTax, subtract),\r\n      salaryAfterTaxAndForeclosure : this.safeNum(c1?.salaryAfterTaxAndForeclosure) + this.safeNum(c2?.salaryAfterTaxAndForeclosure, subtract),\r\n      salaryPayment : this.safeNum(c1?.salaryPayment) + this.safeNum(c2?.salaryPayment, subtract),\r\n      tax : this.safeNum(c1?.tax) + this.safeNum(c2?.tax, subtract),\r\n      totalWorkerPayment : this.safeNum(c1?.totalWorkerPayment) + this.safeNum(c2?.totalWorkerPayment, subtract),\r\n      unemploymentInsurance : this.safeNum(c1?.unemploymentInsurance) + this.safeNum(c2?.unemploymentInsurance, subtract),\r\n      unionPayment : this.safeNum(c1?.unionPayment) + this.safeNum(c2?.unionPayment, subtract),\r\n      workerSideCosts : this.safeNum(c1?.workerSideCosts) + this.safeNum(c2?.workerSideCosts, subtract),\r\n      totalWorkerPaymentLegacy : this.safeNum(c1?.totalWorkerPaymentLegacy) + this.safeNum(c2?.totalWorkerPaymentLegacy, subtract),\r\n    };\r\n  }\r\n\r\n  private static addEmployerCalc(c1: EmployerCalculationDTO | null | undefined, c2: EmployerCalculationDTO | null | undefined, subtract = false): EmployerCalculationDTO {\r\n    c1 = this.safeObj(c1);\r\n    c2 = this.safeObj(c2);\r\n    const result = {\r\n      allSideCosts : this.safeNum(c1?.allSideCosts) + this.safeNum(c2?.allSideCosts, subtract),\r\n      deductionPensionSelfPayment : this.safeNum(c1?.deductionPensionSelfPayment) + this.safeNum(c2?.deductionPensionSelfPayment, subtract),\r\n      deductionUnemploymentSelfPayment : this.safeNum(c1?.deductionUnemploymentSelfPayment) + this.safeNum(c2?.deductionUnemploymentSelfPayment, subtract),\r\n      deductionSalaryAdvance : this.safeNum(c1?.deductionSalaryAdvance) + this.safeNum(c2?.deductionSalaryAdvance, subtract),\r\n      deductionForeclosure : this.safeNum(c1?.deductionForeclosure) + this.safeNum(c2?.deductionForeclosure, subtract),\r\n      foreclosureByPalkkaus : this.safeNum(c1?.foreclosureByPalkkaus) + this.safeNum(c2?.foreclosureByPalkkaus, subtract),\r\n      deductionUnionPayment : this.safeNum(c1?.deductionUnionPayment) + this.safeNum(c2?.deductionUnionPayment, subtract),\r\n      deductionOtherDeductions : this.safeNum(c1?.deductionOtherDeductions) + this.safeNum(c2?.deductionOtherDeductions, subtract),\r\n      deductionTaxAndSocialSecuritySelfPayment: this.safeNum(c1?.deductionTaxAndSocialSecuritySelfPayment) + this.safeNum(c2?.deductionTaxAndSocialSecuritySelfPayment, subtract),\r\n      deductionWorkerSelfPayment: this.safeNum(c1?.deductionWorkerSelfPayment) + this.safeNum(c2?.deductionWorkerSelfPayment, subtract),\r\n      finalCost : this.safeNum(c1?.finalCost) + this.safeNum(c2?.finalCost, subtract),\r\n      householdDeduction : this.safeNum(c1?.householdDeduction) + this.safeNum(c2?.householdDeduction, subtract),\r\n      mandatorySideCosts : this.safeNum(c1?.mandatorySideCosts) + this.safeNum(c2?.mandatorySideCosts, subtract),\r\n      palkkaus : this.safeNum(c1?.palkkaus) + this.safeNum(c2?.palkkaus, subtract),\r\n      service : this.safeNum(c1?.service) + this.safeNum(c2?.service, subtract),\r\n      pension : this.safeNum(c1?.pension) + this.safeNum(c2?.pension, subtract),\r\n      socialSecurity : this.safeNum(c1?.socialSecurity) + this.safeNum(c2?.socialSecurity, subtract),\r\n      totalDeductions : this.safeNum(c1?.totalDeductions) + this.safeNum(c2?.totalDeductions, subtract),\r\n      totalPayment : this.safeNum(c1?.totalPayment) + this.safeNum(c2?.totalPayment, subtract),\r\n      totalSalaryCost : this.safeNum(c1?.totalSalaryCost) + this.safeNum(c2?.totalSalaryCost, subtract),\r\n      unemployment : this.safeNum(c1?.unemployment) + this.safeNum(c2?.unemployment, subtract),\r\n      totalPaymentLegacy : this.safeNum(c1?.totalPaymentLegacy) + this.safeNum(c2?.totalPaymentLegacy, subtract),\r\n    };\r\n    return result;\r\n  }\r\n\r\n  private static safeNum(value: number | null | undefined, subtract = false): number {\r\n    const n = (value ?? 0);\r\n    return subtract ? Numeric.round(n * -1.0)! : n;\r\n  }\r\n  private static safeArr(value: any[] | null | undefined): any[] {\r\n    return Objects.copy(value ?? []);\r\n  }\r\n  private static safeObj(value: any | null | undefined): any {\r\n    return Objects.copy(value ?? {});\r\n  }\r\n}\r\n","import { AvatarPictureType, ContractParty, ContractPartyType, LegalEntityType, WorkerAccount } from \"../model\";\r\n\r\n/**\r\n * Provides business logic related to displaying / editing Contact objects\r\n */\r\nexport class ContractPartyLogic {\r\n\r\n  /**\r\n   * Gets a new blank Contact with default values, suitable for UI binding.\r\n   */\r\n  public static getBlank(): ContractParty {\r\n    return {\r\n      avatar: {\r\n        entityType: null,\r\n        lastName: null,\r\n        pictureType: AvatarPictureType.Icon,\r\n        isReadOnly: false,\r\n      },\r\n      contact: {\r\n        countryCode: \"fi\",\r\n      },\r\n      isSelf: false,\r\n      isSigned: false,\r\n      contractPartyType: ContractPartyType.CustomContact,\r\n      isEmployer: false,\r\n    };\r\n  }\r\n\r\n  /** Converts a WorkerAccount object to a ContractParty object. */\r\n  public static getFromWorker(worker: WorkerAccount): ContractParty {\r\n    return {\r\n      avatar: worker.avatar,\r\n      contact: worker.contact,\r\n      contractPartyType: ContractPartyType.CustomContact,\r\n      iban: worker.ibanNumber,\r\n      id: worker.id,\r\n      isEmployer: false,\r\n      isSelf: false,\r\n      isSigned: false,\r\n      officialId: worker.officialPersonId,\r\n    };\r\n  }\r\n\r\n  /** Gets sample contacts for demonstration user interfaces. */\r\n  public static getSampleContacts(): ContractParty[] {\r\n    return [\r\n      {\r\n        id: \"example-default\",\r\n        avatar: {\r\n          entityType: LegalEntityType.Person,\r\n          firstName: \"Erkki\",\r\n          lastName: \"Esimerkki\",\r\n          displayName: \"Erkki Esimerkki\",\r\n          sortableName: \"Esimerkki, Erkki\",\r\n          pictureType: AvatarPictureType.Icon,\r\n          color: \"lime\",\r\n          initials: \"EE\",\r\n          url: null,\r\n          description:\r\n            \"Esimerkkityöntekijä, oletus: 18-52 vuotta, veroprosentti 25%.\",\r\n          id: \"example-default\",\r\n        },\r\n        contact: {\r\n          email: \"erkki@esimerkki.fi\",\r\n          telephone: \"555-5555555\",\r\n          street: \"Mallikatu 3\",\r\n          postalCode: \"333333\",\r\n          city: \"Jokupaikka\",\r\n          countryCode: \"fi\",\r\n        },\r\n      },\r\n      {\r\n        id: \"example-17\",\r\n        avatar: {\r\n          entityType: LegalEntityType.Person,\r\n          firstName: \"Laura\",\r\n          lastName: \"Lukiolainen\",\r\n          displayName: \"Laura Lukiolainen\",\r\n          sortableName: \"Lukiolainen, Laura\",\r\n          pictureType: AvatarPictureType.Icon,\r\n          color: \"pink\",\r\n          initials: \"LL\",\r\n          url: null,\r\n          description: \"Esimerkki nuoresta työntekijästä: 17 vuotias, veroprosentti 0.\",\r\n          id: \"example-17\",\r\n        },\r\n        contact: {\r\n          email: \"laura@esimerkki.fi\",\r\n          telephone: \"222-2222222\",\r\n          street: \"Lukiolaisenkatu 5\",\r\n          postalCode: \"222222\",\r\n          city: \"Jokupaikka\",\r\n          countryCode: \"fi\",\r\n        },\r\n      },\r\n      {\r\n        id: \"example-company\",\r\n        avatar: {\r\n          entityType: LegalEntityType.Company,\r\n          firstName: \"Mallitakomo Oy\",\r\n          lastName: null,\r\n          displayName: \"Mallitakomo Oy\",\r\n          sortableName: \"Mallitakomo Oy\",\r\n          pictureType: AvatarPictureType.Icon,\r\n          color: \"red\",\r\n          initials: \"MT\",\r\n          url: null,\r\n          description: \"Esimerkkiyritys Tampereelta\",\r\n          id: \"example-company\",\r\n        },\r\n        contact: {\r\n          email: \"takomo@esimerkki.fi\",\r\n          telephone: \"888-88888888\",\r\n          street: \"Takomokatu 8\",\r\n          postalCode: \"8888888\",\r\n          city: \"Tampere\",\r\n          countryCode: \"fi\",\r\n        },\r\n      },\r\n      {\r\n        id: \"example-pensioner\",\r\n        avatar: {\r\n          entityType: LegalEntityType.Person,\r\n          firstName: \"Tanja\",\r\n          lastName: \"Eläkeläinen\",\r\n          displayName: \"Tanja Eläkeläinen\",\r\n          sortableName: \"Eläkeläinen, Tanja\",\r\n          pictureType: AvatarPictureType.Icon,\r\n          color: \"blue\",\r\n          initials: \"TE\",\r\n          url: null,\r\n          description: \"Esimerkki eläkeläisestä: 65-67 vuotias, veroprosentti 10%.\",\r\n          id: \"example-pensioner\",\r\n        },\r\n        contact: {\r\n          email: \"tanja@esimerkki.fi\",\r\n          telephone: \"777-7777777\",\r\n          street: \"Eläkeläisenkatu 7\",\r\n          postalCode: \"111111\",\r\n          city: \"Jokupaikka\",\r\n          countryCode: \"fi\",\r\n        },\r\n      },\r\n    ];\r\n  }\r\n}\r\n","import type { InputEnumOption } from \"../ui/InputEnumOption\";\r\nimport { CalculationRowType, CalculationRowUnit, Country, EmploymentListItem, EmploymentRelationSalaryPaymentMethod, EmploymentRelationTaxcard, EmploymentRelationType, IncomeEarnerType, InsuranceCompany, InternationalSocialSecurityException, Language, PensionCalculation, PensionCompany, UserDefinedRow, WorkDescription } from \"../model\";\r\nimport { AccountInIndex, AccountSettingsInSession, ContactAdvanced, ContactType, Employment, InsuranceContract, PensionContract, WorkerAccount  } from \"../model\";\r\nimport { Dates, Iban } from \"../util\";\r\nimport { EnumerationsLogic } from \"./EnumerationsLogic\";\r\nimport { Translations } from \"./Translations\";\r\nimport type { EmploymentSocialSecurityModel } from \"./model\";\r\nimport { kevaEmploymentRegCodes} from \"../codegen\";\r\n\r\n/**\r\n * Logic related to Employment Relations.\r\n */\r\nexport class EmploymentLogic {\r\n\r\n  /** Gets a new blank item as bases for UI binding. */\r\n  public static getBlank(): Employment {\r\n    return {\r\n      info: {\r\n        irIncomeEarnerTypes: [],\r\n        salaryPaymentMethod: EmploymentRelationSalaryPaymentMethod.BankAccount,\r\n      },\r\n      identity: {\r\n        language: Language.Default,\r\n      },\r\n      contacts: [\r\n        {\r\n          type: ContactType.Default,\r\n          country: Country.Fi,\r\n        }\r\n      ],\r\n      work: {\r\n        salaryDefaults: [],\r\n      },\r\n      personalInfo: {\r\n        avatar: {},\r\n      },\r\n      holidays: {},\r\n      usecase: {\r\n        data: {},\r\n      },\r\n      international: {\r\n        socialSecurityExceptions: [],\r\n        taxAtSource: {},\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Gets a description text for an Employment.\r\n   * @param account The account info\r\n   * @param type Type of employment relation\r\n   * @param pensionCalculation Type of pension calculation.\r\n   */\r\n  public static getDescription(account: AccountInIndex, type: EmploymentRelationType, pensionCalculation: PensionCalculation): string {\r\n    if (!account || (type || EmploymentRelationType.Undefined) == EmploymentRelationType.Undefined) {\r\n      return account?.email || \"-\";\r\n    }\r\n    let descr = EnumerationsLogic.getEnumLabel(\"EmploymentRelationType\", type);\r\n    switch (type) {\r\n      case EmploymentRelationType.Entrepreneur:\r\n        if (pensionCalculation === PensionCalculation.Entrepreneur) {\r\n          descr += \" (\" + Translations.get(\"SALAXY.ENUM.PensionCalculation.entrepreneur.label\") + \")\";\r\n        } else if (pensionCalculation === PensionCalculation.PartialOwner) {\r\n          descr += \" (\" + Translations.get(\"SALAXY.ENUM.PensionCalculation.partialOwner.label\") + \")\";\r\n        } else if (pensionCalculation === PensionCalculation.SmallEntrepreneur) {\r\n          descr += \" (\" + Translations.get(\"SALAXY.ENUM.PensionCalculation.smallEntrepreneur.label\") + \")\";\r\n        } else if (pensionCalculation === PensionCalculation.Employee) {\r\n          descr += \" (\" + Translations.get(\"SALAXY.ENUM.PensionCalculation.employee.label\") + \")\";\r\n        }\r\n        break;\r\n      case EmploymentRelationType.Farmer:\r\n        if (pensionCalculation === PensionCalculation.Farmer) {\r\n          descr += \" (\" + Translations.get(\"SALAXY.ENUM.PensionCalculation.farmer.label\") + \")\";\r\n        } else if (pensionCalculation === PensionCalculation.SmallFarmer) {\r\n          descr += \" (\" + Translations.get(\"SALAXY.ENUM.PensionCalculation.smallFarmer.label\") + \")\";\r\n        } else if (pensionCalculation === PensionCalculation.Employee) {\r\n          descr += \" (\" + Translations.get(\"SALAXY.ENUM.PensionCalculation.employee.label\") + \")\";\r\n        }\r\n        break;\r\n    }\r\n    return descr;\r\n  }\r\n\r\n  /**\r\n   * Gets a descriptive text on whether the employment is active or not.\r\n   * @param employment Employment relation to get the text for.\r\n   * @returns A text that describes whether the employment is active or not with the dates (start and end).\r\n   */\r\n  public static getActiveText(employment: Employment | EmploymentListItem): string | undefined {\r\n    if (!employment) {\r\n      return undefined;\r\n    }\r\n    // TODO: Add language versioning.\r\n    const today = Dates.getToday(); // Set as aprameter if necessary for testing.\r\n    const startDate = this.isListItem(employment) ? employment.data?.startDate : employment.info?.startDate;\r\n    const endDate = this.isListItem(employment) ? employment.data?.endDate : employment.info?.endDate;\r\n    if (!startDate && !endDate) {\r\n      return `Aktiivinen, ei päivämääriä`;\r\n    }\r\n    const isActive = (!startDate || Dates.isSameOrBefore(startDate, today))\r\n      && (!endDate || Dates.isSameOrAfter(endDate, today));\r\n    return `${ isActive ? \"Aktiiviinen\" : \"Ei aktiivinen\" }: ${ Dates.getFormattedRange(startDate!, endDate!) }`;\r\n  }\r\n\r\n  /**\r\n   * Type guard for EmploymentListItem (as opposed to Employment) .\r\n   * @param employment An item that mey be Employment or EmploymentListItem (or undefined / null).\r\n   * @returns True if the item is an EmploymentListItem (based on data property).\r\n   */\r\n  public static isListItem(employment: Employment | EmploymentListItem | undefined): employment is EmploymentListItem {\r\n    return !!(employment as EmploymentListItem)?.data;\r\n  }\r\n\r\n  /**\r\n   * Gets an AccountInIndex object based on WorkerAccount.\r\n   * This can be used in employmetn logic methods (e.g. getDescription()) if the source is WorkerAccount and not Employment.\r\n   */\r\n  public static getAccountInIndex(account: WorkerAccount): AccountInIndex | undefined {\r\n    if (!account?.avatar) {\r\n      return undefined;\r\n    }\r\n    return {\r\n      avatar: account.avatar,\r\n      email: account.contact?.email,\r\n      ibanNumber: account.ibanNumber,\r\n      officialId: account.officialPersonId,\r\n      telephone: account.contact?.telephone,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Returns options object for PensionCalculation selection by employment relation type.\r\n   * @param employmentRelationType Employment relation type of the worker.\r\n   */\r\n  public static getPensionCalculationOptions(employmentRelationType: EmploymentRelationType, contracts: PensionContract[]): Array<InputEnumOption> {\r\n    const types: PensionCalculation[] = [];\r\n    switch (employmentRelationType as any) {\r\n      case EmploymentRelationType.EmployedByStateEmploymentFund:\r\n        types.push(PensionCalculation.Employee);\r\n        break;\r\n      case EmploymentRelationType.PerformingArtist:\r\n        types.push(...[PensionCalculation.Employee, PensionCalculation.Compensation]);\r\n        break;\r\n      case EmploymentRelationType.Entrepreneur:\r\n        types.push(...[PensionCalculation.Entrepreneur, PensionCalculation.SmallEntrepreneur, PensionCalculation.PartialOwner, PensionCalculation.Employee]);\r\n        break;\r\n      case EmploymentRelationType.Farmer:\r\n        types.push(...[PensionCalculation.Farmer, PensionCalculation.SmallFarmer, PensionCalculation.Employee]);\r\n        break;\r\n      case EmploymentRelationType.Compensation:\r\n        types.push(PensionCalculation.Compensation);\r\n        break;\r\n      case EmploymentRelationType.BoardMember:\r\n        types.push(PensionCalculation.BoardRemuneration);\r\n        break;\r\n      case EmploymentRelationType.Athlete:\r\n        types.push(PensionCalculation.Athlete);\r\n        break;\r\n      case EmploymentRelationType.ForeignWorker:\r\n      case EmploymentRelationType.WorkingAbroad:\r\n        types.push(PensionCalculation.Employee, PensionCalculation.Compensation, PensionCalculation.Entrepreneur);\r\n        break;\r\n      case EmploymentRelationType.HourlySalary:\r\n      case EmploymentRelationType.MonthlySalary:\r\n      case EmploymentRelationType.Salary:\r\n      default:\r\n        types.push(PensionCalculation.Employee);\r\n        break;\r\n    }\r\n\r\n    // Add PublicSector if keva contract found\r\n    if (types.some(x => x == PensionCalculation.Employee) && contracts.some((x) => x.company?.startsWith(\"keva\"))) {\r\n        types.push(PensionCalculation.PublicSector);\r\n    }\r\n\r\n    return types.map((type) => {\r\n      const label = EnumerationsLogic.getEnumLabel(\"PensionCalculation\", type);\r\n      const descr = EnumerationsLogic.getEnumDescr(\"PensionCalculation\", type);\r\n\r\n      return { value: type, text: label, title: descr && descr !== type ? descr : undefined };\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Sets the income earner types accordingly based on employment type.\r\n   * Called when the type of employment changes\r\n   * @param model Employment relation to update.\r\n   */\r\n  public static resetModelFromType(model: Employment): void {\r\n    model.work ??=  {};\r\n    model.info ??=  {};\r\n    model.work.description = undefined;\r\n    model.work.occupationCode = undefined;\r\n    model.info.taxcard = EmploymentRelationTaxcard.Auto;\r\n    const incomeEarnerTypes: IncomeEarnerType[] = [];\r\n\r\n    switch (model.info.type) {\r\n      case EmploymentRelationType.EmployedByStateEmploymentFund:\r\n        model.info.pensionCalculation = PensionCalculation.Employee;\r\n        incomeEarnerTypes.push(IncomeEarnerType.EmployedByStateEmploymentFund);\r\n        break;\r\n      case EmploymentRelationType.PerformingArtist:\r\n        model.info.pensionCalculation = PensionCalculation.Employee;\r\n        incomeEarnerTypes.push(IncomeEarnerType.PerformingArtist);\r\n        break;\r\n      case EmploymentRelationType.Entrepreneur:\r\n        model.info.pensionCalculation = PensionCalculation.Entrepreneur;\r\n        break;\r\n      case EmploymentRelationType.Farmer:\r\n        model.info.pensionCalculation = PensionCalculation.Farmer;\r\n        break;\r\n      case EmploymentRelationType.Compensation:\r\n        model.info.pensionCalculation = PensionCalculation.Compensation;\r\n        break;\r\n      case EmploymentRelationType.BoardMember:\r\n        model.info.pensionCalculation = PensionCalculation.BoardRemuneration;\r\n        model.work.description = Translations.get(\"SALAXY.ENUM.EmploymentRelationType.boardMember.label\");\r\n        break;\r\n      case EmploymentRelationType.Athlete:\r\n        model.info.pensionCalculation = PensionCalculation.Athlete;\r\n        model.work.occupationCode = \"34210\";\r\n        model.work.description = Translations.get(\"SALAXY.ENUM.EmploymentRelationType.athlete.label\");\r\n        incomeEarnerTypes.push(IncomeEarnerType.Athlete);\r\n        break;\r\n      case EmploymentRelationType.ForeignWorker:\r\n      case EmploymentRelationType.WorkingAbroad:\r\n        model.info.pensionCalculation = PensionCalculation.Employee;\r\n        model.info.taxcard = EmploymentRelationTaxcard.TaxAtSource;\r\n        break;\r\n      case EmploymentRelationType.MonthlySalary:\r\n      case EmploymentRelationType.HourlySalary:\r\n      case EmploymentRelationType.Salary:\r\n      default:\r\n        model.info.pensionCalculation = PensionCalculation.Employee;\r\n        break;\r\n    }\r\n    model.info.irIncomeEarnerTypes = incomeEarnerTypes;\r\n  }\r\n\r\n  /**\r\n   * Sets the income earner types accordingly based on pension calculation.\r\n   * Called when the pension calculation changes.\r\n   * @param model Employment relation to update.\r\n   */\r\n  public static resetModelFromPensionCalculation(model: Employment): void {\r\n    const incomeEarnerTypes: IncomeEarnerType[] = model.info?.irIncomeEarnerTypes?.filter(x =>\r\n      x != IncomeEarnerType.EntrepreneurOrFarmerNoPensionRequired && x != IncomeEarnerType.PartialOwner\r\n    ) ?? [];\r\n    switch (model.info?.pensionCalculation) {\r\n      case PensionCalculation.PartialOwner:\r\n        incomeEarnerTypes.push(IncomeEarnerType.PartialOwner);\r\n        break;\r\n      case PensionCalculation.SmallEntrepreneur:\r\n      case PensionCalculation.SmallFarmer:\r\n        incomeEarnerTypes.push(IncomeEarnerType.EntrepreneurOrFarmerNoPensionRequired);\r\n        break;\r\n    }\r\n    model.info ??= {};\r\n    model.info.irIncomeEarnerTypes = incomeEarnerTypes;\r\n  }\r\n\r\n  /**\r\n   * Sets the salary default rows (rows that are used when creating new claculations)\r\n   * based on the employment type.\r\n   * @param type Employment type\r\n   * @param work Work description that contains the salary defaults (will be reset).\r\n   */\r\n  public static setSalaryDefaultRows(type: EmploymentRelationType, work: WorkDescription): void {\r\n    work.salaryDefaults = [];\r\n    const defaultRow: UserDefinedRow = {\r\n      rowIndex: 0,\r\n      rowType: null,\r\n      count: null,\r\n      price: null,\r\n      message: null,\r\n    };\r\n\r\n    defaultRow.message = null;\r\n    switch (type) {\r\n      case EmploymentRelationType.MonthlySalary:\r\n        defaultRow.rowType = CalculationRowType.MonthlySalary;\r\n        defaultRow.count = 1;\r\n        defaultRow.price = 0;\r\n        defaultRow.unit = null;\r\n        break;\r\n      case EmploymentRelationType.HourlySalary:\r\n        defaultRow.rowType = CalculationRowType.HourlySalary;\r\n        defaultRow.count = 1;\r\n        defaultRow.price = 0;\r\n        defaultRow.unit = CalculationRowUnit.Hours;\r\n        break;\r\n      case EmploymentRelationType.Salary:\r\n        defaultRow.rowType = CalculationRowType.Salary;\r\n        defaultRow.count = 1;\r\n        defaultRow.price = 0;\r\n        defaultRow.unit = null;\r\n        break;\r\n      case EmploymentRelationType.EmployedByStateEmploymentFund:\r\n        defaultRow.rowType = CalculationRowType.HourlySalary;\r\n        defaultRow.count = 1;\r\n        defaultRow.price = 0;\r\n        defaultRow.unit = CalculationRowUnit.Hours;\r\n        break;\r\n      case EmploymentRelationType.PerformingArtist:\r\n        defaultRow.rowType = CalculationRowType.Salary;\r\n        defaultRow.count = 1;\r\n        defaultRow.price = 0;\r\n        defaultRow.unit = null;\r\n        break;\r\n      case EmploymentRelationType.Entrepreneur:\r\n      case EmploymentRelationType.Farmer:\r\n        break;\r\n      case EmploymentRelationType.Compensation:\r\n        defaultRow.rowType = CalculationRowType.Compensation;\r\n        defaultRow.count = 1;\r\n        defaultRow.price = 0;\r\n        defaultRow.unit = null;\r\n        break;\r\n      case EmploymentRelationType.BoardMember:\r\n        defaultRow.rowType = CalculationRowType.Board;\r\n        defaultRow.message = Translations.get(\"SALAXY.ENUM.CalculationRowType.board.label\");\r\n        defaultRow.count = 1;\r\n        defaultRow.price = 0;\r\n        defaultRow.unit = null;\r\n        break;\r\n      case EmploymentRelationType.Athlete:\r\n        defaultRow.rowType = CalculationRowType.Salary;\r\n        defaultRow.message = Translations.get(\"SALAXY.ENUM.EmploymentRelationType.athlete.salaryRowMessage\");\r\n        defaultRow.count = 1;\r\n        defaultRow.price = 0;\r\n        defaultRow.unit = null;\r\n        break;\r\n    }\r\n    if (defaultRow.rowType != null) {\r\n      work.salaryDefaults.push(defaultRow);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the social security pensions model (available options) for the current selections.\r\n   * @param settings Account settings in the session\r\n   * @param type Type of employment relation selected\r\n   * @param socialSecurity Whether the person is in Finnish or foregion social security - or mixed\r\n   * @param pensionCalculation Type of Pension calculation: employee/TyEL or others (YEL, farmer etc.)\r\n   * @param pensionCompany Pension company (if several) that is selected.\r\n   * @param insuranceCompany Insurance company (if several) that is selected.\r\n   * @param socSecExceptions The selected social security exceptions (not subject to)\r\n   */\r\n  public static getSocialSecurityModel(\r\n    settings: AccountSettingsInSession,\r\n    type: EmploymentRelationType,\r\n    socialSecurity: \"default\" | \"foreign\" | \"mixed\",\r\n    pensionCalculation: PensionCalculation,\r\n    pensionCompany: PensionCompany,\r\n    insuranceCompany: InsuranceCompany,\r\n    socSecExceptions: InternationalSocialSecurityException[],\r\n    ): EmploymentSocialSecurityModel | undefined {\r\n    const insuranceContractNumbers = this.getValidContractNumbers(insuranceCompany, settings.insuranceContracts ?? [])\r\n      .map((num) => ({ value: num, text: num }));\r\n    let pensionCompanies: InputEnumOption[] = this.getValidCompanies(settings.pensionContracts ?? []).map((company) => {\r\n      const label = EnumerationsLogic.getEnumLabel(\"PensionCompany\", company);\r\n      const descr = EnumerationsLogic.getEnumDescr(\"PensionCompany\", company);\r\n      return { value: company, text: label, title: descr && descr !== company ? descr : undefined };\r\n    });\r\n\r\n    // filter in/out keva companies\r\n    pensionCompanies = pensionCalculation == PensionCalculation.PublicSector ? pensionCompanies.filter(x => x.value.startsWith(\"keva\")) : pensionCompanies.filter(x => !x.value.startsWith(\"keva\"));\r\n\r\n    const pensionContractNumbers: InputEnumOption[] = this.getValidContractNumbers(pensionCompany, settings.pensionContracts ?? [])\r\n      .map((num) => ({ value: num, text: num }));\r\n    const insuranceCompanies: InputEnumOption[] = this.getValidCompanies(settings.insuranceContracts ?? []).map((company) => {\r\n      const label = EnumerationsLogic.getEnumLabel(\"InsuranceCompany\", company);\r\n      const descr = EnumerationsLogic.getEnumDescr(\"InsuranceCompany\", company);\r\n      return { value: company, text: label, title: descr && descr !== company ? descr : undefined };\r\n    });\r\n\r\n    // TODO: Why are these based on getValidContracts() and not getValidCompanies()? We can perhaps get rid of separate showPensionCompanySelection etc.\r\n    const showSocialSecurity = (type != EmploymentRelationType.ForeignWorker || socialSecurity != \"foreign\");\r\n    const pensionCalculationOptions = (showSocialSecurity && socSecExceptions.indexOf(InternationalSocialSecurityException.NotSubjectToEarningsRelatedPensionInsurance) < 0)\r\n      ? EmploymentLogic.getPensionCalculationOptions(type, settings.pensionContracts ?? []) : null;\r\n    const showPension = (pensionCalculationOptions && ( pensionCalculation == PensionCalculation.Employee || pensionCalculation == PensionCalculation.PublicSector)) ?? false;\r\n    const showPensionCompanySelection = showPension && this.getValidContracts(settings.pensionContracts ?? []).length > 1;\r\n    const showInsurance = showSocialSecurity && socSecExceptions.indexOf(InternationalSocialSecurityException.NotSubjectToAccidentAndOccupationalDiseaseInsurance) < 0;\r\n    const showInsuranceCompanySelection = showInsurance && this.getValidContracts(settings.insuranceContracts ?? []).length > 1;\r\n\r\n    const insertNotSelected = (options: InputEnumOption[]): InputEnumOption[] => {\r\n      return [{ value: \"\" as any, text: Translations.get(\"SALAXY.UI_Terms.notChosen\"), title: undefined }, ...options];\r\n    };\r\n\r\n    return {\r\n      pensionCalculationOptions,\r\n      showPension,\r\n      pensionCompanies: insertNotSelected(pensionCompanies),\r\n      pensionContractNumbers: (showPension && pensionContractNumbers.length > 1) ? insertNotSelected(pensionContractNumbers) : null,\r\n      showPensionCompanySelection,\r\n      showInsurance,\r\n      insuranceCompanies: insertNotSelected(insuranceCompanies),\r\n      insuranceContractNumbers: (showInsurance && insuranceContractNumbers.length > 1) ? insertNotSelected(insuranceContractNumbers) : null,\r\n      showInsuranceCompanySelection,\r\n      isInternational: type == EmploymentRelationType.ForeignWorker || type == EmploymentRelationType.WorkingAbroad,\r\n      showSocialSecurity,\r\n      employmentRegCodes: insertNotSelected(this.getEmploymentRegCodeOptions(pensionCompany)),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Gets the companies that are valid for today (insurance or pension companies).\r\n   * @param contracts Collection of contracts\r\n   * @returns Those companies (id's) that have contracts that are valid today.\r\n   */\r\n  public static getValidCompanies(contracts: (PensionContract | InsuranceContract)[]): string[] {\r\n    const validContracts = this.getValidContracts(contracts);\r\n    const companies: string[] = [];\r\n    validContracts.forEach((x) => {\r\n      if (x.company && companies.indexOf(x.company) === -1) {\r\n        companies.push(x.company);\r\n      }\r\n    });\r\n    return companies;\r\n  }\r\n\r\n  /**\r\n   * Gets the contract numbers (for a sepcific insurance company) that are valid for today.\r\n   * @param company Insurance company for which the numers are fetched.\r\n   * @param contracts Collection of contracts\r\n   * @returns Those contract numbers that are valid for today (for the given company).\r\n   */\r\n  public static getValidContractNumbers(company: string, contracts: (PensionContract | InsuranceContract)[]): string[] {\r\n    if (!company) {\r\n      return [];\r\n    }\r\n    return this.getValidContracts(contracts)\r\n      .filter((x) => x.company == company)\r\n      .map((x) => x.contractNumber)\r\n      .filter((x): x is string => x != null);\r\n  }\r\n\r\n  /**\r\n   * Gets the contracts that are valid for today.\r\n   * @param contracts Collection of contracts\r\n   * @returns Those contracts that are valid for today.\r\n   */\r\n  public static getValidContracts(contracts: (PensionContract | InsuranceContract)[]): (PensionContract | InsuranceContract)[] {\r\n    const forDate = Dates.getToday();\r\n    // check dates\r\n    const validContracts = (contracts ?? []).filter((x) =>\r\n      (!x.startDate || Dates.isSameOrBefore(x.startDate, forDate)) &&\r\n      (!x.endDate || Dates.isSameOrAfter(x.endDate, forDate))\r\n    );\r\n    return validContracts;\r\n  }\r\n\r\n  /**\r\n   * Gets a contact of specific type.\r\n   * @param model Employment relation to get the contact from.\r\n   * @param type Type of contact to get. Use null to fetch any contact type (creates Default if requested).\r\n   * @param createIfNotExists If true creates the contact of given type if one does not exist.\r\n   * @returns Contact of given type or undefined if one is not found AND createIfNotExists is false.\r\n   */\r\n  public static getContact(model: Employment, type: ContactType | null, createIfNotExists = true): ContactAdvanced | undefined {\r\n    if (!model) {\r\n      return undefined;\r\n    }\r\n    if (!model.contacts) {\r\n      model.contacts = [];\r\n    }\r\n    let result = model.contacts.find(x => !type || x.type == type);\r\n    if (!result && createIfNotExists) {\r\n      type = type || ContactType.Default;\r\n      result = {\r\n        type,\r\n        country: type == ContactType.Default ? Country.Fi : null,\r\n      };\r\n      model.contacts.push(result);\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Populates given user with test data.\r\n   * Sets values only if the firstName and lastName have been given.\r\n   * @param employment - Employment relation to populate with test data.\r\n   * @param useRealPersonaIdRange - If true, uses the real personal id range instead of artificial ID range (\"keinohetu\": last 3 numbers start with 9).\r\n   */\r\n  public static populateWithTestData(employment: Employment, useRealPersonaIdRange = false): void {\r\n    if (!employment?.identity?.firstName || !employment.identity.lastName) {\r\n      return;\r\n    }\r\n    const contact = this.getContact(employment, ContactType.Default, true) ?? {};\r\n    contact.email = this.cleanupEmailPart(employment.identity.firstName) + \".\" + this.cleanupEmailPart(employment.identity.lastName) + \"@palkkaus.fi\";\r\n    contact.telephone = \"040 \" + (1000000 + Math.round((Math.random() * 8999999))).toString();\r\n    // hetu\r\n    const birthYear = (new Date().getFullYear()) - (20 + Math.round(Math.random() * 40));\r\n    const birthDate = new Date(new Date(birthYear, 0, 1).getTime() + Math.round(Math.random() * (new Date(birthYear + 1, 11, 31).getTime() - new Date(birthYear, 0, 1).getTime())));\r\n    const separator = birthYear >= 2000 ? \"A\" : \"-\";\r\n    const personNumber = useRealPersonaIdRange ? Math.round(Math.random() * 899) : (900 + Math.round(Math.random() * 99));\r\n    const checksumLetters = \"0123456789ABCDEFHJKLMNPRSTUVWXY\";\r\n    const sDate = Dates.format(birthDate, \"DDMMYY\");\r\n    const idChecksum = checksumLetters[parseInt(sDate + personNumber.toString(), 10) % 31];\r\n    employment.identity.personalId = sDate + separator + personNumber.toString() + idChecksum;\r\n    employment.info ??= {};\r\n    employment.info.ibanNumber = Iban.getDummyIban();\r\n    if (!useRealPersonaIdRange) {\r\n      contact.city = \"PALKKALA\";\r\n      contact.postalCode = \"01337\";\r\n      contact.street = \"Ansionkatu 1\";\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns true if the personal ID is other identifier than Finnish Personal Identification Number (keinohetu).\r\n   * @param ssn Personal ID to check.\r\n   */\r\n  public static isPersonalIdOther(ssn: string): boolean {\r\n    /** 8th character is 9, this will change in 2024 */\r\n    const regex = /^.{7}[9]/;\r\n    return regex.test((ssn || \"\").trim());\r\n  }\r\n\r\n  /**\r\n   * Returns valid employment reg codes for the selected pensions company.\r\n   * @param pensionCompany - Keva pension company.\r\n   * @returns Options for the employment reg codes.\r\n   */\r\n  public static getEmploymentRegCodeOptions(pensionCompany: PensionCompany): Array<InputEnumOption> {\r\n    return kevaEmploymentRegCodes.filter((x) => x.pensionCompany === pensionCompany).map((regCode) =>\r\n     ({ value: regCode.code, text: Translations.getLanguage() === Language.Sv ? regCode.labelSv : regCode.labelFi }));\r\n  }\r\n\r\n  private static cleanupEmailPart(name: string): string {\r\n    if (!name) {\r\n      return name;\r\n    }\r\n    // to lower case\r\n    name = name.toLowerCase();\r\n    // remove accents\r\n    name = name.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\r\n    // leave only letters\r\n    name = name.replace(/[^a-z]+/g, \"\");\r\n    return name;\r\n  }\r\n\r\n}","import { Translations } from \"./Translations\";\r\nimport {\r\n  AbsenceCauseCode,\r\n  AbsencePeriod,\r\n  AnnualLeavePayment,\r\n  AnnualLeavePaymentKind,\r\n  Avatar,\r\n  HolidayCode,\r\n  HolidaySpecification,\r\n  HolidayYear,\r\n  LegalEntityType,\r\n  HolidayPayCalculation,\r\n} from \"../model\";\r\nimport { Arrays, Dates } from \"../util\";\r\n\r\n/** Logic for Holiday years and other holiday functionality. */\r\nexport class HolidaysLogic {\r\n\r\n  /**\r\n   * Gets the multiplier that is used in Average Daily Salary calculation (keskipäiväpalkka).\r\n   * @param holidays Number of holidays for the year.\r\n   */\r\n  public static getDailySalaryMultiplier(holidays: number): number {\r\n    const multipliers = [0, 0, 1.8, 2.7, 3.6, 4.5, 5.4, 6.3, 7.2, 8.1, 9.0, 9.9, 10.8, 11.8, 12.7, 13.6, 14.5, 15.5, 16.4, 17.4, 18.3, 19.3, 20.3, 21.3, 22.2, 23.2, 24.1, 25.0, 25.9, 26.9, 27.8];\r\n    if (holidays > 30) {\r\n      return multipliers[30] + (holidays - 30) * 0.9;\r\n    }\r\n    return multipliers[holidays];\r\n  }\r\n\r\n  /**\r\n   * Gets a new blank holiday year.\r\n   * @param year Holiday accrual year (e.g. 2019) or 0 for current year and -1 for previous year (from -10 to 10).\r\n   * Current year is always from 1.4. until 31.3. e.g. year 2019 is 1.4.2019 until 31.3.2020.\r\n   * The main part of the holidays from holiday accrual year 2019 are kept on summer 2020.\r\n   */\r\n  public static getBlank(year = 0): HolidayYear {\r\n    if (year < 11) {\r\n      const currentYear = Dates.getMonth(Dates.getToday())! < 4 ? (Dates.getYear(\"today\")! - 1) : Dates.getYear(\"today\")!;\r\n      year = currentYear + year;\r\n    }\r\n    const result: HolidayYear = {\r\n      year,\r\n      workerId: null,\r\n      employmentId: \"\",\r\n      period: {\r\n        start: `${year}-04-01`,\r\n        end: `${year + 1}-03-31`,\r\n        daysCount: 0,\r\n      },\r\n      accrual: {\r\n        months: [],\r\n      },\r\n      leaves: {\r\n        paid: [],\r\n        planned: [],\r\n      },\r\n      spec: {\r\n        code: HolidayCode.Undefined,\r\n      },\r\n    };\r\n    result.period!.daysCount = Dates.getDuration(result.period!.start!, result.period!.end!).asDays();\r\n    return result;\r\n  }\r\n\r\n  /** Gets the salary payable type or default type if both are possible. */\r\n  public static getSalaryPayableType(absenseCauseCode: AbsenceCauseCode | null | undefined): \"defaultPaid\" | \"defaultUnpaid\" | \"paid\" | \"unpaid\" | undefined {\r\n    const defaults = {\r\n      unpaidLeave: \"unpaid\",\r\n      personalReason: \"defaultUnpaid\",\r\n      illness: \"defaultPaid\",\r\n      partTimeSickLeave: \"defaultUnpaid\",\r\n      parentalLeave: \"defaultUnpaid\",\r\n      specialMaternityLeave: \"defaultUnpaid\",\r\n      rehabilitation: \"defaultUnpaid\",\r\n      childIllness: \"defaultPaid\",\r\n      partTimeChildCareLeave: \"defaultUnpaid\",\r\n      training: \"defaultPaid\",\r\n      jobAlternationLeave: \"unpaid\",\r\n      studyLeave: \"unpaid\",\r\n      industrialAction: \"unpaid\",\r\n      interruptionInWorkProvision: \"unpaid\",\r\n      leaveOfAbsence: \"defaultUnpaid\",\r\n      militaryRefresherTraining: \"defaultUnpaid\",\r\n      militaryService: \"unpaid\",\r\n      layOff: \"unpaid\",\r\n      childCareLeave: \"unpaid\",\r\n      midWeekHoliday: \"paid\",\r\n      accruedHoliday: \"paid\",\r\n      occupationalAccident: \"paid\",\r\n      annualLeave: \"paid\",\r\n      partTimeAbsenceDueToRehabilitation: \"paid\",\r\n      other: \"defaultUnpaid\",\r\n    };\r\n    return defaults[absenseCauseCode as string];\r\n  }\r\n\r\n  /** Gets the needed logic for Absences Period Edit dialog */\r\n  public static getAbsencesEditDialogLogic(): {\r\n    /**\r\n     * Returns true if the select component should be shown for absence isPaid.\r\n     */\r\n    canSelectIsPaid: (current: AbsencePeriod) => boolean;\r\n    /** Updates the IsPaid according to absence type. */\r\n    updateIsPaid: (current: AbsencePeriod) => void;\r\n    /** Updates the IsHolidayAccrual */\r\n    updateIsHolidayAccrual: (current: AbsencePeriod) => void;\r\n    /** Updates the workdays count */\r\n    updatePeriodDays: (current: AbsencePeriod) => void;\r\n    /** Sets the days array in period to enable days selection UI. */\r\n    setDaysSelection: (period: AbsencePeriod) => void;\r\n  } {\r\n    const updateIsHolidayAccrual = (current: AbsencePeriod): void => {\r\n      current.isHolidayAccrual = current.isPaid;\r\n    };\r\n\r\n    return {\r\n      canSelectIsPaid: (current: AbsencePeriod): boolean => {\r\n        if (!current.causeCode) {\r\n          return false;\r\n        }\r\n        const type = HolidaysLogic.getSalaryPayableType(current.causeCode);\r\n        return type === \"defaultPaid\" || type === \"defaultUnpaid\";\r\n      },\r\n      updateIsPaid: (current: AbsencePeriod): void => {\r\n        const type = HolidaysLogic.getSalaryPayableType(current.causeCode);\r\n        switch (type) {\r\n          case \"defaultPaid\":\r\n          case \"paid\":\r\n            current.isPaid = true;\r\n            updateIsHolidayAccrual(current);\r\n            break;\r\n          case \"defaultUnpaid\":\r\n          case \"unpaid\":\r\n            current.isPaid = false;\r\n            updateIsHolidayAccrual(current);\r\n            break;\r\n          default:\r\n            // Keep existing\r\n            break;\r\n        }\r\n      },\r\n      updateIsHolidayAccrual,\r\n      updatePeriodDays: (current: AbsencePeriod) => {\r\n        const period = current?.period;\r\n        if (period?.start && period?.end && period.start > period.end) {\r\n          period.end = period.start;\r\n        }\r\n        if (period?.start && period?.end) {\r\n          if (period.days) {\r\n            period.days = Dates.getWorkdays(period.start, period.end);\r\n            period.daysCount = period.days.length;\r\n          } else {\r\n            period.daysCount = Dates.getWorkdays(period.start, period.end).length;\r\n          }\r\n        }\r\n      },\r\n      setDaysSelection: (current: AbsencePeriod) => {\r\n        const period = current?.period ?? {};\r\n        period.days = Dates.getWorkdays(period.start ?? \"\", period.end ?? \"\");\r\n        period.daysCount = period.days.length;\r\n      },\r\n    };\r\n  }\r\n\r\n  /** Gets different total days calculation of planned leaves. */\r\n  public static getPlannedLeavesCount(holidayYear: HolidayYear, type: \"all\" | \"summer\" | \"winter\" | \"holidaysSaldoEnd\" | \"holidaysSaldoStart\" = \"all\"): number {\r\n    // TODO: Split period if it starts summer and ands winter.\r\n    const year = holidayYear.year;\r\n    const list = holidayYear.leaves?.planned ?? [];\r\n    switch (type) {\r\n      case \"all\":\r\n        return Arrays.sum(list, (x) => x.period?.daysCount ?? 0);\r\n      case \"summer\":\r\n        return Arrays.sum(list.filter((x) => x.period?.start && (x.period.start < `${year}-10-1`)), (x) => x.period?.daysCount ?? 0);\r\n      case \"winter\":\r\n        return Arrays.sum(list.filter((x) => x.period?.start && (x.period.start >= `${year}-10-1`)), (x) => x.period?.daysCount ?? 0);\r\n      case \"holidaysSaldoStart\":\r\n        return Arrays.sum(holidayYear.accrual?.months ?? [], (x) => x.daysAccrued ?? 0) + (holidayYear.accrual?.startSaldo ?? 0);\r\n      case \"holidaysSaldoEnd\":\r\n        return (HolidaysLogic.getPlannedLeavesCount(holidayYear, \"holidaysSaldoStart\") ?? 0) - (HolidaysLogic.getPlannedLeavesCount(holidayYear!, \"all\") ?? 0);\r\n    }\r\n  }\r\n\r\n  /** Gets a calculated total or saldo row for paid holiday pays */\r\n  public static getPaidHolidaysCalculation(\r\n    holidayYear: HolidayYear,\r\n    type: \"startSaldo\" | \"total\" | \"endSaldo\" = \"total\"\r\n  ): AnnualLeavePayment | undefined {\r\n    switch (type) {\r\n      case \"total\":\r\n        return {\r\n          avatar: HolidaysLogic.getPaidCalculationAvatar(\"total\", undefined),\r\n          holidayBonus: null,\r\n          holidayCompensation: Arrays.sum(holidayYear.leaves?.paid?.filter(x => !x.isDisabled && ( x.kind == AnnualLeavePaymentKind.PaidCalc || x.kind == AnnualLeavePaymentKind.ManualCompensation )) ?? [], (x) => x.holidayCompensation ?? 0),\r\n          holidayDays: Arrays.sum(holidayYear.leaves?.paid?.filter(x =>\r\n            (\r\n              (x.kind == AnnualLeavePaymentKind.PaidCalc && ((x.holidayCompensation ?? 0) > 0 || (x.holidaySalary ?? 0) > 0) && !x.isDisabled) ||\r\n              ((x.kind == AnnualLeavePaymentKind.ManualSalary || x.kind == AnnualLeavePaymentKind.ManualCompensation)  && !x.isDisabled)\r\n            )\r\n          ) ?? [], (x) => x.holidayDays ?? 0),\r\n          holidaySalary: Arrays.sum(holidayYear.leaves?.paid?.filter(x => !x.isDisabled && ( x.kind == AnnualLeavePaymentKind.PaidCalc || x.kind == AnnualLeavePaymentKind.ManualSalary )) ?? [], (x) => x.holidaySalary ?? 0),\r\n        } as any;\r\n      case \"startSaldo\": {\r\n        return {\r\n          avatar: HolidaysLogic.getPaidCalculationAvatar(\"startSaldo\", undefined),\r\n          holidayBonus: null,\r\n          holidayDays: holidayYear.accrual?.endSaldo ?? 0,\r\n          holidayCompensation: null,\r\n          holidaySalary: null,\r\n        } as any;\r\n      }\r\n      case \"endSaldo\": {\r\n        const total = HolidaysLogic.getPaidHolidaysCalculation(holidayYear, \"total\");\r\n        const startSaldo = HolidaysLogic.getPaidHolidaysCalculation(holidayYear, \"startSaldo\");\r\n        return {\r\n          avatar: HolidaysLogic.getPaidCalculationAvatar(\"endSaldo\", undefined),\r\n          holidayBonus: null,\r\n          holidayCompensation:  null,\r\n          holidayDays: (startSaldo?.holidayDays ?? 0) - (total?.holidayDays ?? 0),\r\n          holidaySalary: null,\r\n        } as any;\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Gets a calculated total or saldo row for paid bonus */\r\n  public static getPaidBonusCalculation(\r\n    holidayYear: HolidayYear,\r\n    type: \"startSaldo\" | \"total\" | \"endSaldo\" = \"total\"\r\n  ): AnnualLeavePayment {\r\n    switch (type) {\r\n      case \"total\":\r\n        return {\r\n          avatar: HolidaysLogic.getPaidBonusAvatar(\"total\", undefined),\r\n          holidayBonus: Arrays.sum(holidayYear.leaves?.paid?.filter(x => !x.isDisabled && ( x.kind == AnnualLeavePaymentKind.PaidCalc || x.kind == AnnualLeavePaymentKind.ManualBonus )) ?? [], (x) => x.holidayBonus ?? 0),\r\n          holidayCompensation: null,\r\n          holidayDays: Arrays.sum(holidayYear.leaves?.paid?.filter(x =>\r\n            (\r\n              (x.kind == AnnualLeavePaymentKind.PaidCalc && (x.holidayBonus ?? 0) > 0  && !x.isDisabled) ||\r\n              (x.kind == AnnualLeavePaymentKind.ManualBonus  && !x.isDisabled)\r\n            )\r\n          ) ?? [], (x) => x.holidayDays ?? 0),\r\n          holidaySalary: null,\r\n\r\n        } as any;\r\n      case \"startSaldo\": {\r\n        return {\r\n          avatar: HolidaysLogic.getPaidBonusAvatar(\"startSaldo\", undefined),\r\n          holidayBonus: null,\r\n          holidayDays: holidayYear.accrual?.endSaldo ?? 0,\r\n          holidayCompensation: null,\r\n          holidaySalary: null,\r\n        } as any;\r\n      }\r\n      case \"endSaldo\": {\r\n        const total = HolidaysLogic.getPaidBonusCalculation(holidayYear, \"total\");\r\n        const startSaldo = HolidaysLogic.getPaidBonusCalculation(holidayYear, \"startSaldo\");\r\n        return {\r\n          avatar: HolidaysLogic.getPaidBonusAvatar(\"endSaldo\", undefined),\r\n          holidayBonus: null,\r\n          holidayCompensation:  null,\r\n          holidayDays: (startSaldo?.holidayDays ?? 0) - (total?.holidayDays ?? 0),\r\n          holidaySalary: null,\r\n        } as any;\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Gets a display avatar for a paid calculation */\r\n  public static getPaidCalculationAvatar(\r\n    type: \"row\" | \"startSaldo\" | \"total\" | \"endSaldo\" = \"row\",\r\n    row: AnnualLeavePayment | undefined,\r\n  ): Avatar {\r\n    switch (type) {\r\n      case \"row\":\r\n        return {\r\n          displayName: `${Translations.get(\"SALAXY.CORE.HolidaysLogic.paid\")} ${Dates.getFormattedDate(row?.date)}`,\r\n          description: `${Translations.get(\"SALAXY.CORE.HolidaysLogic.salaryPeriod\")} ${Dates.getFormattedRange(row?.period?.start ?? \"\", row?.period?.end ?? \"\")}`,\r\n          color: \"#ffe66d\",\r\n          initials:  Translations.getWithDefault(\"SALAXY.ENUM.CalculationRowType.holidaySalary.iconText\", undefined),\r\n          entityType: LegalEntityType.Company,\r\n        };\r\n      case \"startSaldo\":\r\n        return {\r\n          displayName: Translations.get(\"SALAXY.CORE.HolidaysLogic.startSaldo.displayName\"),\r\n          description: Translations.get(\"SALAXY.CORE.HolidaysLogic.startSaldo.description\"),\r\n          color: \"gray\",\r\n          initials: \"saldo\",\r\n          entityType: LegalEntityType.Company,\r\n        };\r\n      case \"total\":\r\n        return {\r\n          displayName: Translations.get(\"SALAXY.CORE.HolidaysLogic.total.displayName\"),\r\n          description: Translations.get(\"SALAXY.CORE.HolidaysLogic.total.description\"),\r\n          color: \"#ffe66d\",\r\n          initials: \"=\",\r\n          entityType: LegalEntityType.Company,\r\n        };\r\n      case \"endSaldo\":\r\n        return {\r\n          displayName: Translations.get(\"SALAXY.CORE.HolidaysLogic.endSaldo.displayName\"),\r\n          description: Translations.get(\"SALAXY.CORE.HolidaysLogic.endSaldo.description\"),\r\n          color: \"gray\",\r\n          initials: \"saldo\",\r\n          entityType: LegalEntityType.Company,\r\n        };\r\n    }\r\n  }\r\n\r\n  /** Gets a display avatar for a paid calculation */\r\n  public static getPaidBonusAvatar(\r\n    type: \"row\" | \"startSaldo\" | \"total\" | \"endSaldo\" = \"row\",\r\n    row: AnnualLeavePayment | undefined,\r\n  ): Avatar {\r\n    switch (type) {\r\n      case \"row\":\r\n        return {\r\n          displayName: `${Translations.get(\"SALAXY.CORE.HolidaysLogic.paid\")} ${Dates.getFormattedDate(row?.date)}`,\r\n          description: `${Translations.get(\"SALAXY.CORE.HolidaysLogic.salaryPeriod\")} ${Dates.getFormattedRange(row?.period?.start ?? \"\", row?.period?.end ?? \"\")}`,\r\n          color: \"#ffe66d\",\r\n          initials: Translations.getWithDefault(\"SALAXY.ENUM.CalculationRowType.holidayBonus.iconText\", undefined),\r\n          entityType: LegalEntityType.Company,\r\n        };\r\n      case \"startSaldo\":\r\n        return {\r\n          displayName: Translations.get(\"SALAXY.CORE.HolidaysLogic.bonusStartSaldo.displayName\"),\r\n          description: Translations.get(\"SALAXY.CORE.HolidaysLogic.bonusStartSaldo.description\"),\r\n          color: \"gray\",\r\n          initials: \"saldo\",\r\n          entityType: LegalEntityType.Company,\r\n        };\r\n      case \"total\":\r\n        return {\r\n          displayName: Translations.get(\"SALAXY.CORE.HolidaysLogic.bonusTotal.displayName\"),\r\n          description: Translations.get(\"SALAXY.CORE.HolidaysLogic.bonusTotal.description\"),\r\n          color: \"#ffe66d\",\r\n          initials: \"=\",\r\n          entityType: LegalEntityType.Company,\r\n        };\r\n      case \"endSaldo\":\r\n        return {\r\n          displayName: Translations.get(\"SALAXY.CORE.HolidaysLogic.bonusEndSaldo.displayName\"),\r\n          description: Translations.get(\"SALAXY.CORE.HolidaysLogic.bonusEndSaldo.description\"),\r\n          color: \"gray\",\r\n          initials: \"saldo\",\r\n          entityType: LegalEntityType.Company,\r\n        };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the visualisation data for the a holiday year.\r\n   * @param holidayYear The holiday year to visualize\r\n   */\r\n  public static getYearVisualisation(holidayYear: HolidayYear): any {\r\n    // TODO: Add typing for the visualization\r\n    const year = holidayYear.year;\r\n    const todayYear = Dates.getYear(\"today\")!;\r\n    const todayMonthIndex = Dates.getMonth(\"today\")! - 4;\r\n    const currentMonthIx = todayYear < year ? todayMonthIndex : (todayYear > year ? todayMonthIndex + 24 : todayMonthIndex + 12);\r\n    return {\r\n      year,\r\n      employmentId: holidayYear.employmentId,\r\n      currentMonthIx,\r\n      years: [\r\n        { text: year - 1, months: 9, style: \"default\" },\r\n        { text: year, months: 12, style: \"primary\" },\r\n        { text: year + 1, months: 4, style: \"default\" },\r\n      ],\r\n      months: [4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4],\r\n      items: [\r\n        { text: `${Translations.get(\"SALAXY.CORE.HolidaysLogic.holidayYear.accrualEndSaldo\")}: ${holidayYear.accrual?.endSaldo ?? 0} ${Translations.get(\"SALAXY.CORE.HolidaysLogic.holidayYear.day\")}`, months: 12, start: 0, style: \"default\", view: \"accrual\" },\r\n        { text: `${Translations.get(\"SALAXY.CORE.HolidaysLogic.holidayYear.plannedSummerLeaves\")}: ${HolidaysLogic.getPlannedLeavesCount(holidayYear, \"summer\")} ${Translations.get(\"SALAXY.CORE.HolidaysLogic.holidayYear.day\")}`, months: 5, start: 13, style: \"default\", view: \"holidays-summer\" },\r\n        { text: `${Translations.get(\"SALAXY.CORE.HolidaysLogic.holidayYear.plannedWinterLeaves\")}: ${HolidaysLogic.getPlannedLeavesCount(holidayYear, \"winter\")} ${Translations.get(\"SALAXY.CORE.HolidaysLogic.holidayYear.day\")}`, months: 7, start: 18, style: \"default\", view: \"holidays-winter\" },\r\n        { text: Translations.get(\"SALAXY.CORE.HolidaysLogic.holidayYear.paidHolidays\"), months: 12, start: 13, style: \"default\", view: \"paidHolidays\" },\r\n      ],\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Method for checking if holidays are active\r\n   */\r\n  public static isWorkerHolidaysActive(holidays: HolidaySpecification): boolean {\r\n    return holidays && holidays.code !== HolidayCode.Undefined;\r\n  }\r\n\r\n  /** Returns holiday pay daily salary */\r\n  public static getHolidayPayDailySalary(holidayYear: HolidayYear): number {\r\n    if (holidayYear?.spec == null || holidayYear?.holidayPay == null) {\r\n      return 0;\r\n    }\r\n\r\n    switch (holidayYear.spec.holidayPayCalculation)\r\n    {\r\n        case HolidayPayCalculation.NormalMonthlyPay:\r\n          return holidayYear.holidayPay?.normalMonthlyPayDailySalary ?? 0;\r\n        case HolidayPayCalculation.AverageDailyPay:\r\n            return holidayYear.holidayPay?.averageDailyPayDailySalary ?? 0;\r\n        case HolidayPayCalculation.AverageHourlyPay:\r\n            return holidayYear.holidayPay?.averageHourlyPayDailySalary ?? 0;\r\n        case HolidayPayCalculation.PercentageBasedPay:\r\n            return holidayYear.holidayPay?.percentageBasedPayDailySalary ?? 0;\r\n        case HolidayPayCalculation.OtherPay:\r\n            return holidayYear.holidayPay?.otherPay ?? 0;\r\n        case HolidayPayCalculation.HolidayCompensation:\r\n            return holidayYear.holidayPay?.compensationPayDailySalary ?? 0;\r\n        case HolidayPayCalculation.ScriptPay:\r\n            return holidayYear.holidayPay?.scriptPay ?? 0;\r\n        default:\r\n            return 0;\r\n    }\r\n  }\r\n}","import { EnumerationsLogic } from \"./EnumerationsLogic\";\r\nimport { Avatar, AvatarPictureType, Calculation, LegalEntityType, PaymentChannel, PayrollDetails } from \"../model\";\r\n\r\n/** Common logic for invoices */\r\nexport class InvoicesLogic {\r\n  /**\r\n   * Custom type guard that determines whether the payment object is a payroll (based on whether it calcs collection).\r\n   * @param paymentObject Payment object that is either PayrollDetails or Calculation OR does not have calcs / employer properites that is used to determine the type.\r\n   */\r\n  public static isPayroll(paymentObject: Calculation | PayrollDetails | any): paymentObject is PayrollDetails {\r\n    return paymentObject && (paymentObject as PayrollDetails).calcs !== undefined;\r\n  }\r\n\r\n  /**\r\n   * Custom type guard that determines whether the payment object is a calculation (based on whether it employer property).\r\n   * @param paymentObject Payment object that is either PayrollDetails or Calculation OR does not have calcs / employer properites that is used to determine the type.\r\n   */\r\n  public static isCalculation(paymentObject: Calculation | PayrollDetails | any): paymentObject is Calculation {\r\n    return paymentObject && (paymentObject as Calculation).employer !== undefined;\r\n  }\r\n\r\n  /**\r\n   * Gets and avatar image for a payment channel\r\n   * Enum name is id, label as displayName, descr as description and sort order as 6-char string in sortableName.\r\n   * Picture is either color-initials combination or pic as usual.\r\n   * @param channel The channel to fetch avatar for.\r\n   */\r\n  public static getChannelAvatar(channel: PaymentChannel): Avatar | undefined {\r\n    return this.getAllChannels().find((x) => x.id === channel);\r\n  }\r\n\r\n  /**\r\n   * Gets all the supported payment channels defined in PaymentChannel as avatars.\r\n   * Enum name is id, label as displayName, descr as description and sort order as 6-char string in sortableName.\r\n   * Picture is either color-initials combination or pic as usual.\r\n   */\r\n  public static getAllChannels(): Avatar[] {\r\n    if (!this.avatars) {\r\n      this.avatars = EnumerationsLogic.getEnumMetadata(\"PaymentChannel\")!.values\r\n        .map((e) => {\r\n          const picData = this.avatarPics[e.name] || this.avatarPics[PaymentChannel.Undefined];\r\n          return {\r\n            id: e.name,\r\n            displayName: e.label,\r\n            firstName: e.label,\r\n            sortableName: (\"000000\" + e.order).slice(-6),\r\n            description: e.descr,\r\n            color: picData.color,\r\n            entityType: picData.entityType || LegalEntityType.Company,\r\n            initials: picData.initials,\r\n            pictureType: picData.url === \"default\" ? AvatarPictureType.Uploaded : picData.pictureType,\r\n            url: picData.url === \"default\" ? `https://cdn.salaxy.com/ng1/img/paymentmethod/${e.name}.png` : picData.url,\r\n          };\r\n        });\r\n    }\r\n    return this.avatars;\r\n  }\r\n\r\n  /**\r\n   * Returns true if the channel is for customer funds account (cfa).\r\n   * @param channel Any payment channel.\r\n   * @returns True for customer funds account channels.\r\n   */\r\n  public static isCfa(channel: PaymentChannel | undefined): boolean {\r\n    channel = channel ?? PaymentChannel.Undefined;\r\n    switch(channel)\r\n    {\r\n        case PaymentChannel.Undefined:\r\n        case PaymentChannel.PalkkausCfaFinvoice:\r\n        case PaymentChannel.PalkkausEcfaFinvoice:\r\n        case PaymentChannel.PalkkausCfaPaytrail:\r\n        case PaymentChannel.PalkkausEcfaPaytrail:\r\n        case PaymentChannel.PalkkausCfaReference:\r\n        case PaymentChannel.PalkkausEcfaReference:\r\n        case PaymentChannel.PalkkausCfaTest:\r\n        case PaymentChannel.HolviCfa:\r\n        case PaymentChannel.TalenomCfa:\r\n            return true;\r\n        default:\r\n            return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns true if the channel is for customer funds account (ecfa).\r\n   */\r\n  public static isEcfa(channel: PaymentChannel): boolean {\r\n    channel = channel ?? PaymentChannel.Undefined;\r\n    switch(channel)\r\n    {\r\n        case PaymentChannel.PalkkausEcfaFinvoice:\r\n        case PaymentChannel.PalkkausEcfaPaytrail:\r\n        case PaymentChannel.PalkkausEcfaReference:\r\n            return true;\r\n        default:\r\n            return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns true if the channel is like PalkkausInvoices.\r\n   */\r\n   public static isPalkkausInvoicesLike(channel: PaymentChannel | undefined): boolean {\r\n    if(!channel) {\r\n      return false;\r\n    }\r\n    switch(channel)\r\n    {\r\n        case PaymentChannel.PalkkausInvoices:\r\n        case PaymentChannel.Kitsas:\r\n            return true;\r\n        default:\r\n            return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns true if the channel is like PalkkausInvoices.\r\n   */\r\n    public static isPalkkausManualLike(channel: PaymentChannel | undefined): boolean {\r\n      if(!channel) {\r\n        return false;\r\n      }\r\n      switch(channel)\r\n      {\r\n          case PaymentChannel.PalkkausManual:\r\n          case PaymentChannel.TalenomManual:\r\n              return true;\r\n          default:\r\n              return false;\r\n      }\r\n    }\r\n\r\n  private static avatars: Avatar[];\r\n\r\n  private static avatarPics: { [key: string]: Avatar } = {\r\n\r\n    [PaymentChannel.Undefined]: { color: \"gray\", initials: \"?\" },\r\n    [PaymentChannel.Test]: { url: \"default\" },\r\n    [PaymentChannel.ZeroPayment]: { url: \"default\" },\r\n\r\n    [PaymentChannel.PalkkausManual]: { url: \"default\" },\r\n    [PaymentChannel.PalkkausWS]: { color: \"#005f81\", initials: \"WS\" },\r\n    [PaymentChannel.PalkkausPSD]: { color: \"#005f81\", initials: \"PSD\" },\r\n    [PaymentChannel.PalkkausPersonal]: { url: \"default\",  },\r\n    [PaymentChannel.PalkkausInvoices]: { url: \"default\",  },\r\n\r\n    [PaymentChannel.PalkkausCfaPaytrail]: { url: \"default\" },\r\n    [PaymentChannel.PalkkausCfaReference]: { url: \"default\" },\r\n    [PaymentChannel.PalkkausCfaFinvoice]: { url: \"default\" },\r\n    [PaymentChannel.PalkkausEcfaPaytrail]: { url: \"default\" },\r\n    [PaymentChannel.PalkkausEcfaReference]: { url: \"default\" },\r\n    [PaymentChannel.PalkkausEcfaFinvoice]: { url: \"default\" },\r\n    [PaymentChannel.PalkkausCfaTest]: { url: \"default\" },\r\n\r\n    [PaymentChannel.AccountorGo]: { url: \"default\" },\r\n    [PaymentChannel.TalenomOnline]: { url: \"default\" },\r\n    [PaymentChannel.TalenomCfa]: { url: \"default\" },\r\n    [PaymentChannel.TalenomManual]: { url: \"default\" },\r\n    [PaymentChannel.HolviCfa]: { url: \"default\" },\r\n    [PaymentChannel.FinagoSolo]: { url: \"default\" },\r\n    [PaymentChannel.Procountor]: { url: \"default\" },\r\n    [PaymentChannel.Kevytyrittaja]: { url: \"default\" },\r\n    [PaymentChannel.VismaNetvisor]: { url: \"default\" },\r\n    [PaymentChannel.Askelma]: { url: \"default\" },\r\n    [PaymentChannel.Briox]: { url: \"default\"},\r\n    [PaymentChannel.Lemonaid]: { url: \"default\"},\r\n    [PaymentChannel.Laskupiste]: { url: \"default\"},\r\n    [PaymentChannel.PasseliMerit]: { url: \"default\"},\r\n    [PaymentChannel.Odoo]: { url: \"default\"},\r\n    [PaymentChannel.Ecom]: { url: \"default\"},\r\n    [PaymentChannel.Kitsas]: { url: \"default\"},\r\n    [PaymentChannel.Kompassi]: { url: \"default\"},\r\n    [PaymentChannel.Domus]: { url: \"default\"},\r\n    [PaymentChannel.Holvi]: { url: \"default\" },\r\n    [PaymentChannel.Hausvise]: { url: \"default\"},\r\n  };\r\n}\r\n","import occupationsData from \"../i18n/occupationlist.json\";\r\nimport { Translations } from \"./Translations\";\r\nimport { Occupation } from \"./model\";\r\nimport { Language } from \"../model\";\r\n\r\n/**\r\n * Helper for Statistics Finland Occupation codes and texts related to them.\r\n * Occupation is used for insurance pricing and reporting..\r\n */\r\nexport class Occupations {\r\n\r\n  /** Gets all occupations for all languages. */\r\n  public static getAllForAllLanguages(): Occupation[] {\r\n    if (this.data.length === 0) {\r\n      const occupations: Occupation[] = [];\r\n      // JSON import does not seem to support directly importing an array => Need to put it inside an object.\r\n      occupationsData.list.forEach((x) => {\r\n        occupations.push({\r\n          id: x.id,\r\n          code: x.code,\r\n          label: x.labelFi,\r\n          freeText: x.freeTextFi,\r\n          search: x.searchFi,\r\n          keyword: x.keyword,\r\n          lang: \"fi\",\r\n        });\r\n        occupations.push({\r\n          id: x.id,\r\n          code: x.code,\r\n          label: x.labelSv,\r\n          freeText: x.freeTextSv,\r\n          search: x.searchSv,\r\n          keyword: x.keyword,\r\n          lang: \"sv\",\r\n        });\r\n        occupations.push({\r\n          id: x.id,\r\n          code: x.code,\r\n          label: x.labelEn,\r\n          freeText: x.freeTextEn,\r\n          search: x.searchEn,\r\n          keyword: x.keyword,\r\n          lang: \"en\",\r\n        });\r\n      });\r\n      this.data = occupations;\r\n    }\r\n    return this.data;\r\n  }\r\n\r\n  /**\r\n   * Gets all the items of a given type.\r\n   * @returns All occupation entries\r\n   */\r\n  public static getAll(language?: Language.Fi | Language.En | Language.Sv | null): Occupation[] {\r\n    language = language || Translations.getLanguage() as any || Language.Fi;\r\n    return this.getAllForAllLanguages().filter((x) => x.lang === language);\r\n  }\r\n\r\n  /**\r\n   * Searches the occupations.\r\n   * @param searchString String to search for. Typically user input.\r\n   * @param language Language to search for.\r\n   */\r\n  public static search(searchString: string, language?: Language.Fi | Language.En | Language.Sv | null): Occupation[] {\r\n    searchString = (searchString || \"\").toLowerCase();\r\n    if (searchString === \"\" || null) {\r\n      this.getAll();\r\n    }\r\n    return this.getAll(language).filter((x) => (x.search || \"\").indexOf(searchString) >= 0);\r\n  }\r\n  /**\r\n   * Gets a single occupation based on the original Statistics Finland code.\r\n   * @param code - Statistics finland 5-number code.\r\n   * Note that this is different than the Salaxy ID stored in Calculation.\r\n   * Salaxy ID may specify additional suffix separated by dash. For Salaxy ID, use getById() instead.\r\n   * @returns Occupation metadata or null if not found.\r\n   */\r\n  public static getByCode(code: string): Occupation | undefined {\r\n    return this.getAll().find((x) => x.code === code);\r\n  }\r\n\r\n\r\n  /**\r\n   * Gets a single occupation based on the its Salaxy ID, which is derived from the original  Statistics Finland code.\r\n   * @param id - Salaxy ID for the occupation.\r\n   * This is the id stored in the calculation, but not the one that is reported to Incomes Register.\r\n   * @returns Occupation metadata or null if not found.\r\n   */\r\n  public static getById(id: string): Occupation | undefined {\r\n    if (!id) {\r\n      return undefined;\r\n    }\r\n    return this.getAll().find((x) => x.id === id);\r\n  }\r\n\r\n\r\n  /**\r\n   * Fetches a list of occupations either based on list of IDs or a known keyword.\r\n   * @param idListOrKeyword Either a comma separated list of ID's\r\n   * or a known keyword: \"household\" and \"company\" currently supported.\r\n   */\r\n  public static getByIds(idListOrKeyword: string): Occupation[] {\r\n    if (!idListOrKeyword) {\r\n      return [];\r\n    }\r\n    const splittedIdList = idListOrKeyword.split(\",\").map((x) => x.trim());\r\n    const hasNumber = /^\\d{5}/;\r\n    if (idListOrKeyword.search(hasNumber) > -1) {\r\n      return this.getAll().filter((x) => x.id && splittedIdList.indexOf(x.id) > -1) ?? [];\r\n    } else {\r\n      return this.getAll().filter((x) => x.keyword && splittedIdList.some((k) => (x.keyword?.indexOf(k.trim()) ?? -1) > -1)) ?? [];\r\n    }\r\n\r\n  }\r\n\r\n  private static data: Occupation[] = [];\r\n\r\n}\r\n","import { Configs } from \"./Configs\";\r\nimport { vismaSignOriginalMethods } from \"../codegen\";\r\n\r\n/**\r\n * Business logic relating to Onboarding process and Digital signature.\r\n */\r\nexport class OnboardingLogic {\r\n\r\n  /** Gets the authentication methods for digital signature. */\r\n  public static getTupasMethods(): Array<{\r\n    /** Identifier */\r\n    id: string,\r\n    /** Title that can be shown to user */\r\n    title: string,\r\n    /** Method image (bank logo) */\r\n    img: string,\r\n    /** True, if the method is considered being one of the most popular (Nordea, OP etc.) */\r\n    isPopular: boolean,\r\n  }> {\r\n\r\n    const cdn = \"https://cdn.salaxy.com/img\";\r\n\r\n    const imageOverrides = [\r\n      \"op\",\r\n      \"nordea\",\r\n      \"danske\",\r\n      \"spankki\",\r\n      \"handelsbanken\",\r\n      \"mobiilivarmenne\",\r\n      \"aktia\",\r\n      \"pop\",\r\n      \"sp\",\r\n      \"omasp\",\r\n      \"alandsbanken\",\r\n    ];\r\n\r\n    const result = vismaSignOriginalMethods.map((v, i) => {\r\n      return {\r\n        id: v.identifier,\r\n        title: v.name,\r\n        img: imageOverrides[i] ? `${cdn}/salaxy/sign/${imageOverrides[i]}.png` : v.image,\r\n        isPopular: i < 3,\r\n      };\r\n    });\r\n\r\n    if (Configs.current?.isTestData)\r\n    {\r\n      result.splice(2, 0, {\r\n        id: \"tupas-tbank\",\r\n        img: `${cdn}/salaxy/sign/test-tbank.png`,\r\n        isPopular: true,\r\n        title: \"Testing ID\"\r\n      });\r\n      result[3].isPopular = false; // Replace Danske in popular list with test identification.\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Gets the new version of authentication methods by Telia.\r\n   * @returns Array of euthentication methods.\r\n   */\r\n  public static getTeliaMethods(): Array<{\r\n    /** Identifier */\r\n    id: string,\r\n    /** Title that can be shown to user */\r\n    title: string,\r\n    /** Method image (bank logo) */\r\n    img: string,\r\n     /** True, if the method is considered being one of the most popular (Nordea, OP etc.) */\r\n     isPopular: boolean,\r\n  }> {\r\n    const methods = [\r\n      { img: \"https://cdn.salaxy.com/img/salaxy/sign/op.png\", id: \"saml.op.1\", title: \"Osuuspankki\", isPopular: true },\r\n      { img: \"https://cdn.salaxy.com/img/salaxy/sign/nordea.png\", id: \"oidc.nordea.1\", title: \"Nordea\" , isPopular: true },\r\n      { img: \"https://cdn.salaxy.com/img/salaxy/sign/danske.png\", id: \"oidc.danskebank.1\", title: \"Danske Bank\", isPopular: true  },\r\n      { img: \"https://cdn.salaxy.com/img/salaxy/sign/spankki.png\", id: \"oidc.spankki.1\", title: \"S-Pankki\", isPopular: false },\r\n      { img: \"https://cdn.salaxy.com/img/salaxy/sign/handelsbanken.png\", id: \"oidc.handelsbanken.1\", title: \"Handelsbanken\", isPopular: false },\r\n      { img: \"https://cdn.salaxy.com/img/salaxy/sign/mobiilivarmenne.png\", id: \"mpki.telia.1\", title: \"Mobiilivarmenne\", isPopular: false },\r\n      { img: \"https://cdn.salaxy.com/img/salaxy/sign/aktia.png\", id: \"oidc.aktia.1\", title: \"Aktia\", isPopular: false },\r\n      { img: \"https://cdn.salaxy.com/img/salaxy/sign/pop.png\", id: \"oidc.pop.1\", title: \"POP Pankki\", isPopular: false },\r\n      { img: \"https://cdn.salaxy.com/img/salaxy/sign/sp.png\", id: \"oidc.sp.1\", title: \"Säästöpankki\", isPopular: false },\r\n      { img: \"https://cdn.salaxy.com/img/salaxy/sign/omasp.png\", id: \"oidc.omasp.1\", title: \"Oma Säästöpankki\", isPopular: false },\r\n      { img: \"https://cdn.salaxy.com/img/salaxy/sign/alandsbanken.png\", id: \"oidc.alandsbanken.1\", title: \"Ålandsbanken\", isPopular: false },\r\n    ];\r\n    if (Configs.current?.isTestData) {\r\n      methods.unshift( { img: \"https://cdn.salaxy.com/img/salaxy/sign/test-tbank.png\", id: \"TEST\", title: \"Testi\", isPopular: true });\r\n    }\r\n    return methods;\r\n  }\r\n\r\n}\r\n","\r\n/**\r\n * Business logic relating to payments.\r\n */\r\nexport class PaymentLogic {\r\n\r\n  /**\r\n   * OBSOLETE\r\n   * @deprecated This is not any more updated and should not be used.\r\n   */\r\n  public static getEInvoiceIntermediators(): any {\r\n    const result = {\r\n      \"HELSFIHH\": \"Aktia - HELSFIHH\",\r\n      \"003723327487\": \"Apix Messaging Oy - 003723327487\",\r\n      \"BAWCFI22\": \"Basware Oyj - BAWCFI22\",\r\n      \"003703575029\": \"CGI - 003703575029\",\r\n      \"DABAFIHH\": \"Danske Bank - DABAFIHH\",\r\n      \"DNBAFIHX\": \"DNB - DNBAFIHX\",\r\n      \"HANDFIHH\": \"Handelsbanken - HANDFIHH\",\r\n      \"885790000000418\": \"HighJump AS - 885790000000418\",\r\n      \"INEXCHANGE\": \"InExchange Factorum AB - INEXCHANGE\",\r\n      \"EXPSYS\": \"Lexmark Expert Systems AB - EXPSYS\",\r\n      \"003708599126\": \"Liaison Technologies Oy - 003708599126\",\r\n      \"003721291126\": \"Maventa - 003721291126\",\r\n      \"003726044706\": \"Netbox Finland Oy - 003726044706\",\r\n      \"NDEAFIHH\": \"Nordea Pankki - NDEAFIHH\",\r\n      \"E204503\": \"OpusCapita Solutions Oy - E204503\",\r\n      \"OKOYFIHH\": \"Osuuspankit ja Pohjola Pankki - OKOYFIHH\",\r\n      \"PAGERO\": \"Pagero - PAGERO\",\r\n      \"PALETTE\": \"Palette Software - PALETTE\",\r\n      \"POPFFI22\": \"POP Pankki  - POPFFI22\",\r\n      \"003710948874\": \"Posti Messaging Oy - 003710948874\",\r\n      \"003701150617\": \"PostNord Strålfors Oy - 003701150617\",\r\n      \"003714377140\": \"Ropo Capital Oy - 003714377140\",\r\n      \"SBANFIHH\": \"S-Pankki - SBANFIHH\",\r\n      \"TAPIFI22\": \"S-Pankki (ent. LähiTapiola Pankin tunnus toistaiseksi käytössä) - TAPIFI22\",\r\n      \"ITELFIHH\": \"Säästöpankit - ITELFIHH\",\r\n      \"003701011385\": \"Tieto Oyj - 003701011385\",\r\n      \"885060259470028\": \"Tradeshift - 885060259470028\",\r\n      \"AABAFI22\": \"Ålandsbanken - AABAFI22\",\r\n    };\r\n    return result;\r\n  }\r\n\r\n}\r\n","import {\r\n  calcReportType,\r\n} from \"../api\";\r\nimport {\r\n  ReportType,\r\n} from \"../model\";\r\n\r\nimport { Translations } from \"./Translations\";\r\n\r\n/**\r\n * Framework independendent business logic methods and helpers for Reporting.\r\n */\r\nexport class ReportsLogic {\r\n\r\n  /**\r\n   * Gets a link URL for a yearly report. This is a relative link from the servr root (e.g. \"/ReportHtml/YearEndReportJson?year=2017\").\r\n   * Typically the environment specific implementation needs to figure out the server address and token.\r\n   * @param type - Type of the report must be one of the yearly reports\r\n   * @param year - Year for the report\r\n   * @param token - Token for authentication. Adds \"access_token\" to the query string.\r\n   * This is typically required from the environment specific implementation,\r\n   * but in exceptional cases you may use some other authentication mechanism and thus leave this null.\r\n   * @param id - Worker ID for those reports that are specific to one Worker.\r\n   * @param id2 - Second Worker ID for those reports that have two Workers in one report\r\n   */\r\n  public static getYearlyReportUrl(type: ReportType, year: number, token?: string, id?: string, id2?: string): string {\r\n    let url: string;\r\n    switch (type) {\r\n      case ReportType.YearEndReport:\r\n        url = `/ReportHtml/YearEndReportJson?year=${year}`;\r\n        break;\r\n      case ReportType.YearlyDetails:\r\n      case ReportType.Insurance:\r\n      case ReportType.HouseholdDeduction:\r\n        url = `/ReportHtml/${type}?year=${year}`;\r\n        break;\r\n      case ReportType.YearlyWorkerSummary:\r\n        url = `/ReportHtml/${type}/${id}?year=${year}`;\r\n        break;\r\n      case ReportType.Unemployment:\r\n        url = `/ReportPdf/${type}?year=${year}`;\r\n        break;\r\n      case ReportType.TaxYearly7801:\r\n        url = `/ReportPdf/${type}/${id}?year=${year}`;\r\n        break;\r\n      case ReportType.TaxHouseholdDeduction14B:\r\n      case ReportType.TaxHouseholdDeduction14BSpouseA:\r\n      case ReportType.TaxHouseholdDeduction14BSpouseB:\r\n        url = `/ReportPdf/${type}/${id}?id2=${id2 || \"\"}&year=${year}`;\r\n        break;\r\n      default:\r\n        throw new Error(\"Not a supported year end report: \" + type);\r\n    }\r\n    if (token) {\r\n      url = url + \"&access_token=\" + token;\r\n    }\r\n    return url;\r\n  }\r\n\r\n  /**\r\n   * Gets a URL for a calculation pdf file. This is a relative link from the servr root (e.g. \"/ReportPdf/SalarySlip/CALC_ID_HERE\").\r\n   * Typically the environment specific implementation needs to figure out the server address and token.\r\n   * @param reportType - Type of report\r\n   * @param calcId - Identifier of the calculation. This method requires that the calculation has been saved.\r\n   * @param inline - If true, the Content-Disposition header is returned with inline parameter.\r\n   * @param token - Token for authentication. Adds \"access_token\" to the query string.\r\n   * This is typically required from the environment specific implementation,\r\n   * but in exceptional cases you may use some other authentication mechanism and thus leave this null.\r\n   */\r\n  public static getCalcPdfUrl(reportType: calcReportType, calcId: string, inline = false, token?: string): string {\r\n    if (!calcId) {\r\n      throw new Error(\"Calculation ID is required by getCalcPdfUrl\");\r\n    }\r\n    switch (reportType) {\r\n      case \"salarySlip\":\r\n      case \"paymentReport\":\r\n      case \"paymentSummaryReport\":\r\n      case \"employerReport\": {\r\n        let url = `/ReportPdf/${reportType}/${calcId}?inline=${inline ? \"true\" : \"false\"}`;\r\n        if (token) {\r\n          url += \"&access_token=\" + token;\r\n        }\r\n        return url;\r\n      }\r\n      default:\r\n        throw new Error(\"Unknown type in getCalcPdfUrl: \" + (reportType as string));\r\n    }\r\n  }\r\n\r\n  /** Gets metadata about the supported report types */\r\n  public static getReportTypes(): any {\r\n    // TODO: Merge this with salaxy.moveToCore.enumerations in palkkaus-web-worker project. Type the structure.\r\n    const reportTypes = [\r\n      {\r\n        id: \"undefined\",\r\n        title: \"Valitse...\",\r\n        description: \"Ei valintaa tai tuntematon tyyppi. \",\r\n        roles: \"\",\r\n        category: \"tech\",\r\n      },\r\n      {\r\n        id: \"example\",\r\n        title: \"Esimerkki\",\r\n        description: \"Esimerkki raportti kehityskäyttöön. Ei dataa, ei parametrejä.\",\r\n        roles: \"\",\r\n        category: \"tech\",\r\n      },\r\n      {\r\n        id: \"monthlyDetails\",\r\n        title: \"Monthly details\",\r\n        description: \"The most detailed of the employer monthly reports.\",\r\n        roles: \"employer\",\r\n        category: \"monthly\",\r\n      },\r\n      {\r\n        id: \"taxMonthly4001\",\r\n        title: \"Monthly tax report (4001)\",\r\n        description: \"Monthly tax report\",\r\n        roles: \"employer\",\r\n        category: \"monthly\",\r\n      },\r\n      {\r\n        id: \"monthlyPension\",\r\n        title: \"Monthly pension report\",\r\n        description: \"Monthly pension report\",\r\n        roles: \"employer\",\r\n        category: \"monthly\",\r\n      },\r\n      {\r\n        id: \"monthlyLiikekirjuri\",\r\n        title: \"Accounting report (Liikekirjuri)\",\r\n        description: \"'Liikekirjuri' - a historical monthly report that was used for 2016 and 2017. Will be replaced by Rapko.\",\r\n        roles: \"company\",\r\n        category: \"monthly\",\r\n      },\r\n      {\r\n        id: \"monthlyRapko\",\r\n        title: \"Accounting report (Rapko)\",\r\n        description: \"Rapko / Raportointikoodisto is the Finnish standard for accounting.\",\r\n        roles: \"company\",\r\n        category: \"monthly\",\r\n      },\r\n      {\r\n        id: \"yearlyDetails\",\r\n        title: \"Yearly details\",\r\n        description: \"Detailed list for employer - this is a general report.\",\r\n        roles: \"employer\",\r\n        category: \"yearly\",\r\n      },\r\n      {\r\n        id: \"yearEndReport\",\r\n        title: \"Year-end report\",\r\n        description: \"The year-end report with customer feedback\",\r\n        roles: \"employer\",\r\n        category: \"yearly\",\r\n      },\r\n      {\r\n        id: \"yearlyWorkerSummary\",\r\n        title: \"Yearly worker summary\",\r\n        description: \"Detailed report - similar to salary slip - from employer to worker. This report must be given by employer according to Finnish law.\",\r\n        roles: \"employer\",\r\n        category: \"yearly\",\r\n      },\r\n      {\r\n        id: \"taxYearly7801\",\r\n        title: \"Yearly tax report (7801)\",\r\n        description: \"Form 7801: Yearly report for Finnish tax authorities\",\r\n        roles: \"employer\",\r\n        category: \"yearly\",\r\n      },\r\n      {\r\n        id: \"unemployment\",\r\n        title: \"Unemployment insurance report\",\r\n        description: \"Report for Finnish Unemployment insurance TVR\",\r\n        roles: \"employer\",\r\n        category: \"yearly\",\r\n      },\r\n      {\r\n        id: \"insurance\",\r\n        title: \"Accident insurance report\",\r\n        description: \"Report for mandatory accident insurance company\",\r\n        roles: \"employer\",\r\n        category: \"yearly\",\r\n      },\r\n      {\r\n        id: \"householdDeduction\",\r\n        title: \"Household deduction yearly report\",\r\n        description: \"General (internal) household deduction yearly report.\",\r\n        roles: \"household\",\r\n        category: \"yearly\",\r\n      },\r\n      {\r\n        id: \"taxHouseholdDeduction14B\",\r\n        title: \"Household deduction report to authorities (14B)\",\r\n        description: \"Form 14B: Household deduction report for Finnish tax authorities. All deductible salaries included.\",\r\n        roles: \"household\",\r\n        category: \"yearly\",\r\n      },\r\n      {\r\n        id: \"taxHouseholdDeduction14BSpouseA\",\r\n        title: \"Household deduction 14B, self only\",\r\n        description: \"Form 14B: Household deduction report for Finnish tax authorities. Contains only deductible salaries which are attributed to self.\",\r\n        roles: \"household\",\r\n        category: \"yearly\",\r\n      },\r\n      {\r\n        id: \"taxHouseholdDeduction14BSpouseB\",\r\n        title: \"Household deduction 14B, spouse only\",\r\n        description: \"Form 14B: Household deduction report for Finnish tax authorities. Contains only deductible salaries which are split to spouse of customer.\",\r\n        roles: \"household\",\r\n        category: \"yearly\",\r\n      },\r\n      {\r\n        id: \"salarySlipCopy\",\r\n        title: \"Salary slip (worker copy)\",\r\n        description: \"Copy of the salary slip for the worker.\",\r\n        roles: \"worker\",\r\n        category: \"calc\",\r\n      },\r\n      {\r\n        id: \"salarySlipPaid\",\r\n        title: \"Salary slip (paid by employer)\",\r\n        description: \"Salary slip paid by the employer\",\r\n        roles: \"employer\",\r\n        category: \"calc\",\r\n      },\r\n      {\r\n        id: \"employerReport\",\r\n        title: \"Employer report of salary\",\r\n        description: \"Report of a single calculation from the Employer point-of-view\",\r\n        roles: \"employer\",\r\n        category: \"calc\",\r\n      },\r\n      {\r\n        id: \"paymentReport\",\r\n        title: \"Payment report of salary\",\r\n        description: \"Report of a single calculation from the payments / society point-of-view.\",\r\n        roles: \"employer\",\r\n        category: \"calc\",\r\n      },\r\n      {\r\n        id: \"paymentSummaryReport\",\r\n        title: \"Payment summary report of salary/salaries\",\r\n        description: \"Report of a calculation/calculations from the payments / society point-of-view.\",\r\n        roles: \"employer\",\r\n        category: \"calc\",\r\n      },\r\n      {\r\n        id: \"employmentContract\",\r\n        title: \"Employment contract\",\r\n        description: \"Employment contract\",\r\n        roles: \"all\",\r\n        category: \"contract\",\r\n      },\r\n    ];\r\n    for (const reportType of reportTypes) {\r\n      reportType.title = Translations.get(\"SALAXY.ENUM.ReportType.\" + reportType.id + \".label\");\r\n      reportType.description = Translations.get(\"SALAXY.ENUM.ReportType.\" + reportType.id + \".description\");\r\n    }\r\n    return reportTypes;\r\n  }\r\n\r\n  /**\r\n   * Returns a URL for a pay certificate pdf file. This is a relative link from the server root.\r\n   * Typically the environment specific implementation needs to figure out the server address and token.\r\n   * @param workerId Worker id for which the certificate should be created.\r\n   * @param calculationIds Calculation ids to include in the certificate.\r\n   * @param inline - If true, the Content-Disposition header is returned with inline parameter.\r\n   * @param token - Token for authentication. Adds \"access_token\" to the query string.\r\n   * This is typically required from the environment specific implementation,\r\n   * but in exceptional cases you may use some other authentication mechanism and thus leave this null.\r\n   */\r\n   public static getPayCertificatePdfUrl(workerId: string, calculationIds: string[],  inline = false, token?: string): string {\r\n    let url = `/ReportPdf/PayCertificate/${encodeURIComponent(workerId)}?`;\r\n    calculationIds.forEach((id) => { url += \"calculationIds=\" + encodeURIComponent(\"\" + (id ?? \"\")) + \"&\"; });\r\n    url += `inline=${inline}`;\r\n    if (token) {\r\n      url += \"&access_token=\" + token;\r\n    }\r\n    return url;\r\n  }\r\n}\r\n","import { AccountBase, CompanyAccount, LegalEntityType, PersonAccount, Role, UserSession, WebSiteUserRole } from \"../model\";\r\nimport { AppStatus, SystemRole } from \"./model\";\r\nimport { Configs } from \"../logic\";\r\nimport { ConfigLogic } from \"./ConfigLogic\";\r\n\r\n/**\r\n * Provides business logic for role membership rules.\r\n */\r\nexport class RoleLogic {\r\n\r\n    /**\r\n     * Checks whether the user is in a given role\r\n     * @param session - Session of the current account.\r\n     * @param appStatus - Additional information about the session and application status.\r\n     * @param role - One of the known roles or role from server.\r\n     * You can also use exclamation mark for negative (e.g.)\r\n     * @returns Boolean whether user is in the given role\r\n     */\r\n    public static isInRole(session: UserSession, appStatus: AppStatus, role: SystemRole | Role | string): boolean {\r\n      if (!role) {\r\n        return true;\r\n      }\r\n\r\n      if (role.indexOf(\"&&\")> 0) {\r\n        const andRoles = role.split(\"&&\").map(x => x.trim());\r\n        return this.isInAllRoles(session, appStatus, andRoles);\r\n      }\r\n      if (role.indexOf(\"||\")> 0) {\r\n        const orRoles = role.split(\"||\").map(x => x.trim());\r\n        return this.isInSomeRole(session, appStatus, orRoles);\r\n      }\r\n\r\n      role = role.trim();\r\n      const isNegative = role.startsWith(\"!\");\r\n      if (isNegative) {\r\n        role = role.substr(1);\r\n      }\r\n      role = (role || \"any\").trim();\r\n      role = role.substr(0, 1).toLowerCase() + role.substr(1); // Tolerate Capital first letter\r\n\r\n      let primaryRole: SystemRole.Worker | SystemRole.Company | SystemRole.Household | undefined = undefined;\r\n      const currentAccount = session ? session.currentAccount as AccountBase : null;\r\n      if (currentAccount) {\r\n        if (currentAccount.entityType === LegalEntityType.Company) {\r\n          primaryRole = SystemRole.Company; // Company is clear\r\n        } else {\r\n          const personAccount = currentAccount as PersonAccount;\r\n          if (personAccount.lastLoginAs === WebSiteUserRole.Worker || (!personAccount.isEmployer && personAccount.isWorker)) {\r\n            primaryRole = SystemRole.Worker; // LastLoginAs is clear, but we cannot rely on isWorker directly as some users are both isEmployer=true ans isWorker=true.\r\n          } else {\r\n            primaryRole = SystemRole.Household; // Default to household if both and no lastLogin.\r\n          }\r\n        }\r\n      }\r\n\r\n      const configLogic = new ConfigLogic(Configs.current);\r\n\r\n      const checkRole = (role): boolean => {\r\n        switch (role) {\r\n          // No session required\r\n          case SystemRole.Unknown:\r\n            return appStatus.sessionCheckInProgress;\r\n          case SystemRole.Anon:\r\n            return !appStatus.sessionCheckInProgress && (!session || !session.isAuthorized);\r\n          case SystemRole.Init:\r\n            return appStatus.sessionCheckInProgress;\r\n          case SystemRole.Hidden:\r\n            return false;\r\n          case SystemRole.Test:\r\n            return !!appStatus.isTestData;\r\n          case SystemRole.Prod:\r\n            return !appStatus.isTestData;\r\n          case SystemRole.EnvLocal:\r\n            return configLogic.getEnv() === \"local\";\r\n          case SystemRole.EnvTest:\r\n            return configLogic.getEnv() === \"test\";\r\n          case SystemRole.EnvDemo:\r\n            return configLogic.getEnv() === \"demo\";\r\n          case SystemRole.EnvProd:\r\n            return configLogic.getEnv() === \"prod\";\r\n          case SystemRole.EnvRc:\r\n            return configLogic.getEnv() === \"rc\";\r\n          case SystemRole.Any:\r\n          case \"*\":\r\n              return true;\r\n          // Session required (may be checked from primaryRole or currentAccount shortcuts)\r\n          case SystemRole.Auth:\r\n            return !!(session && session.isAuthorized);\r\n          case SystemRole.Worker:\r\n            return primaryRole === SystemRole.Worker;\r\n          case SystemRole.Employer:\r\n            return primaryRole === SystemRole.Company || primaryRole === SystemRole.Household;\r\n          case SystemRole.Household:\r\n            return primaryRole === SystemRole.Household;\r\n          case SystemRole.Company:\r\n            return primaryRole === SystemRole.Company;\r\n          case SystemRole.Person:\r\n            return primaryRole === SystemRole.Worker || primaryRole === SystemRole.Household;\r\n          case SystemRole.NonVerified:\r\n            return !!(currentAccount && !currentAccount.isVerified);\r\n          case SystemRole.FiTm:\r\n          case SystemRole.FiOy:\r\n          case SystemRole.FiRy:\r\n            return primaryRole === SystemRole.Company && (session.currentAccount as CompanyAccount).companyType === role;\r\n          case SystemRole.PartnerMessaging:\r\n            return !!session?.settings?.partnerMessages;\r\n          default:\r\n            return !!(\r\n              (currentAccount && ((session?.currentAccount?.identity?.roles?.indexOf(role) ?? -1) >= 0))\r\n              ||\r\n               appStatus.clientRoles.indexOf(role) >= 0\r\n              );\r\n        }\r\n      };\r\n      return isNegative ? !checkRole(role) : checkRole(role);\r\n\r\n    }\r\n\r\n    /**\r\n     * Returns true if the current account is a member of all of the given roles.\r\n     * Returns true if the roles is null or an empty array or and an empty string.\r\n     * @param session - Session of the current account.\r\n     * @param appStatus - Additional information about the session and application status.\r\n     * @param roles - Array of role values.\r\n     */\r\n    public static isInAllRoles(session: UserSession, appStatus: AppStatus, roles: Array<SystemRole | Role | string>): boolean {\r\n      if (!roles || roles.length === 0) {\r\n        return true;\r\n      }\r\n      return roles.every((x) => this.isInRole(session, appStatus, x));\r\n    }\r\n\r\n    /**\r\n     * Returns true if the current account is a member of some of the given roles.\r\n     * Returns true if the roles is null or an empty array or an empty string.\r\n     * @param session Session of the current account.\r\n     * @param appStatus State of the current application (i.e. login, session check etc.)\r\n     * @param roles Array of role values.\r\n     */\r\n    public static isInSomeRole(session: UserSession, appStatus: AppStatus, roles: Array<SystemRole | Role | string>): boolean {\r\n      if (!roles || roles.length === 0) {\r\n        return true;\r\n      }\r\n      return roles.some((x) => this.isInRole(session, appStatus, x));\r\n    }\r\n}\r\n","import { PaymentChannel } from \"../model\";\r\nimport { DatelyObject, Dates, DateTimes } from \"../util\";\r\nimport { InvoicesLogic } from \"./InvoicesLogic\";\r\n\r\n/**\r\n * Provides business logic for calculating salary date.\r\n */\r\nexport class SalaryDateLogic {\r\n\r\n  /**\r\n   * Returns true, if the given date is a valid Salary date for given gross salary payment date.\r\n   *\r\n   * @param salaryDate - Salary date (the date when the salary is in worker).\r\n   * @param iban - Bank account number of the worker.\r\n   * @param paidAt - Date for the gross salary payment.\r\n   * @param isRequestedSalaryDateSet - Boolean indicating if the salary date is the requested salary date.\r\n   * @param channel - Payment channel.\r\n   * @param zeroPayment - A boolean indicating if the net salary payment to worker is zero.\r\n   * @param role - Current client role, only: pro and admin roles have effect currently\r\n   * @returns - True if the given dates are not conflicting (salary date is possible for given paid at date).\r\n   */\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n  public static isValidSalaryDate(salaryDate: DatelyObject, iban: string | undefined = undefined, paidAt: any = null, isRequestedSalaryDateSet = false, channel: PaymentChannel | undefined = undefined, zeroPayment = false, role: string | undefined = undefined, checkFirstWorkDay = false): boolean {\r\n    const currentDate = Dates.getToday();\r\n    if ( Dates.isSameOrAfter(currentDate, \"2025-12-22\") &&\r\n         Dates.isBefore(currentDate, \"2026-01-01\") &&\r\n         Dates.isSameOrAfter(salaryDate, currentDate) &&\r\n         Dates.isBefore(salaryDate, \"2026-01-01\")) {\r\n      return true;\r\n    }\r\n    if (!Dates.isWorkday(salaryDate)) {\r\n      return false;\r\n    }\r\n    const calculatedSalaryDate = this.calculateSalaryDate(iban, paidAt, isRequestedSalaryDateSet, channel, zeroPayment);\r\n    if (!checkFirstWorkDay) {\r\n      return Dates.getWorkdays(calculatedSalaryDate!, salaryDate!).length  >= 1;\r\n    } else {\r\n      return Dates.getFirstWorkDay(calculatedSalaryDate!, salaryDate!) != undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Calculates the estimated salary date (the date when the salary is in worker) for the given gross salary payment date.\r\n   *\r\n   * @param _iban  - The iban number of the worker.\r\n   * @param paidAt - Date for the salary gross payment.\r\n   * @param isRequestedSalaryDateSet - Flag to indicate, if the requested salary date is set.\r\n   * @param channel - Payment channel.\r\n   * @param zeroPayment - A boolean indicating if the net salary payment to worker is zero.\r\n   */\r\n  public static calculateSalaryDate(_iban: string | undefined = undefined, paidAt: any = null, isRequestedSalaryDateSet = false, channel: PaymentChannel | undefined = undefined, zeroPayment = false): string | undefined {\r\n\r\n    let requiredTime = 0;\r\n    let latePaymentDelay = 0;\r\n\r\n    let localPaidAtDayDatelyObject = Dates.getDatelyObject(new Date())!;\r\n    let paidAtDayDatelyObject = Dates.getDatelyObject(paidAt) ?? \"\";\r\n    if (!paidAtDayDatelyObject) {\r\n      // calculate server time from local time by removing offset\r\n      paidAtDayDatelyObject = DateTimes.add(localPaidAtDayDatelyObject,-1 * (DateTimes.getUTCOffset(localPaidAtDayDatelyObject) ?? 0), \"minute\")!;\r\n    }\r\n    else\r\n    {\r\n      // calculate local time from server time by adding offset\r\n      localPaidAtDayDatelyObject = DateTimes.add(paidAtDayDatelyObject, (DateTimes.getUTCOffset(paidAtDayDatelyObject) ?? 0), \"minute\")!;\r\n    }\r\n\r\n    if (Dates.isWorkday(paidAtDayDatelyObject)) {\r\n\r\n      if (channel === PaymentChannel.PalkkausCfaPaytrail ||\r\n          channel === PaymentChannel.PalkkausEcfaPaytrail ) {\r\n        latePaymentDelay = 0;\r\n      }\r\n      else\r\n      {\r\n        latePaymentDelay = ( (DateTimes.getHour(localPaidAtDayDatelyObject) ?? 0) >= 17 || (Dates.getDay(paidAtDayDatelyObject) ?? \"\") !== (Dates.getDay(localPaidAtDayDatelyObject) ?? \"\") ) ? this.daysLatePaymentDelay : 0 ;\r\n      }\r\n    }\r\n\r\n\r\n    const paidAtWorkday = Dates.getWorkday(paidAtDayDatelyObject) ?? \"\";\r\n\r\n    if (InvoicesLogic.isCfa(channel)) {\r\n\r\n      requiredTime += this.daysCustomerServiceProcessing;\r\n      if (isRequestedSalaryDateSet) {\r\n          requiredTime += 2;\r\n      } else {\r\n        requiredTime += latePaymentDelay;\r\n        if (channel === PaymentChannel.PalkkausCfaPaytrail ||\r\n          channel === PaymentChannel.PalkkausEcfaPaytrail) {\r\n          requiredTime += 1;\r\n        }\r\n      }\r\n    } else {\r\n      requiredTime += latePaymentDelay + 1;\r\n    }\r\n\r\n    const salaryDate = Dates.addWorkdays(paidAtWorkday, (zeroPayment || InvoicesLogic.isPalkkausManualLike(channel) || InvoicesLogic.isPalkkausInvoicesLike(channel) || channel  == PaymentChannel.PalkkausWS || channel == PaymentChannel.PalkkausPSD ) ? 0 : requiredTime);\r\n    return Dates.asDate(salaryDate);\r\n  }\r\n  /**\r\n   * Returns true, if the given salary date is in the past.\r\n   * @param salaryDate - Salary date to check.\r\n   * @param _iban - The iban number of the worker.\r\n   * @param paidAt - Date for the salary gross payment.\r\n   * @param isRequestedSalaryDateSet - Flag to indicate, if the requested salary date is set.\r\n   * @param channel - Payment channel.\r\n   * @param zeroPayment - A boolean indicating if the net salary payment to worker is zero.\r\n   * @returns True if the given salary date is in the past, false otherwise.\r\n   */\r\n  public static isSalaryDateInPast(salaryDate: DatelyObject, _iban: string | undefined = undefined, paidAt: any = null, isRequestedSalaryDateSet = false, channel: PaymentChannel | undefined = undefined, zeroPayment = false): boolean {\r\n    const calculatedSalaryDate = this.calculateSalaryDate(_iban, paidAt, isRequestedSalaryDateSet, channel, zeroPayment);\r\n    return Dates.isBefore(salaryDate, Dates.getDatelyObject(calculatedSalaryDate) ?? \"\");\r\n  }\r\n\r\n  /**\r\n   * Required days to process the incoming payment to worker net payment.\r\n   */\r\n  private static daysCustomerServiceProcessing = 1;\r\n\r\n  /**\r\n   * Payment delay if the  payment takes place outside bank hours.\r\n   */\r\n  private static daysLatePaymentDelay = 1;\r\n}\r\n","import { PensionCompany } from \"../model\";\r\n\r\n/** Logic related to settings: Insurances, pension etc. */\r\nexport class SettingsLogic {\r\n\r\n  /**\r\n   * Returns pension number for test account\r\n   * @param company The company enumerations.\r\n   * Only the most common pension companies are supported.\r\n   */\r\n   public static getPensionNumberForTest(company: PensionCompany): string | null {\r\n\r\n    const checksumLetters = \"0123456789ABCDEFHJKLMNPRSTUVWXY\";\r\n    const contract = \"1111111\";\r\n    const calculateNumber = (company) => company + \"-\" + contract + checksumLetters[parseInt(company + contract, 10) % 31];\r\n\r\n    switch (company) {\r\n      case PensionCompany.Varma:\r\n        return \"55-1111111S\";\r\n      case PensionCompany.Elo:\r\n        return \"54-11111114\";\r\n      case PensionCompany.Ilmarinen:\r\n        return \"46-1111111Y\";\r\n      case PensionCompany.Veritas:\r\n        return \"56-1111111D\";\r\n      case PensionCompany.Apteekkien:\r\n        return \"80009-1111N\";\r\n      case PensionCompany.Verso:\r\n        return \"80008-11113\";\r\n      case PensionCompany.KevaMunicipal:\r\n        return calculateNumber(\"20\");\r\n      case PensionCompany.KevaAland:\r\n        return calculateNumber(\"24\");\r\n      case PensionCompany.KevaChurch:\r\n        return calculateNumber(\"25\");\r\n      case PensionCompany.KevaKela:\r\n        return calculateNumber(\"29\");\r\n      case PensionCompany.KevaState:\r\n        return calculateNumber(\"30\");\r\n      case PensionCompany.Valio:\r\n        return \"80001-11111\";\r\n      default:\r\n        return null;\r\n    }\r\n  }\r\n}\r\n","/**\r\n * Provides helper methods related to storage and search including Uri and Id helpers.\r\n */\r\nexport class StorageLogic {\r\n\r\n  /**\r\n   * Gets the idAtOwner format full ID (\"[id]@[owner]\") for a URI.\r\n   * IdAtOwner format is easier to use in REST API, as part of URL than URI format.\r\n   * @param uriString URI as (\"[Potentially, a server]/[PayloadType]/[Owner]/[Id]\", e.g. \"/CalculationDTO/FI86POYL0009461858/16ea052e-f23f-4b72-83a9-b8f6590f0dc9\")\r\n   * @returns The owner and is in \"[id]@[owner]\" format.\r\n   */\r\n  public static getIdAtOwner(uriString: string): string {\r\n    const parsed = this.parseUri(uriString);\r\n    return parsed.id + \"@\" + parsed.owner;\r\n  }\r\n\r\n  /**\r\n   * Gets the URL in local form without the server part:\r\n   * \"/[PayloadType]/[Owner]/[Id]\", e.g. \"/CalculationDTO/FI86POYL0009461858/16ea052e-f23f-4b72-83a9-b8f6590f0dc9\".\r\n   * @param uriString Uri that potentially has a server in the beginning (like list item uri).\r\n   * @param forceParse If true, the URI is parsed to URI parts even if it already seems to be a local URI (starts with \"/\").\r\n   * By default URI's that start with \"/\" are returned as is without further conversion.\r\n   */\r\n  public static getLocalUri(uriString: string, forceParse = false): string | undefined {\r\n    if (!uriString) {\r\n      return undefined;\r\n    }\r\n    if (uriString[0] == \"/\" && !forceParse) {\r\n      return uriString;\r\n    }\r\n    const parsed = this.parseUri(uriString);\r\n    return `/${parsed.payloadType}/${parsed.owner}/${parsed.id}`;\r\n  }\r\n\r\n\r\n  /**\r\n   * Parses a Palkkaus storage URI in list item or container to relevant parts:\r\n   * Payload type, Owner and Id.\r\n   * @param uriString Uri string to parse as relevant URI parts.\r\n   * (\"[Potentially, a server]/[PayloadType]/[Owner]/[Id]\", e.g. \"/CalculationDTO/FI86POYL0009461858/16ea052e-f23f-4b72-83a9-b8f6590f0dc9\")\r\n   * @returns Reelvant URI parts: Payload type, Owner and Id.\r\n   */\r\n  public static parseUri(uriString: string): {\r\n    /** Payload type of the container */\r\n    payloadType: string,\r\n    /** Owner of the Container / Partition key in the storage. */\r\n    owner: string,\r\n    /** Unique identifier in the storage, typically Guid. */\r\n    id: string,\r\n  }  {\r\n    const localPath = (new URL(uriString, \"https://www.palkkaus.fi\").pathname).split(\"/\");\r\n    if (localPath.length < 4) {\r\n      throw new Error(\"Invalid URI: \" + uriString);\r\n    }\r\n    const result = {\r\n      payloadType: localPath[1],\r\n      owner: localPath[2],\r\n      id: localPath[3],\r\n    };\r\n    if (!result.id || !result.owner) {\r\n      throw new Error(\"Invalid URI: \" + uriString);\r\n    }\r\n    return result;\r\n  }\r\n\r\n}","import type { EnumMetadata } from \"./model/EnumMetadata\";\r\nimport { AjaxFetch } from \"../api/infra/AjaxFetch\";\r\nimport { EnumerationsLogic } from \"./EnumerationsLogic\";\r\nimport { Translations } from \"./Translations\";\r\nimport { Validation } from \"../util/Validation\";\r\n\r\n/** Settings object that is injectable to Custom Elements based sxy-forms. */\r\nexport class SxyFormsSettings {\r\n\r\n  /** Resolves an URL (shortened schema document URL) as an absolute URL string. */\r\n  public resolveUrl(url: string): string {\r\n    if (url.startsWith(\"/\")) {\r\n      if (!window) {\r\n        throw new Error(`Relative url not supported outside browser scope: '${url}'.`);\r\n      }\r\n      const urlArr = window.location.href.split(\"/\");\r\n      url = `${urlArr[0]}//${urlArr[2]}${url}`;\r\n    } else {\r\n      url = url.replace(/^salaxy-secure\\//g, `${new AjaxFetch().getServerAddress()}/`);\r\n    }\r\n    return url;\r\n  }\r\n\r\n  /**\r\n   * Gets a custom validator for the given element.\r\n   * If none is returned, the default validators are used.\r\n   * If you want to disable default validators, you should return a function that returns null.\r\n   * @param element Element for which the validator is fetched.\r\n   * @param element.validator Validator is a string identifying the validator (attribute in the input component).\r\n   * @param element.getRequire Function that returns true if the input is required.\r\n   * @returns A custom validator function or undefined if the default validators should be used.\r\n   * Validator function takes the value (bool and nmber are currently typed) and returns and error message or null if the value is valid.\r\n   * Message is typically a key for a translation.\r\n   */\r\n  public getValidator(element: { validator: string, getRequire: () => boolean }): ((value: any) => string | undefined) | undefined {\r\n    if (!element.validator) {\r\n      return undefined;\r\n    }\r\n\r\n    const validators = {\r\n      sxyCompanyIdFi: (value: any) => !Validation.formatCompanyIdFi(value),\r\n      sxyCurrency: (value: any) => !Validation.isCurrency(value),\r\n      sxyEmail: (value: any) => !Validation.isEmail(value),\r\n      sxyIban: (value: any) => !Validation.isIban(value),\r\n      sxyInteger: (value: any) => !Validation.isInteger(value),\r\n      sxyMobilePhone: (value: any) => !Validation.isMobilePhone(value),\r\n      sxyNumber: (value: any) => !Validation.isNumber(value),\r\n      sxyPensionContractNumber: (value: any) => !Validation.isPensionContractNumber(value),\r\n      sxyPersonalIdFi: (value: any) => !Validation.isPersonalIdFi(value),\r\n      sxyPostalCodeFi: (value: any) => !Validation.isPostalCodeFi(value),\r\n      sxyTaxPercent: (value: any) => !Validation.isTaxPercent(value),\r\n      sxyTemporaryPensionContractNumber: (value: any) => !Validation.isTemporaryPensionContractNumber(value)\r\n    };\r\n\r\n    const coreValidator = validators[element.validator];\r\n    if (!coreValidator) {\r\n      return undefined;\r\n    }\r\n\r\n    return (value: any): string | undefined => {\r\n      // Input is missing value => Use required value text\r\n      if (element.getRequire() && !value) {\r\n        return \"SALAXY.VALIDATION.ValidationErrors.required\";\r\n      }\r\n      if (coreValidator(value)) {\r\n        return `SALAXY.VALIDATION.ValidationErrors.${element.validator}`;\r\n      }\r\n      return undefined;\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Translates given key to the current language with default value.\r\n   * @param key - Key for the text.\r\n   * @param defaultValue - The default value that is returned if the key is not found.\r\n   * Note that `null` and `undefined` (omitted parameter) function differently here:\r\n   * Null returns undefined if the key is not found.\r\n   * Undefined returns always a text: It uses the resolve logic of the translations provider.\r\n   * Typically, this logic will attempt to find the text in the default language of the app and if not available,\r\n   * returns the last part of the key with potential red exclamation mark.\r\n   * @returns The translated value or default value as explained above.\r\n   */\r\n  public getText(key: string, defaultValue = \"\"): string {\r\n    if (defaultValue === undefined) {\r\n      return Translations.get(key);\r\n    }\r\n    return Translations.getWithDefault(key, defaultValue);\r\n  }\r\n\r\n\r\n\r\n  /**\r\n   * Gets a unit text for an input that has a given format.\r\n   * Units are short texts in the input e.g. %, km, €, h, min, days, weeks.\r\n   * @param format - Format of the input either in the schema or explicitly as input component attribute.\r\n   */\r\n  public getUnitText(format: string): string {\r\n    return this.getText(`SALAXY.ENUM.Unit.${format}.shortIndicator`, \"\");\r\n  }\r\n\r\n  /**\r\n   * Gets a description text for an enumeration value in current language.\r\n   * Note that this may not be available for all enumerations by design.\r\n   * @param enumType - Name of the Type of the enumeration.\r\n   * @param enumValue Name/value of the member for which the description is fetched.\r\n   * @returns Language specific text form translations or undefined if none is found.\r\n   */\r\n  public getEnumDescr(enumType: string, enumValue: string): string | undefined {\r\n    return EnumerationsLogic.getEnumDescr(enumType, enumValue);\r\n  }\r\n\r\n  /**\r\n   * Gets a label text for an enumeration value.\r\n   * @param enumType Name of the Type of the enumeration.\r\n   * @param enumValue Name/value of the member for which the label is fetched.\r\n   * @returns Language specific text form translations or the memberName text if no translation is found.\r\n   */\r\n  public getEnumLabel(enumType: string, enumValue: string): string {\r\n    return EnumerationsLogic.getEnumLabel(enumType, enumValue);\r\n  }\r\n\r\n  /**\r\n   * Gets the metadata (texts etc.) for an enumeration and its values.\r\n   * @param enumName -  Name of the Type of the enumeration.\r\n   */\r\n  public getEnumMetadata(enumName: string): EnumMetadata | undefined {\r\n    return EnumerationsLogic.getEnumMetadata(enumName);\r\n  }\r\n\r\n}","import { Translations } from \"./Translations\";\r\nimport { Calculation, CalculationRowType, EmploymentRelationTaxcard, Taxcard, TaxcardKind } from \"../model\";\r\nimport { Brand, Dates, Numeric } from \"../util\";\r\nimport { CalculatorLogic } from \"./CalculatorLogic\";\r\nimport { EnumerationsLogic } from \"./EnumerationsLogic\";\r\nimport { TaxcardUiInfo } from \"./model\";\r\n/**\r\n * Provides business logic related to TaxCards:\r\n * The Finnish way of determining the widtholding tax that Employer should deduct from Worker salary.\r\n * Taxcard handling was changed by tax authorities significantly for year 2019, hence the naming.\r\n */\r\nexport class TaxCard2019Logic {\r\n\r\n  /**\r\n   * Gets a new blank taxcard with default values, suitable for UI binding.\r\n   *\r\n   * @param personalId The personal ID that is used to connect the Taxcard to a person. This is required in save.\r\n   * @param kind If specified, sets the type and defaults according to the type\r\n   * @param year Specifies the year. This is used in December-January when there may be cards from both years.\r\n   * Current year is the default.\r\n   * @param today Allows changing the today date in unit testing etc. Default is actual today.\r\n   */\r\n  public static getBlank(personalId?: string, kind: TaxcardKind | undefined = undefined, year?: number, today?: string): Taxcard {\r\n    today = today || Dates.getToday();\r\n    year = year || Dates.getYear(\"today\");\r\n    const newCard: Taxcard = {\r\n      worker: null,\r\n      card: {\r\n        personalId: personalId ?? \"\",\r\n        forYear: year!,\r\n        taxPercent: null,\r\n        incomeLimit: null,\r\n        taxPercent2: null,\r\n        kind: TaxcardKind.Undefined as any,\r\n        fileUri: null,\r\n        previewUri: null,\r\n        validity: {},\r\n      },\r\n      incomeLog: [],\r\n      id: null,\r\n      createdAt: today,\r\n      updatedAt: today,\r\n      isReadOnly: null,\r\n    };\r\n    if (kind) {\r\n      newCard.card.kind = kind;\r\n      newCard.card.validity ??= {};\r\n      switch (kind) {\r\n        case TaxcardKind.Undefined:\r\n          newCard.card.taxPercent = 23;\r\n          break;\r\n        case TaxcardKind.NoWithholdingHousehold:\r\n          newCard.card.taxPercent = 0;\r\n          newCard.card.validity.start = today;\r\n          break;\r\n        case TaxcardKind.NoTaxCard:\r\n          newCard.card.taxPercent = 60;\r\n          newCard.card.validity.start = today;\r\n          break;\r\n        case TaxcardKind.DefaultYearly:\r\n          newCard.card.validity.start = `${year}-01-01`;\r\n          newCard.card.validity.end = `${year}-12-31`;\r\n          break;\r\n        case TaxcardKind.Replacement:\r\n        case TaxcardKind.Others:\r\n        case TaxcardKind.Historical:\r\n          newCard.card.validity.start = Dates.getYear(today)! < year! ? `${year}-01-01`\r\n            : (Dates.getYear(today)! > year! ? `${year}-12-31` : today);\r\n          newCard.card.validity.end = `${year}-12-31`;\r\n          break;\r\n      }\r\n    }\r\n    return newCard;\r\n  }\r\n\r\n  /**\r\n   * Gets display information and texts for taxcard within a calculation.\r\n   * Helper for showing taxcards UI's for calculations.\r\n   * NOTE: The data is cached to the calculation ($ui) until round-trip to server.\r\n   * @param calc Calculation for which the data is resolved.\r\n   */\r\n  public static getCalcTaxcardInfo(calc: Calculation): TaxcardUiInfo {\r\n    const result: TaxcardUiInfo = {\r\n      status: null,\r\n      kind: TaxcardKind.Undefined,\r\n      text: undefined,\r\n      shortText: undefined,\r\n      percent: undefined,\r\n    };\r\n    if (!calc) {\r\n      return result;\r\n    }\r\n    const $ui = CalculatorLogic.getUiCache(calc);\r\n    if ($ui.tax) {\r\n      return $ui.tax;\r\n    }\r\n    if (!calc.worker || !calc.worker.tax) {\r\n      $ui.tax = result;\r\n      return result;\r\n    }\r\n    if (calc.result?.responsibilities?.employmentTaxcard == EmploymentRelationTaxcard.TaxAtSource) {\r\n      result.status = \"ok\";\r\n      // HACK: Language versioning and where do we get the percentage?\r\n      result.text = \"Lähdeverokortti\";\r\n      result.shortText = \"Lähdeverokortti\";\r\n      // result.percent = calc.worker\r\n      $ui.tax = result;\r\n      return result;\r\n    }\r\n\r\n    if (calc.result?.responsibilities?.employmentTaxcard == EmploymentRelationTaxcard.NoTaxCard) {\r\n      result.status = \"ok\";\r\n      result.text = EnumerationsLogic.getEnumLabel(\"TaxcardKind\", TaxcardKind.NoTaxCard);\r\n      result.shortText = result.text;\r\n      result.percent = 60;\r\n      $ui.tax = result;\r\n      return result;\r\n    }\r\n\r\n    if (calc.rows?.some((x) => x.rowType === CalculationRowType.TaxWithholding)) {\r\n      // HACK: Language versioning\r\n      result.status = \"ok\";\r\n      result.text = \"Ennakonpidätys rivillä\";\r\n      result.shortText = \"Ennakonpidätys rivillä\";\r\n      $ui.tax = result;\r\n      return result;\r\n    }\r\n\r\n    const tax = calc.worker.tax;\r\n    result.kind = (tax.snapshot ? tax.snapshot.kind : null) || TaxcardKind.Undefined;\r\n    result.status = result.kind === TaxcardKind.Undefined ? \"missing\" : \"ok\";\r\n    switch (result.kind) {\r\n      case TaxcardKind.Undefined:\r\n        result.text = EnumerationsLogic.getEnumLabel(\"TaxcardKind\", result.kind);\r\n        result.shortText = Translations.get(\"SALAXY.CORE.Taxcard2019Logic.noTaxcard\");\r\n        break;\r\n      case TaxcardKind.NoTaxCard:\r\n        result.text = EnumerationsLogic.getEnumLabel(\"TaxcardKind\", result.kind);\r\n        result.shortText = result.text;\r\n        result.percent = 60;\r\n        break;\r\n      case TaxcardKind.NoWithholdingHousehold:\r\n        result.text = EnumerationsLogic.getEnumLabel(\"TaxcardKind\", result.kind);\r\n        result.shortText = result.text;\r\n        result.percent = 0;\r\n        break;\r\n      default:\r\n        result.percent = calc.worker.tax.snapshot?.taxPercent;\r\n        if ((calc.result?.totals?.totalTaxable ?? 0) > 0) {\r\n          result.percent = ((calc.worker.tax.estimatedTax ?? 0) / (calc.result?.totals?.totalTaxable ?? 0)) * 100;\r\n        }\r\n        result.text = EnumerationsLogic.getEnumLabel(\"TaxcardKind\", result.kind) + \": \" + Numeric.formatPercent(result.percent);\r\n        result.shortText = Translations.get(\"SALAXY.UI_Terms.withholdingTax\") + \": \" + Numeric.formatPercent(result.percent);\r\n        break;\r\n    }\r\n    $ui.tax = result;\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Checks if the taxcard is valid for the salary date.\r\n   * This is used when in test environment the salaryDate may be changed in UX.\r\n   * Typically, you should get this information from the API methods.\r\n   * @param card Taxcard to check.\r\n   * @param salaryDate Salary date. Default is today.\r\n   */\r\n  public static isTaxcardValid(card: Taxcard, salaryDate = \"today\"): boolean {\r\n    if (!card || !card.card || !card.card.validity) {\r\n      return false;\r\n    }\r\n    salaryDate = Dates.asDate(salaryDate) || Dates.getToday()!;\r\n    if (!((card.card.validity?.start ?? \"\") > salaryDate) && !((card.card.validity?.end ?? \"\") < salaryDate)) {\r\n      return true;\r\n    }\r\n    if (Dates.getMonth(salaryDate) === 1 && card.card.forYear === Dates.getYear(salaryDate)! - 1) {\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * TODO: This is currently used for charting only. As such it could probably be simplified\r\n   * and / or combined with getMainChart() / getPieChart().\r\n   * Gets information about the the income limit and real percent.\r\n   * Note that this method calculates the real percent i.e.\r\n   * for examples and no tax cards 60%. If you wish to see the example percent here (23%),\r\n   * catch it separately.\r\n   * @param taxcard Card to analyze\r\n   */\r\n  public static getIncomeLimitInfo(taxcard: Taxcard): {\r\n    /** Taxcard type */\r\n    type: TaxcardKind,\r\n    /** Current percent as number */\r\n    percent: number,\r\n    /** True if the card has a limit */\r\n    hasLimit: boolean,\r\n    /** Total income divided by taxcard limit */\r\n    fractionOfLimit: number,\r\n  } {\r\n    const result = {\r\n      type: TaxcardKind.Undefined,\r\n      percent: 60,\r\n      hasLimit: false,\r\n      fractionOfLimit: 0,\r\n    };\r\n    if (!taxcard || !taxcard.card || !taxcard.card.kind) {\r\n      return result;\r\n    }\r\n\r\n    const card = taxcard.card;\r\n    result.percent = card.taxPercent === 0 ? 0 : card.taxPercent || 60;\r\n    result.type = card.kind ?? TaxcardKind.Undefined;\r\n    switch (result.type) {\r\n      // May or may not have limits\r\n      case TaxcardKind.Auto:\r\n      case TaxcardKind.DefaultYearly:\r\n      case TaxcardKind.Replacement:\r\n      case TaxcardKind.Others:\r\n        result.hasLimit = !!(card.incomeLimit && card.taxPercent2);\r\n        if (result.hasLimit) {\r\n          result.fractionOfLimit = (taxcard.result?.totalIncome ?? 0) / (card.incomeLimit ?? 0);\r\n          if ((taxcard.result?.totalIncome ?? 0) > (card.incomeLimit ?? 0) && card.taxPercent2) {\r\n            result.percent = card.taxPercent2;\r\n          }\r\n        }\r\n        return result;\r\n      // No limit\r\n      case TaxcardKind.NoTaxCard:\r\n      case TaxcardKind.NoWithholdingHousehold:\r\n      case TaxcardKind.Undefined:\r\n      default:\r\n        return result;\r\n    }\r\n  }\r\n\r\n  /** Gets the main chart for taxcards */\r\n  public static getMainChart(taxcard: Taxcard): any {\r\n\r\n    const limits = TaxCard2019Logic.getIncomeLimitInfo(taxcard);\r\n    const taxCardIncomeLimit = taxcard.card.incomeLimit;\r\n    const totalIncome: number = taxcard.result?.totalIncome ?? 0;\r\n    const taxPercent = taxcard.card.taxPercent;\r\n    const taxPercent2 = taxcard.card.taxPercent2;\r\n\r\n    let incomeSum = 0;\r\n    let incomes = taxcard.incomeLog?.sort((x, y) => (x.paidAt ?? \"\") < (y.paidAt ?? \"\") ? -1 : ((x.paidAt ?? \"\") > (y.paidAt ?? \"\") ? 1 : 0)).map((value: any) => {\r\n      incomeSum += value.income;\r\n      return { x: value.paidAt, y: incomeSum };\r\n    });\r\n    if (incomes?.length === 0) {\r\n      incomes = [\r\n        { x: taxcard.card.validity?.start ?? \"\", y: 0 },\r\n      ];\r\n    }\r\n    const validity = [\r\n      { x: taxcard.card.validity?.start ?? \"\", y: 0 },\r\n      { x: taxcard.card.validity?.end ?? \"\", y: taxcard.card.incomeLimit ?? 0 },\r\n    ];\r\n\r\n    const colorPrimary = Brand.getBrandColor(\"primary\", \"rgba\");\r\n    const colorDanger = Brand.getBrandColor(\"danger\", \"rgba\");\r\n    const colorWarning = Brand.getBrandColor(\"warning\", \"rgba\");\r\n    const result = {\r\n      limits,\r\n      data: [\r\n        incomes,\r\n        validity,\r\n      ],\r\n      labels: [],\r\n      datasets: [\r\n        {\r\n          label: Translations.get(\"SALAXY.UI_Terms.salaryPayment\"),\r\n          fill: false,\r\n          index: 2,\r\n          lineTension: 0,\r\n          backgroundColor: colorPrimary,\r\n          pointBackgroundColor: colorPrimary,\r\n          pointHoverBackgroundColor: colorPrimary,\r\n          borderColor: colorPrimary,\r\n          pointBorderColor: colorPrimary,\r\n          pointHoverBorderColor: colorPrimary,\r\n        },\r\n        {\r\n          label: Translations.get(\"SALAXY.UI_Terms.incomeLimit\"),\r\n          backgroundColor: colorWarning,\r\n          pointBackgroundColor: colorWarning,\r\n          pointHoverBackgroundColor: colorWarning,\r\n          borderColor: colorWarning,\r\n          pointBorderColor: colorWarning,\r\n          pointHoverBorderColor: colorWarning,\r\n          fill: false,\r\n          borderDash: [5, 5],\r\n          lineTension: 0,\r\n        },\r\n      ],\r\n      options: {\r\n        maintainAspectRatio: false,\r\n        legend: {\r\n          display: true,\r\n          position: \"bottom\",\r\n        },\r\n        title: {\r\n          display: true,\r\n          text: Translations.get(\"SALAXY.CORE.Taxcard2019Logic.chartTitle\"),\r\n        },\r\n        scales: {\r\n          yAxes: [{\r\n            display: true,\r\n            ticks: {\r\n              suggestedMax: (taxCardIncomeLimit ?? 0) * 1.5,    // minimum will be 0, unless there is a lower value.\r\n              // OR //\r\n              beginAtZero: true,   // minimum value will be 0.\r\n            },\r\n          }],\r\n          xAxes: [{\r\n            type: \"time\",\r\n            time: {\r\n              displayFormats: {\r\n                millisecond: \"D.M.YYYY\",\r\n                second: \"D.M.YYYY\",\r\n                minute: \"D.M.YYYY\",\r\n                hour: \"D.M.YYYY\",\r\n                day: \"D.M.YYYY\",\r\n                week: \"D.M.YYYY\",\r\n                month: \"D.M.YYYY\",\r\n                year: \"D.M.YYYY\",\r\n              },\r\n              minUnit: \"day\",\r\n              tooltipFormat: \"D.M.YYYY\",\r\n            },\r\n\r\n          }],\r\n        },\r\n        annotation: {\r\n          annotations: [{\r\n            type: \"line\",\r\n            mode: \"horizontal\",\r\n            scaleID: \"y-axis-0\",\r\n            value: taxCardIncomeLimit,\r\n            borderColor: colorDanger,\r\n            borderWidth: 2,\r\n            label: {\r\n              position: \"left\",\r\n              enabled: true,\r\n              content: `${taxCardIncomeLimit} €`,\r\n              fontColor: \"#fff\",\r\n              fontSize: 11,\r\n              backgroundColor: colorDanger,\r\n              yAdjust: 0,\r\n              xAdjust: 60,\r\n            },\r\n          },\r\n          {\r\n            type: \"line\",\r\n            mode: \"horizontal\",\r\n            scaleID: \"y-axis-0\",\r\n            value: taxCardIncomeLimit,\r\n            borderColor: \"transparent\",\r\n            borderWidth: 0,\r\n            label: {\r\n              position: \"left\",\r\n              enabled: true,\r\n              content: `${taxPercent2} %`,\r\n              fontSize: 16,\r\n              fontColor: colorDanger,\r\n              backgroundColor: \"transparent\",\r\n              yAdjust: -11,\r\n              xAdjust: 5,\r\n            },\r\n          },\r\n          {\r\n            type: \"line\",\r\n            mode: \"horizontal\",\r\n            scaleID: \"y-axis-0\",\r\n            value: taxCardIncomeLimit,\r\n            borderColor: \"transparent\",\r\n            borderWidth: 0,\r\n            label: {\r\n              position: \"left\",\r\n              enabled: true,\r\n              content: `${taxPercent} %`,\r\n              fontSize: 16,\r\n              fontColor: colorWarning,\r\n              backgroundColor: \"transparent\",\r\n              yAdjust: 15,\r\n              xAdjust: 5,\r\n            },\r\n          },\r\n          {\r\n            type: \"line\",\r\n            mode: \"horizontal\",\r\n            scaleID: \"y-axis-0\",\r\n            value: 0,\r\n            borderColor: \"transparent\",\r\n            borderWidth: 0,\r\n            label: {\r\n              position: \"right\",\r\n              enabled: true,\r\n              content: `31.12.${taxcard.card.forYear}: ${Numeric.round(totalIncome, 0)} €`,\r\n              fontSize: 12,\r\n              fontColor: colorPrimary,\r\n              backgroundColor: \"#fff\",\r\n              yAdjust: -30,\r\n              xAdjust: 10,\r\n            },\r\n          }],\r\n        },\r\n        tooltips: {\r\n          backgroundColor: \"rgba(255,255,255,1)\",\r\n          titleFontColor: \"#000\",\r\n          bodyFontColor: \"#000\",\r\n          borderColor: \"#000\",\r\n          displayColors: false,\r\n          intersect: false,\r\n          enabled: true,\r\n          mode: \"single\",\r\n          callbacks: {\r\n            label: (tooltipItem, data) => {\r\n              let label = data.datasets[tooltipItem.datasetIndex].label || \"\";\r\n\r\n              if (label) {\r\n                label += ` ${tooltipItem.xLabel as string}: `;\r\n              }\r\n              label += Math.round(tooltipItem.yLabel * 100) / 100;\r\n              return label;\r\n            },\r\n          },\r\n        },\r\n        events: [\"mousemove\", \"click\"],\r\n      },\r\n    };\r\n    return result;\r\n  }\r\n\r\n  /** Gets the main chart for taxcards */\r\n  public static getMainChartV2(taxcard: Taxcard): any {\r\n    let incomeSum = 0;\r\n    let incomes = taxcard.incomeLog?.sort((x, y) => (x.paidAt ?? \"\") < (y.paidAt ?? \"\") ? -1 : ((x.paidAt ?? \"\") > (y.paidAt ?? \"\") ? 1 : 0)).map((value: any) => {\r\n      incomeSum += value.income;\r\n      return { x: value.paidAt, y: incomeSum };\r\n    });\r\n    if (incomes?.length === 0) {\r\n      incomes = [\r\n        { x: taxcard.card.validity?.start, y: 0 },\r\n      ];\r\n    }\r\n    const validity = [\r\n      { x: taxcard.card.validity?.start, y: 0 },\r\n      { x: taxcard.card.validity?.end, y: taxcard.card.incomeLimit ?? 0 },\r\n    ];\r\n    const colorPrimary = Brand.getBrandColor(\"primary\", \"rgba\");\r\n    const colorDanger = Brand.getBrandColor(\"danger\", \"rgba\");\r\n    const colorWarning = Brand.getBrandColor(\"warning\", \"rgba\");\r\n    const result = {\r\n      type: \"line\",\r\n      data: {\r\n        labels: [],\r\n        datasets: [\r\n          {\r\n            label: Translations.get(\"SALAXY.UI_Terms.salaryPayment\"),\r\n            data: incomes,\r\n            borderColor: colorPrimary,\r\n            backgroundColor: colorPrimary,\r\n            index: 2\r\n          },\r\n          {\r\n            label: Translations.get(\"SALAXY.UI_Terms.incomeLimit\"),\r\n            data: validity,\r\n            borderColor: colorWarning,\r\n            backgroundColor: colorWarning,\r\n            fill: false,\r\n            borderDash: [5, 5],\r\n            lineTension: 0,\r\n          }\r\n        ]\r\n      },\r\n      options: {\r\n        maintainAspectRatio: false,\r\n        responsive: true,\r\n        scales: {\r\n          x: {\r\n            type: \"time\",\r\n            time: {\r\n              tooltipFormat: \"D.M.YYYY\",\r\n              minUnit: \"day\",\r\n              displayFormats: {\r\n                millisecond: \"D.M.YYYY\",\r\n                second: \"D.M.YYYY\",\r\n                minute: \"D.M.YYYY\",\r\n                hour: \"D.M.YYYY\",\r\n                day: \"D.M.YYYY\",\r\n                week: \"D.M.YYYY\",\r\n                month: \"D.M.YYYY\",\r\n                year: \"D.M.YYYY\",\r\n              }\r\n            },\r\n          },\r\n          y: {\r\n            beginAtZero: true,\r\n            suggestedMax: (taxcard?.card?.incomeLimit ?? 0) * 1.5\r\n          },\r\n        },\r\n        plugins: {\r\n          legend: {\r\n            display: true,\r\n            position: \"bottom\"\r\n          },\r\n          title: {\r\n            display: true,\r\n            text: Translations.get(\"SALAXY.CORE.Taxcard2019Logic.chartTitle\")\r\n          },\r\n          tooltip: {\r\n            backgroundColor: \"rgba(255,255,255,1)\",\r\n            titleColor: \"#000\",\r\n            bodyColor: \"#000\",\r\n            borderColor: \"#000\",\r\n            displayColors: false,\r\n            intersect: false,\r\n            enabled: true\r\n          },\r\n          annotation: {\r\n            annotations: {\r\n              incomeLimit: {\r\n                display: taxcard.card.incomeLimit ? true : false,\r\n                type: \"line\",\r\n                label: {\r\n                  content: `${Translations.get(\"SALAXY.UI_Terms.incomeLimit\")} ${taxcard.card.incomeLimit}€`,\r\n                  display: true,\r\n                  backgroundColor: colorDanger,\r\n                },\r\n                scaleID: \"y\",\r\n                value: taxcard.card.incomeLimit,\r\n                borderColor: colorDanger,\r\n                color: \"#000\",\r\n                borderWidth: 2,\r\n              }\r\n            }\r\n          }\r\n        },\r\n        events: [\"mousemove\", \"click\"],\r\n      }\r\n    };\r\n    return result;\r\n  }\r\n\r\n  /** Gets the pie chart for the taxcards. This is used for simplistic cases that do not have an income limit. */\r\n  public static getPieChartDataV2(taxcard: Taxcard): any {\r\n    const limits = TaxCard2019Logic.getIncomeLimitInfo(taxcard);\r\n    const netSalary = 100 - limits.percent;\r\n    const label1Suffix = Translations.get(limits.fractionOfLimit < 1 ? \"SALAXY.CORE.Taxcard2019Logic.taxPercentBasic\" : \"SALAXY.CORE.Taxcard2019Logic.taxPercentAdditional\");\r\n    const colors = [limits.type === TaxcardKind.NoTaxCard || limits.type === TaxcardKind.NoWithholdingHousehold ? Brand.getBrandColor(\"danger\", \"rgba\") : Brand.getBrandColor(\"warning\", \"rgba\"), Brand.getBrandColor(\"primary\", \"rgba\")];\r\n\r\n\r\n    const result = {\r\n      type: \"pie\",\r\n      data: {\r\n        labels: [\r\n          `${Translations.get(\"SALAXY.UI_Terms.withholdingTax\")} (${label1Suffix}) ${Numeric.formatPercent(limits.percent)}`,\r\n          `${Translations.get(\"SALAXY.CORE.Taxcard2019Logic.netSalary\")} ${Numeric.formatPercent(netSalary)}`,\r\n        ],\r\n        datasets: [{\r\n          data: [\r\n            limits.percent,\r\n            100 - limits.percent,\r\n          ],\r\n          backgroundColor: colors,\r\n          hoverOffset: 4\r\n        }]\r\n      },\r\n      options: {\r\n        maintainAspectRatio: false,\r\n        responsive: true,\r\n        plugins: {\r\n          legend: {\r\n            display: true,\r\n            position: \"bottom\"\r\n          },\r\n          tooltips: {\r\n            enabled: true\r\n          }\r\n        },\r\n        events: [\"mousemove\", \"click\"],\r\n      }\r\n\r\n    };\r\n    return result;\r\n  }\r\n\r\n  /** Gets the pie chart for the taxcards. This is used for simplistic cases that do not have an income limit. */\r\n  public static getPieChartData(taxcard: Taxcard): any {\r\n    const limits = TaxCard2019Logic.getIncomeLimitInfo(taxcard);\r\n    const netSalary = 100 - limits.percent;\r\n    const label1Suffix = Translations.get(limits.fractionOfLimit < 1 ? \"SALAXY.CORE.Taxcard2019Logic.taxPercentBasic\" : \"SALAXY.CORE.Taxcard2019Logic.taxPercentAdditional\");\r\n    const getColorPalette = (color: string | undefined) => {\r\n      return {\r\n        backgroundColor: color,\r\n        pointBackgroundColor: color,\r\n        pointHoverBackgroundColor: color,\r\n        borderColor: color,\r\n\r\n        pointBorderColor: color,\r\n        pointHoverBorderColor: color,\r\n      };\r\n    };\r\n    const result = {\r\n      limits,\r\n      data: [\r\n        limits.percent,\r\n        100 - limits.percent,\r\n      ],\r\n      datasets: [\r\n        {\r\n          label: [\"1\", \"2\"],\r\n        },\r\n      ],\r\n      labels: [\r\n        `${Translations.get(\"SALAXY.UI_Terms.withholdingTax\")} (${label1Suffix}) ${Numeric.formatPercent(limits.percent)}`,\r\n        `${Translations.get(\"SALAXY.CORE.Taxcard2019Logic.netSalary\")} ${Numeric.formatPercent(netSalary)}`,\r\n      ],\r\n      colors: [\r\n        getColorPalette(\r\n          limits.type === TaxcardKind.NoTaxCard ||\r\n          limits.type === TaxcardKind.NoWithholdingHousehold\r\n            ? Brand.getBrandColor(\"danger\", \"rgba\")\r\n            : Brand.getBrandColor(\"warning\", \"rgba\")\r\n        ),\r\n        getColorPalette(Brand.getBrandColor(\"primary\", \"rgba\")),\r\n      ],\r\n      options: {\r\n        maintainAspectRatio: true,\r\n        responsive: true,\r\n        legend: {\r\n          display: true,\r\n          position: \"bottom\",\r\n          fullWidth: true,\r\n          reverse: true,\r\n        },\r\n        tooltips: {\r\n          enabled: true,\r\n          mode: \"single\",\r\n          bodySpacing: 6,\r\n          callbacks: {\r\n            label: (tooltipItem, data) => {\r\n              return data.labels[tooltipItem.index];\r\n            },\r\n          },\r\n        },\r\n        events: [\"mousemove\", \"click\"],\r\n      },\r\n    };\r\n    return result;\r\n  }\r\n\r\n}\r\n","import { ClassDoc, ClassMemberDoc, DeclarationReflection, EnumDoc, RootDeclarationReflection, TypeDocType } from \"./model/docs\";\r\n\r\n/**\r\n * Logic functions related to Typedoc parsing and interpretation.\r\n * TODO: This should probably be factored outside core to a separate Dev library or ng1-dev site.\r\n */\r\nexport class TypedocLogic {\r\n\r\n  private static reflectionKind = {\r\n    \"1\": \"Project\",\r\n    \"2\": \"Module\",\r\n    \"4\": \"Namespace\",\r\n    \"8\": \"Enum\",\r\n    \"16\": \"EnumMember\",\r\n    \"32\": \"Variable\",\r\n    \"64\": \"Function\",\r\n    \"128\": \"Class\",\r\n    \"256\": \"Interface\",\r\n    \"512\": \"Constructor\",\r\n    \"1024\": \"Property\",\r\n    \"2048\": \"Method\",\r\n    \"4096\": \"CallSignature\",\r\n    \"8192\": \"IndexSignature\",\r\n    \"16384\": \"ConstructorSignature\",\r\n    \"32768\": \"Parameter\",\r\n    \"65536\": \"TypeLiteral\",\r\n    \"131072\": \"TypeParameter\",\r\n    \"262144\": \"Accessor\",\r\n    \"524288\": \"GetSignature\",\r\n    \"1048576\": \"SetSignature\",\r\n    \"2097152\": \"TypeAlias\",\r\n    \"4194304\": \"Reference\",\r\n  };\r\n\r\n\r\n\r\n\r\n\r\n  /**\r\n   * Finds an interface based on the type name.\r\n   * @param docs Array of classes and interfaces from which to find an interface.\r\n   * @param typeName The type name of the interface to look for. Search is case-insensitive.\r\n   */\r\n  public static findInterface(docs: ClassDoc[], typeName: string): ClassDoc | undefined {\r\n    typeName = typeName.toLowerCase().trim();\r\n    if (!typeName) {\r\n      return undefined;\r\n    }\r\n\r\n    return docs.find((x) => (x.kind === \"interface\"||x.kind.toString() === \"256\") && x.name?.toLowerCase() === typeName); //Support later typedocs\r\n  }\r\n\r\n  /**\r\n   * Finds an enum based on the type name.\r\n   * @param allEnums All enumerations from which to find the enum by name.\r\n   * @param name The enum name to look for. Search is case-insensitive.\r\n   */\r\n  public static findEnum(allEnums: EnumDoc[], name: string): EnumDoc | undefined {\r\n    name = name.toLowerCase().trim();\r\n    if (!name) {\r\n      return undefined;\r\n    }\r\n    return allEnums.find((x) => x.name?.toLowerCase() === name);\r\n  }\r\n\r\n  /**\r\n   * Gets a property from an interface supports single property names or longer property paths.\r\n   * @param type The root type from which the property is found.\r\n   * @param path Property path starting with the root type.\r\n   * @param interfaces The interfaces that is used in finding types.\r\n   * Typically, this is the full colelction of all classes and interfaces.\r\n   */\r\n  public static getProperty(type: ClassDoc, path: string, interfaces: ClassDoc[]): ClassMemberDoc | undefined {\r\n    if (!type || !path?.trim()) {\r\n      return undefined;\r\n    }\r\n    const pathArr = path.split(\".\");\r\n    let member: ClassMemberDoc | undefined = undefined;\r\n    while (pathArr.length) {\r\n      const propName = pathArr.shift()?.trim();\r\n      member = type?.members.find((x) => x.name?.toLowerCase() === (propName && propName.toLowerCase()));\r\n      if (pathArr.length) {\r\n        const nextTypeName = this.getTypeAsText(member?.type)?.replace(\"?\", \"\");\r\n        if (!nextTypeName) {\r\n          return undefined;\r\n        }\r\n        const nextType = this.findInterface(interfaces, nextTypeName);\r\n        if (!nextType) return undefined;\r\n        type = nextType;\r\n      }\r\n    }\r\n    return member === undefined ? undefined : member;\r\n  }\r\n\r\n\r\n\r\n  /**\r\n   * Gets a typedoc type formatted as text.\r\n   * @param type Type as typedoc object model.\r\n   */\r\n  public static getTypeAsText(type: any): string | undefined {\r\n    if (type == null) {\r\n      return undefined;\r\n    }\r\n    switch (type.type) {\r\n      case \"intrinsic\":\r\n        return `${type.name as string}`;\r\n      case \"union\":\r\n        if (type.types.length === 2 && type.types[1].name === \"null\") {\r\n          return TypedocLogic.getTypeAsText(type.types[0]) + \"?\";\r\n        }\r\n        return type.types.map((innerType) => TypedocLogic.getTypeAsText(innerType)).join(\" | \");\r\n      case \"array\":\r\n        return TypedocLogic.getTypeAsText(type.elementType) + \"[]\";\r\n      case \"stringLiteral\":\r\n        return `\"${type.value as string}\"`;\r\n      case \"typeParameter\":\r\n        return `<${type.name as string}>`;\r\n      case \"reference\":\r\n        return type.name as string\r\n          + (type.typeArguments ? \"<\" + (type.typeArguments.map((arg) => TypedocLogic.getTypeAsText(arg)).join(\", \") as string) + \">\" : \"\");\r\n      case \"reflection\":\r\n        return \"Reflection not supported in quick docs.\";\r\n      default:\r\n        return `TODO: ${JSON.stringify(type)}`;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets a typedoc type formatted as HTML.\r\n   * @param type Type as typedoc object model.\r\n   * @param typeLinker Method that resolves a Typedoc type to link in the current environment.\r\n   */\r\n  public static getTypeHtml(type: TypeDocType | undefined, typeLinker: (typedocType: any) => string): string | undefined {\r\n    if (type == null) {\r\n      return undefined;\r\n    }\r\n    switch (type.type) {\r\n      case \"intrinsic\":\r\n        return `<i>${type.name}</i>`;\r\n      case \"union\":\r\n        if (type.types?.length === 2 && type.types[1].name === \"null\") {\r\n          return TypedocLogic.getTypeHtml(type.types[0], typeLinker) + \"?\";\r\n        }\r\n        return type.types?.map((innerType) => TypedocLogic.getTypeHtml(innerType, typeLinker)).join(\" | \");\r\n\r\n      case \"array\":\r\n        return TypedocLogic.getTypeHtml(type.elementType, typeLinker) + \"[]\";\r\n      case \"stringLiteral\":\r\n        return `\"${type.value}\"`;\r\n      case \"typeParameter\":\r\n        return `&lt;${type.name}&gt;`;\r\n      case \"reference\":{\r\n        const typeLink = typeLinker && typeLinker(type);\r\n        let refHtml = typeLink ? `<a href=\"${typeLink}\">${type.name}</a>` : type.name;\r\n        if (type.typeArguments) {\r\n          refHtml += \"&lt;\" + type.typeArguments.map((arg) => TypedocLogic.getTypeHtml(arg, typeLinker)).join(\", \") + \"&gt;\";\r\n        }\r\n        return refHtml;}\r\n      case \"reflection\":\r\n        return \"<i>Reflection type not implemented in quick docs. See source for details.</i>\";\r\n      case \"literal\":\r\n        return `\"${type.value}\"`;\r\n      default:\r\n        return `<span>${type.type}: <code>${JSON.stringify(type)}</code></span>`;\r\n    }\r\n  }\r\n\r\n  /** Gets the enumerations for the given library from raw TypeDoc json. */\r\n  public static getEnums(typedoc: any, lib: string): EnumDoc[] {\r\n    const enums: EnumDoc[] = typedoc.children\r\n      .filter((x) => (x.kindString === \"Enumeration\" || x.kind.toString() === \"8\"))//Support later typedocs\r\n      .map((typedocEnum) => {\r\n        const enumResult = TypedocLogic.getRootDeclarationReflection(\"enum\", lib, typedocEnum) as EnumDoc;\r\n        enumResult.names = (typedocEnum.children || []).map((td) => td.name);\r\n        enumResult.values = (typedocEnum.children || []).map((td) => td.defaultValue?.replace(\"\\\"\", \"\").replace(\"\\\"\", \"\"));\r\n        return enumResult;\r\n      });\r\n    return enums;\r\n  }\r\n\r\n  /** Gets the classes and interfaces strongly typed from raw TypeDoc json */\r\n  public static getClasses(typedoc: any, lib: string): ClassDoc[] {\r\n    const classes: ClassDoc[] = typedoc.children\r\n      .filter((x) => (x.kindString === \"Class\" || x.kind.toString() === \"128\" || x.kindString === \"Interface\" ||x.kind.toString() === \"256\" )) //Support later typedocs\r\n      .map((typedocClass) => {\r\n        const classResult = this.getRootDeclarationReflection(\"class\", lib, typedocClass) as ClassDoc;\r\n        classResult.extendedBy = typedocClass.extendedBy || [];\r\n        classResult.extends = typedocClass.extendedTypes || [];\r\n        classResult.implementedBy = typedocClass.implementedBy || [];\r\n        classResult.implements = typedocClass.implementedTypes || [];\r\n        if (classResult.rawKind === \"Interface\") {\r\n          classResult.kind = \"interface\";\r\n        } else if (classResult.implements.find((x) => x.name === \"IController\")) {\r\n          classResult.kind = \"controllerBase\";\r\n        }\r\n        // Registered components and controllers will be set to data later.\r\n        classResult.group = this.getGroup(lib, classResult.source);\r\n        classResult.members = (typedocClass.children || []).filter((x) => x.flags.isPublic || x.flags.isExported || classResult.kind == \"interface\")\r\n          .map((tdMember) => {\r\n            const result: ClassMemberDoc = {\r\n              type: tdMember.type,\r\n              grouping: \"Other\",\r\n              parameters: [],\r\n              returns: undefined\r\n            };\r\n            if ((tdMember.kindString === \"Method\" || tdMember.kind.toString() === \"2048\") && tdMember.signatures?.length) { //Support later typedocs\r\n              tdMember.signatures[0].sources = tdMember.sources;\r\n              this.setDeclrProperties(result, tdMember.signatures[0]);\r\n              result.rawKind = \"Method\";\r\n              result.returns = tdMember.signatures[0].type;\r\n            } else {\r\n              this.setDeclrProperties(result, tdMember);\r\n            }\r\n            switch (result.rawKind) {\r\n              case \"Accessor\":\r\n                if (tdMember.setSignature){\r\n                  if (tdMember.setSignature?.length){ //old spec tsdoc\r\n                    result.type = tdMember.setSignature[0].parameters[0].type;\r\n                  }\r\n                  else { //new spec tsdoc\r\n                    result.type = tdMember.setSignature.parameters[0].type;\r\n                  }\r\n                } else if (tdMember.getSignature) {\r\n                  if (tdMember.getSignature?.length){\r\n                    result.type = tdMember.getSignature[0].type;\r\n                  }\r\n                  else {\r\n                    result.type = tdMember.getSignature.type;\r\n                  }\r\n                }\r\n                // Add read-only info here if necessary\r\n                result.grouping = \"Property\";\r\n                break;\r\n              case \"Property\":\r\n                result.grouping = \"Property\";\r\n                break;\r\n              case \"Method\":\r\n                result.grouping = \"Method\";\r\n                if (tdMember.signatures?.length) {\r\n                  if (tdMember.signatures.length > 1) {\r\n                    result.shortText += \"\\n\\nNOTE: method has more than one signature. See source for all signatures.\";\r\n                  }\r\n                  const signature = tdMember.signatures[0];\r\n                  result.type = signature.type;\r\n                  if (signature.parameters) {\r\n                    result.parameters = signature.parameters.map((paramSrc) => {\r\n                      const paramResult: ClassMemberDoc = {\r\n                        grouping: \"Property\",\r\n                        type: paramSrc.type,\r\n                      };\r\n                      this.setDeclrProperties(paramResult, paramSrc);\r\n                      return paramResult;\r\n                    });\r\n                  }\r\n                } else {\r\n                  result.shortText += \"\\nERROR: No signature was found!\";\r\n                }\r\n                break;\r\n            }\r\n            return result;\r\n          });\r\n        return classResult;\r\n      });\r\n    return classes;\r\n  }\r\n\r\n  /**\r\n   * Gets the common ROOT declaration reflection types from the Typedoc JSON: class, interface and enum\r\n   * and their sub-kinds in AngularJS: controller, controllerBase and component.\r\n   */\r\n  public static getRootDeclarationReflection(kind: string, lib: string, typedocSource: any): RootDeclarationReflection {\r\n    const result =  {\r\n      id: typedocSource.id,\r\n      kind,\r\n      lib,\r\n    } as RootDeclarationReflection;\r\n    if (typedocSource.sources?.length) {\r\n      result.source = typedocSource.sources[0].fileName;\r\n    }\r\n    result.group = this.getGroup(lib, result.source);\r\n    this.setDeclrProperties(result, typedocSource);\r\n\r\n    result.exampleUrls = typedocSource.comment?.tags?.filter((t) => t.tag === \"exampleurl\").map((e) => {\r\n      const url = e.text.trim() as string;\r\n      return url.toLowerCase() === \"true\" ? `/ng1/examples/${result.group}/${result.name}.html` : url.trim();\r\n    }) || [];\r\n    result.screenShots = typedocSource.comment?.tags?.filter((t) => t.tag === \"screenshot\").map((e) => {\r\n      const url = e.text.trim() as string;\r\n      return url.toLowerCase() === \"true\" ? `/ng1/screen-shots/${result.group}/${result.name}.png` : url.trim();\r\n    }) || [];\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Sets the DeclarationReflection properties from source JSON\r\n   * @param target Target data structure\r\n   * @param tdSource The source object from raw typedoc JSON source.\r\n   */\r\n  public static setDeclrProperties(target: DeclarationReflection, tdSource: any): void {\r\n    if (!tdSource) {\r\n      return;\r\n    }\r\n    target.name = tdSource.name;\r\n    target.rawKind = tdSource.kindString;\r\n    if (!target.rawKind) {\r\n      target.rawKind = this.reflectionKind[tdSource.kind]; //use new mapping if old did not find\r\n    }\r\n    if (tdSource.comment) {\r\n      if (tdSource.comment.shortText) {\r\n        target.shortText = tdSource.comment.shortText;\r\n        target.descr = (tdSource.comment.shortText as string) + (tdSource.comment.text ? \"\\n\\n\" + (tdSource.comment.text as string) : \"\");\r\n      } else if (tdSource.comment.summary?.length) {  //Support later typedocs\r\n        target.shortText = tdSource.comment.summary[0]?.text;\r\n        target.descr = tdSource.comment.summary[0]?.text;\r\n      } else {\r\n        target.shortText = tdSource.comment.text || \"Error: No description in comments.\";\r\n        target.descr = tdSource.comment.text || \"Error: No description in comments.\";\r\n      }\r\n      if (tdSource.comment.returns) {\r\n        //target.returns = (tdSource.comment.returns as string);\r\n        target.descr += \"\\n\\n**Returns**: \" + (tdSource.comment.returns as string);\r\n      } else if (tdSource.comment.blockTags?.length && tdSource.comment.blockTags[0].tag === \"@returns\") { //Support later typedocs\r\n        //target.returns = tdSource.comment.blockTags[0].content[0].text;\r\n        target.descr += \"\\n\\n**Returns**: \" + tdSource.comment.blockTags[0].content[0].text;\r\n      }\r\n      if (tdSource.comment.tags) {\r\n        const examples = tdSource.comment.tags.filter((t) => t.tag === \"example\");\r\n        if (examples.length > 0) {\r\n          target.example = examples.map((e) => e.text.trim() as string).join(\"\\n\\n------------\\n\\n\");\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Gets the grouping based on library and source file */\r\n  public static getGroup(lib: string, source: string | undefined): string | undefined {\r\n    // HACK: Probably make private.\r\n    if (!source) {\r\n      return \"err:no-source\";\r\n    }\r\n    const splitSrc = source.split(\"/\");\r\n    switch (lib) {\r\n      case \"@salaxy/core\":\r\n        if (splitSrc[splitSrc.length - 1] === \"\") {\r\n          return \"v01.ts\";\r\n        }\r\n        return splitSrc[0];\r\n      case \"@salaxy/ng1\":\r\n        // For some reason, this changed to: \"salaxy-lib-ng1/src/ts/controllers/calc/CalcIrRowsController.ts\"\r\n        if (splitSrc.length > 5 && (splitSrc[3] === \"components\" || splitSrc[3] === \"controllers\")) {\r\n          return splitSrc[4];\r\n        }\r\n        if (splitSrc.length > 4) {\r\n          return splitSrc[3];\r\n        }\r\n        if (splitSrc.length > 2 && (splitSrc[0] === \"components\" || splitSrc[0] === \"controllers\")) {\r\n          return splitSrc[1];\r\n        }\r\n        if (splitSrc.length > 2 && (splitSrc[0] === \"components\" || splitSrc[0] === \"controllers\")) {\r\n          return splitSrc[1];\r\n        }\r\n        return splitSrc[0];\r\n    }\r\n  }\r\n\r\n  /** For an array of types, gets an array type strings  */\r\n  private static getTypeStrings(types: any[]): string[] {\r\n    if (!types) {\r\n      return [];\r\n    }\r\n    const result = types.map((t) => TypedocLogic.getTypeAsText(t));\r\n    return result.filter((x) => x) as string[];\r\n  }\r\n}\r\n","/**\r\n * Represents a rule for resolving a BIC code.\r\n */\r\nexport interface FiBics {\r\n  /** Minimum of a number range for a bank / bic code. */\r\n  min: number,\r\n  /** Maximum of a number range for a bank / bic code. */\r\n  max: number,\r\n  /** BIC code for the range */\r\n  label: string\r\n}\r\n\r\n/**\r\n * Helper for resolving the Bank Identifier Codes.\r\n */\r\nexport class BicHelper {\r\n  /**\r\n   * Returns the Bank Identifier Code (BIC) for the given IBAN.\r\n   * @param iban IBAN as string\r\n   * @returns Bank Identifier Code (BIC) for the given IBAN\r\n   */\r\n  public static getBicForIban(iban: string): string | undefined {\r\n    // Hack for international IBANs\r\n    if((iban ?? \"\").replace(/\\s/g, \"\").toUpperCase() == \"MT16FEMA16137000000000000637851\") {\r\n      return \"FEMAMTMA\";\r\n    }\r\n    const regex = /FI[a-zA-Z0-9]{2}\\s?([0-9]{4}\\s?){3}([0-9]{2})\\s?/;\r\n    if (!(iban ?? \"\").match(regex)) {\r\n      return undefined;\r\n    }\r\n    return this.resolveBic(iban);\r\n  }\r\n\r\n  private static resolveBic(iban: string): string | undefined {\r\n    const countryCode = iban.substring(0,2).toUpperCase();\r\n    if (countryCode !== \"FI\") {\r\n      return undefined;\r\n    }\r\n    let id: number;\r\n    const id1 = +iban.slice(4, 5);\r\n    switch(id1) {\r\n      case 3:\r\n        id = +iban.slice(4, 6);\r\n        break;\r\n      case 4:\r\n      case 7:\r\n        id = +iban.slice(4, 7);\r\n        break;\r\n      default:\r\n        id = +id1;\r\n        break;\r\n    }\r\n    return this.fiBics.find(x => id >= x.min && id <= x.max)?.label;\r\n  }\r\n\r\n  /**\r\n   * https://www.finanssiala.fi/maksujenvalitys/dokumentit/Suomalaiset_rahalaitostunnukset_ja_BIC-koodit.pdf\r\n   */\r\n  private static fiBics: Array<FiBics> = [\r\n    {min: 405, max: 405, label: \"HELSFIHH\"},\r\n    {min: 497, max: 497, label: \"HELSFIHH\"},\r\n    {min: 717, max: 717, label: \"BIGKFIH1\"},\r\n    {min: 470, max: 479, label: \"POPFFI22\"},\r\n    {min: 713, max: 713, label: \"CITIFIHX\"},\r\n    {min: 34, max: 34, label: \"DABAFIHH\"},\r\n    {min: 8, max: 8, label: \"DABAFIHH\"},\r\n    {min: 37, max: 37, label: \"DNBAFIHX\"},\r\n    {min: 31, max: 31, label: \"HANDFIHH\"},\r\n    {min: 799, max: 799, label: \"HOLVFIHH\"},\r\n    {min: 1, max: 2, label: \"NDEAFIHH\"},\r\n    {min: 5, max: 5, label: \"OKOYFIHH\"},\r\n    {min: 33, max: 33, label: \"ESSEFIHX\"},\r\n    {min: 39, max: 39, label: \"SBANFIHH\"},\r\n    {min: 36, max: 36, label: \"SBANFIHH\"},\r\n    {min: 38, max: 38, label: \"SWEDFIHH\"},\r\n    {min: 715, max: 715, label: \"ITELFIHH\"},\r\n    {min: 400, max: 400, label: \"ITELFIHH\"},\r\n    {min: 402, max: 403, label: \"ITELFIHH\"},\r\n    {min: 406, max: 408, label: \"ITELFIHH\"},\r\n    {min: 410, max: 412, label: \"ITELFIHH\"},\r\n    {min: 414, max: 421, label: \"ITELFIHH\"},\r\n    {min: 423, max: 432, label: \"ITELFIHH\"},\r\n    {min: 435, max: 452, label: \"ITELFIHH\"},\r\n    {min: 454, max: 464, label: \"ITELFIHH\"},\r\n    {min: 483, max: 493, label: \"ITELFIHH\"},\r\n    {min: 495, max: 496, label: \"ITELFIHH\"},\r\n    {min: 6, max: 6, label: \"AABAFI22\"},\r\n  ];\r\n}\r\n","import { UserDefinedRow } from \"../model\";\r\n\r\n/**\r\n * Represents the logic for handling user-defined rows.\r\n */\r\nexport class UserDefinedRowLogic {\r\n  /**\r\n   * Returns a blank UserDefinedRow object with the specified rowIndex.\r\n   *\r\n   * @param rowIndex - The index of the row.\r\n   * @returns A blank UserDefinedRow object.\r\n   */\r\n   public static getBlank(rowIndex: number): UserDefinedRow {\r\n    return {\r\n      rowIndex: rowIndex,\r\n      rowType: null,\r\n      count: null,\r\n      price: null,\r\n      message: null,\r\n      data: {},\r\n      accounting: {\r\n        dimensions: []\r\n      }\r\n    };\r\n  }\r\n}\r\n","import { WorkflowEvent } from \"../model\";\r\nimport { Dates } from \"../util/Dates\";\r\n\r\n/**\r\n * Logic class related to workflow features.\r\n */\r\nexport class WorkflowLogic {\r\n\r\n  /**\r\n   * Parses a workflow message string into an object. NOTE: Moved from WorkflowBadgeController.\r\n   * @param messageString Message string which will be exploded into an object.\r\n   * @returns Workflow event object.\r\n   */\r\n  public static parseWorkflowEventString(messageString: any): WorkflowEvent {\r\n    // [type] (Ui[ui]):[message] ([User] at [yyyy-MM-dd HH:mm] to [assignedTo] id [id])\r\n    const uiStartX = messageString.indexOf(\"(Ui\");\r\n    const uiEndX = messageString.indexOf(\"):\", uiStartX + 3);\r\n    const type = (messageString.substring(0, uiStartX - 1) || \"\");\r\n    const ui = messageString.substring(uiStartX + 3, uiEndX).toLowerCase();\r\n    let rest = messageString.substring(uiEndX + 3);\r\n    const messageEndX = rest.lastIndexOf(\"(\");\r\n    const message = rest.substring(0, messageEndX).trim();\r\n    rest = rest.substring(messageEndX + 1); // Remove (\r\n    rest = rest.substring(0, rest.length - 1); // Remove )\r\n    let id = \"\";\r\n    const idx = rest.lastIndexOf(\" id \");\r\n    if (idx >= 0) {\r\n      id = rest.substring(idx + 4);\r\n      rest = rest.substring(0, idx);\r\n    }\r\n    let assignedTo = \"\";\r\n    const aIdx = rest.lastIndexOf(\" to \");\r\n    if (aIdx >= 0) {\r\n      assignedTo = rest.substring(aIdx + 4);\r\n      rest = rest.substring(0, aIdx);\r\n    }\r\n    let time = \"\";\r\n    const tIdx = rest.lastIndexOf(\" at \");\r\n    if (tIdx >= 0) {\r\n      time = rest.substring(tIdx + 4);\r\n      rest = rest.substring(0, tIdx);\r\n      // time\r\n      time = time.replace(\" \", \"T\") + \"Z\";\r\n    }\r\n    const user = rest;\r\n    return {\r\n      id,\r\n      type,\r\n      ui,\r\n      user,\r\n      assignedTo,\r\n      message,\r\n      time,\r\n    } as WorkflowEvent;\r\n  }\r\n\r\n  /**\r\n   * Formats a workflow message object into a UI badge element.\r\n   * @param message Object that holds the necessary data for badge.\r\n   * @returns String of html.\r\n   */\r\n  public static formatWorkflowMessage = (message: WorkflowEvent): string => {\r\n    const pvm = Dates.getDatelyObject(message.time);\r\n    let formattedDateTime: string | undefined;\r\n    if (pvm) {\r\n      formattedDateTime = \" at \" + Dates.format(pvm, \"DD.MM.YYYY HH.mm\");\r\n    } else {\r\n      formattedDateTime = \"\";\r\n    }\r\n\r\n    const fullMessage = `${message.message} (${message.user}${formattedDateTime} id ${message.id})`;\r\n\r\n    return `<div><span class='badge bg-${message.ui}' title='${fullMessage}'>${message.message}</span></div>`;\r\n  };\r\n}","import { Ajax, CrudApiBase } from \"../infra\";\r\nimport { DatelyObject, Dates, OData, ODataQueryOptions, ODataResult } from \"../../util\";\r\nimport { Employment, EmployingRelation, EmploymentListItem } from \"../../model\";\r\nimport { EmploymentLogic } from \"../../logic\";\r\n\r\n/**\r\n * Provides CRUD access to employment relations.\r\n */\r\nexport class Employments extends CrudApiBase<Employment, EmploymentListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/employments\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): Employment {\r\n    return EmploymentLogic.getBlank();\r\n  }\r\n\r\n  /**\r\n   * Makes an OData query to the employment relation list with helper to filter active relations.\r\n   * @param activeDate The date for which the employment relations are fetched.\r\n   * Use \"all\" for all relations (active or passive), \"today\" for relations that are active today or a date string for specific date.\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public getODataActive(activeDate: \"all\" | \"today\" | DatelyObject, query: ODataQueryOptions | string): Promise<ODataResult<EmploymentListItem>> {\r\n    if (activeDate != \"today\" && activeDate != \"all\") {\r\n      activeDate = Dates.asDate(activeDate) ?? \"all\";\r\n    }\r\n    const baseUrl = this.getODataUrl() + \"?activeDate=\" + activeDate;\r\n    return OData.getOData<EmploymentListItem>(baseUrl, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Gets the active employment relations.\r\n   * @param date The date for which the employment relations are fetched.\r\n   * @returns A collection of full employment relation objects.\r\n   */\r\n  public getActiveFullObject(date: string): Promise<Employment[]> {\r\n    let url = `${this.baseUrl}/active`;\r\n    if (date) {\r\n      url += `?date=${Dates.asDate(date)}`;\r\n    }\r\n    return this.ajax.getJSON(url);\r\n  }\r\n\r\n  /**\r\n   * Returns a list of all employing relations of existing employers for the current account.\r\n   */\r\n  public getODataForEmployingRelations(options: ODataQueryOptions): Promise<ODataResult<any>> {\r\n    const fullPath = OData.getUrl(`${this.baseUrl}/employing`, options);\r\n    return this.ajax.getJSON(fullPath).then((data) => {\r\n      return OData.getODataResult<any>(data);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Returns the public employment profile for the worker.\r\n   * The profile contains for example project structure for the worker.\r\n   * @param owner Employment owner.\r\n   * @param id Employment id.\r\n   */\r\n  public getEmployingRelation(owner: string, id: string): Promise<EmployingRelation> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/employing/${id}@${owner}`);\r\n  }\r\n\r\n  /**\r\n   * Recalculates the pay statistics for the employment relation.\r\n   * @param employmentId The employment relation for which to calculate the statistics values.\r\n   * @returns A Promise with employment data containing pay stats.\r\n   */\r\n  public recalculateEmploymentPayStats(employmentId: string): Promise<Employment> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/${employmentId}/pay-stats/recalculate`, null);\r\n  }\r\n\r\n  /**\r\n   * Recalculates the pay statistics for all employment relations.\r\n   * @returns A Promise with employments containing pay stats.\r\n   */\r\n  public recalculatePayStats(): Promise<void> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/pay-stats/recalculate`, null);\r\n  }\r\n}\r\n","import { BlobFile, BlobFileType, FileListItem } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides access to user files (of the authenticated user).\r\n * PLEASE NOTE: Currently the API is read-only.\r\n * The methods for delete save etc. will return a \"Not supported.\" exceptions.\r\n */\r\nexport class Files extends CrudApiBase<BlobFile, FileListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/files\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /**\r\n   * Gets a list of files - filtered by a type\r\n   *\r\n   * @param type Logical file type.\r\n   *\r\n   * @returns A Promise with result data (list of files).\r\n   */\r\n  public filesOfType(type: BlobFileType): Promise<BlobFile[]> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/type/${type}`);\r\n  }\r\n\r\n  /**\r\n   * Returns the content url for the file id.\r\n   * The returned does not contain access token.\r\n   * @param id - Identifier of the file.\r\n   */\r\n  public getContentUrl(id: string): string {\r\n    return `${this.ajax.getServerAddress()}/${this.baseUrl}/${id}/stream`;\r\n  }\r\n\r\n  /**\r\n   * Returns the preview image url for the file id.\r\n   * The returned url does not contain access token.\r\n   * @param id - Identifier of the file.\r\n   */\r\n  public getPreviewUrl(id: string): string {\r\n    return `${this.ajax.getServerAddress()}/${this.baseUrl}/${id}/preview`;\r\n  }\r\n\r\n  /**\r\n   * Downloads the content as bytes.\r\n   * @param id - The identifier of the file.\r\n   */\r\n  public download(id: string): Promise<any> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/${id}/content`);\r\n  }\r\n\r\n  /**\r\n   * Client-side (synchronous) method for getting a new blank CRUD item as bases for UI binding.\r\n   * The basic idea is that all the child object properties should be non-null to avoid null reference exceptions.\r\n   * In special cases, when null is significant it may be used: e.g. Calculation.result is null untill the recalculation has been done.\r\n   * Strings, dates and booleans may be null (false if bool), but typically just undefined.\r\n   */\r\n  public getBlank(): BlobFile {\r\n    throw new Error(\"Not supported.\");\r\n  }\r\n\r\n  /**\r\n   * Deletes an single item from the sotrage\r\n   * @param id - Unique identifier for the object\r\n   * @throws Not supported\r\n   */\r\n  public delete(id: string): Promise<string> { // eslint-disable-line @typescript-eslint/no-unused-vars\r\n    throw new Error(\"Not supported.\");\r\n  }\r\n\r\n  /**\r\n   * Saves an item to the storage.\r\n   * If id is null, this is add/insert. If id exists, this is update.\r\n   * @param itemToSave - The item that is updated/inserted.\r\n   * @throws Not supported\r\n   */\r\n  public save(itemToSave: BlobFile): Promise<BlobFile> { // eslint-disable-line @typescript-eslint/no-unused-vars\r\n    throw new Error(\"Not supported.\");\r\n  }\r\n}\r\n","import { HolidaysLogic } from \"../../logic\";\r\nimport { HolidaySpecification, HolidaySpecificationForYear, HolidayYear, HolidayPayCalculationReportData } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for Holiday Years as a raw list and\r\n * more typically as holiday years relate to an employment relation.\r\n */\r\nexport class HolidayYears extends CrudApiBase<HolidayYear, never> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/holidays\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): HolidayYear {\r\n    return HolidaysLogic.getBlank();\r\n  }\r\n\r\n  /**\r\n   * Gets all the Holiday Year objects of specified year.\r\n   * @param year The holiday year to filter\r\n   * @returns A Promise with result data: The full holiday year objects.\r\n   */\r\n   public getForYear(year: number): Promise<HolidayYear[]> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/year/${year.toFixed()}`);\r\n  }\r\n\r\n  /**\r\n   * Gets all the Holiday Year objects.\r\n   * @returns A Promise with result data: The full holiday year objects.\r\n   */\r\n   public getForAllYears(): Promise<HolidayYear[]> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/year/all`);\r\n  }\r\n\r\n  /**\r\n   * Gets a default holiday specification based on employment relation information.\r\n   * This is presented to the user before calling initForEmployment().\r\n   * @param employmentId The employment relation ID from which the defaults are fetched.\r\n   * @returns Holiday specification that can be used for inititalization.\r\n   */\r\n  public getDefaultSpecForEmployment(employmentId: string): Promise<HolidaySpecificationForYear>  {\r\n    const url = `${this.baseUrl}/employment/${employmentId}/default-spec`;\r\n    return this.ajax.getJSON(url);\r\n  }\r\n\r\n  /**\r\n   * Initializes the missing holiday years for an employment relation.\r\n   * @param employmentId Identifier of the Employment relation that stores the holiday specification.\r\n   * @param holidaySpec The holiday specification tht should be used for inititalization. The spec is also stored to the Employment relation.\r\n   * @returns Holiday years for this employment relation - as initialized.\r\n   */\r\n  public initForEmployment(employmentId: string, holidaySpec: HolidaySpecification): Promise<HolidayYear[]>  {\r\n    const url = `${this.baseUrl}/employment/${employmentId}`;\r\n    return this.ajax.postJSON(url, holidaySpec);\r\n  }\r\n\r\n  /**\r\n   * Gets the Holiday Years for a specific employment relation.\r\n   * @param employmentId Identifier for the Employment relation.\r\n   * @returns A Promise with Holiday Years.\r\n   */\r\n  public getForEmployment(employmentId: string): Promise<HolidayYear[]> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/employment/${employmentId}`);\r\n  }\r\n\r\n  /**\r\n   * Gets the Holiday Years for the given employment relations.\r\n   * @param employmentIds Identifiers for the Employment relations.\r\n   * @returns A Promise with Holiday Years.\r\n   */\r\n  public getForEmployments(employmentIds: string[]): Promise<HolidayYear[]> {\r\n    if (employmentIds == null || employmentIds.length === 0) {\r\n      return Promise.resolve([]);\r\n    }\r\n    let method = `${this.baseUrl}/employment/set?`;\r\n    employmentIds.forEach((x) => { method += \"employmentIds=\" + encodeURIComponent(\"\" + x) + \"&\"; });\r\n    method = method.replace(/[?&]$/, \"\");\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /**\r\n   * Returns the  holiday pay calculation report data for a single employment.\r\n   * @param year The holiday year for calculation.\r\n   * @param employmentId Employment id.\r\n   * @returns A Promise with result data containing holiday pay calculation data.\r\n   */\r\n  public getHolidayPayCalculationReportData(year: number, employmentId: string): Promise<HolidayPayCalculationReportData> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/year/${year}/${employmentId}/holiday-pay-calc`);\r\n  }\r\n\r\n  /**\r\n   * Recalculates the holiday pay for the employment relation.\r\n   * @param year The holiday year for calculation.\r\n   * @param employmentId The employment relation for which to calculate the holiday pay.\r\n   * @returns A Promise with holiday year containing holiday pay.\r\n   */\r\n  public recalculateEmploymentHolidayPay(year: number, employmentId: string): Promise<HolidayYear> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/year/${year}/${employmentId}/holiday-pay/recalculate`, null);\r\n  }\r\n\r\n  /**\r\n   * Recalculates the holiday pay for all employment relations.\r\n   * @param year The holiday year for calculation.\r\n   * @returns A Promise with holiday years containing holiday pays.\r\n   */\r\n  public recalculateHolidayPay(year: number,): Promise<void> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/year/${year}/holiday-pay/recalculate`, null);\r\n  }\r\n}\r\n","import { Calculation, CalculationCollection, Invoice, InvoiceListItem, InvoicePreview, InvoiceStatus } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\nimport { Configs } from \"../../logic\";\r\n\r\n/**\r\n * Provides read access for authenticated user to access his/her own invoices.\r\n */\r\nexport class Invoices extends CrudApiBase<Invoice, InvoiceListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/invoices\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /**\r\n   * Client-side (synchronous) method for getting a new blank item as bases for UI binding.\r\n   * NOTE: At the moment, this method is pretty useless as you cannot save invoice items:\r\n   * You need to create them using createInvoice() method based on a calculation.\r\n   */\r\n  public getBlank(): Invoice {\r\n    return {\r\n      header: {},\r\n      rows: [],\r\n      payer: {},\r\n      recipient: {},\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Saving invoices is not supported.\r\n   * @param _item Invoice item (not used)\r\n   * @throws Error indicating operation is not supported\r\n   */\r\n  public save(_item: any): any {\r\n    throw new Error(\"Not supported.\");\r\n  }\r\n\r\n  /**\r\n   * Creates invoices to pay a salary calculation.\r\n   * @param calc Calculation for which the invoices are created.\r\n   * @param channel Payment channel to use.\r\n   * @returns Invoices which have been created in the Invoices queue.\r\n   */\r\n  public createInvoices(calc: Calculation, channel: string): Promise<Invoice[]> {\r\n    if (!channel) {\r\n      throw new Error(\"Payment channel must be specified.\");\r\n    }\r\n    calc.info ??= {};\r\n    calc.info.applicationId =  Configs.current?.applicationId;\r\n    const url = `${this.baseUrl}/create/${channel}`;\r\n    return this.ajax.postJSON(url, calc);\r\n  }\r\n\r\n  /**\r\n   * Creates invoices to pay a salary calculation(s).\r\n   * @param channel Payment channel to use.\r\n   * @param calcIds One or several identifiers of the Calculation for which the invoices are created.\r\n   * @returns Invoices which have been created in the Invoices queue.\r\n   */\r\n  public createInvoicesById(channel: string, ... calcIds: string[]): Promise<Invoice[]> {\r\n    if (!channel || !calcIds || calcIds.length < 1) {\r\n      throw new Error(\"One or more calculations Ids and Payment channel must be specified.\");\r\n    }\r\n    const url = `${this.baseUrl}/create-by-id/${channel}`;\r\n    return this.ajax.postJSON(url, calcIds);\r\n  }\r\n\r\n  /**\r\n   * Creates invoices to pay a set of salary calculation.\r\n   * @param channel Payment channel to use.\r\n   * @param payrollId Identifier for the Payroll for which the invoices are created.\r\n   * @returns Invoices which have been created in the Invoices queue.\r\n   */\r\n  public createInvoicesForPayroll(channel: string, payrollId: string): Promise<Invoice[]> {\r\n    if (!channel || !payrollId) {\r\n      throw new Error(\"The payroll ID and Payment channel must be specified.\");\r\n    }\r\n    const url = `${this.baseUrl}/create-for-payroll/${channel}/${payrollId}`;\r\n    return this.ajax.postJSON(url, null);\r\n  }\r\n\r\n  /**\r\n   * Previews invoices to pay a salary calculation(s) and fetches the ones that have already been created.\r\n   * Used for payment dialog preview: Does not yet save the invoices and does not do any other storage saves.\r\n   * @param channel Payment channel to use.\r\n   * @param calcs The calculations for which the invoices are created as preview (not saved to storage).\r\n   * Specified as ID's or unsaved Calculations or Payroll detail items.\r\n   * @returns Invoices (list item + metadata) which have been created for preview (not saved) or that were previously created.\r\n   */\r\n  public previewInvoices(channel: string, calcs: CalculationCollection): Promise<InvoicePreview[]> {\r\n    const itemsCount = (calcs.ids || []).length + (calcs.payrollIds || []).length + (calcs.calcs || []).length + (calcs.payrolls || []).length;\r\n    if (!channel || itemsCount < 1) {\r\n      throw new Error(\"One or more calculations/payroll/id and Payment channel must be specified.\");\r\n    }\r\n    const url = `${this.baseUrl}/preview-and-created/${channel}`;\r\n    return this.ajax.postJSON(url, calcs);\r\n  }\r\n\r\n  /**\r\n   * Makes a request for updating the status of the invoice.\r\n   * @param id Identifier for the invoice.\r\n   * @param status The requested new status of the invoice.\r\n   */\r\n  public requestStatusUpdate(id: string, status: InvoiceStatus): Promise<Invoice> {\r\n    const url = `${this.baseUrl}/${id}/status/${status}`;\r\n    return this.ajax.postJSON(url, null);\r\n  }\r\n\r\n  /**\r\n   * Returns content (PDF) url for an invoice.\r\n   * @param id The id of the invoice.\r\n   * @param inline If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   */\r\n  public getContentUrl(id: string, inline = false): string {\r\n    return this.ajax.getServerAddress()\r\n      + `${this.baseUrl}/${id}/content?inline=${inline}`\r\n      + `&access_token=${encodeURIComponent(this.ajax.getCurrentToken()!)}`;\r\n  }\r\n\r\n  /**\r\n   * Downloads a sepa file for created invoices based on invoice IDs.\r\n   * @param ids Ids of the invoices for the sepa payment.\r\n   * @param payerIbanNumber Payer iban number.\r\n   * @param bankPartyId Payer bank party id. Depends on the bank.\r\n   * @returns A Promise with result data array.\r\n   */\r\n  public getSepaByIds(ids: string[], payerIbanNumber?: string, bankPartyId?: string): Promise<string | undefined> {\r\n    if (ids == null || ids.length === 0) {\r\n      return Promise.resolve(undefined);\r\n    }\r\n    const idsPart = ids.map(x => \"ids=\" + encodeURIComponent(\"\" + x)).join(\"&\");\r\n    let url = `${this.baseUrl}/sepa?${idsPart}`;\r\n    if (payerIbanNumber) {\r\n      url += \"&payerIbanNumber=\" + encodeURIComponent(payerIbanNumber);\r\n    }\r\n    if (bankPartyId) {\r\n      url += \"&bankPartyId=\" + encodeURIComponent(bankPartyId);\r\n    }\r\n    return this.ajax.getHTML(url);\r\n  }\r\n\r\n  /**\r\n   * Retrieves the content (PDF) for an invoice by ID.\r\n   * @param id - The ID of the invoice\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the invoice PDF\r\n   */\r\n  public getContent(id: string, inline?: boolean): Promise<Blob>;\r\n  /**\r\n   * Retrieves the content (PDF) for an invoice object.\r\n   * @param invoice - The Invoice object\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the invoice PDF\r\n   */\r\n  public getContent(invoice: Invoice, inline?: boolean): Promise<Blob>;\r\n\r\n  /**\r\n   * Implementation of getContent() that handles both string ID and Invoice object inputs.\r\n   * For string IDs, makes a GET request to fetch the invoice PDF.\r\n   * For Invoice objects, makes a POST request with the full invoice data.\r\n   * @param idOrInvoice - Either an invoice ID string or Invoice object\r\n   * @param inline - If true, returns content inline in browser. If false, returns as download attachment.\r\n   * @returns Promise resolving to a Blob containing the invoice PDF\r\n   */\r\n  public getContent(idOrInvoice: string | Invoice, inline = false): Promise<Blob> {\r\n    if(typeof idOrInvoice === \"string\") {\r\n      return this.ajax.getBlob(`${this.baseUrl}/${idOrInvoice}/content?inline=${inline}`).then(response => response.data);\r\n    } else {\r\n      return this.ajax.postBlob(`${this.baseUrl}/content?inline=${inline}`, idOrInvoice).then(response => response.data);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the URL for downloading a SEPA file for the specified invoices.\r\n   * @param idsOrInvoices - Array of invoice IDs or Invoice objects to include in the SEPA file\r\n   * @param payerIbanNumber - Optional IBAN number of the payer\r\n   * @param bankPartyId - Optional bank party ID of the payer\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download). Defaults to false.\r\n   * @returns The complete URL for downloading the SEPA file, including server address and access token\r\n   */\r\n  public getSepaUrl(idsOrInvoices: string[] | Invoice[], payerIbanNumber?: string, bankPartyId?: string, inline = false): string {\r\n    const ids = idsOrInvoices.map(item => typeof item === \"string\" ? item : item.id);\r\n    const idsPart = ids.map(id => `ids=${encodeURIComponent(id)}`).join(\"&\");\r\n    let url = `${this.baseUrl}/sepa?${idsPart}&inline=${inline}`;\r\n\r\n    if (payerIbanNumber) {\r\n      url += `&payerIbanNumber=${encodeURIComponent(payerIbanNumber)}`;\r\n    }\r\n    if (bankPartyId) {\r\n      url += `&bankPartyId=${encodeURIComponent(bankPartyId)}`;\r\n    }\r\n    return this.ajax.getServerAddress()\r\n      + `${url}`\r\n      + `&access_token=${encodeURIComponent(this.ajax.getCurrentToken()!)}`;\r\n  }\r\n\r\n  /**\r\n   * Retrieves a SEPA file for the specified invoice IDs.\r\n   * @param ids - Array of invoice IDs to include in the SEPA file\r\n   * @param payerIbanNumber - Optional IBAN number of the payer\r\n   * @param bankPartyId - Optional bank party ID of the payer\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the SEPA file content\r\n   */\r\n  public getSepa(ids: string[], payerIbanNumber?: string, bankPartyId?: string, inline?: boolean): Promise<Blob>;\r\n  /**\r\n   * Retrieves a SEPA file for the specified invoice objects.\r\n   * @param invoices - Array of Invoice objects to include in the SEPA file\r\n   * @param payerIbanNumber - Optional IBAN number of the payer\r\n   * @param bankPartyId - Optional bank party ID of the payer\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the SEPA file content\r\n   */\r\n  public getSepa(invoices: Invoice[], payerIbanNumber?: string, bankPartyId?: string, inline?: boolean): Promise<Blob>;\r\n\r\n  /**\r\n   * Implementation of the SEPA file retrieval for both string IDs and Invoice objects.\r\n   * @param idsOrInvoices - Array of invoice IDs or Invoice objects to include in the SEPA file\r\n   * @param payerIbanNumber - Optional IBAN number of the payer\r\n   * @param bankPartyId - Optional bank party ID of the payer\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download). Defaults to false.\r\n   * @returns A Promise that resolves to a Blob containing the SEPA file content\r\n   */\r\n  public getSepa(idsOrInvoices: string[] | Invoice[], payerIbanNumber?: string, bankPartyId?: string, inline = false): Promise<Blob> {\r\n    const isStringArray = idsOrInvoices.every(item => typeof item === \"string\");\r\n    if(isStringArray) {\r\n      const idsPart = idsOrInvoices.map(id => `ids=${encodeURIComponent(id)}`).join(\"&\");\r\n      let url = `${this.baseUrl}/sepa?${idsPart}&inline=${inline}`;\r\n\r\n      if (payerIbanNumber) {\r\n        url += `&payerIbanNumber=${encodeURIComponent(payerIbanNumber)}`;\r\n      }\r\n      if (bankPartyId) {\r\n        url += `&bankPartyId=${encodeURIComponent(bankPartyId)}`;\r\n      }\r\n      return this.ajax.getBlob(url).then(response => response.data);\r\n    } else {\r\n      const url = `${this.baseUrl}/sepa?inline=${inline}`;\r\n      return this.ajax.postBlob(url, {\r\n        idsOrInvoices,\r\n        payerIbanNumber,\r\n        bankPartyId,\r\n      }).then(response => response.data);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the URL for downloading a finvoice file for an invoice.\r\n   * @param id - The ID of the invoice to get the finvoice URL for.\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns The complete URL for downloading the finvoice file, including server address and access token.\r\n   */\r\n  public getFinvoiceUrl(id: string, inline = false): string {\r\n    return this.ajax.getServerAddress()\r\n      + `${this.baseUrl}/${id}/finvoice?inline=${inline}`\r\n      + `&access_token=${encodeURIComponent(this.ajax.getCurrentToken()!)}`;\r\n  }\r\n\r\n  /**\r\n   * Gets a finvoice file for an invoice using the invoice ID.\r\n   * @param id - The ID of the invoice to get the finvoice for\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the finvoice file\r\n   */\r\n  public getFinvoice(id: string, inline?: boolean): Promise<Blob>;\r\n  /**\r\n   * Gets a finvoice file by posting the invoice object.\r\n   * @param invoice - The Invoice object to generate the finvoice for\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the finvoice file\r\n   */\r\n  public getFinvoice(invoice: Invoice, inline?: boolean): Promise<Blob>;\r\n\r\n  /**\r\n   * Implementation of getFinvoice() that handles both string ID and Invoice object inputs.\r\n   * @param idOrInvoice - Either an invoice ID string or Invoice object\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download). Defaults to false.\r\n   * @returns A Promise that resolves to a Blob containing the finvoice file\r\n   */\r\n  public getFinvoice(idOrInvoice: string | Invoice, inline = false): Promise<Blob> {\r\n    if(typeof idOrInvoice === \"string\") {\r\n      const url = `${this.baseUrl}/${idOrInvoice}/finvoice?inline=${inline}`;\r\n      return this.ajax.getBlob(url).then(response => response.data);\r\n    } else {\r\n      const url = `${this.baseUrl}/finvoice?inline=${inline}`;\r\n      return this.ajax.postBlob(url, idOrInvoice).then(response => response.data);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sends an e-invoice for an invoice.\r\n   * @param id - The ID of the invoice to send the e-invoice for\r\n   * @param receiver - The receiver of the e-invoice\r\n   * @param intermediator - The intermediator of the e-invoice\r\n   * @returns A Promise that resolves to the result of the e-invoice sending process\r\n   */\r\n  public sendEInvoice(id: string, receiver: string, intermediator: string): Promise<any> {\r\n    const url = `${this.baseUrl}/${id}/einvoice?receiver=${encodeURIComponent(receiver)}&intermediator=${encodeURIComponent(intermediator)}`;\r\n    return this.ajax.postJSON(url, {});\r\n  }\r\n}\r\n","import { irepr } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for authenticated user to access a his/her own Earnings Payments objects\r\n */\r\nexport class IrEarningsPayments extends CrudApiBase<irepr.EarningsPayment, any> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v01/api/epr\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n    this.baseUrl = `${ajax.getServerAddress()}/v01/api/epr`;\r\n  }\r\n\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): irepr.EarningsPayment {\r\n    return {\r\n      deliveryData: null\r\n    };\r\n  }\r\n\r\n  /** Get odata base url */\r\n  public getODataUrl(): any {\r\n    return this.baseUrl;\r\n  }\r\n\r\n/** Validate */\r\n  public validate (earningsPayment : irepr.EarningsPayment): Promise<irepr.EarningsPayment>  {\r\n    return this.ajax.postJSON(`${this.baseUrl}/validate`, earningsPayment);\r\n  }\r\n\r\n  /** Send schedule item to Incomes register queue */\r\n  public sendSchedule (aso: irepr.IrApiScheduleObject): Promise<irepr.IrApiScheduleObject>  {\r\n    return this.ajax.postJSON(`${this.baseUrl}/schedule`, aso);\r\n  }\r\n\r\n/** Get Service Bus queue item */\r\n  public getIrQueueItem (id: string): Promise<irepr.IrApiScheduleObject> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/${id}/schedule`);\r\n  }\r\n\r\n  /** Remove Service Bus queue item */\r\n  public removeIrQueueItem (id: string): Promise<any> {\r\n    return this.ajax.remove(`${this.baseUrl}/${id}/schedule`);\r\n  }\r\n}\r\n","import { irpsr } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for authenticated user to access a his/her own Earnings Payments objects\r\n */\r\nexport class IrPayerSummaries extends CrudApiBase<irpsr.PayerSummary, any> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v01/api/psr\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n    this.baseUrl = `${ajax.getServerAddress()}/v01/api/psr`;\r\n  }\r\n\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): irpsr.PayerSummary {\r\n    return {\r\n      deliveryData: null\r\n    };\r\n  }\r\n\r\n  /** Get odata base url */\r\n  public getODataUrl(): any {\r\n    return this.baseUrl;\r\n  }\r\n\r\n/** Validate */\r\n  public validate (earningsPayment : irpsr.PayerSummary): Promise<irpsr.PayerSummary>  {\r\n    return this.ajax.postJSON(`${this.baseUrl}/validate`, earningsPayment);\r\n  }\r\n\r\n  /** Send schedule item to Incomes register queue */\r\n  public sendSchedule (aso: irpsr.IrApiScheduleObject): Promise<irpsr.IrApiScheduleObject>  {\r\n    return this.ajax.postJSON(`${this.baseUrl}/schedule`, aso);\r\n  }\r\n\r\n  /** Get Service Bus queue item */\r\n  public getIrQueueItem (id: string): Promise<irpsr.IrApiScheduleObject> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/${id}/schedule`);\r\n  }\r\n\r\n  /** Remove Service Bus queue item */\r\n  public removeIrQueueItem (id: string): Promise<any> {\r\n    return this.ajax.remove(`${this.baseUrl}/${id}/schedule`);\r\n  }\r\n}\r\n","import { Message, MessageFrom, MessageListItem, MessageThread } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for Message threads.\r\n */\r\nexport class MessageThreads extends CrudApiBase<MessageThread, MessageListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/messages\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /** Gets a new blank message thread. */\r\n  public getBlank(): MessageThread {\r\n    return {\r\n      messages: [],\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Adds a new message with text.\r\n   * @param id Identifier of the messages thread.\r\n   * @param message The message to add.\r\n   */\r\n  public addMessage(id: string, message: Message): Promise<MessageThread> {\r\n    const method = `${this.baseUrl}/${id}/messages`;\r\n    return this.ajax.postJSON(method, message);\r\n  }\r\n\r\n  /**\r\n   * Gets the upload URL for attachment files of a message thread.\r\n   * This URL is compatible with the HTML forms standard multipart/form-data upload.\r\n   * @param id Identifier of the messages thread.\r\n   * @returns The URL for multipart/form-data upload\r\n   */\r\n  public getUploadUrl(id: string): string {\r\n    return `${this.ajax.getServerAddress()}${this.baseUrl}/${id}/messages/blobFileMessage`;\r\n  }\r\n\r\n  /**\r\n   * Marks all messages as read by a given party\r\n   * @param id Identifier of the thread\r\n   * @param readBy The party for which the messages are marked as read.\r\n   * @returns The entire thread with the messages marked as read.\r\n   */\r\n  public markAsRead(id: string, readBy: MessageFrom): Promise<MessageThread> {\r\n    const method = `${this.baseUrl}/${id}/read-by/${readBy}`;\r\n    return this.ajax.postJSON(method, null);\r\n  }\r\n\r\n  /**\r\n   * Sends an email notification to the owner of the message thread.\r\n   * @param id Identifier of the thread\r\n   * @param subject Subject of the notification.\r\n   * @param body Body of the notification.\r\n   * @returns A boolean indicating if the email was sent successfully.\r\n   */\r\n  public sendNotification(id: string, subject: string, body: string): Promise<MessageThread> {\r\n    const method = `${this.baseUrl}/${id}/notifications?subject=${encodeURIComponent(subject)}`;\r\n    return this.ajax.postJSON(method, JSON.stringify(body));\r\n  }\r\n}\r\n","import { Invoice, InvoiceDateKind, InvoiceListItem, InvoiceStatus, InvoiceStatusNotification, PaymentChannel, ReportType, Calculation, AccountingData } from \"../../model\";\r\nimport { DatelyObject, Dates, ODataQueryOptions, ODataResult } from \"../../util\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\nimport { Invoices } from \"./Invoices\";\r\n\r\n/**\r\n * Payment channels are methods that hanlde salary payments:\r\n * Paytrail / Palkkaus.fi Customer funds account handling, Finvoice, Accounting software, Banks Web Services etc.\r\n * This controller is for those channels to fetch Invoices and other data as well as to update payment feedback back to Palkkaus.fi.\r\n * The services can only be used by registered payment channels: Ask us if you wish to register.\r\n */\r\nexport class PaymentChannelApi extends CrudApiBase<Invoice, InvoiceListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL is set by the constructor because it is using the paymentChannel as part of URL. */\r\n  protected baseUrl: string = \"\";\r\n\r\n  /** Creates a new API class for a given PaymentChannel */\r\n  constructor(private paymentChannel: PaymentChannel, ajax: Ajax) {\r\n    super(ajax);\r\n    this.baseUrl = `/v03/api/payment-channel/${paymentChannel}`;\r\n  }\r\n\r\n  /**\r\n   * NOTE: Direct Save is currently not supported.\r\n   * Use createInvoices and updateStatus instead.\r\n   * This method is only for compatibility with CrudApiBase and in expectation of future needs (non-salary invoices).\r\n   * @param itemToSave - The item that is updated/inserted.\r\n   * @throws Not supported\r\n   */\r\n  public save(itemToSave: Invoice): Promise<Invoice> { // eslint-disable-line @typescript-eslint/no-unused-vars\r\n    throw new Error(\"Not supported.\");\r\n  }\r\n\r\n  /**\r\n   * Client-side (synchronous) method for getting a new blank item as bases for UI binding.\r\n   * NOTE: At the moment, this method is pretty useless as you cannot save invoice items:\r\n   * You need to create them using createInvoice() method based on a calculation.\r\n   */\r\n  public getBlank(): Invoice {\r\n    const invoice = new Invoices(this.ajax).getBlank();\r\n    invoice.header ??= {};\r\n    invoice.header.channel = this.paymentChannel;\r\n    return invoice;\r\n  }\r\n\r\n  /**\r\n   * Gets invoices with their full payload - including PDF content - filtering by a status.\r\n   * NOTE: This is designed mainly for long-running batch processes for reading unread Invoices.\r\n   * They can read the items in one read. For browser process we suggest OData query (with list item)\r\n   * and then fetching items one-by-one.\r\n   * This is for more http-queries, but each taking a shorter time so you can use )\r\n   * @param status Status filter for the query. Default is unread.\r\n   * @param start Optional start date for the period to query the invoices. If not set, defaults to last 14 days.\r\n   * @param end Optional end date for the period to query the invoices. If not set, today is used.\r\n   * @param dateKind Optional date specifier for the period: invoicing date (default), due date or logical date (like salary date).\r\n   * @returns Invoices which have been created in the Invoices queue.\r\n   */\r\n  public getInvoicesByStatus(status: InvoiceStatus = InvoiceStatus.Unread, start: DatelyObject | null = null, end: DatelyObject | null = null, dateKind: InvoiceDateKind = InvoiceDateKind.InvoiceDate): Promise<Invoice[]> {\r\n    if (this.paymentChannel) {\r\n      const startDate = Dates.asDate(start);\r\n      const endDate = Dates.asDate(end);\r\n      const url = `${this.baseUrl}/status/${status}?dateKind=${dateKind}&start=${startDate || \"\"}&end=${endDate || \"\"}`;\r\n      return this.ajax.getJSON(url);\r\n    } else {\r\n      return Promise.resolve<Invoice[]>([]);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Makes an OData query to the service's main OData method.\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public getOData(query: ODataQueryOptions | string): Promise<ODataResult<any>> {\r\n    if (this.paymentChannel) {\r\n      return super.getOData(query);\r\n    }\r\n    return Promise.resolve<ODataResult<any>>({items: [], count: 0});\r\n  }\r\n\r\n  /**\r\n   * Gets a single item based on identier\r\n   * @param id - Unique identifier for the object\r\n   * @returns A Promise with result data.\r\n   */\r\n  public getSingle(id: string): Promise<Invoice> {\r\n    if (this.paymentChannel) {\r\n      return super.getSingle(id);\r\n    }\r\n    return Promise.resolve<any>(undefined);\r\n  }\r\n\r\n  /**\r\n   * Updates the payment statuses of invoices.\r\n   * @param data Array of invoices to update.\r\n   */\r\n  public updateStatus(data: InvoiceStatusNotification[]): Promise<Invoice[]> {\r\n    const url = `${this.baseUrl}/update-status`;\r\n    return this.ajax.postJSON(url, data);\r\n  }\r\n\r\n  /**\r\n   * Returns content (PDF) url for an invoice.\r\n   * @param id The id of the invoice.\r\n   * @param inline If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   */\r\n  public getContentUrl(id: string, inline = false): string {\r\n    return `${this.ajax.getServerAddress()}${this.baseUrl}/${id}/content?inline=${inline}`\r\n      + `&access_token=${encodeURIComponent(this.ajax.getCurrentToken()!)}`;\r\n  }\r\n  /**\r\n   * Gets content (e.g. PDF) for an invoice using the invoice ID.\r\n   * @param channel - The payment channel to use\r\n   * @param id - The ID of the invoice to get content for\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the content\r\n   */\r\n  public getContent(channel: PaymentChannel, id: string, inline?: boolean): Promise<Blob>;\r\n  /**\r\n   * Gets content (e.g. PDF) for multiple invoices using their IDs.\r\n   * @param channel - The payment channel to use\r\n   * @param ids - Array of invoice IDs to get content for\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the content\r\n   */\r\n  public getContent(channel: PaymentChannel, ids: string[], inline?: boolean): Promise<Blob>;\r\n  /**\r\n   * Gets content (e.g. PDF) by posting the invoice object.\r\n   * @param channel - The payment channel to use\r\n   * @param invoice - The Invoice object to get content for\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the content\r\n   */\r\n  public getContent(channel: PaymentChannel, invoice: Invoice, inline?: boolean): Promise<Blob>;\r\n  /**\r\n   * Implementation of getContent() that handles string ID, string[] IDs and Invoice object inputs.\r\n   * @param channel - The payment channel to use\r\n   * @param idOrIdsOrInvoice - Either an invoice ID string, array of IDs, or Invoice object\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download). Defaults to false.\r\n   * @returns A Promise that resolves to a Blob containing the content\r\n   */\r\n  public getContent(channel: PaymentChannel, idOrIdsOrInvoice: unknown, inline = false): Promise<Blob> {\r\n    if((idOrIdsOrInvoice as Invoice)?.id) {\r\n      return this.ajax.postBlob(`${this.baseUrl}/${channel}/content?inline=${inline}`, idOrIdsOrInvoice).then(response => response.data);\r\n    }\r\n    if(Array.isArray(idOrIdsOrInvoice)) {\r\n      const idsPart = idOrIdsOrInvoice.map(x => \"ids=\" + encodeURIComponent(\"\" + x)).join(\"&\");\r\n      return this.ajax.getBlob(`${this.baseUrl}/${channel}/content?${idsPart}&inline=${inline}`).then(response => response.data);\r\n    } else {\r\n      return this.ajax.getBlob(`${this.baseUrl}/${channel}/${idOrIdsOrInvoice}/content?inline=${inline}`).then(response => response.data);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns sepa url for an invoice.\r\n   * @param channel The payment channel to use.\r\n   * @param id The id of the invoice.\r\n   * @param inline If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   */\r\n  public getSepaUrl(channel: PaymentChannel, id: string, inline = false): string {\r\n    return `${this.ajax.getServerAddress()}${this.baseUrl}/${channel}/${id}/sepa?inline=${inline}`\r\n      + `&access_token=${encodeURIComponent(this.ajax.getCurrentToken()!)}`;\r\n  }\r\n\r\n\r\n  /**\r\n   * Gets SEPA content for a single invoice using the invoice ID.\r\n   * @param channel - The payment channel to use\r\n   * @param id - The ID of the invoice to get SEPA content for\r\n   * @param payerIbanNumber - Optional IBAN number of the payer\r\n   * @param bankPartyId - Optional bank party ID\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the SEPA content\r\n   */\r\n  public getSepa(channel: PaymentChannel, id: string, payerIbanNumber?: string, bankPartyId?: string, inline?: boolean): Promise<Blob>;\r\n\r\n  /**\r\n   * Gets SEPA content for multiple invoices using their IDs.\r\n   * @param channel - The payment channel to use\r\n   * @param ids - Array of invoice IDs to get SEPA content for\r\n   * @param payerIbanNumber - Optional IBAN number of the payer\r\n   * @param bankPartyId - Optional bank party ID\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the SEPA content\r\n   */\r\n  public getSepa(channel: PaymentChannel, ids: string[], payerIbanNumber?: string, bankPartyId?: string, inline?: boolean): Promise<Blob>;\r\n\r\n  /**\r\n   * Gets SEPA content by posting the invoice object.\r\n   * @param channel - The payment channel to use\r\n   * @param invoice - The Invoice object to get SEPA content for\r\n   * @param payerIbanNumber - Optional IBAN number of the payer\r\n   * @param bankPartyId - Optional bank party ID\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the SEPA content\r\n   */\r\n  public getSepa(channel: PaymentChannel, invoice: Invoice, payerIbanNumber?: string, bankPartyId?: string, inline?: boolean): Promise<Blob>;\r\n\r\n  /**\r\n   * Implementation of getSepa() that handles string ID, string[] IDs, and Invoice object inputs.\r\n   * @param channel - The payment channel to use\r\n   * @param idOrIdsOrInvoice - Either an invoice ID string, array of IDs, or Invoice object\r\n   * @param payerIbanNumber - Optional IBAN number of the payer\r\n   * @param bankPartyId - Optional bank party ID\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download). Defaults to false.\r\n   * @returns A Promise that resolves to a Blob containing the SEPA content\r\n   */\r\n  public getSepa(channel: PaymentChannel, idOrIdsOrInvoice: unknown, payerIbanNumber?: string, bankPartyId?: string, inline = false): Promise<Blob> {\r\n    const getPayerIbanNumber = payerIbanNumber ? `&payerIbanNumber=${encodeURIComponent(payerIbanNumber)}` : \"\";\r\n    const getBankPartyId = bankPartyId ? `&bankPartyId=${encodeURIComponent(bankPartyId)}` : \"\";\r\n    if((idOrIdsOrInvoice as Invoice)?.id) {\r\n      return this.ajax.postBlob(`${this.baseUrl}/${channel}/sepa?inline=${inline}` + getPayerIbanNumber + getBankPartyId, idOrIdsOrInvoice).then(response => response.data);\r\n    }\r\n    if(Array.isArray(idOrIdsOrInvoice)) {\r\n      const idsPart = idOrIdsOrInvoice.map(x => \"ids=\" + encodeURIComponent(\"\" + x)).join(\"&\");\r\n      return this.ajax.getBlob(`${this.baseUrl}/${channel}/sepa?${idsPart}&inline=${inline}` + getPayerIbanNumber + getBankPartyId).then(response => response.data);\r\n    } else {\r\n      return this.ajax.getBlob(`${this.baseUrl}/${channel}/${idOrIdsOrInvoice}/sepa?inline=${inline}` + getPayerIbanNumber + getBankPartyId).then(response => response.data);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets a URL for accessing a report for a single invoice.\r\n   * @param channel - The payment channel to use\r\n   * @param id - The ID of the invoice to get the report URL for\r\n   * @param type - The type of report to generate\r\n   * @param isSensitive - Indicates if the report contains sensitive information\r\n   * @param target - The target for the report\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A URL string for accessing the report\r\n   */\r\n  public getReportUrl(channel: PaymentChannel, id: string, type: ReportType.SalarySlip | ReportType.EmployerReport | ReportType.PaymentReport | ReportType.AccountingReport | ReportType.Invoice, isSensitive?: boolean, target?: string, inline?: boolean): string {\r\n    const getIsSensitive = isSensitive ? \"&isSensitive=true\" : \"\";\r\n    const getTarget = target ? \"&target=\" + encodeURIComponent(target) : \"\";\r\n    return `${this.ajax.getServerAddress()}${this.baseUrl}/${channel}/${id}/${type}?inline=${inline}` + getIsSensitive + getTarget\r\n      + `&access_token=${encodeURIComponent(this.ajax.getCurrentToken()!)}`;\r\n  }\r\n\r\n  /**\r\n   * Gets a report for a single invoice using the invoice ID.\r\n   * @param channel - The payment channel to use\r\n   * @param id - The ID of the invoice to get the report for\r\n   * @param type - The type of report to generate\r\n   * @param isSensitive - Indicates if the report contains sensitive information\r\n   * @param target - The target for the report\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the report\r\n   */\r\n  public getReport(channel: PaymentChannel, id: string, type: ReportType.SalarySlip | ReportType.EmployerReport | ReportType.PaymentReport | ReportType.AccountingReport | ReportType.Invoice, isSensitive?: boolean, target?: string, inline?: boolean): Promise<Blob>;\r\n\r\n  /**\r\n   * Gets a report for multiple invoices using their IDs.\r\n   * @param channel - The payment channel to use\r\n   * @param ids - Array of invoice IDs to get the report for\r\n   * @param type - The type of report to generate\r\n   * @param isSensitive - Indicates if the report contains sensitive information\r\n   * @param target - The target for the report\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the report\r\n   */\r\n  public getReport(channel: PaymentChannel, ids: string[], type: ReportType.SalarySlip | ReportType.EmployerReport | ReportType.PaymentReport | ReportType.AccountingReport | ReportType.Invoice, isSensitive?: boolean, target?: string, inline?: boolean): Promise<Blob>;\r\n\r\n  /**\r\n   * Implementation of getReport() that handles string ID and string[] IDs inputs.\r\n   * @param channel - The payment channel to use\r\n   * @param idOrIds - Either an invoice ID string or array of IDs\r\n   * @param type - The type of report to generate\r\n   * @param isSensitive - Indicates if the report contains sensitive information\r\n   * @param target - The target for the report\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download). Defaults to false.\r\n   * @returns A Promise that resolves to a Blob containing the report\r\n   */\r\n  public getReport(channel: PaymentChannel, idOrIds: unknown, type: ReportType.SalarySlip | ReportType.EmployerReport | ReportType.PaymentReport | ReportType.AccountingReport | ReportType.Invoice, isSensitive?: boolean, target?: string, inline = false): Promise<Blob> {\r\n    const getIsSensitive = isSensitive ? \"&isSensitive=true\" : \"\";\r\n    const getTarget = target ? \"&target=\" + encodeURIComponent(target) : \"\";\r\n    if (Array.isArray(idOrIds)) {\r\n      const idsPart = idOrIds.map(x => \"ids=\" + encodeURIComponent(\"\" + x)).join(\"&\");\r\n      return this.ajax.getBlob(`${this.baseUrl}/${channel}/${type}?${idsPart}&inline=${inline}` + getIsSensitive + getTarget).then(response => response.data);\r\n    } else {\r\n      return this.ajax.getBlob(`${this.baseUrl}/${channel}/${idOrIds}/${type}?inline=${inline}` + getIsSensitive + getTarget).then(response => response.data);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets an accounting report for a single invoice using the invoice ID.\r\n   * @param channel - The payment channel to use\r\n   * @param id - The ID of the invoice to get the accounting report for\r\n   * @param target - The target for the report\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the accounting report\r\n   */\r\n  public getAccounting(channel: PaymentChannel, id: string, target?: string, inline?: boolean): Promise<AccountingData>;\r\n\r\n  /**\r\n   * Gets an accounting report for multiple invoices using their IDs.\r\n   * @param channel - The payment channel to use\r\n   * @param ids - Array of invoice IDs to get the accounting report for\r\n   * @param target - The target for the report\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download).\r\n   * @returns A Promise that resolves to a Blob containing the accounting report\r\n   */\r\n  public getAccounting(channel: PaymentChannel, ids: string[], target?: string, inline?: boolean): Promise<AccountingData>;\r\n\r\n  /**\r\n   * Implementation of getAccounting() that handles string ID and string[] IDs inputs.\r\n   * @param channel - The payment channel to use\r\n   * @param idOrIds - Either an invoice ID string or array of IDs\r\n   * @param target - The target for the report\r\n   * @param inline - If true, returns the content as inline (disposition) in browser.\r\n   * If false, the content is returned as an attachment (download). Defaults to false.\r\n   * @returns A Promise that resolves to a Blob containing the accounting report\r\n   */\r\n  public getAccounting(channel: PaymentChannel, idOrIds: unknown, target?: string, inline = false): Promise<AccountingData> {\r\n    const getTarget = target ? \"&target=\" + encodeURIComponent(target) : \"\";\r\n    if (Array.isArray(idOrIds)) {\r\n      const idsPart = idOrIds.map(x => \"ids=\" + encodeURIComponent(\"\" + x)).join(\"&\");\r\n      return this.ajax.getJSON(`${this.baseUrl}/${channel}/accounting?${idsPart}&inline=${inline}` + getTarget);\r\n    } else {\r\n      return this.ajax.getJSON(`${this.baseUrl}/${channel}/${idOrIds}/accounting?inline=${inline}` + getTarget);\r\n    }\r\n  }\r\n  /**\r\n   * Implementation of getCalculation() that handles string ID and Calculation object inputs.\r\n   * @param channel - The payment channel to use\r\n   * @param id - The ID of the invoice to get the calculation for\r\n   * @returns A Promise that resolves to a Calculation object\r\n   */\r\n  public getCalculation(channel: PaymentChannel, id: string): Promise<Calculation> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/${channel}/${id}/calculation`);\r\n  }\r\n\r\n  /**\r\n   * Implementation of getCalculations() that handles string[] IDs and Calculation[] inputs.\r\n   * @param channel - The payment channel to use\r\n   * @param ids - Array of invoice IDs to get the calculation for\r\n   * @returns A Promise that resolves to an array of Calculation objects\r\n   */\r\n  public getCalculations(channel: PaymentChannel, ids: string[]): Promise<Calculation[]> {\r\n    const _ids = ids.map(x => \"ids=\" + encodeURIComponent(\"\" + x)).join(\"&\");\r\n    return this.ajax.getJSON(`${this.baseUrl}/${channel}/calculation?${_ids}`);\r\n  }\r\n}","import { Calculation, CalculationListItem, PayrollDetails, PayrollListItem, InvoicePreview, Invoice } from \"../../model\";\r\nimport { OData, ODataResult, ODataQueryOptions } from \"../../util\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\nimport { Configs } from \"../../logic/Configs\";\r\nimport { PayrollLogic } from \"../../logic/PayrollLogic\";\r\n\r\n/**\r\n * EXPERIMENTAL v4 version of the Payrolls API.\r\n * NOTE: This is just a quick hack version => Not for production  before complete review!!\r\n */\r\nexport class Payrolls4 extends CrudApiBase<PayrollDetails, PayrollListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v04/api/payroll\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /**\r\n   * Saves the Payroll object to the storage.\r\n   * If id is null, this is add. If id exists, this is update.\r\n   * @param payroll - The Payroll object to add or update.\r\n   * @param options - Further save options.\r\n   * @param options.applyEmploymentDefaultRows - If true, applies the employment default rows to the calculation when creating a new payroll.\r\n   * @returns The saved Payroll object.\r\n   */\r\n  public save(payroll: PayrollDetails, options: {applyEmploymentDefaultRows: boolean} | undefined = undefined): Promise<PayrollDetails> {\r\n    if (payroll?.info) {\r\n      payroll.info.applicationId = Configs.current?.applicationId;\r\n    }\r\n    return super.save(payroll, options);\r\n  }\r\n\r\n  /** Client-side (synchronous) method for getting a new Payroll object as bases for UI binding. */\r\n  public getBlank(): PayrollDetails {\r\n    return PayrollLogic.getBlank();\r\n  }\r\n\r\n  /**\r\n   * Adds new calculations to the the Payroll and saves the Payroll object.\r\n   * The calculations are added based on employment relation id's.\r\n   * @param id The Id of the Payroll object to update and save.\r\n   * @param employmentIds Array of employment relation id's for which the a new calculation is added to the Payroll list.\r\n   * @returns Added calculations as list items.\r\n   */\r\n  public addEmployments(id: string, employmentIds: string[]): Promise<CalculationListItem[]> {\r\n    const method = `${this.baseUrl}/${id}/employments`;\r\n    return this.ajax.postJSON(method, employmentIds);\r\n  }\r\n\r\n\r\n  /**\r\n   * Makes an OData query to the calculations of a single Payroll.\r\n   * @param id The id of the payroll.\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public getCalcsOData(id: string, query: ODataQueryOptions | string): Promise<ODataResult<CalculationListItem>> {\r\n    const method = `${this.baseUrl}/${id}/calcs`;\r\n    return OData.getOData<CalculationListItem>(method, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Adds or updates the calculations to the the Payroll and saves the Payroll object.\r\n   * If calculation is read-only, a copy is made.\r\n   * @param id The id of the Payroll object to update and save.\r\n   * @param calculationIds Array of calculation ids that are added or updated to the Payroll list.\r\n   * @returns Added or updated calculations as list items.\r\n   */\r\n  public addCalculations(id: string, calculationIds: string[]): Promise<CalculationListItem[]> {\r\n    const method = `${this.baseUrl}/${id}/calcs`;\r\n    return this.ajax.postJSON(method, { ids: calculationIds });\r\n  }\r\n\r\n /**\r\n  * Adds or updates the calculations to the the Payroll and saves the Payroll object.\r\n  * If calculation is read-only, a copy is made.\r\n  * @param id The id of the Payroll object to update and save.\r\n  * @param calcsOrIds Array of calculations or calculation ids that are added or updated to the Payroll list.\r\n  * @param applyWorktime If true, resolves, recalculates and updates holidays and absences to the given calculations.\r\n  * @param applyEmploymentDefaultRows If true, adds the employment default rows to the given calculations.\r\n  * @param removeAllRows If true, removes all rows from the calculation before applying employment defaults.\r\n  * @returns Added or updated calculations as list items.\r\n  */\r\n  public saveCalculations(id: string, calcsOrIds: Calculation[], applyWorktime?: boolean, applyEmploymentDefaultRows?: boolean, removeAllRows?: boolean): Promise<CalculationListItem[]>;\r\n\r\n /**\r\n  * Adds or updates the calculations to the the Payroll and saves the Payroll object.\r\n  * If calculation is read-only, a copy is made.\r\n  * @param id The id of the Payroll object to update and save.\r\n  * @param calcsOrIds Array of calculations or calculation ids that are added or updated to the Payroll list.\r\n  * @param applyWorktime If true, resolves, recalculates and updates holidays and absences to the given calculations.\r\n  * @param applyEmploymentDefaultRows If true, adds the employment default rows to the given calculations.\r\n  * @param removeAllRows If true, removes all rows from the calculation before applying employment defaults.\r\n  * @returns Added or updated calculations as list items.\r\n  */\r\n  public saveCalculations(id: string, calcsOrIds: string[], applyWorktime?: boolean, applyEmploymentDefaultRows?: boolean, removeAllRows?: boolean): Promise<CalculationListItem[]>;\r\n\r\n /**\r\n  * Adds or updates the calculations to the the Payroll and saves the Payroll object.\r\n  * If calculation is read-only, a copy is made.\r\n  * @param id The id of the Payroll object to update and save.\r\n  * @param calcsOrIds Array of calculations or calculation ids that are added or updated to the Payroll list.\r\n  * @param applyWorktime If true, resolves, recalculates and updates holidays and absences to the given calculations.\r\n  * @param applyEmploymentDefaultRows If true, adds the employment default rows to the given calculations.\r\n  * @param removeAllRows If true, removes all rows from the calculation before applying employment defaults.\r\n  * @returns Added or updated calculations as list items.\r\n  */\r\n  public saveCalculations(id: string, calcsOrIds: unknown[], applyWorktime = false, applyEmploymentDefaultRows = false, removeAllRows = false): Promise<CalculationListItem[]> {\r\n    const method = `${this.baseUrl}/${id}/calcs`;\r\n    const options = (applyWorktime || applyEmploymentDefaultRows || removeAllRows) ? { applyWorktime, applyEmploymentDefaultRows, \"rowMergeOption\": (removeAllRows ? \"removeAllRows\":\"\") } : {};\r\n    return this.ajax.postJSON(this.getUrlWithOptions(method, options),\r\n    {\r\n      objects: calcsOrIds && calcsOrIds.length && typeof calcsOrIds[0] == \"object\" ? calcsOrIds : null,\r\n      ids: calcsOrIds && calcsOrIds.length && typeof calcsOrIds[0] == \"string\" ? calcsOrIds : null\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Merges the calculations by employment to the the Payroll and saves the Payroll object.\r\n   * If calculation is read-only, a copy is made.\r\n   * @param id The id of the Payroll object to update and save.\r\n   * @param calculationIds Array of calculation ids that are added or updated to the Payroll list.\r\n   * @param removeAllRows If true, removes all rows from the calculation.\r\n   * @param applyEmploymentDefaultRows If true, applies the employment default rows to the calculation.\r\n   * @returns Added or updated calculations as list items.\r\n   */\r\n   public mergeCalculations(id: string, calculationIds: string[], removeAllRows = false, applyEmploymentDefaultRows = false): Promise<CalculationListItem[]> {\r\n    const method = `${this.baseUrl}/${id}/calcs?isMerge=true&rowMergeOption=${(removeAllRows ? \"removeAllRows\":\"\")}&applyEmploymentDefaultRows=${!!applyEmploymentDefaultRows}`;\r\n    return this.ajax.postJSON(method, { ids: calculationIds});\r\n  }\r\n\r\n  /**\r\n   * Removes the calculation from the Payroll and saves the Payroll object.\r\n   * The calculation is completely deleted.\r\n   * This can only be done if the calculation and the payroll have not been paid yet.\r\n   * @param id The id of the Payroll  object.\r\n   * @param calculationId The id of the calculation to be removed from the Payroll list and deleted.\r\n   * @returns The Saved Payroll object.\r\n   */\r\n  public deleteCalculation(id: string, calculationId: string): Promise<PayrollDetails> {\r\n    const method = `${this.baseUrl}/${id}/calcs/${calculationId}?delete=true`;\r\n    return this.ajax.remove(method);\r\n  }\r\n\r\n  /**\r\n   * Removes the calculation from the Payroll and saves the Payroll object.\r\n   * The calculation is unlinked and it becomes an individual calculation in the draft list (and can then be processed individually).\r\n   * This can only be done if the calculation and the payroll have not been paid yet.\r\n   * @param id The id of the Payroll object.\r\n   * @param calculationId The id of the calculation which is unlinked from the Payroll list.\r\n   * @returns The Saved Payroll object.\r\n   */\r\n  public unlinkCalculation(id: string, calculationId: string): Promise<PayrollDetails> {\r\n    const method = `${this.baseUrl}/${id}/calcs/${calculationId}?delete=false`;\r\n    return this.ajax.remove(method);\r\n  }\r\n\r\n  /**\r\n   * Cancels the invoice or payment processing for the given Payroll.\r\n   * Please note that this is possible only if the channel supports the cancel action.\r\n   * @param id The id of the Payroll for which the cancellation is requested.\r\n   * @param calculationIds Array of calculation id's that are cancelled.\r\n   * @param excludePeriodicInvoices If true, excludes the periodic invoice adjust operation.\r\n   * @returns The Saved Payroll object.\r\n   */\r\n  public cancelInvoices(id: string, calculationIds: string[], excludePeriodicInvoices = true): Promise<PayrollDetails> {\r\n    const method = `${this.baseUrl}/${id}/cancel-invoices`;\r\n    const options = { excludePeriodicInvoices };\r\n    return this.ajax.postJSON(this.getUrlWithOptions(method, options), calculationIds);\r\n  }\r\n\r\n  /**\r\n   * Returns the invoice preview data for the given Payroll and calculations.\r\n   * @param id The id of the Payroll for which the preview is requested.\r\n   * @param calculationIds Array of calculation id's for which the preview is generated.\r\n   * @param excludePeriodicInvoices If true, excludes the periodic invoices from the preview.\r\n   * @returns Array of invoice preview objects.\r\n   */\r\n  public previewInvoices(id: string, calculationIds: string[], excludePeriodicInvoices = true): Promise<InvoicePreview[]> {\r\n    const method = `${this.baseUrl}/${id}/preview-invoices`;\r\n    const options = { excludePeriodicInvoices };\r\n    return this.ajax.postJSON(this.getUrlWithOptions(method, options), calculationIds);\r\n  }\r\n\r\n  /**\r\n   * Creates invoices for the given Payroll and calculations.\r\n   * @param id The id of the Payroll for which the invoices are created.\r\n   * @param calculationIds Array of calculation id's for which the invoices are created.\r\n   * @param excludePeriodicInvoices If true, excludes the periodic invoices from the creation.\r\n   * @returns Array of invoice objects.\r\n   */\r\n  public createInvoices(id: string, calculationIds: string[], excludePeriodicInvoices = true): Promise<Invoice[]> {\r\n    const method = `${this.baseUrl}/${id}/create-invoices`;\r\n    const options = { excludePeriodicInvoices };\r\n    return this.ajax.postJSON(this.getUrlWithOptions(method, options), calculationIds);\r\n  }\r\n}","import { TaxCard2019Logic } from \"../../logic\";\r\nimport { ApiListItem, Taxcard, TaxcardCalcDiffCheck, TaxcardListItem, TaxcardResult, WorkerCurrentTaxcards } from \"../../model\";\r\nimport { DatelyObject, Dates, Numeric, OData, ODataQueryOptions, ODataResult } from \"../../util\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD functionality as well as business logic for storing and using Finnish Taxcards and calculating Withholding tax.\r\n */\r\nexport class Taxcards extends CrudApiBase<Taxcard, TaxcardListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/taxcards\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /**\r\n   * Sets the auto-taxcard functionality on for the given personal ID.\r\n   * Auto-taxcard fetches the widtholding data automatically from the tax authorities API every time the salary is paid.\r\n   * NOTE: In current implementation, the income type is always Salary (00024: Palkkaa).\r\n   * @param personalId The Personal ID for the person to whom to set the taxcard as auto.\r\n   * @param firstSalaryDate First salary date if known: If this is close enought to the actual salary date we do not need to refetch the taxcard from the authorities.\r\n   * @returns The saved new automatic taxcard.\r\n   * If null, the tax authorities do not have a record for this personal id: It must be handled manually (cannot be set as shared).\r\n   */\r\n  public setAuto(personalId: string, firstSalaryDate: DatelyObject | null = null): Promise<Taxcard> {\r\n    const salaryDate = Dates.asDate(firstSalaryDate);\r\n    return this.ajax.postJSON(`${this.baseUrl}/auto-set?personalId=${personalId}&salaryDate=${salaryDate || \"\"}`, null);\r\n  }\r\n\r\n  /**\r\n   * Checks automatic taxcards from the tax authorities. If the taxcard has been checked within 2 days, does nothing.\r\n   * If there are no changes, updates the LastChecked date only. If there are changes, creates a new taxcard container and returns it instead.\r\n   * @param taxcardIds List of identifiers of taxcards that should be checked.\r\n   * @param salaryDate Salary date for which the taxcard is checked.\r\n   * @param forceUpdate If true, skips the 2 day rule and always checks from the tax athorities API.\r\n   * @returns The refreshed taxcards.\r\n   */\r\n  public refreshAuto(taxcardIds: string, salaryDate: DatelyObject | null = null, forceUpdate = false) : Promise<TaxcardListItem[]> {\r\n    const date = Dates.asDate(salaryDate);\r\n    return this.ajax.postJSON(`${this.baseUrl}/auto-refresh?&taxcardIds=${taxcardIds || \"\"}&salaryDate=${date || \"\"}&forceUpdate=${forceUpdate}`, null);\r\n  }\r\n\r\n  /**\r\n   * Client-side (synchronous) method for getting a new blank item as bases for UI binding.\r\n   * You need to set the Personal ID to bind the taxcard to an account.\r\n   */\r\n  public getBlank(): Taxcard {\r\n    return TaxCard2019Logic.getBlank(\"insert-personal-id\");\r\n  }\r\n\r\n  /**\r\n   * Saves a taxcard to the storage.\r\n   * Removes empty incomeLog entries because they may be added by data binding in UI.\r\n   * Entries are currently considered empty if both id and income are falsy: Typically income should be there,\r\n   * but taxable income may be zero on a calculation (entry with id) and it makes sense to keep the entry still.\r\n   * @param itemToSave - The item that is updated/inserted.\r\n   * @returns A Promise with result data as saved to the storage (contains id, createAt, owner etc.).\r\n   */\r\n  public save(itemToSave: Taxcard): Promise<Taxcard> {\r\n    itemToSave.incomeLog = itemToSave.incomeLog?.filter((x) => x.id || x.income) ?? [];\r\n    return super.save(itemToSave);\r\n  }\r\n\r\n  /**\r\n   * Commits the current DIFF to the saved item.\r\n   * Diff is the difference of income log saved in the taxcard to real paid calculations in the storage..\r\n   * It is returned in each Save / GetSingle.\r\n   * Modifications to non-modified items are also saved, but modifications to diff items have no effect: Diff is fetched from server.\r\n   * Removes empty incomeLog entries because they may be added by data binding in UI (see Save for details).\r\n   * @param itemToSave - The item that is updated/inserted with Diff saved.\r\n   * @returns A Promise with result data as saved to the storage (contains id, createAt, owner etc.).\r\n   */\r\n  public commitDiff(itemToSave: Taxcard): Promise<Taxcard> {\r\n    itemToSave.incomeLog = itemToSave.incomeLog?.filter((x) => x.id || x.income) ?? [];\r\n    return this.ajax.postJSON(`${this.baseUrl}?calcDiffCheck=${TaxcardCalcDiffCheck.CommitDiff}`, itemToSave);\r\n  }\r\n\r\n  /**\r\n   * Calculates the widhholding tax based on a given tax card.\r\n   *\r\n   * @param id - Identifier of the tax card.\r\n   * @param income - New salary or other income, for which the widthholding tax is calculated.\r\n   *\r\n   * @returns A Promise with result data (TaxCardResult).\r\n   */\r\n  public calculateWithId(id: string, income: number): Promise<TaxcardResult> {\r\n    const method = `${this.baseUrl}/calculate/${encodeURIComponent(\"\" + (id ?? \"\"))}?income=${Numeric.parseNumber(income)}`;\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /**\r\n   * Calculates the widhholding tax based on a given tax card\r\n   *\r\n   * @param income - New salary or other income, for which the widthholding tax is calculated.\r\n   * @param taxCard - Tax card based on which the widthholding tax is calculated. This method will not connect to database in any way so the taxcard may or may not be stored.\r\n   *\r\n   * @returns A Promise with result data (TaxCardResult).\r\n   */\r\n  public calculate(income: number, taxCard: Taxcard): Promise<TaxcardResult> {\r\n    const method = `${this.baseUrl}/calculate?income=${Numeric.parseNumber(income)}`;\r\n    return this.ajax.postJSON(method, taxCard);\r\n  }\r\n\r\n  /**\r\n   * Gets all the current taxcards for the current Worker account:\r\n   * The cards that the account has uploaded as well as the cards created by all Employers.\r\n   * This method can only be run for a personal account (not for a Company account).\r\n   * @returns The cards that the account has uploaded as well as the cards created by all Employers.\r\n   * Only current cards (not expired) are provided.\r\n   */\r\n  public getMyTaxcards(): Promise<WorkerCurrentTaxcards> {\r\n    const method = `${this.baseUrl}/my`;\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /**\r\n   * Gets all the current taxcards for an employment relation:\r\n   * All the cards by the Employer, but also the latest card uploaded by the Worker herself.\r\n   * @param employmentId The employment id for which to search the taxcards.\r\n   * @param paymentDate Payment date for which the validity (current card in use) is calculated. If null, Next workday is used.\r\n   * This may be changed to next default payment date without that being a breaking change.\r\n   * @returns The cards created by the Employer and also the latest card uploaded by the Worker herself.\r\n   * Only current cards (not expired) are provided.\r\n   */\r\n  public getEmploymentTaxcards(employmentId: string, paymentDate: DatelyObject): Promise<WorkerCurrentTaxcards> {\r\n    let method = `${this.baseUrl}/employment/${employmentId}`;\r\n    const date = Dates.asDate(paymentDate);\r\n    if (date) {\r\n      method += \"?paymentDate=\" + date;\r\n    }\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /**\r\n   * Returns the url where to post the tax card file using form post ('multipart/form-data').\r\n   */\r\n  public getUploadUrl(): string {\r\n    return `${this.ajax.getServerAddress()}${this.baseUrl}/file`;\r\n  }\r\n\r\n  /**\r\n   * Returns the url where to get the tax card file with authentication token.\r\n   */\r\n  public getDownloadUrl(taxCard: Taxcard): string | null {\r\n    if (taxCard && taxCard.card && taxCard.card.fileUri) {\r\n      return `${this.ajax.getServerAddress()}${this.baseUrl}/file/${taxCard.id}?access_token=${this.ajax.getCurrentToken()}`;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Returns the url where to get the tax card preview image with authentication token.\r\n   * @param taxcard Either an API object or list item for which the preview is shown.\r\n   * For Workers, supports Employer owned taxcards by passing owner ID in addition to just ID.\r\n   */\r\n  public getPreviewUrl(taxcard: Taxcard | TaxcardListItem | ApiListItem): string | null {\r\n    if (((taxcard as Taxcard)?.card || {} as any).previewUri || ((taxcard as ApiListItem)?.data || {} as any).previewUri) {\r\n      return `${this.ajax.getServerAddress()}${this.baseUrl}/preview/${taxcard.id}@${taxcard.owner}?access_token=${this.ajax.getCurrentToken()}`;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Gets a list of all non-terminated employments of the employer and resolves their current taxcards.\r\n   * The current taxcards may be for the current year or for next year if the current date is either December or January.\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   * @param paymentDate Payment date for which the validity (current card in use) is calculated. If null, Next workday is used.\r\n   * This may be changed to next default payment date without that being a breaking change.\r\n   */\r\n  public getCurrentCards(query: ODataQueryOptions | string, paymentDate: DatelyObject | null = null ): Promise<ODataResult<any>> {\r\n    const date = Dates.asDate(paymentDate);\r\n    const url = \"/v03/api/taxcards/current\" + (date ? (\"/\" + date) : \"\");\r\n    return OData.getOData<any>(url, query, this.ajax);\r\n  }\r\n}\r\n","import { Dates } from \"../../util\";\r\nimport { WorkflowData, WorkflowEvent, WorkerAccount, WorkerListItem, AvatarPictureType, EmploymentRelationSalaryPaymentMethod, AgeRange, LegalEntityType } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access to Workers (employees) created by the employer\r\n * or to whom the employer has paid salaries.\r\n */\r\nexport class Workers extends CrudApiBase<WorkerAccount, WorkerListItem> {\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v02/api/accounts/workers\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /** Gets the OData URL */\r\n  public getODataUrl(): string {\r\n    return \"/v03-rc/api/accounts/workers\";\r\n  }\r\n\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): WorkerAccount {\r\n    return {\r\n      avatar: {\r\n        pictureType: AvatarPictureType.Icon,\r\n      },\r\n      employment: {\r\n        irIncomeEarnerTypes: [],\r\n        holidays: {},\r\n        usecase: {\r\n          data: {},\r\n        },\r\n        work: {\r\n          salaryDefaults: [],\r\n        },\r\n        salaryPaymentMethod: EmploymentRelationSalaryPaymentMethod.BankAccount\r\n      },\r\n      contact: {},\r\n      ageRange: AgeRange.Age18_52,\r\n      entityType: LegalEntityType.PersonCreatedByEmployer,\r\n      id: null,\r\n      createdAt: Dates.getToday(),\r\n      updatedAt: Dates.getToday(),\r\n      isReadOnly: null,\r\n    };\r\n  }\r\n\r\n  /** Saves the Worker account ot the storage */\r\n  public save(itemToSave: WorkerAccount): Promise<WorkerAccount> {\r\n    return super.save(itemToSave);\r\n  }\r\n\r\n  /**\r\n   * Adds/updates the workflow event for the item.\r\n   *\r\n   * @param item - Item for which to set the workflow event.\r\n   * @param wfEvent - Event to add or update.\r\n   * @returns Workflow data for the item.\r\n   */\r\n  public saveWorkflowEvent(item: WorkerAccount, wfEvent: WorkflowEvent): Promise<WorkflowData> {\r\n    const id = item.employmentId;\r\n    return this.ajax.postJSON(`/v03/api/employments/${id}/workflows`, wfEvent);\r\n  }\r\n\r\n  /**\r\n   * Deletes the workflow item or items from the item.\r\n   * @param item - Item for which to delete workflow events.\r\n   * @param wfIdOrType - Event id or type.\r\n   * @returns A Promise with result data \"Object deleted\".\r\n   */\r\n  public deleteWorkflowEvent(item: WorkerAccount, wfIdOrType: string): Promise<string> {\r\n    const id = item.employmentId;\r\n    return this.ajax.remove(`/v03/api/employments/${id}/workflows/${wfIdOrType}`);\r\n  }\r\n\r\n/**\r\n * Gets a single workflow event for the item.\r\n * @param item - Item for which to get the single event.\r\n * @param wfId - Event id or type.\r\n * @returns A Promise with event data\".\r\n */\r\n  public getWorkflowEvent(item: WorkerAccount, wfId: string): Promise<WorkflowEvent> {\r\n    const id = item.employmentId;\r\n    return this.ajax.getJSON(`/v03/api/employments/${id}/workflows/events/${wfId}`);\r\n  }\r\n}\r\n","import { ServiceModel, ServiceModelListItem } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for Service Models\r\n */\r\nexport class ServiceModels extends CrudApiBase<ServiceModel, ServiceModelListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/service-models\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): ServiceModel {\r\n    return {\r\n      features: {},\r\n      accounting: {\r\n        targets: []\r\n      },\r\n      pricing: {},\r\n      payments: {},\r\n      branding: {},\r\n      reporting: {},\r\n      site: {}\r\n    };\r\n  }\r\n}\r\n","import { Usecase, UsecaseListItem } from \"../../model\";\r\nimport { OpenAPIV3 } from \"../../@types\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\nimport { StorageLogic } from \"../../logic\";\r\n\r\n/**\r\n * Provides CRUD access for Service Models\r\n */\r\nexport class Usecases extends CrudApiBase<Usecase, UsecaseListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/usecases\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): Usecase {\r\n    return {\r\n      actions: [],\r\n      schema: this.getTempSchema(),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Saves an item to the storage.\r\n   * If id is null, this is add/insert. If id exists, this is update.\r\n   * @param itemToSave - The item that is updated/inserted.\r\n   * @returns A Promise with result data as saved to the storage (contains id, createAt, owner etc.).\r\n   */\r\n  public save(itemToSave: Usecase): Promise<Usecase> {\r\n    return super.save(itemToSave);\r\n  }\r\n\r\n  /**\r\n   * Gets an URL to a resource (currently HTML user interface) in the usecase.\r\n   * @param uri Full uri of the usecase.\r\n   * @param type Type of the resource to fetch. Only \"html\" is currently supported.\r\n   * @param ix Index number of the view if there are several. Default is 0.\r\n   */\r\n  public getResourceUrl(uri: string, type: \"js\" | \"html\", ix = 0): string {\r\n    const id = StorageLogic.getIdAtOwner(uri);\r\n    if (type == \"js\") {\r\n      throw new Error(\"Resource URL for JavaScript is not yet supported.\");\r\n    }\r\n    return `${this.ajax.getServerAddress()}${this.getBaseUrl()}/${id}/views/${ix.toFixed()}`;\r\n  }\r\n\r\n  private getTempSchema(): OpenAPIV3.Document {\r\n    return {\r\n      openapi: \"3.0.1\",\r\n      info: {\r\n        title: \"Usecase schema\",\r\n        version: \"1.0\"\r\n      },\r\n      paths: {},\r\n      components: {\r\n        schemas: {\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n","import { Calculation, HouseholdYear, HouseholdYearListItem, HouseholdYearProcessingStatus } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for Service Models\r\n */\r\nexport class HouseholdYears extends CrudApiBase<HouseholdYear, HouseholdYearListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03-rc/api/household-years\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): HouseholdYear {\r\n    return {\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Returns all the paid calculations for the given year.\r\n   * @param year - Year for the calculations.\r\n   * @returns Array of calculations.\r\n   */\r\n  public getCalculationsForYear(year?: number | null): Promise<Calculation[]> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/calculations?year=${encodeURIComponent(year ?? \"\")}`);\r\n  }\r\n\r\n  /**\r\n   * Updates the household data in the calculation\r\n   * @param calculation - Calculation to update.\r\n   * @returns Updated calculation.\r\n   */\r\n  public updateCalculation(calculation: Calculation): Promise<Calculation> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/calculations`, calculation);\r\n  }\r\n\r\n  /**\r\n   * Makes a request for updating the processing status of the household deduction.\r\n   * @param id Identifier for the year.\r\n   * @param processingStatus The requested new processing status of the houisehold deduction.\r\n   */\r\n  public requestProcessingStatusUpdate(id: string, processingStatus: HouseholdYearProcessingStatus): Promise<HouseholdYear> {\r\n    const url = `${this.baseUrl}/${id}/processingStatus/${processingStatus}`;\r\n    return this.ajax.postJSON(url, null);\r\n  }\r\n\r\n  /**\r\n   * Downloads pdf reports for the yearly household deduction.\r\n   */\r\n  public downloadPdfs(id: string): Promise<Array<{bytes: string, fileName: string}>> {\r\n    const url = `${this.baseUrl}/${id}/pdfs`;\r\n    return this.ajax.getJSON(url);\r\n  }\r\n}\r\n","import { Ajax, CrudApiBase } from \"../infra\";\r\nimport { Record, RecordListItem } from \"../../model\";\r\n\r\n/**\r\n * Provides CRUD access to records.\r\n */\r\nexport class Records extends CrudApiBase<Record, RecordListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/records\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): Record {\r\n    return {\r\n      attachments: [],\r\n      usecase: {\r\n        data: {},\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Returns all distinct record types from all  records.\r\n   * @returns A Promise with result data array.\r\n   */\r\n   public getRecordTypes(): Promise<string[]> {\r\n    return this.ajax.getJSON(`${this.baseUrl}/recordTypes`);\r\n  }\r\n\r\n  /**\r\n   * Returns all records for the entity.\r\n   * @param entityType Entity type of the business object.\r\n   * @param entityId Optional id for the business object.\r\n   */\r\n  public getForEntity(entityType: \"account\" | \"employment\" | string, entityId: string | undefined = undefined): Promise<Record[]> {\r\n    const url = entityId ? `${this.baseUrl}/${entityType}/${entityId}` : `${this.baseUrl}/${entityType}`;\r\n    return this.ajax.getJSON(url);\r\n  }\r\n\r\n  /**\r\n   * Gets the upload URL for attachment files.\r\n   * This URL is compatible with the HTML forms standard multipart/form-data upload.\r\n   * @param entityType Entity type of the business object.\r\n   * @param entityId Optional id for the business object.\r\n   * @returns The URL for multipart/form-data upload\r\n   */\r\n  public getRecordUploadUrl(entityType: \"account\" | \"employment\" | string, entityId: string | undefined = undefined): string {\r\n    const url = entityId ? `${this.ajax.getServerAddress()}${this.baseUrl}/${entityType}/${entityId}/files` : `${this.ajax.getServerAddress()}${this.baseUrl}/${entityType}/files`;\r\n    return url;\r\n  }\r\n}\r\n","import { Template, TemplateListItem } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for business templates.\r\n */\r\nexport class BusinessTemplates extends CrudApiBase<Template, TemplateListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/templates\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): Template {\r\n    return {};\r\n  }\r\n}\r\n","import { ReferenceObject, ReferenceObjectListItem } from \"../../model\";\r\nimport { Ajax, CrudApiBase } from \"../infra\";\r\n\r\n/**\r\n * FOR TESTING OR DEVELOPMENT USE ONLY - NOT FOR PRODUCTION USE.\r\n * =============================================================\r\n * Provides CRUD access for Reference Objects.\r\n * The implementation is based on the current development conventions.\r\n * The reference objects have no meaning or use outside development or testing environments, and they\r\n * should not be used in production for any business purpose.\r\n */\r\nexport class ReferenceObjects extends CrudApiBase<ReferenceObject, ReferenceObjectListItem> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/reference-objects\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n  /** Client-side (synchronous) method for getting a new blank item as bases for UI binding. */\r\n  public getBlank(): ReferenceObject {\r\n    return {\r\n      header: {},\r\n      events: [],\r\n      usecase: {\r\n        data: {}\r\n      },\r\n      workflowData: {\r\n        events: [],\r\n      },\r\n     };\r\n  }\r\n}\r\n","import {\r\n  CompanyAccount,\r\n  PersonAccount,\r\n  WorkflowData,\r\n  WorkflowEvent,\r\n} from \"../model\";\r\nimport { Ajax } from \"./infra\";\r\n\r\n/**\r\n * Methods for updating account information\r\n */\r\nexport class Accounts {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  constructor(private ajax: Ajax) {}\r\n\r\n  /**\r\n   * Gets the current company account if the current account is a company.\r\n   * NOTE: Typically the account data is fetched in Session check => You do not need to fetch it separately.\r\n   *\r\n   * @returns A Promise with result data (Company account or null).\r\n   */\r\n  public getCompany(): Promise<CompanyAccount> {\r\n    return this.ajax.getJSON(\"/accounts/company\");\r\n  }\r\n\r\n  /**\r\n   * Gets the current Person account:\r\n   * Either the current account or the Primary contact person account if the current account is a company.\r\n   * NOTE: Typically the current account data is fetched in Session check => You do not need to fetch it separately.\r\n   * => Only use this to fetch the Primary contact person account if the current account is a company.\r\n   *\r\n   * @returns A Promise with result data (Personal account).\r\n   */\r\n  public getPerson(): Promise<PersonAccount> {\r\n    return this.ajax.getJSON(\"/accounts/person\");\r\n  }\r\n\r\n  /**\r\n   * Saves the avatar and contact for the current Person account:\r\n   * Either the current account or the Primary contact person account if the current account is a company.\r\n   *\r\n   * @returns A Promise with result data (Personal account).\r\n   */\r\n  public savePerson(personAccount: PersonAccount): Promise<PersonAccount> {\r\n    return this.ajax.postJSON(\"/accounts/person\", personAccount);\r\n  }\r\n\r\n  /**\r\n   * Returns the url where to post the avatar file\r\n   */\r\n  public getAvatarUploadUrl(): string {\r\n    return `${this.ajax.getApiAddress()}/accounts/avatar`;\r\n  }\r\n\r\n  /**\r\n   * Switches the current web site usage role.\r\n   *\r\n   * @param role - household or worker. You cannot change to company at the moment using this method.\r\n   *\r\n   * @returns A Promise with result data (new role).\r\n   */\r\n  public switchRole(role: \"worker\" | \"household\"): Promise<\"worker\"|\"household\"> {\r\n    return this.ajax.postJSON(\"/accounts/switchRole?role=\" + role, {});\r\n  }\r\n\r\n  /**\r\n   * Adds/updates the workflow event for the item.\r\n   *\r\n   * @param item - Item for which to set the workflow event.\r\n   * @param wfEvent - Event to add or update.\r\n   * @returns Workflow data for the item.\r\n   */\r\n  public saveWorkflowEvent(item: PersonAccount | CompanyAccount, wfEvent: WorkflowEvent): Promise<WorkflowData> {\r\n    return this.ajax.postJSON(`/accounts/workflows`, wfEvent);\r\n  }\r\n\r\n  /**\r\n   * Deletes the workflow item or items from the item.\r\n   * @param item - Item for which to delete workflow events.\r\n   * @param wfIdOrType - Event id or type.\r\n   * @returns A Promise with result data \"Object deleted\".\r\n   */\r\n  public deleteWorkflowEvent(item: PersonAccount | CompanyAccount, wfIdOrType: string): Promise<string> {\r\n    return this.ajax.remove(`/accounts/workflows/${wfIdOrType}`);\r\n  }\r\n\r\n  /**\r\n   * Gets a single workflow event for the item.\r\n   * @param item - Item for which to get the single event.\r\n   * @param wfId - Event id.\r\n   * @returns A Promise with event data.\r\n   */\r\n  public getWorkflowEvent(item: PersonAccount | CompanyAccount, wfId: string): Promise<WorkflowEvent> {\r\n    return this.ajax.getJSON(`/accounts/workflows/events/${wfId}`);\r\n  }\r\n}","import { Onboarding } from \"../model\";\r\nimport { Ajax } from \"./infra\";\r\n\r\n/**\r\n * Provides functionality for Onboarding:\r\n * The process where the user becomes a user of Salaxy service and an account is created for him / her / the company.\r\n */\r\nexport class Onboardings {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  constructor(private ajax: Ajax) {}\r\n\r\n  /**\r\n   * Gets a single Onboarding object based on identier\r\n   *\r\n   * @param id - Unique identifier for the object\r\n   *\r\n   * @returns A Promise with result data (Onboarding).\r\n   */\r\n  public getOnboarding(id: string): Promise<Onboarding> {\r\n    return this.ajax.getJSON(\"/onboarding/\" + encodeURIComponent(\"\" + (id ?? \"\")));\r\n  }\r\n\r\n  /**\r\n   * Gets a single Onboarding object for authorizing account\r\n   *\r\n   * @param accountId - Account id of the authorizing account.\r\n   *\r\n   * @returns A Promise with result data (Onboarding).\r\n   */\r\n  public getOnboardingForAccount(accountId: string): Promise<Onboarding> {\r\n    return this.ajax.getJSON(\"/onboarding/account/\" + encodeURIComponent(\"\" + accountId));\r\n  }\r\n\r\n  /**\r\n   * Creates or updates an Onboarding.\r\n   *\r\n   * @param onboarding - The Onboarding object that is updated.\r\n   *\r\n   * @returns A Promise with result data (saved Onboarding).\r\n   */\r\n  public saveOnboarding(onboarding: Onboarding): Promise<Onboarding> {\r\n    return this.ajax.postJSON(\"/onboarding\", onboarding);\r\n  }\r\n\r\n  /**\r\n   * Deletes an onboarding object from the storage\r\n   *\r\n   * @param id - Unique identifier for the object\r\n   *\r\n   * @returns A Promise with result data \"Object deleted\".\r\n   */\r\n  public deleteOnboarding(id: string): Promise<string> {\r\n    return this.ajax.remove(\"/onboarding/\" + encodeURIComponent(\"\" + (id ?? \"\")));\r\n  }\r\n\r\n  /**\r\n   * Commits onboarding and creates/updates the account.\r\n   *\r\n   * @param onboarding - The Onboarding object that is to be committed..\r\n   *\r\n   * @returns A Promise with result data (committed Onboarding).\r\n   */\r\n  public commitOnboarding(onboarding: Onboarding): Promise<Onboarding> {\r\n    return this.ajax.postJSON(\"/onboarding/commit\", onboarding);\r\n  }\r\n\r\n  /**\r\n   * Returns the url to start the onboarding for current account (server side).\r\n   * @param id - Optional id for the existing onboarding object.\r\n   */\r\n  public getLaunchUrl(id: string | null = null): string {\r\n    return `${this.ajax.getServerAddress()}/onboarding/launch${id ? \"/\" + id : \"\"}?access_token=${encodeURIComponent(\"\" + (this.ajax.getCurrentToken() ?? \"\"))}`;\r\n  }\r\n}\r\n","import { AccountingData, AccountingPeriodClosingOption, AccountingReportTable, AccountingReportTableType, AccountingRowReportData, ApiValidation, Calculation, CalculationReportData, CalculationStatus, CumulativeCalculation, PeriodDateKind, PeriodType, Report, ReportType, SummaryReportData, WorkerSummaryReportData, AccountingHolidayPayDebtReportData, Language,PayStatsCalculationReportData } from \"../model\";\r\nimport { Dates } from \"../util\";\r\nimport { Ajax } from \"./infra\";\r\nimport { ReportsLogic, Configs } from \"../logic\";\r\n\r\n/**\r\n * Report types that are available for calculations as stand-alone (typically pop-up dialog)\r\n */\r\nexport type calcReportType = \"salarySlip\" | \"employerReport\" | \"paymentReport\" | \"paymentSummaryReport\" | \"accountingReport\" | \"totalsReport\" | \"rowsReport\" | \"irRows\";\r\n\r\n/**\r\n * Report partials that are available as HTML for developers to create their own\r\n * reporting views\r\n */\r\nexport type reportPartial = \"employer\" | \"employerPage2\" | \"worker\" | \"workerPage2\" | \"payments\";\r\n\r\n/**\r\n * Provides access to HTML reports on calculations\r\n */\r\nexport class Reports {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\", \"$http\"];\r\n\r\n  constructor(private ajax: Ajax) { }\r\n\r\n  /**\r\n   * Gets a list of generated HTML/PDF/JSON reports by type.\r\n   *\r\n   * @param reportType - Type of reports to fetch.\r\n   *\r\n   * @returns A Promise with result data (array of reports).\r\n   */\r\n  public getReportsByType(reportType: ReportType): Promise<Report[]> {\r\n    return this.ajax.getJSON(\"/reports/type/\" + reportType);\r\n  }\r\n\r\n  /**\r\n   * Gets a single generated HTML/PDF/JSON report by type and id.\r\n   *\r\n   * @param reportType - Type of the report to fetch.\r\n   * @param id - Id of the report to fetch.\r\n   * @param wait - Optional flag to indicate whether to wait for the report to be generated.\r\n   *\r\n   * @returns A Promise with result data (report).\r\n   */\r\n  public getReport(reportType: ReportType, id: string, wait: boolean): Promise<Report> {\r\n    const method = `/reports/type/${reportType}/encodeURIComponent(id)?wait=${wait}`;\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /**\r\n   * Gets the monthly / quarterly/ yearly accounting data for the current account.\r\n   *\r\n   * @param refDate Reference date for the period. Please note that even if the date is not the first day of the given period, the entire period is returned.\r\n   * @param target Accounting target name : contains  default ruleset and other parameters for creating accounting entries.\r\n   * @param periodType Month, quarter, year or a custom period. The custom period requires endDate. Default value is the month.\r\n   * @param endDate End date for the period. Required only for the custom period.\r\n   * @param periodDateKind Period date type: paid at date or salary date.\r\n   * @param minStatus Minimum status level for the calculations to include in the data. The default level is PaymentSucceeded.\r\n   * @param ruleSet Optional additional ruleset for the target to use for creating the accounting entries.\r\n   * @param createdFrom Optional minimum creation date for the calculation included in the report.\r\n   * @returns A Promise with result data (Raw data for accounting purposes).\r\n   */\r\n  public getAccountingDataForPeriod(refDate: string, target?: string, periodType?: PeriodType, endDate?: string, periodDateKind?: PeriodDateKind, minStatus?: CalculationStatus, ruleSet?: string, createdFrom?: string): Promise<AccountingData> {\r\n    refDate = Dates.asDate(refDate) || Dates.getToday();\r\n    const prmsArr: string[] = [];\r\n    if (target) {\r\n      prmsArr.push(`target=${encodeURIComponent(target)}`);\r\n    }\r\n    if (ruleSet) {\r\n      prmsArr.push(`ruleSet=${encodeURIComponent(ruleSet)}`);\r\n    }\r\n    if (periodType) {\r\n      prmsArr.push(`periodType=${periodType}`);\r\n    }\r\n    if (endDate) {\r\n      prmsArr.push(`endDate=${endDate}`);\r\n    }\r\n    if (minStatus) {\r\n      prmsArr.push(`minStatus=${minStatus}`);\r\n    }\r\n    if (periodDateKind) {\r\n      prmsArr.push(`periodDateKind=${periodDateKind}`);\r\n    }\r\n    if (createdFrom) {\r\n      prmsArr.push(`createdFrom=${createdFrom}`);\r\n    }\r\n    const prms = prmsArr.join(\"&\");\r\n\r\n    return this.ajax.getJSON(`/v03/api/reports/accounting/${refDate}${prms ? \"?\" + prms : \"\"}`);\r\n  }\r\n\r\n  /**\r\n   * Gets the accounting data based on given set of calculations.\r\n   *\r\n   * @param calculationIds - Calculations that are the bases for the report.\r\n   * @param target  - Accounting target name : contains  default ruleset and other parameters for creating accounting entries.\r\n   * @param ruleSet - Optional additional ruleset for the target to use for creating the accounting entries.\r\n   * @returns A Promise with result data (Raw data for accounting purposes).\r\n   */\r\n  public getAccountingDataForCalculationIds(calculationIds: string[], target?: string, ruleSet?: string): Promise<AccountingData> {\r\n    const ids = calculationIds.map((x) => `calculationIds=${x}`).join(\"&\");\r\n    const prmsArr: string[] = [];\r\n    if (target) {\r\n      prmsArr.push(`target=${encodeURIComponent(target)}`);\r\n    }\r\n    if (ruleSet) {\r\n      prmsArr.push(`ruleSet=${encodeURIComponent(ruleSet)}`);\r\n    }\r\n    const prms = prmsArr.join(\"&\");\r\n    return this.ajax.getJSON(`/v03/api/reports/accounting?${ids}${prms ? \"&\" + prms : \"\"}`);\r\n  }\r\n\r\n  /**\r\n   * Gets the accounting data based on given report id.\r\n   *\r\n   * @param id - Saved report id containing accounting data.\r\n   * @param target  - Accounting target name : contains  default ruleset and other parameters for creating accounting entries.\r\n   * @param ruleSet - Optional additional ruleset for the target to use for creating the accounting entries.\r\n   * @returns A Promise with result data (Raw data for accounting purposes).\r\n   */\r\n  public getAccountingData(id: string, target?: string, ruleSet?: string): Promise<AccountingData> {\r\n    const prmsArr: string[] = [];\r\n    if (target) {\r\n      prmsArr.push(`target=${encodeURIComponent(target)}`);\r\n    }\r\n    if (ruleSet) {\r\n      prmsArr.push(`ruleSet=${encodeURIComponent(ruleSet)}`);\r\n    }\r\n    const prms = prmsArr.join(\"&\");\r\n    return this.ajax.getJSON(`/v03/api/reports/accounting/${id}${prms ? \"?\" + prms : \"\"}`);\r\n  }\r\n\r\n  /**\r\n   * Gets the accounting report based on given set of calculations.\r\n   * This method can be used anonymously.\r\n   *\r\n   * @param calculations - Calculations that are the bases for the report.\r\n   * @param target  - Accounting target name : contains  default ruleset and other parameters for creating accounting entries.\r\n   * @param ruleSet - Optional additional ruleset for the target to use for creating the accounting entries.\r\n   * @returns A Promise with result data (Raw data for accounting purposes).\r\n   */\r\n  public getAccountingDataForCalculations(calculations: Calculation[], target?: string, ruleSet?: string): Promise<AccountingData> {\r\n    const prmsArr: string[] = [];\r\n    if (target) {\r\n      prmsArr.push(`target=${encodeURIComponent(target)}`);\r\n    }\r\n    if (ruleSet) {\r\n      prmsArr.push(`ruleSet=${encodeURIComponent(ruleSet)}`);\r\n    }\r\n    const prms = prmsArr.join(\"&\");\r\n    return this.ajax.postJSON(`/v03/api/reports/accounting${prms ? \"?\" + prms : \"\"}`, calculations);\r\n  }\r\n\r\n  /**\r\n   * Closes the accounting period for the given period, and generates a report for the period.\r\n   * @param refDate - Period reference date.\r\n   * @param option - Closing option. Currently only default -option supported.\r\n   * @returns Report id for the period.\r\n   */\r\n  public closeAccountingPeriod(refDate: string, option?: AccountingPeriodClosingOption): Promise<string> {\r\n    return this.ajax.postJSON(`/v03/api/reports/accounting/${refDate}/close${option ? \"?option=\" + option : \"\"}`, null);\r\n  }\r\n\r\n  /**\r\n   * Gets the accounting data for the holiday pay debt.\r\n   *\r\n   * @param refDate The date to which the holiday pay debt is calculated.\r\n   * @param target Accounting target name : contains  default ruleset and other parameters for creating accounting entries.\r\n   * @param employmentIds Optional list of employment ids (by official id) to include in the report.\r\n   * @param fromHolidayYear Optional starting holiday year for the calculations.PaymentSucceeded.\r\n   * @returns A Promise with result data. Holiday pay debt accounting data.\r\n   */\r\n  public getAccountingDataForHolidayPayDebt(refDate: string, target?: string, employmentIds?: string[], fromHolidayYear?: string): Promise<AccountingData> {\r\n    refDate = Dates.asDate(refDate) || Dates.getToday();\r\n    const prmsArr: string[] = [];\r\n    if (target) {\r\n      prmsArr.push(`target=${encodeURIComponent(target)}`);\r\n    }\r\n    if (employmentIds) {\r\n      employmentIds.forEach((x) => prmsArr.push(`employmentIds=${x}`));\r\n    }\r\n    if (fromHolidayYear) {\r\n      prmsArr.push(`fromHolidayYear=${fromHolidayYear}`);\r\n    }\r\n    const prms = prmsArr.join(\"&\");\r\n\r\n    return this.ajax.getJSON(`/v03/api/reports/accounting/${refDate}/holiday-pay-debt${prms ? \"?\" + prms : \"\"}`);\r\n  }\r\n\r\n  /**\r\n   * Gets the monthly / quarterly/ yearly summary data for the current account.\r\n   *\r\n   * @param refDate Reference date for the period. Please note that even if the date is not the first day of the given period, the entire period is returned.\r\n   * @param periodType Month, quarter, year or a custom period. The custom period requires endDate. Default value is the month.\r\n   * @param endDate End date for the period. Required only for the custom period.\r\n   * @param periodDateKind Period date type: paid at date or salary date.\r\n   * @param workers List of workers (by official id) to include in the report.\r\n   * @returns A Promise with result data (Raw data for summary reports).\r\n   */\r\n  public getSummaryReportData(refDate: string, periodType?: PeriodType, endDate?: string, periodDateKind?: PeriodDateKind, workers?: string[]): Promise<SummaryReportData> {\r\n    refDate = Dates.asDate(refDate) || Dates.getToday();\r\n    const prmsArr: string[] = [];\r\n    if (periodType) {\r\n      prmsArr.push(`periodType=${periodType}`);\r\n    }\r\n    if (endDate) {\r\n      prmsArr.push(`endDate=${endDate}`);\r\n    }\r\n    if (periodDateKind) {\r\n      prmsArr.push(`periodDateKind=${periodDateKind}`);\r\n    }\r\n    if (workers) {\r\n      workers.forEach((w) => prmsArr.push(`workers=${w}`));\r\n    }\r\n    const prms = prmsArr.join(\"&\");\r\n\r\n    return this.ajax.getJSON(`/v03/api/reports/summary/${refDate}${prms ? \"?\" + prms : \"\"}`);\r\n  }\r\n\r\n  /**\r\n   * Gets the monthly / quarterly/ yearly summary for worker id\r\n   *\r\n   * @param refDate Reference date for the period. Please note that even if the date is not the first day of the given period, the entire period is returned.\r\n   * @param workerId For searching summary date\r\n   * @param employerId Optionally provided and used to search workers summary date on specific employer\r\n   * @param periodType Month, quarter, year or a custom period. The custom period requires endDate. Default value is the month.\r\n   * @param endDate End date for the period. Required only for the custom period.\r\n   * @param periodDateKind Period date type: paid at date or salary date.\r\n   * @returns A Promise with result data (Raw data for summary reports).\r\n   */\r\n   public getWorkerSummaryReportData(refDate: string, workerId:string, employerId?:string, periodType?: PeriodType, endDate?: string, periodDateKind?: PeriodDateKind): Promise<WorkerSummaryReportData> {\r\n    refDate = Dates.asDate(refDate) || Dates.getToday();\r\n    const prmsArr: string[] = [];\r\n    if (periodType) {\r\n      prmsArr.push(`periodType=${periodType}`);\r\n    }\r\n    if (endDate) {\r\n      prmsArr.push(`endDate=${endDate}`);\r\n    }\r\n    if (periodDateKind) {\r\n      prmsArr.push(`periodDateKind=${periodDateKind}`);\r\n    }\r\n    const prms = prmsArr.join(\"&\");\r\n\r\n    return this.ajax.getJSON(`/v03/api/reports/summary/${refDate}/${workerId}/${employerId ? employerId : \"\"}${prms ? \"?\" + prms : \"\"}`);\r\n  }\r\n\r\n  /**\r\n   * Gets the monthly / quarterly/ yearly summary data data based on given set of calculations.\r\n   *\r\n   * @param calculationIds - Calculations that are the bases for the report.\r\n   * @returns A Promise with result data (Raw data for summary reports).\r\n   */\r\n  public getSummaryReportDataForCalculationIds(calculationIds: string[]): Promise<SummaryReportData> {\r\n    const ids = calculationIds.map((x) => `calculationIds=${x}`).join(\"&\");\r\n    return this.ajax.getJSON(`/v03/api/reports/accounting?${ids}`);\r\n  }\r\n\r\n  /**\r\n   * Returns the raw data for the calculation based reports.\r\n   *\r\n   * @param refDate Reference date for the period. Please note that even if the date is not the first day of the given period, the entire period is returned.\r\n   * @param periodType Month, quarter, year or a custom period. The custom period requires endDate. Default value is the month.\r\n   * @param endDate End date for the period. Required only for the custom period.\r\n   * @param periodDateKind Period date type: paid at date or salary date.\r\n   * @param workers List of workers (by official id) to include in the report.\r\n   * @returns A Promise with result data (Raw data for the calculation based reports).\r\n   */\r\n  public getCalculationReportData(refDate: string, periodType?: PeriodType, endDate?: string, periodDateKind?: PeriodDateKind, workers?: string[]): Promise<CalculationReportData> {\r\n    refDate = Dates.asDate(refDate) || Dates.getToday();\r\n    const prmsArr: string[] = [];\r\n    if (periodType) {\r\n      prmsArr.push(`periodType=${periodType}`);\r\n    }\r\n    if (endDate) {\r\n      prmsArr.push(`endDate=${endDate}`);\r\n    }\r\n    if (periodDateKind) {\r\n      prmsArr.push(`periodDateKind=${periodDateKind}`);\r\n    }\r\n    if (workers) {\r\n      workers.forEach((w) => prmsArr.push(`workers=${w}`));\r\n    }\r\n    const prms = prmsArr.join(\"&\");\r\n\r\n    return this.ajax.getJSON(`/v03/api/reports/calculation/${refDate}${prms ? \"?\" + prms : \"\"}`);\r\n  }\r\n\r\n  /**\r\n   * Returns the raw data for the calculation based reports.\r\n   *\r\n   * @param calculationIds - Calculations that are the bases for the report.\r\n   * @returns A Promise with result data (Raw data for the calculation based reports).\r\n   */\r\n  public getCalculationReportDataForCalculationIds(calculationIds: string[]): Promise<CalculationReportData> {\r\n    const ids = calculationIds.map((x) => `calculationIds=${x}`).join(\"&\");\r\n    return this.ajax.getJSON(`/v03/api/reports/calculation?${ids}`);\r\n  }\r\n\r\n  /**\r\n   * Returns the raw data for the accounting row based reports.\r\n   *\r\n   * @param refDate Reference date for the period. Please note that even if the date is not the first day of the given period, the entire period is returned.\r\n   * @param periodType Month, quarter, year or a custom period. The custom period requires endDate. Default value is the month.\r\n   * @param endDate End date for the period. Required only for the custom period.\r\n   * @param periodDateKind Period date type: paid at date or salary date.\r\n   * @param workers List of workers (by official id) to include in the report.\r\n   * @returns A Promise with result data (Raw data for the accounting row based reports).\r\n   */\r\n  public getAccountingRowReportData(refDate: string, periodType?: PeriodType, endDate?: string, periodDateKind?: PeriodDateKind, workers?: string[]): Promise<AccountingRowReportData> {\r\n    refDate = Dates.asDate(refDate) || Dates.getToday();\r\n    const prmsArr: string[] = [];\r\n    if (periodType) {\r\n      prmsArr.push(`periodType=${periodType}`);\r\n    }\r\n    if (endDate) {\r\n      prmsArr.push(`endDate=${endDate}`);\r\n    }\r\n    if (periodDateKind) {\r\n      prmsArr.push(`periodDateKind=${periodDateKind}`);\r\n    }\r\n    if (workers) {\r\n      workers.forEach((w) => prmsArr.push(`workers=${w}`));\r\n    }\r\n    const prms = prmsArr.join(\"&\");\r\n\r\n    return this.ajax.getJSON(`/v03/api/reports/accounting-row/${refDate}${prms ? \"?\" + prms : \"\"}`);\r\n  }\r\n\r\n  /**\r\n   * Returns the raw data for the accounting row based reports.\r\n   *\r\n   * @param calculationIds - Calculations that are the bases for the report.\r\n   * @returns A Promise with result data (Raw data for the accounting row based reports).\r\n   */\r\n  public getAccountingRowReportDataForCalculationIds(calculationIds: string[]): Promise<AccountingRowReportData> {\r\n    const ids = calculationIds.map((x) => `calculationIds=${x}`).join(\"&\");\r\n    return this.ajax.getJSON(`/v03/api/reports/accounting-row?${ids}`);\r\n  }\r\n\r\n  /**\r\n   * Returns a calculation with cumulative data for reporting purposes.\r\n   * @param id Id of the calculation.\r\n   * @returns Calculation with cumulative data included.\r\n   */\r\n  public getCumulativeCalculation(id: string): Promise<CumulativeCalculation> {\r\n    return this.ajax.getJSON(`/v03/api/reports/cumulative-calculation/${id}`);\r\n  }\r\n\r\n  /**\r\n   * Returns a URL for a pay certificate pdf file. This is a absolute link containing\r\n   * both the server address and the access token.\r\n   * @param workerId Worker id for which the certificate should be created.\r\n   * @param calculationIds Calculation ids to include in the certificate.\r\n   * @param inline - If true, the Content-Disposition header is returned with inline parameter.\r\n   */\r\n   public getPayCertificatePdfUrl(workerId: string, calculationIds: string[],  inline = false): string {\r\n    const url = ReportsLogic.getPayCertificatePdfUrl(workerId, calculationIds, inline, this.ajax.getCurrentToken()!);\r\n    return `${this.ajax.getServerAddress()}${url}`;\r\n  }\r\n\r\n  /**\r\n   * Validates the pay certificate server side.\r\n   * @param workerId Id of the worker in the certificate.\r\n   * @param calculationIds Calculation ids to include in the certificate.\r\n   * @returns Validation result.\r\n   */\r\n  public validatePayCertificate(workerId: string, calculationIds: string[]): Promise<ApiValidation> {\r\n    let method = `/v03/api/reports/validate/pay-certificate/${encodeURIComponent(workerId)}?`;\r\n    calculationIds.forEach((id) => { method += \"calculationIds=\" + encodeURIComponent(\"\" + (id ?? \"\")) + \"&\"; });\r\n    method = method.replace(/[?&]$/, \"\");\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /**\r\n   * Gets an HTML report based on Calculation ID.\r\n   *\r\n   * @param reportType - Type of the report to fetch. See the HtmlReportType enumeration for possible values.\r\n   * @param calculationId - GUID for the calculation\r\n   *\r\n   * @returns A Promise with result HTML.\r\n   */\r\n  public getReportHtmlById(reportType: reportPartial, calculationId: string): Promise<string> {\r\n    let method: string;\r\n    if (!reportType) {\r\n      return Promise.resolve(\"\");\r\n    }\r\n    switch (reportType.toLowerCase()) {\r\n      case \"employer\":\r\n        method = \"/reportpartials/employerCalculation/\" + calculationId;\r\n        break;\r\n      case \"employerpage2\":\r\n        method = \"/reportpartials/employerCalculationAdditionalInfo/\" + calculationId;\r\n        break;\r\n      case \"worker\":\r\n        method = \"/reportpartials/workerCalculation/\" + calculationId;\r\n        break;\r\n      case \"workerpage2\":\r\n        method = \"/reportpartials/workerCalculationAdditionalInfo/\" + calculationId;\r\n        break;\r\n      case \"payments\":\r\n        method = \"/reportpartials/paymentCalculation/\" + calculationId;\r\n        break;\r\n      default:\r\n        throw new Error(\"Unknown report partial type: \" + reportType);\r\n    }\r\n    return this.ajax.getHTML(this.ajax.getServerAddress() + method);\r\n  }\r\n\r\n  /**\r\n   * Gets the monthly / quarterly/ yearly accounting data for the current account.\r\n   *\r\n   * @deprecated Use new accounting/{target} -method for more detailed accounting data\r\n   * @param refDate - Reference date for the period. Please note that even if the date is not the first day of the given period, the entire period is returned.\r\n   * @param tableType  - Accounting table type.\r\n   * @param periodType - Month, quarter, year or a custom period. The custom period requires endDate. Default value is the month.\r\n   * @param endDate - End date for the period. Required only for the custom period.\r\n   * @returns A Promise with result data (Raw data for accounting purposes).\r\n   * @ignore\r\n   */\r\n  public getAccountingReportTableForPeriod(\r\n    refDate: string,\r\n    tableType: AccountingReportTableType = AccountingReportTableType.Classic,\r\n    periodType: PeriodType = PeriodType.Month,\r\n    endDate: string | null = null,\r\n  ): Promise<AccountingReportTable> {\r\n    refDate = Dates.asDate(refDate) || Dates.getToday();\r\n    let method = \"/reports/data/accounting/\" + tableType + \"/\" + encodeURIComponent(refDate) + \"?\";\r\n    method += \"periodType=\" + encodeURIComponent(\"\" + periodType);\r\n    if (endDate) {\r\n      method += \"&endDate=\" + encodeURIComponent(endDate);\r\n    }\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /**\r\n   * Experimental: Gets the accounting report based on given set of calculations.\r\n   *\r\n   * @deprecated Use new accounting/{target} -method for more detailed accounting data\r\n   * @param calculationIds - Calculations that are the bases for the report.\r\n   * @param tableType  - Accounting table type.\r\n   * @returns Account report based on the calculations.\r\n   * @ignore\r\n   */\r\n  public getAccountingReportTableForCalculationIds(calculationIds: string[], tableType: AccountingReportTableType = AccountingReportTableType.Classic): Promise<AccountingReportTable> {\r\n    let method = \"/reports/data/accounting/\" + tableType + \"?\";\r\n    calculationIds.forEach((x) => { method += \"calculationIds=\" + encodeURIComponent(\"\" + x) + \"&\"; });\r\n    method = method.replace(/[?&]$/, \"\");\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /**\r\n   * Experimental: Gets the accounting report based on given set of calculations.\r\n   *\r\n   * @deprecated Use new accounting/{target} -method for more detailed accounting data\r\n   * @param calculations - Calculations that are the bases for the report.\r\n   * @param tableType  - Accounting table type.\r\n   * @returns Account report based on the calculations.\r\n   * @ignore\r\n   */\r\n  public getAccountingReportTableForCalculations(calculations: Calculation[], tableType: AccountingReportTableType = AccountingReportTableType.Classic): Promise<AccountingReportTable> {\r\n    const method = \"/reports/data/accounting/\" + tableType;\r\n    return this.ajax.postJSON(method, calculations);\r\n  }\r\n\r\n  /**\r\n   * Returns the  holiday pay debt report data.\r\n   *\r\n   * @param refDate Reference date to which the holiday pay debt is calculated.\r\n   * @param employmentIds Optional list of employment ids (by official id) to include in the report.\r\n   * @returns A Promise with result data containing holiday pay debt data.\r\n   */\r\n  public getAccountingHolidayPayDebtReportData(refDate: string, employmentIds?: string[]): Promise<AccountingHolidayPayDebtReportData> {\r\n    refDate = Dates.asDate(refDate) || Dates.getToday();\r\n    const prmsArr: string[] = [];\r\n    if (employmentIds) {\r\n      employmentIds.forEach((x) => prmsArr.push(`employmentIds=${x}`));\r\n    }\r\n    const prms = prmsArr.join(\"&\");\r\n\r\n    return this.ajax.getJSON(`/v03/api/reports/holiday-pay-debt/${refDate}${prms ? \"?\" + prms : \"\"}`);\r\n  }\r\n\r\n  /**\r\n   * Returns the calculated pay statistics for the given employment relation.\r\n   * @param employmentId The employment relation for which to calculate the statistics values.\r\n   * @returns A Promise with result data containing pay stats calculation report data.\r\n   */\r\n  public getPayStatsCalculationReportData(employmentId: string): Promise<PayStatsCalculationReportData> {\r\n    return this.ajax.getJSON(`/v03/api/reports/pay-stats-calc/${employmentId}`);\r\n  }\r\n\r\n  /**\r\n   * Gets a calculation report in PDF format.\r\n   * @param calculations - The calculations to generate the report for\r\n   * @param reportType - The type of report to generate. Can be one of:\r\n   * - \"salarySlip\" - Salary slip report\r\n   * - \"employerReport\" - Employer report\r\n   * - \"paymentReport\" - Payment report\r\n   * - \"paymentSummaryReport\" - Payment summary report\r\n   * - \"accountingReport\" - Accounting report\r\n   * - \"totalsReport\" - Totals report\r\n   * - \"rowsReport\" - Rows report\r\n   * - \"irRows\" - IR rows report\r\n   * @param employerLang - The language to use for employer-specific content\r\n   * @param reportLang - The language to use for worker-specific content\r\n   * @returns Promise resolving to an object containing:\r\n   * - data: Blob - The PDF report data\r\n   * - response: any - The full response object\r\n   */\r\n  public getCalculationReport(calculations: Calculation[], reportType: calcReportType, employerLang: Language, reportLang: Language): Promise<{data: Blob, headers: {[key: string]: string}}> {\r\n    // Helper function to make HTTP request and return PDF data\r\n    const makeHttpRequest = (url: string, payload?: any): Promise<{data: Blob, headers: {[key: string]: string}}> => {\r\n     if(payload) {\r\n      return this.ajax.postBlob(url, payload);\r\n     } else {\r\n      return this.ajax.getBlob(url);\r\n     }\r\n    };\r\n\r\n    // Handle special report types that use the report server\r\n    if ([\"paymentSummaryReport\", \"accountingReport\", \"totalsReport\", \"rowsReport\"].includes(reportType)) {\r\n      const baseUrl = `${Configs.current.reportServer}/pdf`;\r\n      const commonParams = `disposition=inline&access_token=${this.ajax.getCurrentToken()}`;\r\n\r\n      switch (reportType) {\r\n        case ReportType.PaymentSummaryReport: {\r\n          const url = `${baseUrl}?id=&reportType=${encodeURIComponent(reportType)}&template=paymentSummaryReportV2&language=${encodeURIComponent(employerLang)}&${commonParams}`;\r\n          return makeHttpRequest(url, { object: calculations });\r\n        }\r\n\r\n        case ReportType.AccountingReport: {\r\n          const url = `${baseUrl}?id=&reportType=${encodeURIComponent(reportType)}&template=accountingReport&language=${encodeURIComponent(employerLang)}&${commonParams}`;\r\n          return this.getAccountingDataForCalculations(calculations).then(accountingData => makeHttpRequest(url, { object: accountingData }));\r\n        }\r\n\r\n        case ReportType.TotalsReport: {\r\n          const url = `${baseUrl}?id=&reportType=${encodeURIComponent(reportType)}&template=totalsReport&language=${encodeURIComponent(employerLang)}&${commonParams}`;\r\n          return makeHttpRequest(url, { object: calculations });\r\n        }\r\n\r\n        default:\r\n          throw new Error(`Report type ${reportType} is not supported`);\r\n      }\r\n    }\r\n\r\n    // Handle standard report types\r\n    const baseUrl = `${this.ajax.getServerAddress()}/v03/api/reports/assure-pdf/${reportType}`;\r\n    const allCalculationsSucceeded = calculations.every(calc => calc?.workflow?.status === CalculationStatus.PaymentSucceeded);\r\n\r\n    if (allCalculationsSucceeded) {\r\n      const ids = calculations.map(calc => `ids=${encodeURIComponent(calc.id!)}`).join(\"&\");\r\n      const url = `${baseUrl}?disposition=inline&${ids}&language=${encodeURIComponent(reportLang)}&access_token=${this.ajax.getCurrentToken()}`;\r\n      return makeHttpRequest(url);\r\n    } else {\r\n      const url = `${baseUrl}?language=${encodeURIComponent(reportLang)}&disposition=inline&access_token=${this.ajax.getCurrentToken()}`;\r\n      return makeHttpRequest(url, calculations);\r\n    }\r\n  }\r\n}\r\n","import { Configs } from \"../logic\";\r\nimport { OAuthSalaxyAuthorizeMode, UserSession } from \"../model\";\r\nimport { Ajax } from \"./infra\";\r\n\r\n/**\r\n * Provides read-only access to the current user session\r\n */\r\nexport class Session {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  constructor(private ajax: Ajax) {}\r\n\r\n  /**\r\n   * Checks whether the current browser session is authorized.\r\n   *\r\n   * @returns A Promise with result data (boolean).\r\n   */\r\n  public isAuthorized(): Promise<boolean> {\r\n    return this.ajax.getJSON(\"/session/isAuthorized\");\r\n  }\r\n\r\n  /**\r\n   * Gets the current session information or null if there is no active session.\r\n   * UserSession data is the Authorization object that provides information about the current session. Null, if there is no session.\r\n   *\r\n   * @returns A Promise with result data (UserSession).\r\n   */\r\n  public getSession(): Promise<UserSession> {\r\n    return this.ajax.getJSON(\"/session/current\");\r\n  }\r\n\r\n  /**\r\n   * Returns server address\r\n   */\r\n  public getServerAddress(): string {\r\n    return this.ajax.getServerAddress();\r\n  }\r\n\r\n  /**\r\n   * Gets the URL for login / register UI to Salaxy API.\r\n   *\r\n   * @param redirectUrl The URL where the user is taken after a successfull login.\r\n   * If not specified, uses window.location.protocol + \"//\" + window.location.host + window.location.pathname.\r\n   * In non-browser environments, this must be specified.\r\n   * @param role Optional role (household, worker or company) for the situations where it is known - mainly for new users.\r\n   * @param partnerSite The partner site is passed as client_id to the sign-in process.\r\n   * @param mode Salaxy login mode: \"sign_in\" (login screen) or \"sign_up\" (register as new user).\r\n   * @param urlPostfix Additional string that is added to tha URL.\r\n   * Used in adding other parameters to the URL, e.g. \"&salaxy_language=en\"\r\n   */\r\n   public getSignInAddress(\r\n    redirectUrl: string | null = null,\r\n    role: string | null = null,\r\n    partnerSite: string | null = null,\r\n    mode: OAuthSalaxyAuthorizeMode | null = null,\r\n    urlPostfix: string | null = null,\r\n  ): string {\r\n    const config = Configs.current;\r\n    const partner = partnerSite || config?.partnerSite || \"unknown\";\r\n    if (!redirectUrl) {\r\n      if (!window) {\r\n        throw new Error(\"Redirect URL is required if window is not available.\");\r\n      }\r\n      redirectUrl = window.location.protocol + \"//\" + window.location.host + window.location.pathname;\r\n    }\r\n    let url = this.getServerAddress() +\r\n      \"/oauth2/authorize?response_type=token&redirect_uri=\" + encodeURIComponent(redirectUrl || \"\") +\r\n      \"&client_id=\" + encodeURIComponent(partner || \"\") +\r\n      \"&salaxy_role=\" + encodeURIComponent(role || \"\") +\r\n      \"&salaxy_authorize_mode=\" + encodeURIComponent(\"\" + mode);\r\n    if (urlPostfix) {\r\n      url = url + urlPostfix;\r\n    }\r\n    return url;\r\n  }\r\n}\r\n","import { ApiTestErrorType, Onboarding, TaxcardInput, TestAccountInfo, TestValues, CompanyAccount } from \"../model\";\r\nimport { Ajax } from \"./infra\";\r\n\r\n/**\r\n * Methods for testing the API.\r\n */\r\nexport class Test {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  constructor(private ajax: Ajax) {}\r\n\r\n  /**\r\n   * Basic hello world message. Echoes the given message back.\r\n   *\r\n   * @param message - Message.\r\n   *\r\n   * @returns A Promise with result data (message).\r\n   */\r\n  public hello(message: string): Promise<string> {\r\n    return this.ajax.getJSON(\"/test/hello?message=\" + encodeURIComponent(\"\" + (message ?? \"\")));\r\n  }\r\n\r\n  /**\r\n   * Test a long lasting request.\r\n   *\r\n   * @param seconds - Delay in seconds.\r\n   *\r\n   * @returns A Promise with result data (Delay in seconds).\r\n   */\r\n  public delay(seconds: number): Promise<number> {\r\n    return this.ajax.getJSON(`/test/delay?seconds=${seconds}`);\r\n  }\r\n\r\n  /**\r\n   * Test JSON serialization. Echoes a given object either in success callback or in the promise.\r\n   *\r\n   * @param testValues - TestValues object.\r\n   *\r\n   * @returns A Promise with result.\r\n   */\r\n  public values(testValues: TestValues): Promise<TestValues> {\r\n    return this.ajax.postJSON(\"/test/values\", testValues);\r\n  }\r\n\r\n  /**\r\n   * Creates a test account and returns test account details.\r\n   *\r\n   * @param onboarding - Onboarding object.\r\n   *\r\n   * @returns A Promise with result data (test accounts).\r\n   */\r\n  public createTestAccount(onboarding: Onboarding): Promise<TestAccountInfo> {\r\n    return this.ajax.postJSON(\"/test/accounts\", onboarding);\r\n  }\r\n\r\n  /**\r\n   * Deletes a test account and related objects\r\n   *\r\n   * @param accountId - Account id to delete.\r\n   *\r\n   * @returns A Promise with result data \"Object deleted\".\r\n   */\r\n  public deleteTestAccount(accountId: string): Promise<string> {\r\n    return this.ajax.remove(\"/test/accounts/\" + encodeURIComponent(\"\" + (accountId ?? \"\")));\r\n  }\r\n\r\n  /**\r\n   * Test methods that throws an exception on server side.\r\n   *\r\n   * @param errorType Type of error\r\n   *\r\n   * @returns A Promise if success parameter is null. For throwException,\r\n   * the promise is always rejected after the error is thrown in the server.\r\n   */\r\n  public throwException(errorType: ApiTestErrorType): Promise<string> {\r\n    return this.ajax.getJSON(\"/test/exceptions/\" + errorType);\r\n  }\r\n\r\n  /**\r\n   * Delete the current account data and credentials (including Auth0 user).\r\n   * Can be called only in a test environment.\r\n   */\r\n  public deleteCurrentAccount(): Promise<string> {\r\n    return this.ajax.remove(\"/accounts/current\");\r\n  }\r\n\r\n  /**\r\n   * Remove all calculations, workers etc. user objects except products and signature from the account.\r\n   * Can be called only in a test environment.\r\n   */\r\n  public deleteCurrentAccountData(): Promise<string> {\r\n    return this.ajax.remove(\"/accounts/data/all\");\r\n  }\r\n\r\n  /**\r\n   * Remove all calculations, payrolls and payments from the account.\r\n   * Can be called only in a test environment.\r\n   */\r\n  public deleteCurrentAccountCalculations(): Promise<string> {\r\n    return this.ajax.remove(\"/accounts/calculation/all\");\r\n  }\r\n\r\n  /**\r\n   * Remove workers including calculations, employment contracts and tax cards from the account.\r\n   * Can be called only in a test environment.\r\n   */\r\n  public deleteCurrentAccountWorkers(): Promise<string> {\r\n    return this.ajax.remove(\"/accounts/worker/all\");\r\n  }\r\n\r\n  /**\r\n   * Remove all holiday year from all workers. Does not touch the default values of holidays in Worker Employment relation.\r\n   * Can be called only in a test environment.\r\n   */\r\n  public deleteCurrentAccountHolidays(): Promise<string> {\r\n    return this.ajax.remove(\"/accounts/holidays/all\");\r\n  }\r\n\r\n  /**\r\n   * Remove pension and insurance from the account.\r\n   * Can be called only in a test environment.\r\n   */\r\n  public deleteCurrentAccountPensionAndInsurance(): Promise<string> {\r\n    return this.ajax.remove(\"/accounts/product/pensionAndInsurance\");\r\n  }\r\n\r\n  /**\r\n   * Remove the signature from the account.\r\n   * Can be called only in a test environment.\r\n   */\r\n  public deleteCurrentAccountSignature(): Promise<string> {\r\n    return this.ajax.remove(\"/accounts/signature\");\r\n  }\r\n\r\n  /**\r\n   * Delete all empty accounts (company or worker) created by this account.\r\n   * Can be called only in a test environment.\r\n   */\r\n  public deleteCurrentAccountAuthorizingAccounts(): Promise<string> {\r\n    return this.ajax.remove(\"/accounts/authorizingAccount/all\");\r\n  }\r\n\r\n  /**\r\n   * Sets the data for taxcards API for a personal Id for system-wide (all users).\r\n   * @param testData The data that is stored as test data.\r\n   * If the taxcard kind is Undefined, the data is cleared for that taxcard.\r\n   * If the kind is NoTaxcard, the API wil return null.\r\n   * Other kinds will be set as Auto.\r\n   * @returns The data as it would be returnded now from the API\r\n   */\r\n  public setTaxcardApi(testData: TaxcardInput ): Promise<TaxcardInput> {\r\n    return this.ajax.postJSON(\"/v03/api/test-data/taxcard-api\", testData);\r\n  }\r\n\r\n  /**\r\n   * Gets taxcard information for a personal Id.\r\n   * @param personalId Personal ID for which the data is fetched.\r\n   * @returns Taxcard input or null if none is stored in the test data file.\r\n   * Note if this APi returns null, system defaults to a fixed test taxcard.\r\n   * If you want the system to return null, set kind to NoTaxcard.\r\n   */\r\n  public getTaxcardApi(personalId: string): Promise<TaxcardInput> {\r\n    return this.ajax.getJSON(\"/v03/api/test-data/taxcard-api/\" + (encodeURIComponent(personalId)));\r\n  }\r\n\r\n  /**\r\n   * Deletes the current account's KYC (Know Your Customer) information.\r\n   * @returns A Promise that resolves to a string representing the result of the deletion.\r\n   */\r\n  public deleteCurrentAccountKyc(): Promise<string> {\r\n    return this.ajax.remove(\"/accounts/kyc\");\r\n  }\r\n\r\n  /**\r\n   * Activates the current account's KYC (Know Your Customer) using the provided data.\r\n   * @returns A Promise that resolves to the company account.\r\n   */\r\n  public activateCurrentAccountKyc(): Promise<CompanyAccount> {\r\n    return this.ajax.postJSON(\"/accounts/kyc\", null);\r\n  }\r\n\r\n}\r\n","import { Accounts } from \"../Accounts\";\r\nimport { Ajax } from \"../infra/Ajax\";\r\nimport { Calculations } from \"../crud/Calculations\";\r\nimport { Calculator } from \"../Calculator\";\r\nimport { Files } from \"../crud/Files\";\r\nimport { OAuth2 } from \"../infra/OAuth2\";\r\nimport { Onboardings } from \"../Onboardings\";\r\nimport { Reports } from \"../Reports\";\r\nimport { Session } from \"../Session\";\r\nimport { Taxcards } from \"../crud/Taxcards\";\r\nimport { Test } from \"../Test\";\r\n\r\n/**\r\n * Client to Salaxy API.\r\n * Abstracts the raw REST api to async methods that are easier to call from TypeScript / JavaScript.\r\n * Differnet platforms (NG1, NG, jQuery etc.) create derived Clients typically at least by injecting their own Ajax implementation,\r\n * potentially also by overriding other methods.\r\n */\r\nexport abstract class Client {\r\n\r\n  private _ajax: Ajax;\r\n  private _accountsApi: Accounts;\r\n  private _calculationsApi: Calculations;\r\n  private _calculatorApi: Calculator;\r\n  private _reportsApi: Reports;\r\n  private _filesApi: Files;\r\n  private _sessionApi: Session;\r\n  private _oAuth2Api: OAuth2;\r\n  private _testApi: Test;\r\n  private _taxcardsApi: Taxcards;\r\n  private _onboardingsApi: Onboardings;\r\n\r\n  constructor(ajaxImpl: Ajax) {\r\n    this._ajax = ajaxImpl;\r\n  }\r\n\r\n  /** The platform (NG1, NG, jQuery etc.) dependent class that performs the actual Ajax calls */\r\n  public get ajax(): Ajax {\r\n    return this._ajax;\r\n  }\r\n\r\n  /** Gets the Accounts API: Access to current account, its products and workers */\r\n  public get accountsApi(): Accounts {\r\n    if (!this._accountsApi) {\r\n      this._accountsApi = new Accounts(this._ajax);\r\n    }\r\n    return this._accountsApi;\r\n  }\r\n\r\n  /** Gets the Calculations API: CRUD operations on calculations */\r\n  public get calculationsApi(): Calculations {\r\n    if (!this._calculationsApi) {\r\n      this._calculationsApi = new Calculations(this._ajax);\r\n    }\r\n    return this._calculationsApi;\r\n  }\r\n\r\n  /** Gets the Calculator API: Anonymous salary calculation methods */\r\n  public get calculatorApi(): Calculator {\r\n    if (!this._calculatorApi) {\r\n      this._calculatorApi = new Calculator(this._ajax);\r\n    }\r\n    return this._calculatorApi;\r\n  }\r\n\r\n  /** Gets the Reports API: Viewing and generating reports in different formats */\r\n  public get reportsApi(): Reports {\r\n    if (!this._reportsApi) {\r\n      this._reportsApi = new Reports(this._ajax);\r\n    }\r\n    return this._reportsApi;\r\n  }\r\n\r\n  /** Gets the Files API: Files stored by the user, thumbnails of pictures etc. */\r\n  public get filesApi(): Files {\r\n    if (!this._filesApi) {\r\n      this._filesApi = new Files(this._ajax);\r\n    }\r\n    return this._filesApi;\r\n  }\r\n\r\n  /** Gets the Session API: Access to current session, user and roles */\r\n  public get sessionApi(): Session {\r\n    if (!this._sessionApi) {\r\n      this._sessionApi = new Session(this._ajax);\r\n    }\r\n    return this._sessionApi;\r\n  }\r\n\r\n  /** Gets the OAuth2 API: Authentication methods */\r\n  public get oAuth2Api(): OAuth2 {\r\n    if (!this._oAuth2Api) {\r\n      this._oAuth2Api = new OAuth2(this._ajax);\r\n    }\r\n    return this._oAuth2Api;\r\n  }\r\n\r\n  /** Gets the Test API: Testing different functionalities of the API and system in general. */\r\n  public get testApi(): Test {\r\n    if (!this._testApi) {\r\n      this._testApi = new Test(this._ajax);\r\n    }\r\n    return this._testApi;\r\n  }\r\n\r\n  /** Gets the Tax cards API */\r\n  public get taxcardsApi(): Taxcards {\r\n    if (!this._taxcardsApi) {\r\n      this._taxcardsApi = new Taxcards(this._ajax);\r\n    }\r\n    return this._taxcardsApi;\r\n  }\r\n\r\n  /** Gets the Onboarding API for creating a new user */\r\n  public get onboardingsApi(): Onboardings {\r\n    if (!this._onboardingsApi) {\r\n      this._onboardingsApi = new Onboardings(this._ajax);\r\n    }\r\n    return this._onboardingsApi;\r\n  }\r\n}\r\n","import { CompanyAccountSettings } from \"../../model\";\r\nimport { Ajax, SingleItemApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides read / update functionality for main account settings (employer/company)\r\n */\r\nexport class AccountSettings extends SingleItemApiBase<CompanyAccountSettings> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/settings/company\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n\r\n  /**\r\n   * Creates a new IR certificate.\r\n   * @param transferId Transfer ID for the IR certificate.\r\n   * @param transferPassword One time transfer password for the IR certificate.\r\n   * @returns Information about the created IR certificate.\r\n   */\r\n  public createIrCertificate(transferId: string, transferPassword: string): Promise<any> {\r\n    const url = `/v03/api/settings/irCertificate?transferId=${encodeURIComponent(transferId)}&transferPassword=${encodeURIComponent(transferPassword)}`;\r\n    return this.ajax.postJSON(url,null);\r\n  }\r\n\r\n  /**\r\n   * Renews an existing IR certificate.\r\n   * @returns Information about the created IR certificate.\r\n   */\r\n  public renewIrCertificate(): Promise<any> {\r\n    const url = `/v03/api/settings/irCertificate/renew`;\r\n    return this.ajax.postJSON(url,null);\r\n  }\r\n\r\n  /**\r\n   * Gets the detials of the existing IR certificate or null if no certificate exists.\r\n   * @returns Information about the current IR certificate.\r\n   */\r\n  public getIrCertificate(): Promise<any> {\r\n    const url = `/v03/api/settings/irCertificate`;\r\n    return this.ajax.getJSON(url);\r\n  }\r\n\r\n}\r\n","import { BeneficialOwners } from \"../../model\";\r\nimport { Ajax, SingleItemApiBase } from \"../infra\";\r\n\r\n/**\r\n * Provides CRUD access for beneficiary owners\r\n */\r\nexport class BeneficialOwnersApi extends SingleItemApiBase<BeneficialOwners> {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for details etc. */\r\n  protected baseUrl = \"/v03/api/beneficial-owners\";\r\n\r\n  constructor(ajax: Ajax) {\r\n    super(ajax);\r\n  }\r\n}\r\n","import { Ajax } from \"./infra\";\r\nimport { ZendeskArticle } from \"../model\";\r\nimport { Configs } from \"../logic\";\r\n/**\r\n * API for Zendesk\r\n */\r\nexport class HelpCenter {\r\n  public static $inject = [\"AjaxNg1\"];\r\n  constructor(private ajax: Ajax) { }\r\n\r\n  /**\r\n   * Gets list of articles\r\n   * @returns List of articles\r\n   */\r\n  public getArticles(): Promise<ZendeskArticle[]> {\r\n    return this.ajax.getJSON(`${Configs.current.reportServer}/articles`);\r\n  }\r\n\r\n  /**\r\n   * Gets single article by id\r\n   * @param id article id\r\n   * @returns article as json\r\n   */\r\n  public getArticle(id: string): Promise<ZendeskArticle> {\r\n    return this.ajax.getJSON(`${Configs.current.reportServer}/articles/${id}`);\r\n  }\r\n\r\n  /**\r\n   * Gets single article by id\r\n   * @param id article id\r\n   * @returns article as text\r\n   */\r\n  public getArticleHTML(id: string): Promise<string> {\r\n    return this.ajax.getHTML(`${Configs.current.reportServer}/articles/${id}/html`);\r\n  }\r\n\r\n  /**\r\n   * Gets list of articles\r\n   * @returns List of articles\r\n   */\r\n  public getCategoryArticles(id: string): Promise<ZendeskArticle[]> {\r\n    return this.ajax.getJSON(`${Configs.current.reportServer}/articles/category/${id}`);\r\n  }\r\n}","import { Translations } from \"../logic\";\r\nimport { ApiListItem, ApiListItemType, CalculationStatus, TaxcardState, WelcomeDataWorker } from \"../model\";\r\nimport { OData, ODataQueryOptions, ODataResult } from \"../util\";\r\nimport { Ajax } from \"./infra\";\r\n\r\n/**\r\n * Methods for testing the API.\r\n * Note that getWelcomeDataWorker() is currently used in Wecome component.\r\n * TODO: Remove getWelcomeDataWorker() and then remove the entire class.\r\n */\r\nexport class Overview {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  constructor(private ajax: Ajax) { }\r\n\r\n  /**\r\n   * Makes an OData query over all objects within the current account.\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public getAllData(query: ODataQueryOptions | string): Promise<ODataResult<ApiListItem>> {\r\n    return OData.getOData<ApiListItem>(\"/v03-rc/api/overview/all\", query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Gets the welcome page data for a Worker account.\r\n   */\r\n  public getWelcomeDataWorker(): Promise<WelcomeDataWorker> {\r\n    return this.ajax.getJSON(\"/v03-rc/api/overview/welcome-worker\").then((data: WelcomeDataWorker) => {\r\n      for (const item of data.timeline ?? []) {\r\n        item.shortText = this.getShortMessage(item);\r\n      }\r\n      return data;\r\n    });\r\n  }\r\n  private getShortMessage(item: ApiListItem) {\r\n    switch (item.type) {\r\n      case ApiListItemType.Calculation:\r\n      case ApiListItemType.CalculationPaid:\r\n        {\r\n          const status = item.status as CalculationStatus;\r\n          switch (status) {\r\n            case CalculationStatus.WorkerRequested:\r\n              return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.calculation.workerRequested\", {name: item.otherPartyInfo?.avatar?.displayName ?? \"\"});\r\n            case CalculationStatus.WorkerRequestDeclined:\r\n              return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.calculation.workerRequestDeclined\", {name: item.otherPartyInfo?.avatar?.displayName ?? \"\"});\r\n            case CalculationStatus.WorkerRequestAccepted:\r\n              return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.calculation.workerRequestAccepted\", {name: item.otherPartyInfo?.avatar?.displayName ?? \"\"});\r\n            case CalculationStatus.Draft:\r\n              return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.calculation.draft\");\r\n            case CalculationStatus.PaymentWorkerCopy:\r\n              return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.calculation.paymentWorkerCopy\", {name: item.otherPartyInfo?.avatar?.displayName ?? \"\"});\r\n            default:\r\n              return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.calculation.default\", {status: Translations.get(\"SALAXY.ENUM.CalculationStatus.\" + status) });\r\n          }\r\n        }\r\n      case ApiListItemType.PersonAccount:\r\n        return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.personAccount\");\r\n      case ApiListItemType.Employment:\r\n        return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.employmentDefault\", {name: item.ownerInfo?.avatar?.displayName ?? \"\"});\r\n      case ApiListItemType.Taxcard:\r\n        {\r\n          const status = item.status as TaxcardState;\r\n          switch (status) {\r\n            case TaxcardState.Shared:\r\n              return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.taxcard.shared\");\r\n            case TaxcardState.SharedApproved:\r\n              return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.taxcard.sharedApproved\", {name: item.ownerInfo?.avatar?.displayName ?? \"\"});\r\n            case TaxcardState.SharedRejected:\r\n            case TaxcardState.SharedRejectedWithoutOpen:\r\n              return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.taxcard.sharedRejected\", {name: item.ownerInfo?.avatar?.displayName ?? \"\"});\r\n            case TaxcardState.SharedWaiting:\r\n              return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.taxcard.sharedWaiting\", {name: item.ownerInfo?.avatar?.displayName ?? \"\"});\r\n            case TaxcardState.EmployerAdded:\r\n            case TaxcardState.Approved:\r\n              return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.taxcard.approved\", {name: item.ownerInfo?.avatar?.displayName ?? \"\"});\r\n            case TaxcardState.VerifiedVero:\r\n              return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.taxcard.verifiedVero\", {name: item.ownerInfo?.avatar?.displayName ?? \"\"});\r\n            default:\r\n              return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.taxcard.default\", {status: item.status});\r\n          }\r\n        }\r\n      default:\r\n        return Translations.get(\"SALAXY.CORE.WorkerTimeline.shortMessages.timelineType\", {type: item.type});\r\n    }\r\n  }\r\n}\r\n","import { VarmaPensionOrder, LocalTapiolaInsuranceOrder } from \"../model\";\r\nimport { Ajax } from \"./infra\";\r\n\r\n/**\r\n * API for partner services, like pension, insurance and health care.\r\n */\r\nexport class PartnerServices {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  constructor(private ajax: Ajax) {}\r\n\r\n  /**\r\n   * Returns a new Varma pension order with default values for the current account.\r\n   */\r\n  public getNewVarmaPensionOrder(): Promise<VarmaPensionOrder> {\r\n    return this.ajax.getJSON(\"/partner-services/varma/pension/new\");\r\n  }\r\n\r\n  /**\r\n   * Validate the given Varma pension order in the server.\r\n   */\r\n  public validateVarmaPensionOrder(order: VarmaPensionOrder): Promise<VarmaPensionOrder> {\r\n    return this.ajax.postJSON(\"/partner-services/varma/pension/validate\", order);\r\n  }\r\n\r\n  /**\r\n   * Send a new Varma pension order for later processing.\r\n   */\r\n  public sendVarmaPensionOrder(order: VarmaPensionOrder): Promise<VarmaPensionOrder> {\r\n    return this.ajax.postJSON(\"/partner-services/varma/pension/order\", order);\r\n  }\r\n\r\n   /**\r\n    * Returns a new Local Tapiola Insurance order with default values for the current account.\r\n    */\r\n    public getNewLocalTapiolaInsuranceOrder(): Promise<LocalTapiolaInsuranceOrder> {\r\n      return this.ajax.getJSON(\"/partner-services/local-tapiola/insurance/new\");\r\n    }\r\n\r\n    /**\r\n     * Validate the given Local Tapiola Insurance order in the server.\r\n     */\r\n    public validateLocalTapiolaInsuranceOrder(order: LocalTapiolaInsuranceOrder): Promise<LocalTapiolaInsuranceOrder> {\r\n      return this.ajax.postJSON(\"/partner-services/local-tapiola/insurance/validate\", order);\r\n    }\r\n\r\n    /**\r\n     * Send a new Local Tapiola Insurance order for later processing.\r\n     */\r\n    public sendLocalTapiolaInsuranceOrder(order: LocalTapiolaInsuranceOrder): Promise<LocalTapiolaInsuranceOrder> {\r\n      return this.ajax.postJSON(\"/partner-services/local-tapiola/insurance/order\", order);\r\n    }\r\n}\r\n","import { Dates, OData } from \"../util\";\r\nimport type { ODataQueryOptions, ODataResult } from \"../util\";\r\nimport type { AccountBase, InvoiceListItem, PageResultOfApiListItem, PayrollListItem, SessionUserCredential, UserSession, WorkerListItem, MessageListItem, CalculationListItem, FileListItem, TaxcardListItem, HouseholdYearListItem, } from \"../model\";\r\nimport { PeriodType } from \"../model\";\r\nimport { irpsr, irepr } from \"../model\";\r\nimport { Ajax } from \"./infra\";\r\n\r\n/**\r\n * Methods for PRO users (accountants, integrated services), for fetching data accross multiple accounts\r\n * and impersonating as different authorized acccounts: Fetching the token and session.\r\n */\r\nexport class ProApi {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  private routePrefix = \"/v01/api/pro\";\r\n\r\n  constructor(private ajax: Ajax) {}\r\n\r\n  /** Gets the PRO session for the current account (the PRO account) including the Service Model */\r\n  public getProSession(): Promise<UserSession> {\r\n    const method = `${this.routePrefix}/session`;\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /** Lists all accounts on behalf of which this account has been authorized to act. */\r\n  public getAccounts(): Promise<AccountBase[]> {\r\n    const method = `${this.routePrefix}/accounts`;\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /**\r\n   * Set the current account as primary partner for the account.\r\n   * @param accountId The account id for which the primary partner is set.\r\n   * @param serviceModelId Selected service model.\r\n   * @returns Updated account with the partner set.\r\n   */\r\n  public saveAccountPartner(accountId: string, serviceModelId: string): Promise<UserSession> {\r\n    if (!accountId || !serviceModelId) {\r\n      throw new Error(\"Account and service model must be provided.\");\r\n    }\r\n    const method = `${this.routePrefix}/accounts/${encodeURIComponent(accountId)}/partner?serviceModelId=${encodeURIComponent(serviceModelId)}`;\r\n    return this.ajax.postJSON(method, {});\r\n  }\r\n\r\n  /**\r\n   * Remove the current primary partner (current account) from the account.\r\n   * @param accountId The account id from which the primary partner is removed.\r\n   * @returns Updated account with the partner removed.\r\n   */\r\n  public deleteAccountPartner(accountId: string): Promise<UserSession> {\r\n    if (!accountId) {\r\n      throw new Error(\"Account id must be provided.\");\r\n    }\r\n    const method = `${this.routePrefix}/accounts/${encodeURIComponent(accountId)}/partner`;\r\n    return this.ajax.remove(method);\r\n  }\r\n\r\n  /**\r\n   * Lists all credentials for this partner account.\r\n   * @returns Credentials for the partner account.\r\n   */\r\n  public getCredentials(): Promise<SessionUserCredential[]> {\r\n    const method = `${this.routePrefix}/credentials`;\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /**\r\n   * Returns a new JWT token for the given account.\r\n   * The requesting user must have access to the account.\r\n   * @param accountId The account id for which the token is requested.\r\n   * @returns A valid Salaxy JWT token for the given account\r\n   */\r\n  public getToken(accountId: string): Promise<string> {\r\n    const method = `${this.routePrefix}/accounts/${encodeURIComponent(accountId)}/token`;\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  /**\r\n   * Returns list of payrolls for the current partner (all customers).\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public oDataSearchPayrolls(query?: ODataQueryOptions | string): Promise<ODataResult<PayrollListItem>> {\r\n    return OData.getOData<any>(`${this.routePrefix}/payrolls`, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns list of invoices for the current partner (all customers).\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public oDataSearchInvoices(query?: ODataQueryOptions | string): Promise<ODataResult<InvoiceListItem>> {\r\n    return OData.getOData<any>(`${this.routePrefix}/invoices`, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns list of messages for the current partner (all customers).\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public oDataSearchMessages(query?: ODataQueryOptions | string): Promise<ODataResult<MessageListItem>> {\r\n    return OData.getOData<any>(`${this.routePrefix}/messages`, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns list of editable calculations for the current partner.\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public oDataSearchEditableCalculations(query?: ODataQueryOptions | string): Promise<ODataResult<CalculationListItem>> {\r\n    return OData.getOData<any>(`${this.routePrefix}/calculations/category/editable`, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns list of readonly calculations for the current partner.\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public oDataSearchReadonlyCalculations(query?: ODataQueryOptions | string): Promise<ODataResult<CalculationListItem>> {\r\n    return OData.getOData<any>(`${this.routePrefix}/calculations/category/readonly`, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns list of workers for the current partner.\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public oDataSearchWorkers(query?: ODataQueryOptions | string): Promise<ODataResult<WorkerListItem>> {\r\n    return OData.getOData<any>(`${this.routePrefix}/workers`, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns list of files for the current partner.\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public oDataSearchFiles(query?: ODataQueryOptions | string): Promise<ODataResult<FileListItem>> {\r\n    return OData.getOData<any>(`${this.routePrefix}/files`, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns list of taxcards for the current partner.\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public oDataSearchTaxcards(query?: ODataQueryOptions | string): Promise<ODataResult<TaxcardListItem>> {\r\n    return OData.getOData<any>(`${this.routePrefix}/taxcards`, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns list of Earnings Payment Reports (EPR / Palkkatietoilmoitus)\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public oDataSearchEarningsPayments(query?: ODataQueryOptions | string): Promise<ODataResult<irepr.EarningsPaymentListItem>> {\r\n    return OData.getOData<any>(`${this.routePrefix}/ir-epr`, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns list of Payer Summary Reports (PSR / Erillisilmoitus)\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public oDataSearchPayerSummaries(query?: ODataQueryOptions | string): Promise<ODataResult<irpsr.PayerSummaryListItem>> {\r\n    return OData.getOData<any>(`${this.routePrefix}/ir-psr`, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns household yearly list items for the current partner.\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   */\r\n  public oDataSearchHouseholdYears(query?: ODataQueryOptions | string): Promise<ODataResult<HouseholdYearListItem>> {\r\n    return OData.getOData<any>(`${this.routePrefix}/household-years`, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns settings list items for the current partner.\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   * TODO: Return type should be Promise<ODataResult<AccountSettingsListItem>> but AccountSettingsListItem is currently not available. See if the typing should be brought to project.\r\n   */\r\n  public oDataSearchAccountSettings(query?: ODataQueryOptions | string): Promise<ODataResult<any>> {\r\n    return OData.getOData<any>(`${this.routePrefix}/settings`, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns list of customers for the current partner.\r\n   * @param query The options for the query: Filter, search sort etc.\r\n   * This is either a strongly typed object or query string that is added directly.\r\n   * TODO: Return type should be Promise<ODataResult<PersonListItem>>\r\n   */\r\n  public oDataSearchCustomers(query?: ODataQueryOptions | string): Promise<ODataResult<any>> {\r\n    return OData.getOData<any>(`${this.routePrefix}/customers`, query, this.ajax);\r\n  }\r\n\r\n  /**\r\n   * Returns list of customers for the current partner.\r\n   * @param refDate Reference date for the period. Please note that even if the date is not the first day of the given period, the entire period is returned.\r\n   * @param periodType Month, quarter, year or a custom period. The custom period requires endDate. Default value is the month.\r\n   * @param endDate End date for the period. Required only for the custom period.\r\n   * @returns List of customers for the current partner.\r\n   */\r\n  public searchCustomers(refDate: string, periodType: PeriodType = PeriodType.Month, endDate?: string): Promise<PageResultOfApiListItem> {\r\n    // TODO: Return type is really PageResultOfPersonListItem, but PersonListItem is currently not available. See if the typing should be brought to project OR is this method obsolete?\r\n    refDate = Dates.asDate(refDate) as string;\r\n    endDate = Dates.asDate(endDate);\r\n    const method = `${this.routePrefix}/customers/${refDate}?periodType=${periodType || \"\"}&endDate=${endDate || \"\"}`;\r\n    return this.ajax.getJSON(method);\r\n  }\r\n\r\n  // TODO: OData methods!!!\r\n\r\n}","import {\r\n  CalculationImport,\r\n  CompanyImport,\r\n  EInvoicingRequest,\r\n  EInvoiceAddress,\r\n  InvoiceSettingsCheck,\r\n  InvoicingRequest,\r\n  PaymentChannel,\r\n  WorkerCheck,\r\n  WorkerImport,\r\n  PayrollCalculationsSaveOptions\r\n} from \"../model\";\r\nimport { Ajax } from \"./infra\";\r\n\r\n/**\r\n * Methods for mass data uploads.\r\n */\r\nexport class Imports {\r\n\r\n  /**\r\n   * For NG1-dependency injection\r\n   * @ignore\r\n   */\r\n  public static $inject = [\"AjaxNg1\"];\r\n\r\n  /** Base URL for imports. */\r\n  private baseUrl = \"/v03/api/import\";\r\n\r\n  constructor(private ajax: Ajax) {}\r\n\r\n\r\n  /**\r\n   * Imports companies.\r\n   *\r\n   * @param companies The company import data.\r\n   * @returns A Promise with result data ( PartnerCompanyAccountInfo ).\r\n   */\r\n  public importCompanies(companies: CompanyImport[]): Promise<CompanyImport[]> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/companies`, companies);\r\n  }\r\n\r\n  /**\r\n   * Imports workers.\r\n   *\r\n   * @param workers The worker import data.\r\n   * @returns A Promise with result data containing worker IDs.\r\n   */\r\n  public importWorkers(workers: WorkerImport[]): Promise<WorkerImport[]> {\r\n    return this.ajax.postJSON(`${this.baseUrl}/workers`, workers);\r\n  }\r\n\r\n  /**\r\n   * Imports calculations to a new/existing payroll.\r\n   *\r\n   * @param calculations The calculation import data.\r\n   * @param options The save options for the payroll calculations.\r\n   * @returns A Promise with result data containing payroll IDs.\r\n   */\r\n    public importCalculations(calculations: CalculationImport[], options: PayrollCalculationsSaveOptions): Promise<CalculationImport[]> {\r\n      return this.ajax.postJSON(this.getUrlWithOptions(`${this.baseUrl}/calculations`, options), calculations);\r\n    }\r\n\r\n  /**\r\n   * Creates invoices for payrolls.\r\n   *\r\n   * @param payrolls IDs of the payrolls to create invoices for.\r\n   * @param channel The payment channel.\r\n   * @returns A Promise with result data containing created invoice objects.\r\n   */\r\n    public createInvoices(payrolls: InvoicingRequest[], channel: PaymentChannel): Promise<InvoicingRequest[]> {\r\n      return this.ajax.postJSON(`${this.baseUrl}/invoicing/${channel}`, payrolls);\r\n    }\r\n\r\n   /**\r\n    * Sends invoices as e-invoices.\r\n    *\r\n    * @param invoices IDs of the invoices to be sent as e-invoices.\r\n    * @returns A Promise with result data containing e-invoicing result messages.\r\n    */\r\n    public sendEInvoices(invoices: EInvoicingRequest[]): Promise<EInvoicingRequest[]> {\r\n      return this.ajax.postJSON(`${this.baseUrl}/einvoicing`, invoices);\r\n    }\r\n\r\n  /**\r\n   * Checks the existence of the given workers.\r\n   * The given ID can be worker's Salaxy ID, employment ID, social security number of external ID.\r\n   *\r\n   * @param workers The worker IDs to check.\r\n   * @returns A Promise with result data containing worker objects.\r\n   */\r\n    public checkWorkers(workers: WorkerCheck[]): Promise<WorkerCheck[]> {\r\n      return this.ajax.postJSON(`${this.baseUrl}/workers-check`, workers);\r\n    }\r\n\r\n  /**\r\n   * Checks the existence of the invoice settings for a company,\r\n   * The given ID can be company's Salaxy ID or official ID.\r\n   *\r\n   * @param companies The company IDs to check.\r\n   * @param type The type of the check: sepa or eInvoice settings.\r\n   * @returns A Promise with result data containing settings objects.\r\n   */\r\n    public checkInvoiceSettings(companies: InvoiceSettingsCheck[], type: \"sepa\" | \"eInvoice\"): Promise<InvoiceSettingsCheck[]> {\r\n      return this.ajax.postJSON(`${this.baseUrl}/invoice-settings-check/${type}`, companies);\r\n    }\r\n\r\n    /**\r\n     * Query e-invoice addresses for a company.\r\n     * @param officialId Official ID of the company.\r\n     * @returns List of e-invoice addresses.\r\n     */\r\n    public queryEInvoiceAddress(officialId: string): Promise<EInvoiceAddress[]> {\r\n      return this.ajax.getJSON(`${this.baseUrl}/einvoice/receiver?officialId=${encodeURIComponent(officialId)}`);\r\n    }\r\n\r\n    private getUrlWithOptions(url: string, options: any): string {\r\n      const prmsArr: string[] = [];\r\n      options ??= {};\r\n      Object.keys(options).forEach(key => {\r\n        const val = options[key];\r\n        if (val !== undefined && val !== null) {\r\n          prmsArr.push(`${key}=${encodeURIComponent(val)}`);\r\n        }\r\n      });\r\n      const prms = prmsArr.join(\"&\");\r\n      return `${url}${prms ? \"?\"+prms : \"\"}`;\r\n    }\r\n}","import { OpenAPIV3 } from \"../@types\";\r\nimport { Avatar, AvatarPictureType } from \"../model\";\r\n\r\n/** Provides generic HTML (Bootstrap 3 in this version) for rendering Grid cells. */\r\nexport class CellRenderingLogic {\r\n\r\n  /**\r\n   * Gets an agGrid cell renderer based on the property schema.\r\n   * @param schemaProp The schema of the property that is being rendered\r\n   * @returns A cell renderer for AGGrid. Currently always a function: May later be a component.\r\n   * Null, if the column should be rendered using default functionality.\r\n   */\r\n  public static getCellRenderer(schemaProp: OpenAPIV3.NonArraySchemaObject): ((item: any) => string) | undefined {\r\n    switch (schemaProp.format) {\r\n      case \"Employment\":\r\n\r\n        return (item) => `<div>${this.getAvatar(item?.value?.personalInfo.avatar)} ${ item?.value?.personalInfo.avatar.sortableName || \"-\" }</div>`;\r\n      case \"Avatar\":\r\n        return (item) => `<div>${this.getAvatar(item?.value)} ${ item?.value?.sortableName || \"-\" }</div>`;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Renders an avatar as a picture / icon\r\n   * @param avatar The avatar objec that should be rendered.\r\n   * @param fontSize Optional font size. Default is 2em, which typically good in agGrid.\r\n   * @returns HTML for the avatar.\r\n   */\r\n  public static getAvatar(avatar: Avatar, fontSize = \"2em\"): string {\r\n    const isImage = avatar\r\n      && (avatar.pictureType === AvatarPictureType.Uploaded || avatar.pictureType === AvatarPictureType.Gravatar)\r\n      && avatar.url?.substring(0, 4).toLowerCase() === \"http\";\r\n    const isPersonIcon = avatar != null && !isImage && avatar.entityType !== \"company\";\r\n    const initials = avatar ? (avatar.initials || \"-\") : \"?\";\r\n    const color = this.getColor(avatar.color as string);\r\n\r\n    if (isImage) {\r\n      return `<span class=\"salaxy-avatar\" style=\"width: 1em; height: 1em; font-size: ${fontSize}\"><img src=\"${avatar.url}\" /></span>`;\r\n    }\r\n    return `<span class=\"salaxy-avatar\" style=\"width: 2.5em; height: 2.5em;\">\r\n      <i class=\"salaxy-avatar bi ${ isPersonIcon ? \"bi-person-fill\" : \"bi-square-fill\" }\" style=\"color: ${ color || \"gray\"}; font-size: ${fontSize}\">\r\n        <strong style=\"text-shadow: 1px 1px 0px ${ color || \"gray\"}, -1px -1px 0px ${ color || \"gray\"}, 1px -1px 0px ${ color || \"gray\"}, -1px 1px 0px ${ color || \"gray\"}\">${initials}</strong>\r\n      </i>\r\n    </span>`;\r\n  }\r\n\r\n    /**\r\n     * Return the color for the avatar icon and line strokes. NOTE: identical method as in AvatarController.ts. Will be refactored at a later date.\r\n     * If some colors require adjustments due to accessibility reasons, they can be implemented here.\r\n     */\r\n    private static getColor(color: string): string {\r\n      switch (color) {\r\n        case \"yellow\":\r\n          return \"#ebc000\";\r\n        case \"lime\":\r\n          return \"limegreen\";\r\n        case \"pink\":\r\n          return \"#ff8fa2\";\r\n        default:\r\n          return color;\r\n      }\r\n    }\r\n}","/** Different values for visibility of sitemap node. */\r\nexport enum SitemapVisibility {\r\n\r\n  /** Node is visible if it matches the roles filter. This is the default value (null). */\r\n  Visible = \"visible\",\r\n  /**\r\n   * Node is hidden in the navigation, but can be navigated to (parent is shown as current in navi).\r\n   * Details pages are often like: You cannot navigate into them directly from navi, only with ID.\r\n   */\r\n  Hidden = \"hidden\",\r\n\r\n  /**\r\n   * Page is shown as read-only if supported by the page.\r\n   * Note that this is should not be considered as a security measure - it is for UI purposes only.\r\n   */\r\n  ReadOnly = \"readOnly\",\r\n\r\n  /** Page is both hidden and read-only. */\r\n  HiddenReadOnly = \"hiddenReadOnly\",\r\n\r\n  /**\r\n   * Page is disabled completely: Cannot be used in navigation.\r\n   * Note that this is should not be considered as a security measure - it is for UI purposes only.\r\n   */\r\n  Disabled = \"disabled\",\r\n}\r\n","import { HouseholdUsecaseGroup } from \"./HouseholdUsecaseGroup\";\r\nimport { TaxDeductionWorkCategories } from \"../../model\";\r\n\r\n/**\r\n * The base usecase tree for household customers.\r\n * The labels and descriptions are in SALAXY.ENUM.HouseHoldUseCaseTree.\r\n */\r\nexport const householdUsecaseTree: HouseholdUsecaseGroup[] = [\r\n  {\r\n    id: \"childCare\",\r\n    icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/childcare.svg\",\r\n    children: [\r\n      {\r\n        id: \"childCare/mll\",\r\n        uri: \"https://secure.salaxy.com/v02/api/usecases/mll\",\r\n        isHouseholdDeductible: true,\r\n        icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/childcare.svg\",\r\n        badge: \"https://cdn.salaxy.com/ng1/household-usecases/badge/mll.png\",\r\n        occupation: \"53112\",\r\n      },\r\n      {\r\n        id: \"childCare/kela\",\r\n        uri: \"https://secure.salaxy.com/v02/api/usecases/childCare\",\r\n        isChildcareSubsidy: true,\r\n        isHouseholdDeductible: false,\r\n        icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/childcare.svg\",\r\n        badge: \"https://cdn.salaxy.com/ng1/household-usecases/badge/kela.png\",\r\n        occupation: \"53112\",\r\n      },\r\n      {\r\n        id: \"childCare/other\",\r\n        uri: \"https://secure.salaxy.com/v02/api/usecases/childCare\",\r\n        isHouseholdDeductible: true,\r\n        icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/childcare.svg\",\r\n        occupation: \"53112\",\r\n      },\r\n    ],\r\n  },\r\n  {\r\n    id: \"construction\",\r\n    icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/construction.svg\",\r\n    children: [\r\n      {\r\n        id: \"construction/carpenter\",\r\n        icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/construction-carpenter.svg\",\r\n        uri: \"https://secure.salaxy.com/v02/api/usecases/construction\",\r\n        occupation: \"71150\",\r\n      },\r\n      {\r\n        id: \"construction/painter\",\r\n        icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/construction-painter.svg\",\r\n        uri: \"https://secure.salaxy.com/v02/api/usecases/construction\",\r\n        occupation: \"71310\",\r\n      },\r\n      {\r\n        id: \"construction/renovation\",\r\n        icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/construction-renovation.svg\",\r\n        uri: \"https://secure.salaxy.com/v02/api/usecases/construction\",\r\n        isHouseholdDeductible: true,\r\n        occupation: \"71110\",\r\n      },\r\n      {\r\n        id: \"construction/new\",\r\n        icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/construction-new.svg\",\r\n        uri: \"https://secure.salaxy.com/v02/api/usecases/construction\",\r\n        isHouseholdDeductible: false,\r\n        occupation: \"71110\",\r\n      },\r\n      {\r\n        id: \"construction/other\",\r\n        uri: \"https://secure.salaxy.com/v02/api/usecases/other\",\r\n        icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/other.svg\",\r\n        occupation: undefined,\r\n      },\r\n    ],\r\n  },\r\n  {\r\n    id: \"cleaning\",\r\n    uri: \"https://secure.salaxy.com/v02/api/usecases/cleaning\",\r\n    icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/cleaning.svg\",\r\n    children: [\r\n      {\r\n        id: \"cleaning/91110\",\r\n        isHouseholdDeductible: true,\r\n        occupation: \"91110\",\r\n        isContractLessThanYear: true\r\n      },\r\n      {\r\n        id: \"cleaning/51530\",\r\n        icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/cleaning-real-estate.svg\",\r\n        isHouseholdDeductible: true,\r\n        occupation: \"51530\",\r\n        isContractLessThanYear: true\r\n      },\r\n      {\r\n        id: \"cleaning/61132\",\r\n        icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/cleaning-garden.svg\",\r\n        isHouseholdDeductible: true,\r\n        occupation: \"61132\",\r\n        isContractLessThanYear: true\r\n      },\r\n      {\r\n        id: \"cleaning/53221\",\r\n        isHouseholdDeductible: true,\r\n        occupation: \"53221\",\r\n        isContractLessThanYear: true\r\n      },\r\n      {\r\n        id: \"cleaning/other\",\r\n        icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/cleaning-other.svg\",\r\n        isHouseholdDeductible: true,\r\n        occupation: undefined,\r\n        isContractLessThanYear: true\r\n\r\n      },\r\n    ],\r\n  },\r\n  {\r\n    id: \"other\",\r\n    uri: \"https://secure.salaxy.com/v02/api/usecases/other\",\r\n    icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/other.svg\",\r\n    children: [\r\n      {\r\n        id: \"other/53222\",\r\n        isHouseholdDeductible: true,\r\n        taxDeductionCategories: TaxDeductionWorkCategories.Carework,\r\n        occupation: \"53222\",\r\n      },\r\n      {\r\n        id: \"other/61112\",\r\n        occupation: \"61112\",\r\n      },\r\n      {\r\n        id: \"other/91110\",\r\n        isHouseholdDeductible: true,\r\n        taxDeductionCategories: TaxDeductionWorkCategories.Householdwork,\r\n        occupation: \"91110\",\r\n      },\r\n      {\r\n        id: \"other/53213\",\r\n        isHouseholdDeductible: true,\r\n        taxDeductionCategories: TaxDeductionWorkCategories.Carework,\r\n        occupation: \"53213\",\r\n      },\r\n      {\r\n        id: \"other/53212\",\r\n        isHouseholdDeductible: true,\r\n        taxDeductionCategories: TaxDeductionWorkCategories.Carework,\r\n        occupation: \"53212\",\r\n      },\r\n      {\r\n        id: \"other/53112\",\r\n        isHouseholdDeductible: true,\r\n        taxDeductionCategories: TaxDeductionWorkCategories.Carework,\r\n        occupation: \"53112\",\r\n      },\r\n      {\r\n        id: \"other/53221\",\r\n        isHouseholdDeductible: true,\r\n        taxDeductionCategories: TaxDeductionWorkCategories.Carework,\r\n        occupation: \"53221\",\r\n      },\r\n      {\r\n        id: \"other/62100\",\r\n        icon: \"https://cdn.salaxy.com/ng1/household-usecases/icon/other.svg\",\r\n        occupation: \"62100\",\r\n      },\r\n      {\r\n        id: \"other/51530\",\r\n        isHouseholdDeductible: true,\r\n        taxDeductionCategories: TaxDeductionWorkCategories.Householdwork,\r\n        occupation: \"51530\",\r\n      },\r\n      {\r\n        id: \"other/61132\",\r\n        isHouseholdDeductible: true,\r\n        taxDeductionCategories: TaxDeductionWorkCategories.Householdwork,\r\n        occupation: \"61132\",\r\n      },\r\n      {\r\n        id: \"other/undefined\",\r\n        occupation: undefined,\r\n      },\r\n    ],\r\n  },\r\n];\r\n","import { householdUsecaseTree } from \"./householdUsecaseTree\";\r\nimport { Calculation, CalculationRowType, SalaryKind, TaxDeductionWorkCategories } from \"../../model\";\r\nimport { Dates } from \"../../util\";\r\nimport { CalculatorLogic, Translations } from \"../../logic\";\r\nimport { HouseholdUsecase } from \"./HouseholdUsecase\";\r\nimport { UsecaseChildCare } from \"./UsecaseChildCare\";\r\nimport { UsecaseCleaning } from \"./UsecaseCleaning\";\r\nimport { UsecaseConstruction } from \"./UsecaseConstruction\";\r\nimport { HouseholdUsecaseGroup } from \"./HouseholdUsecaseGroup\";\r\n\r\n/**\r\n * Provides business logic for Calculation usecases:\r\n * Salary framework contracts (\"työehtosopimus\") and other salary recommendations\r\n * that are used as bases for salary calculation.\r\n */\r\nexport class HouseholdUsecasesLogic {\r\n\r\n  /**\r\n   * Known use cases in the first implementation.\r\n   * These implementations replace the olf Calc.Framework.Type -based solution that is not very extensible.\r\n   * The naming is still based on the old system for easier compatibility.\r\n   */\r\n  public static readonly knownUseCases = {\r\n\r\n    /** Usecase has not been defined. Note that value is null, not \"https://secure.salaxy.com/v02/api/usecases/notDefined\" */\r\n    notDefined: null,\r\n\r\n    /** Generic child care usecase */\r\n    childCare: \"https://secure.salaxy.com/v02/api/usecases/childCare\",\r\n\r\n    /** Cleaning */\r\n    cleaning: \"https://secure.salaxy.com/v02/api/usecases/cleaning\",\r\n\r\n    /** Construction (Raksa) */\r\n    construction: \"https://secure.salaxy.com/v02/api/usecases/construction\",\r\n\r\n    /** Child care according to MLL recommendations. */\r\n    mll: \"https://secure.salaxy.com/v02/api/usecases/mll\",\r\n\r\n    /**\r\n     * Santa Claus for Christmas campaigns: By default, this is not visible in the household UI:\r\n     * It needs to be separately enabled for chirstmas campaigns.\r\n     */\r\n    santaClaus: \"https://secure.salaxy.com/v02/api/usecases/santaClaus\",\r\n\r\n    /** Generic household salary payment usecase user interface. */\r\n    other: \"https://secure.salaxy.com/v02/api/usecases/other\",\r\n  };\r\n\r\n  /**\r\n   * Finds a parent group of a given usecase node\r\n   * @param usecaseId - The usecase whose parent is fetched.\r\n   * If you pass a group here, the function will return null which will typically mean the tree root in the user interface.\r\n   *\r\n   * @example\r\n   * ```\r\n   * // Creates a simple calculation\r\n   * const usecase = UsecasesLogic.findUsecaseById(\"childCare/mll\");\r\n   * UsecasesLogic.setUsecase(this.context.calculations.current, usecase);\r\n   * this.context.calculations.recalculateCurrent((calc) => {\r\n   *     calc.worker.paymentData.telephone = \"+358401234567\";\r\n   * });\r\n   * ```\r\n   */\r\n  public static findUsecaseById(usecaseId: string): HouseholdUsecase | undefined {\r\n    for (const group of HouseholdUsecasesLogic.getUsecaseTree()) {\r\n      for (const usecase of group.children || []) {\r\n        if (usecase.id === usecaseId) {\r\n          return usecase;\r\n        }\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Gets a tree of usecases (user interfaces for defining a framework) for a given role.\r\n   */\r\n  public static getUsecaseTree(): HouseholdUsecaseGroup[] {\r\n    const tree: HouseholdUsecaseGroup[] = householdUsecaseTree;\r\n    for (const group of tree) {\r\n      this.translate(\"HouseHoldUseCaseTree\", group.id, group);\r\n      for (const usecase of group.children ?? []) {\r\n        usecase.badge = usecase.badge || group.badge;\r\n        usecase.icon = usecase.icon || group.icon;\r\n        usecase.uri = usecase.uri || group.uri;\r\n        this.translate(\"HouseHoldUseCaseTree\", usecase.id, usecase);\r\n      }\r\n    }\r\n    return tree;\r\n  }\r\n\r\n  /**\r\n   * Abstract the getting of the use case for the calculation.\r\n   * We are expecting changes to the usecase implementation.\r\n   * @param calc Calculation into which the usecase data is stored.\r\n   */\r\n  public static getUsecaseData(calc: Calculation): HouseholdUsecase {\r\n    if (!calc.usecase?.uri) {\r\n      const usecase = HouseholdUsecasesLogic.findUsecaseById(\"other/undefined\");\r\n      calc.usecase = {\r\n        uri: usecase?.uri,\r\n        label: usecase?.label,\r\n        description: usecase?.descr,\r\n        data: usecase,\r\n      };\r\n\r\n    }\r\n    return calc.usecase.data as HouseholdUsecase;\r\n  }\r\n\r\n  /**\r\n   * Sets calculation properties based on selected usecase.\r\n   * @param calc Calculation to set\r\n   * @param usecase Usecase to apply.\r\n   * @example\r\n   * ```\r\n   * // Creates a simple calculation\r\n   * const usecase = UsecasesLogic.findUsecaseById(\"childCare/mll\");\r\n   * UsecasesLogic.setUsecase(this.calc, usecase);\r\n   * this.calcApi.recalculate(this.calc).then((data) => {\r\n   *   angular.copy(data, this.calc);\r\n   * });\r\n   * ```\r\n   */\r\n  public static setUsecase(calc: Calculation, usecase: HouseholdUsecase): HouseholdUsecase {\r\n    calc.usecase = {\r\n      uri: usecase.uri,\r\n      label: usecase.label,\r\n      description: usecase.descr,\r\n      data: usecase,\r\n    };\r\n    this.applyUseCase(calc);\r\n    return this.getUsecaseData(calc);\r\n  }\r\n\r\n  /**\r\n   * Applies the usecase to a calculation, especially to the old Framework object.\r\n   * Should be called before sending the calculation to the server (recalculate/save).\r\n   * @param calc Calculation where usecase is set to calc.data.usecase.\r\n   */\r\n  public static applyUseCase(calc: Calculation): void {\r\n    const usecase = this.getUsecaseData(calc);\r\n    switch (usecase.uri) {\r\n      case HouseholdUsecasesLogic.knownUseCases.childCare:\r\n        this.applyUsecaseChildCare(calc);\r\n        break;\r\n      case HouseholdUsecasesLogic.knownUseCases.mll:\r\n        this.applyUsecaseMll(calc);\r\n        break;\r\n      case HouseholdUsecasesLogic.knownUseCases.cleaning:\r\n        this.applyUsecaseCleaning(calc);\r\n        break;\r\n      case HouseholdUsecasesLogic.knownUseCases.construction:\r\n        this.applyUsecaseConstruction(calc);\r\n        break;\r\n      case HouseholdUsecasesLogic.knownUseCases.santaClaus:\r\n        this.applyUsecaseSantaClaus(calc);\r\n        break;\r\n      case HouseholdUsecasesLogic.knownUseCases.other:\r\n        this.applyCommonUsecaseProperties(calc);\r\n        break;\r\n      case HouseholdUsecasesLogic.knownUseCases.notDefined:\r\n        // Nothing applied.\r\n        break;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Applies the constructions salary calculation usecase.\r\n   * @param calc Calculation to which the usecase is applied.\r\n   */\r\n  public static applyUsecaseConstruction(calc: Calculation): void {\r\n    const usecase = this.getUsecaseData(calc) as UsecaseConstruction;\r\n    const mainRow = CalculatorLogic.getSalaryRow(calc) ?? {};\r\n    switch (mainRow?.rowType) {\r\n      case CalculationRowType.HourlySalary:\r\n      case CalculationRowType.MonthlySalary:\r\n      case CalculationRowType.Salary:\r\n        break;\r\n      case CalculationRowType.TotalEmployerPayment:\r\n        usecase.isTesIncludedInSalary = true;\r\n        usecase.isExpensesCustom = true;\r\n        usecase.dailyExpenses = undefined;\r\n        usecase.dailyTravelExpenses = undefined;\r\n        break;\r\n      default:\r\n        mainRow.rowType = CalculationRowType.Salary;\r\n        break;\r\n    }\r\n    usecase.taxDeductionCategories = TaxDeductionWorkCategories.HomeImprovement;\r\n    usecase.isTesIncludedInSalary = usecase.isTesIncludedInSalary || false;\r\n    usecase.isExpensesCustom = usecase.isExpensesCustom || false;\r\n    const numberOfDays = calc?.framework?.numberOfDays || 0;\r\n    const totalBaseSalary = (mainRow.count ?? 0) * (mainRow.price ?? 0);\r\n    calc.rows = calc.rows?.filter((row) => row.data?.usecase != usecase.uri );\r\n    if (!usecase.isTesIncludedInSalary) {\r\n      this.addUsecaseRow(calc, usecase.uri, CalculationRowType.HolidayCompensation, 0.185, totalBaseSalary, \"Lomakorvaus\");\r\n      this.addUsecaseRow(calc, usecase.uri, CalculationRowType.TesWorktimeShortening, 0.077, totalBaseSalary, \"Erillinen palkan osa\");\r\n    }\r\n    if (usecase.isExpensesCustom) {\r\n      this.addUsecaseRow(calc, usecase.uri, CalculationRowType.MilageOther, numberOfDays, usecase.dailyTravelExpenses,\r\n        `Matkakustannusten korvaus ${usecase.dailyTravelExpenses || 0} €/päivä`);\r\n      this.addUsecaseRow(calc, usecase.uri, CalculationRowType.ToolCompensation, numberOfDays, usecase.dailyExpenses,\r\n        `Työkalukorvaus ${usecase.dailyExpenses || 0} €/päivä`);\r\n    } else {\r\n      const milage = HouseholdUsecasesLogic.raksaKmChart(usecase.dailyTravelExpensesKm);\r\n      const toolCompensation = 1.68;\r\n      this.addUsecaseRow(calc, usecase.uri, CalculationRowType.MilageOther, numberOfDays, milage, `Matkakustannusten korvaus ${milage || 0} €/päivä`);\r\n      this.addUsecaseRow(calc, usecase.uri, CalculationRowType.ToolCompensation, numberOfDays, toolCompensation, `Työkalukorvaus ${toolCompensation || 0} €/päivä`);\r\n    }\r\n    this.applyCommonUsecaseProperties(calc);\r\n  }\r\n\r\n  /** Applies the childCare salary calculation usecase */\r\n  public static applyUsecaseChildCare(calc: Calculation): void {\r\n    const usecase = this.getUsecaseData(calc) as UsecaseChildCare;\r\n    const mainRow = CalculatorLogic.getSalaryRow(calc) ?? {};\r\n    // Salary settings\r\n    if (mainRow.rowType === CalculationRowType.HourlySalary) {\r\n      mainRow.message = \"Lastenhoitajan tuntipalkka\";\r\n    } else {\r\n      mainRow.rowType = CalculationRowType.MonthlySalary;\r\n      mainRow.message = \"Lastenhoitajan kuukausipalkka\";\r\n    }\r\n    // Child care subsidy and tax deduction\r\n    calc.rows = calc.rows?.filter((x) => x.rowType !== CalculationRowType.ChildCareSubsidy);\r\n\r\n    if (usecase.isChildcareSubsidy) {\r\n      calc.rows ??= [];\r\n      calc.rows.push({\r\n        count: 1,\r\n        price: usecase.subsidyAmount,\r\n        rowType: CalculationRowType.ChildCareSubsidy,\r\n\r\n      });\r\n    } else {\r\n      usecase.subsidyAmount = undefined;\r\n    }\r\n\r\n    if (usecase.isChildcareSubsidy) {\r\n      usecase.isHouseholdDeductible = false;\r\n      usecase.taxDeductionCategories = undefined;\r\n    }\r\n    if (usecase.isHouseholdDeductible == null) {\r\n      usecase.isHouseholdDeductible = true;\r\n    }\r\n    usecase.taxDeductionCategories = usecase.isHouseholdDeductible ? TaxDeductionWorkCategories.Carework : undefined;\r\n    this.applyCommonUsecaseProperties(calc);\r\n  }\r\n\r\n  /** Applies the cleaning salary calculation usecase */\r\n  public static applyUsecaseCleaning(calc: Calculation): void {\r\n    const usecase = this.getUsecaseData(calc) as UsecaseCleaning;\r\n    const mainRow = CalculatorLogic.getSalaryRow(calc) ?? {};\r\n    if (mainRow.rowType === CalculationRowType.HourlySalary) {\r\n      // Potentially add custom row message here\r\n    } else if (mainRow.rowType === CalculationRowType.MonthlySalary) {\r\n      // Potentially add custom row message here\r\n    } else {\r\n      mainRow.rowType = CalculationRowType.Salary;\r\n    }\r\n    calc.rows = calc.rows?.filter((x) => x.rowType !== CalculationRowType.HolidayCompensation);\r\n    if (!usecase.isFullTime) {\r\n      const salary = (mainRow.count ?? 0) * (mainRow.price ?? 0);\r\n      const percent = usecase.isContractLessThanYear ? 0.09 : 0.115;\r\n      calc.rows ??= [];\r\n      calc.rows.push({\r\n        count: percent,\r\n        price: salary,\r\n        rowType: CalculationRowType.HolidayCompensation,\r\n      });\r\n    }\r\n    if (usecase.isHouseholdDeductible == null) {\r\n      usecase.isHouseholdDeductible = true;\r\n    }\r\n    usecase.taxDeductionCategories = TaxDeductionWorkCategories.Householdwork;\r\n    this.applyCommonUsecaseProperties(calc);\r\n  }\r\n\r\n  /** Applies the MLL salary calculation usecase */\r\n  public static applyUsecaseMll(calc: Calculation): void {\r\n    const usecase = this.getUsecaseData(calc) as UsecaseChildCare;\r\n    const mainRow = CalculatorLogic.getSalaryRow(calc, CalculationRowType.HourlySalary) ?? {};\r\n    mainRow.rowType = CalculationRowType.HourlySalary;\r\n    mainRow.message = \"Lastenhoitajan tuntipalkka\";\r\n    if (!mainRow.count || mainRow.count < 2) {\r\n      mainRow.count = 2;\r\n    }\r\n    if (!usecase.useCustomPrice) {\r\n      mainRow.price = 9.50;\r\n    }\r\n    calc.rows = calc.rows?.filter((x) => x.rowType !== CalculationRowType.SundayWork);\r\n    if (usecase.isSunday) {\r\n      calc.rows ??= [];\r\n      calc.rows.push({\r\n        count: 1,\r\n        price: (mainRow.count ?? 0) * (mainRow.price ?? 0),\r\n        rowType: CalculationRowType.SundayWork,\r\n      });\r\n\r\n    }\r\n\r\n    calc.framework ??= {};\r\n    // Deductions\r\n    calc.framework.isYksityisenHoidonTuki = false;\r\n    usecase.isHouseholdDeductible = true;\r\n    usecase.taxDeductionCategories = TaxDeductionWorkCategories.Carework;\r\n\r\n    // Defaults to Period\r\n    calc.info ??= {};\r\n    if (!calc.info.workStartDate) {\r\n      calc.info.workStartDate = Dates.getToday();\r\n      calc.info.workEndDate = null; // workEndDate is no longer valid\r\n      calc.framework.numberOfDays = null;\r\n    }\r\n    if (!calc.info.workEndDate) {\r\n      calc.info.workEndDate = calc.info.workStartDate;\r\n      calc.framework.numberOfDays = null;\r\n    }\r\n    if (!calc.framework.numberOfDays) {\r\n      calc.framework.numberOfDays = Dates.getWorkdays(\r\n        calc.info.workStartDate,\r\n        calc.info.workEndDate,\r\n      ).length;\r\n    }\r\n    this.applyCommonUsecaseProperties(calc);\r\n  }\r\n\r\n  private static applyUsecaseSantaClaus(calc: Calculation): void {\r\n    const usecase = this.getUsecaseData(calc);\r\n    const mainRow = CalculatorLogic.getSalaryRow(calc, CalculationRowType.Salary) ?? {};\r\n    mainRow.rowType = CalculationRowType.Salary;\r\n    mainRow.message = \"Joulupukin palkka\";\r\n    usecase.isHouseholdDeductible = false;\r\n    usecase.taxDeductionCategories = undefined;\r\n    const year = Dates.getMonth(\"today\")! < 6 ? Dates.getYear(\"today\")! - 1 : Dates.getYear(\"today\")!;\r\n    const nearestXmsEve = Dates.getDate(year!, 12, 24);\r\n    calc.info ??= {};\r\n    calc.info.workStartDate = nearestXmsEve;\r\n    calc.info.workEndDate = nearestXmsEve;\r\n    calc.framework ??= {};\r\n    calc.framework.numberOfDays = 1;\r\n    this.applyCommonUsecaseProperties(calc);\r\n\r\n  }\r\n\r\n  private static applyCommonUsecaseProperties(calc: Calculation) {\r\n    const usecase = this.getUsecaseData(calc);\r\n    const mainRow = CalculatorLogic.getSalaryRow(calc) ?? {};\r\n    calc.info ??= {};\r\n    calc.info.occupationCode = usecase.occupation;\r\n    calc.salary ??= {kind: SalaryKind.Undefined, price: 0};\r\n    calc.salary.isHouseholdDeductible = usecase.isHouseholdDeductible ?? false;\r\n    calc.salary.taxDeductionCategories = usecase.taxDeductionCategories;\r\n\r\n\r\n    if (mainRow.rowType === CalculationRowType.HourlySalary) {\r\n      // For hourly salary, default to null so that users really sets the value.\r\n      if (mainRow.count === 0) {\r\n        mainRow.count = null;\r\n      }\r\n    } else {\r\n      // We currently do not support multiple months etc. in these user interfaces.\r\n      // API does support them, but they would add unnecessary complexity to UX.\r\n      mainRow.count = 1;\r\n    }\r\n    mainRow.rowType = mainRow.rowType || CalculationRowType.Salary;\r\n  }\r\n\r\n  private static translate(name: string, id: string, useCaseOrGroup: HouseholdUsecase | HouseholdUsecaseGroup) {\r\n    useCaseOrGroup.label = Translations.get(\"SALAXY.ENUM.\" + name + \".\" + id.replace(/\\//g, \".\") + \".label\") || useCaseOrGroup.label;\r\n    useCaseOrGroup.descr = Translations.get(\"SALAXY.ENUM.\" + name + \".\" + id.replace(/\\//g, \".\") + \".description\") || useCaseOrGroup.descr;\r\n  }\r\n\r\n  /** Adds a usecase row if price is not zero */\r\n  private static addUsecaseRow(calc: Calculation, usecaseId: string | undefined, rowType: CalculationRowType, count: number | undefined , price: number | undefined , message?: string) {\r\n    if (price) {\r\n      calc.rows ??= [];\r\n      calc.rows.push({\r\n        rowType,\r\n        price,\r\n        message,\r\n        count,\r\n        data: { usecase: usecaseId }\r\n      });\r\n    }\r\n  }\r\n\r\n  /** Does the kilometers milage euros conversion */\r\n  private static raksaKmChart(km: number): number\r\n  {\r\n      if ((km ?? 0) < 5) return 0;\r\n      if (km < 10) return 1.94;\r\n      if (km < 20) return 3.13;\r\n      if (km < 30) return 5.63;\r\n      if (km < 40) return 8.20;\r\n      if (km < 50) return 10.10;\r\n      if (km < 60) return 12.24;\r\n      if (km < 70) return 16.08;\r\n      if (km < 80) return 18.20;\r\n      if (km < 90) return 20.68;\r\n      if (km < 100) return 23.55;\r\n      return 26.40;\r\n  }\r\n}\r\n","import { CalculationRowType, UserDefinedRow } from \"../model\";\r\nimport { DatelyObject } from \"../util\";\r\nimport { RowUsecaseCalcData } from \"./RowUsecaseCalcData\";\r\nimport { UsecaseValidationMessage } from \"./UsecaseValidationMessage\";\r\n\r\n/**\r\n * Client-side logic for Usecase.\r\n */\r\nexport abstract class BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * @param _row Row to update.\r\n   * @param _date The reference date for which the logic is done.\r\n   * Typically the salary date of a calculation and the typically, the information needed is just the year for which the yearly changing numbers are fetched, but may later have more extended features.\r\n   * @param _calcData The calculation related data that is required by the more complex calculations:\r\n   * This data is available only after first round-trip to the server (results object exists) and not all user interfaces may provide this.\r\n   */\r\n  public updateUsecase(_row: UserDefinedRow, _date: DatelyObject, _calcData: RowUsecaseCalcData | undefined): void {\r\n    // Do nothing by default.\r\n  }\r\n\r\n  /**\r\n   * Gets validation message for the usecase.\r\n   * @param row Row to validate\r\n   * @returns A message that is either an error or OK (default). Warnings, info etc. may later be supported.\r\n   */\r\n  public getValidation(row: UserDefinedRow): UsecaseValidationMessage | undefined {\r\n    if ((row.price ?? 0) < 0) {\r\n      if (!this.canHaveNegativeRow(row.rowType ?? CalculationRowType.Unknown)) {\r\n        return {\r\n          type: \"error\",\r\n\r\n          msg: \"SALAXY.VALIDATION.Usecases.negativeRow\",\r\n        };\r\n      }\r\n    }\r\n    if ((row.count ?? 0) < 0) {\r\n      return {\r\n        type: \"error\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.negativeAmount\",\r\n      };\r\n    }\r\n    if (this.getUcValidation) {\r\n      return this.getUcValidation(row);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  /** Internal validation method that deriving classes should implement. */\r\n  protected abstract getUcValidation?(row: UserDefinedRow): UsecaseValidationMessage | undefined;\r\n\r\n  /**\r\n   * Returns true if the row type supports negative values.\r\n   * Typically, this means that the sum of all rows must still be zero or positive.\r\n   * @param rowType Row type to check\r\n   */\r\n  private canHaveNegativeRow(rowType: CalculationRowType): boolean {\r\n    // NOTE: This is also validated server-side (GetSupportsNegative()), so you need to add it there as well.\r\n    const supportsNegative: CalculationRowType[] = [\r\n      CalculationRowType.MonthlySalary,\r\n      CalculationRowType.HourlySalary,\r\n      CalculationRowType.Salary,\r\n      CalculationRowType.TimeRatePay,\r\n      CalculationRowType.Compensation,\r\n      CalculationRowType.Expenses,\r\n      CalculationRowType.IrIncomeType\r\n    ];\r\n    return !!supportsNegative.find((x) => x === rowType);\r\n  }\r\n}","import { UserDefinedRow, AbsencePeriodUsecase, AbsenceCauseCode, CalculationRowType, CalculationRowSource } from \"../../model\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\nimport { HolidaysLogic } from \"../../logic/HolidaysLogic\";\r\nimport { UsecaseRow } from \"../UsecaseRow\";\r\nimport { Dates } from \"../../util\";\r\nimport { Translations } from \"../../logic\";\r\n\r\n/** Client-side logic for Absence period as UserDefined row (in calculation).  */\r\nexport class AbsencePeriodUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * @param row Row to update.\r\n   */\r\n  public updateUsecase(row: UsecaseRow<CalculationRowType.AbsencePeriod, AbsencePeriodUsecase>): void {\r\n    const data: AbsencePeriodUsecase = row.data ?? {};\r\n    data.kind = data.kind || AbsenceCauseCode.Undefined;\r\n    this.updateIsPaid(row);\r\n  }\r\n\r\n  /** Gets validation message for AbsencePeriodUsecaseLogic  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage {\r\n    const data: AbsencePeriodUsecase = row.data ?? {};\r\n    data.kind = data.kind ?? AbsenceCauseCode.Undefined;\r\n    if (data.kind === AbsenceCauseCode.Undefined &&\r\n        row.source !== CalculationRowSource.PriceEmployment &&\r\n        row.source !== CalculationRowSource.PriceCompany ) {\r\n      return {\r\n        msg: Translations.get(\"SALAXY.VALIDATION.Usecases.noKind\"),\r\n        type: \"error\"\r\n      };\r\n    }\r\n\r\n    return {\r\n      type: \"default\",\r\n      msg: undefined,\r\n    };\r\n  }\r\n  /**\r\n   * Updates the IsHolidayAccrual\r\n   * @param row Current row that is being edited.\r\n   */\r\n  public updateIsHolidayAccrual(row: UsecaseRow<CalculationRowType.AbsencePeriod, AbsencePeriodUsecase>): void {\r\n    row.data.isHolidayAccrual = row.data.isPaid;\r\n  }\r\n\r\n  /**\r\n   * Returns true if the select component should be shown for absence isPaid.\r\n   * @param row Current row that is being edited.\r\n   */\r\n  public canSelectIsPaid(row: UsecaseRow<CalculationRowType.AbsencePeriod, AbsencePeriodUsecase>): boolean {\r\n    if (!row.data.kind) {\r\n      return false;\r\n    }\r\n    const type = HolidaysLogic.getSalaryPayableType(row.data.kind);\r\n    return type === \"defaultPaid\" || type === \"defaultUnpaid\";\r\n  }\r\n  /**\r\n   * Updates the IsPaid according to absence type.\r\n   * @param row Current row that is being edited.\r\n   * @param isKindChange Indicates if the change is due to kind change.\r\n   */\r\n  public updateIsPaid(row: UsecaseRow<CalculationRowType.AbsencePeriod, AbsencePeriodUsecase>, isKindChange = false): void {\r\n    if (isKindChange) {\r\n      // reset logic\r\n      row.data.isPaid = null;\r\n    }\r\n    const type = HolidaysLogic.getSalaryPayableType(row.data.kind);\r\n    if (row.data.isPaid == null) {\r\n      row.data.isPaid = (type == \"paid\" || type == \"defaultPaid\");\r\n      this.updateIsHolidayAccrual(row);\r\n    }\r\n    else if (row.data.isPaid == true && type == \"unpaid\") {\r\n      row.data.isPaid = false;\r\n      this.updateIsHolidayAccrual(row);\r\n    }\r\n    else if (row.data.isPaid == false && type == \"paid\") {\r\n      row.data.isPaid = true;\r\n      this.updateIsHolidayAccrual(row);\r\n    }\r\n  }\r\n  /**\r\n   * Updates the workdays count\r\n   * @param row Current row that is being edited.\r\n   */\r\n  public updatePeriodDays(row: UsecaseRow<CalculationRowType.AbsencePeriod, AbsencePeriodUsecase>): void {\r\n    if (!row.period) {\r\n      return;\r\n    }\r\n    if (row.period.start && row.period.end && row.period.start > row.period.end) {\r\n      row.period.end = row.period.start;\r\n    }\r\n    if (row.period.start && row.period.end) {\r\n      if (row.period.days) {\r\n        row.period.days = Dates.getWorkdays(row.period.start, row.period.end);\r\n        row.period.daysCount = row.period.days.length;\r\n      } else {\r\n        row.period.daysCount = Dates.getWorkdays(row.period.start, row.period.end).length;\r\n      }\r\n    }\r\n    row.count = row.period.daysCount || 0;\r\n  }\r\n\r\n  /**\r\n   * Sets the days array in period to enable days selection UI.\r\n   * @param row Current row that is being edited.\r\n   */\r\n  public setDaysSelection(row: UsecaseRow<CalculationRowType.AbsencePeriod, AbsencePeriodUsecase>): void {\r\n    row.period ??= {};\r\n    row.period.days = Dates.getWorkdays(row.period?.start ?? \"\", row.period?.end ?? \"\");\r\n    row.period.daysCount = row.period.days.length;\r\n    row.count = row.period.daysCount ?? 0;\r\n  }\r\n\r\n\r\n}\r\n","import { DatelyObject, Numeric, Years } from \"../../util\";\r\nimport { Translations } from \"../../logic\";\r\nimport { BicycleBenefitKind, BicycleBenefitUsecase, UserDefinedRow } from \"../../model\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/** Client-side logic for BicycleBenefitUsecase  */\r\nexport class BicycleBenefitUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  private _calculatedTaxable: number;\r\n  private _calculatedTaxfree: number | undefined;\r\n  private _row: UserDefinedRow;\r\n  private _date: DatelyObject;\r\n\r\n  /** Returns calculated taxable value. */\r\n  public get calculatedTaxable(): number {\r\n    return this._calculatedTaxable;\r\n  }\r\n\r\n  /** Returns calculated taxfree value */\r\n  public get calculatedTaxfree(): number | undefined {\r\n    return this._calculatedTaxfree;\r\n  }\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * @param row Row to update.\r\n   * @param date The reference date for which the logic is done.\r\n   * Typically the salary date of a calculation and the typically, the information needed is just the year for which the yearly changing numbers are fetched, but may later have more extended features.\r\n   */\r\n  public updateUsecase(row: UserDefinedRow, date: DatelyObject): void {\r\n    row = row ?? this._row;\r\n    this._row = row;\r\n    date = date ?? this._date;\r\n    this._date = date;\r\n\r\n    const data: BicycleBenefitUsecase = row.data ?? {};\r\n    if (!data.kind || data.kind == BicycleBenefitKind.NoDeduction || data.kind == BicycleBenefitKind.Undefined) {\r\n        data.kind = BicycleBenefitKind.NoDeduction;\r\n        data.deduction = null;\r\n    } else {\r\n      data.deduction = (data.deduction ?? 0) < 0 ? null : data.deduction;\r\n    }\r\n\r\n    data.taxable = (data.taxable ?? 0) < 0 ? null : data.taxable;\r\n\r\n    if (data.kind == BicycleBenefitKind.PeriodicalDeduction) {\r\n      data.periodDivider =  data.periodDivider ?? 12;\r\n      data.periodDivider = data.periodDivider < 0 ? 12 : data.periodDivider;\r\n      if ( data.periodDivider  == 0) {\r\n        data.kind = BicycleBenefitKind.SingleDeduction;\r\n      }\r\n    }\r\n    else\r\n    {\r\n      data.periodDivider = null;\r\n    }\r\n\r\n    const limit = Years.getYearlyChangingNumbers(date)?.sideCosts?.taxFreeBicycleBenefit ?? 0;\r\n    let total = Numeric.round((row.price ?? 0) * (row.count ?? 1), 2) ?? 0;\r\n    if (total < 0) {\r\n      total = 0;\r\n    }\r\n\r\n    let deduction = data.deduction ?? 0;\r\n    if (deduction > total) {\r\n      deduction = 0;\r\n      data.deduction = null;\r\n    }\r\n    if (data.taxable && data.taxable > ( total - deduction) ) {\r\n      data.taxable = null;\r\n    }\r\n\r\n    const calcTaxable = Numeric.round(Math.max(0, total - deduction - limit), 2) ?? 0;\r\n    if (data.taxable && data.taxable <= calcTaxable) {\r\n      data.taxable = null;\r\n    }\r\n    const calcTaxfree = Numeric.round(Math.max(0, total - deduction - (data.taxable ?? calcTaxable)), 2);\r\n\r\n    this._calculatedTaxable = data.taxable ?? calcTaxable;\r\n    this._calculatedTaxfree = calcTaxfree;\r\n  }\r\n\r\n  /**\r\n   * Gets validation message for the usecase.\r\n   * @param row Row to validate\r\n   * @returns A message that is either an error or OK (default). Warnings, info etc. may later be supported.\r\n   */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage {\r\n    const data: BicycleBenefitUsecase = row?.data || {};\r\n    let msg;\r\n    switch (data.kind) {\r\n      case BicycleBenefitKind.SingleDeduction:\r\n        msg = `${Translations.get(\"SALAXY.VALIDATION.Usecases.bicycleBenefit.singleDeduction\")} ${Numeric.formatPrice(data.deduction || 0)}`;\r\n        break;\r\n      case BicycleBenefitKind.PeriodicalDeduction:\r\n        msg = `${Translations.get(\"SALAXY.VALIDATION.Usecases.bicycleBenefit.periodicalDeduction\")} ${Numeric.formatPrice(data.deduction || 0)} ${Translations.get(\"SALAXY.VALIDATION.Usecases.bicycleBenefit.periodicalDeduction2\")} ${data.periodDivider || 12} ${Translations.get(\"SALAXY.VALIDATION.Usecases.bicycleBenefit.periodicalDeduction3\")}`;\r\n        break;\r\n      case BicycleBenefitKind.NoDeduction:\r\n      default:\r\n        msg = \"SALAXY.VALIDATION.Usecases.bicycleBenefit.noDeduction\";\r\n        break;\r\n    }\r\n    return { type: \"default\", msg };\r\n  }\r\n}\r\n","import { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\n\r\n/**\r\n * BoardUsecase currrently has no client-side logic:\r\n * It just forces the IR code to 308\r\n */\r\nexport class BoardUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /** Gets validation message for BoardUsecaseLogic  */\r\n  public getUcValidation(): UsecaseValidationMessage | undefined {\r\n    return undefined;\r\n  }\r\n\r\n}\r\n","import { Numeric } from \"../../util\";\r\nimport { EnumerationsLogic, Translations } from \"../../logic\";\r\nimport { CarBenefitUsecase, UserDefinedRow } from \"../../model\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\n\r\n/**\r\n * Usecase logic for car benefit rows.\r\n */\r\nexport class CarBenefitUsecaseLogic extends BaseUsecaseLogic {\r\n  /** Gets validation message for BoardUsecaseLogic  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage {\r\n    const data: CarBenefitUsecase = row.data || {};\r\n    if (data.emissionsValue && data.emissionsValue < 0 || data.emissionsValue && data.emissionsValue > 100) {\r\n      return {\r\n        type: \"error\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.carBenefit.invalidEmissionValues\",\r\n      };\r\n    }\r\n    if (!data.kind || !data.ageGroup || (data.isKilometersBased && data.kilometers == null)) {\r\n      return {\r\n        type: \"error\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.carBenefit.default\",\r\n      };\r\n    }\r\n    const msg = EnumerationsLogic.getEnumLabel(\"CarBenefitCode\", data.kind)\r\n      + \", \"\r\n      + EnumerationsLogic.getEnumLabel(\"AgeGroupCode\", data.ageGroup)\r\n      + (data.isKilometersBased ? `${Translations.get(\"SALAXY.VALIDATION.Usecases.carBenefit.kilometerBased\")} ${data.kilometers || \"\"}km` : \"\")\r\n      + (data.deduction ? `. ${Translations.get(\"SALAXY.VALIDATION.Usecases.carBenefit.deduction\")} ${Numeric.formatPrice(data.deduction)}.` : Translations.get(\"SALAXY.VALIDATION.Usecases.carBenefit.noDeduction\"))\r\n      ;\r\n    return { type: \"default\", msg };\r\n  }\r\n}\r\n","import { DatelyObject, Numeric, Years } from \"../../util\";\r\nimport { DailyAllowanceKind, DailyAllowanceUsecase, UserDefinedRow } from \"../../model\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { EnumerationsLogic, Translations } from \"../../logic\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/** Client-side logic for Daily allowance  */\r\nexport class DailyAllowanceUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * @param row Row to update.\r\n   * @param date The reference date for which the logic is done.\r\n   * Typically the salary date of a calculation and the typically, the information needed is just the year for which the yearly changing numbers are fetched, but may later have more extended features.\r\n   */\r\n  public updateUsecase(row: UserDefinedRow, date: DatelyObject): void {\r\n    const data: DailyAllowanceUsecase = row.data ?? {};\r\n    switch (data.kind) {\r\n      case DailyAllowanceKind.FullDailyAllowance:\r\n        row.price = Years.getYearlyChangingNumbers(date)?.sideCosts?.taxFreeDailyAllowance; // 43;\r\n        break;\r\n      case DailyAllowanceKind.PartialDailyAllowance:\r\n        row.price = Years.getYearlyChangingNumbers(date)?.sideCosts?.taxFreeDailyHalfAllowance; // 20;\r\n        break;\r\n      case DailyAllowanceKind.MealAllowance:\r\n        row.price = Years.getYearlyChangingNumbers(date)?.sideCosts?.taxFreeMealAllowance; // 10.75;\r\n        break;\r\n      case DailyAllowanceKind.InternationalDailyAllowance:\r\n        if (data.country) {\r\n          const countryPrice = Years.getYearlyTaxFreeNumbers(date).countries[data.country];\r\n          if (countryPrice) {\r\n            row.price = countryPrice;\r\n          }\r\n        }\r\n        break;\r\n      case DailyAllowanceKind.Undefined:\r\n      default:\r\n        // Not known\r\n        break;\r\n    }\r\n    if (row.price && data.isHalf) {\r\n      row.price = Numeric.round(row.price / 2);\r\n    }\r\n  }\r\n\r\n  /** Gets validation message for Daily allowance  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage {\r\n    const data: DailyAllowanceUsecase = row.data || {};\r\n    let msg;\r\n    switch (data.kind) {\r\n      case DailyAllowanceKind.PartialDailyAllowance:\r\n      case DailyAllowanceKind.MealAllowance:\r\n        msg = EnumerationsLogic.getEnumLabel(\"DailyAllowanceKind\", data.kind);\r\n        break;\r\n      case DailyAllowanceKind.InternationalDailyAllowance: {\r\n        msg = EnumerationsLogic.getEnumLabel(\"DailyAllowanceKind\", data.kind);\r\n        const yearlyNumbers = Years.getYearlyTaxFreeNumbers(\"today\");\r\n        const country = data.country && yearlyNumbers?.countries ? yearlyNumbers.countries[data.country] : false;\r\n        if (country) {\r\n          msg = msg + ` (${Translations.get(`SALAXY.CORE.yearlyTaxfreeYears.countries.${data.country}`)})`;\r\n        }\r\n        break;\r\n      }\r\n      case DailyAllowanceKind.Undefined:\r\n      default:\r\n        msg = \"SALAXY.VALIDATION.Usecases.dailyAllowance\";\r\n        break;\r\n    }\r\n    return { type: \"default\", msg };\r\n  }\r\n}\r\n","import { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\n\r\n/**\r\n * Default usecase logic for row types that have no custom logic / validation.\r\n */\r\nexport class DefaultUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   */\r\n  public updateUsecase(): void {\r\n    // Does nothings\r\n  }\r\n\r\n  /** Always returns null */\r\n  public getUcValidation(): UsecaseValidationMessage | undefined {\r\n    return undefined;\r\n  }\r\n}\r\n","import { EmploymentTerminationKind, EmploymentTerminationUsecase, UserDefinedRow } from \"../../model\";\r\nimport { IncomeTypeMetadata, IncomeTypesLogic } from \"../../logic\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/** Client-side logic for EmploymentTerminationUsecase  */\r\nexport class EmploymentTerminationUsecaseLogic extends BaseUsecaseLogic {\r\n  /** Gets validation message for IrIncomeTypeUsecase  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage | undefined {\r\n    const data: EmploymentTerminationUsecase = row.data || {};\r\n    const codeData = this.getCodeData(data.kind);\r\n    if (!codeData) {\r\n      return {\r\n        type: \"error\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.noIrIncomeType\",\r\n      };\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  private getCodeData(kind: EmploymentTerminationKind | null | undefined): IncomeTypeMetadata | undefined {\r\n    if (kind) {\r\n      let code = 0;\r\n      switch (kind) {\r\n        case EmploymentTerminationKind.NoticePeriodCompensation:\r\n          code = 208;\r\n          break;\r\n        case EmploymentTerminationKind.MonetaryWorkingTimeBankCompensation:\r\n          code = 224;\r\n          break;\r\n        case EmploymentTerminationKind.TerminationAndLayOffDamages:\r\n          code = 229;\r\n          break;\r\n        case EmploymentTerminationKind.VoluntaryTerminationCompensation:\r\n          code = 231;\r\n          break;\r\n        case EmploymentTerminationKind.PensionPaidByEmployer:\r\n          code = 338;\r\n          break;\r\n        case EmploymentTerminationKind.Undefined:\r\n        default:\r\n          code = 0;\r\n          break;\r\n      }\r\n      return IncomeTypesLogic.getAll().find((x) => x.code === code);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  private isIrIncomeTypeLabel(label: string): boolean {\r\n    return IncomeTypesLogic.getAll().some((x) => x.label === label);\r\n  }\r\n}\r\n","import { CalculationRowType, VatEntry, VatRate } from \"../../model\";\r\nimport { EnumerationsLogic, Translations, ExpensesVatRate } from \"../../logic\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { ExpensesUsecase } from \"../ExpensesUsecase\";\r\nimport { UsecaseRow } from \"../UsecaseRow\";\r\nimport { Numeric, Years, Dates, DatelyObject } from \"../../util\";\r\n\r\n/**\r\n * Client-side usecases logic for Expenses as well as PrepaidExpenses.\r\n */\r\nexport class ExpensesUsecaseLogic extends BaseUsecaseLogic {\r\n  private _hasGrossVatEntries: boolean;\r\n\r\n  private _row: UsecaseRow<CalculationRowType.Expenses, ExpensesUsecase>;\r\n  private _date: DatelyObject;\r\n\r\n  /** When user is editing rows (varRate = \"multiple\"), this is the filed that is being edited => source for calculation. */\r\n  public multipleRatesEditField : \"tax\" | \"gross\" | \"net\" = \"gross\";\r\n\r\n  /** Returns true if the row has gross vatEntries */\r\n  public get hasGrossVatEntries(): boolean {\r\n    return this._hasGrossVatEntries ?? false;\r\n  }\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   */\r\n  public updateUsecase(row: UsecaseRow<CalculationRowType.Expenses, ExpensesUsecase>, date: DatelyObject): void {\r\n    row = row ?? this._row;\r\n    this._row = row;\r\n    date = date ?? this._date;\r\n    this._date = date;\r\n\r\n    const vatRate = row.data.vatRate;\r\n    if (vatRate == ExpensesVatRate.Other) {\r\n      if (row.accounting?.vatPercent == null) {\r\n        row.accounting ??= {};\r\n        row.accounting.vatPercent = Years.getYearlyChangingNumbers(date ?? Dates.getToday())?.sideCosts?.palkkausVatPercent;\r\n      }\r\n      this.taxRates[\"other\"] = row.accounting.vatPercent;\r\n    } else {\r\n      row.accounting ??= {};\r\n      row.accounting.vatPercent = undefined;\r\n      this.taxRates[\"other\"] = undefined;\r\n    }\r\n\r\n    const taxPercent = this.taxRates[vatRate];\r\n    if (taxPercent != null) {\r\n      row.accounting.vatEntries = [this.getRow( row.count && row.price ? row.count * row.price : undefined, vatRate)];\r\n      row.data.total = undefined;\r\n    } else if (vatRate == ExpensesVatRate.Multiple) {\r\n      if (!row.accounting.vatEntries) {\r\n        row.accounting.vatEntries = this.getEmptyVatEntries();\r\n      } else {\r\n        //UI sends full array of VAT entries, but API wrapper\r\n        //send likely only rows that have some gross value.\r\n        //UI can handle only full array, so this code fills missing empty cells.\r\n        const entries = this.getEmptyVatEntries();\r\n        row.accounting.vatEntries.forEach((r) => {\r\n          //VAT rates have their place on the UI. 24% is first.\r\n          switch (r.vatRate) {\r\n            case VatRate.Vat2400:\r\n              entries[0] = r;\r\n              break;\r\n            case VatRate.Vat1400:\r\n              entries[1] = r;\r\n              break;\r\n            case VatRate.Vat1000:\r\n              entries[2] = r;\r\n              break;\r\n            case VatRate.Vat0000:\r\n              entries[3] = r;\r\n              break;\r\n            case VatRate.Vat2550:\r\n              entries[4] = r;\r\n              break;\r\n            case VatRate.Vat1350:\r\n              entries[5] = r;\r\n              break;\r\n          }\r\n        });\r\n        row.accounting ??= {};\r\n        row.accounting.vatEntries = entries;\r\n      }\r\n\r\n\r\n      const totalRow: VatEntry = {\r\n        gross: 0,\r\n        net: 0,\r\n        tax: 0,\r\n        taxPercent: 0,\r\n        vatRate: VatRate.Undefined,\r\n      };\r\n      row.accounting?.vatEntries?.forEach((r) => {\r\n        switch (this.multipleRatesEditField) {\r\n          case \"net\":\r\n            totalRow.net! += r.net = (r.net ?  Numeric.round(r.net) : undefined) ?? 0;\r\n            totalRow.tax! += (r.tax = r.net && r.taxPercent ? Numeric.round(r.net * r.taxPercent) : undefined) ?? 0;\r\n            totalRow.gross! += r.gross = (r.net ?? 0 + (r.tax ?? 0));\r\n            break;\r\n          case \"tax\":\r\n            totalRow.tax! += r.tax = (r.tax ? Numeric.round(r.tax) : undefined) ?? 0;\r\n            totalRow.net! += r.net = Numeric.round((r.tax ?? 0) / (r.taxPercent ?? 0)) ?? 0;\r\n            totalRow.gross! += r.gross = r.net + r.tax;\r\n            break;\r\n          case \"gross\":\r\n          default:\r\n            totalRow.gross! += r.gross = Numeric.round(r.gross ?? 0) ?? 0;\r\n            totalRow.net! += r.net = Numeric.round(r.gross / (1 + (r.taxPercent ?? 0))) ?? 0;\r\n            totalRow.tax! += r.tax = (r.gross ?? 0) - (r.net ?? 0);\r\n            break;\r\n        }\r\n      });\r\n      totalRow.taxPercent = Numeric.round((totalRow.tax ?? 0) / (totalRow.net ?? 0));\r\n      row.data.total = totalRow;\r\n    }\r\n    if(row.data.vatRate === ExpensesVatRate.Multiple) {\r\n      this._hasGrossVatEntries = !!row.accounting.vatEntries?.find((x) => x.gross);\r\n    }\r\n  }\r\n\r\n  private getEmptyVatEntries(): VatEntry[] {\r\n    return [\r\n      this.getRow(undefined, ExpensesVatRate.Tax24),\r\n      this.getRow(undefined, ExpensesVatRate.Tax14),\r\n      this.getRow(undefined, ExpensesVatRate.Tax10),\r\n      this.getRow(undefined, ExpensesVatRate.Tax0),\r\n      this.getRow(undefined, ExpensesVatRate.Tax255),\r\n      this.getRow(undefined, ExpensesVatRate.Tax135),\r\n    ];\r\n  }\r\n\r\n\r\n\r\n  private getRow(gross: number | undefined, vatRate: ExpensesVatRate): VatEntry {\r\n    if (gross) {\r\n      gross = Numeric.round(gross);\r\n    }\r\n    const taxPercent = this.taxRates[vatRate] || 0;\r\n    const net = gross ? Numeric.round(gross / (1 + taxPercent)) : undefined;\r\n\r\n    const taxRateMapper = {\r\n      tax0: VatRate.Vat0000,\r\n      tax10: VatRate.Vat1000,\r\n      tax135: VatRate.Vat1350,\r\n      tax14: VatRate.Vat1400,\r\n      tax24: VatRate.Vat2400,\r\n      tax255: VatRate.Vat2550,\r\n      none: VatRate.None,\r\n      other: VatRate.Other,\r\n    };\r\n\r\n    return {\r\n      gross,\r\n      tax: gross && net ? Numeric.round(gross - net) : undefined,\r\n      net: net,\r\n      taxPercent,\r\n      vatRate: taxRateMapper[vatRate] ?? VatRate.None,\r\n    };\r\n  }\r\n\r\n  /** Taxrates and their number percentages as a key-value pair. Values are decimal: 0-1 as 0-100 percent. */\r\n  public taxRates: Record<string, number | undefined | null> = {\r\n    tax0: 0,\r\n    tax10: 0.10,\r\n    tax135: 0.135,\r\n    tax14: 0.14,\r\n    tax24: 0.24,\r\n    tax255: 0.255,\r\n    none: 0,\r\n    other: undefined,\r\n  };\r\n\r\n  /** Gets validation message for BoardUsecaseLogic  */\r\n  public getUcValidation(row: UsecaseRow<CalculationRowType.Expenses, ExpensesUsecase>): UsecaseValidationMessage {\r\n    let msg = \"SALAXY.VALIDATION.Usecases.expensesValidation.noVat\";\r\n    switch (row.data.vatRate) {\r\n      case ExpensesVatRate.Tax0:\r\n        msg = \"SALAXY.VALIDATION.Usecases.expensesValidation.vat0\";\r\n        break;\r\n      case ExpensesVatRate.Tax10:\r\n        msg = \"SALAXY.VALIDATION.Usecases.expensesValidation.vat10\";\r\n        break;\r\n      case ExpensesVatRate.Tax135:\r\n        msg = \"SALAXY.VALIDATION.Usecases.expensesValidation.vat135\";\r\n        break;\r\n      case ExpensesVatRate.Tax14:\r\n        msg = \"SALAXY.VALIDATION.Usecases.expensesValidation.vat14\";\r\n        break;\r\n      case ExpensesVatRate.Tax24:\r\n        msg = \"SALAXY.VALIDATION.Usecases.expensesValidation.vat24\";\r\n        break;\r\n      case ExpensesVatRate.Tax255:\r\n        msg = \"SALAXY.VALIDATION.Usecases.expensesValidation.vat255\";\r\n        break;\r\n      case ExpensesVatRate.Multiple:\r\n        msg = EnumerationsLogic.getEnumLabel(\"ExpensesVatRate\", ExpensesVatRate.Multiple);\r\n        break;\r\n      case ExpensesVatRate.Other:\r\n        msg = Translations.get(\"SALAXY.VALIDATION.Usecases.expensesValidation.vatCustom\") + (100 * (row.accounting?.vatPercent ?? 0)) + \" %\";\r\n        break;\r\n    }\r\n    return { type: \"default\", msg };\r\n  }\r\n}\r\n","import { ForeclosureKind, ForeclosureUsecase, UserDefinedRow } from \"../../model\";\r\nimport { DatelyObject, Dates, Numeric, Years } from \"../../util\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\nimport { RowUsecaseCalcData } from \"../RowUsecaseCalcData\";\r\n\r\n/** Client-side logic for ForeclosureUsecase  */\r\nexport class ForeclosureUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * @param row Row to update.\r\n   * @param date The reference date for which the logic is done.\r\n   * Typically the salary date of a calculation and the typically, the information needed is just the year for which the yearly changing numbers are fetched, but may later have more extended features.\r\n   * @param calcData The calculation related data that is required byt the more complex calculations:\r\n   * This data is available only after first round-trip to the server (results object exists).\r\n   */\r\n  public updateUsecase(row: UserDefinedRow, date: DatelyObject, calcData: RowUsecaseCalcData): void {\r\n    const data: ForeclosureUsecase = row.data ?? {};\r\n\r\n    if (!data.kind || data.kind === ForeclosureKind.Undefined) {\r\n      data.kind = ForeclosureKind.Fixed;\r\n    }\r\n\r\n    if (data.kind !== ForeclosureKind.Periodic && data.kind !== ForeclosureKind.NonPeriodic) {\r\n      return;\r\n    }\r\n\r\n    const salaryAfterTax = calcData?.foreclosureSalary || 0;\r\n\r\n    if (!data.protectedPortionBase) {\r\n      const numbers = Years.getYearlyChangingNumbers(date);\r\n      data.protectedPortionBase = numbers?.sideCosts?.protectedPortionBase;\r\n      data.protectedPortionDependant =  numbers?.sideCosts?.protectedPortionDependant;\r\n    }\r\n\r\n\r\n    let otherIncome = Numeric.round(data.incomeFromOtherSources || 0.0, 2);\r\n    let leftToDebtor = Numeric.round(data.additionalAmountLeftToDebtor || 0.0, 2);\r\n    let foreclosure = 0.0;\r\n    if (salaryAfterTax > 0) {\r\n      if (data.kind === ForeclosureKind.NonPeriodic) {\r\n        foreclosure = salaryAfterTax / 3.0;\r\n      } else {\r\n        data.periodLength = this.calculatePeriodLength(calcData?.period.start, calcData?.period.end);\r\n        otherIncome = Numeric.round(data.periodLength * ((otherIncome ?? 0) / 30.0),2);\r\n        leftToDebtor = Numeric.round(data.periodLength * ((leftToDebtor ?? 0) / 30.0), 2) ?? 0;\r\n\r\n        const protectedPortion = Numeric.round(\r\n          (data.periodLength || 0) *\r\n          (\r\n            (data.protectedPortionBase || 0.0)\r\n            +\r\n            ((data.dependantsCount || 0) * (data.protectedPortionDependant || 0))\r\n          ), 2) ?? 0;\r\n\r\n        const totalSalaryAfterTax = salaryAfterTax + (otherIncome ?? 0);\r\n        if (protectedPortion > totalSalaryAfterTax) {\r\n          foreclosure = 0.0;\r\n        }\r\n        else if (totalSalaryAfterTax <= (protectedPortion * 2.0)) {\r\n          foreclosure = 2.0 * (totalSalaryAfterTax - protectedPortion) / 3.0;\r\n        }\r\n        else if (totalSalaryAfterTax <= (protectedPortion * 4.0)) {\r\n          foreclosure = totalSalaryAfterTax / 3.0;\r\n        }\r\n        else {\r\n          foreclosure = (protectedPortion * 4.0) / 3.0 +\r\n            4.0 * (totalSalaryAfterTax - protectedPortion * 4.0) / 5.0;\r\n          foreclosure = Math.min(foreclosure, totalSalaryAfterTax / 2.0);\r\n        }\r\n        foreclosure = Math.max(0.0, Math.min(foreclosure, salaryAfterTax) - leftToDebtor);\r\n      }\r\n    }\r\n    row.count = 1;\r\n    row.price = Numeric.round(foreclosure, 2);\r\n\r\n  }\r\n\r\n  /** Gets validation message for UnionPaymentUsecase  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage | undefined {\r\n    const data: ForeclosureUsecase = row.data || {};\r\n    if (data.kind === ForeclosureKind.NonPeriodic || data.kind === ForeclosureKind.Periodic ) {\r\n      return {\r\n        type: \"default\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.foreclosure.default\",\r\n      };\r\n    } else {\r\n      if (!row.price) {\r\n        return {\r\n          type: \"error\",\r\n          msg: \"SALAXY.VALIDATION.Usecases.foreclosure.noPrice\",\r\n        };\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  private calculatePeriodLength(startDate?: string | null, endDate?: string | null): number {\r\n    if (startDate != null && endDate != null) {\r\n      if (this.isOnceAMonthPeriod(startDate, endDate)) {\r\n        return 30;\r\n      }\r\n      else if (this.isEvery2WeeksPeriod(startDate, endDate)) {\r\n        return 14;\r\n      }\r\n      else if (this.isTwiceAMonthPeriod(startDate, endDate)) {\r\n        return 15;\r\n      } else {\r\n        return Math.max(0, this.getDays(startDate, endDate));\r\n      }\r\n    }\r\n    else {\r\n      return 30;\r\n    }\r\n  }\r\n\r\n  private isOnceAMonthPeriod(startDate: string, endDate: string): boolean {\r\n    return endDate === Dates.add(Dates.add(startDate, 1, \"month\") ?? \"\",-1, \"day\");\r\n  }\r\n\r\n\r\n  private isTwiceAMonthPeriod(startDate: string, endDate: string): boolean {\r\n    return (Dates.getDuration(startDate, endDate).asDays() + 1 === 15)\r\n    ||\r\n    (Dates.getDay(startDate) === 15 && endDate === Dates.startEnd(startDate,\"end-month\"))\r\n    ||\r\n    (Dates.getDay(startDate) === 16 && endDate === Dates.startEnd(startDate,\"end-month\"));\r\n  }\r\n\r\n  private isEvery2WeeksPeriod(startDate: string, endDate: string): boolean {\r\n    return endDate === Dates.add(Dates.add(startDate,2,\"week\") ?? \"\",-1, \"day\");\r\n  }\r\n\r\n  private getDays(startDate: string, endDate: string): number {\r\n    return  Dates.getDuration(startDate, endDate).asDays() + 1;\r\n  }\r\n}\r\n","import { UserDefinedRow } from \"../../model\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\nimport { Dates } from \"../../util\";\r\n\r\n/** Client-side logic for Absence period as UserDefined row (in calculation).  */\r\nexport class HolidaysUsecaseLogic extends BaseUsecaseLogic {\r\n  protected getUcValidation(_row: UserDefinedRow): UsecaseValidationMessage | undefined {\r\n    return undefined;\r\n  }\r\n  /**\r\n   * Updates the workdays count\r\n   * @param row Current row that is being edited.\r\n   */\r\n  public updatePeriodDays(row: any): void {\r\n    if (!row.period) {\r\n      return;\r\n    }\r\n    if (row.period.start > row.period.end) {\r\n      row.period.end = row.period.start;\r\n    }\r\n    if (row.period.start && row.period.end) {\r\n      if (row.period.days) {\r\n        row.period.days = Dates.getWorkdays(row.period.start, row.period.end);\r\n        row.period.daysCount = row.period.days.length;\r\n      } else {\r\n        row.period.daysCount = Dates.getWorkdays(row.period.start, row.period.end).length;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets the days array in period to enable days selection UI.\r\n   * @param row Current row that is being edited.\r\n   */\r\n  public setDaysSelection(row: any): void {\r\n    row.period.days = Dates.getVacationDays(row.period.start, row.period.end);\r\n    row.period.daysCount = row.period.days.length;\r\n  }\r\n\r\n}\r\n","import { CalculationRowUnit, HourlySalaryWithWorkingTimeCompensationUsecase, UserDefinedRow, WorkingTimeCompensationKind, WorkingTimeCompensationPricing } from \"../../model\";\r\nimport { IncomeTypeMetadata, IncomeTypesLogic, Translations } from \"../../logic\";\r\nimport { Numeric } from \"../../util\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/** Client-side logic for HourlySalaryWithWorkingTimeCompensationUsecaseLogic  */\r\nexport class HourlySalaryWithWorkingTimeCompensationUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * @param row Row to update.\r\n   */\r\n  public updateUsecase(row: UserDefinedRow): void {\r\n    const data: HourlySalaryWithWorkingTimeCompensationUsecase = row.data ?? {};\r\n\r\n    if (!data.compensationRows || data.compensationRows.length < 1) {\r\n      data.compensationRows = [{}];\r\n    }\r\n    this.harmonize(row);\r\n    for (const cr of data.compensationRows) {\r\n      switch (data.pricing) {\r\n        case WorkingTimeCompensationPricing.Percent:\r\n            cr.price = Numeric.round((cr.percent ?? 0) * (row.price ?? 0), 10);\r\n            break;\r\n        case WorkingTimeCompensationPricing.Fixed:\r\n            // cr.price = cr.price;\r\n            break;\r\n        default:\r\n            // never\r\n            break;\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Gets validation message */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage | undefined {\r\n    const data: HourlySalaryWithWorkingTimeCompensationUsecase = row.data || {};\r\n\r\n\r\n    if (!data.compensationRows || data.compensationRows.length < 1) {\r\n      return undefined;\r\n    }\r\n\r\n    this.harmonize(row);\r\n    const codeData = this.getCodeData(data.kind);\r\n    if (!codeData) {\r\n      return {\r\n        type: \"error\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.compensation.noCompensationData\",\r\n      };\r\n    }\r\n    const msgs: string[] = [];\r\n    for (const cr of data.compensationRows) {\r\n      const rowMsg = data.pricing === WorkingTimeCompensationPricing.Percent ?\r\n        `${Translations.get(\"SALAXY.VALIDATION.Usecases.compensation.compensation\")} ${Numeric.formatPercent((cr.percent ?? 0) * 100)}, ${Numeric.formatPrice(cr.price)} ${Translations.get(\"SALAXY.VALIDATION.Usecases.compensation.compensation2\")} ${Numeric.formatPrice(Numeric.round((cr.count ?? row.count ?? 1) * (cr.price ?? 0), 2))}` :\r\n        `${Translations.get(\"SALAXY.VALIDATION.Usecases.compensation.compensation\")} ${Numeric.formatPrice(cr.price)} ${Numeric.formatPrice(cr.price)} ${Translations.get(\"SALAXY.VALIDATION.Usecases.compensation.compensation2\")} ${Numeric.formatPrice(Numeric.round((cr.count ?? row.count ?? 1) * (cr.price ?? 0), 2))}`;\r\n      msgs.push(rowMsg);\r\n    }\r\n    return { type: \"default\", msg: msgs.join(\"\\n\") };\r\n  }\r\n\r\n  private getCodeData(kind: WorkingTimeCompensationKind | null | undefined): IncomeTypeMetadata | undefined {\r\n    if (kind) {\r\n      let code: number | undefined = undefined;\r\n      switch (kind) {\r\n        case WorkingTimeCompensationKind.EmergencyWorkCompensation:\r\n          code = 205;\r\n          break;\r\n        case WorkingTimeCompensationKind.EveningWorkCompensation:\r\n          code = 206;\r\n          break;\r\n        case WorkingTimeCompensationKind.EveningShiftAllowance:\r\n          code = 207;\r\n          break;\r\n        case WorkingTimeCompensationKind.SaturdayPay:\r\n          code = 211;\r\n          break;\r\n        case WorkingTimeCompensationKind.ExtraWorkPremium:\r\n          code = 212;\r\n          break;\r\n        case WorkingTimeCompensationKind.OtherCompensation:\r\n          code = 216;\r\n          break;\r\n        case WorkingTimeCompensationKind.WaitingTimeCompensation:\r\n          code = 217;\r\n          break;\r\n        case WorkingTimeCompensationKind.SundayWorkCompensation:\r\n          code = 221;\r\n          break;\r\n        case WorkingTimeCompensationKind.StandByCompensation:\r\n          code = 230;\r\n          break;\r\n        case WorkingTimeCompensationKind.WeeklyRestCompensation:\r\n          code = 232;\r\n          break;\r\n        case WorkingTimeCompensationKind.OvertimeCompensation:\r\n          code = 235;\r\n          break;\r\n        case WorkingTimeCompensationKind.NightWorkAllowance:\r\n          code = 236;\r\n          break;\r\n        case WorkingTimeCompensationKind.NightShiftCompensation:\r\n          code = 237;\r\n          break;\r\n        case WorkingTimeCompensationKind.Undefined:\r\n        default:\r\n          code = 0;\r\n          break;\r\n      }\r\n      return IncomeTypesLogic.getAll().find((x) => x.code === code);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  private harmonize(row: UserDefinedRow) {\r\n    const data: HourlySalaryWithWorkingTimeCompensationUsecase = row?.data || {};\r\n    for (const cr of data.compensationRows ?? []) {\r\n      // legacy support\r\n      if (data.pricing == null || data.pricing == WorkingTimeCompensationPricing.Undefined)\r\n        {\r\n            if (!cr.unit || cr.unit == CalculationRowUnit.Undefined || cr.unit == CalculationRowUnit.Percent)\r\n            {\r\n                data.pricing = WorkingTimeCompensationPricing.Percent;\r\n                cr.percent = cr.count;\r\n                cr.count = null;\r\n            }\r\n            else\r\n            {\r\n                data.pricing = WorkingTimeCompensationPricing.Fixed;\r\n                cr.percent = null;\r\n                cr.count = null;\r\n            }\r\n        }\r\n    }\r\n  }\r\n}\r\n","import { IrIncomeTypeUsecase, TransactionCode, UserDefinedRow, CarBenefitUsecase } from \"../../model\";\r\nimport { IncomeTypeMetadata, IncomeTypesLogic, } from \"../../logic\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/** Client-side logic for IrIncomeTypeUsecase  */\r\nexport class IrIncomeTypeUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * @param row Row to update.\r\n   */\r\n  public updateUsecase(row: UserDefinedRow): void {\r\n    const data: IrIncomeTypeUsecase = row.data ?? {};\r\n    // Get code data by kind first (new version) and then using the old method.\r\n    const codeData = this.getCodeDataByNumber(data?.irData?.code) ?? this.getCodeDataByTransaction(data?.kind);\r\n    if (codeData) {\r\n      data.irData = data.irData ?? {};\r\n      data.irData.code = codeData.code;\r\n      data.kind = codeData.transactionCode;\r\n    }\r\n  }\r\n\r\n  /** Gets validation message for IrIncomeTypeUsecase  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage | undefined {\r\n    const data: IrIncomeTypeUsecase = row.data ?? {};\r\n    const codeData = this.getCodeDataByNumber(data?.irData?.code) ?? this.getCodeDataByTransaction(data?.kind);\r\n    if (!codeData) {\r\n      return {\r\n        type: \"error\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.noIrIncomeType\",\r\n      };\r\n    }\r\n\r\n    if (codeData.transactionCode === TransactionCode.CarBenefit) {\r\n      const carBenefit: CarBenefitUsecase = data.irData?.carBenefit || {};\r\n      if (carBenefit.emissionsValue && carBenefit.emissionsValue < 0 || carBenefit.emissionsValue &&carBenefit.emissionsValue > 100) {\r\n        return {\r\n          type: \"error\",\r\n          msg: \"SALAXY.VALIDATION.Usecases.carBenefit.invalidEmissionValues\",\r\n        };\r\n      }\r\n      if (!carBenefit.ageGroup || carBenefit.kilometers == null) {\r\n        return {\r\n          type: \"error\",\r\n          msg: \"SALAXY.VALIDATION.Usecases.carBenefit.default\",\r\n        };\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  private getCodeDataByNumber(code: number | null | undefined): IncomeTypeMetadata | undefined {\r\n    if (!code) {\r\n      return undefined;\r\n    }\r\n\r\n    return IncomeTypesLogic.getAll().find( (x) => x.code === code);\r\n  }\r\n\r\n  private getCodeDataByTransaction(transactionCode: TransactionCode | null | undefined): IncomeTypeMetadata | undefined {\r\n    if ( !transactionCode ||\r\n        transactionCode === TransactionCode.Unknown ||\r\n        (transactionCode as any) === \"undefined\" ) {\r\n\r\n      return undefined;\r\n    }\r\n    return IncomeTypesLogic.getAll().find( (x) => x.transactionCode === transactionCode);\r\n  }\r\n\r\n  private isIrIncomeTypeLabel(label: string): boolean {\r\n    return IncomeTypesLogic.getAll().some( (x) => x.label === label);\r\n  }\r\n}\r\n","import { MealBenefitKind, UserDefinedRow } from \"../../model\";\r\nimport { EnumerationsLogic, Translations  } from \"../../logic\";\r\nimport { DatelyObject, Numeric, Years } from \"../../util\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/** Client-side logic for MealBenefitUsecase  */\r\nexport class MealBenefitUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * @param row Row to update.\r\n   * @param date The reference date for which the logic is done.\r\n   * Typically the salary date of a calculation and the typically, the information needed is just the year for which the yearly changing numbers are fetched, but may later have more extended features.\r\n   */\r\n  public updateUsecase(row: UserDefinedRow, date: DatelyObject): void {\r\n    this.setValues(row.data?.kind, row, date);\r\n  }\r\n\r\n  /** Gets validation message for MealBenefitUsecase  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage {\r\n\r\n    row.data = row.data ??  {};\r\n    row.data.isTaxValue = row.data.isTaxValue ?? false;\r\n    row.data.isTaxValueDeductionDone = row.data.isTaxValueDeductionDone ?? false;\r\n    switch (row.data.kind) {\r\n      case MealBenefitKind.MealAllowance:\r\n        return {\r\n          type: \"default\",\r\n          msg: `${EnumerationsLogic.getEnumLabel(\"MealBenefitKind\", row.data.kind)}, ${Translations.get(\"SALAXY.VALIDATION.Usecases.mealBenefit.allowance\")} ${Numeric.formatPrice((row.price ?? 0) * (row.count ?? 1))}.`,\r\n        };\r\n      case MealBenefitKind.CateringContract:\r\n      case MealBenefitKind.Institute:\r\n      case MealBenefitKind.MealTicket:\r\n      case MealBenefitKind.RestaurantWorker:\r\n      case MealBenefitKind.Teacher:\r\n      case MealBenefitKind.TaxableAmount:\r\n      case MealBenefitKind.CollectedReimbursement:\r\n        if (row.data.isTaxValue) {\r\n          return {\r\n            type: \"default\",\r\n            msg: `${EnumerationsLogic.getEnumLabel(\"MealBenefitKind\", row.data.kind)}, ${Translations.get(\"SALAXY.VALIDATION.Usecases.mealBenefit.default\")} ${Numeric.formatPrice((row.data.taxablePrice ?? 0) * (row.count ?? 1))}, ${Translations.get(\"SALAXY.VALIDATION.Usecases.mealBenefit.taxValueDeduction\")}.`,\r\n          };\r\n        }\r\n        else\r\n        {\r\n          return {\r\n            type: \"default\",\r\n            msg: `${EnumerationsLogic.getEnumLabel(\"MealBenefitKind\", row.data.kind)}, ${Translations.get(\"SALAXY.VALIDATION.Usecases.mealBenefit.default\")} ${Numeric.formatPrice((row.data.taxablePrice ?? 0) * (row.count ?? 1))}${row.data.deduction ? \", \" + Translations.get(\"SALAXY.VALIDATION.Usecases.mealBenefit.deduction\") + \" \"  + Numeric.formatPrice(row.data.deduction) +\".\" : \"\"}`,\r\n          };\r\n        }\r\n      case MealBenefitKind.Undefined:\r\n      default:\r\n        if (row.data) {\r\n          row.data.taxablePrice = row.price;\r\n        }\r\n        return {\r\n          type: \"error\",\r\n          msg: \"SALAXY.VALIDATION.Usecases.mealBenefit.undefined\",\r\n        };\r\n    }\r\n  }\r\n\r\n   private setValues(kind: MealBenefitKind, row: UserDefinedRow, date: DatelyObject): void {\r\n    const sideCosts = Years.getYearlyChangingNumbers(date)?.sideCosts;\r\n    if (!sideCosts) {\r\n      throw new Error(\"No side costs found\");\r\n    }\r\n    row.data = row.data ??  {};\r\n    const data = row.data;\r\n    switch (kind) {\r\n      case MealBenefitKind.MealAllowance:\r\n        row.price = Math.min(row.price ?? 0, sideCosts.taxFreeMealAllowance ?? 0);\r\n        data.taxablePrice = row.price;\r\n        data.deduction = null;\r\n        data.isTaxValue = false;\r\n        data.isTaxValueDeductionDone = false;\r\n        break;\r\n\r\n      case MealBenefitKind.CateringContract:\r\n        row.price = sideCosts.mealBenefitCateringContract; // 6.80;\r\n        data.taxablePrice = row.price;\r\n        break;\r\n      case MealBenefitKind.Institute:\r\n        row.price = sideCosts.mealBenefitInstitute; // 5.10;\r\n        data.taxablePrice = row.price;\r\n        break;\r\n      case MealBenefitKind.MealTicket:\r\n        if (!row.price) {\r\n          row.price = 0;\r\n        }\r\n        else if (row.price < (sideCosts.mealTicketLowerLimit ?? 0))\r\n\r\n\r\n        {\r\n            row.price = sideCosts.mealTicketLowerLimit;\r\n        }\r\n        else if (row.price > (sideCosts.mealTicketUpperLimit ?? 0))\r\n        {\r\n          row.price = sideCosts.mealTicketUpperLimit;\r\n        }\r\n        else\r\n        {\r\n          // row.price = row.price;\r\n        }\r\n        data.taxablePrice = (sideCosts.mealTicketTaxable ?? 0) * (row.price ?? 0);\r\n        break;\r\n      case MealBenefitKind.RestaurantWorker:\r\n        row.price = sideCosts.mealBenefitRestaurantWorker; // 5.78;\r\n        data.taxablePrice = row.price;\r\n        break;\r\n      case MealBenefitKind.Teacher:\r\n        row.price = sideCosts.mealBenefitTeacher; // 4.08;\r\n        data.taxablePrice = row.price;\r\n        break;\r\n      case MealBenefitKind.CollectedReimbursement:\r\n        data.isTaxValueDeductionDone = false;\r\n        data.isTaxValue = true;\r\n        data.deduction = null;\r\n        data.taxablePrice = row.price;\r\n        break;\r\n      case MealBenefitKind.TaxableAmount:\r\n      case MealBenefitKind.Undefined:\r\n      default:\r\n        data.taxablePrice = row.price;\r\n    }\r\n\r\n    if (kind != MealBenefitKind.MealAllowance) {\r\n      if (data.isTaxValue)\r\n      {\r\n          data.deduction = null;\r\n      }\r\n    }\r\n    data.isTaxValue = data.isTaxValue ?? false;\r\n    data.isTaxValueDeductionDone = data.isTaxValueDeductionDone ?? false;\r\n  }\r\n}\r\n","import { Arrays, DatelyObject, Dates, Numeric } from \"../../util\";\r\nimport { yearlyTaxFreeYears } from \"../../codegen\";\r\nimport { InputEnumOption } from \"../../ui/InputEnumOption\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { UsecaseRow } from \"../UsecaseRow\";\r\nimport { CalculationRowType } from \"../../model\";\r\nimport type { MilageOwnCarUsecase } from \"../MilageOwnCarUsecase\";\r\nimport { Translations } from \"../../logic\";\r\n\r\n/**\r\n * Usecase logic for Milage (km) using own car.\r\n */\r\nexport class MilageOwnCarUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   */\r\n  public updateUsecase(row: UsecaseRow<CalculationRowType.MilageOwnCar, MilageOwnCarUsecase>, date: DatelyObject): void {\r\n    const toEur = (val: number) => Numeric.round(val / 100);\r\n    const m = this.getMilage(date);\r\n\r\n    row.data.additionsAllowed = false;\r\n    row.data.passengersAllowed = false;\r\n\r\n    if (row.data.vehicleType == \"custom\") {\r\n      // Price is set manually.\r\n    } else if (row.data.vehicleType == \"carLimitedBenefit\") {\r\n      row.price = toEur(m.carLimitedBenefit);\r\n    } else {\r\n      const price = m.other[row.data.vehicleType || \"nothing\"];\r\n      if (price) {\r\n        row.price = toEur(price);\r\n        row.data.passengersAllowed = true;\r\n      } else if(row.data.vehicleType === \"car\" || row.price === toEur(m.car) || !row.price) {\r\n        // Set as default => handle below.\r\n        row.data.vehicleType = \"car\";\r\n        row.price = toEur(m.car);\r\n        row.data.additionsAllowed = true;\r\n        row.data.passengersAllowed = true;\r\n      } else {\r\n        row.data.vehicleType = \"custom\";\r\n      }\r\n    }\r\n\r\n    if (row.data.passengersAllowed) {\r\n      row.price ??= 0;\r\n      row.price += toEur(((row.data.passengerCount || 0) * m.passanger)) ?? 0;\r\n    }\r\n\r\n    if (row.data.additionsAllowed) {\r\n      Arrays.assureArray(row.data.additions || []).forEach((x) => {\r\n        row.price ??= 0;\r\n        row.price += toEur(m.carAdditions[x] || 0) ?? 0;\r\n      });\r\n    }\r\n    row.price = Numeric.round(row.price);\r\n  }\r\n\r\n  /** Gets validation message for BoardUsecaseLogic  */\r\n  public getUcValidation(): UsecaseValidationMessage | undefined {\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Gets the vehicle type selection.\r\n   * @param date Date for which the selection is fetched (default: today). The prices changes yearly an also the selection may change.\r\n   */\r\n  public getVehicleTypeSelection(date: DatelyObject = \"today\"): InputEnumOption[] {\r\n    const m = this.getMilage(date);\r\n    const toEur = (val: number) => Numeric.round(val / 100);\r\n    const result: InputEnumOption[] = [{\r\n      value: \"car\",\r\n      text: `${Translations.get(\"SALAXY.CORE.yearlyTaxfreeYears.milage.car\")} (${toEur(m.car)}€)`,\r\n    }, {\r\n      value: \"carLimitedBenefit\",\r\n      text: `${Translations.get(\"SALAXY.CORE.yearlyTaxfreeYears.milage.carLimitedBenefit\")} (${toEur(m.carLimitedBenefit)}€)`,\r\n    }];\r\n    Object.entries(m.other).forEach((x) =>\r\n      result.push({\r\n        value: x[0],\r\n        text: `${Translations.get(`SALAXY.CORE.yearlyTaxfreeYears.milage.other.${x[0]}`)} (${toEur(x[1])}€)`,\r\n      })\r\n    );\r\n    result.push({\r\n      value: \"custom\",\r\n      text: `${Translations.get(\"SALAXY.CORE.yearlyTaxfreeYears.milage.custom\")}`,\r\n    });\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Gets the vehicle type selection.\r\n   * @param date Date for which the selection is fetched (default: today). The prices changes yearly an also the selection may change.\r\n   */\r\n  public getAdditionsSelection(date: DatelyObject = \"today\"): InputEnumOption[] {\r\n    const m = this.getMilage(date);\r\n    const toEur = (val: number) => Numeric.round(val / 100);\r\n    return Object.entries(m.carAdditions).map((x) => ({\r\n        value: x[0],\r\n        text: `${Translations.get(`SALAXY.CORE.yearlyTaxfreeYears.milage.carAdditions.${x[0]}`)} (${toEur(x[1])}€)`,\r\n      }));\r\n  }\r\n\r\n  private getMilage(date: DatelyObject) {\r\n    const year = Dates.getYear(date);\r\n    const m = yearlyTaxFreeYears.find((x) => x.year == year)?.milage;\r\n    if (!m) {\r\n      throw new Error(`No yearlyTaxFreeYears year for date ${date}`);\r\n    }\r\n    return m;\r\n  }\r\n}\r\n","import { EnumerationsLogic, Translations } from \"../../logic\";\r\nimport { NonProfitOrgUsecase, UserDefinedRow } from \"../../model\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\n\r\n/**\r\n * Handles the usecase for Non-profit organization specific allowances.\r\n */\r\nexport class NonProfitOrgUsecaseLogic extends BaseUsecaseLogic {\r\n  /** Gets validation message for BoardUsecaseLogic  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage {\r\n    const data: NonProfitOrgUsecase = row.data || {};\r\n    if (!data.kind) {\r\n      return {\r\n        type: \"error\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.nonProfitOrg.noKind\",\r\n      };\r\n    }\r\n    return { type: \"default\", msg: `${Translations.get(\"SALAXY.VALIDATION.Usecases.nonProfitOrg.default\")} ${EnumerationsLogic.getEnumLabel(\"NonProfitOrgKind\", data.kind)}` };\r\n  }\r\n}\r\n","import { OtherCompensationKind, OtherCompensationUsecase, UserDefinedRow } from \"../../model\";\r\nimport { IncomeTypeMetadata, IncomeTypesLogic, } from \"../../logic\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/** Client-side logic for OtherCompensationUsecase  */\r\nexport class OtherCompensationUsecaseLogic extends BaseUsecaseLogic {\r\n  /** Gets validation message  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage | undefined {\r\n    const data: OtherCompensationUsecase = row.data || {};\r\n    const codeData = this.getCodeData(data.kind);\r\n    if (!codeData) {\r\n      return {\r\n        type: \"error\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.noIrIncomeType\",\r\n      };\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  private getCodeData(kind: OtherCompensationKind | null | undefined): IncomeTypeMetadata | undefined {\r\n    if (kind) {\r\n      let code = 0;\r\n      switch (kind) {\r\n        case OtherCompensationKind.MeetingFee:\r\n          code = 210;\r\n          break;\r\n        case OtherCompensationKind.LectureFee:\r\n          code = 214;\r\n          break;\r\n        case OtherCompensationKind.PositionOfTrustCompensation:\r\n          code = 215;\r\n          break;\r\n        case OtherCompensationKind.AccruedTimeOffCompensation:\r\n          code = 225;\r\n          break;\r\n        case OtherCompensationKind.MembershipOfGoverningBodyCompensation:\r\n          code = 308;\r\n          break;\r\n        case OtherCompensationKind.MonetaryGiftForEmployees:\r\n          code = 310;\r\n          break;\r\n        case OtherCompensationKind.UseCompensationAsEarnedIncome:\r\n          code = 313;\r\n          break;\r\n        case OtherCompensationKind.UseCompensationAsCapitalIncome:\r\n          code = 314;\r\n          break;\r\n        case OtherCompensationKind.OtherTaxableIncomeAsEarnedIncome:\r\n          code = 316;\r\n          break;\r\n        case OtherCompensationKind.StockOptionsAndGrants:\r\n          code = 320;\r\n          break;\r\n        case OtherCompensationKind.EmployeeInventionCompensation:\r\n          code = 326;\r\n          break;\r\n        case OtherCompensationKind.CapitalIncomePayment:\r\n          code = 332;\r\n          break;\r\n        case OtherCompensationKind.WorkEffortBasedDividendsAsWage:\r\n          code = 339;\r\n          break;\r\n        case OtherCompensationKind.WorkEffortBasedDividendsAsNonWage:\r\n          code = 340;\r\n          break;\r\n        case OtherCompensationKind.EmployeeStockOption:\r\n          code = 343;\r\n          break;\r\n        case OtherCompensationKind.EmployeeStockOptionWithLowerPrice:\r\n          code = 361;\r\n          break;\r\n        case OtherCompensationKind.CopyrightRoyaltiesEarnedIncome:\r\n          code = 366;\r\n          break;\r\n        case OtherCompensationKind.StockGrantPaidInMoney:\r\n          code = 367;\r\n          break;\r\n        case OtherCompensationKind.EmployeeStockOptionPaidInMoney:\r\n          code = 368;\r\n          break;\r\n        case OtherCompensationKind.Undefined:\r\n        default:\r\n          code = 0;\r\n          break;\r\n      }\r\n      return IncomeTypesLogic.getAll().find((x) => x.code === code);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  private isIrIncomeTypeLabel(label: string): boolean {\r\n    return IncomeTypesLogic.getAll().some((x) => x.label === label);\r\n  }\r\n}\r\n","import { PaidSickLeaveUsecase, UserDefinedRow } from \"../../model\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/** Client-side logic for PaidSickLeaveUsecase  */\r\nexport class PaidSickLeaveUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * param row Row to update.\r\n   */\r\n  public updateUsecase(/*row: UserDefinedRow*/): void {\r\n    // TODO: refactor this to align with the new way of constructing row label without setting the value.\r\n  }\r\n\r\n  /** Gets validation message for IrIncomeTypeUsecase  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage | undefined {\r\n    const data: PaidSickLeaveUsecase = row.data || {};\r\n    if (!data.kind) {\r\n      return {\r\n        type: \"error\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.noKind\",\r\n      };\r\n    }\r\n    return undefined;\r\n  }\r\n}\r\n","import { RemunerationKind, RemunerationUsecase, UserDefinedRow } from \"../../model\";\r\nimport { IncomeTypeMetadata, IncomeTypesLogic, } from \"../../logic\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/** Client-side logic for RemunerationUsecase  */\r\nexport class RemunerationUsecaseLogic extends BaseUsecaseLogic {\r\n  /** Gets validation message for IrIncomeTypeUsecase  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage | undefined {\r\n    const data: RemunerationUsecase = row.data || {};\r\n    const codeData = this.getCodeData(data.kind);\r\n    if (!codeData) {\r\n      return {\r\n        type: \"error\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.noIrIncomeType\",\r\n      };\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  private getCodeData(kind: RemunerationKind | undefined | null): IncomeTypeMetadata | undefined {\r\n    if (kind) {\r\n      let code = 0;\r\n      switch (kind) {\r\n        case RemunerationKind.InitiativeFee:\r\n          code = 202;\r\n          break;\r\n        case RemunerationKind.BonusPay:\r\n          code = 203;\r\n          break;\r\n        case RemunerationKind.Commission:\r\n          code = 220;\r\n          break;\r\n        case RemunerationKind.PerformanceBonus:\r\n          code = 223;\r\n          break;\r\n        case RemunerationKind.ShareIssueForEmployees:\r\n          code = 226;\r\n          break;\r\n        case RemunerationKind.ProfitSharingBonus:\r\n          code = 233;\r\n          break;\r\n        case RemunerationKind.Undefined:\r\n        default:\r\n          code = 0;\r\n          break;\r\n      }\r\n      return IncomeTypesLogic.getAll().find((x) => x.code === code);\r\n    }\r\n    return undefined;\r\n  }\r\n}\r\n","import { DatelyObject, Dates, Numeric, Years } from \"../../util\";\r\nimport { Translations } from \"../../logic\";\r\nimport { SubsidisedCommuteKind, SubsidisedCommuteUsecase, UserDefinedRow } from \"../../model\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/** Client-side logic for SubsidisedCommuteUsecase  */\r\nexport class SubsidisedCommuteUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  private _calculatedTaxable: number;\r\n  private _calculatedTaxfree: number;\r\n  private _isBefore2021: boolean;\r\n  private _row: UserDefinedRow;\r\n  private _date: DatelyObject;\r\n\r\n  /** Returns calculated taxable value. */\r\n  public get calculatedTaxable(): number {\r\n    return this._calculatedTaxable;\r\n  }\r\n\r\n  /** Returns calculated taxfree value */\r\n  public get calculatedTaxfree(): number {\r\n    return this._calculatedTaxfree;\r\n  }\r\n\r\n  /** Returns true if the date for calculation is before 2021. */\r\n  public get isBefore2021(): boolean {\r\n    return this._isBefore2021 ?? false;\r\n  }\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * @param row Row to update.\r\n   * @param date The reference date for which the logic is done.\r\n   * Typically the salary date of a calculation and the typically, the information needed is just the year for which the yearly changing numbers are fetched, but may later have more extended features.\r\n   */\r\n  public updateUsecase(row: UserDefinedRow, date: DatelyObject): void {\r\n    row = row ?? this._row;\r\n    this._row = row;\r\n    date = date ?? this._date;\r\n    this._date = date;\r\n\r\n    const data: SubsidisedCommuteUsecase = row.data ?? {};\r\n    if (!data.kind || data.kind == SubsidisedCommuteKind.NoDeduction || data.kind == SubsidisedCommuteKind.Undefined)\r\n    {\r\n        data.kind = SubsidisedCommuteKind.NoDeduction;\r\n        data.deduction = null;\r\n    }\r\n    else\r\n    {\r\n      data.deduction = data.deduction && data.deduction < 0 ? null : data.deduction;\r\n    }\r\n\r\n    data.taxable = data.taxable && data.taxable < 0 ? null : data.taxable;\r\n\r\n    if (data.kind == SubsidisedCommuteKind.PeriodicalDeduction) {\r\n      data.periodDivider =  data.periodDivider ?? 12;\r\n      data.periodDivider = data.periodDivider < 0 ? 12 : data.periodDivider;\r\n      if ( data.periodDivider  == 0) {\r\n        data.kind = SubsidisedCommuteKind.SingleDeduction;\r\n      }\r\n    }\r\n    else\r\n    {\r\n      data.periodDivider = null;\r\n    }\r\n\r\n    if (Dates.isSameOrBefore(date, \"2021-01-01\")) {\r\n      data.taxable = null;\r\n      this._isBefore2021 = true;\r\n      return;\r\n    }\r\n    this._isBefore2021 = false;\r\n\r\n    const limit = Years.getYearlyChangingNumbers(date)?.sideCosts?.taxFreeSubsidisedCommute ?? 0;\r\n    let total = Numeric.round((row.price ?? 0) * (row.count ?? 1), 2) ?? 0;\r\n    if (total < 0) {\r\n      total = 0;\r\n    }\r\n\r\n    let deduction = data.deduction ?? 0;\r\n    if (deduction > total) {\r\n      deduction = 0;\r\n      data.deduction = null;\r\n    }\r\n    if (data.taxable && data.taxable > ( total - deduction) ) {\r\n      data.taxable = null;\r\n    }\r\n\r\n    const calcTaxable = Numeric.round(Math.max(0, total - deduction - limit), 2) ?? 0;\r\n    if (data.taxable && data.taxable <= calcTaxable) {\r\n      data.taxable = null;\r\n    }\r\n    const calcTaxfree = Numeric.round(Math.max(0, total - deduction - (data.taxable ?? calcTaxable)), 2) ?? 0;\r\n\r\n    this._calculatedTaxable = data.taxable ?? calcTaxable;\r\n    this._calculatedTaxfree = calcTaxfree;\r\n  }\r\n\r\n  /**\r\n   * Gets validation message for the usecase.\r\n   * @param row Row to validate\r\n   * @returns A message that is either an error or OK (default). Warnings, info etc. may later be supported.\r\n   */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage {\r\n    const data: SubsidisedCommuteUsecase = row?.data || {};\r\n    let msg;\r\n    switch (data.kind) {\r\n      case SubsidisedCommuteKind.SingleDeduction:\r\n        msg = `${Translations.get(\"SALAXY.VALIDATION.Usecases.subsidisedCommute.singleDeduction\")} ${Numeric.formatPrice(data.deduction || 0)}`;\r\n        break;\r\n      case SubsidisedCommuteKind.PeriodicalDeduction:\r\n        msg = `${Translations.get(\"SALAXY.VALIDATION.Usecases.subsidisedCommute.periodicalDeduction\")} ${Numeric.formatPrice(data.deduction || 0)} ${Translations.get(\"SALAXY.VALIDATION.Usecases.subsidisedCommute.periodicalDeduction2\")} ${data.periodDivider || 12} ${Translations.get(\"SALAXY.VALIDATION.Usecases.subsidisedCommute.periodicalDeduction3\")}`;\r\n        break;\r\n      case SubsidisedCommuteKind.NoDeduction:\r\n      default:\r\n        msg = \"SALAXY.VALIDATION.Usecases.subsidisedCommute.noDeduction\";\r\n        break;\r\n    }\r\n    return { type: \"default\", msg };\r\n  }\r\n}\r\n","import { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { TaxAtSourceKind, TaxAtSourceUsecase, UserDefinedRow } from \"../../model\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\nimport { DatelyObject, Numeric } from \"../../util\";\r\nimport { RowUsecaseCalcData } from \"../RowUsecaseCalcData\";\r\n\r\n/** Client-side logic for TaxAtSource  */\r\nexport class TaxAtSourceUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * @param row Row to update.\r\n   * @param _date The reference date for which the logic is done.\r\n   * Typically the salary date of a calculation and the typically, the information needed is just the year for which the yearly changing numbers are fetched, but may later have more extended features.\r\n   * @param _calcData The calculation related data that is required by the more complex calculations:\r\n   * This data is available only after first round-trip to the server (results object exists) and not all user interfaces may provide this.\r\n   */\r\n  public updateUsecase(row: UserDefinedRow, _date: DatelyObject, _calcData: RowUsecaseCalcData): void {\r\n    const data: TaxAtSourceUsecase = row.data || {};\r\n    switch (data.kind) {\r\n      case TaxAtSourceKind.DailyDeduction:\r\n      case TaxAtSourceKind.MonthlyDeduction:\r\n        data.deduction = (data.deductionPrice ?? 0) * (data.deductionCount ?? 0);\r\n        row.price = (data.totalTaxable ?? 0) - data.deduction;\r\n        row.count = data?.employmentData?.percent ?? 0;\r\n        data.taxValue = row.price * row.count;\r\n        break;\r\n      case TaxAtSourceKind.FixedValues:\r\n        // FIXED: data.deduction = data.deductionPrice * data.deductionCount;\r\n        row.price = data.taxValue;\r\n        row.count = 1;\r\n        break;\r\n      case TaxAtSourceKind.Undefined:\r\n      case TaxAtSourceKind.NoDeduction:\r\n        data.deduction = 0;\r\n        row.price = data.totalTaxable;\r\n        row.count = data.employmentData?.percent ?? 0;\r\n        data.taxValue = (row.price ?? 0) * row.count;\r\n        break;\r\n    }\r\n  }\r\n\r\n  /** Gets validation message*/\r\n  protected getUcValidation?(row: UserDefinedRow): UsecaseValidationMessage {\r\n    const data: TaxAtSourceUsecase = row.data || {};\r\n    let msg = \"-\";\r\n    switch (data.kind) {\r\n      case TaxAtSourceKind.DailyDeduction:\r\n      case TaxAtSourceKind.MonthlyDeduction:\r\n        msg = `(${ Numeric.formatPrice(row.data?.totalTaxable) } - ${ Numeric.formatPrice(row.data?.deduction)} = ${Numeric.formatPrice(row.price)}) * ${Numeric.formatPercent((row.count ?? 0) * 100, undefined)} = ${ Numeric.formatPrice(row.data?.taxValue) }`;\r\n        break;\r\n      case TaxAtSourceKind.FixedValues:\r\n\r\n        msg = `Tulot: ${ Numeric.formatPrice(row.data?.totalTaxable) } - ${ Numeric.formatPrice(row.data?.deduction)} = ${Numeric.formatPrice(row.data?.totalTaxable - row.data?.deduction)}, Lähdevero: ${ Numeric.formatPrice(row.data?.taxValue)}`;\r\n        break;\r\n      case TaxAtSourceKind.Undefined:\r\n      case TaxAtSourceKind.NoDeduction:\r\n\r\n        msg = `(${ Numeric.formatPrice(row.data?.totalTaxable) } - ${ Numeric.formatPrice(row.data?.deduction)}) * ${Numeric.formatPercent((row.count ?? 0) * 100, undefined)} = ${ Numeric.formatPrice(row.data?.taxValue) }`;\r\n        break;\r\n\r\n    }\r\n    return {\r\n      msg,\r\n      // TODO: Added validation errors\r\n      type: \"default\",\r\n    };\r\n  }\r\n}","import { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { TaxWithholdingKind, TaxWithholdingUsecase, UserDefinedRow } from \"../../model\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\nimport { DatelyObject, Numeric } from \"../../util\";\r\nimport { RowUsecaseCalcData } from \"../RowUsecaseCalcData\";\r\n\r\n/** Client-side logic for TaxWithholding  */\r\nexport class TaxWithholdingUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * @param row Row to update.\r\n   * @param _date The reference date for which the logic is done.\r\n   * Typically the salary date of a calculation and the typically, the information needed is just the year for which the yearly changing numbers are fetched, but may later have more extended features.\r\n   * @param calcData The calculation related data that is required by the more complex calculations:\r\n   * This data is available only after first round-trip to the server (results object exists) and not all user interfaces may provide this.\r\n   */\r\n  public updateUsecase(row: UserDefinedRow, _date: DatelyObject, calcData: RowUsecaseCalcData): void {\r\n    const data: TaxWithholdingUsecase = row.data ?? {};\r\n    data.kind = (data.kind || TaxWithholdingKind.Percentage);\r\n\r\n    if (data.kind === TaxWithholdingKind.Undefined) {\r\n      data.kind = TaxWithholdingKind.Percentage;\r\n    }\r\n\r\n    switch (data.kind) {\r\n      case TaxWithholdingKind.FixedValue:\r\n        row.price = data.taxValue;\r\n        row.count = 1;\r\n        break;\r\n      case TaxWithholdingKind.Percentage:\r\n        row.price = calcData.totalTaxable;\r\n        row.count = ( data.taxValue &&data.taxValue >= 0 && data.taxValue <= 1 ) ? data.taxValue : 0;\r\n        break;\r\n    }\r\n  }\r\n\r\n  /** Gets validation message*/\r\n  protected getUcValidation?(row: UserDefinedRow): UsecaseValidationMessage {\r\n    const data: TaxWithholdingUsecase = row.data || {};\r\n    let msg = \"-\";\r\n    switch (data.kind) {\r\n      case TaxWithholdingKind.Percentage:\r\n        msg = `${Numeric.formatPercent(100.0 * row.data?.taxValue, 1)}`;\r\n        break;\r\n      case TaxWithholdingKind.FixedValue:\r\n        msg = `${Numeric.formatPrice(row.data?.taxValue)}`;\r\n        break;\r\n    }\r\n    return {\r\n      msg,\r\n      type: \"default\",\r\n    };\r\n  }\r\n}","import { CalculationRowType, TotalWorkerPaymentUsecase, TotalWorkerPaymentKind, UserDefinedRow } from \"../../model\";\r\nimport { EnumerationsLogic, Translations } from \"../../logic\";\r\nimport { Numeric } from \"../../util\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/** Client-side logic for TotalWorkerPayment  */\r\nexport class TotalWorkerPaymentUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * @param row Row to update.\r\n   */\r\n  public updateUsecase(row: UserDefinedRow): void {\r\n    const data: TotalWorkerPaymentUsecase = row.data || {};\r\n\r\n    if (!data.kind || data.kind === TotalWorkerPaymentKind.Undefined) {\r\n      data.kind = TotalWorkerPaymentKind.TotalWorkerPayment;\r\n    }\r\n\r\n    if (!data.rowType) {\r\n      data.rowType = CalculationRowType.Salary;\r\n    }\r\n\r\n  }\r\n\r\n  /** Gets validation message for BoardUsecaseLogic  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage {\r\n    const data: TotalWorkerPaymentUsecase = row.data || {};\r\n\r\n    if (!data.kind || data.kind === TotalWorkerPaymentKind.Undefined) {\r\n      data.kind = TotalWorkerPaymentKind.TotalWorkerPayment;\r\n    }\r\n\r\n    if (!data.rowType) {\r\n      data.rowType = CalculationRowType.Salary;\r\n    }\r\n\r\n    return {\r\n      type: \"default\",\r\n      msg: `${EnumerationsLogic.getEnumLabel(\"CalculationRowType\", data.rowType)} ${Translations.get(\"SALAXY.VALIDATION.Usecases.totalWorkerPayment.default\")} ${Numeric.formatPrice(row.price)} ${Translations.get(\"SALAXY.VALIDATION.Usecases.totalWorkerPayment.default2\")} ${EnumerationsLogic.getEnumLabel(\"TotalWorkerPaymentKind\", data.kind)}.`,\r\n    };\r\n  }\r\n}\r\n","import { TrainingUsecase, UserDefinedRow } from \"../../model\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/** Client-side logic for TrainingUsecase  */\r\nexport class TrainingUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * param row Row to update.\r\n   */\r\n  public updateUsecase(/*row: UserDefinedRow*/): void {\r\n    // TODO: refactor this to align with the new way of constructing row label without setting the value.\r\n  }\r\n\r\n  /** Gets validation message for IrIncomeTypeUsecase  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage | undefined {\r\n    const data: TrainingUsecase = row.data || {};\r\n    if (!data.kind) {\r\n      return {\r\n        type: \"error\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.noKind\",\r\n      };\r\n    }\r\n    return undefined;\r\n  }\r\n}\r\n","import { UnionPaymentKind, UnionPaymentUsecase, UserDefinedRow } from \"../../model\";\r\nimport { DatelyObject, Years, Dates } from \"../../util\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\nimport { RowUsecaseCalcData } from \"../RowUsecaseCalcData\";\r\n\r\n/** Client-side logic for UnionPaymentUsecase  */\r\nexport class UnionPaymentUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /**\r\n   * Updates the usecase values based on user input without going to the server.\r\n   * @param row Row to update.\r\n   * @param date The reference date for which the logic is done.\r\n   * Typically the salary date of a calculation and the typically, the information needed is just the year for which the yearly changing numbers are fetched, but may later have more extended features.\r\n   * @param calcData The calculation related data that is required by the more complex calculations:\r\n   * This data is available only after first round-trip to the server (results object exists).\r\n   */\r\n  public updateUsecase(row: UserDefinedRow, date?: DatelyObject, calcData?: RowUsecaseCalcData): void {\r\n    const data: UnionPaymentUsecase = row.data ?? {};\r\n    data.kind = (data.kind || UnionPaymentKind.Percentage);\r\n\r\n    if (!data.kind || data.kind === UnionPaymentKind.Undefined) {\r\n      data.kind = UnionPaymentKind.Percentage;\r\n    }\r\n\r\n    if (data.kind === UnionPaymentKind.Other) {\r\n      if ((data as any).isFixedSum) {\r\n        data.kind = UnionPaymentKind.Fixed;\r\n        row.price = (row.price ?? 0) * (row.count ?? 1);\r\n        row.count = 1;\r\n      } else {\r\n        data.kind = UnionPaymentKind.Percentage;\r\n      }\r\n    }\r\n\r\n    const numbers = Years.getYearlyChangingNumbers(date);\r\n    const raksaIban = \"FI6115553000120981\";\r\n    const raksaName = \"Rakennusliitto\";\r\n    const totalTaxable = calcData?.totalTaxable ?? 0;\r\n\r\n    switch (data.kind) {\r\n      case UnionPaymentKind.Fixed:\r\n        row.count = 1;\r\n        if (row.price === totalTaxable) {\r\n          row.price = 0;\r\n        }\r\n        // row.price\r\n        break;\r\n      case UnionPaymentKind.Percentage:\r\n        if (!row.count || row.count >= 1) {\r\n          row.count = 0;\r\n        }\r\n        row.price = totalTaxable;\r\n        break;\r\n      case UnionPaymentKind.PercentageAndLimits:\r\n        if (data.paymentPercentage && data.paymentPercentage >= 1) {\r\n          data.paymentPercentage = 0;\r\n          row.count = 0;\r\n          row.price = totalTaxable;\r\n        }\r\n        else {\r\n          const payment = (data.paymentPercentage ?? 0) * (totalTaxable ?? 0);\r\n          if (data.minimumPayment &&\r\n            payment < data.minimumPayment) {\r\n            row.count = 1;\r\n            row.price = data.minimumPayment;\r\n          } else if (\r\n            data.maximumPayment &&\r\n            payment > data.maximumPayment) {\r\n            row.count = 1;\r\n            row.price = data.maximumPayment;\r\n          } else {\r\n            row.count = data.paymentPercentage;\r\n            row.price = totalTaxable;\r\n          }\r\n        }\r\n        break;\r\n      case UnionPaymentKind.RaksaNormal:\r\n        data.iban = raksaIban;\r\n        data.recipientFullName = raksaName;\r\n        row.count = numbers?.sideCosts?.unionPaymentRaksaA;\r\n        if (totalTaxable != null) {\r\n          row.price = totalTaxable;\r\n        }\r\n        break;\r\n      case UnionPaymentKind.RaksaUnemploymentOnly:\r\n        data.iban = raksaIban;\r\n        data.recipientFullName = raksaName;\r\n        row.count = numbers?.sideCosts?.unionPaymentRaksaAoTa;\r\n        if (totalTaxable != null) {\r\n          row.price = totalTaxable;\r\n        }\r\n\r\n        break;\r\n    }\r\n    this.setReferenceNumber(data, calcData?.employerOfficialId, calcData?.workerOfficialId,date);\r\n  }\r\n\r\n  /** Gets validation message for UnionPaymentUsecase  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage {\r\n    const data: UnionPaymentUsecase = row.data || {};\r\n\r\n    if (data.kind === UnionPaymentKind.Other) {\r\n      if ((data as any).isFixedSum) {\r\n        data.kind = UnionPaymentKind.Fixed;\r\n        row.price = (row.price ?? 0) * (row.count ?? 1);\r\n        row.count = 1;\r\n      } else {\r\n        data.kind = UnionPaymentKind.Percentage;\r\n      }\r\n    }\r\n\r\n    switch (data.kind) {\r\n      case UnionPaymentKind.Fixed:\r\n        if (!row.price) {\r\n          return {\r\n            type: \"error\",\r\n            msg: \"SALAXY.VALIDATION.Usecases.unionPayment.fixedError\",\r\n          };\r\n        }\r\n        return {\r\n          type: \"default\",\r\n          msg: \"SALAXY.VALIDATION.Usecases.unionPayment.fixed\",\r\n        };\r\n      case UnionPaymentKind.Percentage:\r\n        if (!row.count) {\r\n          return {\r\n            type: \"error\",\r\n            msg: \"SALAXY.VALIDATION.Usecases.unionPayment.percentageError\",\r\n          };\r\n        }\r\n        return {\r\n          type: \"default\",\r\n          msg: \"SALAXY.VALIDATION.Usecases.unionPayment.percentage\",\r\n        };\r\n      case UnionPaymentKind.PercentageAndLimits:\r\n        if (!data?.paymentPercentage) {\r\n          return {\r\n            type: \"error\",\r\n            msg: \"SALAXY.VALIDATION.Usecases.unionPayment.percentageError\",\r\n          };\r\n        }\r\n        return {\r\n          type: \"default\",\r\n          msg: \"SALAXY.VALIDATION.Usecases.unionPayment.percentage\",\r\n        };\r\n      case UnionPaymentKind.RaksaNormal:\r\n      case UnionPaymentKind.RaksaUnemploymentOnly:\r\n        if (!row.count) {\r\n          return {\r\n            type: \"error\",\r\n            msg: \"SALAXY.VALIDATION.Usecases.unionPayment.raksaError\",\r\n          };\r\n        }\r\n        return {\r\n          type: \"default\",\r\n          msg: \"SALAXY.VALIDATION.Usecases.unionPayment.raksa\",\r\n        };\r\n      default:\r\n        return {\r\n          type: \"error\",\r\n          msg: \"SALAXY.VALIDATION.Usecases.unionPayment.default\",\r\n        };\r\n    }\r\n  }\r\n\r\n  private setReferenceNumber(usecase: UnionPaymentUsecase, officialId: string | undefined | null, ssn: string | undefined | null, salaryDate: DatelyObject | undefined) {\r\n    if (!salaryDate || !officialId || officialId.length > 9 || !ssn) {\r\n      return;\r\n    }\r\n    // ssn: ddMMyy-xxxX\r\n    // reference: 8{yy}{MM}{d10}{xxx}{d1}{salaryMonth}{officialId without check number}{check number for reference}\r\n    const referenceBase = `8${ssn.substring(4, 6)}${ssn.substring(2, 4)}${ssn.substring(0, 1)}${ssn.substring(7, 10)}${ssn.substring(1, 2)}${Dates.format(salaryDate, \"MM\")}${officialId.substring(0, 7)}`;\r\n    const referenceNumber = `${referenceBase}${this.getCheckNumber(referenceBase)}`;\r\n    if (!usecase.referenceNumber ||\r\n      (\r\n        usecase.referenceNumber.length == 20 &&\r\n        usecase.referenceNumber.substring(0, 10) == referenceNumber.substring(0, 10) &&\r\n        usecase.referenceNumber.substring(12, 19) == referenceNumber.substring(12, 19)\r\n      )\r\n    ) {\r\n      usecase.referenceNumber = referenceNumber;\r\n    }\r\n  }\r\n\r\n  private getCheckNumber(numberWithoutTheCheckNumber: string): string {\r\n    if (!numberWithoutTheCheckNumber) {\r\n      return \"\";\r\n    }\r\n    const multipliers = [7, 3, 1];\r\n    const reverse = numberWithoutTheCheckNumber.split(\"\").reverse();\r\n\r\n    let sum = 0;\r\n    for (let i = 0; i < reverse.length; i++) {\r\n      sum += Number.parseInt(reverse[i]) * multipliers[i % 3];\r\n    }\r\n    return `${((10 - (sum % 10)) % 10)}`;\r\n  }\r\n}\r\n","import { UserDefinedRow, WorkingTimeCompensationKind, WorkingTimeCompensationUsecase } from \"../../model\";\r\nimport { IncomeTypeMetadata, IncomeTypesLogic } from \"../../logic\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/** Client-side logic for WorkingTimeCompensationUsecase  */\r\nexport class WorkingTimeCompensationUsecaseLogic extends BaseUsecaseLogic {\r\n  /** Gets validation message*/\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage | undefined {\r\n    const data: WorkingTimeCompensationUsecase = row.data || {};\r\n    const codeData = this.getCodeData(data.kind);\r\n    if (!codeData) {\r\n      return {\r\n        type: \"error\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.noIrIncomeType\",\r\n      };\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  private getCodeData(kind: WorkingTimeCompensationKind | undefined | null): IncomeTypeMetadata | undefined {\r\n    if (kind) {\r\n      let code = 0;\r\n      switch (kind) {\r\n        case WorkingTimeCompensationKind.EmergencyWorkCompensation:\r\n          code = 205;\r\n          break;\r\n        case WorkingTimeCompensationKind.EveningWorkCompensation:\r\n          code = 206;\r\n          break;\r\n        case WorkingTimeCompensationKind.EveningShiftAllowance:\r\n          code = 207;\r\n          break;\r\n        case WorkingTimeCompensationKind.SaturdayPay:\r\n          code = 211;\r\n          break;\r\n        case WorkingTimeCompensationKind.ExtraWorkPremium:\r\n          code = 212;\r\n          break;\r\n        case WorkingTimeCompensationKind.OtherCompensation:\r\n          code = 216;\r\n          break;\r\n        case WorkingTimeCompensationKind.WaitingTimeCompensation:\r\n          code = 217;\r\n          break;\r\n        case WorkingTimeCompensationKind.SundayWorkCompensation:\r\n          code = 221;\r\n          break;\r\n        case WorkingTimeCompensationKind.StandByCompensation:\r\n          code = 230;\r\n          break;\r\n        case WorkingTimeCompensationKind.WeeklyRestCompensation:\r\n          code = 232;\r\n          break;\r\n        case WorkingTimeCompensationKind.OvertimeCompensation:\r\n          code = 235;\r\n          break;\r\n        case WorkingTimeCompensationKind.NightWorkAllowance:\r\n          code = 236;\r\n          break;\r\n        case WorkingTimeCompensationKind.NightShiftCompensation:\r\n          code = 237;\r\n          break;\r\n        case WorkingTimeCompensationKind.Undefined:\r\n        default:\r\n          code = 0;\r\n          break;\r\n      }\r\n      return IncomeTypesLogic.getAll().find((x) => x.code === code);\r\n    }\r\n    return undefined;\r\n  }\r\n}\r\n","import { PayStatsUsecase, UserDefinedRow } from \"../../model\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/**\r\n * PayStats currrently has no client-side logic.\r\n */\r\nexport class PayStatsUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /** Gets validation message for BoardUsecaseLogic  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage | undefined {\r\n    const data: PayStatsUsecase = row.data || {};\r\n    if (!data.kind) {\r\n      return {\r\n        type: \"error\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.noKind\",\r\n      };\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n}\r\n","import { TimeRatePayKind, UserDefinedRow } from \"../../model\";\r\nimport { UsecaseValidationMessage } from \"../UsecaseValidationMessage\";\r\nimport { BaseUsecaseLogic } from \"../BaseUsecaseLogic\";\r\n\r\n/**\r\n * Time rate pay validations\r\n */\r\nexport class TimeRatePayUsecaseLogic extends BaseUsecaseLogic {\r\n\r\n  /** Gets validation message for BoardUsecaseLogic  */\r\n  public getUcValidation(row: UserDefinedRow): UsecaseValidationMessage | undefined {\r\n    const data: ({ kind?: TimeRatePayKind })= row.data || {};\r\n    if (!data.kind) {\r\n      return {\r\n        type: \"error\",\r\n        msg: \"SALAXY.VALIDATION.Usecases.noKind\",\r\n      };\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n}\r\n","import { Calculation, DateRange } from \"../model\";\r\n\r\n/**\r\n * Abstracts the data from Calculation that a row usecase may use in update method.\r\n * Separated so that it is clear which parts of a calculation may be used by row usecases.\r\n */\r\nexport class RowUsecaseCalcData {\r\n\r\n  /**\r\n   * Creates the RowUsecaseCalcData from a calculation.\r\n   * @param calc Calculation that is used in the usecase.\r\n   */\r\n  public static fromCalc(calc: Calculation): RowUsecaseCalcData {\r\n    const result = new RowUsecaseCalcData();\r\n    if (calc?.info) {\r\n      result.hasValues = true;\r\n      result.period = {\r\n        start: calc.info.workStartDate,\r\n        end: calc.info.workEndDate,\r\n        daysCount: calc.framework?.numberOfDays,\r\n      };\r\n      if (calc.result?.totals) {\r\n        result.foreclosureSalary = (calc.result.totals.totalTaxable ?? 0) - (calc.result.workerCalc?.fullTax ?? 0) - (calc.result.workerCalc?.fullTaxAtSource ?? 0) - (calc.result.workerCalc?.fullPension ?? 0) - (calc.result.workerCalc?.fullUnemploymentInsurance ?? 0);\r\n        result.totalTaxable = calc.result.totals.totalTaxable ?? 0;\r\n      }\r\n      result.employerOfficialId = calc.employer?.officialId;\r\n      result.workerOfficialId = calc.worker?.paymentData?.socialSecurityNumberValid;\r\n\r\n\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /** If true, the values have been set - there was the calculation */\r\n  public hasValues = false;\r\n\r\n  /** Period for the calculation with days count. */\r\n  public period: DateRange = {};\r\n\r\n  /** Salary for foreclosure is salaryAfterTax minus pension and unemploymentInsurance. */\r\n  public foreclosureSalary?: number;\r\n\r\n  /** Total taxable income. */\r\n  public totalTaxable?: number;\r\n\r\n  /** Employer official id */\r\n  public employerOfficialId?: string | null;\r\n\r\n  /** Worker official id */\r\n  public workerOfficialId?: string | null;\r\n}","import {\r\n  Calculation, CalculationRowType, TaxAtSourceUsecase, UserDefinedRow,\r\n  BicycleBenefitUsecase, BoardUsecase, CarBenefitUsecase, DailyAllowanceUsecase, EmploymentTerminationUsecase,\r\n  ForeclosureUsecase, HourlySalaryWithWorkingTimeCompensationUsecase, IrIncomeTypeUsecase, MealBenefitUsecase,\r\n  NonProfitOrgUsecase, OtherCompensationUsecase, PaidSickLeaveUsecase, RemunerationUsecase, SubsidisedCommuteUsecase, TaxWithholdingUsecase, TotalWorkerPaymentUsecase,\r\n  TrainingUsecase, UnionPaymentUsecase, WorkingTimeCompensationUsecase, AbsencePeriodUsecase,\r\n  TimeRatePayKind,\r\n  BoardKind,\r\n  AgeGroupCode,\r\n  WorkingTimeCompensationPricing,\r\n  PayStatsUsecase\r\n} from \"../model\";\r\n\r\nimport { BaseUsecaseLogic } from \"./BaseUsecaseLogic\";\r\nimport { RowUsecaseCalcData } from \"./RowUsecaseCalcData\";\r\nimport { UsecaseRow } from \"./UsecaseRow\";\r\nimport { UsecaseValidationMessage } from \"./UsecaseValidationMessage\";\r\nimport { Dates } from \"../util\";\r\nimport {\r\n  AbsencePeriodUsecaseLogic, BicycleBenefitUsecaseLogic, BoardUsecaseLogic, CarBenefitUsecaseLogic, DailyAllowanceUsecaseLogic, DefaultUsecaseLogic, EmploymentTerminationUsecaseLogic, ExpensesUsecaseLogic,\r\n  ForeclosureUsecaseLogic, HourlySalaryWithWorkingTimeCompensationUsecaseLogic, IrIncomeTypeUsecaseLogic, MealBenefitUsecaseLogic, MilageOwnCarUsecaseLogic,\r\n  NonProfitOrgUsecaseLogic, OtherCompensationUsecaseLogic, PaidSickLeaveUsecaseLogic, RemunerationUsecaseLogic, SubsidisedCommuteUsecaseLogic, TaxAtSourceUsecaseLogic, TaxWithholdingUsecaseLogic, TotalWorkerPaymentUsecaseLogic,\r\n  TrainingUsecaseLogic, UnionPaymentUsecaseLogic, WorkingTimeCompensationUsecaseLogic, HolidaysUsecaseLogic, PayStatsUsecaseLogic, TimeRatePayUsecaseLogic\r\n} from \"./rows\";\r\nimport type { ExpensesUsecase } from \"./ExpensesUsecase\";\r\nimport { MilageOwnCarUsecase } from \"./MilageOwnCarUsecase\";\r\nimport { ExpensesVatRate } from \"../logic\";\r\n\r\n/**\r\n * Provides logic for usecase user interfaces based on calculation rows.\r\n */\r\nexport class RowsUsecaseLogic {\r\n\r\n  /**\r\n   * Gets a blank UserDefinedRow with typed usecase data and usecase specific default data.\r\n   * @param type Type of the usecase for the row.\r\n   */\r\n  public static getBlankUsecaseRow(type: CalculationRowType.AbsencePeriod): UsecaseRow<CalculationRowType.AbsencePeriod, AbsencePeriodUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.BicycleBenefit): UsecaseRow<CalculationRowType.BicycleBenefit, BicycleBenefitUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.Board): UsecaseRow<CalculationRowType.Board, BoardUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.CarBenefit): UsecaseRow<CalculationRowType.CarBenefit, CarBenefitUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.DailyAllowance): UsecaseRow<CalculationRowType.DailyAllowance, DailyAllowanceUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.EmploymentTermination): UsecaseRow<CalculationRowType.EmploymentTermination, EmploymentTerminationUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.Expenses): UsecaseRow<CalculationRowType.Expenses, ExpensesUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.Foreclosure): UsecaseRow<CalculationRowType.Foreclosure, ForeclosureUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.HourlySalaryWithWorkingTimeCompensation): UsecaseRow<CalculationRowType.HourlySalaryWithWorkingTimeCompensation, HourlySalaryWithWorkingTimeCompensationUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.IrIncomeType): UsecaseRow<CalculationRowType.IrIncomeType, IrIncomeTypeUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.MealBenefit): UsecaseRow<CalculationRowType.MealBenefit, MealBenefitUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.MilageOwnCar): UsecaseRow<CalculationRowType.MilageOwnCar, MilageOwnCarUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.NonProfitOrg): UsecaseRow<CalculationRowType.NonProfitOrg, NonProfitOrgUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.OtherCompensation): UsecaseRow<CalculationRowType.OtherCompensation, OtherCompensationUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.PaidSickLeave): UsecaseRow<CalculationRowType.PaidSickLeave, PaidSickLeaveUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.PrepaidExpenses): UsecaseRow<CalculationRowType.PrepaidExpenses, ExpensesUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.Remuneration): UsecaseRow<CalculationRowType.Remuneration, RemunerationUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.SubsidisedCommute): UsecaseRow<CalculationRowType.SubsidisedCommute, SubsidisedCommuteUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.TotalWorkerPayment): UsecaseRow<CalculationRowType.TotalWorkerPayment, TotalWorkerPaymentUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.Training): UsecaseRow<CalculationRowType.Training, TrainingUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.UnionPayment): UsecaseRow<CalculationRowType.UnionPayment, UnionPaymentUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.WorkingTimeCompensation): UsecaseRow<CalculationRowType.WorkingTimeCompensation, WorkingTimeCompensationUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.PayStats): UsecaseRow<CalculationRowType.PayStats, PayStatsUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.TimeRatePay): UsecaseRow<CalculationRowType.TimeRatePay, ({ kind: TimeRatePayKind})>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.TaxAtSource): UsecaseRow<CalculationRowType.TaxAtSource, TaxAtSourceUsecase>;\r\n  public static getBlankUsecaseRow(type: CalculationRowType.TaxWithholding): UsecaseRow<CalculationRowType.TaxWithholding, TaxWithholdingUsecase>;\r\n  public static getBlankUsecaseRow<T extends CalculationRowType, D extends { [key: string]: any }>(type: CalculationRowType): UsecaseRow<T, D>;\r\n  /**\r\n   * Gets a blank UserDefinedRow with typed usecase data and usecase specific default data.\r\n   * @param type Type of the usecase for the row.\r\n   */\r\n  public static getBlankUsecaseRow(type: CalculationRowType): UsecaseRow<CalculationRowType, any> {\r\n    const result = {\r\n      rowType: type,\r\n      count: 1,\r\n      accounting: {\r\n        dimensions: [],\r\n      },\r\n      data: {},\r\n    };\r\n    this.getUsecaseLogic(type)?.updateUsecase(result, \"today\", undefined);\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Gets the usecase specific logic for a row type.\r\n   * @param type Row type for which we should return the logic.\r\n   * @returns Usecase logic for the row type.\r\n   */\r\n  public static getUsecaseLogic(type: CalculationRowType.AbsencePeriod): AbsencePeriodUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.BicycleBenefit): BicycleBenefitUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.Board): BoardUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.CarBenefit): CarBenefitUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.DailyAllowance): DailyAllowanceUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.EmploymentTermination): EmploymentTerminationUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.Expenses): ExpensesUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.Foreclosure): ForeclosureUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.HourlySalaryWithWorkingTimeCompensation): HourlySalaryWithWorkingTimeCompensationUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.IrIncomeType): IrIncomeTypeUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.MealBenefit): MealBenefitUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.MilageOwnCar): MilageOwnCarUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.NonProfitOrg): NonProfitOrgUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.OtherCompensation): OtherCompensationUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.PaidSickLeave): PaidSickLeaveUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.PrepaidExpenses): ExpensesUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.Remuneration): RemunerationUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.SubsidisedCommute): SubsidisedCommuteUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.TotalWorkerPayment): TotalWorkerPaymentUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.Training): TrainingUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.UnionPayment): UnionPaymentUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.WorkingTimeCompensation): WorkingTimeCompensationUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.PayStats): PayStatsUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.TimeRatePay): TimeRatePayUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.TaxAtSource): TaxAtSourceUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.TaxWithholding): TaxWithholdingUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType.HolidayBonus | CalculationRowType.HolidaySalary | CalculationRowType.HolidayCompensation): HolidaysUsecaseLogic;\r\n  public static getUsecaseLogic(type: CalculationRowType): BaseUsecaseLogic;\r\n  /**\r\n   * Gets the usecase specific logic for a row type.\r\n   * @param type Row type for which we should return the logic.\r\n   * @returns Usecase logic for the row type.\r\n   */\r\n  public static getUsecaseLogic(type: CalculationRowType): BaseUsecaseLogic {\r\n    switch (type) {\r\n      case CalculationRowType.AbsencePeriod:\r\n        return new AbsencePeriodUsecaseLogic();\r\n      case CalculationRowType.BicycleBenefit:\r\n        return new BicycleBenefitUsecaseLogic();\r\n      case CalculationRowType.Board:\r\n        return new BoardUsecaseLogic();\r\n      case CalculationRowType.CarBenefit:\r\n        return new CarBenefitUsecaseLogic();\r\n      case CalculationRowType.DailyAllowance:\r\n        return new DailyAllowanceUsecaseLogic();\r\n      case CalculationRowType.EmploymentTermination:\r\n        return new EmploymentTerminationUsecaseLogic();\r\n      case CalculationRowType.Expenses:\r\n        return new ExpensesUsecaseLogic();\r\n      case CalculationRowType.Foreclosure:\r\n        return new ForeclosureUsecaseLogic();\r\n      case CalculationRowType.HourlySalaryWithWorkingTimeCompensation:\r\n        return new HourlySalaryWithWorkingTimeCompensationUsecaseLogic();\r\n      case CalculationRowType.IrIncomeType:\r\n        return new IrIncomeTypeUsecaseLogic();\r\n      case CalculationRowType.MealBenefit:\r\n        return new MealBenefitUsecaseLogic();\r\n      case CalculationRowType.MilageOwnCar:\r\n        return new MilageOwnCarUsecaseLogic();\r\n      case CalculationRowType.NonProfitOrg:\r\n        return new NonProfitOrgUsecaseLogic();\r\n      case CalculationRowType.OtherCompensation:\r\n        return new OtherCompensationUsecaseLogic();\r\n      case CalculationRowType.PaidSickLeave:\r\n        return new PaidSickLeaveUsecaseLogic();\r\n      case CalculationRowType.PrepaidExpenses:\r\n        return new ExpensesUsecaseLogic();\r\n      case CalculationRowType.Remuneration:\r\n        return new RemunerationUsecaseLogic();\r\n      case CalculationRowType.SubsidisedCommute:\r\n        return new SubsidisedCommuteUsecaseLogic();\r\n      case CalculationRowType.TotalWorkerPayment:\r\n        return new TotalWorkerPaymentUsecaseLogic();\r\n      case CalculationRowType.Training:\r\n        return new TrainingUsecaseLogic();\r\n      case CalculationRowType.UnionPayment:\r\n        return new UnionPaymentUsecaseLogic();\r\n      case CalculationRowType.WorkingTimeCompensation:\r\n        return new WorkingTimeCompensationUsecaseLogic();\r\n      case CalculationRowType.PayStats:\r\n        return new PayStatsUsecaseLogic();\r\n      case CalculationRowType.TimeRatePay:\r\n        return new TimeRatePayUsecaseLogic();\r\n      case CalculationRowType.TaxAtSource:\r\n        return new TaxAtSourceUsecaseLogic();\r\n      case CalculationRowType.TaxWithholding:\r\n        return new TaxWithholdingUsecaseLogic();\r\n      case CalculationRowType.HolidayBonus:\r\n      case CalculationRowType.HolidaySalary:\r\n      case CalculationRowType.HolidayCompensation:\r\n        return new HolidaysUsecaseLogic();\r\n      default:\r\n        return new DefaultUsecaseLogic();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns the grouping filter for a row type.\r\n   * In the typical case each row in the group has the same rowType, type, kind, price, unit and message.\r\n   * Rows in a group can be merged together.\r\n   * @param type Row type for the grouping filter.\r\n   * @param arr Array of rows to group. This is required for some grouping filters especially when there is no reason for grouping but each object should be in its own group.\r\n   * @returns Filter for grouping the rows.\r\n   */\r\n  public static getGroupingFilter(type: CalculationRowType, arr: UserDefinedRow[]):  ((r: UserDefinedRow) => string){\r\n    switch (type) {\r\n      case CalculationRowType.AbsencePeriod:\r\n        return x => this.getRowKey(x,[x.data?.isPaid, x.data?.absenceCustomCode, x.data?.isHolidayAccrual], true) ;\r\n      case CalculationRowType.BicycleBenefit:\r\n        return x => this.getRowId(x, arr);\r\n      case CalculationRowType.Board:\r\n        return x => this.getRowKey(x);\r\n      case CalculationRowType.CarBenefit:\r\n        return x => this.getRowId(x, arr);\r\n      case CalculationRowType.DailyAllowance:\r\n        return x => this.getRowKey(x,[x.data?.country, x.data?.isHalf]) ;\r\n      case CalculationRowType.EmploymentTermination:\r\n        return x => this.getRowKey(x);\r\n      case CalculationRowType.Expenses:\r\n        return x => this.getRowId(x, arr);\r\n      case CalculationRowType.Foreclosure:\r\n        return x => this.getRowId(x, arr);\r\n      case CalculationRowType.HourlySalaryWithWorkingTimeCompensation:\r\n        return x => {\r\n          if ((x.data?.compensationRows?.length ?? 0) != 1 ) {\r\n            return this.getRowId(x, arr);\r\n          }\r\n          const compensationRow = { ...x.data?.compensationRows[0], count: undefined };\r\n          return this.getRowKey(x, [JSON.stringify(compensationRow), x.data?.pricing]);\r\n        };\r\n      case CalculationRowType.IrIncomeType:\r\n        return x => this.getRowKey(x, [x.data?.unit, JSON.stringify(x.data?.irData)]) ;\r\n      case CalculationRowType.MealBenefit:\r\n        return x => this.getRowId(x, arr);\r\n      case CalculationRowType.MilageOwnCar:\r\n        return x => this.getRowKey(x, [x.data?.vehicleType, x.data?.passengerCount, x.data?.additionsAllowed, x.data?.passengersAllowed, JSON.stringify(x.data?.additions)]);\r\n      case CalculationRowType.NonProfitOrg:\r\n        return x => this.getRowKey(x);\r\n      case CalculationRowType.OtherCompensation:\r\n        return x => this.getRowKey(x);\r\n      case CalculationRowType.PaidSickLeave:\r\n        return x => this.getRowKey(x);\r\n      case CalculationRowType.PrepaidExpenses:\r\n        return x => this.getRowId(x, arr);\r\n      case CalculationRowType.Remuneration:\r\n        return x => this.getRowKey(x);\r\n      case CalculationRowType.SubsidisedCommute:\r\n        return x => this.getRowId(x, arr);\r\n      case CalculationRowType.TotalWorkerPayment:\r\n        return x => this.getRowId(x, arr);\r\n      case CalculationRowType.Training:\r\n        return x => this.getRowKey(x);\r\n      case CalculationRowType.UnionPayment:\r\n        return x => this.getRowId(x, arr);\r\n      case CalculationRowType.WorkingTimeCompensation:\r\n        return x => this.getRowKey(x);\r\n      case CalculationRowType.PayStats:\r\n        return x => this.getRowKey(x, arr);\r\n      case CalculationRowType.TaxAtSource:\r\n        return x => this.getRowId(x, arr);\r\n      case CalculationRowType.TaxWithholding:\r\n        return x => this.getRowId(x, arr);\r\n      case CalculationRowType.HolidayBonus:\r\n      case CalculationRowType.HolidaySalary:\r\n      case CalculationRowType.HolidayCompensation:\r\n        return x => this.getRowKey(x);\r\n      default:\r\n        return x => this.getRowKey(x);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns usecase logic for a row and calculation.\r\n   * @param row Row that the logic operates on.\r\n   * @param calc Calculation that contains the row (used for date, potentially other things).\r\n   * @param doUpdate If true, will run first updateUsecase on the row.\r\n   */\r\n  public static getUsecaseLogicForCalc(row: UserDefinedRow, calc: Calculation, doUpdate = false): BaseUsecaseLogic {\r\n    row.rowType ??= CalculationRowType.Unknown;\r\n    const logic = RowsUsecaseLogic.getUsecaseLogic(row.rowType);\r\n    if (doUpdate) {\r\n      logic.updateUsecase(row, calc?.workflow?.salaryDate ?? \"today\", RowUsecaseCalcData.fromCalc(calc));\r\n    }\r\n    return logic;\r\n  }\r\n\r\n  /**\r\n   * Returns a validation message for a row or null if none is provided.\r\n   * Does the common validations (price and count) and then runs usecase specific validations.\r\n   * @param row The row that is validated.\r\n   */\r\n  public static getValidation(row: UserDefinedRow): UsecaseValidationMessage | undefined {\r\n    row.rowType ??= CalculationRowType.Unknown;\r\n    return RowsUsecaseLogic.getUsecaseLogic(row.rowType).getValidation(row);\r\n  }\r\n\r\n  /**\r\n   * Returns example data for a specific calculation row type and optional kind.\r\n   * Used to generate sample data for documentation and testing purposes.\r\n   * @param rowType The type of calculation row to get example data for\r\n   * @param kind Optional kind parameter to get specific variant of example data\r\n   * @returns Example data object with default values for the specified row type\r\n   */\r\n  public static getUsecaseExampleData(rowType: CalculationRowType, kind?: string): any {\r\n    const examples = {\r\n      [CalculationRowType.AbsencePeriod]: {\r\n        kind: \"undefined\",\r\n        isPaid: true,\r\n        isHolidayAccrual: true,\r\n      } as AbsencePeriodUsecase,\r\n      [CalculationRowType.BicycleBenefit]: {\r\n        kind: \"undefined\",\r\n        deduction: 100,\r\n        taxable: 100,\r\n        periodDivider: 1,\r\n      } as BicycleBenefitUsecase,\r\n      [CalculationRowType.Board]: {\r\n        kind: BoardKind.Undefined\r\n      } as BoardUsecase,\r\n      [CalculationRowType.CarBenefit]: {\r\n        ageGroup: AgeGroupCode.A,\r\n        deduction: 100,\r\n        kind: \"undefined\",\r\n        emissionsValue: 100,\r\n        isKilometersBased: true,\r\n        kilometers: 100,\r\n      } as CarBenefitUsecase,\r\n      [CalculationRowType.DailyAllowance]: {\r\n        kind: \"undefined\",\r\n        country: \"undefined\",\r\n        isHalf: false,\r\n      } as DailyAllowanceUsecase,\r\n      [CalculationRowType.EmploymentTermination]: {\r\n        kind: \"undefined\",\r\n      } as EmploymentTerminationUsecase,\r\n      [CalculationRowType.Expenses]: {\r\n        date: Dates.getToday(),\r\n        vatRate: ExpensesVatRate.Tax255,\r\n        total: 100,\r\n      } as ExpensesUsecase,\r\n      [CalculationRowType.Foreclosure]: {\r\n        kind: \"undefined\",\r\n        referenceNumber: \"RF341012\"\r\n      } as ForeclosureUsecase,\r\n      [CalculationRowType.HourlySalaryWithWorkingTimeCompensation]: {\r\n        compensationRows: [\r\n          {\r\n            count: null,\r\n            percent: 0.50\r\n          }\r\n        ],\r\n        kind: \"undefined\",\r\n        pricing: WorkingTimeCompensationPricing.Percent\r\n      } as HourlySalaryWithWorkingTimeCompensationUsecase,\r\n      [CalculationRowType.IrIncomeType]: {\r\n        irData: {},\r\n        kind: \"unknown\"\r\n      } as IrIncomeTypeUsecase,\r\n      [CalculationRowType.MealBenefit]: {\r\n        kind: \"undefined\",\r\n        deduction: 100,\r\n        taxable: 100,\r\n        periodDivider: 1,\r\n      } as MealBenefitUsecase,\r\n      [CalculationRowType.MilageOwnCar]: {\r\n        additionsAllowed: true,\r\n        passengersAllowed: true,\r\n        vehicleType: \"car\",\r\n        additions: null,\r\n      } as unknown as MilageOwnCarUsecase,\r\n      [CalculationRowType.NonProfitOrg]: {\r\n        kind: \"undefined\"\r\n      } as NonProfitOrgUsecase,\r\n      [CalculationRowType.OtherCompensation]: {\r\n        kind: \"undefined\",\r\n      } as OtherCompensationUsecase,\r\n      [CalculationRowType.PaidSickLeave]: {\r\n        kind: \"undefined\",\r\n      } as PaidSickLeaveUsecase,\r\n      [CalculationRowType.PrepaidExpenses]: {\r\n        date: Dates.getToday(),\r\n        vatRate: ExpensesVatRate.Tax255,\r\n        total: 100,\r\n      } as ExpensesUsecase,\r\n      [CalculationRowType.Remuneration]: {\r\n        kind: \"undefined\",\r\n      } as RemunerationUsecase,\r\n      [CalculationRowType.SubsidisedCommute]: {\r\n        kind: \"undefined\",\r\n        deduction: 100,\r\n        taxable: 100\r\n      } as SubsidisedCommuteUsecase,\r\n      [CalculationRowType.TotalWorkerPayment]: {\r\n        kind: \"undefined\",\r\n        rowType\r\n      } as TotalWorkerPaymentUsecase,\r\n      [CalculationRowType.Training]: {\r\n        kind: \"undefined\"\r\n      } as TrainingUsecase,\r\n      [CalculationRowType.UnionPayment]: {\r\n        kind: \"undefined\",\r\n        recipientFullName: \"John Doe\",\r\n        iban: \"FI1277124148815337\",\r\n        referenceNumber: \"88104193810287782386\"\r\n      } as UnionPaymentUsecase,\r\n      [CalculationRowType.WorkingTimeCompensation]: {\r\n        kind: \"undefined\",\r\n      } as WorkingTimeCompensationUsecase,\r\n      [CalculationRowType.TaxAtSource]: {\r\n        kind: \"undefined\",\r\n        taxValue: 100,\r\n        deductionPrice: 100,\r\n        deductionCount: 1,\r\n        deduction: 100,\r\n        totalTaxable: 100,\r\n      } as TaxAtSourceUsecase,\r\n      [CalculationRowType.TaxWithholding]: {\r\n        kind: \"undefined\",\r\n      } as TaxWithholdingUsecase\r\n    };\r\n    const data = examples[rowType];\r\n    if (kind) {\r\n      data.kind = kind;\r\n    }\r\n    const blankRow = RowsUsecaseLogic.getBlankUsecaseRow(rowType);\r\n    if(data) {\r\n      blankRow.data = data;\r\n    }\r\n    this.getUsecaseLogic(rowType)?.updateUsecase(blankRow, \"today\", undefined);\r\n    return blankRow.data;\r\n  }\r\n\r\n\r\n  private static getRowKey(row: UserDefinedRow, additionalFields: any[] = [], excludeMessage: boolean = false): string {\r\n    const items = [\"rowKey\",row.rowType,row.data?.kind,this.getHarmonizedType(row),row.unit,row.price];\r\n    items.push(...additionalFields);\r\n    if (!excludeMessage) {\r\n      items.push(row.message);\r\n    }\r\n    return items.join(\"-\");\r\n  }\r\n  private static getRowId(row: UserDefinedRow, arr: UserDefinedRow[]): string {\r\n    const items = [\"rowId\", arr.indexOf(row)];\r\n    return items.join(\"-\");\r\n  }\r\n\r\n  private static getHarmonizedType(row: UserDefinedRow): string {\r\n    if (row?.type) {\r\n      return row.type;\r\n    }\r\n    return `/builtIn/${row?.rowType}`;\r\n  }\r\n}\r\n","\r\nimport type { UserDefinedRow } from \"../../model\";\r\n\r\nimport type { RowTypeSelector } from \"../model\";\r\n\r\n/** Provides helper functions for querying Calculation rows in expressions. */\r\nexport class RowsHelper {\r\n\r\n  /**\r\n   * Gets all rows matching the row type selector.\r\n   *\r\n   * @param rowType - The row type selector:\r\n   *\r\n   * 1. A string or CalculationRowType matching to rowType property\r\n   * 2. A string matching to type property of a row (\"[builtIn/custom]/[rowType/name][?/kind]\").\r\n   * 3. A function that takes a row and returns a boolean.\r\n   *\r\n   * @returns All rows matching the row type selector.\r\n   */\r\n  public get(rowType: RowTypeSelector): UserDefinedRow[] {\r\n    if (typeof rowType === \"function\") {\r\n      return (calculation?.rows ?? []).filter(x => rowType(x));\r\n    }\r\n    return (calculation?.rows ?? []).filter(x => x.rowType == rowType || x.type == rowType);\r\n  }\r\n\r\n  /**\r\n   * Gets the first row matching the row type selector.\r\n   * @param rowType - The row type selector:\r\n   *\r\n   * 1. A string or CalculationRowType matching to rowType property\r\n   * 2. A string matching to type property of a row (\"[builtIn/custom]/[rowType/name][?/kind]\").\r\n   * 3. A function that takes a row and returns a boolean.\r\n   *\r\n   * @returns The first row matching the row type selector.\r\n   */\r\n  public first(rowType: RowTypeSelector): UserDefinedRow | undefined {\r\n    return this.get(rowType)[0];\r\n  }\r\n\r\n  /**\r\n   * Gets the last row matching the row type selector.\r\n   * @param rowType - The row type selector:\r\n   *\r\n   * 1. A string or CalculationRowType matching to rowType property\r\n   * 2. A string matching to type property of a row (\"[builtIn/custom]/[rowType/name][?/kind]\").\r\n   * 3. A function that takes a row and returns a boolean.\r\n   *\r\n   * @returns The last row matching the row type selector.\r\n   */\r\n  public last(rowType: RowTypeSelector): UserDefinedRow | undefined {\r\n    const rows = this.get(rowType);\r\n    return rows[rows.length - 1];\r\n  }\r\n\r\n  /**\r\n   * Gets the sum of the price * count for all rows matching the row type selector.\r\n   *\r\n   * @param rowType - The row type selector:\r\n   *\r\n   * 1. A string or CalculationRowType matching to rowType property\r\n   * 2. A string matching to type property of a row (\"[builtIn/custom]/[rowType/name][?/kind]\").\r\n   * 3. A function that takes a row and returns a boolean.\r\n   *\r\n   * @returns The sum of the price * count for all rows matching the row type selector.\r\n   */\r\n  public getSum(rowType: RowTypeSelector): number {\r\n    return this.get(rowType).reduce((sum, x) => (x.price ?? 0) * (x.count ?? 1) + sum, 0);\r\n  }\r\n\r\n  /**\r\n   * Gets the count of all rows matching the row type selector.\r\n   *\r\n   * @param rowType - The row type selector:\r\n   *\r\n   * 1. A string or CalculationRowType matching to rowType property\r\n   * 2. A string matching to type property of a row (\"[builtIn/custom]/[rowType/name][?/kind]\").\r\n   * 3. A function that takes a row and returns a boolean.\r\n   *\r\n   * @returns The count of all rows matching the row type selector.\r\n   */\r\n  public getCount(rowType: RowTypeSelector): number {\r\n    return this.get(rowType).reduce((sum, x) => (x.count ?? 1) + sum, 0);\r\n  }\r\n\r\n  /**\r\n   * Gets the average price of all rows matching the row type selector.\r\n   *\r\n   * @param rowType - The row type selector:\r\n   *\r\n   * 1. A string or CalculationRowType matching to rowType property\r\n   * 2. A string matching to type property of a row (\"[builtIn/custom]/[rowType/name][?/kind]\").\r\n   * 3. A function that takes a row and returns a boolean.\r\n   *\r\n   * @param precision - The precision of the average price. Defaults to 2 as in two decimals in currency .\r\n   *\r\n   * @returns The average price of all rows matching the row type selector.\r\n   */\r\n  public getAvgPrice(rowType: RowTypeSelector, precision: number = 2): number | undefined {\r\n    return this.round(\r\n      this.get(rowType).reduce((sum, x) => (x.price ?? 0) * (x.count ?? 1) + sum, 0)\r\n      / this.getCount(rowType), precision);\r\n  }\r\n\r\n  /**\r\n   * THIS IS A COPY OF THE FUNCTION IN @salaxy/core/ts/util/Numeric.ts\r\n   * Rounds a number to the specified number of decimal places.\r\n   * @param value - The number to round\r\n   * @param decimals - Number of decimal places (defaults to 2)\r\n   * @returns The rounded number or undefined if input is invalid\r\n   */\r\n  public round(value: number | undefined | null, decimals: number | undefined = 2): number | undefined {\r\n    if (value == undefined || decimals == undefined) { // '==' handles both null and undefined values, do not use here '==='\r\n      return undefined;\r\n    }\r\n    if (value < 0) {\r\n      // Round away from zero\r\n      return -1 * this.round(-1 * value, decimals)!;\r\n    }\r\n    let sValue = `${value}`;\r\n    if (sValue.indexOf(\"e\") >= 0) {\r\n      sValue = `${value.toFixed(15)}`;\r\n    }\r\n    return Number(Math.round(`${sValue}e${decimals}` as any).toString() + `e-${decimals}`);\r\n  }\r\n\r\n  /**\r\n   * Gets the minimum price of all rows matching the row type selector.\r\n   *\r\n   * @param rowType - The row type selector:\r\n   *\r\n   * 1. A string or CalculationRowType matching to rowType property\r\n   * 2. A string matching to type property of a row (\"[builtIn/custom]/[rowType/name][?/kind]\").\r\n   * 3. A function that takes a row and returns a boolean.\r\n   *\r\n   * @returns The minimum price of all rows matching the row type selector.\r\n   */\r\n  public getMinPrice(rowType: RowTypeSelector): number {\r\n    const rows = this.get(rowType);\r\n    if (rows.length == 0) {\r\n      return 0;\r\n    }\r\n    return rows.reduce((min, x) => Math.min(x.price ?? 0, min), rows[0]?.price ?? 0);\r\n  }\r\n\r\n  /**\r\n   * Gets the maximum price of all rows matching the row type selector.\r\n   *\r\n   * @param rowType - The row type selector:\r\n   *\r\n   * 1. A string or CalculationRowType matching to rowType property\r\n   * 2. A string matching to type property of a row (\"[builtIn/custom]/[rowType/name][?/kind]\").\r\n   * 3. A function that takes a row and returns a boolean.\r\n   *\r\n   * @returns The maximum price of all rows matching the row type selector.\r\n   */\r\n  public getMaxPrice(rowType: RowTypeSelector): number {\r\n    return this.get(rowType).reduce((max, x) => Math.max(x.price ?? 0, max), 0);\r\n  }\r\n\r\n}","import type { RowTypeDefinition } from \"../../model\";\r\nimport type { RowTypeSelector } from \"../model\";\r\n\r\n/**\r\n * Helper for easier creation of expressions for rows.\r\n */\r\nexport class PricesHelper {\r\n\r\n\r\n  /**\r\n   * Gets the price for a row type from the employment (first) or company settings (fallback).\r\n   * @param rowType Row type selector.\r\n   * @returns Price for the row type.\r\n   */\r\n  public get(rowType: RowTypeSelector): number {\r\n    return this.getEmployment(rowType) || this.getCompany(rowType);\r\n  }\r\n\r\n  /**\r\n   * Gets the price for a row type from the company settings.\r\n   * @param rowType Row type selector.\r\n   * @returns Price for the row type.\r\n   */\r\n  public getCompany(rowType: RowTypeSelector): number {\r\n    return this.getCompanyPriceRows(rowType)[0]?.price ?? 0;\r\n  }\r\n\r\n  /**\r\n   * Gets the price for a row type from the employment settings.\r\n   * @param rowType Row type selector.\r\n   * @returns Price for the row type.\r\n   */\r\n  public getEmployment(rowType: RowTypeSelector): number {\r\n    return this.getEmploymentPriceRows(rowType)[0]?.price ?? 0;\r\n  }\r\n\r\n  /**\r\n   * Gets the price rows for a row type from the employment settings.\r\n   * HACK: Need to go throug this logic before production.\r\n   * @param rowType Row type selector.\r\n   * @returns Price rows for the row type.\r\n   */\r\n  public getEmploymentPriceRows(rowType: RowTypeSelector): RowTypeDefinition[] {\r\n    if (!rowType) {\r\n      return [];\r\n    }\r\n    if (typeof rowType === \"function\") {\r\n      return (employment.work?.salaryDefaults ?? []).filter(x => rowType(x)) as RowTypeDefinition[];\r\n    }\r\n\r\n    // HACK: Need to go throug this logic before production. Think through how KIND should be prioritized here! ...also is type always avilable or do we need to look for rowType / data.kind?\r\n\r\n    if ((rowType as string).indexOf(\"/\") > 0) {\r\n      return (employment.work?.salaryDefaults ?? []).filter(x => x.type == rowType) as RowTypeDefinition[];\r\n    }\r\n    return (employment.work?.salaryDefaults ?? []).filter(x => x.rowType == rowType) as RowTypeDefinition[];\r\n  }\r\n\r\n  /**\r\n   * Gets the price rows for a row type from the company settings.\r\n   * HACK: Need to go throug this logic before production.\r\n   * @param rowType Row type selector.\r\n   * @returns Price rows for the row type.\r\n   */\r\n  public getCompanyPriceRows(rowType: RowTypeSelector): RowTypeDefinition[] {\r\n    if (!rowType) {\r\n      return [];\r\n    }\r\n    if (typeof rowType === \"function\") {\r\n      return (settings.calc?.salaryDefaults ?? []).filter(x => rowType(x)) as RowTypeDefinition[];\r\n    }\r\n\r\n    // HACK: Need to go throug this logic before production. Think through how KIND should be prioritized here! ...also is type always avilable or do we need to look for rowType / data.kind?\r\n\r\n    if ((rowType as string).indexOf(\"/\") > 0) {\r\n      return (settings.calc?.salaryDefaults ?? []).filter(x => x.type == rowType) as RowTypeDefinition[];\r\n    }\r\n    return (settings.calc?.salaryDefaults ?? []).filter(x => x.rowType == rowType) as RowTypeDefinition[];\r\n  }\r\n\r\n}\r\n","import { RowsHelper } from \"./RowsHelper\";\r\nimport { PricesHelper } from \"./PricesHelper\";\r\n\r\n/**\r\n * Exposed as global helper \"sxy\"\r\n */\r\nexport class HelpersRoot {\r\n\r\n  /** Helper for querying Calculation rows. */\r\n  public rows = new RowsHelper();\r\n\r\n  /** Helper for getting prices. */\r\n  public prices = new PricesHelper();\r\n}","import type { Calculation, Employment, UserDefinedRow } from \"../model\";\r\nimport type { CompanyAccountSettings } from \"../model\";\r\nimport { HelpersRoot } from \"./helpers/HelpersRoot\";\r\n\r\nexport * from \"./model\";\r\nexport * from \"./helpers\";\r\nexport type { Calculation, CompanyAccountSettings, Employment, UserDefinedRow } from \"../model\";\r\n\r\n/* eslint-disable no-var */\r\n\r\ndeclare global {\r\n\r\n  /** Current calculation in the scope of the expression. */\r\n  var calculation: Calculation;\r\n\r\n  /** Current row in the scope of the expression. */\r\n  var row: UserDefinedRow;\r\n\r\n  /**\r\n   * Current employment object related to the current expression.\r\n   * TODO: May the be undefined if the employment has not been set? Or is this an empty object then?\r\n   */\r\n  var employment: Employment;\r\n\r\n  /** The Company settings object for the Employer for which the expression is being evaluated. */\r\n  var settings: CompanyAccountSettings;\r\n\r\n  /** The global helper object for expressions. */\r\n  var sxy: HelpersRoot;\r\n}\r\n\r\nglobalThis.sxy = new HelpersRoot();\r\n","import { Ajax } from \"./api/infra\";\r\nimport { BootstrapStyle, UsecaseAction, UsecaseActionType, UserSession } from \"./model\";\r\n\r\nimport * as actionExecutorCore from \"./ActionExecutor_index\";\r\n\r\n/**\r\n * Helper class for executing usecase actions.\r\n */\r\nexport class ActionExecutor {\r\n\r\n  /** The action that is being executed. */\r\n  public action: UsecaseAction;\r\n\r\n  /** Result from the last execution of the current action. */\r\n  public result: any;\r\n\r\n  /** Status of the result */\r\n  public status: BootstrapStyle;\r\n\r\n  constructor(action: UsecaseAction) {\r\n    this.action = action;\r\n  }\r\n\r\n  /** Returns true if the execution is asynchronous. Only asynchronous calls may make http requests to external resources. */\r\n  public get isAsync(): boolean {\r\n    // Note: From browser, UsecaseActionType.ServerScript is async. When server environment is done, then this must be handled depending on the environment.\r\n    return this.action.actionType != UsecaseActionType.ClientScript;\r\n  }\r\n\r\n  /**\r\n   * Executes the current action.\r\n   * !! IMPORTANT !! As of now, the method only supports client-side browser execution. Server-side / Node execution is not yet supported.\r\n   * @param item The current item that the script processes.\r\n   * @param session The current user session.\r\n   * @param ajax Ajax object for HTTP calls.\r\n   */\r\n  public execute(item: any, session: UserSession, ajax: Ajax): Promise<boolean> {\r\n    switch (this.action.actionType) {\r\n      case UsecaseActionType.ClientScript:\r\n        return Promise.resolve(this.executeSync(item, session));\r\n      case UsecaseActionType.ClientScriptAsync:\r\n        return this.executeAsync(item, session, ajax);\r\n      default:\r\n        throw new Error(`Execution of action type ${this.action.actionType} is not yet supported.`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Executes the current action as synchronous client-side (browser) code.\r\n   * !! IMPORTANT !! As of now, the method only supports client-side browser execution. Server-side / Node execution is not yet supported.\r\n   * @param item The current item that the script processes.\r\n   * @param session The current user session.\r\n   */\r\n  public executeSync(item: any, session: UserSession): boolean {\r\n    if (!this.action.content) {\r\n      this.status = BootstrapStyle.Danger;\r\n      this.result = \"Ei skriptiä\\n\\nValitse skripti, jossa on ajettava koodia.\";\r\n      return false;\r\n    }\r\n    const code = this.action.content;\r\n    this.status = BootstrapStyle.Primary;\r\n    this.result = \"Skriptiä ajetaan...\";\r\n\r\n    const funcBuilder = (code) => {\r\n      return Function(`\"use strict\";return (function(item, session, core){` + code + `})`)()(\r\n        item, session, actionExecutorCore\r\n      );\r\n    };\r\n\r\n    try {\r\n      this.result = funcBuilder(code) || \"Skripti ajettu: Palautettu arvo on tyhjä.\";\r\n      this.status = BootstrapStyle.Success;\r\n      return true;\r\n    }\r\n    catch (ex) {\r\n      this.result = ex.toString();\r\n      this.status = BootstrapStyle.Danger;\r\n      console.error(ex);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Executes the current action as asynchronous client-side (browser) code.\r\n   * !! IMPORTANT !! As of now, the method only supports client-side browser execution. Server-side / Node execution is not yet supported.\r\n   * @param item The current item that the script processes.\r\n   * @param session The current user session.\r\n   * @param ajax Ajax object for HTTP calls.\r\n   */\r\n  public executeAsync(item: any, session: UserSession, ajax: Ajax): Promise<boolean> {\r\n    if (!this.action.content) {\r\n      this.status = BootstrapStyle.Danger;\r\n      this.result = \"Ei skriptiä\\n\\nValitse skripti, jossa on ajettava koodia.\";\r\n      return Promise.resolve(false);\r\n    }\r\n    const code = this.action.content;\r\n    this.status = BootstrapStyle.Primary;\r\n    this.result = \"Skriptiä ajetaan...\";\r\n\r\n    const funcBuilder = (code) => {\r\n      return Function(`\"use strict\";return (async function(item, session, ajax, core){` + code + `})`)()(\r\n        item, session, ajax, actionExecutorCore\r\n      );\r\n    };\r\n\r\n    try {\r\n      return (funcBuilder(code) as Promise<any>).then((result) => {\r\n        this.result = result || \"Skripti ajettu: Palautettu arvo on tyhjä.\";\r\n        this.status = BootstrapStyle.Success;\r\n        return true;\r\n      }).catch((error) => {\r\n        this.result = error?.toString() || \"Tuntematon virhe!\";\r\n        this.status = BootstrapStyle.Danger;\r\n        return false;\r\n      });\r\n    }\r\n    catch (ex) {\r\n      this.status = BootstrapStyle.Danger;\r\n      this.result = ex.toString();\r\n      return Promise.resolve(false);\r\n    }\r\n  }\r\n\r\n}"],"names":["FormHelpers","schema","propertyName","dataBindingPath","result","key","OAuthGrantType","OAuthResponseType","OAuthTokenType","OAuthError","OAuthSalaxyAuthorizeMode","AbcSection","AbsenceCauseCode","AccountantType","AccountingChannel","AccountingPeriodClosingOption","AccountingReportRowType","AccountingReportTableType","AccountingTargetStatus","AgeGroupCode","AgeRange","AllowanceCode","AnnualLeavePaymentKind","ApiCheckStatus","ApiImportStatus","ApiListItemType","ApiTestErrorType","ApiItemType","ApiValidationErrorType","AuthenticationMethod","AuthorizationStatus","AuthorizationType","AvatarPictureType","BankPaymentType","BenefitCode","BlobFileType","BlobRepository","BootstrapStyle","CalcGroup","CalcRowConfigNumberInput","CalcRowConfigTypeGroup","CalculationFlag","CalculationRefresh","CalculationResultRowType","CalculationRowCategory","CalculationRowSource","CalculationRowType","CalculationRowUnit","CalculationStatus","CalculationStatusCategory","CalendarActionType","CalendarEventStatus","CarBenefitCode","CompanyType","ContentPackageAction","ContractPartyType","ContactType","CostAccountingDimensionScope","Country","CustomerInvoiceStatus","CustomerWebApp","EarningsPaymentReportStatus","EmploymentRelationSalaryPaymentMethod","EmploymentRelationStatus","EmploymentRelationTaxcard","EmploymentRelationType","ExportMethod","DatasetStatus","DatasetType","DateOfBirthAccuracy","FrameworkAgreement","Gender","HelttiIndustry","HelttiProductPackage","IncomeEarnerType","IncomeLogDiff","InternationalIdentifier","InvoiceStatus","InvoiceType","Holiday","HolidayAccrualSource","HolidayBonusPaymentMethod","HolidayCode","HolidayGroup","HolidayPayCalculation","HouseholdYearProcessingStatus","HouseholdYearStatus","InsuranceCompany","InternationalSocialSecurityException","InternationalSocialSecurityType","InvoiceDateKind","InvoicePaymentType","IrFlags","IrInsuranceExceptions","IrRowSourceType","Language","LegalEntityType","LocalTapiolaInsuranceOrderAuthorizationType","LocalTapiolaInsuranceOrderStatus","LocalTapiolaInsuranceOrderType","RowMergeOption","MessageFrom","MessageThreadStatus","MessageType","OnboardingStatus","PayerSummaryReportStatus","PaymentChannel","PaymentMethod","PaymentStatus","PayrollStatus","PayStatsPeriodLength","PayStatsKind","PensionCalculation","PensionCompany","PensionRule","PeriodDateKind","PeriodType","PricingModel","ProductPackage","ProductListFilter","ReportCategory","ReportType","Role","SalaryDateKind","SalaryKind","SalaryType","LegacyServiceModel","SettingsStatus","SharingUriType","TaxcardApiIncomeType","TaxcardApprovalMethod","TaxcardCalcDiffCheck","TaxCardIncomeType","TaxcardState","TaxcardKind","TaxcardValidity","TaxAtSourceKind","TaxDeductionWorkCategories","TaxReportHandling","TaxWithholdingKind","TesSubtype","TestEnum","ThreadedMessageType","TimeRatePayKind","UnemploymentPayrollLimitStatus","UnionPaymentType","Unit","UsecaseActionType","UsecaseStatus","VarmaPensionOrderAction","VarmaPensionOrderYelPayer","VatRate","WageBasis","WebSiteUserRole","WorkerSalaryNotification","WorkerSalarySlipDeliveryMethod","WorkflowEventFeatures","YearEndAdminCheck","YearEndFeedbackCalculationType","YearEndUserFeedback","YtjCompanyType","CarBenefitKind","BicycleBenefitKind","UnionPaymentKind","NonProfitOrgKind","SubsidisedCommuteKind","MealBenefitKind","DailyAllowanceKind","BoardKind","RemunerationKind","OtherCompensationKind","PaidSickLeaveKind","WorkingTimeCompensationKind","WorkingTimeCompensationPricing","EmploymentTerminationKind","ForeclosureKind","TotalWorkerPaymentKind","TransactionCode","TrainingKind","Bank","AccountBank","AccountCurrency","ContactPersonResponsibilityCode","UserInfoApplicationRole","irepr","ActionCode","AddressType","DeliveryDataType","EmploymentCode","EmploymentEndingCode","EmploymentEndingType","EmploymentRegType","ExceptionCode","FaultyControl","IdType","IrScheduleAction","InsuranceCode","PaidAbsenceCauseCode","PayerSubOrgType","PayerType","PaymentType","PensionActCode","PensionProvIdCode","ProfessionType","RefPaymentType","ReimbPaymentType","RemunerationCode","ReportLogEventType","ResponsibilityCode","TermCode","UnpaidAbsenceCauseCode","WageUnitCode","EarningsPaymentReportExtensionsPaymentChannel","AvatarEntityType","WorkflowEventUi","Features","InternationalDataPostedCertCode","WorkForm","EarningsPaymentDataPaymentChannel","StatusResponseDeliveryDataStatus","irpsr","SummaryTransactionCode","AuthorizationPdfType","WebSiteAccountType","TimesheetInputModification","incomeTypeCodes","fi","ConfigLogic","config","Configs","g","Objects","obj","propertyPath","arr","value","lastKey","k","v","first","second","id","a","b","arrA","arrB","i","length","dateA","dateB","regexpA","regexpB","keys","TranslationsInstance","dict","defaultDictionary","interpolateParams","lang","templateOnly","template","keyPath","text","regex","_unused","varName","defaultValue","subKeys","subKey","msg","translations","newDictionary","terms","promises","values","url","response","objects","isObject","current","currentVal","resultVal","object","path","_Translations","localesFunc","Translations","IncomeTypesLogic","searchString","supportedTypes","x","language","generatedEnumData","generatedIrEnumData","_EnumerationsLogic","enumType","memberName","label","enumValue","typeMetaData","fullEnumType","enumNames","enumName","enumData","enumObj","ns","EnumerationsLogic","e","module","this","r","s","u","o","c","f","h","d","l","$","y","M","t","n","m","D","p","S","_","w","O","Y","yearlyHolidaysYears","dayjs","CustomParseFormat","AdvancedFormat","Duration","IsoWeek","IsSameOrBefore","IsSameOrAfter","UTC","QuarterOfYear","Dates","datelyObject","dayJs","year","month","day","timestamp","dateProspect","required","format","djs","allowInvalid","startDatelyObject","endDatelyObject","start","end","startDate","newDayJs","maxTurns","holidayGroup","endDate","formatFull","formatMonthDay","formatDay","sameYear","sameMonth","date","nullValue","dayOfMonth","days","count","step","amount","unit","type","dateRange","dr","fromDate","toDate","defaultDate","dateComponents","joinedDate","sdjs","edjs","forYear","yearlyHolidays","date1","date2","granularity","date1AsDayJs","date2AsDayJs","accountProductDefaults","vismaSignOriginalMethods","getYearlyChangingNumbersYears","refDate","yearlyTaxFreeYears","kevaEmploymentRegCodes","cbaCodes","Years","nullIfNotSupported","numbers","calcRowsMetadata","_CalculationRowCategories","CalculationRowCategories","ExternalDialogData","SystemRole","ExpensesVatRate","_CalcRowsLogic","settings","category","categories","types","cat","rowConfig","kind","allTypes","CalcRowsLogic","Numeric","numCandidate","addSuffix","nullChar","decimals","sValue","fractionDigits","suffix","asFloat","asFixed","input","nullText","zeroText","rounded","numberCandidate","JsonSchemaUtils","prefix","prop","data","typeResolve","val","pathArr","member","parentName","isRequired","memberOrRef","schemaDoc","schemaNames","doc","JsonSchemaCache","ajax","schemaName","propName","ref","arrayRef","orderedArray","orderResult","ordered","openApiUrl","cachedSchema","loadingDonePromise","resolve","reject","reason","throwIfNotFound","name","urlArr","Arrays","arrayCandidate","array","selector","prev","ix","stop","source","previous","self","index","direction","fromIndex","toIndex","element","version","VERSION","_hasBuffer","_TD","_TE","b64chs","b64tab","tab","b64re","_fromCC","_U8Afrom","it","_mkUriSafe","src","m0","_tidyB64","btoaPolyfill","bin","u32","c0","c1","c2","asc","pad","_btoa","_fromUint8Array","u8a","strs","fromUint8Array","urlsafe","cb_utob","cc","re_utob","utob","_encode","encode","encodeURI","re_btou","cb_btou","cccc","cp","offset","btou","atobPolyfill","u24","r1","r2","_atob","_toUint8Array","toUint8Array","_unURI","_decode","decode","isValid","_noEnum","extendString","_add","body","extendUint8Array","gBase64","Base64","Base64lib","Brand","color","variableName","style","hexValue","hexA","BrowserUtil","Cookies","cookieParts","item","cookiePart","cname","expirationDays","expires","DateTimes","time","minutes","duration","postfix","Iban","trimmed","CODE_LENGTHS","iban","code","digits","letter","bank","account","bankAccount","ibanValue","remainder","ibanChecksum","checksum","fragment","MemoryStorage","storage","OData","baseUrl","query","fullPath","options","notify","items","maxLength","next","odataResult","odataMethod","nextPage","v4Data","searchValue","isSimpleSyntax","substring","queryOptions","queries","search","SimpleStorage","Texts","html","entityMap","illegal","control","reserved","windowsReserved","windowsTrailing","Token","token","payload","tokenParts","Validation","error","uiClass","groups","centenry","person","dd","mm","yyyy","birth","companyIdCandidate","allowStarAsChecksum","multipliers","total","num","modulo","isRf","referenceNumber","referenceNumberWithoutCheck","referenceCheck","rearrangedValue","calculatedChecksum","calculatedChecksumString","reverse","sum","regExp","company","contract","check","Promises","promiseTasks","promiseTask","CrudApiBase","itemToSave","wfEvent","wfIdOrType","wfId","versionId","prmsArr","prms","_OAuth2","OAuth2","SingleItemApiBase","AjaxFetch","method","init","headers","content","_Absences","employmentId","workerId","employmentIds","Absences","_AccountingTargets","AccountingTargets","_AuthorizedAccounts","_query","_id","AuthorizedAccounts","CalculatorLogic","calc","defaultType","allowedTypes","salary","rowType","newRow","currentAvatar","row","workerNetPayment","totals","_Calculator","price","message","setHouseHoldDeductionTo","holidayYear","absences","paymentType","unionPaymentPercent","rowIndex","calculations","tableType","Calculator","_Calculations","ids","save","updateRows","employerId","to","calculation","Calculations","_CalendarEvents","event","CalendarEvents","_Certificates","certificate","Certificates","_Credentials","credentialId","Credentials","_CustomerInvoices","CustomerInvoices","_Datasets","Datasets","Culture","DataMapperMember","DataMapperSelector","target","func","sourceRootSchema","targetRootSchema","flattenSourceSchema","child","DataMapper","uri","title","sourceValue","sourceRow","flattener","flattenRow","targetRow","map","schemaCache","newMember","srcMember","flattenSelector","flattenKey","_a","paths","isSourceAList","targetSchemaName","originalChildren","orig","inv","DataMappersLogic","mapper","sourceFilter","targetFilter","rowSelector","FileDelimiter","TableFormat","FileLogic","fileName","csv","fileDelimiter","Tables","rows","localeId","rowData","header","separator","toRow","addQuotes","toField","headerRow","dataRows","fromRow","rawData","fromField","rowObject","typedRowData","dateFormat","sNumber","FileParser","hasLocales","locale","parsers","lineFeedIx","firstRow","dataWithoutHeader","parser","decimalSeparator","PayrollLogic","_Payrolls","payrollToValidate","payrollId","payroll","calculationIds","Payrolls","ValidationHelper","validation","field","root","newValidations","_HrSuuntiImportLogic","salaryBases","employments","payrolls","groupByEmpId","group","empId","empIds","missingIds","counter","emp","fixedRows","output","rowTypes","rowsByEmplyee","res","mapperErrors","match","ex","rowTypeMap","monthlySalary","hourlySalary","hours","salaryType","priceCandidates","inputRow","HrSuuntiImportLogic","ImportBatch","api","mainMapperSourceSchema","parserSourceSchema","targetKeys","status","metaObject","tryValidate","all","apiResult","validationResult","tryImport","tryResult","objectIndex","ExportLogic","exportApi","maxCount","getRows","WorktimeImportKnownUsecase","WorktimeImportPreviewMetadata","WorktimeImportStatus","WorktimeImportAccrualUnit","WorktimeImportAccrualKind","WorktimeImportAccrualType","StagingApiConnector","serviceUrl","getBlank","savedItem","worktimeImportData","WorktimeApiConnector","setCurrent","AccountingTargetLogic","accountingData","schemeId","isFinnish","dimensionHeaders","addToGlobal","entryData","costCenter","projectNumber","keyEntriesRows","rowDataEntriesDimensions","dimensionHeader","vatPercent","keyEntryRows","saldo","isExtended","accountKeys","accountKeyNames","entryKeys","entryKeyNames","dimensionKeys","dimensionKeyNames","accountKeyName","entryKeyName","dimensionKeyName","accountKey","entryKey","dimensionKey","entryDate","ledgerAccount","ledgerEntry","vat","_isFinnish","textRows","getVatOsId","vilpeProjectNumber","vilpeProfitCenter","padChar","txt","ApiLogic","apiListItem","CalculationResultLogic","calculationResults","original","modified","subtract","ContractPartyLogic","worker","EmploymentLogic","pensionCalculation","descr","employment","today","employmentRelationType","contracts","model","incomeEarnerTypes","work","defaultRow","socialSecurity","pensionCompany","insuranceCompany","socSecExceptions","insuranceContractNumbers","pensionCompanies","pensionContractNumbers","insuranceCompanies","showSocialSecurity","pensionCalculationOptions","showPension","showPensionCompanySelection","showInsurance","showInsuranceCompanySelection","insertNotSelected","validContracts","companies","forDate","createIfNotExists","useRealPersonaIdRange","contact","birthYear","birthDate","personNumber","checksumLetters","sDate","idChecksum","ssn","regCode","HolidaysLogic","holidays","absenseCauseCode","updateIsHolidayAccrual","period","list","startSaldo","todayYear","todayMonthIndex","currentMonthIx","_InvoicesLogic","paymentObject","channel","picData","InvoicesLogic","_Occupations","occupations","occupationsData","idListOrKeyword","splittedIdList","hasNumber","Occupations","OnboardingLogic","cdn","imageOverrides","methods","PaymentLogic","ReportsLogic","id2","reportType","calcId","inline","reportTypes","RoleLogic","session","appStatus","role","andRoles","orRoles","isNegative","primaryRole","currentAccount","personAccount","configLogic","checkRole","roles","_SalaryDateLogic","salaryDate","paidAt","isRequestedSalaryDateSet","zeroPayment","checkFirstWorkDay","currentDate","calculatedSalaryDate","_iban","requiredTime","latePaymentDelay","localPaidAtDayDatelyObject","paidAtDayDatelyObject","paidAtWorkday","SalaryDateLogic","SettingsLogic","calculateNumber","StorageLogic","uriString","parsed","forceParse","localPath","SxyFormsSettings","coreValidator","TaxCard2019Logic","personalId","newCard","$ui","tax","card","taxcard","limits","taxCardIncomeLimit","totalIncome","taxPercent","taxPercent2","incomeSum","incomes","validity","colorPrimary","colorDanger","colorWarning","tooltipItem","netSalary","label1Suffix","colors","getColorPalette","_TypedocLogic","docs","typeName","allEnums","interfaces","nextTypeName","nextType","innerType","arg","typeLinker","typeLink","refHtml","typedoc","lib","typedocEnum","enumResult","td","typedocClass","classResult","tdMember","signature","paramSrc","paramResult","typedocSource","tdSource","examples","splitSrc","TypedocLogic","_BicHelper","id1","BicHelper","UserDefinedRowLogic","_WorkflowLogic","messageString","uiStartX","uiEndX","ui","rest","messageEndX","idx","assignedTo","aIdx","tIdx","pvm","formattedDateTime","fullMessage","WorkflowLogic","_Employments","activeDate","owner","Employments","_Files","Files","_HolidayYears","holidaySpec","HolidayYears","_Invoices","_item","calcIds","calcs","itemsCount","payerIbanNumber","bankPartyId","idsPart","idOrInvoice","idsOrInvoices","receiver","intermediator","Invoices","_IrEarningsPayments","earningsPayment","aso","IrEarningsPayments","_IrPayerSummaries","IrPayerSummaries","_MessageThreads","readBy","subject","MessageThreads","_PaymentChannelApi","paymentChannel","invoice","dateKind","idOrIdsOrInvoice","getPayerIbanNumber","getBankPartyId","isSensitive","getIsSensitive","getTarget","idOrIds","_ids","PaymentChannelApi","_Payrolls4","calcsOrIds","applyWorktime","applyEmploymentDefaultRows","removeAllRows","calculationId","excludePeriodicInvoices","Payrolls4","_Taxcards","firstSalaryDate","taxcardIds","forceUpdate","income","taxCard","paymentDate","Taxcards","_Workers","Workers","_ServiceModels","ServiceModels","_Usecases","Usecases","_HouseholdYears","processingStatus","HouseholdYears","_Records","entityType","entityId","Records","_BusinessTemplates","BusinessTemplates","_ReferenceObjects","ReferenceObjects","_Accounts","Accounts","_Onboardings","accountId","onboarding","Onboardings","_Reports","wait","periodType","periodDateKind","minStatus","ruleSet","createdFrom","option","fromHolidayYear","workers","employerLang","reportLang","makeHttpRequest","commonParams","Reports","_Session","redirectUrl","partnerSite","mode","urlPostfix","partner","Session","_Test","seconds","testValues","errorType","testData","Test","Client","ajaxImpl","_AccountSettings","transferId","transferPassword","AccountSettings","_BeneficialOwnersApi","BeneficialOwnersApi","_HelpCenter","HelpCenter","_Overview","Overview","_PartnerServices","order","PartnerServices","_ProApi","serviceModelId","ProApi","_Imports","invoices","officialId","Imports","CellRenderingLogic","schemaProp","avatar","fontSize","isImage","isPersonIcon","initials","SitemapVisibility","householdUsecaseTree","_HouseholdUsecasesLogic","usecaseId","usecase","tree","mainRow","numberOfDays","totalBaseSalary","milage","toolCompensation","percent","nearestXmsEve","useCaseOrGroup","km","HouseholdUsecasesLogic","BaseUsecaseLogic","_row","_date","_calcData","AbsencePeriodUsecaseLogic","isKindChange","BicycleBenefitUsecaseLogic","limit","deduction","calcTaxable","calcTaxfree","BoardUsecaseLogic","CarBenefitUsecaseLogic","DailyAllowanceUsecaseLogic","countryPrice","yearlyNumbers","DefaultUsecaseLogic","EmploymentTerminationUsecaseLogic","ExpensesUsecaseLogic","vatRate","entries","totalRow","gross","net","taxRateMapper","ForeclosureUsecaseLogic","calcData","salaryAfterTax","otherIncome","leftToDebtor","foreclosure","protectedPortion","totalSalaryAfterTax","HolidaysUsecaseLogic","HourlySalaryWithWorkingTimeCompensationUsecaseLogic","cr","msgs","rowMsg","IrIncomeTypeUsecaseLogic","codeData","carBenefit","transactionCode","MealBenefitUsecaseLogic","sideCosts","MilageOwnCarUsecaseLogic","toEur","NonProfitOrgUsecaseLogic","OtherCompensationUsecaseLogic","PaidSickLeaveUsecaseLogic","RemunerationUsecaseLogic","SubsidisedCommuteUsecaseLogic","TaxAtSourceUsecaseLogic","TaxWithholdingUsecaseLogic","TotalWorkerPaymentUsecaseLogic","TrainingUsecaseLogic","UnionPaymentUsecaseLogic","raksaIban","raksaName","totalTaxable","payment","referenceBase","numberWithoutTheCheckNumber","WorkingTimeCompensationUsecaseLogic","PayStatsUsecaseLogic","TimeRatePayUsecaseLogic","RowUsecaseCalcData","RowsUsecaseLogic","compensationRow","doUpdate","logic","blankRow","additionalFields","excludeMessage","RowsHelper","precision","min","max","PricesHelper","HelpersRoot","ActionExecutor","action","funcBuilder","actionExecutorCore"],"mappings":"+PAQO,MAAMA,EAAY,CASvB,OAAc,iBAAiBC,EAAgCC,EAAkCC,EAAkB,OAAuB,CACxID,EAAeA,GAAgB,GAC/B,MAAME,EAAwB,CAC5B,KAAMF,EACN,KAAM,KACN,KAAMD,EAAO,KACb,OAAQA,EAAO,OACf,OAAQ,EAAA,EAGV,OADAG,EAAO,KAAOA,EAAO,KAAQD,EAAmBA,EAAkB,IAAMC,EAAO,KAAQA,EAAO,KAAQD,EAC9FC,EAAO,KAAA,CACb,IAAK,SACL,IAAK,UACL,IAAK,UACL,IAAK,SACL,IAAK,QACH,MACF,IAAK,SACHA,EAAO,QAAUH,EAAO,MAAM,QAAU,GAAK,EAC7C,MACF,QACE,OAAAG,EAAO,KAAO,QACdA,EAAO,QAAU,wBAAwBA,EAAO,IAAI,cAAcA,EAAO,MAAM,SAASF,GAAgB,kBAAkB,KACnHE,CAAA,CAEX,OAAOA,CACT,CASA,OAAc,mBAAmBH,EAAgCE,EAAkB,OAAqC,CACtH,GAAIF,EAAO,OAAS,SAClB,OAAO,OAAO,KAAKA,EAAO,YAAc,CAAA,CAAE,EAAE,IAAKI,GAAQ,KAAK,iBAAiBJ,EAAQI,EAAKF,CAAe,CAAC,CAIhH,CASA,OAAc,gBAAgBF,EAAgCC,EAAkCC,EAAwC,CACtI,OAAO,KAAK,iBAAiBF,EAAQC,EAAcC,CAAe,CACpE,CAQA,OAAc,kBAAkBF,EAAgCE,EAAsD,CACpH,GAAIF,EAAO,OAAS,QAClB,OAAOD,GAAY,mBAAmBC,EAAO,MAAiCE,CAAe,GACxF,CAACH,GAAY,gBAAgBC,EAAO,MAAiC,OAAWE,CAAe,CAAC,CAIzG,CACF,CC1BO,IAAKG,IAAAA,IACRA,EAAA,UAAiB,YACjBA,EAAA,mBAA0B,qBAC1BA,EAAA,SAAgB,WAChBA,EAAA,mBAA0B,qBAC1BA,EAAA,cAAqB,gBACrBA,EAAA,UAAiB,YANTA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,UAAiB,YACjBA,EAAA,KAAY,OACZA,EAAA,MAAa,QAHLA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,UAAiB,YACjBA,EAAA,OAAc,SACdA,EAAA,IAAW,MAHHA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,UAAiB,YACjBA,EAAA,gBAAuB,kBACvBA,EAAA,oBAA2B,sBAC3BA,EAAA,cAAqB,gBACrBA,EAAA,0BAAiC,4BACjCA,EAAA,cAAqB,gBACrBA,EAAA,aAAoB,eACpBA,EAAA,wBAA+B,0BARvBA,IAAAA,IAAA,CAAA,CAAA,EAYAC,IAAAA,IACRA,EAAA,UAAiB,YACjBA,EAAA,QAAe,UACfA,EAAA,QAAe,UAHPA,IAAAA,IAAA,CAAA,CAAA,ECq6RAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,WAAa,aACbA,EAAA,UAAY,YACZA,EAAA,OAAS,SACTA,EAAA,SAAW,WACXA,EAAA,gBAAkB,kBAClBA,EAAA,qBAAuB,uBACvBA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,eAAiB,iBACjBA,EAAA,kBAAoB,oBACpBA,EAAA,OAAS,SACTA,EAAA,SAAW,WACXA,EAAA,aAAe,eACfA,EAAA,YAAc,cACdA,EAAA,cAAgB,gBAChBA,EAAA,uBAAyB,yBACzBA,EAAA,kBAAoB,oBACpBA,EAAA,wBAA0B,0BApBlBA,IAAAA,IAAA,CAAA,CAAA,EAwBAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,YAAc,cACdA,EAAA,eAAiB,iBACjBA,EAAA,QAAU,UACVA,EAAA,kBAAoB,oBACpBA,EAAA,cAAgB,gBAChBA,EAAA,sBAAwB,wBACxBA,EAAA,eAAiB,iBACjBA,EAAA,aAAe,eACfA,EAAA,uBAAyB,yBACzBA,EAAA,SAAW,WACXA,EAAA,oBAAsB,sBACtBA,EAAA,WAAa,aACbA,EAAA,iBAAmB,mBACnBA,EAAA,4BAA8B,8BAC9BA,EAAA,eAAiB,iBACjBA,EAAA,0BAA4B,4BAC5BA,EAAA,gBAAkB,kBAClBA,EAAA,OAAS,SACTA,EAAA,eAAiB,iBACjBA,EAAA,eAAiB,iBACjBA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,YAAc,cACdA,EAAA,mCAAqC,qCACrCA,EAAA,MAAQ,QA1BAA,IAAAA,IAAA,CAAA,CAAA,EA8BAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,uBAAyB,yBACzBA,EAAA,uBAAyB,yBACzBA,EAAA,sBAAwB,wBACxBA,EAAA,eAAiB,iBACjBA,EAAA,KAAO,OANCA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,WAAa,aACbA,EAAA,cAAgB,gBAChBA,EAAA,aAAe,eAJPA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,WAAa,aACbA,EAAA,iBAAmB,mBACnBA,EAAA,8BAAgC,gCAChCA,EAAA,UAAY,YACZA,EAAA,uBAAyB,yBACzBA,EAAA,6BAA+B,+BAC/BA,EAAA,0CAA4C,4CARpCA,IAAAA,IAAA,CAAA,CAAA,EAYAC,IAAAA,IACRA,EAAA,MAAQ,QACRA,EAAA,OAAS,SACTA,EAAA,MAAQ,QACRA,EAAA,YAAc,cACdA,EAAA,WAAa,aACbA,EAAA,SAAW,WANHA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,OAAS,SAHDA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,YAAc,cACdA,EAAA,cAAgB,gBAChBA,EAAA,aAAe,eAJPA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,EAAI,IAJIA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,aAAe,eATPA,IAAAA,IAAA,CAAA,CAAA,EAaAC,IAAAA,IACRA,EAAA,cAAgB,gBAChBA,EAAA,sBAAwB,wBACxBA,EAAA,mBAAqB,qBACrBA,EAAA,4BAA8B,8BAC9BA,EAAA,8BAAgC,gCALxBA,IAAAA,IAAA,CAAA,CAAA,EASAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,aAAe,eACfA,EAAA,mBAAqB,qBACrBA,EAAA,YAAc,cACdA,EAAA,SAAW,WACXA,EAAA,UAAY,YAPJA,IAAAA,IAAA,CAAA,CAAA,EAWAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,MAAQ,QAJAA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,MAAQ,QAJAA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,YAAc,cACdA,EAAA,eAAiB,iBACjBA,EAAA,cAAgB,gBAChBA,EAAA,cAAgB,gBAChBA,EAAA,YAAc,cACdA,EAAA,sBAAwB,wBACxBA,EAAA,WAAa,aACbA,EAAA,QAAU,UACVA,EAAA,YAAc,cACdA,EAAA,gBAAkB,kBAClBA,EAAA,eAAiB,iBACjBA,EAAA,QAAU,UACVA,EAAA,gBAAkB,kBAClBA,EAAA,WAAa,aACbA,EAAA,eAAiB,iBACjBA,EAAA,YAAc,cACdA,EAAA,QAAU,UACVA,EAAA,eAAiB,iBACjBA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,SAAW,WACXA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBAChBA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,cAAgB,gBAChBA,EAAA,aAAe,eACfA,EAAA,gBAAkB,kBAClBA,EAAA,kBAAoB,oBACpBA,EAAA,iBAAmB,mBACnBA,EAAA,WAAa,aAjCLA,IAAAA,IAAA,CAAA,CAAA,EAqCAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,aAAe,eAFPA,IAAAA,IAAA,CAAA,CAAA,EAMAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,YAAc,cACdA,EAAA,gBAAkB,kBAClBA,EAAA,QAAU,UACVA,EAAA,eAAiB,iBACjBA,EAAA,QAAU,UACVA,EAAA,sBAAwB,wBACxBA,EAAA,mBAAqB,qBACrBA,EAAA,WAAa,aACbA,EAAA,cAAgB,gBAChBA,EAAA,cAAgB,gBAChBA,EAAA,UAAY,YAZJA,IAAAA,IAAA,CAAA,CAAA,EAgBAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,QAAU,UAJFA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,cAAgB,gBAChBA,EAAA,SAAW,WACXA,EAAA,OAAS,SACTA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,cAAgB,gBAChBA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,KAAO,OACPA,EAAA,SAAW,WACXA,EAAA,eAAiB,iBACjBA,EAAA,YAAc,cACdA,EAAA,kBAAoB,oBAdZA,IAAAA,IAAA,CAAA,CAAA,EAkBAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,GAAK,KACLA,EAAA,aAAe,eACfA,EAAA,kBAAoB,oBACpBA,EAAA,kBAAoB,oBACpBA,EAAA,aAAe,eANPA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,KAAO,OACPA,EAAA,sBAAwB,wBACxBA,EAAA,eAAiB,iBACjBA,EAAA,gBAAkB,kBAClBA,EAAA,gBAAkB,kBAClBA,EAAA,OAAS,SACTA,EAAA,UAAY,YAPJA,IAAAA,IAAA,CAAA,CAAA,EAWAC,IAAAA,IACRA,EAAA,KAAO,OACPA,EAAA,SAAW,WACXA,EAAA,SAAW,WAHHA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,cAAgB,gBAChBA,EAAA,gBAAkB,kBAClBA,EAAA,mBAAqB,qBACrBA,EAAA,cAAgB,gBAChBA,EAAA,qBAAuB,uBACvBA,EAAA,oBAAsB,sBACtBA,EAAA,sBAAwB,wBACxBA,EAAA,sBAAwB,wBACxBA,EAAA,UAAY,YACZA,EAAA,cAAgB,gBAChBA,EAAA,mBAAqB,qBACrBA,EAAA,oBAAsB,sBACtBA,EAAA,WAAa,aACbA,EAAA,IAAM,MACNA,EAAA,QAAU,UACVA,EAAA,aAAe,eACfA,EAAA,SAAW,WACXA,EAAA,aAAe,eACfA,EAAA,qBAAuB,uBACvBA,EAAA,KAAO,OACPA,EAAA,kBAAoB,oBACpBA,EAAA,cAAgB,gBAChBA,EAAA,iBAAmB,mBACnBA,EAAA,gBAAkB,kBAClBA,EAAA,YAAc,cACdA,EAAA,qBAAuB,uBACvBA,EAAA,kBAAoB,oBACpBA,EAAA,cAAgB,gBAChBA,EAAA,sBAAwB,wBACxBA,EAAA,kBAAoB,oBACpBA,EAAA,MAAQ,QACRA,EAAA,WAAa,aACbA,EAAA,YAAc,cACdA,EAAA,eAAiB,iBACjBA,EAAA,aAAe,eArCPA,IAAAA,IAAA,CAAA,CAAA,EAyCAC,IAAAA,IACRA,EAAA,qBAAuB,uBACvBA,EAAA,iBAAmB,mBACnBA,EAAA,YAAc,cACdA,EAAA,cAAgB,gBAJRA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,iBAAmB,mBACnBA,EAAA,OAAS,SACTA,EAAA,QAAU,UACVA,EAAA,gBAAkB,kBAClBA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,OAAS,SACTA,EAAA,cAAgB,gBAChBA,EAAA,aAAe,eACfA,EAAA,WAAa,aAfLA,IAAAA,IAAA,CAAA,CAAA,EAmBAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,eAAiB,iBACjBA,EAAA,YAAc,cACdA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,IAAM,MACNA,EAAA,WAAa,aACbA,EAAA,kBAAoB,oBATZA,IAAAA,IAAA,CAAA,CAAA,EAaAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,KAAO,OACPA,EAAA,QAAU,UACVA,EAAA,OAAS,SANDA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,WAAa,aACbA,EAAA,gBAAkB,kBAClBA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,eAAiB,iBACjBA,EAAA,OAAS,SACTA,EAAA,SAAW,WATHA,IAAAA,IAAA,CAAA,CAAA,EAaAC,GAAAA,IACRA,EAAA,OAAS,SACTA,EAAA,OAAS,SACTA,EAAA,SAAW,WAHHA,IAAAA,GAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,OAAS,SAFDA,IAAAA,IAAA,CAAA,CAAA,EAMAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,iBAAmB,mBACnBA,EAAA,kBAAoB,oBACpBA,EAAA,sBAAwB,wBACxBA,EAAA,gBAAkB,kBAClBA,EAAA,oBAAsB,sBACtBA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,aAAe,eACfA,EAAA,YAAc,cACdA,EAAA,UAAY,YACZA,EAAA,YAAc,cACdA,EAAA,oBAAsB,sBAbdA,IAAAA,IAAA,CAAA,CAAA,EAiBAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,QAAU,UACVA,EAAA,WAAa,aANLA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,cAAgB,gBAChBA,EAAA,cAAgB,gBAChBA,EAAA,4BAA8B,8BAC9BA,EAAA,gCAAkC,kCAClCA,EAAA,mCAAqC,qCACrCA,EAAA,aAAe,eACfA,EAAA,oBAAsB,sBACtBA,EAAA,qBAAuB,uBACvBA,EAAA,yBAA2B,2BAC3BA,EAAA,mBAAqB,qBACrBA,EAAA,kBAAoB,oBACpBA,EAAA,yBAA2B,2BAC3BA,EAAA,0BAA4B,4BAC5BA,EAAA,8BAAgC,gCAChCA,EAAA,wBAA0B,0BAC1BA,EAAA,cAAgB,gBAChBA,EAAA,YAAc,cACdA,EAAA,SAAW,WACXA,EAAA,gBAAkB,kBAClBA,EAAA,aAAe,eACfA,EAAA,mBAAqB,qBACrBA,EAAA,aAAe,eAvBPA,IAAAA,IAAA,CAAA,CAAA,EA2BAC,GAAAA,IACRA,EAAA,OAAS,SACTA,EAAA,gBAAkB,kBAClBA,EAAA,WAAa,aACbA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,MAAQ,QARAA,IAAAA,GAAA,CAAA,CAAA,EAYAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,UAAY,YACZA,EAAA,eAAiB,iBACjBA,EAAA,gBAAkB,kBAClBA,EAAA,aAAe,eACfA,EAAA,eAAiB,iBACjBA,EAAA,YAAc,cACdA,EAAA,cAAgB,gBATRA,IAAAA,IAAA,CAAA,CAAA,EAaAC,GAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBAChBA,EAAA,mBAAqB,qBACrBA,EAAA,qBAAuB,uBACvBA,EAAA,YAAc,cACdA,EAAA,aAAe,eACfA,EAAA,SAAW,WACXA,EAAA,sBAAwB,wBACxBA,EAAA,gBAAkB,kBAClBA,EAAA,iBAAmB,mBACnBA,EAAA,iBAAmB,mBACnBA,EAAA,WAAa,aACbA,EAAA,eAAiB,iBACjBA,EAAA,oBAAsB,sBACtBA,EAAA,0BAA4B,4BAC5BA,EAAA,2BAA6B,6BAC7BA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,sBAAwB,wBACxBA,EAAA,oBAAsB,sBACtBA,EAAA,YAAc,cACdA,EAAA,aAAe,eACfA,EAAA,WAAa,aACbA,EAAA,eAAiB,iBACjBA,EAAA,aAAe,eACfA,EAAA,oBAAsB,sBACtBA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBAChBA,EAAA,eAAiB,iBACjBA,EAAA,mBAAqB,qBACrBA,EAAA,iBAAmB,mBACnBA,EAAA,aAAe,eACfA,EAAA,iBAAmB,mBACnBA,EAAA,SAAW,WACXA,EAAA,YAAc,cACdA,EAAA,YAAc,cACdA,EAAA,aAAe,eACfA,EAAA,YAAc,cACdA,EAAA,QAAU,UACVA,EAAA,sBAAwB,wBACxBA,EAAA,gBAAkB,kBAClBA,EAAA,gBAAkB,kBAClBA,EAAA,sCAAwC,wCACxCA,EAAA,iBAAmB,mBACnBA,EAAA,kBAAoB,oBACpBA,EAAA,aAAe,eACfA,EAAA,kBAAoB,oBACpBA,EAAA,aAAe,eACfA,EAAA,MAAQ,QACRA,EAAA,aAAe,eACfA,EAAA,kBAAoB,oBACpBA,EAAA,wBAA0B,0BAC1BA,EAAA,sBAAwB,wBACxBA,EAAA,wCAA0C,0CAC1CA,EAAA,cAAgB,gBAChBA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,YAAc,cACdA,EAAA,eAAiB,iBACjBA,EAAA,cAAgB,gBAChBA,EAAA,cAAgB,gBAChBA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,OAAS,SAlEDA,IAAAA,GAAA,CAAA,CAAA,EAsEAC,GAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,QAAU,UACVA,EAAA,KAAO,OACPA,EAAA,WAAa,aACbA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QACRA,EAAA,OAAS,SARDA,IAAAA,GAAA,CAAA,CAAA,EAYAC,IAAAA,IACRA,EAAA,MAAQ,QACRA,EAAA,eAAiB,iBACjBA,EAAA,iBAAmB,mBACnBA,EAAA,gBAAkB,kBAClBA,EAAA,aAAe,eACfA,EAAA,kBAAoB,oBACpBA,EAAA,gBAAkB,kBAClBA,EAAA,sBAAwB,wBACxBA,EAAA,sBAAwB,wBACxBA,EAAA,gBAAkB,kBAClBA,EAAA,kBAAoB,oBACpBA,EAAA,gBAAkB,kBAClBA,EAAA,aAAe,eACfA,EAAA,OAAS,SACTA,EAAA,SAAW,WACXA,EAAA,cAAgB,gBAChBA,EAAA,eAAiB,iBACjBA,EAAA,eAAiB,iBACjBA,EAAA,QAAU,UACVA,EAAA,SAAW,WApBHA,IAAAA,IAAA,CAAA,CAAA,EAwBAC,IAAAA,IACRA,EAAA,IAAM,MACNA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,SAAW,WACXA,EAAA,MAAQ,QAPAA,IAAAA,IAAA,CAAA,CAAA,EAWAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QACRA,EAAA,WAAa,aACbA,EAAA,OAAS,SACTA,EAAA,YAAc,cAPNA,IAAAA,IAAA,CAAA,CAAA,EAWAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,YAAc,cACdA,EAAA,UAAY,YACZA,EAAA,UAAY,YAPJA,IAAAA,IAAA,CAAA,CAAA,EAWAC,IAAAA,IACRA,EAAA,kBAAoB,oBACpBA,EAAA,eAAiB,iBAFTA,IAAAA,IAAA,CAAA,CAAA,EAMAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,KAAO,OACPA,EAAA,KAAO,OACPA,EAAA,KAAO,OACPA,EAAA,KAAO,OALCA,IAAAA,IAAA,CAAA,CAAA,EASAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,OAAS,SAJDA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,OAAS,SACTA,EAAA,cAAgB,gBAFRA,IAAAA,IAAA,CAAA,CAAA,EAMAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,cAAgB,gBAChBA,EAAA,iBAAmB,mBACnBA,EAAA,QAAU,UAJFA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,KAAO,OACPA,EAAA,YAAc,cACdA,EAAA,IAAM,MACNA,EAAA,OAAS,SAJDA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,MAAQ,QAnFAA,IAAAA,IAAA,CAAA,CAAA,EAuFAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,gBAAkB,kBAClBA,EAAA,OAAS,SACTA,EAAA,KAAO,OACPA,EAAA,eAAiB,iBACjBA,EAAA,QAAU,UACVA,EAAA,KAAO,OACPA,EAAA,SAAW,WACXA,EAAA,MAAQ,QAXAA,IAAAA,IAAA,CAAA,CAAA,EAeAC,IAAAA,IACRA,EAAA,SAAW,WACXA,EAAA,UAAY,YACZA,EAAA,eAAiB,iBACjBA,EAAA,aAAe,eAJPA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,IAAM,MACNA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,MAAQ,QACRA,EAAA,QAAU,UACVA,EAAA,QAAU,UAPFA,IAAAA,IAAA,CAAA,CAAA,EAWAC,IAAAA,IACRA,EAAA,YAAc,cACdA,EAAA,SAAW,WAFHA,IAAAA,IAAA,CAAA,CAAA,EAMAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,iBAAmB,mBACnBA,EAAA,SAAW,WAJHA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,UAAY,YACZA,EAAA,YAAc,cALNA,IAAAA,IAAA,CAAA,CAAA,EASAC,GAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,OAAS,SACTA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBAChBA,EAAA,aAAe,eACfA,EAAA,YAAc,cACdA,EAAA,aAAe,eACfA,EAAA,OAAS,SACTA,EAAA,8BAAgC,gCAChCA,EAAA,QAAU,UACVA,EAAA,iBAAmB,mBACnBA,EAAA,cAAgB,gBAChBA,EAAA,cAAgB,gBAbRA,IAAAA,GAAA,CAAA,CAAA,EAiBAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,SAAW,WACXA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,SAAW,WACXA,EAAA,eAAiB,iBACjBA,EAAA,IAAM,MAVEA,IAAAA,IAAA,CAAA,CAAA,EAcAC,IAAAA,IACRA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,SAAW,WAHHA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,YAAc,cACdA,EAAA,OAAS,SACTA,EAAA,OAAS,SACTA,EAAA,MAAQ,QALAA,IAAAA,IAAA,CAAA,CAAA,EASAC,IAAAA,IACRA,EAAA,WAAa,aACbA,EAAA,SAAW,WACXA,EAAA,cAAgB,gBAChBA,EAAA,aAAe,eACfA,EAAA,MAAQ,QACRA,EAAA,SAAW,WANHA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,WAAa,aACbA,EAAA,aAAe,eACfA,EAAA,IAAM,MACNA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,aAAe,eACfA,EAAA,MAAQ,QARAA,IAAAA,IAAA,CAAA,CAAA,EAYAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,KAAO,OACPA,EAAA,OAAS,SAHDA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,WAAa,aACbA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,MAAQ,QAZAA,IAAAA,IAAA,CAAA,CAAA,EAgBAC,IAAAA,IACRA,EAAA,WAAa,aACbA,EAAA,MAAQ,QACRA,EAAA,OAAS,SACTA,EAAA,MAAQ,QAJAA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,8BAAgC,gCAChCA,EAAA,oBAAsB,sBACtBA,EAAA,aAAe,eACfA,EAAA,YAAc,cACdA,EAAA,2BAA6B,6BAC7BA,EAAA,gCAAkC,kCAClCA,EAAA,oBAAsB,sBACtBA,EAAA,QAAU,UACVA,EAAA,iBAAmB,mBACnBA,EAAA,0BAA4B,4BAC5BA,EAAA,iBAAmB,mBACnBA,EAAA,aAAe,eACfA,EAAA,0BAA4B,4BAC5BA,EAAA,sCAAwC,wCACxCA,EAAA,mBAAqB,qBACrBA,EAAA,KAAO,OACPA,EAAA,kBAAoB,oBAjBZA,IAAAA,IAAA,CAAA,CAAA,EAqBAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,IAAM,MACNA,EAAA,QAAU,UACVA,EAAA,QAAU,UAJFA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,wBAA0B,0BAC1BA,EAAA,oCAAsC,sCACtCA,EAAA,MAAQ,QAJAA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,gBAAkB,kBAClBA,EAAA,OAAS,SACTA,EAAA,KAAO,OACPA,EAAA,oBAAsB,sBACtBA,EAAA,eAAiB,iBACjBA,EAAA,QAAU,UACVA,EAAA,KAAO,OACPA,EAAA,SAAW,WACXA,EAAA,MAAQ,QAZAA,IAAAA,IAAA,CAAA,CAAA,EAgBAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,IAAM,MACNA,EAAA,IAAM,MACNA,EAAA,eAAiB,iBACjBA,EAAA,kBAAoB,oBACpBA,EAAA,YAAc,cACdA,EAAA,aAAe,eACfA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,YAAc,cACdA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,IAAM,MACNA,EAAA,MAAQ,QACRA,EAAA,aAAe,eAfPA,IAAAA,IAAA,CAAA,CAAA,EAmBAC,IAAAA,IACRA,EAAA,YAAc,cACdA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,aAAe,eACfA,EAAA,eAAiB,iBACjBA,EAAA,aAAe,eACfA,EAAA,OAAS,SACTA,EAAA,aAAe,eACfA,EAAA,UAAY,YACZA,EAAA,aAAe,eACfA,EAAA,aAAe,eACfA,EAAA,aAAe,eACfA,EAAA,gBAAkB,kBAClBA,EAAA,aAAe,eACfA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBAhBRA,IAAAA,IAAA,CAAA,CAAA,EAoBAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,UAAY,YACZA,EAAA,SAAW,WAJHA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,KAAO,OACPA,EAAA,oBAAsB,sBACtBA,EAAA,eAAiB,iBACjBA,EAAA,gBAAkB,kBAClBA,EAAA,UAAY,YACZA,EAAA,YAAc,cANNA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,gBAAkB,kBAClBA,EAAA,iBAAmB,mBACnBA,EAAA,iBAAmB,mBACnBA,EAAA,oBAAsB,sBACtBA,EAAA,4BAA8B,8BAC9BA,EAAA,WAAa,aACbA,EAAA,MAAQ,QACRA,EAAA,OAAS,SATDA,IAAAA,IAAA,CAAA,CAAA,EAaAC,IAAAA,IACRA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,QAAU,UAHFA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,iBAAmB,mBACnBA,EAAA,gBAAkB,kBAClBA,EAAA,mBAAqB,qBACrBA,EAAA,iBAAmB,mBACnBA,EAAA,oBAAsB,sBACtBA,EAAA,SAAW,WACXA,EAAA,UAAY,YARJA,IAAAA,IAAA,CAAA,CAAA,EAYAC,IAAAA,IACRA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,QAAU,UAHFA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,GAAK,KACLA,EAAA,oBAAsB,sBACtBA,EAAA,iBAAmB,mBAJXA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,KAAO,OACPA,EAAA,YAAc,cACdA,EAAA,QAAU,UACVA,EAAA,GAAK,KACLA,EAAA,OAAS,SACTA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,YAAc,cACdA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,QAAU,UAjBFA,IAAAA,IAAA,CAAA,CAAA,EAqBAC,IAAAA,IACRA,EAAA,4CAA8C,8CAC9CA,EAAA,oDAAsD,sDACtDA,EAAA,kCAAoC,oCACpCA,EAAA,4BAA8B,8BAC9BA,EAAA,yCAA2C,2CAC3CA,EAAA,wDAA0D,0DANlDA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,MAAQ,QAHAA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,YAAc,cACdA,EAAA,QAAU,UACVA,EAAA,YAAc,cAHNA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,aAAe,eAHPA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,iBAAmB,mBAHXA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,WAAa,aACbA,EAAA,eAAiB,iBACjBA,EAAA,uBAAyB,yBACzBA,EAAA,oBAAsB,sBACtBA,EAAA,yBAA2B,2BAC3BA,EAAA,WAAa,aACbA,EAAA,eAAiB,iBACjBA,EAAA,uBAAyB,yBACzBA,EAAA,oBAAsB,sBACtBA,EAAA,yBAA2B,2BAVnBA,IAAAA,IAAA,CAAA,CAAA,EAcAC,IAAAA,IACRA,EAAA,OAAS,SACTA,EAAA,QAAU,UACVA,EAAA,WAAa,aAHLA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KAJGA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,OAAS,SACTA,EAAA,QAAU,UACVA,EAAA,wBAA0B,0BAC1BA,EAAA,QAAU,UALFA,IAAAA,IAAA,CAAA,CAAA,EASAC,IAAAA,IACRA,EAAA,YAAc,cACdA,EAAA,gBAAkB,kBAClBA,EAAA,kBAAoB,oBACpBA,EAAA,MAAQ,QAJAA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,MAAQ,QACRA,EAAA,gBAAkB,kBAClBA,EAAA,QAAU,UACVA,EAAA,KAAO,OACPA,EAAA,QAAU,UACVA,EAAA,SAAW,WANHA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,mBAAqB,qBACrBA,EAAA,oBAAsB,sBACtBA,EAAA,yBAA2B,2BAC3BA,EAAA,0BAA4B,4BAC5BA,EAAA,MAAQ,QALAA,IAAAA,IAAA,CAAA,CAAA,EASAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,cAAgB,gBAChBA,EAAA,mBAAqB,qBAHbA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,WAAa,aACbA,EAAA,OAAS,SAJDA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,MAAQ,QACRA,EAAA,OAAS,SACTA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,SAAW,WANHA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,MAAQ,QACRA,EAAA,IAAM,MAFEA,IAAAA,IAAA,CAAA,CAAA,EAMAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,OAAS,SACTA,EAAA,KAAO,OACPA,EAAA,QAAU,UANFA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,IAAM,MACNA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,MAAQ,QACRA,EAAA,QAAU,UACVA,EAAA,QAAU,UAPFA,IAAAA,IAAA,CAAA,CAAA,EAWAC,GAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,KAAO,OACPA,EAAA,YAAc,cACdA,EAAA,SAAW,WACXA,EAAA,eAAiB,iBACjBA,EAAA,WAAa,aACbA,EAAA,iBAAmB,mBACnBA,EAAA,iBAAmB,mBACnBA,EAAA,YAAc,cACdA,EAAA,oBAAsB,sBACtBA,EAAA,qBAAuB,uBACvBA,EAAA,oBAAsB,sBACtBA,EAAA,qBAAuB,uBACvBA,EAAA,sBAAwB,wBACxBA,EAAA,qBAAuB,uBACvBA,EAAA,gBAAkB,kBAClBA,EAAA,YAAc,cACdA,EAAA,cAAgB,gBAChBA,EAAA,WAAa,aACbA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,WAAa,aACbA,EAAA,cAAgB,gBAChBA,EAAA,cAAgB,gBAChBA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,MAAQ,QACRA,EAAA,aAAe,eACfA,EAAA,KAAO,OACPA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,cAAgB,gBAChBA,EAAA,SAAW,WArCHA,IAAAA,GAAA,CAAA,CAAA,EAyCAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,KAAO,OAJCA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,IAAM,MACNA,EAAA,WAAa,aACbA,EAAA,iBAAmB,mBACnBA,EAAA,cAAgB,gBAChBA,EAAA,iBAAmB,mBACnBA,EAAA,UAAY,YACZA,EAAA,KAAO,OACPA,EAAA,QAAU,UACVA,EAAA,UAAY,YATJA,IAAAA,IAAA,CAAA,CAAA,EAaAC,IAAAA,IACRA,EAAA,MAAQ,QACRA,EAAA,eAAiB,iBACjBA,EAAA,iBAAmB,mBACnBA,EAAA,gBAAkB,kBAClBA,EAAA,aAAe,eACfA,EAAA,eAAiB,iBACjBA,EAAA,gBAAkB,kBAClBA,EAAA,uBAAyB,yBACzBA,EAAA,QAAU,UACVA,EAAA,SAAW,WAVHA,IAAAA,IAAA,CAAA,CAAA,EAcAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,KAAO,OACPA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,cAAgB,gBAChBA,EAAA,MAAQ,QAPAA,IAAAA,IAAA,CAAA,CAAA,EAWAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,iBAAmB,mBACnBA,EAAA,OAAS,SAHDA,IAAAA,IAAA,CAAA,CAAA,EAOAC,GAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,aAAe,eACfA,EAAA,OAAS,SACTA,EAAA,aAAe,eACfA,EAAA,QAAU,UACVA,EAAA,aAAe,eACfA,EAAA,kBAAoB,oBACpBA,EAAA,kBAAoB,oBACpBA,EAAA,YAAc,cACdA,EAAA,aAAe,eAXPA,IAAAA,GAAA,CAAA,CAAA,EAeAC,GAAAA,IACRA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,UAAY,YACZA,EAAA,IAAM,MACNA,EAAA,gBAAkB,kBAClBA,EAAA,MAAQ,QACRA,EAAA,QAAU,UACVA,EAAA,WAAa,aACbA,EAAA,MAAQ,QACRA,EAAA,cAAgB,gBAChBA,EAAA,UAAY,YACZA,EAAA,WAAa,aACbA,EAAA,SAAW,WACXA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QAhBAA,IAAAA,GAAA,CAAA,CAAA,EAoBAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,kBAAoB,oBAFZA,IAAAA,IAAA,CAAA,CAAA,EAMAC,IAAAA,IACRA,EAAA,WAAa,aACbA,EAAA,WAAa,aACbA,EAAA,SAAW,WACXA,EAAA,cAAgB,gBAChBA,EAAA,YAAc,cALNA,IAAAA,IAAA,CAAA,CAAA,EASAC,IAAAA,IACRA,EAAA,MAAQ,QACRA,EAAA,QAAU,UACVA,EAAA,KAAO,OACPA,EAAA,OAAS,SAJDA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,YAAc,cACdA,EAAA,MAAQ,QACRA,EAAA,SAAW,WAHHA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,aAAe,eACfA,EAAA,WAAa,aAHLA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,IAAM,MAFEA,IAAAA,IAAA,CAAA,CAAA,EAMAC,IAAAA,IACRA,EAAA,IAAM,MACNA,EAAA,QAAU,UACVA,EAAA,OAAS,SAHDA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,eAAiB,iBACjBA,EAAA,eAAiB,iBACjBA,EAAA,mBAAqB,qBACrBA,EAAA,eAAiB,iBACjBA,EAAA,oBAAsB,sBACtBA,EAAA,0BAA4B,4BAC5BA,EAAA,aAAe,eACfA,EAAA,kBAAoB,oBACpBA,EAAA,uBAAyB,yBACzBA,EAAA,cAAgB,gBAChBA,EAAA,cAAgB,gBAChBA,EAAA,oBAAsB,sBACtBA,EAAA,cAAgB,gBAChBA,EAAA,aAAe,eACfA,EAAA,UAAY,YACZA,EAAA,mBAAqB,qBACrBA,EAAA,yBAA2B,2BAC3BA,EAAA,gCAAkC,kCAClCA,EAAA,gCAAkC,kCAClCA,EAAA,WAAa,aACbA,EAAA,eAAiB,iBACjBA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,eAAiB,iBACjBA,EAAA,cAAgB,gBAChBA,EAAA,qBAAuB,uBACvBA,EAAA,aAAe,eACfA,EAAA,sBAAwB,wBACxBA,EAAA,iBAAmB,mBACnBA,EAAA,QAAU,UACVA,EAAA,YAAc,cACdA,EAAA,mBAAqB,qBACrBA,EAAA,cAAgB,gBAnCRA,IAAAA,IAAA,CAAA,CAAA,EAuCAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,WAAa,aACbA,EAAA,eAAiB,iBACjBA,EAAA,oBAAsB,sBACtBA,EAAA,eAAiB,iBACjBA,EAAA,YAAc,cACdA,EAAA,UAAY,YAPJA,IAAAA,IAAA,CAAA,CAAA,EAWAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,OAAS,SAFDA,IAAAA,IAAA,CAAA,CAAA,EAMAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,YAAc,cACdA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBAChBA,EAAA,aAAe,eACfA,EAAA,mBAAqB,qBACrBA,EAAA,qBAAuB,uBAPfA,IAAAA,IAAA,CAAA,CAAA,EAWAC,IAAAA,IACRA,EAAA,KAAO,OACPA,EAAA,IAAM,MACNA,EAAA,aAAe,eAHPA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,OAAS,SACTA,EAAA,YAAc,cAFNA,IAAAA,IAAA,CAAA,CAAA,EAMAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,QAAU,UAHFA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,IAAM,MACNA,EAAA,SAAW,WAHHA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,OAAS,SACTA,EAAA,yBAA2B,2BAC3BA,EAAA,oBAAsB,sBACtBA,EAAA,aAAe,eACfA,EAAA,+BAAiC,iCACjCA,EAAA,gCAAkC,kCAClCA,EAAA,2BAA6B,6BAC7BA,EAAA,aAAe,eACfA,EAAA,+BAAiC,iCACjCA,EAAA,WAAa,aACbA,EAAA,mBAAqB,qBACrBA,EAAA,yBAA2B,2BAC3BA,EAAA,oBAAsB,sBAddA,IAAAA,IAAA,CAAA,CAAA,EAkBAC,IAAAA,IACRA,EAAA,cAAgB,gBAChBA,EAAA,QAAU,UACVA,EAAA,OAAS,SAHDA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,WAAa,aAHLA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,kBAAoB,oBACpBA,EAAA,yBAA2B,2BAC3BA,EAAA,iBAAmB,mBACnBA,EAAA,iBAAmB,mBACnBA,EAAA,KAAO,OANCA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,IAAM,MACNA,EAAA,SAAW,WACXA,EAAA,cAAgB,gBAChBA,EAAA,aAAe,eACfA,EAAA,cAAgB,gBAChBA,EAAA,eAAiB,iBACjBA,EAAA,eAAiB,iBACjBA,EAAA,0BAA4B,4BAC5BA,EAAA,OAAS,SATDA,IAAAA,IAAA,CAAA,CAAA,EAaAC,GAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,KAAO,OACPA,EAAA,cAAgB,gBAChBA,EAAA,YAAc,cACdA,EAAA,uBAAyB,yBACzBA,EAAA,OAAS,SACTA,EAAA,WAAa,aARLA,IAAAA,GAAA,CAAA,CAAA,EAYAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,aAAe,eACfA,EAAA,OAAS,SACTA,EAAA,QAAU,UALFA,IAAAA,IAAA,CAAA,CAAA,EASAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,YAAc,cACdA,EAAA,iBAAmB,mBACnBA,EAAA,eAAiB,iBACjBA,EAAA,YAAc,cALNA,IAAAA,IAAA,CAAA,CAAA,EASAC,IAAAA,IACRA,EAAA,KAAO,OACPA,EAAA,cAAgB,gBAChBA,EAAA,SAAW,WACXA,EAAA,gBAAkB,kBAClBA,EAAA,WAAa,aACbA,EAAA,kBAAoB,oBACpBA,EAAA,0BAA4B,4BAPpBA,IAAAA,IAAA,CAAA,CAAA,EAWAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,mBAAqB,qBACrBA,EAAA,gBAAkB,kBAClBA,EAAA,OAAS,SAJDA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,WAAa,aACbA,EAAA,WAAa,aAHLA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,YAAc,cACdA,EAAA,sBAAwB,wBACxBA,EAAA,kBAAoB,oBACpBA,EAAA,kBAAoB,oBACpBA,EAAA,yBAA2B,2BALnBA,IAAAA,IAAA,CAAA,CAAA,EASAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,WAAa,aACbA,EAAA,UAAY,YACZA,EAAA,SAAW,WAXHA,IAAAA,IAAA,CAAA,CAAA,EAeAC,IAAAA,IACRA,EAAA,KAAO,OACPA,EAAA,SAAW,WACXA,EAAA,YAAc,cACdA,EAAA,QAAU,UACVA,EAAA,cAAgB,gBAChBA,EAAA,MAAQ,QACRA,EAAA,YAAc,cACdA,EAAA,IAAM,MACNA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,YAAc,cACdA,EAAA,aAAe,eACfA,EAAA,WAAa,aACbA,EAAA,QAAU,UACVA,EAAA,YAAc,cACdA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,QAAU,UAlBFA,IAAAA,IAAA,CAAA,CAAA,EAsBAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,cAAgB,gBAChBA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,OAAS,SANDA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,OAAS,SAFDA,IAAAA,IAAA,CAAA,CAAA,EAMAC,IAAAA,IACRA,EAAA,YAAc,cACdA,EAAA,YAAc,cACdA,EAAA,sBAAwB,wBACxBA,EAAA,MAAQ,QAJAA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,OAAS,SACTA,EAAA,IAAM,MACNA,EAAA,MAAQ,QACRA,EAAA,QAAU,UACVA,EAAA,WAAa,aACbA,EAAA,KAAO,OAVCA,IAAAA,IAAA,CAAA,CAAA,EAcAC,IAAAA,IACRA,EAAA,aAAe,eACfA,EAAA,kBAAoB,oBACpBA,EAAA,aAAe,eACfA,EAAA,kBAAoB,oBACpBA,EAAA,eAAiB,iBACjBA,EAAA,kBAAoB,oBANZA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,OAAS,SACTA,EAAA,QAAU,UACVA,EAAA,SAAW,WAJHA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,OAAS,SACTA,EAAA,QAAU,UACVA,EAAA,KAAO,OAJCA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,aAAe,eACfA,EAAA,QAAU,UAHFA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,KAAO,OACPA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,MAAQ,QATAA,IAAAA,IAAA,CAAA,CAAA,EAaAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,iBAAmB,mBACnBA,EAAA,MAAQ,QALAA,IAAAA,IAAA,CAAA,CAAA,EASAC,IAAAA,IACRA,EAAA,KAAO,OACPA,EAAA,UAAY,YACZA,EAAA,OAAS,SACTA,EAAA,QAAU,UAJFA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,OAAS,SACTA,EAAA,OAAS,SAFDA,IAAAA,IAAA,CAAA,CAAA,EAMAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,UAAY,YAHJA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,KAAO,OACPA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,YAAc,cACdA,EAAA,SAAW,WALHA,IAAAA,IAAA,CAAA,CAAA,EASAC,IAAAA,IACRA,EAAA,WAAa,aACbA,EAAA,GAAK,KACLA,EAAA,cAAgB,gBAChBA,EAAA,OAAS,SAJDA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,cAAgB,gBAChBA,EAAA,SAAW,WACXA,EAAA,WAAa,aAJLA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,WAAa,aACbA,EAAA,GAAK,KACLA,EAAA,oBAAsB,sBACtBA,EAAA,iBAAmB,mBACnBA,EAAA,gBAAkB,kBALVA,IAAAA,IAAA,CAAA,CAAA,EASAC,IAAAA,IACRA,EAAA,cAAgB,gBAChBA,EAAA,mBAAqB,qBACrBA,EAAA,YAAc,cACdA,EAAA,eAAiB,iBACjBA,EAAA,YAAc,cACdA,EAAA,YAAc,cACdA,EAAA,gBAAkB,kBAClBA,EAAA,wBAA0B,0BAC1BA,EAAA,GAAK,KACLA,EAAA,WAAa,aACbA,EAAA,gBAAkB,kBAClBA,EAAA,GAAK,KACLA,EAAA,qBAAuB,uBACvBA,EAAA,WAAa,aACbA,EAAA,OAAS,SACTA,EAAA,YAAc,cACdA,EAAA,qBAAuB,uBACvBA,EAAA,mBAAqB,qBACrBA,EAAA,qBAAuB,uBACvBA,EAAA,oBAAsB,sBACtBA,EAAA,iBAAmB,mBACnBA,EAAA,0BAA4B,4BAC5BA,EAAA,sBAAwB,wBACxBA,EAAA,0BAA4B,4BAC5BA,EAAA,mBAAqB,qBACrBA,EAAA,oBAAsB,sBACtBA,EAAA,gBAAkB,kBAClBA,EAAA,YAAc,cACdA,EAAA,oBAAsB,sBACtBA,EAAA,2BAA6B,6BAC7BA,EAAA,oBAAsB,sBACtBA,EAAA,uBAAyB,yBACzBA,EAAA,wCAA0C,0CAC1CA,EAAA,gBAAkB,kBAClBA,EAAA,oBAAsB,sBACtBA,EAAA,wBAA0B,0BAC1BA,EAAA,2BAA6B,6BAC7BA,EAAA,QAAU,UAtCFA,IAAAA,IAAA,CAAA,CAAA,EA0CAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,kBAAoB,oBACpBA,EAAA,eAAiB,iBAHTA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,YAAc,cACdA,EAAA,gBAAkB,kBAClBA,EAAA,oBAAsB,sBAJdA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,WAAa,aACbA,EAAA,oBAAsB,sBACtBA,EAAA,YAAc,cACdA,EAAA,sBAAwB,wBACxBA,EAAA,MAAQ,QAPAA,IAAAA,IAAA,CAAA,CAAA,EAWAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,mBAAqB,qBACrBA,EAAA,eAAiB,iBACjBA,EAAA,sBAAwB,wBAJhBA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,YAAc,cACdA,EAAA,gBAAkB,kBAClBA,EAAA,oBAAsB,sBAJdA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,iBAAmB,mBACnBA,EAAA,WAAa,aACbA,EAAA,cAAgB,gBAChBA,EAAA,cAAgB,gBAChBA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,iBAAmB,mBACnBA,EAAA,uBAAyB,yBATjBA,IAAAA,IAAA,CAAA,CAAA,EAaAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,mBAAqB,qBACrBA,EAAA,sBAAwB,wBACxBA,EAAA,4BAA8B,8BAC9BA,EAAA,cAAgB,gBALRA,IAAAA,IAAA,CAAA,CAAA,EASAC,IAAAA,IACRA,EAAA,UAAY,YADJA,IAAAA,IAAA,CAAA,CAAA,EAKAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,cAAgB,gBAChBA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,iBAAmB,mBACnBA,EAAA,uBAAyB,yBACzBA,EAAA,mBAAqB,qBAPbA,IAAAA,IAAA,CAAA,CAAA,EAWAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,WAAa,aACbA,EAAA,WAAa,aACbA,EAAA,4BAA8B,8BAC9BA,EAAA,2BAA6B,6BAC7BA,EAAA,sCAAwC,wCACxCA,EAAA,yBAA2B,2BAC3BA,EAAA,8BAAgC,gCAChCA,EAAA,+BAAiC,iCACjCA,EAAA,iCAAmC,mCACnCA,EAAA,sBAAwB,wBACxBA,EAAA,8BAAgC,gCAChCA,EAAA,qBAAuB,uBACvBA,EAAA,+BAAiC,iCACjCA,EAAA,kCAAoC,oCACpCA,EAAA,oBAAsB,sBACtBA,EAAA,kCAAoC,oCACpCA,EAAA,+BAAiC,iCACjCA,EAAA,sBAAwB,wBACxBA,EAAA,+BAAiC,iCApBzBA,IAAAA,IAAA,CAAA,CAAA,EAwBAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,oBAAsB,sBACtBA,EAAA,0BAA4B,4BAC5BA,EAAA,2BAA6B,6BAJrBA,IAAAA,IAAA,CAAA,CAAA,EAQAC,GAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,0BAA4B,4BAC5BA,EAAA,wBAA0B,0BAC1BA,EAAA,sBAAwB,wBACxBA,EAAA,YAAc,cACdA,EAAA,iBAAmB,mBACnBA,EAAA,kBAAoB,oBACpBA,EAAA,wBAA0B,0BAC1BA,EAAA,uBAAyB,yBACzBA,EAAA,oBAAsB,sBACtBA,EAAA,uBAAyB,yBACzBA,EAAA,qBAAuB,uBACvBA,EAAA,mBAAqB,qBACrBA,EAAA,uBAAyB,yBAdjBA,IAAAA,GAAA,CAAA,CAAA,EAkBAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,MAAQ,QAHAA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,yBAA2B,2BAC3BA,EAAA,oCAAsC,sCACtCA,EAAA,4BAA8B,8BAC9BA,EAAA,iCAAmC,mCACnCA,EAAA,sBAAwB,wBANhBA,IAAAA,IAAA,CAAA,CAAA,EAUAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,YAAc,cAJNA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,mBAAqB,qBACrBA,EAAA,0CAA4C,4CAC5CA,EAAA,yBAA2B,2BAC3BA,EAAA,gDAAkD,kDAL1CA,IAAAA,IAAA,CAAA,CAAA,EASAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,YAAc,cACdA,EAAA,cAAgB,gBAChBA,EAAA,SAAW,WACXA,EAAA,yCAA2C,2CAC3CA,EAAA,0BAA4B,4BAC5BA,EAAA,wBAA0B,0BAC1BA,EAAA,sBAAwB,wBACxBA,EAAA,yBAA2B,2BAC3BA,EAAA,0BAA4B,4BAC5BA,EAAA,WAAa,aACbA,EAAA,YAAc,cACdA,EAAA,iBAAmB,mBACnBA,EAAA,aAAe,eACfA,EAAA,WAAa,aACbA,EAAA,6BAA+B,+BAC/BA,EAAA,kBAAoB,oBACpBA,EAAA,wBAA0B,0BAC1BA,EAAA,6BAA+B,+BAC/BA,EAAA,0BAA4B,4BAC5BA,EAAA,WAAa,aACbA,EAAA,uBAAyB,yBACzBA,EAAA,kCAAoC,oCACpCA,EAAA,iBAAmB,mBACnBA,EAAA,wCAA0C,0CAC1CA,EAAA,8BAAgC,gCAChCA,EAAA,uBAAyB,yBACzBA,EAAA,YAAc,cACdA,EAAA,oCAAsC,sCACtCA,EAAA,oBAAsB,sBACtBA,EAAA,kDAAoD,oDACpDA,EAAA,uBAAyB,yBACzBA,EAAA,mBAAqB,qBACrBA,EAAA,0BAA4B,4BAC5BA,EAAA,qBAAuB,uBACvBA,EAAA,mBAAqB,qBACrBA,EAAA,uBAAyB,yBACzBA,EAAA,yBAA2B,2BAC3BA,EAAA,uCAAyC,yCACzCA,EAAA,qBAAuB,uBACvBA,EAAA,8BAAgC,gCAChCA,EAAA,cAAgB,gBAChBA,EAAA,WAAa,aACbA,EAAA,uCAAyC,yCACzCA,EAAA,qCAAuC,uCACvCA,EAAA,yBAA2B,2BAC3BA,EAAA,4BAA8B,8BAC9BA,EAAA,qCAAuC,uCACvCA,EAAA,+BAAiC,iCACjCA,EAAA,gCAAkC,kCAClCA,EAAA,gCAAkC,kCAClCA,EAAA,qCAAuC,uCACvCA,EAAA,mBAAqB,qBACrBA,EAAA,iBAAmB,mBACnBA,EAAA,aAAe,eACfA,EAAA,mDAAqD,qDACrDA,EAAA,mEAAqE,qEACrEA,EAAA,yDAA2D,2DAC3DA,EAAA,2EAA6E,6EAC7EA,EAAA,mDAAqD,qDACrDA,EAAA,iCAAmC,mCACnCA,EAAA,yCAA2C,2CAC3CA,EAAA,qBAAuB,uBACvBA,EAAA,8CAAgD,gDAChDA,EAAA,iBAAmB,mBACnBA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,YAAc,cACdA,EAAA,sCAAwC,wCACxCA,EAAA,2BAA6B,6BAC7BA,EAAA,qEAAuE,uEACvEA,EAAA,sBAAwB,wBACxBA,EAAA,sBAAwB,wBACxBA,EAAA,wBAA0B,0BAC1BA,EAAA,0CAA4C,4CAC5CA,EAAA,wCAA0C,0CAC1CA,EAAA,oBAAsB,sBACtBA,EAAA,sCAAwC,wCACxCA,EAAA,iCAAmC,mCACnCA,EAAA,0BAA4B,4BAC5BA,EAAA,+BAAiC,iCACjCA,EAAA,2CAA6C,6CAC7CA,EAAA,6BAA+B,+BAC/BA,EAAA,+BAAiC,iCACjCA,EAAA,8CAAgD,gDAChDA,EAAA,0CAA4C,4CAC5CA,EAAA,iBAAmB,mBACnBA,EAAA,oCAAsC,sCACtCA,EAAA,iCAAmC,mCACnCA,EAAA,wBAA0B,0BAC1BA,EAAA,sBAAwB,wBACxBA,EAAA,wBAA0B,0BAC1BA,EAAA,+BAAiC,iCACjCA,EAAA,sBAAwB,wBACxBA,EAAA,+BAAiC,iCACjCA,EAAA,4CAA8C,8CAC9CA,EAAA,mCAAqC,qCACrCA,EAAA,eAAiB,iBACjBA,EAAA,mBAAqB,qBACrBA,EAAA,YAAc,cACdA,EAAA,qBAAuB,uBACvBA,EAAA,UAAY,YACZA,EAAA,6CAA+C,+CAC/CA,EAAA,+BAAiC,iCACjCA,EAAA,QAAU,UACVA,EAAA,2DAA6D,6DAC7DA,EAAA,gFAAkF,kFAClFA,EAAA,qCAAuC,uCACvCA,EAAA,sCAAwC,wCACxCA,EAAA,2CAA6C,6CAC7CA,EAAA,iDAAmD,mDACnDA,EAAA,cAAgB,gBAChBA,EAAA,UAAY,YACZA,EAAA,2CAA6C,6CAC7CA,EAAA,2BAA6B,6BAC7BA,EAAA,wCAA0C,0CArHlCA,IAAAA,IAAA,CAAA,CAAA,EAyHAC,IAAAA,IACRA,EAAA,UAAY,YACZA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,sBAAwB,wBAJhBA,IAAAA,IAAA,CAAA,CAAA,EAQAC,IAAAA,IACRA,EAAA,YAAc,cACdA,EAAA,OAAS,SACTA,EAAA,gBAAkB,kBAClBA,EAAA,MAAQ,QACRA,EAAA,UAAY,YACZA,EAAA,gBAAkB,kBAClBA,EAAA,aAAe,eACfA,EAAA,MAAQ,QACRA,EAAA,aAAe,eACfA,EAAA,QAAU,UACVA,EAAA,iBAAmB,mBACnBA,EAAA,YAAc,cACdA,EAAA,qBAAuB,uBACvBA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,kBAAoB,oBACpBA,EAAA,WAAa,aACbA,EAAA,kBAAoB,oBACpBA,EAAA,aAAe,eACfA,EAAA,iBAAmB,mBACnBA,EAAA,YAAc,cACdA,EAAA,qBAAuB,uBACvBA,EAAA,WAAa,aACbA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,kBAAoB,oBACpBA,EAAA,WAAa,aACbA,EAAA,kBAAoB,oBACpBA,EAAA,aAAe,eACfA,EAAA,YAAc,cA9BNA,IAAAA,IAAA,CAAA,CAAA,EAuEAC,IAAAA,IACRA,EAAA,YAAc,cACdA,EAAA,OAAS,SACTA,EAAA,gBAAkB,kBAClBA,EAAA,MAAQ,QACRA,EAAA,UAAY,YACZA,EAAA,gBAAkB,kBAClBA,EAAA,aAAe,eACfA,EAAA,MAAQ,QACRA,EAAA,aAAe,eACfA,EAAA,QAAU,UACVA,EAAA,iBAAmB,mBACnBA,EAAA,YAAc,cACdA,EAAA,qBAAuB,uBACvBA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,kBAAoB,oBACpBA,EAAA,WAAa,aACbA,EAAA,kBAAoB,oBACpBA,EAAA,aAAe,eACfA,EAAA,iBAAmB,mBACnBA,EAAA,YAAc,cACdA,EAAA,qBAAuB,uBACvBA,EAAA,WAAa,aACbA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,kBAAoB,oBACpBA,EAAA,WAAa,aACbA,EAAA,kBAAoB,oBACpBA,EAAA,aAAe,eACfA,EAAA,YAAc,cA9BNA,IAAAA,IAAA,CAAA,CAAA,EAiCAC,IAAAA,IACRA,EAAA,IAAM,MADEA,IAAAA,IAAA,CAAA,CAAA,EAIAC,IAAAA,IACRA,EAAA,cAAgB,gBAChBA,EAAA,gBAAkB,kBAFVA,IAAAA,IAAA,CAAA,CAAA,EAKAC,IAAAA,IACRA,EAAA,QAAU,UACVA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,UAAY,YACZA,EAAA,MAAQ,QALAA,IAAAA,IAAA,CAAA,CAAA,EChtWEC,EAAAA,MAAAA,QAAAA,GAAP,EAy4CKC,GAAL,CACHA,EAAA,UAAY,YACZA,EAAA,kBAAoB,mBAAA,GAFZD,EAAA,aAAAA,EAAA,WAAA,CAAA,EAAA,GAMAE,GAAL,CACHA,EAAA,qBAAuB,uBACvBA,EAAA,0BAA4B,2BAAA,GAFpBF,EAAA,cAAAA,EAAA,YAAA,CAAA,EAAA,GAMArK,GAAL,CACHA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,EAAI,GAAA,GAJIqK,EAAA,eAAAA,EAAA,aAAA,CAAA,EAAA,GAQAnK,GAAL,CACHA,EAAA,cAAgB,gBAChBA,EAAA,sBAAwB,wBACxBA,EAAA,mBAAqB,qBACrBA,EAAA,4BAA8B,8BAC9BA,EAAA,8BAAgC,+BAAA,GALxBmK,EAAA,gBAAAA,EAAA,cAAA,CAAA,EAAA,GASA5J,GAAL,CACHA,EAAA,QAAU,UACVA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,QAAU,SAAA,GAJF4J,EAAA,yBAAAA,EAAA,uBAAA,CAAA,EAAA,GAQAtJ,GAAL,CACHA,EAAA,qBAAuB,uBACvBA,EAAA,iBAAmB,mBACnBA,EAAA,YAAc,cACdA,EAAA,cAAgB,eAAA,GAJRsJ,EAAA,cAAAA,EAAA,YAAA,CAAA,EAAA,GAQAlJ,GAAL,CACHA,EAAA,UAAY,YACZA,EAAA,WAAa,aACbA,EAAA,gBAAkB,kBAClBA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,eAAiB,iBACjBA,EAAA,OAAS,SACTA,EAAA,SAAW,UAAA,GATHkJ,EAAA,YAAAA,EAAA,UAAA,CAAA,EAAA,GAaApI,GAAL,CACHA,EAAA,kBAAoB,oBACpBA,EAAA,eAAiB,gBAAA,GAFToI,EAAA,iBAAAA,EAAA,eAAA,CAAA,EAAA,GAMAG,GAAL,CACHA,EAAA,uBAAyB,yBACzBA,EAAA,yBAA2B,2BAC3BA,EAAA,uBAAyB,yBACzBA,EAAA,mBAAqB,qBACrBA,EAAA,SAAW,WACXA,EAAA,qCAAuC,uCACvCA,EAAA,uCAAyC,yCACzCA,EAAA,qCAAuC,uCACvCA,EAAA,kCAAoC,oCACpCA,EAAA,sDAAwD,wDACxDA,EAAA,wDAA0D,0DAC1DA,EAAA,sDAAwD,wDACxDA,EAAA,mDAAqD,oDAAA,GAb7CH,EAAA,mBAAAA,EAAA,iBAAA,CAAA,EAAA,GAiBA3H,GAAL,CACHA,EAAA,IAAM,MACNA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,MAAQ,QACRA,EAAA,QAAU,SAAA,GANF2H,EAAA,8BAAAA,EAAA,4BAAA,CAAA,EAAA,GAUAI,GAAL,CACHA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,aAAe,cAAA,GAHPJ,EAAA,iBAAAA,EAAA,eAAA,CAAA,EAAA,GAOAK,GAAL,CACHA,EAAA,qBAAuB,uBACvBA,EAAA,MAAQ,QACRA,EAAA,2CAA6C,6CAC7CA,EAAA,qCAAuC,uCACvCA,EAAA,eAAiB,iBACjBA,EAAA,WAAa,aACbA,EAAA,kCAAoC,mCAAA,GAP5BL,EAAA,uBAAAA,EAAA,qBAAA,CAAA,EAAA,GAWAM,GAAL,CACHA,EAAA,UAAY,YACZA,EAAA,mBAAqB,qBACrBA,EAAA,qBAAuB,sBAAA,GAHfN,EAAA,uBAAAA,EAAA,qBAAA,CAAA,EAAA,GAOAO,GAAL,CACHA,EAAA,4BAA8B,8BAC9BA,EAAA,qCAAuC,sCAAA,GAF/BP,EAAA,oBAAAA,EAAA,kBAAA,CAAA,EAAA,GAMAQ,GAAL,CACHA,EAAA,8BAAgC,gCAChCA,EAAA,8BAAgC,gCAChCA,EAAA,8CAAgD,gDAChDA,EAAA,sDAAwD,wDACxDA,EAAA,oCAAsC,sCACtCA,EAAA,4BAA8B,8BAC9BA,EAAA,4CAA8C,8CAC9CA,EAAA,oDAAsD,sDACtDA,EAAA,kCAAoC,oCACpCA,EAAA,4BAA8B,8BAC9BA,EAAA,yCAA2C,0CAAA,GAXnCR,EAAA,gBAAAA,EAAA,cAAA,CAAA,EAAA,GAeAS,GAAL,CACHA,EAAA,iBAAmB,mBACnBA,EAAA,uBAAyB,wBAAA,GAFjBT,EAAA,gBAAAA,EAAA,cAAA,CAAA,EAAA,GAMAjH,GAAL,CACHA,EAAA,KAAO,OACPA,EAAA,OAAS,QAAA,GAFDiH,EAAA,SAAAA,EAAA,OAAA,CAAA,EAAA,GAMAU,GAAL,CACHA,EAAA,WAAa,aACbA,EAAA,6BAA+B,+BAC/BA,EAAA,IAAM,MACNA,EAAA,KAAO,OACPA,EAAA,wBAA0B,0BAC1BA,EAAA,+BAAiC,iCACjCA,EAAA,kCAAoC,oCACpCA,EAAA,oCAAsC,sCACtCA,EAAA,MAAQ,OAAA,GATAV,EAAA,SAAAA,EAAA,OAAA,CAAA,EAAA,GAaA9G,GAAL,CACHA,EAAA,8BAAgC,gCAChCA,EAAA,oBAAsB,sBACtBA,EAAA,aAAe,eACfA,EAAA,YAAc,cACdA,EAAA,2BAA6B,6BAC7BA,EAAA,gCAAkC,kCAClCA,EAAA,oBAAsB,sBACtBA,EAAA,QAAU,UACVA,EAAA,iBAAmB,mBACnBA,EAAA,0BAA4B,4BAC5BA,EAAA,iBAAmB,mBACnBA,EAAA,aAAe,eACfA,EAAA,0BAA4B,4BAC5BA,EAAA,sCAAwC,wCACxCA,EAAA,mBAAqB,qBACrBA,EAAA,KAAO,OACPA,EAAA,kBAAoB,mBAAA,GAjBZ8G,EAAA,mBAAAA,EAAA,iBAAA,CAAA,EAAA,GAqBAW,GAAL,CACHA,EAAA,KAAO,OACPA,EAAA,OAAS,QAAA,GAFDX,EAAA,mBAAAA,EAAA,iBAAA,CAAA,EAAA,GAMAY,GAAL,CACHA,EAAA,sCAAwC,wCACxCA,EAAA,qDAAuD,uDACvDA,EAAA,qCAAuC,uCACvCA,EAAA,2CAA6C,6CAC7CA,EAAA,sEAAwE,uEAAA,GALhEZ,EAAA,gBAAAA,EAAA,cAAA,CAAA,EAAA,GASAzF,GAAL,CACHA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,IAAA,GAHGyF,EAAA,WAAAA,EAAA,SAAA,CAAA,EAAA,GAOAa,GAAL,CACHA,EAAA,QAAU,UACVA,EAAA,kBAAoB,oBACpBA,EAAA,cAAgB,gBAChBA,EAAA,sBAAwB,wBACxBA,EAAA,eAAiB,iBACjBA,EAAA,aAAe,eACfA,EAAA,uBAAyB,yBACzBA,EAAA,SAAW,WACXA,EAAA,eAAiB,iBACjBA,EAAA,0BAA4B,4BAC5BA,EAAA,eAAiB,iBACjBA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,YAAc,cACdA,EAAA,mCAAqC,qCACrCA,EAAA,MAAQ,OAAA,GAhBAb,EAAA,uBAAAA,EAAA,qBAAA,CAAA,EAAA,GAoBAc,GAAL,CACHA,EAAA,oBAAsB,sBACtBA,EAAA,eAAiB,iBACjBA,EAAA,2BAA6B,4BAAA,GAHrBd,EAAA,kBAAAA,EAAA,gBAAA,CAAA,EAAA,GAOAe,GAAL,CACHA,EAAA,aAAe,eACfA,EAAA,UAAY,YACZA,EAAA,kBAAoB,oBACpBA,EAAA,gBAAkB,kBAClBA,EAAA,MAAQ,QACRA,EAAA,uDAAyD,yDACzDA,EAAA,kBAAoB,oBACpBA,EAAA,oBAAsB,sBACtBA,EAAA,yBAA2B,0BAAA,GATnBf,EAAA,YAAAA,EAAA,UAAA,CAAA,EAAA,GAaAgB,GAAL,CACHA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,YAAc,aAAA,GAHNhB,EAAA,cAAAA,EAAA,YAAA,CAAA,EAAA,GAOAiB,GAAL,CACHA,EAAA,yCAA2C,2CAC3CA,EAAA,2BAA6B,6BAC7BA,EAAA,mCAAqC,oCAAA,GAH7BjB,EAAA,iBAAAA,EAAA,eAAA,CAAA,EAAA,GAOAkB,GAAL,CACHA,EAAA,KAAO,OACPA,EAAA,yBAA2B,2BAC3BA,EAAA,0BAA4B,4BAC5BA,EAAA,wBAA0B,0BAC1BA,EAAA,0CAA4C,4CAC5CA,EAAA,WAAa,aACbA,EAAA,cAAgB,gBAChBA,EAAA,2BAA6B,6BAC7BA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,IAAM,MACNA,EAAA,MAAQ,QACRA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,OAAS,SACTA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,WAAa,aACbA,EAAA,IAAM,MACNA,EAAA,cAAgB,gBAChBA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QACRA,EAAA,GAAK,KACLA,EAAA,MAAQ,QACRA,EAAA,WAAa,aACbA,EAAA,OAAS,SACTA,EAAA,KAAO,MAAA,GAlCClB,EAAA,oBAAAA,EAAA,kBAAA,CAAA,EAAA,GAsCAmB,GAAL,CACHA,EAAA,kBAAoB,oBACpBA,EAAA,KAAO,OACPA,EAAA,cAAgB,gBAChBA,EAAA,MAAQ,OAAA,GAJAnB,EAAA,iBAAAA,EAAA,eAAA,CAAA,EAAA,GAQAoB,GAAL,CACHA,EAAA,+BAAiC,gCAAA,GADzBpB,EAAA,iBAAAA,EAAA,eAAA,CAAA,EAAA,GAKAqB,GAAL,CACHA,EAAA,8BAAgC,gCAChCA,EAAA,4BAA8B,6BAAA,GAFtBrB,EAAA,mBAAAA,EAAA,iBAAA,CAAA,EAAA,GAMAsB,GAAL,CACHA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,WAAa,aACbA,EAAA,aAAe,cAAA,GAJPtB,EAAA,mBAAAA,EAAA,iBAAA,CAAA,EAAA,GAQAuB,GAAL,CACHA,EAAA,UAAY,YACZA,EAAA,KAAO,OACPA,EAAA,SAAW,WACXA,EAAA,MAAQ,OAAA,GAJAvB,EAAA,qBAAAA,EAAA,mBAAA,CAAA,EAAA,GAQAwB,GAAL,CACHA,EAAA,cAAgB,gBAChBA,EAAA,gBAAkB,iBAAA,GAFVxB,EAAA,qBAAAA,EAAA,mBAAA,CAAA,EAAA,GAMAyB,GAAL,CACHA,EAAA,mBAAqB,qBACrBA,EAAA,UAAY,WAAA,GAFJzB,EAAA,WAAAA,EAAA,SAAA,CAAA,EAAA,GAMAP,GAAL,CACHA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,YAAc,cACdA,EAAA,cAAgB,gBAChBA,EAAA,SAAW,WACXA,EAAA,yCAA2C,2CAC3CA,EAAA,0BAA4B,4BAC5BA,EAAA,wBAA0B,0BAC1BA,EAAA,sBAAwB,wBACxBA,EAAA,yBAA2B,2BAC3BA,EAAA,0BAA4B,4BAC5BA,EAAA,WAAa,aACbA,EAAA,YAAc,cACdA,EAAA,iBAAmB,mBACnBA,EAAA,aAAe,eACfA,EAAA,WAAa,aACbA,EAAA,6BAA+B,+BAC/BA,EAAA,kBAAoB,oBACpBA,EAAA,wBAA0B,0BAC1BA,EAAA,6BAA+B,+BAC/BA,EAAA,0BAA4B,4BAC5BA,EAAA,WAAa,aACbA,EAAA,uBAAyB,yBACzBA,EAAA,kCAAoC,oCACpCA,EAAA,iBAAmB,mBACnBA,EAAA,wCAA0C,0CAC1CA,EAAA,8BAAgC,gCAChCA,EAAA,uBAAyB,yBACzBA,EAAA,YAAc,cACdA,EAAA,oCAAsC,sCACtCA,EAAA,oBAAsB,sBACtBA,EAAA,kDAAoD,oDACpDA,EAAA,uBAAyB,yBACzBA,EAAA,mBAAqB,qBACrBA,EAAA,0BAA4B,4BAC5BA,EAAA,qBAAuB,uBACvBA,EAAA,mBAAqB,qBACrBA,EAAA,uBAAyB,yBACzBA,EAAA,yBAA2B,2BAC3BA,EAAA,uCAAyC,yCACzCA,EAAA,qBAAuB,uBACvBA,EAAA,8BAAgC,gCAChCA,EAAA,cAAgB,gBAChBA,EAAA,WAAa,aACbA,EAAA,uCAAyC,yCACzCA,EAAA,qCAAuC,uCACvCA,EAAA,yBAA2B,2BAC3BA,EAAA,4BAA8B,8BAC9BA,EAAA,qCAAuC,uCACvCA,EAAA,+BAAiC,iCACjCA,EAAA,gCAAkC,kCAClCA,EAAA,gCAAkC,kCAClCA,EAAA,qCAAuC,uCACvCA,EAAA,mBAAqB,qBACrBA,EAAA,iBAAmB,mBACnBA,EAAA,aAAe,eACfA,EAAA,mDAAqD,qDACrDA,EAAA,mEAAqE,qEACrEA,EAAA,yDAA2D,2DAC3DA,EAAA,2EAA6E,6EAC7EA,EAAA,mDAAqD,qDACrDA,EAAA,iCAAmC,mCACnCA,EAAA,yCAA2C,2CAC3CA,EAAA,qBAAuB,uBACvBA,EAAA,8CAAgD,gDAChDA,EAAA,iBAAmB,mBACnBA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,YAAc,cACdA,EAAA,sCAAwC,wCACxCA,EAAA,2BAA6B,6BAC7BA,EAAA,qEAAuE,uEACvEA,EAAA,sBAAwB,wBACxBA,EAAA,sBAAwB,wBACxBA,EAAA,wBAA0B,0BAC1BA,EAAA,0CAA4C,4CAC5CA,EAAA,wCAA0C,0CAC1CA,EAAA,oBAAsB,sBACtBA,EAAA,sCAAwC,wCACxCA,EAAA,iCAAmC,mCACnCA,EAAA,0BAA4B,4BAC5BA,EAAA,+BAAiC,iCACjCA,EAAA,2CAA6C,6CAC7CA,EAAA,6BAA+B,+BAC/BA,EAAA,+BAAiC,iCACjCA,EAAA,8CAAgD,gDAChDA,EAAA,0CAA4C,4CAC5CA,EAAA,iBAAmB,mBACnBA,EAAA,oCAAsC,sCACtCA,EAAA,iCAAmC,mCACnCA,EAAA,wBAA0B,0BAC1BA,EAAA,sBAAwB,wBACxBA,EAAA,wBAA0B,0BAC1BA,EAAA,+BAAiC,iCACjCA,EAAA,sBAAwB,wBACxBA,EAAA,+BAAiC,iCACjCA,EAAA,4CAA8C,8CAC9CA,EAAA,mCAAqC,qCACrCA,EAAA,eAAiB,iBACjBA,EAAA,mBAAqB,qBACrBA,EAAA,YAAc,cACdA,EAAA,qBAAuB,uBACvBA,EAAA,UAAY,YACZA,EAAA,6CAA+C,+CAC/CA,EAAA,+BAAiC,iCACjCA,EAAA,QAAU,UACVA,EAAA,2DAA6D,6DAC7DA,EAAA,gFAAkF,kFAClFA,EAAA,qCAAuC,uCACvCA,EAAA,sCAAwC,wCACxCA,EAAA,2CAA6C,6CAC7CA,EAAA,iDAAmD,mDACnDA,EAAA,cAAgB,gBAChBA,EAAA,UAAY,YACZA,EAAA,2CAA6C,6CAC7CA,EAAA,2BAA6B,6BAC7BA,EAAA,wCAA0C,yCAAA,GArHlCO,EAAA,kBAAAA,EAAA,gBAAA,CAAA,EAAA,GAyHA0B,GAAL,CACHA,EAAA,QAAU,UACVA,EAAA,kBAAoB,oBACpBA,EAAA,cAAgB,gBAChBA,EAAA,sBAAwB,wBACxBA,EAAA,eAAiB,iBACjBA,EAAA,aAAe,eACfA,EAAA,uBAAyB,yBACzBA,EAAA,SAAW,WACXA,EAAA,oBAAsB,sBACtBA,EAAA,WAAa,aACbA,EAAA,iBAAmB,mBACnBA,EAAA,4BAA8B,8BAC9BA,EAAA,eAAiB,iBACjBA,EAAA,0BAA4B,4BAC5BA,EAAA,gBAAkB,kBAClBA,EAAA,OAAS,SACTA,EAAA,eAAiB,iBACjBA,EAAA,MAAQ,OAAA,GAlBA1B,EAAA,yBAAAA,EAAA,uBAAA,CAAA,EAAA,GAsBA2B,GAAL,CACHA,EAAA,KAAO,OACPA,EAAA,IAAM,MACNA,EAAA,KAAO,OACPA,EAAA,OAAS,QAAA,GAJD3B,EAAA,eAAAA,EAAA,aAAA,CAAA,EAAA,GAOA4B,GAAL,CACLA,EAAA,UAAY,YACZA,EAAA,KAAO,OACPA,EAAA,YAAc,cACdA,EAAA,SAAW,WACXA,EAAA,eAAiB,iBACjBA,EAAA,WAAa,aACbA,EAAA,YAAc,cACdA,EAAA,iBAAmB,mBACnBA,EAAA,iBAAmB,mBACnBA,EAAA,oBAAsB,sBACtBA,EAAA,qBAAuB,uBACvBA,EAAA,oBAAsB,sBACtBA,EAAA,qBAAuB,uBACvBA,EAAA,sBAAwB,wBACxBA,EAAA,qBAAuB,uBACvBA,EAAA,gBAAkB,kBAClBA,EAAA,YAAc,cACdA,EAAA,cAAgB,gBAChBA,EAAA,WAAa,aACbA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,WAAa,aACbA,EAAA,cAAgB,gBAChBA,EAAA,cAAgB,gBAChBA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,MAAQ,QACRA,EAAA,aAAe,eACfA,EAAA,KAAO,OACPA,EAAA,KAAO,OACPA,EAAA,OAAS,QAAA,GAnCC5B,EAAA,gDAAAA,EAAA,8CAAA,CAAA,EAAA,GAsCA6B,GAAL,CACHA,EAAA,UAAY,YACZA,EAAA,OAAS,SACTA,EAAA,QAAU,UACVA,EAAA,wBAA0B,0BAC1BA,EAAA,QAAU,SAAA,GALF7B,EAAA,mBAAAA,EAAA,iBAAA,CAAA,EAAA,GAQAxJ,GAAL,CACHA,EAAA,KAAO,OACPA,EAAA,SAAW,WACXA,EAAA,SAAW,UAAA,GAHHwJ,EAAA,oBAAAA,EAAA,kBAAA,CAAA,EAAA,GAMA8B,GAAL,CACHA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,KAAO,OACPA,EAAA,QAAU,UACVA,EAAA,OAAS,QAAA,GAND9B,EAAA,kBAAAA,EAAA,gBAAA,CAAA,EAAA,GASA+B,GAAL,CACHA,EAAA,KAAO,OACPA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,YAAc,cACdA,EAAA,SAAW,UAAA,GALH/B,EAAA,WAAAA,EAAA,SAAA,CAAA,EAAA,GAQAgC,GAAL,CACHA,EAAA,oCAAsC,sCACtCA,EAAA,kCAAoC,oCACpCA,EAAA,mDAAqD,oDAAA,GAH7ChC,EAAA,kCAAAA,EAAA,gCAAA,CAAA,EAAA,GAMAiC,GAAL,CACHA,EAAA,IAAM,MACNA,EAAA,IAAM,MACNA,EAAA,wCAA0C,0CAC1CA,EAAA,sBAAwB,uBAAA,GAJhBjC,EAAA,WAAAA,EAAA,SAAA,CAAA,EAAA,GAOAkC,GAAL,CACLA,EAAA,UAAY,YACZA,EAAA,KAAO,OACPA,EAAA,YAAc,cACdA,EAAA,SAAW,WACXA,EAAA,eAAiB,iBACjBA,EAAA,WAAa,aACbA,EAAA,YAAc,cACdA,EAAA,iBAAmB,mBACnBA,EAAA,iBAAmB,mBACnBA,EAAA,oBAAsB,sBACtBA,EAAA,qBAAuB,uBACvBA,EAAA,oBAAsB,sBACtBA,EAAA,qBAAuB,uBACvBA,EAAA,sBAAwB,wBACxBA,EAAA,qBAAuB,uBACvBA,EAAA,gBAAkB,kBAClBA,EAAA,YAAc,cACdA,EAAA,cAAgB,gBAChBA,EAAA,WAAa,aACbA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,WAAa,aACbA,EAAA,cAAgB,gBAChBA,EAAA,cAAgB,gBAChBA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,MAAQ,QACRA,EAAA,aAAe,eACfA,EAAA,KAAO,OACPA,EAAA,KAAO,OACPA,EAAA,OAAS,QAAA,GAnCClC,EAAA,oCAAAA,EAAA,kCAAA,CAAA,EAAA,GAsCAmC,GAAL,CACHA,EAAA,QAAU,UACVA,EAAA,SAAW,WACXA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,oBAAsB,sBACtBA,EAAA,yBAA2B,2BAC3BA,EAAA,UAAY,WAAA,GAPJnC,EAAA,mCAAAA,EAAA,iCAAA,CAAA,EAAA,CAAA,GA/+DEA,EAAAA,QAAAA,QAAA,CAAA,EAAA,ECAAoC,EAAAA,MAAAA,QAAAA,GAAP,EAumBKnC,GAAL,CACHA,EAAA,UAAY,YACZA,EAAA,kBAAoB,mBAAA,GAFZmC,EAAA,aAAAA,EAAA,WAAA,CAAA,EAAA,GAMAlC,GAAL,CACHA,EAAA,qBAAuB,uBACvBA,EAAA,0BAA4B,2BAAA,GAFpBkC,EAAA,cAAAA,EAAA,YAAA,CAAA,EAAA,GAMAzM,GAAL,CACHA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,EAAI,IACJA,EAAA,EAAI,GAAA,GAJIyM,EAAA,eAAAA,EAAA,aAAA,CAAA,EAAA,GAQAvM,GAAL,CACHA,EAAA,cAAgB,gBAChBA,EAAA,sBAAwB,wBACxBA,EAAA,mBAAqB,qBACrBA,EAAA,4BAA8B,8BAC9BA,EAAA,8BAAgC,+BAAA,GALxBuM,EAAA,gBAAAA,EAAA,cAAA,CAAA,EAAA,GASAhM,GAAL,CACHA,EAAA,QAAU,UACVA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,QAAU,SAAA,GAJFgM,EAAA,yBAAAA,EAAA,uBAAA,CAAA,EAAA,GAQA1L,GAAL,CACHA,EAAA,qBAAuB,uBACvBA,EAAA,iBAAmB,mBACnBA,EAAA,YAAc,cACdA,EAAA,cAAgB,eAAA,GAJR0L,EAAA,cAAAA,EAAA,YAAA,CAAA,EAAA,GAQAxK,GAAL,CACHA,EAAA,kBAAoB,oBACpBA,EAAA,eAAiB,gBAAA,GAFTwK,EAAA,iBAAAA,EAAA,eAAA,CAAA,EAAA,GAMAjC,GAAL,CACHA,EAAA,uBAAyB,yBACzBA,EAAA,yBAA2B,2BAC3BA,EAAA,uBAAyB,yBACzBA,EAAA,mBAAqB,qBACrBA,EAAA,SAAW,WACXA,EAAA,qCAAuC,uCACvCA,EAAA,uCAAyC,yCACzCA,EAAA,qCAAuC,uCACvCA,EAAA,kCAAoC,oCACpCA,EAAA,sDAAwD,wDACxDA,EAAA,wDAA0D,0DAC1DA,EAAA,sDAAwD,wDACxDA,EAAA,mDAAqD,oDAAA,GAb7CiC,EAAA,mBAAAA,EAAA,iBAAA,CAAA,EAAA,GAiBAhC,GAAL,CACHA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,aAAe,cAAA,GAHPgC,EAAA,iBAAAA,EAAA,eAAA,CAAA,EAAA,GAOA/B,GAAL,CACHA,EAAA,qBAAuB,uBACvBA,EAAA,MAAQ,QACRA,EAAA,2CAA6C,6CAC7CA,EAAA,qCAAuC,uCACvCA,EAAA,eAAiB,iBACjBA,EAAA,WAAa,aACbA,EAAA,kCAAoC,mCAAA,GAP5B+B,EAAA,uBAAAA,EAAA,qBAAA,CAAA,EAAA,GAWA9B,GAAL,CACHA,EAAA,UAAY,YACZA,EAAA,mBAAqB,qBACrBA,EAAA,qBAAuB,sBAAA,GAHf8B,EAAA,uBAAAA,EAAA,qBAAA,CAAA,EAAA,GAOA5B,GAAL,CACHA,EAAA,8BAAgC,gCAChCA,EAAA,8BAAgC,gCAChCA,EAAA,8CAAgD,gDAChDA,EAAA,sDAAwD,wDACxDA,EAAA,oCAAsC,sCACtCA,EAAA,4BAA8B,8BAC9BA,EAAA,4CAA8C,8CAC9CA,EAAA,oDAAsD,sDACtDA,EAAA,kCAAoC,oCACpCA,EAAA,4BAA8B,8BAC9BA,EAAA,yCAA2C,0CAAA,GAXnC4B,EAAA,gBAAAA,EAAA,cAAA,CAAA,EAAA,GAeA3B,GAAL,CACHA,EAAA,iBAAmB,mBACnBA,EAAA,uBAAyB,wBAAA,GAFjB2B,EAAA,gBAAAA,EAAA,cAAA,CAAA,EAAA,GAMArJ,GAAL,CACHA,EAAA,KAAO,OACPA,EAAA,OAAS,QAAA,GAFDqJ,EAAA,SAAAA,EAAA,OAAA,CAAA,EAAA,GAMA1B,GAAL,CACHA,EAAA,WAAa,aACbA,EAAA,6BAA+B,+BAC/BA,EAAA,IAAM,MACNA,EAAA,KAAO,OACPA,EAAA,wBAA0B,0BAC1BA,EAAA,+BAAiC,iCACjCA,EAAA,kCAAoC,oCACpCA,EAAA,oCAAsC,sCACtCA,EAAA,MAAQ,OAAA,GATA0B,EAAA,SAAAA,EAAA,OAAA,CAAA,EAAA,GAaAxB,GAAL,CACHA,EAAA,sCAAwC,wCACxCA,EAAA,qDAAuD,uDACvDA,EAAA,qCAAuC,uCACvCA,EAAA,2CAA6C,6CAC7CA,EAAA,sEAAwE,uEAAA,GALhEwB,EAAA,gBAAAA,EAAA,cAAA,CAAA,EAAA,GASAzB,GAAL,CACHA,EAAA,KAAO,OACPA,EAAA,OAAS,QAAA,GAFDyB,EAAA,mBAAAA,EAAA,iBAAA,CAAA,EAAA,GAMA7H,GAAL,CACHA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,IAAA,GAHG6H,EAAA,WAAAA,EAAA,SAAA,CAAA,EAAA,GAOAvB,GAAL,CACHA,EAAA,QAAU,UACVA,EAAA,kBAAoB,oBACpBA,EAAA,cAAgB,gBAChBA,EAAA,sBAAwB,wBACxBA,EAAA,eAAiB,iBACjBA,EAAA,aAAe,eACfA,EAAA,uBAAyB,yBACzBA,EAAA,SAAW,WACXA,EAAA,eAAiB,iBACjBA,EAAA,0BAA4B,4BAC5BA,EAAA,eAAiB,iBACjBA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,YAAc,cACdA,EAAA,mCAAqC,qCACrCA,EAAA,MAAQ,OAAA,GAhBAuB,EAAA,uBAAAA,EAAA,qBAAA,CAAA,EAAA,GAoBArB,GAAL,CACHA,EAAA,aAAe,eACfA,EAAA,UAAY,YACZA,EAAA,kBAAoB,oBACpBA,EAAA,gBAAkB,kBAClBA,EAAA,MAAQ,QACRA,EAAA,uDAAyD,yDACzDA,EAAA,kBAAoB,oBACpBA,EAAA,oBAAsB,sBACtBA,EAAA,yBAA2B,0BAAA,GATnBqB,EAAA,YAAAA,EAAA,UAAA,CAAA,EAAA,GAaAtB,GAAL,CACHA,EAAA,oBAAsB,sBACtBA,EAAA,eAAiB,iBACjBA,EAAA,2BAA6B,4BAAA,GAHrBsB,EAAA,kBAAAA,EAAA,gBAAA,CAAA,EAAA,GAOAnH,GAAL,CACHA,EAAA,IAAM,MACNA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,MAAQ,QACRA,EAAA,QAAU,SAAA,GANFmH,EAAA,2BAAAA,EAAA,yBAAA,CAAA,EAAA,GAUApB,GAAL,CACHA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,YAAc,aAAA,GAHNoB,EAAA,cAAAA,EAAA,YAAA,CAAA,EAAA,GAOAnB,GAAL,CACHA,EAAA,yCAA2C,2CAC3CA,EAAA,2BAA6B,6BAC7BA,EAAA,mCAAqC,oCAAA,GAH7BmB,EAAA,iBAAAA,EAAA,eAAA,CAAA,EAAA,GAOAlB,GAAL,CACHA,EAAA,KAAO,OACPA,EAAA,yBAA2B,2BAC3BA,EAAA,0BAA4B,4BAC5BA,EAAA,wBAA0B,0BAC1BA,EAAA,0CAA4C,4CAC5CA,EAAA,WAAa,aACbA,EAAA,cAAgB,gBAChBA,EAAA,2BAA6B,6BAC7BA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,IAAM,MACNA,EAAA,MAAQ,QACRA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,OAAS,SACTA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,WAAa,aACbA,EAAA,IAAM,MACNA,EAAA,cAAgB,gBAChBA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QACRA,EAAA,GAAK,KACLA,EAAA,MAAQ,QACRA,EAAA,WAAa,aACbA,EAAA,OAAS,SACTA,EAAA,KAAO,MAAA,GAlCCkB,EAAA,oBAAAA,EAAA,kBAAA,CAAA,EAAA,GAsCAjB,GAAL,CACHA,EAAA,kBAAoB,oBACpBA,EAAA,KAAO,OACPA,EAAA,cAAgB,gBAChBA,EAAA,MAAQ,OAAA,GAJAiB,EAAA,iBAAAA,EAAA,eAAA,CAAA,EAAA,GAQAhB,GAAL,CACHA,EAAA,+BAAiC,gCAAA,GADzBgB,EAAA,iBAAAA,EAAA,eAAA,CAAA,EAAA,GAKAf,GAAL,CACHA,EAAA,8BAAgC,gCAChCA,EAAA,4BAA8B,6BAAA,GAFtBe,EAAA,mBAAAA,EAAA,iBAAA,CAAA,EAAA,GAMAd,GAAL,CACHA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,WAAa,aACbA,EAAA,aAAe,cAAA,GAJPc,EAAA,mBAAAA,EAAA,iBAAA,CAAA,EAAA,GAQAb,GAAL,CACHA,EAAA,UAAY,YACZA,EAAA,KAAO,OACPA,EAAA,SAAW,WACXA,EAAA,MAAQ,OAAA,GAJAa,EAAA,qBAAAA,EAAA,mBAAA,CAAA,EAAA,GAQAZ,GAAL,CACHA,EAAA,cAAgB,gBAChBA,EAAA,gBAAkB,iBAAA,GAFVY,EAAA,qBAAAA,EAAA,mBAAA,CAAA,EAAA,GAMAC,GAAL,CACHA,EAAA,UAAY,YACZA,EAAA,eAAiB,iBACjBA,EAAA,qCAAuC,uCACvCA,EAAA,8DAAgE,+DAAA,GAJxDD,EAAA,yBAAAA,EAAA,uBAAA,CAAA,EAAA,GAQAX,GAAL,CACHA,EAAA,mBAAqB,qBACrBA,EAAA,UAAY,WAAA,GAFJW,EAAA,WAAAA,EAAA,SAAA,CAAA,EAAA,GAMA3C,GAAL,CACHA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,YAAc,cACdA,EAAA,cAAgB,gBAChBA,EAAA,SAAW,WACXA,EAAA,yCAA2C,2CAC3CA,EAAA,0BAA4B,4BAC5BA,EAAA,wBAA0B,0BAC1BA,EAAA,sBAAwB,wBACxBA,EAAA,yBAA2B,2BAC3BA,EAAA,0BAA4B,4BAC5BA,EAAA,WAAa,aACbA,EAAA,YAAc,cACdA,EAAA,iBAAmB,mBACnBA,EAAA,aAAe,eACfA,EAAA,WAAa,aACbA,EAAA,6BAA+B,+BAC/BA,EAAA,kBAAoB,oBACpBA,EAAA,wBAA0B,0BAC1BA,EAAA,6BAA+B,+BAC/BA,EAAA,0BAA4B,4BAC5BA,EAAA,WAAa,aACbA,EAAA,uBAAyB,yBACzBA,EAAA,kCAAoC,oCACpCA,EAAA,iBAAmB,mBACnBA,EAAA,wCAA0C,0CAC1CA,EAAA,8BAAgC,gCAChCA,EAAA,uBAAyB,yBACzBA,EAAA,YAAc,cACdA,EAAA,oCAAsC,sCACtCA,EAAA,oBAAsB,sBACtBA,EAAA,kDAAoD,oDACpDA,EAAA,uBAAyB,yBACzBA,EAAA,mBAAqB,qBACrBA,EAAA,0BAA4B,4BAC5BA,EAAA,qBAAuB,uBACvBA,EAAA,mBAAqB,qBACrBA,EAAA,uBAAyB,yBACzBA,EAAA,yBAA2B,2BAC3BA,EAAA,uCAAyC,yCACzCA,EAAA,qBAAuB,uBACvBA,EAAA,8BAAgC,gCAChCA,EAAA,cAAgB,gBAChBA,EAAA,WAAa,aACbA,EAAA,uCAAyC,yCACzCA,EAAA,qCAAuC,uCACvCA,EAAA,yBAA2B,2BAC3BA,EAAA,4BAA8B,8BAC9BA,EAAA,qCAAuC,uCACvCA,EAAA,+BAAiC,iCACjCA,EAAA,gCAAkC,kCAClCA,EAAA,gCAAkC,kCAClCA,EAAA,qCAAuC,uCACvCA,EAAA,mBAAqB,qBACrBA,EAAA,iBAAmB,mBACnBA,EAAA,aAAe,eACfA,EAAA,mDAAqD,qDACrDA,EAAA,mEAAqE,qEACrEA,EAAA,yDAA2D,2DAC3DA,EAAA,2EAA6E,6EAC7EA,EAAA,mDAAqD,qDACrDA,EAAA,iCAAmC,mCACnCA,EAAA,yCAA2C,2CAC3CA,EAAA,qBAAuB,uBACvBA,EAAA,8CAAgD,gDAChDA,EAAA,iBAAmB,mBACnBA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,YAAc,cACdA,EAAA,sCAAwC,wCACxCA,EAAA,2BAA6B,6BAC7BA,EAAA,qEAAuE,uEACvEA,EAAA,sBAAwB,wBACxBA,EAAA,sBAAwB,wBACxBA,EAAA,wBAA0B,0BAC1BA,EAAA,0CAA4C,4CAC5CA,EAAA,wCAA0C,0CAC1CA,EAAA,oBAAsB,sBACtBA,EAAA,sCAAwC,wCACxCA,EAAA,iCAAmC,mCACnCA,EAAA,0BAA4B,4BAC5BA,EAAA,+BAAiC,iCACjCA,EAAA,2CAA6C,6CAC7CA,EAAA,6BAA+B,+BAC/BA,EAAA,+BAAiC,iCACjCA,EAAA,8CAAgD,gDAChDA,EAAA,0CAA4C,4CAC5CA,EAAA,iBAAmB,mBACnBA,EAAA,oCAAsC,sCACtCA,EAAA,iCAAmC,mCACnCA,EAAA,wBAA0B,0BAC1BA,EAAA,sBAAwB,wBACxBA,EAAA,wBAA0B,0BAC1BA,EAAA,+BAAiC,iCACjCA,EAAA,sBAAwB,wBACxBA,EAAA,+BAAiC,iCACjCA,EAAA,4CAA8C,8CAC9CA,EAAA,mCAAqC,qCACrCA,EAAA,eAAiB,iBACjBA,EAAA,mBAAqB,qBACrBA,EAAA,YAAc,cACdA,EAAA,qBAAuB,uBACvBA,EAAA,UAAY,YACZA,EAAA,6CAA+C,+CAC/CA,EAAA,+BAAiC,iCACjCA,EAAA,QAAU,UACVA,EAAA,2DAA6D,6DAC7DA,EAAA,gFAAkF,kFAClFA,EAAA,qCAAuC,uCACvCA,EAAA,sCAAwC,wCACxCA,EAAA,2CAA6C,6CAC7CA,EAAA,iDAAmD,mDACnDA,EAAA,cAAgB,gBAChBA,EAAA,UAAY,YACZA,EAAA,2CAA6C,6CAC7CA,EAAA,2BAA6B,6BAC7BA,EAAA,wCAA0C,yCAAA,GArHlC2C,EAAA,kBAAAA,EAAA,gBAAA,CAAA,EAAA,GAyHAV,GAAL,CACHA,EAAA,QAAU,UACVA,EAAA,kBAAoB,oBACpBA,EAAA,cAAgB,gBAChBA,EAAA,sBAAwB,wBACxBA,EAAA,eAAiB,iBACjBA,EAAA,aAAe,eACfA,EAAA,uBAAyB,yBACzBA,EAAA,SAAW,WACXA,EAAA,oBAAsB,sBACtBA,EAAA,WAAa,aACbA,EAAA,iBAAmB,mBACnBA,EAAA,4BAA8B,8BAC9BA,EAAA,eAAiB,iBACjBA,EAAA,0BAA4B,4BAC5BA,EAAA,gBAAkB,kBAClBA,EAAA,OAAS,SACTA,EAAA,eAAiB,iBACjBA,EAAA,MAAQ,OAAA,GAlBAU,EAAA,yBAAAA,EAAA,uBAAA,CAAA,EAAA,GAsBAT,GAAL,CACHA,EAAA,KAAO,OACPA,EAAA,IAAM,MACNA,EAAA,KAAO,OACPA,EAAA,OAAS,QAAA,GAJDS,EAAA,eAAAA,EAAA,aAAA,CAAA,EAAA,GAOAN,GAAL,CACHA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,KAAO,OACPA,EAAA,QAAU,UACVA,EAAA,OAAS,QAAA,GANDM,EAAA,kBAAAA,EAAA,gBAAA,CAAA,EAAA,GASAL,GAAL,CACHA,EAAA,KAAO,OACPA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,YAAc,cACdA,EAAA,SAAW,UAAA,GALHK,EAAA,WAAAA,EAAA,SAAA,CAAA,EAAA,GAQAP,GAAL,CACHA,EAAA,UAAY,YACZA,EAAA,OAAS,SACTA,EAAA,QAAU,UACVA,EAAA,wBAA0B,0BAC1BA,EAAA,QAAU,SAAA,GALFO,EAAA,mBAAAA,EAAA,iBAAA,CAAA,EAAA,GAQA5L,GAAL,CACHA,EAAA,KAAO,OACPA,EAAA,SAAW,WACXA,EAAA,SAAW,UAAA,GAHH4L,EAAA,oBAAAA,EAAA,kBAAA,CAAA,EAAA,GAMAD,GAAL,CACHA,EAAA,QAAU,UACVA,EAAA,SAAW,WACXA,EAAA,UAAY,YACZA,EAAA,MAAQ,QACRA,EAAA,oBAAsB,sBACtBA,EAAA,yBAA2B,2BAC3BA,EAAA,UAAY,WAAA,GAPJC,EAAA,mCAAAA,EAAA,iCAAA,CAAA,EAAA,CAAA,GAplCEA,EAAAA,QAAAA,QAAA,CAAA,EAAA,ECPP,IAAKE,IAAAA,IAIVA,EAAA,OAAS,SAITA,EAAA,QAAU,UARAA,IAAAA,IAAA,CAAA,CAAA,ECFAC,IAAAA,IACVA,EAAA,KAAO,OACPA,EAAA,UAAY,YACZA,EAAA,OAAS,SACTA,EAAA,QAAU,UAJAA,IAAAA,IAAA,CAAA,CAAA,ECAAC,IAAAA,IAEVA,EAAA,OAAU,SAEVA,EAAA,OAAS,SAETA,EAAA,OAAS,SANCA,IAAAA,IAAA,CAAA,CAAA,ECSL,MAAMC,GACb,CACE,CACE,KAAQ,IACR,OAAU,cACV,OAAU,qBACV,OAAU,aACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,KACnB,kBAAqB,sEACrB,cAAiB,GACjB,cAAiB,kEACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,0EACV,OAAU,uDACV,OAAU,+DACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,KACnB,kBAAqB,sEACrB,cAAiB,GACjB,cAAiB,kEACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,wDACV,OAAU,wDACV,OAAU,sDACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,KACnB,kBAAqB,sEACrB,cAAiB,GACjB,cAAiB,kEACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,uDACV,OAAU,qDACV,OAAU,oDACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,KACnB,kBAAqB,sEACrB,cAAiB,GACjB,cAAiB,kEACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,6DACV,OAAU,wDACV,OAAU,6DACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,KACnB,kBAAqB,sEACrB,cAAiB,GACjB,cAAiB,kEACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,kFACV,OAAU,2EACV,OAAU,oFACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,KACnB,kBAAqB,sEACrB,cAAiB,GACjB,cAAiB,kEACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,gBACV,OAAU,aACV,OAAU,SACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,cACnB,kBAAqB,KACrB,cAAiB;AAAA,uDACjB,cAAiB,2HACjB,cAAiB,8FACjB,uBAA0B;AAAA,wCAC1B,uBAA0B,2FAC1B,uBAA0B,kGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,yCAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,iBACV,OAAU,gBACV,OAAU,kBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,gBACnB,kBAAqB,KACrB,cAAiB;AAAA,yBACjB,cAAiB,6HACjB,cAAiB,oHACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yDAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4JAC1B,uBAA0B,s4BAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,gDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,YACV,OAAU,cACV,OAAU,WACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,WACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mGACjB,cAAiB;AAAA;AAAA,kWACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+CACjB,uBAA0B,6FAC1B,uBAA0B,gFAC1B,uBAA0B,sFAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,gDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,uDACV,OAAU,uCACV,OAAU,mCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,2CACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDACjB,cAAiB;AAAA;AAAA,sLACjB,cAAiB;AAAA;AAAA;AAAA;AAAA,yCACjB,uBAA0B;AAAA;AAAA,uCAC1B,uBAA0B,uHAC1B,uBAA0B,8HAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,4CAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,8BACV,OAAU,iBACV,OAAU,2BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,4BACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA,oDACjB,cAAiB,+IACjB,cAAiB,4IACjB,uBAA0B;AAAA,0DAC1B,uBAA0B,kGAC1B,uBAA0B,kGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2DAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,4BACV,OAAU,iBACV,OAAU,mBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,0BACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA,6DACjB,cAAiB,mJACjB,cAAiB,gJACjB,uBAA0B;AAAA,wDAC1B,uBAA0B,kGAC1B,uBAA0B,0GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2DAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,0BACV,OAAU,gBACV,OAAU,sBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,wBACnB,kBAAqB,KACrB,cAAiB,oDACjB,cAAiB,gDACjB,cAAiB,yDACjB,uBAA0B;AAAA,0DAC1B,uBAA0B,+FAC1B,uBAA0B,8GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2DAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,6BACV,OAAU,0BACV,OAAU,gCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,2BACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCACjB,cAAiB;AAAA;AAAA,iPACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wCACjB,uBAA0B;AAAA,+CAC1B,uBAA0B,qGAC1B,uBAA0B,mHAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,yDAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,gCACV,OAAU,kCACV,OAAU,sCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,4BACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uIACjB,cAAiB;AAAA;AAAA;AAAA;AAAA,+TACjB,cAAiB,mHACjB,uBAA0B;AAAA;AAAA,kBAC1B,uBAA0B,gFAC1B,uBAA0B,sVAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,6CACA,kDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,cACV,OAAU,gBACV,OAAU,cACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,aACnB,kBAAqB,KACrB,cAAiB,6CACjB,cAAiB,uDACjB,cAAiB,2CACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gMAC1B,uBAA0B,o2BAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,0CACA,qDAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,eACV,OAAU,qBACV,OAAU,+BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,cACnB,kBAAqB,KACrB,cAAiB;AAAA,QACjB,cAAiB,2JACjB,cAAiB,8JACjB,uBAA0B;AAAA,wBAC1B,uBAA0B,+EAC1B,uBAA0B,0FAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2DAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,qBACV,OAAU,iBACV,OAAU,+BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,mBACnB,kBAAqB,KACrB,cAAiB,iDACjB,cAAiB,6CACjB,cAAiB,0CACjB,uBAA0B;AAAA,sCAC1B,uBAA0B,+EAC1B,uBAA0B,0FAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2DAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,gBACV,OAAU,WACV,OAAU,kBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,eACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,sBACjB,cAAiB;AAAA;AAAA,qPACjB,cAAiB;AAAA;AAAA;AAAA;AAAA,gCACjB,uBAA0B;AAAA,kCAC1B,uBAA0B,8EAC1B,uBAA0B,6FAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,4CAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,cACV,OAAU,gBACV,OAAU,qBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,aACnB,kBAAqB,KACrB,cAAiB,mCACjB,cAAiB,+CACjB,cAAiB,+CACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gMAC1B,uBAA0B,wvBAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,iDACV,OAAU,wBACV,OAAU,+BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,+BACnB,kBAAqB,KACrB,cAAiB;AAAA,kDACjB,cAAiB,gGACjB,cAAiB,kFACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8GAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wUAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,0CACA,qDAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,qBACV,OAAU,oBACV,OAAU,uBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,oBACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,gFACjB,cAAiB,gOACjB,cAAiB,yTACjB,uBAA0B;AAAA,kCAC1B,uBAA0B,6FAC1B,uBAA0B,oGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,4DACA,qDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,4BACV,OAAU,qBACV,OAAU,mBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,0BACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,iCACjB,cAAiB,yOACjB,cAAiB,+PACjB,uBAA0B;AAAA,0CAC1B,uBAA0B,gGAC1B,uBAA0B,oGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2DAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,iCACV,OAAU,eACV,OAAU,eACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,+BACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA,gGACjB,cAAiB,kOACjB,cAAiB,wPACjB,uBAA0B;AAAA,+CAC1B,uBAA0B,kFAC1B,uBAA0B,0FAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,4DACA,qDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,gCACV,OAAU,wBACV,OAAU,uBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,4BACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA,gCACjB,cAAiB,+LACjB,cAAiB,sMACjB,uBAA0B;AAAA,0CAC1B,uBAA0B;AAAA;AAAA,qPAC1B,uBAA0B,kGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,4CAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,aACV,OAAU,iBACV,OAAU,gBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,aACnB,kBAAqB,KACrB,cAAiB;AAAA,wFACjB,cAAiB,6GACjB,cAAiB,2GACjB,uBAA0B;AAAA,+BAC1B,uBAA0B,mFAC1B,uBAA0B,2FAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,gDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,2BACV,OAAU,sBACV,OAAU,+BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,yBACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA,QACjB,cAAiB,wJACjB,cAAiB,0KACjB,uBAA0B;AAAA,oBAC1B,uBAA0B,+EAC1B,uBAA0B,0FAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2DAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,wCACV,OAAU,qBACV,OAAU,mBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,oCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CACjB,cAAiB;AAAA;AAAA,8QACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBACjB,uBAA0B;AAAA,iDAC1B,uBAA0B,kGAC1B,uBAA0B,qGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,8CAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,oBACV,OAAU,eACV,OAAU,iBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,mBACnB,kBAAqB,KACrB,cAAiB;AAAA,0DACjB,cAAiB,gHACjB,cAAiB,qHACjB,uBAA0B;AAAA,gCAC1B,uBAA0B,kFAC1B,uBAA0B,4FAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,gDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,iDACV,OAAU,4BACV,OAAU,wCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,0CACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BACjB,cAAiB;AAAA;AAAA;AAAA,2BACjB,cAAiB,wSACjB,uBAA0B;AAAA;AAAA,YAC1B,uBAA0B,iGAC1B,uBAA0B,kHAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,yDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,oCACV,OAAU,uBACV,OAAU,qCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,gCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA,WACjB,cAAiB;AAAA;AAAA,4HACjB,cAAiB,wSACjB,uBAA0B;AAAA,8BAC1B,uBAA0B,+EAC1B,uBAA0B,0FAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,4BACV,OAAU,oCACV,OAAU,qDACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,yBACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBACjB,cAAiB;AAAA;AAAA;AAAA;AAAA,4CACjB,cAAiB;AAAA,mEACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAC1B,uBAA0B;AAAA;AAAA,qLAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,gDAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,gBACV,OAAU,gBACV,OAAU,cACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,cACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA,+CACjB,cAAiB,qJACjB,cAAiB,2IACjB,uBAA0B;AAAA,6BAC1B,uBAA0B,iFAC1B,uBAA0B,4FAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,yCAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,sDACV,OAAU,oDACV,OAAU,8EACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,sCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gNACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SACjB,uBAA0B;AAAA,gCAC1B,uBAA0B,4GAC1B,uBAA0B,6GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,yDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,wBACV,OAAU,oBACV,OAAU,uBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,sBACnB,kBAAqB,KACrB,cAAiB;AAAA,0FACjB,cAAiB,+JACjB,cAAiB,uKACjB,uBAA0B;AAAA,kCAC1B,uBAA0B,yFAC1B,uBAA0B,kGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2DAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,uEACV,OAAU,6CACV,OAAU,qEACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,oDACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,eACjB,cAAiB;AAAA;AAAA;AAAA,iCACjB,cAAiB,0XACjB,uBAA0B;AAAA,iCAC1B,uBAA0B,8FAC1B,uBAA0B,6GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,yDAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,2BACV,OAAU,oBACV,OAAU,2BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,yBACnB,kBAAqB,KACrB,cAAiB,8EACjB,cAAiB,qEACjB,cAAiB,qEACjB,uBAA0B;AAAA,yCAC1B,uBAA0B,yFAC1B,uBAA0B,sGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2DAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,uBACV,OAAU,gBACV,OAAU,cACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,qBACnB,kBAAqB,KACrB,cAAiB;AAAA,gEACjB,cAAiB,+IACjB,cAAiB,4IACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kLAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qKAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,gDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,8BACV,OAAU,mBACV,OAAU,qBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,4BACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCACjB,cAAiB;AAAA;AAAA,yWACjB,cAAiB,0sBACjB,uBAA0B;AAAA,4CAC1B,uBAA0B,wFAC1B,uBAA0B,gGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,4CAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,wBACV,OAAU,gBACV,OAAU,qBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,uBACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA,+CACjB,cAAiB,gJACjB,cAAiB,4LACjB,uBAA0B;AAAA,qCAC1B,uBAA0B,qFAC1B,uBAA0B,gGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2DAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,uBACV,OAAU,eACV,OAAU,iBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,qBACnB,kBAAqB,KACrB,cAAiB,gDACjB,cAAiB,2CACjB,cAAiB,uCACjB,uBAA0B;AAAA,yCAC1B,uBAA0B,oFAC1B,uBAA0B,4FAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2DAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,2BACV,OAAU,cACV,OAAU,oBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,yBACnB,kBAAqB,KACrB,cAAiB,kDACjB,cAAiB,8CACjB,cAAiB,uDACjB,uBAA0B;AAAA,qCAC1B,uBAA0B,kFAC1B,uBAA0B,+FAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2DAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,6BACV,OAAU,wBACV,OAAU,6BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,2BACnB,kBAAqB,KACrB,cAAiB,GACjB,cAAiB,kdACjB,cAAiB,+hBACjB,uBAA0B,GAC1B,uBAA0B,yFAC1B,uBAA0B,sGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,6CACV,OAAU,wBACV,OAAU,wCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,yCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCACjB,cAAiB;AAAA;AAAA,6GACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BACjB,uBAA0B;AAAA,2DAC1B,uBAA0B,8FAC1B,uBAA0B,0HAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,wBACV,OAAU,YACV,OAAU,gBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,uBACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+FACjB,cAAiB;AAAA;AAAA,gHACjB,cAAiB,u4BACjB,uBAA0B;AAAA,0CAC1B,uBAA0B,+EAC1B,uBAA0B,2FAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,4CAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,sCACV,OAAU,wBACV,OAAU,6BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,gCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA,wEACjB,cAAiB,gNACjB,cAAiB;AAAA,cACjB,uBAA0B;AAAA,wDAC1B,uBAA0B,sGAC1B,uBAA0B,mHAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,8CAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,iBACV,OAAU,gBACV,OAAU,oBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,gBACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GACjB,cAAiB,y0CACjB,uBAA0B,kGAC1B,uBAA0B,sGAC1B,uBAA0B,iIAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,kDAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,cACV,OAAU,UACV,OAAU,YACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,aACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8DACjB,cAAiB;AAAA;AAAA,8SACjB,cAAiB,qdACjB,uBAA0B;AAAA,gCAC1B,uBAA0B,6EAC1B,uBAA0B,uFAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,+CACA,4CAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,kDACV,OAAU,+CACV,OAAU,4CACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,yCACnB,kBAAqB,KACrB,cAAiB;AAAA,mGACjB,cAAiB;AAAA;AAAA,8OACjB,cAAiB,+HACjB,uBAA0B,oiDAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6NAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA,mCAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,0CACA,qDAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,uEACV,OAAU,6EACV,OAAU,qFACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,uCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BACjB,cAAiB;AAAA;AAAA;AAAA;AAAA,kDACjB,cAAiB,0nBACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAC1B,uBAA0B,0cAC1B,uBAA0B,6VAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,8BACV,OAAU,kCACV,OAAU,8BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,2BACnB,kBAAqB,KACrB,cAAiB;AAAA,qBACjB,cAAiB,yEACjB,cAAiB,6DACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yKAC1B,uBAA0B;AAAA;AAAA,4CAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,mCACV,OAAU,+BACV,OAAU,kCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,8BACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2EACjB,cAAiB,suCACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAC1B,uBAA0B,kJAC1B,uBAA0B,yKAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,kDAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,2CACV,OAAU,wCACV,OAAU,uCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,uCACnB,kBAAqB,6CACrB,cAAiB,GACjB,cAAiB,wCACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,sCACV,OAAU,2BACV,OAAU,sCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,iCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA,iEACjB,cAAiB,6KACjB,cAAiB,sLACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wDAC1B,uBAA0B,kvBAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,uCACV,OAAU,4BACV,OAAU,qCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,kCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mGACjB,cAAiB;AAAA;AAAA,6PACjB,cAAiB,scACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAC1B,uBAA0B;AAAA;AAAA,wDAC1B,uBAA0B,qWAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,sCACV,OAAU,+CACV,OAAU,6CACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,kCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA,iDACjB,cAAiB;AAAA;AAAA,8JACjB,cAAiB;AAAA;AAAA,OACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iGAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kaAC1B,uBAA0B,8bAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,4CAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,4CACV,OAAU,6BACV,OAAU,0CACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,uCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eACjB,cAAiB;AAAA;AAAA,kfACjB,cAAiB,qgBACjB,uBAA0B,scAC1B,uBAA0B,+MAC1B,uBAA0B,6NAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,uBACV,OAAU,mBACV,OAAU,wBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,qBACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qCACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oRACjB,cAAiB,+hCACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+FAC1B,uBAA0B;AAAA;AAAA,6hBAC1B,uBAA0B,k2BAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,4CAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,sBACV,OAAU,wBACV,OAAU,+BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,mBACnB,kBAAqB,6CACrB,cAAiB;AAAA;AAAA,iCACjB,cAAiB,wCACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,2BACV,OAAU,eACV,OAAU,cACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,eACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA,qBACjB,cAAiB,8HACjB,cAAiB,+IACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0IAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA,mMAC1B,uBAA0B,+mBAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,wMACV,OAAU,0KACV,OAAU,+NACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,qDACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8EACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+FACjB,uBAA0B;AAAA,0BAC1B,uBAA0B,4DAC1B,uBAA0B,wEAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,mDAAA,EAEF,aAAgB,gBAAA,EAElB,CACE,KAAQ,IACR,OAAU,+GACV,OAAU,4FACV,OAAU,iIACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,qEACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDACjB,cAAiB;AAAA;AAAA,sSACjB,cAAiB,ukBACjB,uBAA0B,oHAC1B,uBAA0B,iGAC1B,uBAA0B,iGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,mDAAA,EAEF,aAAgB,gBAAA,EAElB,CACE,KAAQ,IACR,OAAU,mGACV,OAAU,8FACV,OAAU,gIACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,2DACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDACjB,cAAiB;AAAA;AAAA;AAAA;AAAA,iJACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8FACjB,uBAA0B,yHAC1B,uBAA0B,sGAC1B,uBAA0B,sGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,mDAAA,EAEF,aAAgB,gBAAA,EAElB,CACE,KAAQ,IACR,OAAU,6GACV,OAAU,qGACV,OAAU,0IACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,6EACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDACjB,cAAiB;AAAA;AAAA;AAAA;AAAA,iJACjB,cAAiB,+oBACjB,uBAA0B;AAAA,kDAC1B,uBAA0B,yHAC1B,uBAA0B,6HAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,mDAAA,EAEF,aAAgB,gBAAA,EAElB,CACE,KAAQ,IACR,OAAU,6FACV,OAAU,2FACV,OAAU,uHACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,qDACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDACjB,cAAiB;AAAA;AAAA;AAAA;AAAA,iJACjB,cAAiB,wkBACjB,uBAA0B,mHAC1B,uBAA0B,mGAC1B,uBAA0B,6FAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,mDAAA,EAEF,aAAgB,gBAAA,EAElB,CACE,KAAQ,IACR,OAAU,sCACV,OAAU,8BACV,OAAU,sCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,mCACnB,kBAAqB,KACrB,cAAiB,+CACjB,cAAiB,+CACjB,cAAiB,sDACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kDAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8MAC1B,uBAA0B,u6BAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,gDACV,OAAU,qCACV,OAAU,wCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,2CACnB,kBAAqB,6CACrB,cAAiB,GACjB,cAAiB,wCACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,0BACV,OAAU,wBACV,OAAU,4BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,uBACnB,kBAAqB,6CACrB,cAAiB,GACjB,cAAiB,wCACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,uDACV,OAAU,0CACV,OAAU,2CACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,gDACnB,kBAAqB,6CACrB,cAAiB,GACjB,cAAiB,wCACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,oBACV,OAAU,aACV,OAAU,gBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,mBACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yIACjB,cAAiB;AAAA;AAAA,gHACjB,cAAiB,szBACjB,uBAA0B,sFAC1B,uBAA0B,gFAC1B,uBAA0B,2FAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,4CAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,kBACV,OAAU,YACV,OAAU,kBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,iBACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yIACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0FACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BACjB,uBAA0B,sEAC1B,uBAA0B,uDAC1B,uBAA0B,kEAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,kDAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,yBACV,OAAU,6BACV,OAAU,sCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,uBACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA,yBACjB,cAAiB,mLACjB,cAAiB,wGACjB,uBAA0B;AAAA;AAAA;AAAA,yBAC1B,uBAA0B;AAAA,2GAC1B,uBAA0B;AAAA;AAAA;AAAA,yBAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,eACV,OAAU,aACV,OAAU,aACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,cACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qLACjB,cAAiB,k1CACjB,uBAA0B,mFAC1B,uBAA0B,gFAC1B,uBAA0B,wFAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,4CAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,8CACV,OAAU,2BACV,OAAU,iCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,wCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBACjB,cAAiB;AAAA;AAAA,6LACjB,cAAiB,+SACjB,uBAA0B,oGAC1B,uBAA0B,uFAC1B,uBAA0B,2GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,4CAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,iCACV,OAAU,aACV,OAAU,mBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,6BACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ugBACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAC1B,uBAA0B,ydAC1B,uBAA0B,ugBAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,yCAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,gFACV,OAAU,8DACV,OAAU,4EACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,uEACnB,kBAAqB,6CACrB,cAAiB,GACjB,cAAiB,8CACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,2BACV,OAAU,4BACV,OAAU,uCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,wBACnB,kBAAqB,KACrB,cAAiB,4HACjB,cAAiB,uHACjB,cAAiB,kIACjB,uBAA0B;AAAA,wEAC1B,uBAA0B,2GAC1B,uBAA0B,2HAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,yDAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,wDACV,OAAU,sDACV,OAAU,iEACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,wBACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA,2BACjB,cAAiB,qIACjB,cAAiB,0KACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA,mBAC1B,uBAA0B,2eAC1B,uBAA0B,0OAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,mEACV,OAAU,0DACV,OAAU,8EACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,0BACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CACjB,cAAiB;AAAA;AAAA,iLACjB,cAAiB,wWACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA,YAC1B,uBAA0B,yPAC1B,uBAA0B,2SAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,wDACV,OAAU,qCACV,OAAU,qCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,4CACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ifACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oWACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mcACjB,uBAA0B;AAAA;AAAA,wOAC1B,uBAA0B;AAAA,8SAC1B,uBAA0B;AAAA;AAAA,wLAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,sDACA,4CAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,qDACV,OAAU,6CACV,OAAU,iDACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,0CACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4OACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iLACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iMACjB,uBAA0B,4FAC1B,uBAA0B,oFAC1B,uBAA0B,sGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,sDACA,4CAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,wBACV,OAAU,gBACV,OAAU,qBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,sBACnB,kBAAqB,KACrB,cAAiB;AAAA,yBACjB,cAAiB,8DACjB,cAAiB,6DACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iLAC1B,uBAA0B;AAAA;AAAA,oIAC1B,uBAA0B,+nBAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,8CACV,OAAU,sCACV,OAAU,uCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,wCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iDACjB,cAAiB;AAAA;AAAA,gNACjB,cAAiB,8dACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA,+BAC1B,uBAA0B;AAAA;AAAA,mCAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2CAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,yCACV,OAAU,sCACV,OAAU,0BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,mCACnB,kBAAqB,6CACrB,cAAiB;AAAA;AAAA;AAAA;AAAA,qBACjB,cAAiB,4FACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,+BACV,OAAU,iBACV,OAAU,iBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,4BACnB,kBAAqB,cACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+CACjB,cAAiB;AAAA;AAAA;AAAA;AAAA,4RACjB,cAAiB,wkBACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA,qCAC1B,uBAA0B;AAAA;AAAA,gNAC1B,uBAA0B,kLAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,oCACV,OAAU,oCACV,OAAU,mCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,iCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qLACjB,cAAiB,okCACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA,qLAC1B,uBAA0B,0eAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,4CAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,kDACV,OAAU,mCACV,OAAU,0CACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,6CACnB,kBAAqB,6CACrB,cAAiB,GACjB,cAAiB,wCACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,qCACV,OAAU,kCACV,OAAU,6BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,+BACnB,kBAAqB,6CACrB,cAAiB,GACjB,cAAiB,oCACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,wCACV,OAAU,sCACV,OAAU,0CACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,iCACnB,kBAAqB,6CACrB,cAAiB,GACjB,cAAiB,oCACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,sDACV,OAAU,qDACV,OAAU,mEACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,gDACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0MACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBACjB,uBAA0B;AAAA,YAC1B,uBAA0B,mDAC1B,uBAA0B,wDAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,gDAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,kDACV,OAAU,8CACV,OAAU,8DACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,4CACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6CACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+LACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCACjB,uBAA0B;AAAA,iBAC1B,uBAA0B,mDAC1B,uBAA0B,4DAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,gDAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,oBACV,OAAU,kBACV,OAAU,kBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,mBACnB,kBAAqB,mDACrB,cAAiB;AAAA;AAAA;AAAA,oCACjB,cAAiB;AAAA;AAAA,4IACjB,cAAiB,4nBACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,8DAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,mGACV,OAAU,0FACV,OAAU,6FACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,sCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wCACjB,cAAiB;AAAA;AAAA,iEACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BACjB,uBAA0B;AAAA;AAAA,kFAC1B,uBAA0B;AAAA;AAAA;AAAA;AAAA,iEAC1B,uBAA0B,yNAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,0CACV,OAAU,kDACV,OAAU,sDACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,mCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mEACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uEACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA,8DAC1B,uBAA0B;AAAA;AAAA,kDAC1B,uBAA0B,gQAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,sCACV,OAAU,iCACV,OAAU,mCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,0BACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBACjB,cAAiB;AAAA;AAAA;AAAA;AAAA,yFACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gDACjB,uBAA0B,2FAC1B,uBAA0B,6FAC1B,uBAA0B,8GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,iCACV,OAAU,yCACV,OAAU,+CACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,wBACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oFACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6KACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBACjB,uBAA0B,4FAC1B,uBAA0B,qFAC1B,uBAA0B,sGAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,uCACV,OAAU,0BACV,OAAU,yBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,0BACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8RACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QACjB,uBAA0B;AAAA,gBAC1B,uBAA0B,gDAC1B,uBAA0B,2DAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,qCACV,OAAU,kCACV,OAAU,iDACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,iCACnB,kBAAqB,KACrB,cAAiB,wVACjB,cAAiB,wVACjB,cAAiB,mYACjB,uBAA0B;AAAA,sVAC1B,uBAA0B;AAAA,ySAC1B,uBAA0B;AAAA,iWAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,4BACV,OAAU,+BACV,OAAU,wCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,wBACnB,kBAAqB,KACrB,cAAiB;AAAA,sLACjB,cAAiB;AAAA,qJACjB,cAAiB;AAAA,0JACjB,uBAA0B;AAAA;AAAA,0KAC1B,uBAA0B;AAAA,8QAC1B,uBAA0B;AAAA;AAAA,qMAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,sCACV,OAAU,gCACV,OAAU,8CACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,iCACnB,kBAAqB,KACrB,cAAiB;AAAA,4VACjB,cAAiB;AAAA,gSACjB,cAAiB;AAAA,wTACjB,uBAA0B;AAAA,qdAC1B,uBAA0B;AAAA,yXAC1B,uBAA0B;AAAA,ieAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,qDAAA,EAEF,aAAgB,iBAAA,EAElB,CACE,KAAQ,IACR,OAAU,wFACV,OAAU,0GACV,OAAU,yIACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,8CACnB,kBAAqB,wGACrB,cAAiB,4hBACjB,cAAiB,8ZACjB,cAAiB,udACjB,uBAA0B,iEAC1B,uBAA0B,2CAC1B,uBAA0B,2DAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,yCACV,OAAU,6BACV,OAAU,2BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,GACd,gBAAmB,qCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2EACjB,cAAiB,0iCACjB,uBAA0B;AAAA,qDAC1B,uBAA0B,gKAC1B,uBAA0B,0FAC1B,YAAe,GACf,eAAkB,GAClB,SAAY,CACV,+CACA,4CAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,kBACV,OAAU,iBACV,OAAU,wBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,iBACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBACjB,cAAiB;AAAA;AAAA,0GACjB,cAAiB,8OACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,uBACV,OAAU,wBACV,OAAU,4BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,qBACnB,kBAAqB,6CACrB,cAAiB;AAAA;AAAA,oBACjB,cAAiB,qEACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,gBACV,OAAU,YACV,OAAU,YACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,cACnB,kBAAqB,KACrB,cAAiB,gKACjB,cAAiB,oKACjB,cAAiB,sJACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,0BACV,OAAU,oBACV,OAAU,mBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,uBACnB,kBAAqB,KACrB,cAAiB,kHACjB,cAAiB,2FACjB,cAAiB,yGACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,aACV,OAAU,oBACV,OAAU,yBACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,YACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCACjB,cAAiB;AAAA;AAAA;AAAA;AAAA,gMACjB,cAAiB,miBACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,oDACV,OAAU,yCACV,OAAU,sCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,GACd,gBAAmB,+CACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4EACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4CACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CAC1B,uBAA0B;AAAA;AAAA,2fAC1B,uBAA0B,mmBAC1B,YAAe,GACf,eAAkB,GAClB,SAAY,CACV,4CAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,gDACV,OAAU,qCACV,OAAU,gDACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,iCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CACjB,cAAiB;AAAA;AAAA;AAAA;AAAA,yGACjB,cAAiB,ufACjB,uBAA0B;AAAA;AAAA,4CAC1B,uBAA0B,mFAC1B,uBAA0B,mGAC1B,YAAe,GACf,eAAkB,GAClB,SAAY,CACV,8CAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,qBACV,OAAU,cACV,OAAU,WACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,UACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA,eACjB,cAAiB;AAAA;AAAA,+DACjB,cAAiB,+LACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,oEACV,OAAU,iEACV,OAAU,4EACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,6DACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sLACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,WACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2CAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,6FACV,OAAU,uFACV,OAAU,qHACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,kFACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gLACjB,cAAiB,gqBACjB,uBAA0B,GAC1B,uBAA0B,6FAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,GAClB,SAAY,CACV,2CAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,2CACV,OAAU,mCACV,OAAU,uCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,uCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,4DACjB,cAAiB;AAAA;AAAA,mRACjB,cAAiB,8tBACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,4CACV,OAAU,oCACV,OAAU,mDACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,wCACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA,2GACjB,cAAiB;AAAA;AAAA,0EACjB,cAAiB;AAAA;AAAA;AAAA;AAAA,uCACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,iDACV,OAAU,sCACV,OAAU,gDACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,6CACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA,YACjB,cAAiB;AAAA;AAAA,4EACjB,cAAiB,oOACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,wDACV,OAAU,uCACV,OAAU,iCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,mDACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,i1BACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6tBACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,usBACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,GAClB,SAAY,CACV,sDACA,4CAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,kBACV,OAAU,2BACV,OAAU,mCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,gBACnB,kBAAqB,4DACrB,cAAiB,GACjB,cAAiB,4KACjB,cAAiB,GACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CAAA,EACZ,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,YACV,OAAU,cACV,OAAU,YACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,YACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA,6BACjB,cAAiB;AAAA;AAAA,sGACjB,cAAiB;AAAA;AAAA,yBACjB,uBAA0B;AAAA,0BAC1B,uBAA0B,6FAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,GAClB,SAAY,CACV,8CAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,iDACV,OAAU,oDACV,OAAU,qEACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,6CACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mEACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wTACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBACjB,uBAA0B,GAC1B,uBAA0B,GAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,2CAAA,EAEF,aAAgB,UAAA,EAElB,CACE,KAAQ,IACR,OAAU,+BACV,OAAU,kCACV,OAAU,oCACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,GACd,gBAAmB,6BACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wCACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4HACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBACjB,uBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CAC1B,uBAA0B;AAAA;AAAA,4XAC1B,uBAA0B;AAAA;AAAA;AAAA,4BAC1B,YAAe,GACf,eAAkB,EAClB,SAAY,CACV,8CAAA,EAEF,aAAgB,YAAA,EAElB,CACE,KAAQ,IACR,OAAU,8CACV,OAAU,mCACV,OAAU,6BACV,oBAAuB,GACvB,iBAAoB,GACpB,kBAAqB,GACrB,sBAAyB,GACzB,gBAAmB,GACnB,4BAA+B,GAC/B,WAAc,EACd,gBAAmB,0CACnB,kBAAqB,KACrB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ySACjB,cAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCACjB,uBAA0B;AAAA;AAAA,qKAC1B,uBAA0B,yLAC1B,uBAA0B,GAC1B,YAAe,GACf,eAAkB,GAClB,SAAY,CACV,4CAAA,EAEF,aAAgB,YAAA,CAEpB,EClpGMC,GAAK,CAAC,OAAS,CAAC,KAAO,CAAC,mBAAqB,CAAC,QAAU,aAAa,gBAAkB,eAAe,EAAE,iBAAmB,CAAC,UAAY,qBAAqB,gBAAkB,2BAA2B,cAAgB,kBAAkB,UAAY,iBAAiB,gBAAkB,iBAAiB,qBAAuB,gBAAgB,WAAa,4CAA4C,EAAE,eAAiB,CAAC,cAAgB,CAAC,YAAc,CAAC,gBAAkB,+CAA+C,sBAAwB,+CAA+C,sBAAwB,gDAAgD,MAAQ,kCAAkC,kBAAoB,kCAAkC,QAAU,qCAAqC,EAAE,cAAgB,uCAAuC,kBAAoB,sCAAsC,QAAU,CAAC,OAAS,mBAAmB,eAAiB,wCAAwC,eAAiB,uCAAuC,cAAgB,4DAA4D,SAAW,mCAAmC,aAAe,0DAA0D,QAAU,wBAAwB,EAAE,iBAAmB,qCAAqC,aAAe,kBAAkB,CAAC,EAAE,cAAgB,CAAC,MAAQ,UAAU,KAAO,WAAW,MAAQ,WAAW,aAAe,cAAc,WAAa,CAAC,YAAc,uBAAuB,YAAc,0CAA0C,EAAE,MAAQ,CAAC,YAAc,WAAW,YAAc,yBAAyB,EAAE,SAAW,CAAC,YAAc,+BAA+B,YAAc,0CAA0C,EAAE,gBAAkB,CAAC,YAAc,uBAAuB,YAAc,0CAA0C,EAAE,WAAa,CAAC,YAAc,WAAW,YAAc,6BAA6B,EAAE,cAAgB,CAAC,YAAc,cAAc,YAAc,uBAAuB,EAAE,YAAc,CAAC,IAAM,KAAK,gBAAkB,sBAAsB,oBAAsB,YAAY,oBAAsB,aAAa,aAAe,sBAAsB,CAAC,EAAE,iBAAmB,CAAC,mBAAqB,CAAC,WAAa,gGAAgG,qBAAuB,wFAAwF,CAAC,EAAE,cAAgB,CAAC,QAAU,aAAa,gBAAkB,eAAe,EAAE,aAAe,CAAC,aAAe,cAAc,iBAAmB,sBAAsB,EAAE,SAAW,CAAC,OAAS,CAAC,UAAY,aAAa,YAAc,+HAA+H,OAAS,qBAAqB,UAAY,cAAc,QAAU,eAAe,OAAS,OAAO,KAAO,oBAAoB,OAAS,uBAAuB,EAAE,QAAU,CAAC,UAAY,iBAAiB,MAAQ,0BAA0B,UAAY,6IAA6I,YAAc,mGAAmG,OAAS,0BAA0B,OAAS,OAAO,KAAO,cAAc,YAAc,uCAAuC,iBAAmB,CAAC,KAAO,6IAA6I,EAAE,iBAAmB,mCAAmC,SAAW,eAAe,oBAAsB,cAAc,aAAe,WAAW,cAAgB,mBAAmB,aAAe,4BAA4B,IAAM,iBAAiB,QAAU,gBAAgB,sBAAwB,0BAA0B,WAAa,8BAA8B,cAAgB,0BAA0B,cAAgB,wBAAwB,EAAE,SAAW,CAAC,MAAQ,cAAc,UAAY,iBAAiB,YAAc,sIAAsI,OAAS,uBAAuB,UAAY,gBAAgB,QAAU,iBAAiB,OAAS,OAAO,KAAO,uBAAuB,OAAS,0BAA0B,EAAE,QAAU,CAAC,UAAY,cAAc,YAAc,gEAAgE,OAAS,0BAA0B,KAAO,aAAa,EAAE,QAAU,CAAC,UAAY,kBAAkB,YAAc,2FAA2F,CAAC,EAAE,mBAAqB,CAAC,OAAS,CAAC,IAAM,OAAO,kBAAoB,kBAAkB,OAAS,cAAc,aAAe,CAAC,QAAU,YAAY,QAAU,cAAc,QAAU,YAAY,eAAiB,gBAAgB,YAAc,gBAAgB,kBAAoB,mCAAmC,EAAE,MAAQ,CAAC,kBAAoB,+BAA+B,kBAAoB,0BAA0B,WAAa,iBAAiB,SAAW,UAAU,WAAa,gBAAgB,MAAQ,OAAO,eAAiB,gBAAgB,CAAC,EAAE,UAAY,CAAC,YAAc,aAAa,QAAU,UAAU,QAAU,UAAU,QAAU,UAAU,OAAS,SAAS,kBAAoB,qBAAqB,UAAY,aAAa,QAAU,UAAU,MAAQ,QAAQ,UAAY,YAAY,QAAU,WAAW,aAAe,cAAc,OAAS,SAAS,QAAU,SAAS,QAAU,UAAU,WAAa,aAAa,SAAW,WAAW,QAAU,eAAe,QAAU,SAAS,OAAS,SAAS,MAAQ,QAAQ,QAAU,UAAU,OAAS,SAAS,QAAU,UAAU,qBAAuB,yBAAyB,SAAW,WAAW,OAAS,WAAW,OAAS,SAAS,SAAW,WAAW,YAAc,eAAe,QAAU,UAAU,SAAW,WAAW,SAAW,UAAU,OAAS,SAAS,cAAgB,kBAAkB,UAAY,YAAY,uBAAyB,0BAA0B,KAAO,OAAO,MAAQ,QAAQ,MAAQ,QAAQ,SAAW,kBAAkB,SAAW,WAAW,QAAU,UAAU,iBAAmB,4BAA4B,cAAgB,mDAAmD,YAAc,eAAe,UAAY,aAAa,QAAU,UAAU,KAAO,QAAQ,QAAU,UAAU,OAAS,SAAS,cAAgB,SAAS,QAAU,SAAS,SAAW,WAAW,SAAW,WAAW,kBAAoB,2BAA2B,UAAY,YAAY,QAAU,UAAU,MAAQ,SAAS,WAAa,cAAc,QAAU,UAAU,QAAU,OAAO,SAAW,WAAW,SAAW,UAAU,aAAe,YAAY,KAAO,QAAQ,OAAS,SAAS,MAAQ,QAAQ,OAAS,SAAS,QAAU,UAAU,QAAU,QAAQ,MAAQ,QAAQ,OAAS,UAAU,UAAY,YAAY,QAAU,UAAU,WAAa,aAAa,UAAY,YAAY,OAAS,SAAS,aAAe,gBAAgB,OAAS,SAAS,MAAQ,QAAQ,SAAW,WAAW,QAAU,SAAS,QAAU,UAAU,MAAQ,QAAQ,UAAY,YAAY,KAAO,OAAO,KAAO,OAAO,QAAU,UAAU,OAAS,SAAS,MAAQ,SAAS,WAAa,oBAAoB,QAAU,UAAU,MAAQ,SAAS,SAAW,WAAW,WAAa,YAAY,MAAQ,QAAQ,WAAa,uDAAuD,WAAa,iCAAiC,OAAS,SAAS,OAAS,SAAS,UAAY,WAAW,KAAO,OAAO,OAAS,SAAS,QAAU,UAAU,QAAU,UAAU,QAAU,UAAU,MAAQ,QAAQ,cAAgB,gBAAgB,UAAY,UAAU,WAAa,YAAY,WAAa,aAAa,QAAU,UAAU,OAAS,SAAS,SAAW,UAAU,SAAW,aAAa,KAAO,OAAO,MAAQ,QAAQ,gBAAkB,mBAAmB,WAAa,aAAa,WAAa,aAAa,UAAY,YAAY,OAAS,UAAU,WAAa,aAAa,QAAU,UAAU,OAAS,SAAS,SAAW,WAAW,WAAa,aAAa,QAAU,UAAU,WAAa,WAAW,QAAU,kBAAkB,QAAU,UAAU,MAAQ,QAAQ,YAAc,aAAa,WAAa,gBAAgB,UAAY,YAAY,MAAQ,QAAQ,QAAU,UAAU,eAAiB,oBAAoB,OAAS,QAAQ,KAAO,OAAO,SAAW,WAAW,MAAQ,QAAQ,qBAAuB,qBAAqB,OAAS,SAAS,eAAiB,oBAAoB,SAAW,WAAW,KAAO,OAAO,YAAc,cAAc,OAAS,QAAQ,SAAW,WAAW,WAAa,cAAc,MAAQ,QAAQ,QAAU,UAAU,kBAAoB,SAAS,OAAS,kBAAkB,aAAe,kBAAkB,OAAS,SAAS,mBAAqB,uBAAuB,WAAa,cAAc,6BAA+B,+BAA+B,MAAQ,QAAQ,UAAY,aAAa,mBAAqB,uBAAuB,YAAc,eAAe,QAAU,UAAU,OAAS,SAAS,WAAa,aAAa,YAAc,eAAe,UAAY,YAAY,SAAW,WAAW,SAAW,WAAW,eAAiB,gBAAgB,QAAU,UAAU,YAAc,gBAAgB,WAAa,cAAc,MAAQ,UAAU,SAAW,YAAY,MAAQ,QAAQ,SAAW,WAAW,OAAS,SAAS,YAAc,UAAU,MAAQ,QAAQ,aAAe,cAAc,OAAS,SAAS,SAAW,WAAW,SAAW,UAAU,KAAO,OAAO,MAAQ,QAAQ,kBAAoB,qBAAqB,QAAU,UAAU,OAAS,SAAS,SAAW,mBAAmB,aAAe,eAAe,OAAS,SAAS,QAAU,UAAU,mBAAqB,oBAAoB,cAAgB,YAAY,mBAAqB,iCAAiC,aAAe,cAAc,4BAA8B,iDAAiD,QAAU,UAAU,WAAa,aAAa,QAAU,UAAU,UAAY,YAAY,QAAU,UAAU,cAAgB,sBAAsB,MAAQ,QAAQ,SAAW,WAAW,OAAS,SAAS,MAAQ,oCAAoC,CAAC,CAAC,EAAE,KAAO,CAAC,cAAgB,CAAC,OAAS,CAAC,YAAc,kCAAkC,MAAQ,aAAa,WAAa,cAAc,KAAO,OAAO,WAAa,gBAAgB,UAAY,gBAAgB,MAAQ,mBAAmB,MAAQ,cAAc,eAAiB,CAAC,aAAe,2BAA2B,YAAc,cAAc,QAAU,eAAe,IAAM,QAAQ,KAAO,WAAW,eAAiB,WAAW,qBAAuB,iBAAiB,qBAAuB,kBAAkB,EAAE,UAAY,WAAW,qBAAuB,uCAAuC,KAAO,CAAC,cAAgB,qMAAqM,aAAe,sMAAsM,SAAW,CAAC,QAAU,cAAc,kBAAoB,2BAA2B,IAAM,gCAAgC,aAAe,oEAAoE,QAAU,iBAAiB,UAAY,iBAAiB,aAAe,oBAAoB,kBAAoB,mBAAmB,MAAQ,6EAA6E,MAAQ,8CAA8C,EAAE,kBAAoB,4CAA4C,yBAA2B,sIAAsI,uBAAyB,sCAAsC,iBAAmB,yBAAyB,eAAiB,8CAA8C,CAAC,EAAE,YAAc,CAAC,YAAc,0BAA0B,oBAAsB,2BAA2B,CAAC,CAAC,EAAE,MAAQ,CAAC,gCAAkC,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4CAA2W,QAAU,gCAAgC,EAAE,8BAAgC,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4CAAka,QAAU,oCAAoC,EAAE,iCAAmC,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4CAAygB,QAAU,oCAAoC,EAAE,mCAAqC,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAA45B,QAAU,4CAA4C,EAAE,+BAAiC,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qGAA4vB,QAAU,4CAA4C,EAAE,mBAAqB,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAA84H,QAAU,qDAAqD,EAAE,gBAAkB,CAAC,KAAO,qBAAqB,QAAU,yBAAyB,EAAE,oBAAsB,CAAC,KAAO,sBAAsB,EAAE,8BAAgC,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAmN,QAAU,kDAAkD,EAAE,uBAAyB,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAid,QAAU,mDAAmD,CAAC,EAAE,KAAO,CAAC,YAAc,CAAC,UAAY,CAAC,MAAQ,YAAY,EAAE,YAAc,CAAC,MAAQ,UAAU,EAAE,gBAAkB,CAAC,MAAQ,mBAAmB,EAAE,eAAiB,CAAC,MAAQ,aAAa,EAAE,QAAU,CAAC,MAAQ,qBAAqB,EAAE,sBAAwB,CAAC,MAAQ,qCAAqC,EAAE,mBAAqB,CAAC,MAAQ,mCAAmC,EAAE,WAAa,CAAC,MAAQ,UAAU,EAAE,cAAgB,CAAC,MAAQ,aAAa,EAAE,cAAgB,CAAC,MAAQ,oBAAoB,EAAE,UAAY,CAAC,MAAQ,eAAe,CAAC,EAAE,mBAAqB,CAAC,UAAY,CAAC,MAAQ,YAAY,EAAE,QAAU,CAAC,MAAQ,cAAc,EAAE,MAAQ,CAAC,MAAQ,YAAY,EAAE,MAAQ,CAAC,MAAQ,yBAAyB,EAAE,WAAa,CAAC,MAAQ,iBAAiB,EAAE,OAAS,CAAC,MAAQ,uBAAuB,EAAE,YAAc,CAAC,MAAQ,aAAa,CAAC,EAAE,QAAU,CAAC,KAAO,CAAC,MAAQ,YAAY,MAAQ,IAAI,EAAE,KAAO,CAAC,MAAQ,UAAU,MAAQ,IAAI,EAAE,KAAO,CAAC,MAAQ,cAAc,MAAQ,IAAI,EAAE,KAAO,CAAC,MAAQ,UAAU,MAAQ,IAAI,EAAE,KAAO,CAAC,MAAQ,YAAY,MAAQ,IAAI,EAAE,KAAO,CAAC,MAAQ,WAAW,MAAQ,IAAI,EAAE,KAAO,CAAC,MAAQ,YAAY,MAAQ,IAAI,CAAC,EAAE,cAAgB,CAAC,OAAS,CAAC,MAAQ,WAAW,MAAQ,OAAO,EAAE,OAAS,CAAC,MAAQ,WAAW,MAAQ,OAAO,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,QAAQ,EAAE,OAAS,CAAC,MAAQ,WAAW,MAAQ,OAAO,EAAE,OAAS,CAAC,MAAQ,WAAW,MAAQ,OAAO,EAAE,OAAS,CAAC,MAAQ,UAAU,MAAQ,MAAM,EAAE,OAAS,CAAC,MAAQ,WAAW,MAAQ,OAAO,EAAE,OAAS,CAAC,MAAQ,SAAS,MAAQ,KAAK,EAAE,OAAS,CAAC,MAAQ,UAAU,MAAQ,MAAM,EAAE,QAAU,CAAC,MAAQ,UAAU,MAAQ,MAAM,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,QAAQ,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,OAAO,CAAC,EAAE,WAAa,CAAC,YAAc,CAAC,MAAQ,eAAe,EAAE,KAAO,CAAC,MAAQ,OAAO,EAAE,cAAgB,CAAC,MAAQ,UAAU,EAAE,kBAAoB,CAAC,MAAQ,+BAA+B,EAAE,UAAY,CAAC,MAAQ,qCAAqC,EAAE,SAAW,CAAC,MAAQ,YAAY,EAAE,WAAa,CAAC,MAAQ,wBAAwB,EAAE,aAAe,CAAC,MAAQ,oBAAoB,EAAE,SAAW,CAAC,MAAQ,iCAAiC,EAAE,kBAAoB,CAAC,MAAQ,YAAY,EAAE,wBAA0B,CAAC,MAAQ,cAAc,EAAE,UAAY,CAAC,MAAQ,sBAAsB,EAAE,gBAAkB,CAAC,MAAQ,gCAAgC,EAAE,qBAAuB,CAAC,MAAQ,eAAe,EAAE,eAAiB,CAAC,MAAQ,yBAAyB,EAAE,MAAQ,CAAC,MAAQ,0BAA0B,EAAE,uBAAyB,CAAC,MAAQ,aAAa,EAAE,OAAS,CAAC,MAAQ,+BAA+B,EAAE,UAAY,CAAC,MAAQ,kCAAkC,EAAE,OAAS,CAAC,MAAQ,eAAe,CAAC,EAAE,iBAAmB,CAAC,UAAY,CAAC,MAAQ,eAAe,EAAE,eAAiB,CAAC,MAAQ,aAAa,EAAE,YAAc,CAAC,MAAQ,WAAW,EAAE,eAAiB,CAAC,MAAQ,YAAY,EAAE,aAAe,CAAC,MAAQ,uCAAuC,EAAE,QAAU,CAAC,MAAQ,SAAS,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,EAAE,4BAA8B,CAAC,MAAQ,4BAA4B,EAAE,oBAAsB,CAAC,MAAQ,iBAAiB,EAAE,OAAS,CAAC,MAAQ,UAAU,EAAE,eAAiB,CAAC,MAAQ,YAAY,EAAE,eAAiB,CAAC,MAAQ,UAAU,EAAE,0BAA4B,CAAC,MAAQ,kBAAkB,EAAE,gBAAkB,CAAC,MAAQ,uCAAuC,EAAE,qBAAuB,CAAC,MAAQ,cAAc,EAAE,MAAQ,CAAC,MAAQ,SAAS,EAAE,cAAgB,CAAC,MAAQ,oCAAoC,EAAE,mCAAqC,CAAC,MAAQ,0CAA0C,EAAE,uBAAyB,CAAC,MAAQ,uBAAuB,EAAE,kBAAoB,CAAC,MAAQ,+BAA+B,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,EAAE,eAAiB,CAAC,MAAQ,WAAW,EAAE,sBAAwB,CAAC,MAAQ,oBAAoB,EAAE,WAAa,CAAC,MAAQ,aAAa,EAAE,SAAW,CAAC,MAAQ,UAAU,EAAE,YAAc,CAAC,MAAQ,uBAAuB,CAAC,EAAE,aAAe,CAAC,EAAI,CAAC,MAAQ,YAAY,EAAE,EAAI,CAAC,MAAQ,YAAY,EAAE,EAAI,CAAC,MAAQ,YAAY,EAAE,EAAI,CAAC,MAAQ,YAAY,CAAC,EAAE,SAAW,CAAC,OAAS,CAAC,MAAQ,MAAM,EAAE,MAAQ,CAAC,MAAQ,KAAK,EAAE,MAAQ,CAAC,MAAQ,KAAK,EAAE,SAAW,CAAC,MAAQ,QAAQ,EAAE,SAAW,CAAC,MAAQ,QAAQ,EAAE,SAAW,CAAC,MAAQ,QAAQ,EAAE,SAAW,CAAC,MAAQ,QAAQ,EAAE,aAAe,CAAC,MAAQ,MAAM,EAAE,QAAU,CAAC,MAAQ,aAAa,CAAC,EAAE,cAAgB,CAAC,sBAAwB,CAAC,MAAQ,wDAAwD,EAAE,mBAAqB,CAAC,MAAQ,eAAe,EAAE,4BAA8B,CAAC,MAAQ,oBAAoB,EAAE,cAAgB,CAAC,MAAQ,eAAe,EAAE,sBAAwB,CAAC,MAAQ,cAAc,CAAC,EAAE,uBAAyB,CAAC,UAAY,CAAC,YAAc,0DAA0D,MAAQ,yBAAyB,EAAE,SAAW,CAAC,YAAc,2CAA2C,MAAQ,8BAA8B,EAAE,KAAO,CAAC,YAAc,8BAA8B,MAAQ,WAAW,EAAE,YAAc,CAAC,YAAc,sDAAsD,MAAQ,UAAU,EAAE,mBAAqB,CAAC,YAAc,oEAAoE,MAAQ,aAAa,EAAE,aAAe,CAAC,YAAc,+DAA+D,MAAQ,kBAAkB,EAAE,SAAW,CAAC,YAAc,yEAAyE,MAAQ,yBAAyB,EAAE,WAAa,CAAC,YAAc,2CAA2C,MAAQ,sBAAsB,EAAE,MAAQ,CAAC,YAAc,qDAAqD,MAAQ,UAAU,EAAE,UAAY,CAAC,YAAc,+BAA+B,MAAQ,YAAY,CAAC,EAAE,iBAAmB,CAAC,QAAU,CAAC,MAAQ,QAAQ,EAAE,aAAe,CAAC,MAAQ,eAAe,CAAC,EAAE,uBAAyB,CAAC,QAAU,CAAC,MAAQ,YAAY,EAAE,QAAU,CAAC,MAAQ,OAAO,EAAE,SAAW,CAAC,MAAQ,cAAc,EAAE,QAAU,CAAC,MAAQ,UAAU,CAAC,EAAE,qBAAuB,CAAC,cAAgB,CAAC,MAAQ,qBAAqB,EAAE,cAAgB,CAAC,MAAQ,YAAY,EAAE,SAAW,CAAC,MAAQ,gBAAgB,EAAE,OAAS,CAAC,MAAQ,+BAA+B,EAAE,kBAAoB,CAAA,EAAG,SAAW,CAAC,MAAQ,yBAAyB,EAAE,UAAY,CAAC,MAAQ,iBAAiB,EAAE,OAAS,CAAC,MAAQ,QAAQ,EAAE,KAAO,CAAA,EAAG,UAAY,CAAC,MAAQ,YAAY,EAAE,KAAO,CAAC,MAAQ,eAAe,EAAE,SAAW,CAAC,MAAQ,YAAY,EAAE,YAAc,CAAC,MAAQ,QAAQ,EAAE,eAAiB,CAAC,MAAQ,WAAW,CAAC,EAAE,oBAAsB,CAAC,aAAe,CAAC,MAAQ,iBAAiB,EAAE,qBAAuB,sBAAsB,qBAAuB,uBAAuB,gBAAkB,oCAAoC,UAAY,CAAC,MAAQ,eAAe,CAAC,EAAE,kBAAoB,CAAC,gBAAkB,CAAC,MAAQ,qBAAqB,EAAE,sBAAwB,CAAC,MAAQ,YAAY,EAAE,OAAS,CAAC,MAAQ,gCAAgC,EAAE,KAAO,CAAC,MAAQ,gBAAgB,EAAE,UAAY,CAAC,MAAQ,gBAAgB,EAAE,eAAiB,CAAC,MAAQ,qBAAqB,EAAE,gBAAkB,CAAC,MAAQ,yCAAyC,CAAC,EAAE,kBAAoB,CAAC,KAAO,CAAC,MAAQ,QAAQ,EAAE,SAAW,CAAC,MAAQ,sBAAsB,CAAC,EAAE,aAAe,CAAC,iBAAmB,CAAC,MAAQ,YAAY,EAAE,OAAS,CAAC,MAAQ,OAAO,EAAE,WAAa,CAAA,EAAG,gBAAkB,CAAC,MAAQ,YAAY,EAAE,cAAgB,CAAC,MAAQ,kBAAkB,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,QAAU,CAAC,MAAQ,YAAY,EAAE,SAAW,CAAC,MAAQ,SAAS,EAAE,QAAU,CAAA,EAAG,aAAe,CAAC,MAAQ,eAAe,CAAC,EAAE,eAAiB,CAAC,UAAY,CAAC,MAAQ,gCAAgC,EAAE,kBAAoB,CAAC,MAAQ,wDAAwD,EAAE,WAAa,CAAC,MAAQ,gBAAgB,EAAE,QAAU,CAAC,MAAQ,0BAA0B,EAAE,QAAU,CAAC,MAAQ,oBAAoB,EAAE,YAAc,CAAC,MAAQ,cAAc,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,eAAiB,CAAC,MAAQ,iBAAiB,CAAC,EAAE,UAAY,CAAC,UAAY,CAAC,YAAc,aAAa,MAAQ,YAAY,CAAC,EAAE,eAAiB,CAAC,QAAU,CAAC,MAAQ,QAAQ,EAAE,QAAU,CAAC,MAAQ,YAAY,EAAE,QAAU,CAAC,MAAQ,QAAQ,EAAE,KAAO,CAAC,MAAQ,UAAU,EAAE,QAAU,CAAC,MAAQ,UAAU,EAAE,OAAS,CAAC,MAAQ,OAAO,CAAC,EAAE,gBAAkB,CAAC,kBAAoB,CAAC,MAAQ,qDAAqD,EAAE,YAAc,CAAC,MAAQ,yCAAyC,EAAE,oBAAsB,CAAC,MAAQ,4DAA4D,EAAE,YAAc,CAAC,MAAQ,oCAAoC,EAAE,UAAY,CAAC,MAAQ,mCAAmC,EAAE,QAAU,CAAC,MAAQ,wBAAwB,EAAE,gBAAkB,CAAC,MAAQ,+BAA+B,EAAE,MAAQ,CAAC,MAAQ,+BAA+B,EAAE,iBAAmB,CAAC,MAAQ,gCAAgC,EAAE,IAAM,CAAC,MAAQ,8BAA8B,EAAE,aAAe,CAAC,MAAQ,4BAA4B,EAAE,sBAAwB,CAAC,MAAQ,kCAAkC,CAAC,EAAE,qBAAuB,CAAC,UAAY,CAAC,MAAQ,YAAY,EAAE,SAAW,CAAC,MAAQ,aAAa,EAAE,UAAY,CAAC,MAAQ,oBAAoB,EAAE,eAAiB,CAAC,MAAQ,mBAAmB,EAAE,gBAAkB,CAAC,MAAQ,2BAA2B,EAAE,aAAe,CAAC,MAAQ,uBAAuB,EAAE,eAAiB,CAAC,MAAQ,qBAAqB,EAAE,YAAc,CAAC,MAAQ,2BAA2B,EAAE,cAAgB,CAAC,MAAQ,uBAAuB,CAAC,EAAE,mBAAqB,CAAC,cAAgB,CAAC,YAAc,YAAY,SAAW,KAAK,MAAQ,WAAW,EAAE,oBAAsB,CAAC,YAAc,YAAY,YAAc,4CAA4C,SAAW,KAAK,MAAQ,YAAY,WAAa,gBAAgB,EAAE,QAAU,CAAC,YAAc,uGAAuG,SAAW,MAAM,MAAQ,gBAAgB,WAAa,kBAAkB,EAAE,eAAiB,CAAC,YAAc,+BAA+B,SAAW,MAAM,MAAQ,gBAAgB,SAAW,4ZAA4Z,WAAa,qBAAqB,EAAE,MAAQ,CAAC,YAAc,+CAA+C,SAAW,MAAM,MAAQ,kBAAkB,SAAW,kHAAkH,EAAE,WAAa,CAAC,YAAc,2CAA2C,SAAW,OAAO,MAAQ,UAAU,SAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kZAA2zD,WAAa,sBAAsB,EAAE,kBAAoB,CAAC,YAAc,8FAA8F,MAAQ,aAAa,WAAa,OAAO,EAAE,iBAAmB,CAAC,YAAc,uEAAuE,SAAW,OAAO,MAAQ,yBAAyB,SAAW,sLAAsL,WAAa,aAAa,EAAE,aAAe,CAAC,YAAc,8EAA8E,SAAW,IAAI,MAAQ,aAAa,WAAa,YAAY,EAAE,eAAiB,CAAC,YAAc,SAAS,YAAc,yDAAyD,SAAW,KAAK,MAAQ,YAAY,SAAW;AAAA;AAAA;AAAA;AAAA,gbAAigC,WAAa,gBAAgB,QAAU,WAAW,EAAE,mBAAqB,CAAC,YAAc,SAAS,YAAc,8CAA8C,SAAW,KAAK,MAAQ,eAAe,SAAW,gJAAgJ,WAAa,eAAe,EAAE,sCAAwC,CAAC,YAAc,oEAAoE,SAAW,MAAM,MAAQ,yCAAyC,WAAa,WAAW,SAAW;AAAA;AAAA;AAAA;AAAA;AAAA,iFAAuuB,EAAE,sBAAwB,CAAC,YAAc,6EAA6E,SAAW,MAAM,MAAQ,wBAAwB,EAAE,gBAAkB,CAAC,YAAc,SAAS,YAAc,iEAAiE,SAAW,OAAO,MAAQ,WAAW,WAAa,kBAAkB,EAAE,SAAW,CAAC,YAAc,mFAAmF,SAAW,OAAO,MAAQ,cAAc,WAAa,cAAc,QAAU,MAAM,EAAE,YAAc,CAAC,YAAc,2GAA2G,SAAW,OAAO,MAAQ,2BAA2B,SAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAssC,WAAa,OAAO,EAAE,sBAAwB,CAAC,YAAc,qHAAqH,MAAQ,2BAA2B,EAAE,aAAe,CAAC,YAAc,YAAY,YAAc,yEAAyE,SAAW,QAAQ,MAAQ,WAAW,WAAa,kBAAkB,EAAE,oBAAsB,CAAC,YAAc,YAAY,YAAc,mDAAmD,SAAW,IAAI,MAAQ,cAAc,WAAa,aAAa,EAAE,cAAgB,CAAC,YAAc,sBAAsB,SAAW,OAAO,MAAQ,mBAAmB,WAAa,kBAAkB,EAAE,aAAe,CAAC,YAAc,UAAU,YAAc,4CAA4C,SAAW,IAAI,MAAQ,cAAc,WAAa,aAAa,EAAE,wCAA0C,CAAC,YAAc,UAAU,YAAc,oDAAoD,SAAW,KAAK,MAAQ,sBAAsB,WAAa,aAAa,EAAE,aAAe,CAAC,YAAc,wFAAwF,SAAW,QAAQ,MAAQ,8BAA8B,SAAW,gNAAgN,EAAE,YAAc,CAAC,YAAc,YAAY,YAAc,kEAAkE,SAAW,MAAM,MAAQ,aAAa,SAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8KAA2mD,WAAa,MAAM,EAAE,iBAAmB,CAAC,YAAc,SAAS,YAAc,0EAA0E,SAAW,OAAO,MAAQ,gBAAgB,WAAa,iBAAiB,EAAE,YAAc,CAAC,YAAc,SAAS,YAAc,wEAAwE,SAAW,KAAK,MAAQ,mCAAmC,SAAW,uHAAuH,WAAa,iBAAiB,EAAE,YAAc,CAAC,YAAc,SAAS,YAAc,+CAA+C,SAAW,KAAK,MAAQ,gCAAgC,WAAa,iBAAiB,EAAE,aAAe,CAAC,YAAc,aAAa,YAAc,wCAAwC,SAAW,KAAK,MAAQ,6BAA6B,WAAa,eAAe,QAAU,kBAAkB,EAAE,cAAgB,CAAC,YAAc,YAAY,YAAc,0BAA0B,SAAW,KAAK,MAAQ,iBAAiB,WAAa,gBAAgB,EAAE,iBAAmB,CAAC,YAAc,SAAS,YAAc,+DAA+D,SAAW,KAAK,MAAQ,SAAS,WAAa,kBAAkB,EAAE,aAAe,CAAC,YAAc,qGAAqG,SAAW,MAAM,MAAQ,oDAAoD,SAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oPAA42C,EAAE,eAAiB,CAAC,YAAc,sCAAsC,SAAW,MAAM,MAAQ,aAAa,WAAa,OAAO,EAAE,aAAe,CAAC,YAAc,YAAY,YAAc,2CAA2C,SAAW,MAAM,MAAQ,UAAU,WAAa,gBAAgB,EAAE,kBAAoB,CAAC,YAAc,4DAA4D,SAAW,MAAM,MAAQ,yBAAyB,EAAE,gBAAkB,CAAC,YAAc,6EAA6E,SAAW,MAAM,MAAQ,eAAe,WAAa,UAAU,EAAE,SAAW,CAAC,YAAc,YAAY,YAAc,mBAAmB,SAAW,MAAM,MAAQ,UAAU,WAAa,aAAa,EAAE,cAAgB,CAAC,YAAc,qBAAqB,SAAW,KAAK,MAAQ,8BAA8B,EAAE,0BAA4B,CAAC,YAAc,UAAU,YAAc,gEAAgE,SAAW,KAAK,MAAQ,4CAA4C,WAAa,aAAa,EAAE,2BAA6B,CAAC,YAAc,YAAY,YAAc,8CAA8C,SAAW,MAAM,MAAQ,+CAA+C,WAAa,gBAAgB,EAAE,oBAAsB,CAAC,YAAc,oCAAoC,SAAW,KAAK,MAAQ,6CAA6C,WAAa,oBAAoB,EAAE,SAAW,CAAC,YAAc,QAAQ,YAAc,uBAAuB,SAAW,MAAM,MAAQ,uBAAuB,WAAa,MAAM,EAAE,aAAe,CAAC,YAAc,YAAY,YAAc,+DAA+D,SAAW,KAAK,MAAQ,aAAa,WAAa,iBAAiB,EAAE,gBAAkB,CAAC,YAAc,uHAAuH,SAAW,KAAK,MAAQ,iCAAiC,WAAa,kBAAkB,EAAE,aAAe,CAAC,YAAc,4DAA4D,SAAW,MAAM,MAAQ,yBAAyB,EAAE,OAAS,CAAC,YAAc,0KAA0K,SAAW,IAAI,MAAQ,oCAAoC,WAAa,qBAAqB,QAAU,SAAS,EAAE,iBAAmB,CAAC,YAAc,YAAY,YAAc,qEAAqE,SAAW,KAAK,MAAQ,eAAe,WAAa,aAAa,EAAE,QAAU,CAAC,YAAc,yBAAyB,SAAW,IAAI,MAAQ,eAAe,WAAa,cAAc,EAAE,OAAS,CAAC,YAAc,aAAa,SAAW,KAAK,MAAQ,YAAY,EAAE,kBAAoB,CAAC,YAAc,wIAAwI,SAAW,MAAM,MAAQ,qBAAqB,SAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6hBAA+zD,WAAa,aAAa,EAAE,WAAa,CAAC,YAAc,6DAA6D,SAAW,KAAK,MAAQ,uBAAuB,WAAa,aAAa,EAAE,sBAAwB,CAAC,YAAc,YAAY,YAAc,sEAAsE,SAAW,MAAM,MAAQ,+BAA+B,SAAW,6GAA+G,WAAa,aAAa,EAAE,YAAc,CAAC,YAAc,OAAO,YAAc,0DAA0D,SAAW,IAAI,MAAQ,aAAa,WAAa,OAAO,EAAE,iBAAmB,CAAC,YAAc,SAAS,YAAc,kFAAkF,SAAW,OAAO,MAAQ,mBAAmB,WAAa,iBAAiB,EAAE,qBAAuB,CAAC,YAAc,wHAAwH,SAAW,MAAM,MAAQ,mBAAmB,EAAE,OAAS,CAAC,MAAQ,UAAU,EAAE,mBAAqB,CAAC,YAAc,6CAA6C,SAAW,MAAM,MAAQ,cAAc,SAAW,4CAA4C,EAAE,SAAW,CAAC,YAAc,sBAAsB,SAAW,KAAK,MAAQ,UAAU,EAAE,qBAAuB,CAAC,YAAc,UAAU,YAAc,iEAAiE,SAAW,KAAK,MAAQ,4BAA4B,WAAa,aAAa,EAAE,sBAAwB,CAAC,YAAc,YAAY,YAAc,+CAA+C,SAAW,MAAM,MAAQ,+BAA+B,WAAa,gBAAgB,EAAE,eAAiB,CAAC,YAAc,qCAAqC,SAAW,KAAK,MAAQ,6BAA6B,WAAa,oBAAoB,EAAE,aAAe,CAAC,YAAc,uFAAuF,SAAW,KAAK,MAAQ,gBAAgB,SAAW;AAAA;AAAA;AAAA;AAAA,gZAAw5B,EAAE,QAAU,CAAC,YAAc,QAAQ,YAAc,yCAAyC,SAAW,IAAI,MAAQ,aAAa,WAAa,OAAO,EAAE,wBAA0B,CAAC,YAAc,0DAA0D,SAAW,OAAO,MAAQ,sBAAsB,EAAE,YAAc,CAAC,YAAc,gEAAgE,SAAW,MAAM,MAAQ,YAAY,WAAa,cAAc,YAAc,WAAW,EAAE,eAAiB,CAAC,YAAc,iJAAiJ,SAAW,MAAM,MAAQ,gBAAgB,CAAC,EAAE,mBAAqB,CAAC,MAAQ,CAAC,MAAQ,KAAK,EAAE,KAAO,CAAC,MAAQ,QAAQ,EAAE,WAAa,CAAC,MAAQ,IAAI,EAAE,QAAU,CAAC,MAAQ,GAAG,EAAE,UAAY,CAAC,MAAQ,GAAG,EAAE,MAAQ,CAAC,MAAQ,GAAG,EAAE,MAAQ,CAAC,MAAQ,KAAK,EAAE,OAAS,CAAC,MAAQ,IAAI,CAAC,EAAE,kBAAoB,CAAC,MAAQ,CAAC,MAAQ,SAAS,EAAE,gBAAkB,CAAC,MAAQ,eAAe,EAAE,aAAe,CAAC,MAAQ,UAAU,EAAE,gBAAkB,CAAC,MAAQ,kBAAkB,EAAE,eAAiB,CAAC,MAAQ,iBAAiB,EAAE,iBAAmB,CAAC,MAAQ,UAAU,EAAE,kBAAoB,CAAC,MAAQ,mBAAmB,EAAE,aAAe,CAAC,MAAQ,SAAS,EAAE,SAAW,CAAC,MAAQ,mBAAmB,EAAE,eAAiB,CAAC,MAAQ,4BAA4B,EAAE,eAAiB,CAAC,MAAQ,yBAAyB,EAAE,cAAgB,CAAC,MAAQ,+BAA+B,EAAE,QAAU,CAAC,MAAQ,mCAAmC,EAAE,SAAW,CAAC,MAAQ,mBAAmB,EAAE,sBAAwB,CAAC,MAAQ,gCAAgC,EAAE,sBAAwB,CAAC,MAAQ,6BAA6B,EAAE,gBAAkB,CAAC,MAAQ,oBAAoB,EAAE,gBAAkB,CAAC,MAAQ,0BAA0B,EAAE,OAAS,CAAC,MAAQ,mBAAmB,EAAE,kBAAoB,CAAC,MAAQ,yBAAyB,CAAC,EAAE,eAAiB,CAAC,eAAiB,CAAC,MAAQ,eAAe,EAAE,kBAAoB,CAAC,MAAQ,WAAW,CAAC,EAAE,eAAiB,CAAC,eAAiB,CAAC,YAAc,0EAA0E,MAAQ,eAAe,EAAE,kBAAoB,CAAC,YAAc,gEAAgE,MAAQ,WAAW,EAAE,UAAY,CAAC,YAAc,wCAAwC,MAAQ,aAAa,CAAC,EAAE,YAAc,CAAC,KAAO,CAAC,MAAQ,2CAA2C,EAAE,KAAO,CAAC,MAAQ,UAAU,EAAE,KAAO,CAAC,MAAQ,wDAAwD,EAAE,KAAO,CAAC,MAAQ,4CAA4C,EAAE,QAAU,CAAA,CAAE,EAAE,kBAAoB,CAAC,cAAgB,CAAC,MAAQ,gBAAgB,CAAC,EAAE,mBAAqB,CAAC,mBAAqB,CAAC,YAAc,4CAA4C,MAAQ,eAAe,EAAE,4BAA8B,CAAC,YAAc,8BAA8B,MAAQ,oBAAoB,EAAE,cAAgB,CAAC,YAAc,wKAAwK,MAAQ,eAAe,EAAE,sBAAwB,CAAC,YAAc,0CAA0C,MAAQ,cAAc,EAAE,UAAY,CAAC,YAAc,oCAAoC,MAAQ,aAAa,CAAC,EAAE,oBAAsB,CAAC,SAAW,CAAC,MAAQ,iBAAiB,EAAE,cAAgB,CAAC,MAAQ,uBAAuB,EAAE,WAAa,CAAC,MAAQ,QAAQ,EAAE,MAAQ,CAAC,MAAQ,wBAAwB,EAAE,aAAe,CAAC,MAAQ,gBAAgB,EAAE,SAAW,CAAC,MAAQ,aAAa,CAAC,EAAE,aAAe,CAAC,iBAAmB,CAAC,MAAQ,qCAAqC,EAAE,aAAe,CAAC,MAAQ,oBAAoB,EAAE,cAAgB,CAAC,MAAQ,oBAAoB,EAAE,wBAA0B,CAAC,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,aAAa,CAAC,EAAE,mBAAqB,CAAC,YAAc,CAAC,MAAQ,WAAW,EAAE,kBAAoB,CAAC,MAAQ,UAAU,EAAE,gBAAkB,CAAC,MAAQ,iBAAiB,EAAE,WAAa,CAAC,MAAQ,mBAAmB,CAAC,EAAE,0BAA4B,CAAC,UAAY,CAAC,MAAQ,aAAa,EAAE,OAAS,CAAC,MAAQ,+BAA+B,EAAE,KAAO,CAAC,MAAQ,wCAAwC,EAAE,OAAS,CAAC,MAAQ,wCAAwC,EAAE,YAAc,CAAC,MAAQ,WAAW,EAAE,UAAY,CAAC,MAAQ,sBAAsB,CAAC,EAAE,uBAAyB,CAAC,QAAU,CAAC,MAAQ,YAAY,iBAAmB,mBAAmB,EAAE,YAAc,CAAC,MAAQ,mBAAmB,EAAE,aAAe,CAAC,MAAQ,yBAAyB,EAAE,8BAAgC,CAAC,MAAQ,2DAA2D,EAAE,aAAe,CAAC,MAAQ,qCAAqC,EAAE,gBAAkB,CAAC,MAAQ,kDAAkD,EAAE,OAAS,CAAC,MAAQ,oCAAoC,EAAE,aAAe,CAAC,MAAQ,4BAA4B,EAAE,cAAgB,CAAC,MAAQ,kCAAkC,EAAE,cAAgB,CAAC,MAAQ,mCAAmC,EAAE,cAAgB,CAAC,MAAQ,+BAA+B,EAAE,iBAAmB,CAAC,MAAQ,sBAAsB,EAAE,OAAS,CAAC,MAAQ,wCAAwC,EAAE,UAAY,CAAC,MAAQ,KAAK,CAAC,EAAE,yBAA2B,CAAC,QAAU,CAAC,MAAQ,YAAY,EAAE,QAAU,CAAC,MAAQ,cAAc,EAAE,iBAAmB,CAAC,MAAQ,cAAc,EAAE,SAAW,CAAC,MAAQ,YAAY,CAAC,EAAE,qBAAuB,CAAC,UAAY,CAAC,MAAQ,cAAc,aAAe,IAAI,EAAE,UAAY,CAAC,MAAQ,iBAAiB,aAAe,KAAK,EAAE,SAAW,CAAC,MAAQ,KAAK,EAAE,QAAU,CAAC,MAAQ,YAAY,CAAC,EAAE,0BAA4B,CAAC,oCAAsC,CAAC,YAAc,qEAAqE,MAAQ,2BAA2B,EAAE,yBAA2B,CAAC,YAAc,8YAA8Y,MAAQ,yBAAyB,EAAE,sBAAwB,CAAC,YAAc,uHAAuH,MAAQ,2BAA2B,EAAE,4BAA8B,CAAC,YAAc,wUAAwU,MAAQ,mDAAmD,EAAE,UAAY,CAAC,YAAc,cAAc,MAAQ,aAAa,EAAE,iCAAmC,CAAC,YAAc,4IAA4I,MAAQ,4CAA4C,CAAC,EAAE,eAAiB,CAAC,SAAW,CAAC,MAAQ,4BAA4B,EAAE,IAAM,CAAC,MAAQ,qBAAqB,EAAE,SAAW,CAAC,MAAQ,eAAe,EAAE,QAAU,CAAC,MAAQ,YAAY,CAAC,EAAE,wBAA0B,CAAC,kBAAoB,CAAC,MAAQ,mBAAmB,EAAE,gBAAkB,CAAC,MAAQ,mBAAmB,EAAE,YAAc,CAAC,MAAQ,sBAAsB,EAAE,aAAe,CAAC,MAAQ,kBAAkB,CAAC,EAAE,aAAe,CAAC,UAAY,CAAC,MAAQ,iBAAiB,gBAAkB,kBAAkB,EAAE,QAAU,CAAC,MAAQ,eAAe,gBAAkB,gBAAgB,EAAE,QAAU,CAAC,MAAQ,eAAe,gBAAkB,eAAe,EAAE,SAAW,CAAC,MAAQ,iBAAiB,gBAAkB,mBAAmB,EAAE,UAAY,CAAC,MAAQ,mBAAmB,gBAAkB,qBAAqB,EAAE,QAAU,CAAC,MAAQ,iBAAiB,gBAAkB,mBAAmB,EAAE,SAAW,CAAC,MAAQ,qBAAqB,gBAAkB,sBAAsB,EAAE,eAAiB,CAAC,MAAQ,aAAa,EAAE,IAAM,CAAC,MAAQ,WAAW,EAAE,SAAW,CAAC,MAAQ,oBAAoB,gBAAkB,mBAAmB,EAAE,YAAc,CAAC,MAAQ,oBAAoB,gBAAkB,mBAAmB,EAAE,SAAW,CAAC,MAAQ,sBAAsB,gBAAkB,qBAAqB,EAAE,YAAc,CAAC,MAAQ,sBAAsB,gBAAkB,qBAAqB,EAAE,aAAe,CAAC,MAAQ,oBAAoB,gBAAkB,mBAAmB,CAAC,EAAE,gBAAkB,CAAC,MAAQ,CAAC,YAAc,sCAAsC,MAAQ,4BAA4B,EAAE,SAAW,CAAC,YAAc,mFAAmF,MAAQ,sCAAsC,EAAE,YAAc,CAAC,YAAc,+FAA+F,MAAQ,yCAAyC,EAAE,UAAY,CAAC,YAAc,oCAAoC,MAAQ,aAAa,CAAC,EAAE,mBAAqB,CAAC,UAAY,CAAC,YAAc,iDAAiD,MAAQ,iBAAiB,EAAE,SAAW,CAAC,YAAc,iCAAiC,MAAQ,2BAA2B,EAAE,aAAe,CAAC,YAAc,8CAA8C,MAAQ,0BAA0B,EAAE,aAAe,CAAC,YAAc,uBAAuB,MAAQ,UAAU,EAAE,IAAM,CAAC,YAAc,8BAA8B,MAAQ,iBAAiB,EAAE,WAAa,CAAC,YAAc,oDAAoD,MAAQ,eAAe,EAAE,MAAQ,CAAC,YAAc,gCAAgC,MAAQ,SAAS,EAAE,WAAa,CAAC,YAAc,qCAAqC,MAAQ,mBAAmB,CAAC,EAAE,OAAS,CAAC,OAAS,CAAC,MAAQ,QAAQ,EAAE,KAAO,CAAC,MAAQ,MAAM,EAAE,QAAU,CAAC,MAAQ,GAAG,CAAC,EAAE,eAAiB,CAAC,EAAI,CAAC,MAAQ,iCAAiC,EAAE,EAAI,CAAC,MAAQ,0BAA0B,EAAE,EAAI,CAAC,MAAQ,+BAA+B,EAAE,EAAI,CAAC,MAAQ,iDAAiD,EAAE,EAAI,CAAC,MAAQ,kCAAkC,EAAE,WAAa,CAAC,MAAQ,aAAa,EAAE,EAAI,CAAC,MAAQ,oCAAoC,EAAE,MAAQ,CAAC,MAAQ,cAAc,EAAE,EAAI,CAAC,MAAQ,8BAA8B,EAAE,EAAI,CAAC,MAAQ,8BAA8B,EAAE,EAAI,CAAC,MAAQ,qBAAqB,CAAC,EAAE,qBAAuB,CAAC,MAAQ,CAAC,MAAQ,YAAY,EAAE,OAAS,CAAC,MAAQ,aAAa,EAAE,WAAa,CAAC,MAAQ,cAAc,EAAE,MAAQ,CAAC,MAAQ,UAAU,CAAC,EAAE,mBAAqB,CAAC,YAAc,CAAC,MAAQ,gBAAgB,EAAE,QAAU,CAAC,MAAQ,cAAc,EAAE,mBAAqB,CAAC,MAAQ,aAAa,EAAE,OAAS,CAAC,MAAQ,gCAAgC,EAAE,MAAQ,CAAC,MAAQ,iCAAiC,CAAC,EAAE,0BAA4B,CAAC,KAAO,CAAC,MAAQ,cAAc,EAAE,UAAY,CAAC,MAAQ,kDAAkD,EAAE,YAAc,CAAC,MAAQ,wCAAwC,EAAE,oBAAsB,CAAC,MAAQ,2CAA2C,EAAE,eAAiB,CAAC,MAAQ,mCAAmC,EAAE,gBAAkB,CAAC,MAAQ,+BAA+B,CAAC,EAAE,YAAc,CAAC,oBAAsB,CAAC,YAAc,8IAA8I,MAAQ,qCAAqC,EAAE,4BAA8B,CAAC,YAAc,iJAAiJ,MAAQ,iCAAiC,EAAE,WAAa,CAAC,YAAc,wHAAwH,MAAQ,iBAAiB,EAAE,gBAAkB,CAAC,YAAc,4FAA4F,MAAQ,kBAAkB,EAAE,iBAAmB,CAAC,YAAc,yHAAyH,MAAQ,kBAAkB,EAAE,iBAAmB,CAAC,YAAc,+DAA+D,MAAQ,uBAAuB,EAAE,UAAY,CAAC,YAAc,yCAAyC,MAAQ,sBAAsB,EAAE,MAAQ,CAAC,YAAc,wEAAwE,MAAQ,aAAa,EAAE,OAAS,CAAC,YAAc,8CAA8C,MAAQ,6BAA6B,CAAC,EAAE,sBAAwB,CAAC,iBAAmB,CAAC,MAAQ,iBAAiB,YAAc,4CAA4C,EAAE,gBAAkB,CAAC,MAAQ,8BAA8B,YAAc,8CAA8C,EAAE,mBAAqB,CAAC,MAAQ,uBAAuB,YAAc,sCAAsC,EAAE,iBAAmB,CAAC,MAAQ,6BAA6B,YAAc,yCAAyC,EAAE,oBAAsB,CAAC,MAAQ,cAAc,YAAc,2CAA2C,EAAE,SAAW,CAAC,MAAQ,cAAc,YAAc,EAAE,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,UAAY,CAAC,MAAQ,QAAQ,YAAc,oCAAoC,CAAC,EAAE,oBAAsB,CAAC,YAAc,CAAC,MAAQ,0BAA0B,EAAE,gBAAkB,CAAC,MAAQ,sEAAsE,EAAE,aAAe,CAAC,MAAQ,yCAAyC,EAAE,OAAS,CAAC,MAAQ,iCAAiC,CAAC,EAAE,qBAAuB,CAAC,UAAY,CAAC,YAAc,yBAAyB,KAAO,CAAC,YAAc,wBAAwB,MAAQ,wBAAwB,EAAE,MAAQ,cAAc,IAAM,CAAC,YAAc,mCAAmC,MAAQ,wBAAwB,EAAE,MAAQ,CAAC,YAAc,yCAAyC,MAAQ,iBAAiB,CAAC,EAAE,SAAW,CAAC,MAAQ,CAAC,YAAc,gCAAgC,MAAQ,kBAAkB,EAAE,MAAQ,CAAC,YAAc,gCAAgC,MAAQ,gBAAgB,EAAE,MAAQ,CAAC,YAAc,qCAAqC,MAAQ,gBAAgB,EAAE,MAAQ,CAAC,YAAc,+BAA+B,MAAQ,+BAA+B,EAAE,YAAc,gCAAgC,MAAQ,cAAc,MAAQ,CAAC,YAAc,kBAAkB,MAAQ,MAAM,CAAC,EAAE,aAAe,CAAC,MAAQ,2BAA2B,YAAc,+BAA+B,UAAY,CAAC,YAAc,gDAAgD,MAAQ,eAAe,EAAE,MAAQ,CAAC,YAAc,oBAAoB,MAAQ,YAAY,EAAE,IAAM,CAAC,YAAc,0CAA0C,MAAQ,mBAAmB,EAAE,QAAU,CAAC,YAAc,uBAAuB,MAAQ,aAAa,EAAE,WAAa,CAAC,YAAc,0CAA0C,MAAQ,aAAa,EAAE,MAAQ,CAAC,YAAc,4BAA4B,MAAQ,SAAS,CAAC,EAAE,MAAQ,CAAC,MAAQ,CAAC,MAAQ,+BAA+B,EAAE,MAAQ,CAAC,MAAQ,wDAAwD,EAAE,MAAQ,CAAC,MAAQ,4BAA4B,EAAE,MAAQ,CAAC,MAAQ,uBAAuB,EAAE,MAAQ,CAAC,MAAQ,2BAA2B,EAAE,MAAQ,CAAC,MAAQ,+CAA+C,EAAE,MAAQ,CAAC,MAAQ,0CAA0C,EAAE,MAAQ,CAAC,MAAQ,sDAAsD,EAAE,MAAQ,CAAC,MAAQ,8BAA8B,EAAE,MAAQ,CAAC,MAAQ,uCAAuC,EAAE,MAAQ,CAAC,MAAQ,kCAAkC,EAAE,MAAQ,CAAC,MAAQ,8BAA8B,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,EAAE,MAAQ,CAAC,MAAQ,6BAA6B,EAAE,YAAc,wBAAwB,MAAQ,UAAU,UAAY,CAAC,MAAQ,SAAS,CAAC,CAAC,EAAE,oBAAsB,CAAC,UAAY,CAAC,MAAQ,gBAAgB,EAAE,GAAK,CAAC,MAAQ,YAAY,EAAE,oBAAsB,CAAC,MAAQ,oBAAoB,EAAE,iBAAmB,CAAC,MAAQ,aAAa,CAAC,EAAE,8BAAgC,CAAC,KAAO,CAAC,MAAQ,OAAO,EAAE,OAAS,CAAC,MAAQ,SAAS,EAAE,QAAU,CAAC,MAAQ,YAAY,CAAC,EAAE,iBAAmB,CAAC,MAAQ,CAAC,MAAQ,OAAO,EAAE,QAAU,CAAC,MAAQ,SAAS,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,OAAS,CAAC,MAAQ,QAAQ,EAAE,QAAU,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,IAAI,EAAE,YAAc,CAAC,MAAQ,aAAa,EAAE,KAAO,CAAC,MAAQ,YAAY,EAAE,MAAQ,CAAC,MAAQ,mBAAmB,EAAE,YAAc,CAAC,MAAQ,aAAa,EAAE,QAAU,CAAC,MAAQ,aAAa,EAAE,SAAW,CAAC,MAAQ,UAAU,EAAE,KAAO,CAAC,MAAQ,MAAM,EAAE,MAAQ,CAAC,MAAQ,OAAO,EAAE,OAAS,CAAC,MAAQ,oCAAoC,EAAE,UAAY,CAAC,MAAQ,WAAW,EAAE,QAAU,CAAC,MAAQ,SAAS,CAAC,EAAE,cAAgB,CAAC,SAAW,CAAC,YAAc,mBAAmB,MAAQ,SAAS,EAAE,MAAQ,CAAC,YAAc,sDAAsD,MAAQ,WAAW,EAAE,SAAW,CAAC,YAAc,6EAA6E,MAAQ,OAAO,EAAE,KAAO,CAAC,YAAc,2CAA2C,MAAQ,UAAU,EAAE,eAAiB,CAAC,YAAc,iEAAiE,MAAQ,iBAAiB,EAAE,QAAU,CAAC,YAAc,2FAA2F,MAAQ,YAAY,EAAE,KAAO,CAAC,YAAc,wCAAwC,MAAQ,cAAc,EAAE,UAAY,CAAC,YAAc,2BAA2B,MAAQ,YAAY,EAAE,OAAS,CAAC,YAAc,mDAAmD,MAAQ,cAAc,EAAE,oBAAsB,CAAC,YAAc,+HAA+H,MAAQ,qBAAqB,EAAE,gBAAkB,CAAC,YAAc,gJAAgJ,MAAQ,gBAAgB,CAAC,EAAE,YAAc,CAAC,IAAM,CAAC,MAAQ,QAAQ,EAAE,IAAM,CAAC,MAAQ,2BAA2B,EAAE,eAAiB,CAAC,MAAQ,gBAAgB,EAAE,kBAAoB,CAAC,MAAQ,YAAY,EAAE,aAAe,CAAC,MAAQ,yBAAyB,EAAE,QAAU,CAAC,MAAQ,eAAe,EAAE,MAAQ,CAAC,MAAQ,eAAe,EAAE,YAAc,CAAC,MAAQ,aAAa,EAAE,MAAQ,CAAC,MAAQ,2BAA2B,EAAE,aAAe,CAAC,MAAQ,YAAY,EAAE,QAAU,CAAC,MAAQ,yCAAyC,EAAE,IAAM,CAAC,MAAQ,uBAAuB,EAAE,QAAU,CAAC,MAAQ,4BAA4B,CAAC,EAAE,QAAU,CAAC,QAAU,CAAC,MAAQ,sCAAsC,EAAE,OAAS,CAAC,MAAQ,uBAAuB,EAAE,iBAAmB,CAAC,MAAQ,oCAAoC,CAAC,EAAE,sBAAwB,CAAC,yBAA2B,CAAC,MAAQ,6DAA6D,EAAE,WAAa,CAAC,MAAQ,mDAAmD,EAAE,uBAAyB,CAAC,MAAQ,uCAAuC,EAAE,eAAiB,CAAC,MAAQ,wCAAwC,EAAE,oBAAsB,CAAC,MAAQ,0CAA0C,EAAE,yBAA2B,CAAC,MAAQ,4DAA4D,EAAE,WAAa,CAAC,MAAQ,kDAAkD,EAAE,uBAAyB,CAAC,MAAQ,sCAAsC,EAAE,eAAiB,CAAC,MAAQ,uCAAuC,EAAE,oBAAsB,CAAC,MAAQ,yCAAyC,CAAC,EAAE,SAAW,CAAC,QAAU,CAAC,MAAQ,uBAAuB,EAAE,GAAK,CAAC,MAAQ,OAAO,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,SAAS,CAAC,EAAE,gBAAkB,CAAC,QAAU,CAAC,MAAQ,UAAU,EAAE,QAAU,CAAC,MAAQ,UAAU,EAAE,OAAS,CAAC,MAAQ,SAAS,EAAE,wBAA0B,CAAC,MAAQ,mBAAmB,EAAE,UAAY,CAAC,MAAQ,YAAY,CAAC,EAAE,gBAAkB,CAAC,iBAAmB,CAAC,YAAc,6NAA6N,MAAQ,kBAAkB,6BAA+B,8hBAA8hB,EAAE,UAAY,CAAC,YAAc,8LAA8L,MAAQ,8CAA8C,6BAA+B,uTAAuT,EAAE,cAAgB,CAAC,YAAc;AAAA,uLAA4d,MAAQ,gBAAgB,6BAA+B;AAAA,8SAAmlB,EAAE,WAAa,CAAC,YAAc,gQAAgQ,MAAQ,iBAAiB,6BAA+B,odAAod,EAAE,iBAAmB,CAAC,YAAc,2JAA2J,MAAQ,wCAAwC,6BAA+B,kSAAkS,EAAE,cAAgB,CAAC,YAAc;AAAA,sGAAia,MAAQ,0BAA0B,6BAA+B;AAAA,qGAAsnB,EAAE,QAAU,CAAC,YAAc,uLAAuL,MAAQ,gCAAgC,6BAA+B,4SAA4S,EAAE,uBAAyB,CAAC,YAAc;AAAA,sGAAia,MAAQ,+CAA+C,6BAA+B;AAAA,qGAAsnB,EAAE,UAAY,CAAC,YAAc,qCAAuC,MAAQ,cAAc,6BAA+B,aAAa,CAAC,EAAE,YAAc,CAAC,MAAQ,CAAC,MAAQ,YAAY,EAAE,IAAM,CAAC,MAAQ,cAAc,CAAC,EAAE,iBAAmB,CAAC,sBAAwB,CAAC,YAAc,+CAA+C,MAAQ,oBAAoB,EAAE,eAAiB,CAAC,YAAc,0GAA0G,MAAQ,WAAW,EAAE,mBAAqB,CAAC,YAAc,2IAA2I,MAAQ,kBAAkB,EAAE,UAAY,CAAC,YAAc,iDAAiD,MAAQ,uBAAuB,CAAC,EAAE,iBAAmB,CAAC,QAAU,CAAC,MAAQ,OAAO,EAAE,KAAO,CAAC,MAAQ,QAAQ,EAAE,QAAU,WAAW,EAAE,sBAAwB,CAAC,2BAA6B,CAAC,YAAc,2HAA2H,MAAQ,sBAAsB,EAAE,qBAAuB,CAAC,YAAc,mLAAmL,MAAQ,4BAA4B,EAAE,8BAAgC,CAAC,YAAc,+CAA+C,MAAQ,6BAA6B,EAAE,oBAAsB,CAAC,YAAc,8DAA8D,MAAQ,eAAe,EAAE,kCAAoC,CAAC,YAAc,gMAAgM,MAAQ,yFAAyF,EAAE,WAAa,CAAC,YAAc,+CAA+C,MAAQ,eAAe,EAAE,WAAa,CAAC,YAAc,uDAAuD,MAAQ,eAAe,EAAE,sCAAwC,CAAC,YAAc,kHAAkH,MAAQ,8CAA8C,EAAE,yBAA2B,CAAC,YAAc,yEAAyE,MAAQ,iCAAiC,EAAE,iCAAmC,CAAC,YAAc,2FAA2F,MAAQ,4BAA4B,EAAE,4BAA8B,CAAC,YAAc,gGAAgG,MAAQ,uBAAuB,EAAE,sBAAwB,CAAC,YAAc,8HAA8H,MAAQ,cAAc,EAAE,UAAY,CAAC,YAAc,cAAc,MAAQ,aAAa,EAAE,+BAAiC,CAAC,YAAc,6KAA6K,MAAQ,2BAA2B,EAAE,8BAAgC,CAAC,YAAc,6KAA6K,MAAQ,0BAA0B,EAAE,kCAAoC,CAAC,YAAc,2IAA2I,MAAQ,yDAAyD,EAAE,+BAAiC,CAAC,YAAc,qIAAqI,MAAQ,qDAAqD,EAAE,+BAAiC,CAAC,YAAc,wVAAwV,MAAQ,iCAAiC,EAAE,sBAAwB,CAAC,YAAc,2LAA2L,MAAQ,8BAA8B,EAAE,+BAAiC,CAAC,YAAc,uUAAuU,MAAQ,+BAA+B,CAAC,EAAE,wBAA0B,CAAC,sBAAwB,CAAC,MAAQ,0BAA0B,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,CAAC,EAAE,YAAc,CAAC,WAAa,CAAC,MAAQ,cAAc,EAAE,qBAAuB,oBAAoB,uBAAyB,CAAC,MAAQ,2BAA2B,EAAE,mBAAqB,CAAC,MAAQ,qBAAqB,EAAE,YAAc,CAAC,MAAQ,cAAc,CAAC,EAAE,eAAiB,CAAC,UAAY,CAAC,YAAc,oEAAoE,MAAQ,sBAAsB,EAAE,KAAO,CAAC,YAAc,kHAAkH,MAAQ,YAAY,EAAE,YAAc,CAAC,YAAc,sGAAsG,MAAQ,6BAA6B,EAAE,SAAW,CAAC,YAAc,uIAAuI,MAAQ,4BAA4B,EAAE,eAAiB,CAAC,YAAc,+JAA+J,MAAQ,uBAAuB,EAAE,WAAa,CAAC,YAAc,sIAAsI,MAAQ,yBAAyB,EAAE,YAAc,CAAC,YAAc,mEAAmE,MAAQ,YAAY,EAAE,iBAAmB,CAAC,YAAc,4HAA4H,MAAQ,iBAAiB,EAAE,iBAAmB,CAAC,YAAc,qCAAqC,MAAQ,iBAAiB,EAAE,OAAS,CAAC,YAAc,qCAAqC,MAAQ,QAAQ,EAAE,oBAAsB,CAAC,YAAc,qGAAqG,MAAQ,mCAAmC,EAAE,qBAAuB,CAAC,YAAc,sKAAsK,MAAQ,gCAAgC,EAAE,oBAAsB,CAAC,YAAc,wLAAwL,MAAQ,0BAA0B,EAAE,qBAAuB,CAAC,YAAc,qGAAqG,MAAQ,mCAAmC,EAAE,sBAAwB,CAAC,YAAc,sKAAsK,MAAQ,gCAAgC,EAAE,qBAAuB,CAAC,YAAc,wLAAwL,MAAQ,0BAA0B,EAAE,gBAAkB,CAAC,YAAc,kFAAkF,MAAQ,6BAA6B,EAAE,YAAc,CAAC,YAAc,iGAAiG,MAAQ,cAAc,EAAE,WAAa,CAAC,YAAc,2GAA2G,MAAQ,qBAAqB,EAAE,cAAgB,CAAC,YAAc,iGAAiG,MAAQ,WAAW,EAAE,SAAW,CAAC,YAAc,+IAA+I,MAAQ,OAAO,EAAE,WAAa,CAAC,YAAc,8EAA8E,MAAQ,aAAa,EAAE,WAAa,CAAC,YAAc,iCAAiC,MAAQ,YAAY,EAAE,cAAgB,CAAC,YAAc,8GAA8G,MAAQ,eAAe,EAAE,cAAgB,CAAC,YAAc,gDAAgD,MAAQ,gBAAgB,EAAE,QAAU,CAAC,YAAc,yCAAyC,MAAQ,SAAS,EAAE,MAAQ,CAAC,YAAc,uCAAuC,MAAQ,OAAO,EAAE,SAAW,CAAC,YAAc,uCAAuC,MAAQ,UAAU,EAAE,WAAa,CAAC,YAAc,kCAAkC,MAAQ,YAAY,EAAE,aAAe,CAAC,YAAc,oCAAoC,MAAQ,eAAe,EAAE,KAAO,CAAC,YAAc,yBAAyB,MAAQ,MAAM,EAAE,SAAW,CAAC,YAAc,iCAAiC,MAAQ,UAAU,EAAE,KAAO,CAAC,YAAc,2BAA2B,MAAQ,MAAM,EAAE,SAAW,CAAC,YAAc,8BAA8B,MAAQ,UAAU,EAAE,MAAQ,CAAC,YAAc,6BAA6B,MAAQ,OAAO,EAAE,MAAQ,CAAC,YAAc,2BAA2B,MAAQ,YAAY,EAAE,cAAgB,CAAC,YAAc,+JAA+J,MAAQ,6BAA6B,CAAC,EAAE,cAAgB,CAAC,cAAgB,CAAC,MAAQ,mBAAmB,EAAE,UAAY,CAAC,MAAQ,gBAAgB,EAAE,iBAAmB,CAAC,MAAQ,gBAAgB,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,EAAE,UAAY,CAAC,MAAQ,SAAS,EAAE,IAAM,CAAC,MAAQ,MAAM,EAAE,KAAO,CAAC,MAAQ,UAAU,EAAE,WAAa,CAAC,MAAQ,oBAAoB,EAAE,QAAU,CAAC,MAAQ,YAAY,CAAC,EAAE,cAAgB,CAAC,MAAQ,CAAC,MAAQ,SAAS,EAAE,gBAAkB,CAAC,MAAQ,eAAe,EAAE,aAAe,CAAC,MAAQ,UAAU,EAAE,eAAiB,CAAC,MAAQ,iBAAiB,EAAE,iBAAmB,CAAC,MAAQ,UAAU,EAAE,SAAW,CAAC,MAAQ,sBAAsB,EAAE,QAAU,CAAC,MAAQ,UAAU,EAAE,gBAAkB,CAAC,MAAQ,0BAA0B,EAAE,eAAiB,CAAC,MAAQ,gBAAgB,EAAE,uBAAyB,CAAC,MAAQ,4BAA4B,CAAC,EAAE,mBAAqB,CAAC,QAAU,CAAC,MAAQ,mBAAmB,mBAAqB,oCAAoC,eAAiB,6BAA6B,EAAE,kBAAoB,CAAC,MAAQ,kBAAkB,mBAAqB,wCAAwC,eAAiB,iBAAiB,EAAE,aAAe,CAAC,MAAQ,aAAa,mBAAqB,mCAAmC,eAAiB,YAAY,EAAE,SAAW,CAAC,MAAQ,OAAO,mBAAqB,wBAAwB,eAAiB,gBAAgB,EAAE,aAAe,CAAC,MAAQ,MAAM,mBAAqB,uBAAuB,eAAiB,eAAe,EAAE,OAAS,CAAC,MAAQ,OAAO,mBAAqB,wBAAwB,eAAiB,gBAAgB,EAAE,aAAe,CAAC,YAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAA0gD,MAAQ,oBAAoB,mBAAqB,qCAAqC,eAAiB,6BAA6B,EAAE,kBAAoB,CAAC,YAAc,sTAAsT,MAAQ,oCAAoC,mBAAqB,qDAAqD,eAAiB,mCAAmC,EAAE,YAAc,CAAC,YAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oNAAw9E,MAAQ,qCAAqC,mBAAqB,sDAAsD,eAAiB,oCAAoC,EAAE,aAAe,CAAC,MAAQ,OAAO,mBAAqB,wBAAwB,eAAiB,gBAAgB,EAAE,UAAY,CAAC,MAAQ,qBAAqB,mBAAqB,8BAA8B,eAAiB,kBAAkB,CAAC,EAAE,eAAiB,CAAC,WAAa,CAAC,MAAQ,uBAAuB,EAAE,IAAM,CAAC,MAAQ,KAAK,EAAE,MAAQ,CAAC,MAAQ,OAAO,EAAE,UAAY,CAAC,MAAQ,WAAW,EAAE,KAAO,CAAC,MAAQ,YAAY,EAAE,MAAQ,CAAC,MAAQ,WAAW,EAAE,gBAAkB,CAAC,MAAQ,SAAS,EAAE,MAAQ,CAAC,MAAQ,mBAAmB,EAAE,MAAQ,CAAC,MAAQ,OAAO,EAAE,QAAU,CAAC,MAAQ,SAAS,EAAE,MAAQ,CAAC,MAAQ,OAAO,EAAE,cAAgB,CAAC,MAAQ,cAAc,EAAE,UAAY,CAAC,MAAQ,mBAAmB,EAAE,WAAa,CAAC,MAAQ,eAAe,EAAE,SAAW,CAAC,MAAQ,aAAa,EAAE,UAAY,CAAC,MAAQ,eAAe,CAAC,EAAE,WAAa,CAAC,OAAS,CAAC,MAAQ,aAAa,EAAE,MAAQ,CAAC,MAAQ,UAAU,EAAE,QAAU,CAAC,MAAQ,gBAAgB,EAAE,KAAO,CAAC,MAAQ,gBAAgB,CAAC,EAAE,aAAe,CAAC,SAAW,CAAC,MAAQ,iBAAiB,EAAE,MAAQ,CAAC,MAAQ,cAAc,EAAE,YAAc,CAAC,MAAQ,qBAAqB,CAAC,EAAE,QAAU,CAAC,WAAa,CAAC,YAAc,mDAAmD,MAAQ,qBAAqB,OAAS,aAAa,EAAE,YAAc,CAAC,YAAc,8BAA8B,MAAQ,mBAAmB,OAAS,4BAA4B,EAAE,iBAAmB,CAAC,YAAc,yCAAyC,MAAQ,mBAAmB,OAAS,cAAc,EAAE,UAAY,CAAC,YAAc,2CAA2C,MAAQ,uBAAuB,OAAS,wDAAwD,EAAE,QAAU,CAAC,YAAc,0CAA0C,MAAQ,qBAAqB,OAAS,uDAAuD,EAAE,oBAAsB,CAAC,YAAc,uCAAuC,MAAQ,kBAAkB,OAAS,kBAAkB,EAAE,IAAM,CAAC,YAAc,kCAAkC,MAAQ,uBAAuB,OAAS,+BAA+B,EAAE,QAAU,CAAC,YAAc,0CAA0C,MAAQ,kBAAkB,OAAS,gBAAgB,EAAE,aAAe,CAAC,YAAc,4CAA4C,MAAQ,2BAA2B,OAAS,sBAAsB,UAAY,qBAAqB,CAAC,EAAE,kBAAoB,CAAC,IAAM,CAAC,MAAQ,iDAAiD,EAAE,UAAY,CAAC,MAAQ,kCAAkC,CAAC,EAAE,iBAAmB,CAAC,SAAW,CAAC,YAAc,yNAAyN,MAAQ,aAAa,EAAE,WAAa,CAAC,YAAc,6GAA6G,MAAQ,gBAAgB,EAAE,cAAgB,CAAC,YAAc,6HAA6H,MAAQ,eAAe,EAAE,iBAAmB,CAAC,YAAc,gHAAgH,MAAQ,cAAc,EAAE,mBAAqB,CAAC,YAAc,+IAA+I,MAAQ,eAAe,EAAE,uBAAyB,CAAC,YAAc,iKAAiK,MAAQ,mCAAmC,EAAE,UAAY,CAAC,YAAc,cAAc,MAAQ,aAAa,CAAC,EAAE,WAAa,CAAC,eAAiB,CAAC,MAAQ,sBAAsB,EAAE,mBAAqB,CAAC,MAAQ,YAAY,EAAE,QAAU,CAAC,MAAQ,WAAW,EAAE,mBAAqB,CAAC,MAAQ,oBAAoB,EAAE,UAAY,CAAC,MAAQ,UAAU,EAAE,eAAiB,CAAC,MAAQ,yBAAyB,EAAE,oBAAsB,GAAG,eAAiB,CAAC,MAAQ,uBAAuB,EAAE,aAAe,CAAA,EAAG,cAAgB,CAAC,MAAQ,eAAe,EAAE,qBAAuB,CAAC,MAAQ,wBAAwB,EAAE,WAAa,CAAC,MAAQ,4BAA4B,EAAE,eAAiB,CAAC,MAAQ,sCAAsC,EAAE,yBAA2B,CAAA,EAAG,gCAAkC,GAAG,gCAAkC,CAAA,EAAG,eAAiB,CAAC,MAAQ,sBAAsB,EAAE,cAAgB,CAAC,MAAQ,mBAAmB,EAAE,UAAY,CAAC,MAAQ,eAAe,EAAE,aAAe,CAAC,MAAQ,YAAY,EAAE,cAAgB,CAAC,MAAQ,sBAAsB,EAAE,cAAgB,CAAC,MAAQ,sBAAsB,EAAE,oBAAsB,GAAG,iBAAmB,CAAC,MAAQ,oBAAoB,EAAE,qBAAuB,CAAC,MAAQ,cAAc,EAAE,aAAe,CAAC,MAAQ,mBAAmB,CAAC,EAAE,WAAa,CAAC,aAAe,CAAC,MAAQ,UAAU,OAAS,CAAC,UAAY,YAAY,CAAC,EAAE,YAAc,CAAC,MAAQ,gBAAgB,EAAE,aAAe,CAAC,MAAQ,aAAa,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,EAAE,OAAS,CAAC,MAAQ,cAAc,EAAE,qBAAuB,CAAA,EAAG,mBAAqB,CAAA,EAAG,UAAY,CAAC,MAAQ,eAAe,CAAC,EAAE,aAAe,CAAC,WAAa,CAAC,MAAQ,aAAa,CAAC,EAAE,oBAAsB,CAAC,kBAAoB,CAAC,MAAQ,cAAc,EAAE,OAAS,CAAC,MAAQ,iBAAiB,EAAE,QAAU,CAAC,MAAQ,aAAa,CAAC,EAAE,mBAAqB,CAAC,mBAAqB,CAAC,MAAQ,cAAc,EAAE,qBAAuB,CAAC,MAAQ,WAAW,EAAE,OAAS,CAAC,MAAQ,YAAY,EAAE,WAAa,CAAA,CAAE,EAAE,aAAe,CAAC,YAAc,CAAC,MAAQ,oBAAoB,EAAE,OAAS,CAAC,MAAQ,cAAc,CAAC,EAAE,sBAAwB,CAAC,YAAc,CAAC,YAAc,qCAAqC,MAAQ,eAAe,EAAE,oBAAsB,CAAC,YAAc,6EAA6E,MAAQ,iCAAiC,EAAE,gBAAkB,CAAC,YAAc,2EAA2E,MAAQ,4BAA4B,EAAE,UAAY,CAAC,YAAc,sCAAwC,MAAQ,aAAa,CAAC,EAAE,mBAAqB,CAAC,YAAc,CAAC,YAAc,qCAAqC,MAAQ,eAAe,EAAE,oBAAsB,CAAC,YAAc,6EAA6E,MAAQ,iCAAiC,EAAE,gBAAkB,CAAC,YAAc,2EAA2E,MAAQ,4BAA4B,EAAE,UAAY,CAAC,YAAc,sCAAwC,MAAQ,aAAa,CAAC,EAAE,kBAAoB,CAAC,iBAAmB,CAAC,MAAQ,qBAAqB,EAAE,yBAA2B,CAAC,YAAc,2GAA2G,MAAQ,yCAAyC,EAAE,kBAAoB,CAAC,MAAQ,iBAAiB,EAAE,QAAU,CAAC,MAAQ,YAAY,CAAC,EAAE,YAAc,CAAC,cAAgB,CAAC,MAAQ,yBAAyB,EAAE,KAAO,CAAC,MAAQ,uCAAuC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,EAAE,UAAY,CAAC,MAAQ,sBAAsB,EAAE,uBAAyB,CAAC,MAAQ,kCAAkC,EAAE,OAAS,CAAC,MAAQ,gBAAgB,EAAE,YAAc,CAAC,MAAQ,kBAAkB,EAAE,UAAY,CAAC,MAAQ,+BAA+B,CAAC,EAAE,aAAe,CAAC,cAAgB,CAAC,MAAQ,qBAAqB,EAAE,QAAU,CAAC,MAAQ,aAAa,EAAE,IAAM,CAAC,MAAQ,iBAAiB,EAAE,SAAW,CAAC,MAAQ,wBAAwB,EAAE,OAAS,CAAC,MAAQ,oBAAoB,EAAE,eAAiB,CAAC,MAAQ,uBAAuB,EAAE,eAAiB,CAAC,MAAQ,qBAAqB,EAAE,0BAA4B,CAAC,MAAQ,+BAA+B,EAAE,cAAgB,CAAC,MAAQ,qBAAqB,EAAE,aAAe,CAAC,MAAQ,gBAAgB,CAAC,EAAE,gBAAkB,CAAC,QAAU,CAAC,MAAQ,aAAa,EAAE,OAAS,CAAC,MAAQ,QAAQ,EAAE,UAAY,CAAC,MAAQ,OAAO,EAAE,MAAQ,CAAC,MAAQ,UAAU,EAAE,aAAe,CAAC,MAAQ,oBAAoB,CAAC,EAAE,2BAA6B,CAAC,SAAW,CAAC,MAAQ,qBAAqB,EAAE,gBAAkB,CAAC,MAAQ,4CAA4C,EAAE,cAAgB,CAAC,MAAQ,eAAe,EAAE,KAAO,CAAC,MAAQ,aAAa,EAAE,WAAa,CAAC,MAAQ,oDAAoD,EAAE,kBAAoB,CAAC,MAAQ,6EAA6E,CAAC,EAAE,WAAa,CAAC,sBAAwB,CAAC,MAAQ,wBAAwB,EAAE,kBAAoB,CAAC,MAAQ,oBAAoB,EAAE,yBAA2B,CAAC,MAAQ,4BAA4B,EAAE,kBAAoB,CAAC,MAAQ,oBAAoB,EAAE,YAAc,CAAC,MAAQ,cAAc,CAAC,EAAE,SAAW,CAAC,WAAa,CAAC,MAAQ,aAAa,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,SAAW,CAAC,MAAQ,WAAW,EAAE,cAAgB,cAAc,SAAW,CAAC,MAAQ,WAAW,EAAE,WAAa,CAAC,MAAQ,aAAa,EAAE,YAAc,YAAY,SAAW,CAAC,MAAQ,WAAW,EAAE,UAAY,CAAC,MAAQ,YAAY,CAAC,EAAE,iBAAmB,CAAC,MAAQ,CAAC,YAAc,iCAAiC,MAAQ,8BAA8B,EAAE,WAAa,CAAC,YAAc,sDAAsD,MAAQ,iCAAiC,EAAE,oBAAsB,CAAC,YAAc,0EAA0E,MAAQ,qDAAqD,EAAE,MAAQ,CAAC,YAAc,aAAa,MAAQ,2BAA2B,EAAE,YAAc,CAAC,YAAc,kCAAkC,MAAQ,uCAAuC,EAAE,sBAAwB,CAAC,YAAc,kDAAkD,MAAQ,gDAAgD,EAAE,UAAY,CAAC,YAAc,oCAAoC,MAAQ,eAAe,CAAC,EAAE,iBAAmB,CAAC,YAAc,CAAC,MAAQ,eAAe,EAAE,MAAQ,CAAC,MAAQ,eAAe,EAAE,YAAc,CAAC,MAAQ,yBAAyB,EAAE,sBAAwB,CAAC,MAAQ,kCAAkC,CAAC,EAAE,UAAY,CAAC,OAAS,CAAC,MAAQ,aAAa,EAAE,QAAU,CAAC,MAAQ,gBAAgB,EAAE,MAAQ,CAAC,MAAQ,KAAK,EAAE,iBAAmB,CAAC,MAAQ,gBAAgB,EAAE,UAAY,CAAC,MAAQ,YAAY,CAAC,EAAE,gBAAkB,CAAC,QAAU,CAAC,MAAQ,UAAU,EAAE,UAAY,CAAC,MAAQ,yBAAyB,EAAE,KAAO,CAAC,MAAQ,kBAAkB,EAAE,OAAS,CAAC,MAAQ,YAAY,CAAC,EAAE,uBAAyB,CAAC,mBAAqB,CAAC,YAAc,+BAA+B,MAAQ,8BAA8B,EAAE,0CAA4C,CAAC,YAAc,wCAAwC,MAAQ,uCAAuC,EAAE,yBAA2B,CAAC,YAAc,+BAA+B,MAAQ,8BAA8B,EAAE,gDAAkD,CAAC,YAAc,0DAA0D,MAAQ,yDAAyD,EAAE,UAAY,CAAC,YAAc,cAAc,MAAQ,aAAa,CAAC,EAAE,4BAA8B,CAAC,0BAA4B,CAAC,YAAc,+IAA+I,MAAQ,gBAAgB,EAAE,sBAAwB,CAAC,YAAc,gDAAgD,MAAQ,eAAe,EAAE,wBAA0B,CAAC,YAAc,mJAAmJ,MAAQ,gBAAgB,EAAE,iBAAmB,CAAC,YAAc,6CAA6C,MAAQ,gBAAgB,EAAE,uBAAyB,CAAC,YAAc,8CAA8C,MAAQ,aAAa,EAAE,mBAAqB,CAAC,YAAc,2CAA2C,MAAQ,cAAc,EAAE,kBAAoB,CAAC,YAAc;AAAA,mCAAkO,MAAQ,mBAAmB,EAAE,qBAAuB,CAAC,YAAc,gJAAgJ,MAAQ,eAAe,EAAE,YAAc,CAAC,YAAc;AAAA,4GAA6J,MAAQ,oBAAoB,EAAE,oBAAsB,CAAC,YAAc,+JAA+J,MAAQ,mBAAmB,EAAE,uBAAyB,CAAC,YAAc,wJAAwJ,MAAQ,qBAAqB,EAAE,UAAY,CAAC,YAAc,cAAc,MAAQ,aAAa,EAAE,wBAA0B,CAAC,YAAc;AAAA;AAAA,qCAA6O,MAAQ,oBAAoB,EAAE,uBAAyB,CAAC,YAAc,qEAAqE,MAAQ,mBAAmB,CAAC,EAAE,eAAiB,CAAC,gBAAkB,CAAC,MAAQ,yBAAyB,EAAE,eAAiB,CAAC,MAAQ,sBAAsB,EAAE,YAAc,CAAC,MAAQ,uBAAuB,EAAE,YAAc,CAAC,MAAQ,mBAAmB,EAAE,gBAAkB,CAAC,MAAQ,aAAa,EAAE,oBAAsB,CAAC,MAAQ,oBAAoB,EAAE,wBAA0B,CAAC,MAAQ,qBAAqB,EAAE,wCAA0C,CAAC,MAAQ,2BAA2B,EAAE,qBAAuB,CAAC,MAAQ,wBAAwB,EAAE,sBAAwB,CAAC,MAAQ,qBAAqB,EAAE,WAAa,CAAC,MAAQ,QAAQ,EAAE,mBAAqB,CAAC,MAAQ,mBAAmB,EAAE,gBAAkB,CAAC,MAAQ,oBAAoB,EAAE,qBAAuB,CAAC,MAAQ,kBAAkB,EAAE,GAAK,CAAC,MAAQ,mBAAmB,EAAE,uBAAyB,CAAC,MAAQ,yBAAyB,EAAE,2BAA6B,CAAC,MAAQ,iCAAiC,EAAE,cAAgB,CAAC,MAAQ,iBAAiB,EAAE,YAAc,CAAC,MAAQ,aAAa,EAAE,iBAAmB,CAAC,MAAQ,cAAc,EAAE,0BAA4B,CAAC,MAAQ,4BAA4B,EAAE,GAAK,CAAC,MAAQ,YAAY,EAAE,oBAAsB,CAAC,MAAQ,+CAA+C,EAAE,2BAA6B,CAAC,MAAQ,YAAY,EAAE,YAAc,CAAC,MAAQ,cAAc,EAAE,0BAA4B,CAAC,MAAQ,0CAA0C,EAAE,mBAAqB,CAAC,MAAQ,qBAAqB,EAAE,QAAU,CAAC,MAAQ,wBAAwB,CAAC,EAAE,QAAU,CAAA,EAAG,iBAAmB,CAAC,QAAU,CAAC,MAAQ,WAAW,EAAE,8BAAgC,CAAC,MAAQ,8CAA8C,EAAE,sCAAwC,CAAC,MAAQ,sDAAsD,EAAE,oBAAsB,CAAC,MAAQ,0BAA0B,EAAE,YAAc,CAAC,MAAQ,cAAc,EAAE,2BAA6B,CAAC,MAAQ,mCAAmC,EAAE,iBAAmB,CAAC,MAAQ,mEAAmE,EAAE,aAAe,CAAC,MAAQ,SAAS,EAAE,aAAe,CAAC,MAAQ,aAAa,EAAE,iBAAmB,CAAC,MAAQ,sBAAsB,EAAE,oBAAsB,CAAC,MAAQ,kCAAkC,EAAE,gCAAkC,CAAC,MAAQ,oCAAoC,EAAE,0BAA4B,CAAC,MAAQ,mDAAmD,EAAE,0BAA4B,CAAC,MAAQ,kGAAkG,EAAE,mBAAqB,CAAC,MAAQ,0DAA0D,EAAE,KAAO,CAAC,MAAQ,kDAAkD,EAAE,kBAAoB,CAAC,MAAQ,2EAA2E,CAAC,EAAE,WAAa,CAAC,qBAAqB,CAAC,MAAQ,eAAe,EAAE,uBAAuB,CAAC,MAAQ,iBAAiB,EAAE,qBAAqB,CAAC,MAAQ,eAAe,EAAE,oBAAoB,CAAC,MAAQ,cAAc,EAAE,+BAA+B,CAAC,MAAQ,yBAAyB,EAAE,2BAA2B,CAAC,MAAQ,qBAAqB,EAAE,iBAAiB,CAAC,MAAQ,WAAW,EAAE,iCAAiC,CAAC,MAAQ,2BAA2B,CAAC,EAAE,eAAiB,CAAC,0BAA0B,CAAC,MAAQ,oBAAoB,EAAE,0BAA0B,CAAC,MAAQ,oBAAoB,EAAE,iBAAiB,CAAC,MAAQ,WAAW,EAAE,gBAAgB,CAAC,MAAQ,UAAU,EAAE,qBAAqB,CAAC,MAAQ,eAAe,EAAE,iBAAiB,CAAC,MAAQ,WAAW,CAAC,EAAE,kBAAoB,CAAC,YAAY,CAAC,MAAQ,MAAM,EAAE,aAAa,CAAC,MAAQ,OAAO,EAAE,iBAAiB,CAAC,MAAQ,WAAW,CAAC,EAAE,yBAA2B,CAAC,eAAe,CAAC,MAAQ,SAAS,EAAE,eAAe,CAAC,MAAQ,SAAS,EAAE,iBAAiB,CAAC,MAAQ,WAAW,CAAC,EAAE,eAAiB,CAAC,cAAc,CAAC,MAAQ,QAAQ,EAAE,WAAW,CAAC,MAAQ,KAAK,EAAE,iBAAiB,CAAC,MAAQ,WAAW,CAAC,EAAE,eAAiB,CAAC,QAAU,CAAC,MAAQ,IAAI,EAAE,QAAU,CAAC,MAAQ,cAAc,EAAE,UAAY,CAAC,MAAQ,GAAG,CAAC,EAAE,kBAAoB,CAAC,OAAS,CAAC,MAAQ,mJAAmJ,EAAE,QAAU,CAAC,MAAQ,gIAAgI,EAAE,gBAAkB,CAAC,MAAQ,qDAAqD,EAAE,mBAAqB,CAAC,MAAQ,uCAAuC,CAAC,EAAE,yBAA2B,CAAC,OAAS,CAAC,MAAQ,oEAAoE,EAAE,OAAS,CAAC,MAAQ,mDAAmD,CAAC,EAAE,+BAAiC,CAAC,QAAU,CAAC,MAAQ,+CAA+C,EAAE,QAAU,CAAC,MAAQ,2CAA2C,EAAE,UAAY,CAAC,MAAQ,sCAAsC,CAAC,EAAE,KAAO,CAAC,MAAQ,CAAC,MAAQ,SAAS,eAAiB,GAAG,EAAE,KAAO,CAAC,MAAQ,SAAS,eAAiB,IAAI,EAAE,MAAQ,CAAC,MAAQ,UAAU,eAAiB,KAAK,EAAE,OAAS,CAAC,MAAQ,QAAQ,eAAiB,OAAO,EAAE,IAAM,CAAC,MAAQ,OAAO,eAAiB,EAAE,EAAE,MAAQ,CAAC,MAAQ,QAAQ,eAAiB,KAAK,EAAE,QAAU,CAAC,MAAQ,aAAa,eAAiB,GAAG,EAAE,WAAa,CAAC,MAAQ,aAAa,eAAiB,IAAI,EAAE,KAAO,CAAC,MAAQ,QAAQ,eAAiB,GAAG,CAAC,EAAE,cAAgB,CAAC,UAAY,CAAC,MAAQ,UAAU,EAAE,QAAU,CAAC,MAAQ,oBAAoB,EAAE,OAAS,CAAC,MAAQ,UAAU,EAAE,SAAW,CAAC,MAAQ,aAAa,CAAC,EAAE,+BAAiC,CAAC,QAAU,CAAC,MAAQ,kCAAkC,EAAE,OAAS,CAAC,MAAQ,sDAAsD,CAAC,EAAE,oBAAsB,CAAC,MAAQ,CAAC,MAAQ,eAAe,EAAE,OAAS,CAAC,MAAQ,WAAW,EAAE,SAAW,CAAC,MAAQ,YAAY,EAAE,SAAW,CAAC,MAAQ,SAAS,EAAE,SAAW,CAAC,MAAQ,YAAY,EAAE,SAAW,CAAC,MAAQ,aAAa,CAAC,EAAE,oBAAsB,CAAC,MAAQ,CAAC,MAAQ,aAAa,EAAE,aAAe,CAAC,MAAQ,eAAe,EAAE,WAAa,CAAC,MAAQ,iBAAiB,EAAE,YAAc,CAAC,MAAQ,WAAW,EAAE,QAAU,CAAC,MAAQ,WAAW,EAAE,QAAU,CAAC,MAAQ,oBAAoB,EAAE,OAAS,CAAC,MAAQ,YAAY,EAAE,QAAU,CAAC,MAAQ,aAAa,CAAC,EAAE,sCAAwC,CAAC,YAAc,CAAC,MAAQ,iCAAiC,EAAE,SAAW,CAAC,MAAQ,0CAA0C,CAAC,EAAE,6BAA+B,CAAC,KAAO,CAAC,MAAQ,eAAe,EAAE,YAAc,CAAC,MAAQ,4BAA4B,EAAE,IAAM,CAAC,MAAQ,yBAAyB,EAAE,OAAS,CAAC,MAAQ,YAAY,CAAC,EAAE,eAAiB,CAAC,WAAa,CAAC,MAAQ,sBAAsB,EAAE,WAAa,CAAC,MAAQ,yBAAyB,EAAE,SAAW,CAAC,MAAQ,kBAAkB,EAAE,cAAgB,CAAC,MAAQ,6BAA6B,EAAE,YAAc,CAAC,MAAQ,8BAA8B,CAAC,EAAE,QAAU,CAAC,GAAK,CAAC,MAAQ,cAAc,YAAc,gCAAgC,EAAE,GAAK,CAAC,MAAQ,iBAAiB,YAAc,qCAAqC,CAAC,EAAE,WAAa,CAAC,UAAY,CAAC,MAAQ,UAAU,EAAE,OAAS,CAAC,MAAQ,YAAY,EAAE,SAAW,CAAC,MAAQ,YAAY,EAAE,WAAa,CAAC,MAAQ,cAAc,CAAC,EAAE,kBAAoB,CAAC,UAAY,CAAC,MAAQ,UAAU,EAAE,UAAY,CAAC,MAAQ,WAAW,EAAE,UAAY,CAAC,MAAQ,WAAW,EAAE,MAAQ,CAAC,MAAQ,SAAS,CAAC,EAAE,YAAc,CAAC,QAAU,CAAC,MAAQ,QAAQ,EAAE,kBAAoB,CAAC,MAAQ,0CAA0C,CAAC,EAAE,kBAAoB,CAAC,QAAU,CAAC,MAAQ,QAAQ,EAAE,QAAU,CAAC,MAAQ,WAAW,EAAE,OAAS,CAAC,MAAQ,YAAY,EAAE,SAAW,CAAC,MAAQ,WAAW,EAAE,eAAiB,CAAC,MAAQ,yBAAyB,EAAE,SAAW,CAAC,MAAQ,eAAe,CAAC,EAAE,KAAO,CAAC,UAAY,CAAC,MAAQ,eAAe,EAAE,WAAa,CAAC,MAAQ,cAAc,EAAE,eAAiB,CAAC,MAAQ,mBAAmB,EAAE,oBAAsB,CAAC,MAAQ,4BAA4B,EAAE,eAAiB,CAAC,MAAQ,qBAAqB,EAAE,YAAc,CAAC,MAAQ,sBAAsB,CAAC,EAAE,qBAAuB,CAAC,sBAAwB,CAAC,MAAQ,YAAY,EAAE,eAAiB,CAAC,MAAQ,aAAa,EAAE,OAAS,CAAC,MAAQ,mBAAmB,EAAE,UAAY,CAAC,MAAQ,gBAAgB,EAAE,OAAS,CAAC,MAAQ,kBAAkB,CAAC,EAAE,gBAAkB,CAAC,UAAY,CAAC,MAAQ,8BAA8B,EAAE,OAAS,CAAC,MAAQ,6BAA6B,YAAc,2EAA2E,EAAE,MAAQ,CAAC,MAAQ,2BAA2B,YAAc,2EAA2E,EAAE,MAAQ,CAAC,MAAQ,sDAAsD,YAAc,iKAAiK,EAAE,OAAS,CAAC,MAAQ,wDAAwD,YAAc,mKAAmK,EAAE,MAAQ,CAAC,MAAQ,wDAAwD,YAAc,oOAAoO,EAAE,KAAO,CAAC,MAAQ,uBAAuB,YAAc,2gBAA2gB,EAAE,KAAO,CAAC,MAAQ,WAAW,EAAE,MAAQ,CAAC,MAAQ,mBAAmB,EAAE,SAAW,CAAC,MAAQ,oBAAoB,CAAC,EAAE,QAAU,CAAC,KAAO,CAAC,MAAQ,WAAW,EAAE,QAAU,CAAC,MAAQ,QAAQ,EAAE,QAAU,CAAC,MAAQ,MAAM,EAAE,QAAU,CAAC,MAAQ,MAAM,EAAE,QAAU,CAAC,MAAQ,QAAQ,EAAE,QAAU,CAAC,MAAQ,MAAM,EAAE,QAAU,CAAC,MAAQ,MAAM,EAAE,MAAQ,CAAC,MAAQ,KAAK,CAAC,EAAE,kBAAoB,CAAC,UAAY,CAAC,YAAc,cAAc,MAAQ,aAAa,EAAE,oBAAsB,CAAC,YAAc,oCAAoC,MAAQ,4CAA4C,EAAE,0BAA4B,CAAC,YAAc,gEAAgE,MAAQ,2CAA2C,EAAE,2BAA6B,CAAC,YAAc,8CAA8C,MAAQ,8CAA8C,CAAC,EAAE,aAAe,CAAC,UAAY,CAAC,YAAc,cAAc,MAAQ,aAAa,EAAE,eAAiB,CAAC,YAAc,qCAAqC,MAAQ,4BAA4B,EAAE,qBAAuB,CAAC,YAAc,iEAAiE,MAAQ,2BAA2B,EAAE,sBAAwB,CAAC,YAAc,+CAA+C,MAAQ,8BAA8B,CAAC,EAAE,gCAAkC,CAAC,QAAU,CAAC,MAAQ,sBAAsB,EAAE,QAAU,CAAC,MAAQ,4BAA4B,EAAE,MAAQ,CAAC,MAAQ,iCAAiC,CAAC,EAAE,qCAAuC,CAAC,4CAA8C,CAAC,MAAQ,oEAAoE,EAAE,oDAAsD,CAAC,MAAQ,yFAAyF,EAAE,kCAAoC,CAAC,MAAQ,sEAAsE,EAAE,4BAA8B,CAAC,MAAQ,mEAAmE,EAAE,yCAA2C,CAAC,MAAQ,yDAAyD,EAAE,wDAA0D,CAAC,MAAQ,gEAAgE,CAAC,EAAE,QAAU,CAAC,GAAK,CAAC,MAAQ,OAAO,EAAE,GAAK,CAAC,MAAQ,gBAAgB,EAAE,GAAK,CAAC,MAAQ,UAAU,EAAE,GAAK,CAAC,MAAQ,wBAAwB,EAAE,GAAK,CAAC,MAAQ,UAAU,EAAE,GAAK,CAAC,MAAQ,cAAc,EAAE,GAAK,CAAC,MAAQ,OAAO,EAAE,GAAK,CAAC,MAAQ,OAAO,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,UAAU,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,OAAO,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,kBAAkB,EAAE,GAAK,CAAC,MAAQ,WAAW,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,YAAY,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,OAAO,EAAE,GAAK,CAAC,MAAQ,UAAU,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,WAAW,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,sBAAsB,EAAE,GAAK,CAAC,MAAQ,4BAA4B,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,WAAW,EAAE,GAAK,CAAC,MAAQ,UAAU,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,eAAe,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,cAAc,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,WAAW,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,eAAe,EAAE,GAAK,CAAC,MAAQ,OAAO,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,UAAU,EAAE,GAAK,CAAC,MAAQ,aAAa,EAAE,GAAK,CAAC,MAAQ,UAAU,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,YAAY,EAAE,GAAK,CAAC,MAAQ,aAAa,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,UAAU,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,MAAM,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,UAAU,EAAE,GAAK,CAAC,MAAQ,WAAW,EAAE,GAAK,CAAC,MAAQ,UAAU,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,UAAU,EAAE,GAAK,CAAC,MAAQ,WAAW,EAAE,GAAK,CAAC,MAAQ,WAAW,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,OAAO,EAAE,GAAK,CAAC,MAAQ,YAAY,EAAE,GAAK,CAAC,MAAQ,aAAa,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,QAAQ,EAAE,GAAK,CAAC,MAAQ,UAAU,EAAE,GAAK,CAAC,MAAQ,cAAc,EAAE,GAAK,CAAC,MAAQ,SAAS,EAAE,GAAK,CAAC,MAAQ,YAAY,EAAE,GAAK,CAAC,MAAQ,eAAe,EAAE,MAAQ,CAAC,MAAQ,QAAQ,CAAC,EAAE,gBAAkB,CAAC,MAAQ,YAAY,YAAc,gEAAgE,UAAY,CAAC,MAAQ,YAAY,EAAE,YAAc,CAAC,MAAQ,eAAe,EAAE,iBAAmB,CAAC,MAAQ,6BAA6B,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,EAAE,YAAc,CAAC,MAAQ,gBAAgB,CAAC,EAAE,wBAA0B,CAAC,UAAY,CAAC,MAAQ,YAAY,EAAE,wBAA0B,CAAC,MAAQ,oBAAoB,EAAE,oCAAsC,CAAC,MAAQ,0BAA0B,EAAE,MAAQ,CAAC,MAAQ,YAAY,CAAC,EAAE,mBAAqB,CAAC,MAAQ,iCAAiC,UAAY,CAAC,MAAQ,YAAY,EAAE,WAAa,CAAC,MAAQ,0BAA0B,EAAE,WAAa,CAAC,MAAQ,iCAAiC,CAAC,EAAE,eAAiB,CAAC,QAAU,CAAC,MAAQ,uBAAuB,YAAc,oDAAoD,eAAiB,stBAAstB,kBAAoB,sjBAAsjB,EAAE,OAAS,CAAC,MAAQ,mBAAmB,YAAc,8MAA8M,eAAiB,gkBAAgkB,kBAAoB,gyBAAgyB,CAAC,EAAE,UAAY,CAAC,WAAa,CAAC,MAAQ,YAAY,EAAE,gBAAkB,CAAC,MAAQ,OAAO,EAAE,SAAW,CAAC,MAAQ,MAAM,EAAE,WAAa,CAAC,MAAQ,aAAa,EAAE,SAAW,CAAC,MAAQ,gBAAgB,CAAC,EAAE,cAAgB,CAAC,cAAgB,CAAC,MAAQ,MAAM,EAAE,cAAgB,CAAC,MAAQ,UAAU,EAAE,gBAAkB,CAAC,MAAQ,WAAW,EAAE,gBAAkB,CAAC,MAAQ,YAAY,EAAE,eAAiB,CAAC,MAAQ,SAAS,EAAE,YAAc,CAAC,MAAQ,OAAO,EAAE,MAAQ,CAAC,MAAQ,OAAO,CAAC,EAAE,aAAe,CAAC,UAAY,CAAC,MAAQ,cAAc,YAAc,aAAa,EAAE,iBAAmB,CAAC,MAAQ,wBAAwB,YAAc,wIAAwI,EAAE,OAAS,CAAC,MAAQ,QAAQ,YAAc,kCAAkC,CAAC,EAAE,qBAAuB,CAAC,UAAY,CAAC,MAAQ,aAAa,EAAE,MAAQ,CAAC,MAAQ,UAAU,EAAE,QAAU,CAAC,MAAQ,WAAW,EAAE,SAAW,CAAC,MAAQ,YAAY,EAAE,KAAO,CAAC,MAAQ,OAAO,EAAE,cAAgB,CAAC,MAAQ,uBAAuB,EAAE,MAAQ,CAAC,MAAQ,WAAW,CAAC,EAAE,gBAAkB,CAAC,UAAY,CAAC,MAAQ,cAAc,YAAc,aAAa,EAAE,QAAU,CAAC,MAAQ,aAAa,YAAc,6EAA6E,EAAE,cAAgB,CAAC,MAAQ,qBAAqB,YAAc,4CAA4C,EAAE,SAAW,CAAC,MAAQ,sBAAsB,YAAc,sCAAsC,EAAE,SAAW,CAAC,MAAQ,yBAAyB,YAAc,8CAA8C,EAAE,OAAS,CAAC,MAAQ,uBAAuB,YAAc,iCAAiC,CAAC,CAAC,EAAE,QAAU,CAAC,4BAA8B,CAAC,IAAM,CAAC,MAAQ,MAAM,EAAE,UAAY,CAAC,MAAQ,yBAAyB,EAAE,SAAW,CAAC,MAAQ,WAAW,EAAE,MAAQ,CAAC,MAAQ,cAAc,EAAE,QAAU,CAAC,MAAQ,eAAe,EAAE,UAAY,CAAC,MAAQ,WAAW,CAAC,EAAE,yBAA2B,CAAC,IAAM,CAAC,MAAQ,MAAM,EAAE,UAAY,CAAC,MAAQ,yBAAyB,EAAE,SAAW,CAAC,MAAQ,WAAW,EAAE,MAAQ,CAAC,MAAQ,cAAc,EAAE,QAAU,CAAC,MAAQ,eAAe,EAAE,UAAY,CAAC,MAAQ,WAAW,CAAC,EAAE,uBAAyB,CAAC,eAAiB,CAAC,MAAQ,kBAAkB,YAAc,+nBAA+nB,EAAE,qCAAuC,CAAC,MAAQ,uBAAuB,YAAc,yYAAyY,EAAE,8DAAgE,CAAC,MAAQ,4BAA4B,YAAc,+fAA+f,CAAC,EAAE,mBAAqB,CAAC,UAAY,CAAC,MAAQ,eAAe,EAAE,KAAO,CAAC,MAAQ,WAAW,EAAE,SAAW,CAAC,MAAQ,WAAW,EAAE,MAAQ,CAAC,MAAQ,cAAc,CAAC,EAAE,iBAAmB,CAAC,uBAAyB,CAAC,MAAQ,wBAAwB,EAAE,yBAA2B,CAAC,MAAQ,gCAAgC,EAAE,uBAAyB,CAAC,MAAQ,uBAAuB,EAAE,mBAAqB,CAAC,MAAQ,gBAAgB,EAAE,qCAAuC,CAAC,MAAQ,qCAAqC,EAAE,uCAAyC,CAAC,MAAQ,6CAA6C,EAAE,qCAAuC,CAAC,MAAQ,oCAAoC,EAAE,kCAAoC,CAAC,MAAQ,gCAAgC,EAAE,sDAAwD,CAAC,MAAQ,0DAA0D,EAAE,wDAA0D,CAAC,MAAQ,kEAAkE,EAAE,sDAAwD,CAAC,MAAQ,yDAAyD,EAAE,mDAAqD,CAAC,MAAQ,qDAAqD,CAAC,EAAE,OAAS,CAAC,WAAa,CAAC,MAAQ,UAAU,EAAE,6BAA+B,CAAC,MAAQ,6BAA6B,EAAE,IAAM,CAAC,MAAQ,oBAAoB,EAAE,KAAO,CAAC,MAAQ,eAAe,EAAE,wBAA0B,CAAC,MAAQ,mBAAmB,EAAE,+BAAiC,CAAC,MAAQ,uBAAuB,EAAE,kCAAoC,CAAC,MAAQ,yBAAyB,EAAE,oCAAsC,CAAC,MAAQ,0BAA0B,EAAE,MAAQ,CAAC,MAAQ,YAAY,CAAC,EAAE,mBAAqB,CAAC,cAAgB,CAAC,MAAQ,qBAAqB,EAAE,gBAAkB,CAAC,MAAQ,gBAAgB,CAAC,EAAE,UAAY,CAAC,aAAe,CAAC,MAAQ,eAAe,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,kBAAoB,CAAC,MAAQ,uBAAuB,EAAE,gBAAkB,CAAC,MAAQ,uBAAuB,EAAE,MAAQ,CAAC,MAAQ,QAAQ,EAAE,uDAAyD,CAAC,MAAQ,8DAA8D,EAAE,kBAAoB,CAAC,MAAQ,gCAAgC,EAAE,oBAAsB,CAAC,MAAQ,0BAA0B,EAAE,yBAA2B,CAAC,MAAQ,gCAAgC,CAAC,EAAE,gBAAkB,CAAC,oBAAsB,CAAC,MAAQ,0BAA0B,EAAE,eAAiB,CAAC,MAAQ,uBAAuB,EAAE,2BAA6B,CAAC,MAAQ,iBAAiB,CAAC,EAAE,YAAc,CAAC,qBAAuB,CAAC,MAAQ,sBAAsB,EAAE,0BAA4B,CAAC,MAAQ,6BAA6B,CAAC,EAAE,eAAiB,CAAC,kBAAoB,CAAC,MAAQ,yCAAyC,EAAE,KAAO,CAAC,MAAQ,mBAAmB,EAAE,cAAgB,CAAC,MAAQ,2BAA2B,EAAE,MAAQ,CAAC,MAAQ,oBAAoB,CAAC,EAAE,eAAiB,CAAC,SAAW,CAAC,MAAQ,cAAc,EAAE,SAAW,CAAC,MAAQ,cAAc,EAAE,aAAe,CAAC,MAAQ,0BAA0B,CAAC,EAAE,SAAW,CAAC,mBAAqB,CAAC,MAAQ,6BAA6B,EAAE,UAAY,CAAC,MAAQ,eAAe,CAAC,EAAE,YAAc,CAAC,QAAU,CAAC,MAAQ,gBAAgB,EAAE,OAAS,CAAC,MAAQ,aAAa,EAAE,YAAc,CAAC,MAAQ,cAAc,CAAC,EAAE,qBAAuB,CAAC,UAAY,CAAC,MAAQ,gBAAgB,EAAE,mBAAqB,CAAC,MAAQ,wBAAwB,EAAE,qBAAuB,CAAC,MAAQ,yBAAyB,CAAC,EAAE,kBAAoB,CAAC,4BAA8B,CAAC,MAAQ,8BAA8B,EAAE,qCAAuC,CAAC,MAAQ,sCAAsC,CAAC,EAAE,eAAiB,CAAC,yCAA2C,CAAC,MAAQ,8BAA8B,EAAE,2BAA6B,CAAC,MAAQ,yCAAyC,EAAE,mCAAqC,CAAC,MAAQ,+BAA+B,CAAC,EAAE,kBAAoB,CAAC,KAAO,CAAC,MAAQ,aAAa,EAAE,yBAA2B,CAAC,MAAQ,kBAAkB,EAAE,0BAA4B,CAAC,MAAQ,yCAAyC,EAAE,wBAA0B,CAAC,MAAQ,qBAAqB,EAAE,0CAA4C,CAAC,MAAQ,gDAAgD,EAAE,WAAa,CAAC,MAAQ,eAAe,EAAE,cAAgB,CAAC,MAAQ,eAAe,EAAE,2BAA6B,CAAC,MAAQ,kCAAkC,EAAE,UAAY,CAAC,MAAQ,eAAe,EAAE,UAAY,CAAC,MAAQ,oBAAoB,EAAE,QAAU,CAAC,MAAQ,iCAAiC,EAAE,QAAU,CAAC,MAAQ,SAAS,EAAE,UAAY,CAAC,MAAQ,0CAA0C,EAAE,IAAM,CAAC,MAAQ,uCAAuC,EAAE,MAAQ,CAAC,MAAQ,yCAAyC,EAAE,QAAU,CAAC,MAAQ,iCAAiC,EAAE,IAAM,CAAC,MAAQ,gCAAgC,EAAE,OAAS,CAAC,MAAQ,qBAAqB,EAAE,QAAU,CAAC,MAAQ,qBAAqB,EAAE,QAAU,CAAC,MAAQ,4BAA4B,EAAE,WAAa,CAAC,MAAQ,yBAAyB,EAAE,IAAM,CAAC,MAAQ,iBAAiB,EAAE,cAAgB,CAAC,MAAQ,kCAAkC,EAAE,UAAY,CAAC,MAAQ,0CAA0C,EAAE,MAAQ,CAAC,MAAQ,oBAAoB,EAAE,UAAY,CAAC,MAAQ,yBAAyB,EAAE,MAAQ,CAAC,MAAQ,qBAAqB,EAAE,MAAQ,CAAC,MAAQ,mBAAmB,EAAE,GAAK,CAAC,MAAQ,eAAe,EAAE,MAAQ,CAAC,MAAQ,kBAAkB,EAAE,WAAa,CAAC,MAAQ,uBAAuB,EAAE,OAAS,CAAC,MAAQ,yCAAyC,EAAE,KAAO,CAAC,MAAQ,iBAAiB,CAAC,EAAE,qBAAuB,CAAC,QAAU,CAAC,MAAQ,SAAS,EAAE,kBAAoB,CAAC,MAAQ,+BAA+B,EAAE,cAAgB,CAAC,MAAQ,oCAAoC,EAAE,sBAAwB,CAAC,MAAQ,oBAAoB,EAAE,eAAiB,CAAC,MAAQ,WAAW,EAAE,aAAe,CAAC,MAAQ,uCAAuC,EAAE,uBAAyB,CAAC,MAAQ,uBAAuB,EAAE,SAAW,CAAC,MAAQ,UAAU,EAAE,eAAiB,CAAC,MAAQ,YAAY,EAAE,0BAA4B,CAAC,MAAQ,kBAAkB,EAAE,eAAiB,CAAC,MAAQ,UAAU,EAAE,eAAiB,CAAC,MAAQ,aAAa,EAAE,qBAAuB,CAAC,MAAQ,cAAc,EAAE,YAAc,CAAC,MAAQ,WAAW,EAAE,mCAAqC,CAAC,MAAQ,0CAA0C,EAAE,MAAQ,CAAC,MAAQ,SAAS,CAAC,EAAE,uBAAyB,CAAC,QAAU,CAAC,MAAQ,SAAS,EAAE,kBAAoB,CAAC,MAAQ,+BAA+B,EAAE,cAAgB,CAAC,MAAQ,oCAAoC,EAAE,sBAAwB,CAAC,MAAQ,oBAAoB,EAAE,eAAiB,CAAC,MAAQ,WAAW,EAAE,aAAe,CAAC,MAAQ,uCAAuC,EAAE,uBAAyB,CAAC,MAAQ,uBAAuB,EAAE,SAAW,CAAC,MAAQ,UAAU,EAAE,oBAAsB,CAAC,MAAQ,iBAAiB,EAAE,WAAa,CAAC,MAAQ,aAAa,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,EAAE,4BAA8B,CAAC,MAAQ,4BAA4B,EAAE,eAAiB,CAAC,MAAQ,YAAY,EAAE,0BAA4B,CAAC,MAAQ,kBAAkB,EAAE,gBAAkB,CAAC,MAAQ,uCAAuC,EAAE,OAAS,CAAC,MAAQ,UAAU,EAAE,eAAiB,CAAC,MAAQ,YAAY,EAAE,MAAQ,CAAC,MAAQ,SAAS,CAAC,EAAE,cAAgB,CAAC,cAAgB,CAAC,MAAQ,eAAe,EAAE,sBAAwB,CAAC,MAAQ,cAAc,EAAE,mBAAqB,CAAC,MAAQ,eAAe,EAAE,4BAA8B,CAAC,MAAQ,oBAAoB,EAAE,8BAAgC,CAAC,MAAQ,wDAAwD,CAAC,EAAE,YAAc,CAAC,qBAAuB,CAAC,MAAQ,WAAW,EAAE,iBAAmB,CAAC,MAAQ,YAAY,EAAE,YAAc,CAAC,MAAQ,YAAY,EAAE,cAAgB,CAAC,MAAQ,WAAW,CAAC,EAAE,cAAgB,CAAC,sCAAwC,CAAC,MAAQ,+CAA+C,EAAE,qDAAuD,CAAC,MAAQ,gCAAgC,EAAE,qCAAuC,CAAC,MAAQ,+BAA+B,EAAE,2CAA6C,CAAC,MAAQ,kCAAkC,EAAE,sEAAwE,CAAC,MAAQ,qDAAqD,CAAC,EAAE,aAAe,CAAC,KAAO,CAAC,MAAQ,OAAO,EAAE,IAAM,CAAC,MAAQ,OAAO,EAAE,KAAO,CAAC,MAAQ,QAAQ,EAAE,OAAS,CAAC,MAAQ,OAAO,CAAC,EAAE,iBAAmB,CAAC,8BAAgC,CAAC,MAAQ,wBAAwB,EAAE,4BAA8B,CAAC,MAAQ,yBAAyB,CAAC,EAAE,eAAiB,CAAC,KAAO,CAAC,MAAQ,QAAQ,EAAE,OAAS,CAAC,MAAQ,SAAS,CAAC,EAAE,WAAa,CAAC,UAAY,CAAC,MAAQ,eAAe,EAAE,kBAAoB,CAAC,MAAQ,mBAAmB,CAAC,CAAC,EAAE,gBAAkB,CAAC,eAAiB,CAAC,MAAQ,yBAAyB,SAAW,CAAC,MAAQ,uBAAuB,MAAQ,qDAAqD,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,gDAAgD,EAAE,QAAU,CAAC,MAAQ,kBAAkB,MAAQ,8CAA8C,EAAE,eAAiB,CAAC,MAAQ,uBAAuB,MAAQ,iDAAiD,EAAE,GAAK,CAAC,MAAQ,sBAAsB,MAAQ,qDAAqD,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,6DAA6D,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,kEAAkE,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,oCAAoC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,sEAAsE,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,uDAAuD,CAAC,EAAE,cAAgB,CAAC,MAAQ,kBAAkB,GAAK,CAAC,MAAQ,kBAAkB,MAAQ,0DAA0D,EAAE,OAAS,CAAC,MAAQ,kBAAkB,MAAQ,4DAA4D,EAAE,UAAY,CAAC,MAAQ,sBAAsB,MAAQ,oDAAoD,EAAE,OAAS,CAAC,MAAQ,qBAAqB,MAAQ,0DAA0D,EAAE,iBAAmB,CAAC,MAAQ,cAAc,MAAQ,gEAAgE,EAAE,OAAS,CAAC,MAAQ,mBAAmB,MAAQ,2CAA2C,EAAE,MAAQ,CAAC,MAAQ,eAAe,MAAQ,2DAA2D,EAAE,SAAW,CAAC,MAAQ,mBAAmB,MAAQ,+DAA+D,CAAC,EAAE,OAAS,CAAC,MAAQ,eAAe,WAAa,CAAC,MAAQ,wBAAwB,MAAQ,+CAA+C,EAAE,UAAY,CAAC,MAAQ,UAAU,MAAQ,mCAAmC,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,oCAAoC,EAAE,YAAc,CAAC,MAAQ,aAAa,MAAQ,mDAAmD,EAAE,aAAe,CAAC,MAAQ,qBAAqB,MAAQ,sDAAsD,EAAE,YAAc,CAAC,MAAQ,oBAAoB,MAAQ,8CAA8C,EAAE,MAAQ,CAAC,MAAQ,OAAO,MAAQ,2CAA2C,EAAE,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,yCAAyC,EAAE,IAAM,CAAC,MAAQ,YAAY,MAAQ,2CAA2C,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,mCAAmC,EAAE,GAAK,CAAC,MAAQ,qBAAqB,MAAQ,oDAAoD,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,uDAAuD,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,6DAA6D,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,qCAAqC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,gEAAgE,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,uDAAuD,CAAC,EAAE,UAAY,CAAC,MAAQ,WAAW,MAAQ,CAAC,MAAQ,iBAAiB,MAAQ,2CAA2C,EAAE,IAAM,CAAC,MAAQ,kBAAkB,MAAQ,4CAA4C,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,kDAAkD,EAAE,KAAO,CAAC,MAAQ,cAAc,MAAQ,mDAAmD,CAAC,EAAE,wBAA0B,CAAC,MAAQ,0BAA0B,MAAQ,CAAC,MAAQ,oBAAoB,MAAQ,wDAAwD,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,6CAA6C,EAAE,MAAQ,CAAC,MAAQ,kBAAkB,MAAQ,sDAAsD,CAAC,EAAE,YAAc,CAAC,MAAQ,mBAAmB,KAAO,CAAC,MAAQ,cAAc,MAAQ,+CAA+C,EAAE,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,2CAA2C,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,oCAAoC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,sDAAsD,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,uCAAuC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,kCAAkC,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,wBAAwB,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,sCAAsC,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,kCAAkC,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,oCAAoC,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,gCAAgC,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,4BAA4B,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,8BAA8B,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,sCAAsC,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,mCAAmC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,+BAA+B,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,6CAA6C,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,kCAAkC,CAAC,EAAE,eAAiB,CAAC,MAAQ,eAAe,OAAS,CAAC,MAAQ,eAAe,MAAQ,yBAAyB,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,gCAAgC,EAAE,MAAQ,CAAC,MAAQ,aAAa,MAAQ,6BAA6B,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,0BAA0B,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,kCAAkC,CAAC,EAAE,cAAgB,CAAC,MAAQ,cAAc,SAAW,CAAC,MAAQ,iBAAiB,MAAQ,iCAAiC,EAAE,YAAc,CAAC,MAAQ,6BAA6B,MAAQ,2CAA2C,EAAE,uBAAyB,CAAC,MAAQ,6BAA6B,MAAQ,0CAA0C,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,4DAA4D,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,qCAAqC,EAAE,SAAW,CAAC,MAAQ,kBAAkB,MAAQ,qCAAqC,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,4CAA4C,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,yBAAyB,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,yBAAyB,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,oCAAoC,EAAE,eAAiB,CAAC,MAAQ,yBAAyB,MAAQ,6CAA6C,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,2CAA2C,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,+BAA+B,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,mCAAmC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,mDAAmD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,iBAAiB,EAAE,WAAa,CAAC,MAAQ,iBAAiB,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,0BAA0B,CAAC,EAAE,SAAW,CAAC,MAAQ,iBAAiB,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,+BAA+B,EAAE,aAAe,CAAC,MAAQ,kBAAkB,MAAQ,2BAA2B,EAAE,UAAY,CAAC,MAAQ,UAAU,MAAQ,mBAAmB,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,oBAAoB,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,qCAAqC,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,iCAAiC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,iEAAiE,EAAE,eAAiB,CAAC,MAAQ,6BAA6B,MAAQ,sCAAsC,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,kCAAkC,EAAE,kBAAoB,CAAC,MAAQ,sCAAsC,MAAQ,mEAAmE,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,wDAAwD,CAAC,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,CAAC,MAAQ,aAAa,MAAQ,kCAAkC,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,+BAA+B,EAAE,OAAS,CAAC,MAAQ,aAAa,MAAQ,4BAA4B,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,6BAA6B,EAAE,KAAO,CAAC,MAAQ,WAAW,MAAQ,0BAA0B,EAAE,YAAc,CAAC,MAAQ,YAAY,MAAQ,6BAA6B,CAAC,EAAE,aAAe,CAAC,MAAQ,mBAAmB,OAAS,CAAC,MAAQ,aAAa,MAAQ,4DAA4D,CAAC,EAAE,sBAAwB,CAAC,MAAQ,mBAAmB,SAAW,CAAC,MAAQ,0BAA0B,MAAQ,iEAAiE,EAAE,SAAW,CAAC,MAAQ,uBAAuB,MAAQ,yDAAyD,EAAE,kBAAoB,CAAC,MAAQ,sBAAsB,MAAQ,sCAAsC,EAAE,aAAe,CAAC,MAAQ,cAAc,MAAQ,oEAAoE,CAAC,EAAE,cAAgB,CAAC,MAAQ,kBAAkB,GAAK,CAAC,MAAQ,WAAW,MAAQ,yDAAyD,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,8CAA8C,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,gDAAgD,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,gDAAgD,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,sDAAsD,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,uDAAuD,EAAE,KAAO,CAAC,MAAQ,QAAQ,MAAQ,sDAAsD,EAAE,SAAW,CAAC,MAAQ,uBAAuB,MAAQ,6EAA6E,EAAE,aAAe,CAAC,MAAQ,uBAAuB,MAAQ,4DAA4D,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,mDAAmD,EAAE,kBAAoB,CAAC,MAAQ,mBAAmB,MAAQ,0CAA0C,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,4DAA4D,CAAC,EAAE,cAAgB,CAAC,MAAQ,sBAAsB,GAAK,CAAC,MAAQ,WAAW,MAAQ,mDAAmD,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,8CAA8C,EAAE,GAAK,CAAC,MAAQ,iBAAiB,MAAQ,iDAAiD,EAAE,SAAW,CAAC,MAAQ,eAAe,MAAQ,sDAAsD,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,mDAAmD,EAAE,KAAO,CAAC,MAAQ,WAAW,MAAQ,gDAAgD,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,wDAAwD,EAAE,OAAS,CAAC,MAAQ,SAAS,MAAQ,8CAA8C,CAAC,EAAE,UAAY,CAAC,MAAQ,cAAc,KAAO,CAAC,MAAQ,OAAO,MAAQ,oCAAoC,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,6CAA6C,EAAE,MAAQ,CAAC,MAAQ,aAAa,MAAQ,gDAAgD,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,6CAA6C,EAAE,UAAY,CAAC,MAAQ,iBAAiB,MAAQ,8CAA8C,EAAE,aAAe,CAAC,MAAQ,0BAA0B,MAAQ,2DAA2D,CAAC,EAAE,eAAiB,CAAC,MAAQ,aAAa,SAAW,CAAC,MAAQ,eAAe,MAAQ,2CAA2C,EAAE,YAAc,CAAC,MAAQ,mBAAmB,MAAQ,mDAAmD,EAAE,WAAa,CAAC,MAAQ,wBAAwB,MAAQ,kCAAkC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,wCAAwC,EAAE,SAAW,CAAC,MAAQ,kBAAkB,MAAQ,wCAAwC,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,6CAA6C,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,8BAA8B,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,wBAAwB,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,sCAAsC,EAAE,eAAiB,CAAC,MAAQ,uBAAuB,MAAQ,4CAA4C,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,0CAA0C,EAAE,GAAK,CAAC,MAAQ,SAAS,MAAQ,mCAAmC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,kCAAkC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,8BAA8B,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,gCAAgC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,4CAA4C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,yCAAyC,CAAC,EAAE,sBAAwB,CAAC,MAAQ,0BAA0B,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,oCAAoC,EAAE,GAAK,CAAC,MAAQ,SAAS,MAAQ,yCAAyC,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,8BAA8B,EAAE,MAAQ,CAAC,MAAQ,aAAa,MAAQ,4BAA4B,EAAE,qBAAuB,CAAC,MAAQ,0BAA0B,MAAQ,iDAAiD,CAAC,EAAE,YAAc,CAAC,MAAQ,CAAC,MAAQ,OAAO,MAAQ,gCAAgC,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,wCAAwC,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,uCAAuC,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,8CAA8C,EAAE,GAAK,CAAC,MAAQ,SAAS,MAAQ,qCAAqC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,2CAA2C,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,8BAA8B,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,kCAAkC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,qDAAqD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,6CAA6C,CAAC,EAAE,iBAAmB,CAAC,MAAQ,2BAA2B,WAAa,CAAC,MAAQ,2BAA2B,MAAQ,oDAAoD,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,yCAAyC,EAAE,MAAQ,CAAC,MAAQ,UAAU,MAAQ,oCAAoC,EAAE,WAAa,CAAC,MAAQ,wBAAwB,MAAQ,+CAA+C,EAAE,UAAY,CAAC,MAAQ,UAAU,MAAQ,kBAAkB,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,mBAAmB,EAAE,YAAc,CAAC,MAAQ,aAAa,MAAQ,wBAAwB,EAAE,aAAe,CAAC,MAAQ,qBAAqB,MAAQ,mCAAmC,EAAE,YAAc,CAAC,MAAQ,YAAY,MAAQ,sBAAsB,EAAE,MAAQ,CAAC,MAAQ,OAAO,MAAQ,oBAAoB,EAAE,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,wBAAwB,EAAE,IAAM,CAAC,MAAQ,aAAa,MAAQ,0BAA0B,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,sBAAsB,EAAE,GAAK,CAAC,MAAQ,SAAS,MAAQ,qCAAqC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,0CAA0C,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,8BAA8B,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,kCAAkC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,oDAAoD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,6CAA6C,CAAC,EAAE,YAAc,CAAC,MAAQ,gBAAgB,WAAa,CAAC,MAAQ,wBAAwB,MAAQ,uCAAuC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,sCAAsC,EAAE,SAAW,CAAC,MAAQ,kBAAkB,MAAQ,sCAAsC,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,yCAAyC,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,0BAA0B,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,oBAAoB,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,kCAAkC,EAAE,eAAiB,CAAC,MAAQ,uBAAuB,MAAQ,wCAAwC,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,sCAAsC,EAAE,GAAK,CAAC,MAAQ,SAAS,MAAQ,6BAA6B,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,kCAAkC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,8BAA8B,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,0BAA0B,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,4CAA4C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,qCAAqC,CAAC,EAAE,kBAAoB,CAAC,MAAQ,0BAA0B,WAAa,CAAC,MAAQ,cAAc,MAAQ,iEAAiE,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,mEAAmE,EAAE,KAAO,CAAC,MAAQ,gBAAgB,MAAQ,mDAAmD,EAAE,IAAM,CAAC,MAAQ,QAAQ,MAAQ,uEAAuE,CAAC,EAAE,iBAAmB,CAAC,MAAQ,kBAAkB,KAAO,CAAC,MAAQ,iBAAiB,MAAQ,4EAA4E,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,0EAA0E,EAAE,aAAe,CAAC,MAAQ,mBAAmB,MAAQ,8DAA8D,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,qEAAqE,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,yEAAyE,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,8EAA8E,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,8DAA8D,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,kFAAkF,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,yEAAyE,CAAC,EAAE,qBAAuB,CAAC,MAAQ,2BAA2B,OAAS,CAAC,MAAQ,QAAQ,MAAQ,0DAA0D,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,6DAA6D,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,sDAAsD,EAAE,iBAAmB,CAAC,MAAQ,+BAA+B,MAAQ,gFAAgF,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,qDAAqD,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,oEAAoE,CAAC,EAAE,kBAAoB,CAAC,MAAQ,kCAAkC,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,8EAA8E,EAAE,SAAW,CAAC,MAAQ,eAAe,MAAQ,4EAA4E,EAAE,UAAY,CAAC,MAAQ,kBAAkB,MAAQ,mEAAmE,EAAE,KAAO,CAAC,MAAQ,QAAQ,MAAQ,sEAAsE,CAAC,EAAE,yBAA2B,CAAC,MAAQ,uBAAuB,GAAK,CAAC,MAAQ,WAAW,MAAQ,yDAAyD,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,uEAAuE,EAAE,QAAU,CAAC,MAAQ,OAAO,MAAQ,6DAA6D,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,6DAA6D,CAAC,EAAE,qBAAuB,CAAC,MAAQ,2BAA2B,GAAK,CAAC,MAAQ,WAAW,MAAQ,gDAAgD,EAAE,eAAiB,CAAC,MAAQ,iBAAiB,MAAQ,gDAAgD,EAAE,UAAY,CAAC,MAAQ,YAAY,MAAQ,0DAA0D,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,mDAAmD,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,8CAA8C,EAAE,WAAa,CAAC,MAAQ,eAAe,MAAQ,iDAAiD,EAAE,QAAU,CAAC,MAAQ,iBAAiB,MAAQ,2DAA2D,EAAE,cAAgB,CAAC,MAAQ,mBAAmB,MAAQ,6DAA6D,EAAE,SAAW,CAAC,MAAQ,kBAAkB,MAAQ,4DAA4D,EAAE,eAAiB,CAAC,MAAQ,oBAAoB,MAAQ,8DAA8D,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,wEAAwE,CAAC,EAAE,qCAAuC,CAAC,MAAQ,mCAAmC,MAAQ,CAAC,MAAQ,UAAU,MAAQ,+CAA+C,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,6CAA6C,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,0BAA0B,CAAC,EAAE,yBAA2B,CAAC,MAAQ,6BAA6B,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,oDAAoD,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,qEAAqE,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,6CAA6C,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,8CAA8C,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,sDAAsD,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,iDAAiD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,kDAAkD,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,oDAAoD,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,mDAAmD,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,4CAA4C,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,8CAA8C,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,wDAAwD,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,+CAA+C,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,yCAAyC,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,oEAAoE,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uDAAuD,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,kDAAkD,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,wCAAwC,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,0DAA0D,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,4EAA4E,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,+CAA+C,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,kDAAkD,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,iDAAiD,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,6DAA6D,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,kDAAkD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,oDAAoD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,wDAAwD,CAAC,EAAE,qBAAuB,CAAC,MAAQ,8BAA8B,yBAA2B,CAAC,MAAQ,4BAA4B,MAAQ,6DAA6D,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,yDAAyD,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,8DAA8D,EAAE,iBAAmB,CAAC,MAAQ,+BAA+B,MAAQ,+DAA+D,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,uCAAuC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,8DAA8D,CAAC,EAAE,gCAAkC,CAAC,MAAQ,6CAA6C,iBAAmB,CAAC,MAAQ,sBAAsB,MAAQ,4CAA4C,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,yDAAyD,EAAE,QAAU,CAAC,MAAQ,OAAO,MAAQ,qCAAqC,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,mDAAmD,EAAE,UAAY,CAAC,MAAQ,uBAAuB,MAAQ,4DAA4D,CAAC,EAAE,iCAAmC,CAAC,MAAQ,+BAA+B,MAAQ,CAAC,MAAQ,kBAAkB,MAAQ,oEAAoE,EAAE,aAAe,CAAC,MAAQ,0BAA0B,MAAQ,oDAAoD,EAAE,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,qFAAqF,CAAC,EAAE,iBAAmB,CAAC,MAAQ,iBAAiB,oBAAsB,CAAC,MAAQ,0BAA0B,MAAQ,mDAAmD,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,4EAA4E,EAAE,cAAgB,CAAC,MAAQ,cAAc,MAAQ,2EAA2E,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,iEAAiE,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mEAAmE,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,qDAAqD,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,sEAAsE,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,qCAAqC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,qEAAqE,CAAC,EAAE,iBAAmB,CAAC,MAAQ,0BAA0B,oBAAsB,CAAC,MAAQ,2BAA2B,MAAQ,2DAA2D,CAAC,EAAE,gBAAkB,CAAC,MAAQ,gBAAgB,eAAiB,CAAC,MAAQ,mBAAmB,MAAQ,mEAAmE,EAAE,gBAAkB,CAAC,MAAQ,mBAAmB,MAAQ,6EAA6E,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,wCAAwC,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,8CAA8C,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,0EAA0E,EAAE,MAAQ,CAAC,MAAQ,mBAAmB,MAAQ,kDAAkD,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,+CAA+C,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,yDAAyD,CAAC,EAAE,YAAc,CAAC,MAAQ,aAAa,YAAc,CAAC,MAAQ,eAAe,MAAQ,2CAA2C,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,2CAA2C,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,uEAAuE,EAAE,MAAQ,CAAC,MAAQ,mBAAmB,MAAQ,+CAA+C,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,sDAAsD,CAAC,EAAE,sBAAwB,CAAC,MAAQ,oBAAoB,YAAc,CAAC,MAAQ,kBAAkB,MAAQ,kDAAkD,EAAE,MAAQ,CAAC,MAAQ,OAAO,MAAQ,iCAAiC,EAAE,SAAW,CAAC,MAAQ,cAAc,MAAQ,gDAAgD,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,qCAAqC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,8BAA8B,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,4CAA4C,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,2CAA2C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,yCAAyC,CAAC,EAAE,sBAAwB,CAAC,MAAQ,kBAAkB,aAAe,CAAC,MAAQ,mBAAmB,MAAQ,wCAAwC,EAAE,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,oCAAoC,EAAE,IAAM,CAAC,MAAQ,eAAe,MAAQ,wBAAwB,EAAE,SAAW,CAAC,MAAQ,uBAAuB,MAAQ,8BAA8B,EAAE,OAAS,CAAC,MAAQ,uBAAuB,MAAQ,8BAA8B,EAAE,SAAW,CAAC,MAAQ,cAAc,MAAQ,kCAAkC,EAAE,OAAS,CAAC,MAAQ,SAAS,MAAQ,kCAAkC,EAAE,KAAO,CAAC,MAAQ,8BAA8B,MAAQ,0CAA0C,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,6DAA6D,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,mCAAmC,EAAE,OAAS,CAAC,MAAQ,mBAAmB,MAAQ,qBAAqB,EAAE,KAAO,CAAC,MAAQ,iBAAiB,MAAQ,yBAAyB,EAAE,QAAU,CAAC,MAAQ,sBAAsB,MAAQ,wCAAwC,EAAE,WAAa,CAAC,MAAQ,qBAAqB,MAAQ,iCAAiC,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,8BAA8B,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,iCAAiC,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,oCAAoC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,6BAA6B,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,2CAA2C,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,2CAA2C,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,4CAA4C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,CAAC,EAAE,cAAgB,CAAC,MAAQ,qBAAqB,WAAa,CAAC,MAAQ,WAAW,MAAQ,uCAAuC,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,4CAA4C,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,sBAAsB,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,qCAAqC,CAAC,EAAE,QAAU,CAAC,MAAQ,eAAe,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,+CAA+C,EAAE,IAAM,CAAC,MAAQ,aAAa,MAAQ,2BAA2B,EAAE,IAAM,CAAC,MAAQ,QAAQ,MAAQ,sBAAsB,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,2BAA2B,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,6BAA6B,EAAE,IAAM,CAAC,MAAQ,QAAQ,MAAQ,sBAAsB,EAAE,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,8BAA8B,CAAC,EAAE,aAAe,CAAC,MAAQ,uBAAuB,OAAS,CAAC,MAAQ,SAAS,MAAQ,oDAAoD,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,yBAAyB,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,mDAAmD,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,2BAA2B,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,kCAAkC,CAAC,EAAE,WAAa,CAAC,MAAQ,qBAAqB,UAAY,CAAC,MAAQ,eAAe,MAAQ,6DAA6D,EAAE,aAAe,CAAC,MAAQ,oBAAoB,MAAQ,kEAAkE,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,2DAA2D,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,8CAA8C,EAAE,OAAS,CAAC,MAAQ,WAAW,MAAQ,6DAA6D,EAAE,YAAc,CAAC,MAAQ,cAAc,MAAQ,6CAA6C,EAAE,oBAAsB,CAAC,MAAQ,uBAAuB,MAAQ,0CAA0C,EAAE,IAAM,CAAC,MAAQ,aAAa,MAAQ,8DAA8D,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,8CAA8C,CAAC,EAAE,aAAe,CAAC,MAAQ,oBAAoB,OAAS,CAAC,MAAQ,OAAO,MAAQ,qDAAqD,EAAE,OAAS,CAAC,MAAQ,aAAa,MAAQ,6DAA6D,EAAE,aAAe,CAAC,MAAQ,oBAAoB,MAAQ,4DAA4D,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,oEAAoE,EAAE,oBAAsB,CAAC,MAAQ,uBAAuB,MAAQ,2EAA2E,EAAE,eAAiB,CAAC,MAAQ,sBAAsB,MAAQ,yCAAyC,CAAC,EAAE,OAAS,CAAC,MAAQ,SAAS,KAAO,CAAC,MAAQ,aAAa,MAAQ,yBAAyB,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,kCAAkC,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,wBAAwB,EAAE,KAAO,CAAC,MAAQ,UAAU,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,0CAA0C,EAAE,sBAAwB,CAAC,MAAQ,8BAA8B,MAAQ,6EAA6E,EAAE,uBAAyB,CAAC,MAAQ,yBAAyB,MAAQ,+DAA+D,CAAC,EAAE,eAAiB,CAAC,MAAQ,8BAA8B,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,2CAA2C,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,kCAAkC,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,0DAA0D,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,yCAAyC,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,iCAAiC,EAAE,KAAO,CAAC,MAAQ,UAAU,MAAQ,mCAAmC,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,sCAAsC,EAAE,SAAW,CAAC,MAAQ,iBAAiB,MAAQ,mDAAmD,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,yDAAyD,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,qCAAqC,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,8BAA8B,CAAC,EAAE,cAAgB,CAAC,MAAQ,iBAAiB,KAAO,CAAC,MAAQ,gBAAgB,MAAQ,8CAA8C,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,iDAAiD,EAAE,sBAAwB,CAAC,MAAQ,wBAAwB,MAAQ,kEAAkE,EAAE,aAAe,CAAC,MAAQ,oBAAoB,MAAQ,qEAAqE,EAAE,oBAAsB,CAAC,MAAQ,0BAA0B,MAAQ,6CAA6C,EAAE,sBAAwB,CAAC,MAAQ,uCAAuC,MAAQ,0DAA0D,EAAE,cAAgB,CAAC,MAAQ,qBAAqB,MAAQ,wCAAwC,EAAE,uBAAyB,CAAC,MAAQ,yBAAyB,MAAQ,oEAAoE,EAAE,2BAA6B,CAAC,MAAQ,+BAA+B,MAAQ,kDAAkD,CAAC,EAAE,YAAc,CAAC,MAAQ,yBAAyB,IAAM,CAAC,MAAQ,gBAAgB,MAAQ,0DAA0D,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,2CAA2C,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,8CAA8C,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,wCAAwC,CAAC,EAAE,kBAAoB,CAAC,MAAQ,qBAAqB,OAAS,CAAC,MAAQ,iBAAiB,MAAQ,yCAAyC,EAAE,OAAS,CAAC,MAAQ,WAAW,MAAQ,wDAAwD,EAAE,aAAe,CAAC,MAAQ,uBAAuB,MAAQ,gDAAgD,EAAE,WAAa,CAAC,MAAQ,uBAAuB,MAAQ,2CAA2C,EAAE,KAAO,CAAC,MAAQ,YAAY,MAAQ,gDAAgD,EAAE,iBAAmB,CAAC,MAAQ,sBAAsB,MAAQ,0CAA0C,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,qDAAqD,CAAC,EAAE,SAAW,CAAC,MAAQ,mBAAmB,cAAgB,CAAC,MAAQ,oBAAoB,MAAQ,gCAAgC,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,kCAAkC,EAAE,gBAAkB,CAAC,MAAQ,cAAc,MAAQ,mCAAmC,EAAE,cAAgB,CAAC,MAAQ,qBAAqB,MAAQ,mCAAmC,EAAE,kBAAoB,CAAC,MAAQ,yBAAyB,MAAQ,mCAAmC,EAAE,UAAY,CAAC,MAAQ,cAAc,MAAQ,wCAAwC,EAAE,kBAAoB,CAAC,MAAQ,2BAA2B,MAAQ,sCAAsC,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,qCAAqC,EAAE,eAAiB,CAAC,MAAQ,cAAc,MAAQ,sCAAsC,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,mCAAmC,EAAE,gBAAkB,CAAC,MAAQ,sBAAsB,MAAQ,qCAAqC,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,wCAAwC,EAAE,gBAAkB,CAAC,MAAQ,2BAA2B,MAAQ,6CAA6C,EAAE,eAAiB,CAAC,MAAQ,eAAe,MAAQ,qCAAqC,EAAE,gBAAkB,CAAC,MAAQ,4BAA4B,MAAQ,2CAA2C,EAAE,QAAU,CAAC,MAAQ,sBAAsB,MAAQ,wDAAwD,EAAE,mBAAqB,CAAC,MAAQ,yBAAyB,MAAQ,6CAA6C,EAAE,kBAAoB,CAAC,MAAQ,oBAAoB,MAAQ,4BAA4B,EAAE,wBAA0B,CAAC,MAAQ,8BAA8B,MAAQ,mCAAmC,EAAE,UAAY,CAAC,MAAQ,uBAAuB,MAAQ,iDAAiD,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,4CAA4C,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,yCAAyC,EAAE,SAAW,CAAC,MAAQ,cAAc,MAAQ,qCAAqC,CAAC,EAAE,mBAAqB,CAAC,MAAQ,sBAAsB,KAAO,CAAC,MAAQ,aAAa,MAAQ,iCAAiC,EAAE,IAAM,CAAC,MAAQ,gBAAgB,MAAQ,0CAA0C,EAAE,aAAe,CAAC,MAAQ,gCAAgC,MAAQ,sDAAsD,EAAE,aAAe,CAAC,MAAQ,0BAA0B,MAAQ,8DAA8D,EAAE,kBAAoB,CAAC,MAAQ,yBAAyB,MAAQ,wDAAwD,CAAC,EAAE,sBAAwB,CAAC,MAAQ,uBAAuB,WAAa,CAAC,MAAQ,kCAAkC,MAAQ,4DAA4D,CAAC,EAAE,aAAe,CAAC,MAAQ,mBAAmB,iBAAmB,CAAC,MAAQ,gBAAgB,MAAQ,mDAAmD,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,qDAAqD,EAAE,SAAW,CAAC,MAAQ,YAAY,MAAQ,8CAA8C,EAAE,gBAAkB,CAAC,MAAQ,kBAAkB,MAAQ,wDAAwD,EAAE,oBAAsB,CAAC,MAAQ,2BAA2B,MAAQ,kDAAkD,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,6CAA6C,EAAE,kBAAoB,CAAC,MAAQ,2BAA2B,MAAQ,kDAAkD,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,kDAAkD,EAAE,2BAA6B,CAAC,MAAQ,mCAAmC,MAAQ,8CAA8C,EAAE,6BAA+B,CAAC,MAAQ,kCAAkC,MAAQ,6CAA6C,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,+BAA+B,EAAE,YAAc,CAAC,MAAQ,4BAA4B,MAAQ,oCAAoC,CAAC,EAAE,sBAAwB,CAAC,MAAQ,0BAA0B,UAAY,CAAC,MAAQ,UAAU,MAAQ,sBAAsB,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,uBAAuB,EAAE,qBAAuB,CAAC,MAAQ,gBAAgB,MAAQ,4BAA4B,EAAE,0BAA4B,CAAC,MAAQ,6BAA6B,MAAQ,2CAA2C,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,sCAAsC,EAAE,MAAQ,CAAC,MAAQ,mBAAmB,MAAQ,+BAA+B,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,4BAA4B,CAAC,EAAE,QAAU,CAAC,MAAQ,eAAe,UAAY,CAAC,MAAQ,sBAAsB,MAAQ,mCAAmC,EAAE,SAAW,CAAC,MAAQ,yBAAyB,MAAQ,4CAA4C,EAAE,eAAiB,CAAC,MAAQ,oBAAoB,MAAQ,6BAA6B,EAAE,QAAU,CAAC,MAAQ,cAAc,MAAQ,wCAAwC,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,qBAAqB,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,+CAA+C,EAAE,2BAA6B,CAAC,MAAQ,gCAAgC,MAAQ,iDAAiD,CAAC,EAAE,cAAgB,CAAC,MAAQ,iBAAiB,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,gCAAgC,CAAC,EAAE,oBAAsB,CAAC,MAAQ,mBAAmB,QAAU,CAAC,MAAQ,aAAa,MAAQ,qBAAqB,EAAE,aAAe,CAAC,MAAQ,qBAAqB,MAAQ,0CAA0C,EAAE,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,0BAA0B,EAAE,gBAAkB,CAAC,MAAQ,sBAAsB,MAAQ,sCAAsC,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,yCAAyC,EAAE,aAAe,CAAC,MAAQ,4BAA4B,MAAQ,sCAAsC,EAAE,qBAAuB,CAAC,MAAQ,oBAAoB,MAAQ,wBAAwB,EAAE,wBAA0B,CAAC,MAAQ,yBAAyB,MAAQ,2CAA2C,EAAE,0BAA4B,CAAC,MAAQ,2BAA2B,MAAQ,6CAA6C,EAAE,+BAAiC,CAAC,MAAQ,gCAAgC,MAAQ,kDAAkD,EAAE,yBAA2B,CAAC,MAAQ,6BAA6B,MAAQ,+CAA+C,EAAE,2BAA6B,CAAC,MAAQ,+BAA+B,MAAQ,iDAAiD,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,yBAAyB,EAAE,aAAe,CAAC,MAAQ,2BAA2B,MAAQ,oCAAoC,CAAC,EAAE,cAAgB,CAAC,MAAQ,uBAAuB,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,iDAAiD,EAAE,qBAAuB,CAAC,MAAQ,uCAAuC,MAAQ,iDAAiD,EAAE,OAAS,CAAC,MAAQ,UAAU,MAAQ,sEAAsE,CAAC,EAAE,wBAA0B,CAAC,MAAQ,gCAAgC,GAAK,CAAC,MAAQ,WAAW,MAAQ,0DAA0D,EAAE,MAAQ,CAAC,MAAQ,OAAO,MAAQ,kCAAkC,EAAE,QAAU,CAAC,MAAQ,iBAAiB,MAAQ,kDAAkD,CAAC,EAAE,4BAA8B,CAAC,MAAQ,wBAAwB,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,kDAAkD,EAAE,iBAAmB,CAAC,MAAQ,mBAAmB,MAAQ,+CAA+C,EAAE,KAAO,CAAC,MAAQ,YAAY,MAAQ,mCAAmC,EAAE,sBAAwB,CAAC,MAAQ,sBAAsB,MAAQ,wCAAwC,EAAE,aAAe,CAAC,MAAQ,kBAAkB,MAAQ,+CAA+C,CAAC,EAAE,sBAAwB,CAAC,MAAQ,8BAA8B,MAAQ,CAAC,MAAQ,WAAW,MAAQ,wCAAwC,EAAE,YAAc,CAAC,MAAQ,mBAAmB,MAAQ,sDAAsD,EAAE,aAAe,CAAC,MAAQ,kBAAkB,MAAQ,uDAAuD,EAAE,SAAW,CAAC,MAAQ,YAAY,MAAQ,uDAAuD,EAAE,UAAY,CAAC,MAAQ,YAAY,MAAQ,uDAAuD,EAAE,OAAS,CAAC,MAAQ,mBAAmB,MAAQ,oCAAoC,CAAC,EAAE,gCAAkC,CAAC,MAAQ,kCAAkC,KAAO,CAAC,MAAQ,QAAQ,MAAQ,iDAAiD,EAAE,KAAO,CAAC,MAAQ,YAAY,MAAQ,+CAA+C,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,8CAA8C,EAAE,eAAiB,CAAC,MAAQ,gBAAgB,MAAQ,oDAAoD,CAAC,EAAE,gBAAkB,CAAC,MAAQ,yBAAyB,QAAU,CAAC,MAAQ,QAAQ,MAAQ,sCAAsC,EAAE,SAAW,CAAC,MAAQ,kBAAkB,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,wDAAwD,EAAE,YAAc,CAAC,MAAQ,WAAW,MAAQ,2DAA2D,EAAE,iBAAmB,CAAC,MAAQ,sBAAsB,MAAQ,oCAAoC,EAAE,YAAc,CAAC,MAAQ,6BAA6B,MAAQ,kEAAkE,EAAE,cAAgB,CAAC,MAAQ,sBAAsB,MAAQ,iCAAiC,EAAE,mBAAqB,CAAC,MAAQ,gCAAgC,MAAQ,wDAAwD,EAAE,WAAa,CAAC,MAAQ,WAAW,MAAQ,2CAA2C,EAAE,KAAO,CAAC,MAAQ,kBAAkB,MAAQ,kCAAkC,EAAE,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,gCAAgC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,kCAAkC,EAAE,YAAc,CAAC,MAAQ,uBAAuB,MAAQ,wDAAwD,CAAC,EAAE,SAAW,CAAC,MAAQ,cAAc,IAAM,CAAC,MAAQ,OAAO,MAAQ,uBAAuB,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,kCAAkC,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,2CAA2C,EAAE,MAAQ,CAAC,MAAQ,cAAc,MAAQ,2CAA2C,EAAE,IAAM,CAAC,MAAQ,aAAa,MAAQ,qCAAqC,CAAC,EAAE,UAAY,CAAC,MAAQ,oBAAoB,KAAO,CAAC,MAAQ,QAAQ,MAAQ,4CAA4C,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,uCAAuC,EAAE,oBAAsB,CAAC,MAAQ,sBAAsB,MAAQ,gDAAgD,EAAE,eAAiB,CAAC,MAAQ,YAAY,MAAQ,4CAA4C,EAAE,sBAAwB,CAAC,MAAQ,0BAA0B,MAAQ,uCAAuC,EAAE,WAAa,CAAC,MAAQ,UAAU,MAAQ,qCAAqC,EAAE,oBAAsB,CAAC,MAAQ,qBAAqB,MAAQ,oDAAoD,CAAC,EAAE,2BAA6B,CAAC,MAAQ,gCAAgC,SAAW,CAAC,MAAQ,aAAa,MAAQ,8BAA8B,EAAE,SAAW,CAAC,MAAQ,iBAAiB,MAAQ,sCAAsC,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,qCAAqC,CAAC,EAAE,eAAiB,CAAC,MAAQ,mBAAmB,gBAAkB,CAAC,MAAQ,kBAAkB,MAAQ,4CAA4C,CAAC,EAAE,mBAAqB,CAAC,MAAQ,wBAAwB,IAAM,CAAC,MAAQ,aAAa,MAAQ,0DAA0D,EAAE,KAAO,CAAC,MAAQ,cAAc,MAAQ,wCAAwC,EAAE,IAAM,CAAC,MAAQ,cAAc,MAAQ,sCAAsC,EAAE,YAAc,CAAC,MAAQ,iBAAiB,MAAQ,wCAAwC,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,gDAAgD,CAAC,EAAE,WAAa,CAAC,MAAQ,YAAY,eAAiB,CAAC,MAAQ,iBAAiB,MAAQ,6DAA6D,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,0DAA0D,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,6DAA6D,EAAE,eAAiB,CAAC,MAAQ,aAAa,MAAQ,4DAA4D,CAAC,EAAE,gCAAkC,CAAC,MAAQ,6BAA6B,MAAQ,CAAC,MAAQ,eAAe,MAAQ,wDAAwD,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,6CAA6C,EAAE,MAAQ,CAAC,MAAQ,kBAAkB,MAAQ,oEAAoE,CAAC,EAAE,oBAAsB,CAAC,MAAQ,cAAc,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,0DAA0D,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,yEAAyE,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,iEAAiE,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,mDAAmD,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,6CAA6C,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,sDAAsD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,iDAAiD,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,mDAAmD,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,4CAA4C,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,+CAA+C,EAAE,IAAM,CAAC,MAAQ,QAAQ,MAAQ,+CAA+C,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,iDAAiD,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,4DAA4D,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,8CAA8C,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,mFAAmF,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uDAAuD,EAAE,KAAO,CAAC,MAAQ,iBAAiB,MAAQ,0DAA0D,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,4CAA4C,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,mCAAmC,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,2DAA2D,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,kDAAkD,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,gDAAgD,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,mDAAmD,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,sCAAsC,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,mDAAmD,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,qDAAqD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,wCAAwC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,uDAAuD,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,uDAAuD,CAAC,EAAE,gBAAkB,CAAC,MAAQ,iBAAiB,oBAAsB,CAAC,MAAQ,uBAAuB,MAAQ,uEAAuE,EAAE,cAAgB,CAAC,MAAQ,oBAAoB,MAAQ,iDAAiD,EAAE,eAAiB,CAAC,MAAQ,aAAa,MAAQ,sDAAsD,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,gDAAgD,EAAE,sBAAwB,CAAC,MAAQ,qBAAqB,MAAQ,8DAA8D,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,iDAAiD,EAAE,UAAY,CAAC,MAAQ,2BAA2B,MAAQ,0DAA0D,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,uDAAuD,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,+DAA+D,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,uDAAuD,EAAE,yBAA2B,CAAC,MAAQ,+BAA+B,MAAQ,kDAAkD,EAAE,cAAgB,CAAC,MAAQ,oBAAoB,MAAQ,gDAAgD,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,kDAAkD,EAAE,eAAiB,CAAC,MAAQ,cAAc,MAAQ,+DAA+D,EAAE,aAAe,CAAC,MAAQ,4BAA4B,MAAQ,sDAAsD,EAAE,OAAS,CAAC,MAAQ,SAAS,MAAQ,6CAA6C,EAAE,WAAa,CAAC,MAAQ,QAAQ,MAAQ,6CAA6C,EAAE,SAAW,CAAC,MAAQ,OAAO,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,mDAAmD,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,6CAA6C,CAAC,EAAE,iBAAmB,CAAC,MAAQ,4BAA4B,KAAO,CAAC,MAAQ,QAAQ,MAAQ,0FAA0F,EAAE,SAAW,CAAC,MAAQ,aAAa,MAAQ,kFAAkF,CAAC,EAAE,aAAe,CAAC,MAAQ,mBAAmB,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,6CAA6C,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,uCAAuC,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,sDAAsD,EAAE,QAAU,CAAC,MAAQ,mBAAmB,MAAQ,4CAA4C,EAAE,MAAQ,CAAC,MAAQ,qBAAqB,MAAQ,8CAA8C,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,2CAA2C,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,4BAA4B,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,wCAAwC,EAAE,QAAU,CAAC,MAAQ,4BAA4B,MAAQ,4CAA4C,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,wCAAwC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,yBAAyB,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,mDAAmD,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,uBAAuB,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,wCAAwC,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,6DAA6D,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,+CAA+C,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,2CAA2C,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,uDAAuD,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,iCAAiC,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,4BAA4B,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,gCAAgC,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,mCAAmC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,oDAAoD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,mBAAmB,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,CAAC,EAAE,YAAc,CAAC,MAAQ,WAAW,SAAW,CAAC,MAAQ,aAAa,MAAQ,+CAA+C,EAAE,OAAS,CAAC,MAAQ,aAAa,MAAQ,+CAA+C,EAAE,SAAW,CAAC,MAAQ,YAAY,MAAQ,gCAAgC,EAAE,OAAS,CAAC,MAAQ,SAAS,MAAQ,kCAAkC,EAAE,KAAO,CAAC,MAAQ,QAAQ,MAAQ,4CAA4C,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,6DAA6D,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,uCAAuC,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,uBAAuB,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,0BAA0B,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,wCAAwC,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,wCAAwC,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,mCAAmC,EAAE,aAAe,CAAC,MAAQ,mBAAmB,MAAQ,4CAA4C,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,kCAAkC,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,sCAAsC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,qDAAqD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,qBAAqB,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,CAAC,EAAE,uBAAyB,CAAC,MAAQ,iCAAiC,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,sBAAsB,MAAQ,sCAAsC,EAAE,aAAe,CAAC,MAAQ,oBAAoB,MAAQ,qCAAqC,CAAC,EAAE,sBAAwB,CAAC,MAAQ,+BAA+B,KAAO,CAAC,MAAQ,QAAQ,MAAQ,iCAAiC,EAAE,UAAY,CAAC,MAAQ,YAAY,MAAQ,8BAA8B,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,+BAA+B,CAAC,EAAE,gBAAkB,CAAC,MAAQ,yCAAyC,4BAA8B,CAAC,MAAQ,wCAAwC,MAAQ,kEAAkE,EAAE,kCAAoC,CAAC,MAAQ,kDAAkD,MAAQ,4EAA4E,EAAE,0BAA4B,CAAC,MAAQ,wCAAwC,MAAQ,kEAAkE,EAAE,sCAAwC,CAAC,MAAQ,mDAAmD,MAAQ,2EAA2E,EAAE,gBAAkB,CAAC,MAAQ,gBAAgB,MAAQ,sEAAsE,EAAE,gBAAkB,CAAC,MAAQ,sBAAsB,MAAQ,qCAAqC,EAAE,kBAAoB,CAAC,MAAQ,6BAA6B,MAAQ,yDAAyD,EAAE,cAAgB,CAAC,MAAQ,2BAA2B,MAAQ,iEAAiE,EAAE,0BAA4B,CAAC,MAAQ,gCAAgC,MAAQ,6EAA6E,EAAE,cAAgB,CAAC,MAAQ,qBAAqB,MAAQ,sDAAsD,EAAE,wBAA0B,CAAC,MAAQ,uBAAuB,MAAQ,sDAAsD,EAAE,uCAAyC,CAAC,MAAQ,gCAAgC,MAAQ,4DAA4D,EAAE,0CAA4C,CAAC,MAAQ,oCAAoC,MAAQ,qDAAqD,EAAE,sBAAwB,CAAC,MAAQ,sBAAsB,MAAQ,qDAAqD,EAAE,0BAA4B,CAAC,MAAQ,2BAA2B,MAAQ,0DAA0D,EAAE,qBAAuB,CAAC,MAAQ,0BAA0B,MAAQ,2DAA2D,EAAE,sBAAwB,CAAC,MAAQ,0BAA0B,MAAQ,0DAA0D,EAAE,yBAA2B,CAAC,MAAQ,wBAAwB,MAAQ,wDAAwD,EAAE,mBAAqB,CAAC,MAAQ,6BAA6B,MAAQ,8DAA8D,EAAE,mBAAqB,CAAC,MAAQ,6BAA6B,MAAQ,0DAA0D,EAAE,sBAAwB,CAAC,MAAQ,gCAAgC,MAAQ,6DAA6D,EAAE,mBAAqB,CAAC,MAAQ,4BAA4B,MAAQ,6DAA6D,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,oDAAoD,EAAE,mBAAqB,CAAC,MAAQ,qBAAqB,MAAQ,sDAAsD,EAAE,2BAA6B,CAAC,MAAQ,iCAAiC,MAAQ,kEAAkE,EAAE,4BAA8B,CAAC,MAAQ,sCAAsC,MAAQ,6DAA6D,EAAE,oCAAsC,CAAC,MAAQ,kDAAkD,MAAQ,yEAAyE,EAAE,qCAAuC,CAAC,MAAQ,+CAA+C,MAAQ,kEAAkE,EAAE,6BAA+B,CAAC,MAAQ,kCAAkC,MAAQ,2DAA2D,EAAE,4BAA8B,CAAC,MAAQ,kCAAkC,MAAQ,qEAAqE,EAAE,qBAAuB,CAAC,MAAQ,wBAAwB,MAAQ,sDAAsD,EAAE,4BAA8B,CAAC,MAAQ,mCAAmC,MAAQ,iEAAiE,EAAE,mBAAqB,CAAC,MAAQ,wBAAwB,MAAQ,sDAAsD,EAAE,qBAAuB,CAAC,MAAQ,yBAAyB,MAAQ,6CAA6C,EAAE,qBAAuB,CAAC,MAAQ,yBAAyB,MAAQ,6CAA6C,EAAE,kBAAoB,CAAC,MAAQ,4BAA4B,MAAQ,+CAA+C,EAAE,qBAAuB,CAAC,MAAQ,uBAAuB,MAAQ,gDAAgD,EAAE,0BAA4B,CAAC,MAAQ,gCAAgC,MAAQ,+DAA+D,CAAC,EAAE,YAAc,CAAC,MAAQ,YAAY,KAAO,CAAC,MAAQ,aAAa,MAAQ,wBAAwB,EAAE,QAAU,CAAC,MAAQ,OAAO,MAAQ,wBAAwB,EAAE,cAAgB,CAAC,MAAQ,aAAa,MAAQ,6BAA6B,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,yBAAyB,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,wBAAwB,CAAC,EAAE,eAAiB,CAAC,MAAQ,qBAAqB,KAAO,CAAC,MAAQ,QAAQ,MAAQ,mCAAmC,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,0BAA0B,CAAC,EAAE,wBAA0B,CAAC,MAAQ,iCAAiC,KAAO,CAAC,MAAQ,WAAW,MAAQ,kDAAkD,EAAE,WAAa,CAAC,MAAQ,WAAW,MAAQ,+CAA+C,EAAE,YAAc,CAAC,MAAQ,YAAY,MAAQ,kCAAkC,EAAE,SAAW,CAAC,MAAQ,aAAa,MAAQ,4CAA4C,CAAC,EAAE,WAAa,CAAC,MAAQ,WAAW,KAAO,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,6CAA6C,EAAE,SAAW,CAAC,MAAQ,0BAA0B,MAAQ,+BAA+B,EAAE,cAAgB,CAAC,MAAQ,0BAA0B,MAAQ,iDAAiD,EAAE,SAAW,CAAC,MAAQ,eAAe,MAAQ,2BAA2B,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,sCAAsC,EAAE,SAAW,CAAC,MAAQ,iBAAiB,MAAQ,0CAA0C,EAAE,aAAe,CAAC,MAAQ,0BAA0B,MAAQ,sCAAsC,EAAE,aAAe,CAAC,MAAQ,eAAe,MAAQ,0CAA0C,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,mCAAmC,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,uCAAuC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,wDAAwD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,8BAA8B,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,gDAAgD,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,kCAAkC,CAAC,EAAE,YAAc,CAAC,MAAQ,YAAY,KAAO,CAAC,MAAQ,QAAQ,MAAQ,4BAA4B,EAAE,SAAW,CAAC,MAAQ,qBAAqB,MAAQ,+CAA+C,EAAE,aAAe,CAAC,MAAQ,oBAAoB,MAAQ,yDAAyD,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,wBAAwB,MAAQ,gDAAgD,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,4CAA4C,EAAE,QAAU,CAAC,MAAQ,cAAc,MAAQ,4CAA4C,EAAE,OAAS,CAAC,MAAQ,aAAa,MAAQ,6CAA6C,EAAE,eAAiB,CAAC,MAAQ,uBAAuB,MAAQ,+DAA+D,EAAE,GAAK,CAAC,MAAQ,SAAS,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,wDAAwD,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,sEAAsE,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,8CAA8C,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,kEAAkE,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,uDAAuD,CAAC,EAAE,uBAAyB,CAAC,MAAQ,oBAAoB,gBAAkB,CAAC,MAAQ,yBAAyB,MAAQ,yCAAyC,EAAE,SAAW,CAAC,MAAQ,cAAc,MAAQ,yCAAyC,EAAE,KAAO,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,8CAA8C,EAAE,oBAAsB,CAAC,MAAQ,mBAAmB,MAAQ,oDAAoD,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,0CAA0C,EAAE,mBAAqB,CAAC,MAAQ,gBAAgB,MAAQ,wCAAwC,EAAE,YAAc,CAAC,MAAQ,cAAc,MAAQ,+BAA+B,EAAE,eAAiB,CAAC,MAAQ,aAAa,MAAQ,qCAAqC,EAAE,sBAAwB,CAAC,MAAQ,qBAAqB,MAAQ,yCAAyC,EAAE,iBAAmB,CAAC,MAAQ,gBAAgB,MAAQ,wCAAwC,EAAE,wBAA0B,CAAC,MAAQ,wBAAwB,MAAQ,4CAA4C,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,oDAAoD,EAAE,OAAS,CAAC,MAAQ,kBAAkB,MAAQ,2CAA2C,EAAE,oBAAsB,CAAC,MAAQ,kBAAkB,MAAQ,kCAAkC,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,+CAA+C,EAAE,QAAU,CAAC,MAAQ,sBAAsB,MAAQ,iDAAiD,EAAE,YAAc,CAAC,MAAQ,gBAAgB,MAAQ,4DAA4D,EAAE,aAAe,CAAC,MAAQ,YAAY,MAAQ,wDAAwD,EAAE,kBAAoB,CAAC,MAAQ,4BAA4B,MAAQ,gDAAgD,CAAC,EAAE,gBAAkB,CAAC,MAAQ,aAAa,YAAc,CAAC,MAAQ,SAAS,MAAQ,6BAA6B,EAAE,eAAiB,CAAC,MAAQ,eAAe,MAAQ,oCAAoC,EAAE,gBAAkB,CAAC,MAAQ,sBAAsB,MAAQ,sCAAsC,EAAE,eAAiB,CAAC,MAAQ,kBAAkB,MAAQ,wDAAwD,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,yCAAyC,EAAE,aAAe,CAAC,MAAQ,4BAA4B,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,iBAAiB,MAAQ,8CAA8C,CAAC,EAAE,mBAAqB,CAAC,MAAQ,0BAA0B,UAAY,CAAC,MAAQ,UAAU,MAAQ,sCAAsC,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,uCAAuC,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,4CAA4C,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,2CAA2C,EAAE,MAAQ,CAAC,MAAQ,OAAO,MAAQ,6CAA6C,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,iDAAiD,CAAC,EAAE,gCAAkC,CAAC,MAAQ,0BAA0B,QAAU,CAAC,MAAQ,MAAM,MAAQ,kDAAkD,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,OAAS,CAAC,MAAQ,mBAAmB,MAAQ,kDAAkD,EAAE,YAAc,CAAC,MAAQ,YAAY,MAAQ,kCAAkC,EAAE,eAAiB,CAAC,MAAQ,gBAAgB,MAAQ,uDAAuD,EAAE,yBAA2B,CAAC,MAAQ,6BAA6B,MAAQ,8DAA8D,CAAC,EAAE,gBAAkB,CAAC,MAAQ,2BAA2B,KAAO,CAAC,MAAQ,eAAe,MAAQ,+DAA+D,EAAE,MAAQ,CAAC,MAAQ,mBAAmB,MAAQ,kDAAkD,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,+CAA+C,EAAE,OAAS,CAAC,MAAQ,aAAa,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,6CAA6C,EAAE,KAAO,CAAC,MAAQ,WAAW,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,MAAM,MAAQ,qCAAqC,EAAE,iBAAmB,CAAC,MAAQ,gBAAgB,MAAQ,gEAAgE,CAAC,EAAE,qBAAuB,CAAC,MAAQ,gBAAgB,KAAO,CAAC,MAAQ,YAAY,MAAQ,wCAAwC,EAAE,sBAAwB,CAAC,MAAQ,sBAAsB,MAAQ,wCAAwC,EAAE,aAAe,CAAC,MAAQ,kBAAkB,MAAQ,oEAAoE,CAAC,EAAE,WAAa,CAAC,MAAQ,aAAa,4BAA8B,CAAC,MAAQ,sCAAsC,MAAQ,oEAAoE,EAAE,iBAAmB,CAAC,MAAQ,0BAA0B,MAAQ,4CAA4C,EAAE,uBAAyB,CAAC,MAAQ,sCAAsC,MAAQ,mEAAmE,EAAE,2BAA6B,CAAC,MAAQ,yCAAyC,MAAQ,uEAAuE,EAAE,gBAAkB,CAAC,MAAQ,6BAA6B,MAAQ,6CAA6C,EAAE,sBAAwB,CAAC,MAAQ,yCAAyC,MAAQ,sEAAsE,EAAE,oBAAsB,CAAC,MAAQ,qCAAqC,MAAQ,sDAAsD,EAAE,oBAAsB,CAAC,MAAQ,mCAAmC,MAAQ,uEAAuE,EAAE,0BAA4B,CAAC,MAAQ,qCAAqC,MAAQ,iEAAiE,EAAE,4BAA8B,CAAC,MAAQ,yCAAyC,MAAQ,uEAAuE,EAAE,iBAAmB,CAAC,MAAQ,6BAA6B,MAAQ,6CAA6C,EAAE,uBAAyB,CAAC,MAAQ,yCAAyC,MAAQ,sEAAsE,EAAE,qBAAuB,CAAC,MAAQ,qCAAqC,MAAQ,sDAAsD,EAAE,sBAAwB,CAAC,MAAQ,mCAAmC,MAAQ,uEAAuE,EAAE,2BAA6B,CAAC,MAAQ,qCAAqC,MAAQ,iEAAiE,EAAE,8BAAgC,CAAC,MAAQ,0CAA0C,MAAQ,wEAAwE,EAAE,mBAAqB,CAAC,MAAQ,8BAA8B,MAAQ,8CAA8C,EAAE,yBAA2B,CAAC,MAAQ,0CAA0C,MAAQ,uEAAuE,EAAE,uBAAyB,CAAC,MAAQ,sCAAsC,MAAQ,uDAAuD,EAAE,0BAA4B,CAAC,MAAQ,wCAAwC,MAAQ,yEAAyE,EAAE,SAAW,CAAC,MAAQ,aAAa,MAAQ,iEAAiE,EAAE,2BAA6B,CAAC,MAAQ,4BAA4B,MAAQ,0DAA0D,EAAE,gBAAkB,CAAC,MAAQ,gBAAgB,MAAQ,gCAAgC,EAAE,sBAAwB,CAAC,MAAQ,4BAA4B,MAAQ,yDAAyD,EAAE,oBAAsB,CAAC,MAAQ,wBAAwB,MAAQ,yCAAyC,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,8DAA8D,CAAC,EAAE,eAAiB,CAAC,MAAQ,cAAc,OAAS,CAAC,MAAQ,YAAY,MAAQ,8DAA8D,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,kDAAkD,EAAE,eAAiB,CAAC,MAAQ,gBAAgB,MAAQ,qCAAqC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,sCAAsC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,8CAA8C,EAAE,SAAW,CAAC,MAAQ,aAAa,MAAQ,uCAAuC,CAAC,EAAE,aAAe,CAAC,MAAQ,aAAa,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,wCAAwC,EAAE,KAAO,CAAC,MAAQ,iBAAiB,MAAQ,oCAAoC,CAAC,EAAE,YAAc,CAAC,MAAQ,eAAe,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,gFAAgF,EAAE,iBAAmB,CAAC,MAAQ,2BAA2B,MAAQ,4FAA4F,EAAE,eAAiB,CAAC,MAAQ,wBAAwB,MAAQ,yFAAyF,CAAC,EAAE,oBAAsB,CAAC,MAAQ,sBAAsB,MAAQ,CAAC,MAAQ,UAAU,MAAQ,mFAAmF,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,yEAAyE,EAAE,YAAc,CAAC,MAAQ,mBAAmB,MAAQ,0DAA0D,EAAE,OAAS,CAAC,MAAQ,iBAAiB,MAAQ,qFAAqF,EAAE,OAAS,CAAC,MAAQ,iBAAiB,MAAQ,4FAA4F,EAAE,MAAQ,CAAC,MAAQ,eAAe,MAAQ,gGAAgG,CAAC,EAAE,YAAc,CAAC,MAAQ,YAAY,GAAK,CAAC,MAAQ,WAAW,MAAQ,wEAAwE,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,6EAA6E,EAAE,MAAQ,CAAC,MAAQ,eAAe,MAAQ,sFAAsF,CAAC,EAAE,mBAAqB,CAAC,MAAQ,kBAAkB,KAAO,CAAC,MAAQ,cAAc,MAAQ,yFAAyF,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,mFAAmF,EAAE,YAAc,CAAC,MAAQ,aAAa,MAAQ,iDAAiD,EAAE,cAAgB,CAAC,MAAQ,aAAa,MAAQ,8CAA8C,EAAE,oBAAsB,CAAC,MAAQ,cAAc,MAAQ,iEAAiE,EAAE,aAAe,CAAC,MAAQ,YAAY,MAAQ,2EAA2E,EAAE,OAAS,CAAC,MAAQ,iBAAiB,MAAQ,uFAAuF,EAAE,WAAa,CAAC,MAAQ,0BAA0B,MAAQ,2FAA2F,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,6EAA6E,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,8EAA8E,EAAE,MAAQ,CAAC,MAAQ,eAAe,MAAQ,4FAA4F,CAAC,EAAE,cAAgB,CAAC,MAAQ,qBAAqB,YAAc,CAAC,MAAQ,kBAAkB,MAAQ,+FAA+F,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,wEAAwE,EAAE,cAAgB,CAAC,MAAQ,mBAAmB,MAAQ,+EAA+E,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,iFAAiF,EAAE,UAAY,CAAC,MAAQ,cAAc,MAAQ,oFAAoF,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,mGAAmG,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,wFAAwF,EAAE,WAAa,CAAC,MAAQ,iBAAiB,MAAQ,8FAA8F,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,0FAA0F,CAAC,EAAE,eAAiB,CAAC,MAAQ,qBAAqB,IAAM,CAAC,MAAQ,kBAAkB,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,YAAY,MAAQ,oCAAoC,EAAE,MAAQ,CAAC,MAAQ,cAAc,MAAQ,yBAAyB,EAAE,IAAM,CAAC,MAAQ,gBAAgB,MAAQ,2BAA2B,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,uBAAuB,EAAE,SAAW,CAAC,MAAQ,wBAAwB,MAAQ,+CAA+C,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,wDAAwD,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,qCAAqC,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,kDAAkD,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,kDAAkD,EAAE,SAAW,CAAC,MAAQ,eAAe,MAAQ,8BAA8B,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,wCAAwC,EAAE,YAAc,CAAC,MAAQ,WAAW,MAAQ,uCAAuC,EAAE,gBAAkB,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,gBAAkB,CAAC,MAAQ,kBAAkB,MAAQ,oCAAoC,EAAE,eAAiB,CAAC,MAAQ,iBAAiB,MAAQ,sCAAsC,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,mCAAmC,CAAC,EAAE,2BAA6B,CAAC,MAAQ,8BAA8B,YAAc,CAAC,MAAQ,qBAAqB,MAAQ,oCAAoC,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,uCAAuC,EAAE,cAAgB,CAAC,MAAQ,4BAA4B,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,uBAAuB,MAAQ,6CAA6C,EAAE,gBAAkB,CAAC,MAAQ,uBAAuB,MAAQ,8DAA8D,CAAC,EAAE,iBAAmB,CAAC,MAAQ,yBAAyB,IAAM,CAAC,MAAQ,mBAAmB,MAAQ,uCAAuC,EAAE,YAAc,CAAC,MAAQ,aAAa,MAAQ,6BAA6B,EAAE,MAAQ,CAAC,MAAQ,mBAAmB,MAAQ,gCAAgC,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,4DAA4D,EAAE,YAAc,CAAC,MAAQ,YAAY,MAAQ,4BAA4B,EAAE,MAAQ,CAAC,MAAQ,OAAO,MAAQ,0BAA0B,EAAE,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,6BAA6B,EAAE,IAAM,CAAC,MAAQ,gBAAgB,MAAQ,qCAAqC,CAAC,EAAE,eAAiB,CAAC,MAAQ,oBAAoB,GAAK,CAAC,MAAQ,mBAAmB,MAAQ,oCAAoC,EAAE,KAAO,CAAC,MAAQ,mBAAmB,MAAQ,8BAA8B,EAAE,QAAU,CAAC,MAAQ,uBAAuB,MAAQ,2BAA2B,EAAE,YAAc,CAAC,MAAQ,mBAAmB,MAAQ,uCAAuC,EAAE,UAAY,CAAC,MAAQ,yBAAyB,MAAQ,iDAAiD,EAAE,YAAc,CAAC,MAAQ,qBAAqB,MAAQ,sCAAsC,EAAE,gBAAkB,CAAC,MAAQ,kBAAkB,MAAQ,4CAA4C,EAAE,gBAAkB,CAAC,MAAQ,eAAe,MAAQ,qCAAqC,EAAE,OAAS,CAAC,MAAQ,gBAAgB,MAAQ,0CAA0C,EAAE,eAAiB,CAAC,MAAQ,gBAAgB,MAAQ,qCAAqC,CAAC,EAAE,mBAAqB,CAAC,MAAQ,iBAAiB,IAAM,CAAC,MAAQ,eAAe,MAAQ,mCAAmC,EAAE,KAAO,CAAC,MAAQ,gBAAgB,MAAQ,0BAA0B,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,yBAAyB,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,6BAA6B,CAAC,EAAE,kBAAoB,CAAC,MAAQ,qBAAqB,QAAU,CAAC,MAAQ,kBAAkB,MAAQ,8CAA8C,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,qCAAqC,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,0CAA0C,EAAE,SAAW,CAAC,MAAQ,wBAAwB,MAAQ,+CAA+C,EAAE,YAAc,CAAC,MAAQ,qBAAqB,MAAQ,+CAA+C,EAAE,MAAQ,CAAC,MAAQ,cAAc,MAAQ,yBAAyB,EAAE,IAAM,CAAC,MAAQ,gBAAgB,MAAQ,2BAA2B,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,uBAAuB,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,kDAAkD,CAAC,EAAE,wBAA0B,CAAC,MAAQ,sBAAsB,QAAU,CAAC,MAAQ,kBAAkB,MAAQ,gDAAgD,EAAE,SAAW,CAAC,MAAQ,mBAAmB,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,mBAAmB,MAAQ,iCAAiC,EAAE,MAAQ,CAAC,MAAQ,cAAc,MAAQ,2BAA2B,EAAE,SAAW,CAAC,MAAQ,yBAAyB,MAAQ,gDAAgD,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,uCAAuC,CAAC,EAAE,kCAAoC,CAAC,MAAQ,iCAAiC,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,iCAAiC,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,sCAAsC,EAAE,MAAQ,CAAC,MAAQ,oBAAoB,MAAQ,4BAA4B,CAAC,EAAE,sBAAwB,CAAC,MAAQ,wBAAwB,UAAY,CAAC,MAAQ,aAAa,MAAQ,kCAAkC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,kDAAkD,EAAE,QAAU,CAAC,MAAQ,iBAAiB,MAAQ,gCAAgC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,8BAA8B,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,2BAA2B,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,4CAA4C,EAAE,QAAU,CAAC,MAAQ,cAAc,MAAQ,yBAAyB,EAAE,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,2BAA2B,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,6BAA6B,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,+BAA+B,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,oCAAoC,EAAE,eAAiB,CAAC,MAAQ,wBAAwB,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,4BAA4B,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,8CAA8C,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,kCAAkC,EAAE,KAAO,CAAC,MAAQ,kBAAkB,MAAQ,iDAAiD,EAAE,cAAgB,CAAC,MAAQ,cAAc,MAAQ,0BAA0B,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,2CAA2C,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,8CAA8C,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,gCAAgC,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,8BAA8B,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,iCAAiC,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,6BAA6B,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,+BAA+B,EAAE,GAAK,CAAC,MAAQ,SAAS,MAAQ,mCAAmC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,sBAAsB,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,8CAA8C,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,gCAAgC,CAAC,EAAE,kBAAoB,CAAC,MAAQ,2BAA2B,MAAQ,CAAC,MAAQ,cAAc,MAAQ,yBAAyB,EAAE,IAAM,CAAC,MAAQ,gBAAgB,MAAQ,2BAA2B,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,uBAAuB,EAAE,OAAS,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,YAAc,CAAC,MAAQ,qBAAqB,MAAQ,+CAA+C,EAAE,SAAW,CAAC,MAAQ,wBAAwB,MAAQ,+CAA+C,EAAE,SAAW,CAAC,MAAQ,eAAe,MAAQ,8BAA8B,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,2BAA2B,CAAC,EAAE,gBAAkB,CAAC,MAAQ,eAAe,KAAO,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,MAAQ,CAAC,MAAQ,wBAAwB,MAAQ,oEAAoE,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,0CAA0C,EAAE,aAAe,CAAC,MAAQ,mBAAmB,MAAQ,qCAAqC,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,iCAAiC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,oCAAoC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,wCAAwC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,0CAA0C,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,qCAAqC,CAAC,EAAE,oBAAsB,CAAC,MAAQ,uBAAuB,OAAS,CAAC,MAAQ,cAAc,MAAQ,mDAAmD,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,2CAA2C,CAAC,EAAE,uBAAyB,CAAC,MAAQ,sBAAsB,GAAK,CAAC,MAAQ,qBAAqB,MAAQ,gDAAgD,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,kEAAkE,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,6CAA6C,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,8DAA8D,EAAE,UAAY,CAAC,MAAQ,8BAA8B,MAAQ,uEAAuE,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,0CAA0C,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,sCAAsC,CAAC,EAAE,kBAAoB,CAAC,MAAQ,qBAAqB,GAAK,CAAC,MAAQ,kBAAkB,MAAQ,yDAAyD,EAAE,WAAa,CAAC,MAAQ,qBAAqB,MAAQ,iDAAiD,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,6BAA6B,EAAE,YAAc,CAAC,MAAQ,mBAAmB,MAAQ,qCAAqC,EAAE,cAAgB,CAAC,MAAQ,cAAc,MAAQ,0BAA0B,EAAE,YAAc,CAAC,MAAQ,cAAc,MAAQ,oCAAoC,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,kEAAkE,EAAE,aAAe,CAAC,MAAQ,cAAc,MAAQ,sDAAsD,CAAC,EAAE,qBAAuB,CAAC,MAAQ,yBAAyB,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,4CAA4C,EAAE,KAAO,CAAC,MAAQ,gBAAgB,MAAQ,8CAA8C,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,2CAA2C,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,yCAAyC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,gDAAgD,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,6CAA6C,EAAE,UAAY,CAAC,MAAQ,WAAW,MAAQ,yCAAyC,EAAE,cAAgB,CAAC,MAAQ,oBAAoB,MAAQ,yCAAyC,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,2BAA2B,CAAC,EAAE,oCAAsC,CAAC,MAAQ,4BAA4B,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,kEAAkE,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,4DAA4D,EAAE,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,iDAAiD,CAAC,EAAE,wBAA0B,CAAC,MAAQ,uBAAuB,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,oCAAoC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,oDAAoD,EAAE,QAAU,CAAC,MAAQ,mBAAmB,MAAQ,uCAAuC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,4BAA4B,EAAE,OAAS,CAAC,MAAQ,cAAc,MAAQ,gCAAgC,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,yCAAyC,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,2CAA2C,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,uCAAuC,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,2CAA2C,EAAE,IAAM,CAAC,MAAQ,QAAQ,MAAQ,yCAAyC,EAAE,QAAU,CAAC,MAAQ,0BAA0B,MAAQ,uCAAuC,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,qCAAqC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,wBAAwB,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,iDAAiD,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,gBAAgB,MAAQ,6CAA6C,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,yBAAyB,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,yCAAyC,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,sDAAsD,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,2BAA2B,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,uCAAuC,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,oCAAoC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,yBAAyB,EAAE,GAAK,CAAC,MAAQ,SAAS,MAAQ,6BAA6B,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,kBAAkB,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,iCAAiC,CAAC,EAAE,4BAA8B,CAAC,MAAQ,gCAAgC,aAAe,CAAC,MAAQ,kBAAkB,MAAQ,2CAA2C,CAAC,EAAE,QAAU,CAAC,MAAQ,gBAAgB,KAAO,CAAC,MAAQ,wBAAwB,MAAQ,kCAAkC,EAAE,KAAO,CAAC,MAAQ,sBAAsB,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,8BAA8B,EAAE,aAAe,CAAC,MAAQ,mBAAmB,MAAQ,6CAA6C,EAAE,GAAK,CAAC,MAAQ,SAAS,MAAQ,qCAAqC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,4CAA4C,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,4DAA4D,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,0BAA0B,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,qDAAqD,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,yCAAyC,CAAC,EAAE,YAAc,CAAC,MAAQ,6BAA6B,OAAS,CAAC,MAAQ,sBAAsB,MAAQ,iCAAiC,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,gCAAgC,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,wBAAwB,CAAC,EAAE,kBAAoB,CAAC,MAAQ,4BAA4B,KAAO,CAAC,MAAQ,OAAO,MAAQ,iDAAiD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,kEAAkE,EAAE,UAAY,CAAC,MAAQ,sBAAsB,MAAQ,sEAAsE,EAAE,OAAS,CAAC,MAAQ,SAAS,MAAQ,iEAAiE,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,gEAAgE,EAAE,QAAU,CAAC,MAAQ,UAAU,MAAQ,oDAAoD,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,kEAAkE,EAAE,MAAQ,CAAC,MAAQ,UAAU,MAAQ,wDAAwD,CAAC,EAAE,YAAc,CAAC,MAAQ,wBAAwB,QAAU,CAAC,MAAQ,YAAY,MAAQ,0EAA0E,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,4EAA4E,CAAC,EAAE,4BAA8B,CAAC,MAAQ,gCAAgC,MAAQ,CAAC,MAAQ,UAAU,MAAQ,6DAA6D,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,6CAA6C,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,qDAAqD,CAAC,EAAE,gBAAkB,CAAC,MAAQ,4BAA4B,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,0DAA0D,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,2EAA2E,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,mDAAmD,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,mDAAmD,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,8CAA8C,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,uDAAuD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,wDAAwD,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,0DAA0D,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,yDAAyD,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,kDAAkD,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,oDAAoD,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,kDAAkD,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,oDAAoD,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,+CAA+C,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,2DAA2D,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,6DAA6D,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,iDAAiD,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,6CAA6C,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,oCAAoC,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,mDAAmD,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,qDAAqD,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,kDAAkD,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,oDAAoD,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,sCAAsC,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,kDAAkD,EAAE,GAAK,CAAC,MAAQ,KAAK,MAAQ,yCAAyC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,yCAAyC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,uDAAuD,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,qDAAqD,CAAC,EAAE,oBAAsB,CAAC,MAAQ,mCAAmC,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,oDAAoD,CAAC,EAAE,+BAAiC,CAAC,MAAQ,8BAA8B,MAAQ,CAAC,MAAQ,4BAA4B,MAAQ,uEAAuE,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,6DAA6D,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,4CAA4C,CAAC,EAAE,mBAAqB,CAAC,MAAQ,0BAA0B,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,uCAAuC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,yDAAyD,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,6CAA6C,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,iCAAiC,EAAE,OAAS,CAAC,MAAQ,kBAAkB,MAAQ,6BAA6B,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,4CAA4C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,qCAAqC,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,uCAAuC,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,0BAA0B,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,+BAA+B,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,iCAAiC,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,8CAA8C,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,0CAA0C,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,4BAA4B,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,kDAAkD,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,EAAE,cAAgB,CAAC,MAAQ,SAAS,MAAQ,0BAA0B,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,8BAA8B,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,mCAAmC,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,kCAAkC,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,8BAA8B,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,mCAAmC,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,+BAA+B,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,+BAA+B,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,sBAAsB,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,8CAA8C,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,kCAAkC,CAAC,EAAE,eAAiB,CAAC,MAAQ,oBAAoB,mBAAqB,CAAC,MAAQ,gBAAgB,MAAQ,qDAAqD,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,oCAAoC,EAAE,KAAO,CAAC,MAAQ,oBAAoB,MAAQ,wDAAwD,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,qCAAqC,EAAE,QAAU,CAAC,MAAQ,sBAAsB,MAAQ,uCAAuC,EAAE,YAAc,CAAC,MAAQ,gBAAgB,MAAQ,kDAAkD,EAAE,aAAe,CAAC,MAAQ,YAAY,MAAQ,8CAA8C,EAAE,SAAW,CAAC,MAAQ,aAAa,MAAQ,+CAA+C,CAAC,EAAE,kBAAoB,CAAC,MAAQ,WAAW,SAAW,CAAC,MAAQ,aAAa,MAAQ,wBAAwB,EAAE,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,uCAAuC,EAAE,SAAW,CAAC,MAAQ,YAAY,MAAQ,iCAAiC,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,uCAAuC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,yDAAyD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,sBAAsB,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,8CAA8C,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,kCAAkC,CAAC,EAAE,0BAA4B,CAAC,MAAQ,uBAAuB,eAAiB,CAAC,MAAQ,oBAAoB,MAAQ,2CAA2C,CAAC,EAAE,gCAAkC,CAAC,MAAQ,+BAA+B,WAAa,CAAC,MAAQ,kCAAkC,MAAQ,sIAAsI,CAAC,EAAE,kCAAoC,CAAC,MAAQ,6CAA6C,GAAK,CAAC,MAAQ,WAAW,MAAQ,0DAA0D,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,mDAAmD,EAAE,QAAU,CAAC,MAAQ,cAAc,MAAQ,yEAAyE,EAAE,iBAAmB,CAAC,MAAQ,yBAAyB,MAAQ,oEAAoE,EAAE,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,+DAA+D,CAAC,EAAE,8BAAgC,CAAC,MAAQ,6CAA6C,MAAQ,CAAC,MAAQ,OAAO,MAAQ,wDAAwD,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,6BAA6B,EAAE,KAAO,CAAC,MAAQ,QAAQ,MAAQ,0DAA0D,EAAE,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,+DAA+D,CAAC,EAAE,SAAW,CAAC,MAAQ,WAAW,GAAK,CAAC,MAAQ,WAAW,MAAQ,mDAAmD,EAAE,UAAY,CAAC,MAAQ,SAAS,MAAQ,mCAAmC,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,sDAAsD,EAAE,SAAW,CAAC,MAAQ,iBAAiB,MAAQ,gDAAgD,EAAE,iBAAmB,CAAC,MAAQ,4BAA4B,MAAQ,4DAA4D,EAAE,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,sDAAsD,EAAE,WAAa,CAAC,MAAQ,iBAAiB,MAAQ,6CAA6C,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,qDAAqD,EAAE,OAAS,CAAC,MAAQ,SAAS,MAAQ,yBAAyB,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,yCAAyC,EAAE,SAAW,CAAC,MAAQ,aAAa,MAAQ,kCAAkC,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,2CAA2C,CAAC,EAAE,SAAW,CAAC,MAAQ,iBAAiB,UAAY,CAAC,MAAQ,QAAQ,MAAQ,6CAA6C,EAAE,SAAW,CAAC,MAAQ,cAAc,MAAQ,4DAA4D,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,gCAAgC,EAAE,OAAS,CAAC,MAAQ,cAAc,MAAQ,0CAA0C,CAAC,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,SAAW,CAAC,MAAQ,uBAAuB,MAAQ,uDAAuD,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,4EAA4E,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,2CAA2C,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,qDAAqD,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,wCAAwC,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,iCAAiC,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,gDAAgD,CAAC,EAAE,yBAA2B,CAAC,MAAQ,6BAA6B,MAAQ,CAAC,MAAQ,YAAY,MAAQ,sCAAsC,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,0DAA0D,EAAE,MAAQ,CAAC,MAAQ,oBAAoB,MAAQ,8CAA8C,CAAC,EAAE,aAAe,CAAC,MAAQ,mBAAmB,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,uCAAuC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,uDAAuD,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,yCAAyC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,+BAA+B,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,0BAA0B,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,8CAA8C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,+CAA+C,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,iDAAiD,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,wCAAwC,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,iCAAiC,EAAE,IAAM,CAAC,MAAQ,QAAQ,MAAQ,wCAAwC,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,uCAAuC,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,uDAAuD,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,2BAA2B,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,oDAAoD,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,gDAAgD,EAAE,cAAgB,CAAC,MAAQ,SAAS,MAAQ,yBAAyB,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,iCAAiC,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,wCAAwC,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,+CAA+C,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,wCAAwC,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,2CAA2C,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,iCAAiC,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,8BAA8B,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,+BAA+B,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,wCAAwC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,oCAAoC,CAAC,EAAE,SAAW,CAAC,MAAQ,uBAAuB,yBAA2B,CAAC,MAAQ,kCAAkC,MAAQ,4CAA4C,EAAE,YAAc,CAAC,MAAQ,uBAAuB,MAAQ,qDAAqD,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,0CAA0C,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,gCAAgC,EAAE,iBAAmB,CAAC,MAAQ,4BAA4B,MAAQ,sCAAsC,EAAE,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,oCAAoC,CAAC,EAAE,gCAAkC,CAAC,MAAQ,8BAA8B,MAAQ,CAAC,MAAQ,aAAa,MAAQ,sCAAsC,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,0DAA0D,EAAE,MAAQ,CAAC,MAAQ,oBAAoB,MAAQ,8CAA8C,CAAC,EAAE,oBAAsB,CAAC,MAAQ,oBAAoB,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,4CAA4C,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,wDAAwD,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,2DAA2D,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,8CAA8C,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,yCAAyC,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,6DAA6D,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,+CAA+C,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,iDAAiD,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,mDAAmD,EAAE,IAAM,CAAC,MAAQ,QAAQ,MAAQ,2DAA2D,EAAE,QAAU,CAAC,MAAQ,4BAA4B,MAAQ,yDAAyD,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,4CAA4C,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,8DAA8D,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,uDAAuD,EAAE,KAAO,CAAC,MAAQ,oBAAoB,MAAQ,wDAAwD,EAAE,cAAgB,CAAC,MAAQ,SAAS,MAAQ,kCAAkC,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,sCAAsC,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,+CAA+C,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,gDAAgD,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,4CAA4C,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,+CAA+C,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,uCAAuC,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,+CAA+C,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,iDAAiD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,oCAAoC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,yDAAyD,CAAC,EAAE,gBAAkB,CAAC,MAAQ,oBAAoB,KAAO,CAAC,MAAQ,QAAQ,MAAQ,mCAAmC,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,mDAAmD,CAAC,EAAE,gCAAkC,CAAC,MAAQ,qCAAqC,YAAc,CAAC,MAAQ,YAAY,MAAQ,gDAAgD,EAAE,uBAAyB,CAAC,MAAQ,yBAAyB,MAAQ,8DAA8D,EAAE,mBAAqB,CAAC,MAAQ,uBAAuB,MAAQ,4DAA4D,EAAE,aAAe,CAAC,MAAQ,YAAY,MAAQ,4DAA4D,CAAC,EAAE,uBAAyB,CAAC,MAAQ,yBAAyB,KAAO,CAAC,MAAQ,YAAY,MAAQ,2DAA2D,EAAE,iBAAmB,CAAC,MAAQ,gBAAgB,MAAQ,0DAA0D,CAAC,EAAE,mBAAqB,CAAC,MAAQ,uBAAuB,sBAAwB,CAAC,MAAQ,sBAAsB,MAAQ,+CAA+C,EAAE,YAAc,CAAC,MAAQ,YAAY,MAAQ,+CAA+C,CAAC,EAAE,oCAAsC,CAAC,MAAQ,6BAA6B,cAAgB,CAAC,MAAQ,qBAAqB,MAAQ,2CAA2C,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,sCAAsC,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,cAAgB,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,0CAA0C,CAAC,EAAE,uCAAyC,CAAC,MAAQ,iCAAiC,MAAQ,CAAC,MAAQ,UAAU,MAAQ,uDAAuD,EAAE,WAAa,CAAC,MAAQ,eAAe,MAAQ,2CAA2C,CAAC,EAAE,cAAgB,CAAC,MAAQ,kBAAkB,KAAO,CAAC,MAAQ,QAAQ,MAAQ,0CAA0C,EAAE,iBAAmB,CAAC,MAAQ,kBAAkB,MAAQ,4CAA4C,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,gCAAgC,EAAE,iBAAmB,CAAC,MAAQ,kBAAkB,MAAQ,8CAA8C,EAAE,iBAAmB,CAAC,MAAQ,cAAc,MAAQ,0CAA0C,EAAE,gBAAkB,CAAC,MAAQ,gBAAgB,MAAQ,uCAAuC,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,4CAA4C,EAAE,iBAAmB,CAAC,MAAQ,yBAAyB,MAAQ,4CAA4C,EAAE,aAAe,CAAC,MAAQ,mBAAmB,MAAQ,sCAAsC,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,wCAAwC,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,wCAAwC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,sDAAsD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,yDAAyD,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,uDAAuD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,+CAA+C,CAAC,EAAE,kCAAoC,CAAC,MAAQ,oCAAoC,MAAQ,CAAC,MAAQ,UAAU,MAAQ,uCAAuC,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,gDAAgD,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,2CAA2C,CAAC,EAAE,sBAAwB,CAAC,MAAQ,yBAAyB,UAAY,CAAC,MAAQ,aAAa,MAAQ,+CAA+C,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,6DAA6D,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,2CAA2C,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,6BAA6B,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,yCAAyC,EAAE,iBAAmB,CAAC,MAAQ,mBAAmB,MAAQ,qDAAqD,EAAE,QAAU,CAAC,MAAQ,cAAc,MAAQ,6CAA6C,EAAE,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,+CAA+C,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,mCAAmC,EAAE,IAAM,CAAC,MAAQ,QAAQ,MAAQ,wCAAwC,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,wCAAwC,EAAE,eAAiB,CAAC,MAAQ,wBAAwB,MAAQ,qDAAqD,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,yBAAyB,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,gEAAgE,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,iDAAiD,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,0DAA0D,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,uBAAuB,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,0BAA0B,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,gDAAgD,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,kDAAkD,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,2BAA2B,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,+CAA+C,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,iCAAiC,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,6CAA6C,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,+BAA+B,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,yCAAyC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,CAAC,EAAE,kBAAoB,CAAC,MAAQ,2BAA2B,yBAA2B,CAAC,MAAQ,wBAAwB,MAAQ,8CAA8C,CAAC,EAAE,gBAAkB,CAAC,MAAQ,oBAAoB,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,oDAAoD,EAAE,mBAAqB,CAAC,MAAQ,mCAAmC,MAAQ,mDAAmD,EAAE,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,oCAAoC,EAAE,cAAgB,CAAC,MAAQ,YAAY,MAAQ,4CAA4C,EAAE,kBAAoB,CAAC,MAAQ,kBAAkB,MAAQ,sDAAsD,CAAC,EAAE,aAAe,CAAC,MAAQ,8BAA8B,QAAU,CAAC,MAAQ,kBAAkB,MAAQ,2CAA2C,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,qDAAqD,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,0CAA0C,CAAC,EAAE,cAAgB,CAAC,MAAQ,mBAAmB,WAAa,CAAC,MAAQ,cAAc,MAAQ,sCAAsC,EAAE,WAAa,CAAC,MAAQ,qBAAqB,MAAQ,gCAAgC,EAAE,iBAAmB,CAAC,MAAQ,2BAA2B,MAAQ,uCAAuC,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,uBAAuB,EAAE,WAAa,CAAC,MAAQ,WAAW,MAAQ,6BAA6B,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,0BAA0B,EAAE,aAAe,CAAC,MAAQ,oBAAoB,MAAQ,gCAAgC,EAAE,WAAa,CAAC,MAAQ,iBAAiB,MAAQ,+BAA+B,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,gCAAgC,EAAE,SAAW,CAAC,MAAQ,kBAAkB,MAAQ,gCAAgC,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,gCAAgC,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,2BAA2B,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,2BAA2B,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,iCAAiC,EAAE,eAAiB,CAAC,MAAQ,uBAAuB,MAAQ,iCAAiC,EAAE,aAAe,CAAC,MAAQ,mBAAmB,MAAQ,+BAA+B,EAAE,GAAK,CAAC,MAAQ,SAAS,MAAQ,qCAAqC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,mCAAmC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,+BAA+B,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,kCAAkC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,uCAAuC,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,mCAAmC,CAAC,EAAE,wBAA0B,CAAC,MAAQ,qBAAqB,OAAS,CAAC,MAAQ,OAAO,MAAQ,gCAAgC,EAAE,KAAO,CAAC,MAAQ,QAAQ,MAAQ,oCAAoC,CAAC,EAAE,wBAA0B,CAAC,MAAQ,6BAA6B,KAAO,CAAC,MAAQ,oBAAoB,MAAQ,gFAAgF,EAAE,oBAAsB,CAAC,MAAQ,qBAAqB,MAAQ,wEAAwE,EAAE,QAAU,CAAC,MAAQ,0BAA0B,MAAQ,6EAA6E,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,6CAA6C,EAAE,SAAW,CAAC,MAAQ,iBAAiB,MAAQ,+CAA+C,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,iEAAiE,EAAE,mBAAqB,CAAC,MAAQ,oBAAoB,MAAQ,uDAAuD,EAAE,YAAc,CAAC,MAAQ,cAAc,MAAQ,8DAA8D,EAAE,eAAiB,CAAC,MAAQ,aAAa,MAAQ,2DAA2D,EAAE,sBAAwB,CAAC,MAAQ,yBAAyB,MAAQ,6CAA6C,EAAE,iBAAmB,CAAC,MAAQ,gBAAgB,MAAQ,yDAAyD,EAAE,wBAA0B,CAAC,MAAQ,4BAA4B,MAAQ,gDAAgD,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,uDAAuD,EAAE,oBAAsB,CAAC,MAAQ,mBAAmB,MAAQ,+DAA+D,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,+BAA+B,EAAE,QAAU,CAAC,MAAQ,sBAAsB,MAAQ,oDAAoD,EAAE,YAAc,CAAC,MAAQ,gBAAgB,MAAQ,wCAAwC,EAAE,aAAe,CAAC,MAAQ,YAAY,MAAQ,oCAAoC,EAAE,eAAiB,CAAC,MAAQ,iBAAiB,MAAQ,2CAA2C,EAAE,SAAW,CAAC,MAAQ,cAAc,MAAQ,qDAAqD,EAAE,kBAAoB,CAAC,MAAQ,2BAA2B,MAAQ,iDAAiD,CAAC,EAAE,cAAgB,CAAC,MAAQ,mBAAmB,QAAU,CAAC,MAAQ,WAAW,MAAQ,8CAA8C,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,sCAAsC,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,kDAAkD,CAAC,EAAE,4BAA8B,CAAC,MAAQ,8BAA8B,QAAU,CAAC,MAAQ,WAAW,MAAQ,8CAA8C,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,sCAAsC,EAAE,iBAAmB,CAAC,MAAQ,yBAAyB,MAAQ,6CAA6C,EAAE,MAAQ,CAAC,MAAQ,aAAa,MAAQ,kCAAkC,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,+BAA+B,EAAE,iBAAmB,CAAC,MAAQ,yBAAyB,MAAQ,yBAAyB,EAAE,gBAAkB,CAAC,MAAQ,0BAA0B,MAAQ,0BAA0B,EAAE,aAAe,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,mCAAmC,CAAC,EAAE,2CAA6C,CAAC,MAAQ,6CAA6C,OAAS,CAAC,MAAQ,OAAO,MAAQ,gCAAgC,EAAE,KAAO,CAAC,MAAQ,cAAc,MAAQ,qDAAqD,CAAC,EAAE,0BAA4B,CAAC,MAAQ,6BAA6B,UAAY,CAAC,MAAQ,iBAAiB,MAAQ,qCAAqC,EAAE,mBAAqB,CAAC,MAAQ,2BAA2B,MAAQ,oDAAoD,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,kCAAkC,EAAE,aAAe,CAAC,MAAQ,cAAc,MAAQ,4CAA4C,EAAE,iBAAmB,CAAC,MAAQ,yBAAyB,MAAQ,+BAA+B,CAAC,EAAE,kBAAoB,CAAC,MAAQ,2BAA2B,QAAU,CAAC,MAAQ,WAAW,MAAQ,6DAA6D,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,6DAA6D,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,6DAA6D,CAAC,EAAE,wBAA0B,CAAC,MAAQ,4BAA4B,OAAS,CAAC,MAAQ,OAAO,MAAQ,gCAAgC,EAAE,KAAO,CAAC,MAAQ,QAAQ,MAAQ,wCAAwC,CAAC,EAAE,YAAc,CAAC,MAAQ,wBAAwB,QAAU,CAAC,MAAQ,WAAW,MAAQ,gEAAgE,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,kDAAkD,EAAE,GAAK,CAAC,MAAQ,SAAS,MAAQ,kDAAkD,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,4CAA4C,EAAE,OAAS,CAAC,MAAQ,iBAAiB,MAAQ,4CAA4C,CAAC,EAAE,gCAAkC,CAAC,MAAQ,iCAAiC,OAAS,CAAC,MAAQ,OAAO,MAAQ,mCAAmC,EAAE,KAAO,CAAC,MAAQ,UAAU,MAAQ,yDAAyD,CAAC,EAAE,iBAAmB,CAAC,MAAQ,iBAAiB,QAAU,CAAC,MAAQ,WAAW,MAAQ,yDAAyD,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,6DAA6D,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,6DAA6D,CAAC,EAAE,2BAA6B,CAAC,MAAQ,uBAAuB,OAAS,CAAC,MAAQ,eAAe,MAAQ,gFAAgF,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,mDAAmD,CAAC,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,CAAC,MAAQ,aAAa,MAAQ,+DAA+D,EAAE,OAAS,CAAC,MAAQ,iBAAiB,MAAQ,2DAA2D,EAAE,UAAY,CAAC,MAAQ,uBAAuB,MAAQ,mEAAmE,EAAE,MAAQ,CAAC,MAAQ,iBAAiB,MAAQ,6DAA6D,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,wEAAwE,EAAE,QAAU,CAAC,MAAQ,iBAAiB,MAAQ,wDAAwD,EAAE,IAAM,CAAC,MAAQ,aAAa,MAAQ,gEAAgE,EAAE,aAAe,CAAC,MAAQ,mBAAmB,MAAQ,kDAAkD,EAAE,GAAK,CAAC,MAAQ,kBAAkB,MAAQ,oDAAoD,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,mDAAmD,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,mDAAmD,EAAE,MAAQ,CAAC,MAAQ,kBAAkB,MAAQ,uDAAuD,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,6DAA6D,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,oDAAoD,CAAC,EAAE,cAAgB,CAAC,MAAQ,iBAAiB,gBAAkB,CAAC,MAAQ,cAAc,MAAQ,gDAAgD,EAAE,KAAO,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,0DAA0D,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,mDAAmD,EAAE,WAAa,CAAC,MAAQ,0BAA0B,MAAQ,4CAA4C,EAAE,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,oDAAoD,EAAE,UAAY,CAAC,MAAQ,iBAAiB,MAAQ,sCAAsC,EAAE,QAAU,CAAC,MAAQ,cAAc,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,cAAc,MAAQ,wDAAwD,EAAE,KAAO,CAAC,MAAQ,cAAc,MAAQ,iDAAiD,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,uDAAuD,EAAE,OAAS,CAAC,MAAQ,cAAc,MAAQ,0CAA0C,EAAE,SAAW,CAAC,MAAQ,mBAAmB,MAAQ,wDAAwD,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,iEAAiE,EAAE,UAAY,CAAC,MAAQ,iBAAiB,MAAQ,0CAA0C,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,+CAA+C,EAAE,yBAA2B,CAAC,MAAQ,8BAA8B,MAAQ,wDAAwD,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,+BAA+B,EAAE,YAAc,CAAC,MAAQ,cAAc,MAAQ,kEAAkE,CAAC,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,SAAW,CAAC,MAAQ,sBAAsB,MAAQ,qDAAqD,EAAE,KAAO,CAAC,MAAQ,kBAAkB,MAAQ,qEAAqE,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,6DAA6D,EAAE,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,yDAAyD,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,kEAAkE,EAAE,YAAc,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,CAAC,EAAE,aAAe,CAAC,MAAQ,iBAAiB,OAAS,CAAC,MAAQ,kBAAkB,MAAQ,qDAAqD,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,4DAA4D,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,uDAAuD,EAAE,WAAa,CAAC,MAAQ,2BAA2B,MAAQ,uDAAuD,CAAC,EAAE,WAAa,CAAC,MAAQ,YAAY,UAAY,CAAC,MAAQ,sBAAsB,MAAQ,2DAA2D,EAAE,YAAc,CAAC,MAAQ,kBAAkB,MAAQ,kDAAkD,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,2DAA2D,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,sDAAsD,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,iDAAiD,EAAE,WAAa,CAAC,MAAQ,6BAA6B,MAAQ,0DAA0D,EAAE,WAAa,CAAC,MAAQ,yBAAyB,MAAQ,gEAAgE,EAAE,WAAa,CAAC,MAAQ,qCAAqC,MAAQ,gDAAgD,EAAE,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,uCAAuC,EAAE,wBAA0B,CAAC,MAAQ,yBAAyB,MAAQ,mDAAmD,EAAE,eAAiB,CAAC,MAAQ,kBAAkB,MAAQ,oDAAoD,EAAE,eAAiB,CAAC,MAAQ,uBAAuB,MAAQ,4DAA4D,CAAC,EAAE,qBAAuB,CAAC,MAAQ,2BAA2B,QAAU,CAAC,MAAQ,WAAW,MAAQ,6BAA6B,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,oDAAoD,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,uCAAuC,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,gCAAgC,EAAE,OAAS,CAAC,MAAQ,qBAAqB,MAAQ,oCAAoC,CAAC,EAAE,gCAAkC,CAAC,MAAQ,gCAAgC,OAAS,CAAC,MAAQ,OAAO,MAAQ,6BAA6B,EAAE,KAAO,CAAC,MAAQ,cAAc,MAAQ,gCAAgC,CAAC,EAAE,gBAAkB,CAAC,MAAQ,iBAAiB,iBAAmB,CAAC,MAAQ,6BAA6B,MAAQ,2CAA2C,EAAE,sBAAwB,CAAC,MAAQ,yBAAyB,MAAQ,+CAA+C,EAAE,gBAAkB,CAAC,MAAQ,gCAAgC,MAAQ,qDAAqD,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,8DAA8D,CAAC,EAAE,kBAAoB,CAAC,MAAQ,0BAA0B,QAAU,CAAC,MAAQ,WAAW,MAAQ,+BAA+B,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,8DAA8D,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,gDAAgD,CAAC,EAAE,+BAAiC,CAAC,MAAQ,qCAAqC,QAAU,CAAC,MAAQ,eAAe,MAAQ,6DAA6D,EAAE,eAAiB,CAAC,MAAQ,8BAA8B,MAAQ,kEAAkE,EAAE,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,2DAA2D,EAAE,2BAA6B,CAAC,MAAQ,gCAAgC,MAAQ,2DAA2D,EAAE,cAAgB,CAAC,MAAQ,iBAAiB,MAAQ,oDAAoD,CAAC,EAAE,kBAAoB,CAAC,MAAQ,oBAAoB,QAAU,CAAC,MAAQ,UAAU,MAAQ,sCAAsC,EAAE,OAAS,CAAC,MAAQ,aAAa,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,sDAAsD,EAAE,IAAM,CAAC,MAAQ,eAAe,MAAQ,+CAA+C,EAAE,KAAO,CAAC,MAAQ,gBAAgB,MAAQ,iDAAiD,CAAC,EAAE,aAAe,CAAC,MAAQ,mBAAmB,UAAY,CAAC,MAAQ,eAAe,MAAQ,kCAAkC,EAAE,YAAc,CAAC,MAAQ,iBAAiB,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,8DAA8D,EAAE,kBAAoB,CAAC,MAAQ,sBAAsB,MAAQ,2CAA2C,CAAC,EAAE,qBAAuB,CAAC,MAAQ,mBAAmB,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,uCAAuC,EAAE,MAAQ,CAAC,MAAQ,UAAU,MAAQ,sDAAsD,EAAE,OAAS,CAAC,MAAQ,SAAS,MAAQ,8DAA8D,EAAE,aAAe,CAAC,MAAQ,YAAY,MAAQ,iEAAiE,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,gDAAgD,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,iDAAiD,EAAE,qBAAuB,CAAC,MAAQ,oBAAoB,MAAQ,kDAAkD,CAAC,EAAE,sBAAwB,CAAC,MAAQ,oBAAoB,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,yCAAyC,EAAE,OAAS,CAAC,MAAQ,SAAS,MAAQ,8DAA8D,EAAE,aAAe,CAAC,MAAQ,YAAY,MAAQ,mEAAmE,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,2CAA2C,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,8CAA8C,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,iDAAiD,CAAC,EAAE,2BAA6B,CAAC,MAAQ,6BAA6B,OAAS,CAAC,MAAQ,OAAO,MAAQ,iCAAiC,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,mCAAmC,EAAE,MAAQ,CAAC,MAAQ,kBAAkB,MAAQ,oDAAoD,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,sCAAsC,EAAE,GAAK,CAAC,MAAQ,eAAe,MAAQ,iCAAiC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,oCAAoC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,oDAAoD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,qCAAqC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,CAAC,EAAE,sCAAwC,CAAC,MAAQ,yBAAyB,QAAU,CAAC,MAAQ,2BAA2B,MAAQ,sBAAsB,EAAE,QAAU,CAAC,MAAQ,mBAAmB,MAAQ,6BAA6B,EAAE,4BAA8B,CAAC,MAAQ,wBAAwB,MAAQ,qDAAqD,EAAE,yBAA2B,CAAC,MAAQ,wBAAwB,MAAQ,4CAA4C,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,iCAAiC,EAAE,sBAAwB,CAAC,MAAQ,+BAA+B,MAAQ,4DAA4D,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,gCAAgC,EAAE,cAAgB,CAAC,MAAQ,aAAa,MAAQ,iCAAiC,CAAC,EAAE,8BAAgC,CAAC,MAAQ,2BAA2B,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,0BAA0B,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,4CAA4C,EAAE,gBAAkB,CAAC,MAAQ,eAAe,MAAQ,iCAAiC,EAAE,oBAAsB,CAAC,MAAQ,0BAA0B,MAAQ,sCAAsC,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,oBAAoB,EAAE,YAAc,CAAC,MAAQ,UAAU,MAAQ,+CAA+C,EAAE,YAAc,CAAC,MAAQ,kBAAkB,MAAQ,0BAA0B,EAAE,kBAAoB,CAAC,MAAQ,+BAA+B,MAAQ,uCAAuC,CAAC,EAAE,+CAAiD,CAAC,MAAQ,0BAA0B,kBAAoB,CAAC,MAAQ,sBAAsB,MAAQ,oCAAoC,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,6BAA6B,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,kCAAkC,EAAE,MAAQ,CAAC,MAAQ,aAAa,MAAQ,iCAAiC,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,8BAA8B,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,sCAAsC,CAAC,EAAE,qCAAuC,CAAC,MAAQ,4BAA4B,eAAiB,CAAC,MAAQ,eAAe,MAAQ,eAAe,EAAE,eAAiB,CAAC,MAAQ,eAAe,MAAQ,cAAc,EAAE,gBAAkB,CAAC,MAAQ,oBAAoB,MAAQ,gCAAgC,CAAC,EAAE,4BAA8B,CAAC,MAAQ,2BAA2B,MAAQ,CAAC,MAAQ,yBAAyB,MAAQ,yEAAyE,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,uDAAuD,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,0CAA0C,CAAC,EAAE,gBAAkB,CAAC,MAAQ,uBAAuB,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,oCAAoC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,mDAAmD,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,yCAAyC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,wDAAwD,EAAE,OAAS,CAAC,MAAQ,cAAc,MAAQ,yDAAyD,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,2CAA2C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,0DAA0D,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,4DAA4D,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,2BAA2B,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,oBAAoB,EAAE,IAAM,CAAC,MAAQ,QAAQ,MAAQ,qCAAqC,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,wCAAwC,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,oDAAoD,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,2DAA2D,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,6DAA6D,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,gBAAgB,MAAQ,oCAAoC,EAAE,cAAgB,CAAC,MAAQ,eAAe,MAAQ,+BAA+B,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,uCAAuC,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,sDAAsD,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,oDAAoD,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,sCAAsC,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,uDAAuD,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,oCAAoC,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,2EAA2E,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,+BAA+B,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,gDAAgD,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,oDAAoD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,0CAA0C,CAAC,EAAE,YAAc,CAAC,MAAQ,gBAAgB,yBAA2B,CAAC,MAAQ,4BAA4B,MAAQ,iDAAiD,EAAE,QAAU,CAAC,MAAQ,cAAc,MAAQ,yCAAyC,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,oBAAoB,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,gDAAgD,EAAE,YAAc,CAAC,MAAQ,cAAc,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,gDAAgD,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,2CAA2C,EAAE,yBAA2B,CAAC,MAAQ,+CAA+C,MAAQ,wDAAwD,EAAE,SAAW,CAAC,MAAQ,mBAAmB,MAAQ,gDAAgD,EAAE,UAAY,CAAC,MAAQ,wBAAwB,MAAQ,0CAA0C,EAAE,aAAe,CAAC,MAAQ,uBAAuB,MAAQ,yCAAyC,CAAC,EAAE,sBAAwB,CAAC,MAAQ,mBAAmB,IAAM,CAAC,MAAQ,aAAa,MAAQ,0CAA0C,EAAE,WAAa,CAAC,MAAQ,0BAA0B,MAAQ,oDAAoD,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,oDAAoD,EAAE,SAAW,CAAC,MAAQ,eAAe,MAAQ,+DAA+D,CAAC,EAAE,eAAiB,CAAC,MAAQ,sBAAsB,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,2BAA2B,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,0CAA0C,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,2CAA2C,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,yDAAyD,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,oDAAoD,EAAE,aAAe,CAAC,MAAQ,mBAAmB,MAAQ,iDAAiD,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,qDAAqD,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,qCAAqC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,0CAA0C,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,yDAAyD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,sDAAsD,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,0DAA0D,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,gDAAgD,CAAC,EAAE,aAAe,CAAC,MAAQ,CAAC,MAAQ,UAAU,MAAQ,4DAA4D,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,yCAAyC,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,sDAAsD,EAAE,eAAiB,CAAC,MAAQ,2BAA2B,MAAQ,mEAAmE,EAAE,eAAiB,CAAC,MAAQ,cAAc,MAAQ,gEAAgE,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,qFAAqF,EAAE,uBAAyB,CAAC,MAAQ,6BAA6B,MAAQ,8DAA8D,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,mCAAmC,EAAE,aAAe,CAAC,MAAQ,YAAY,MAAQ,wDAAwD,EAAE,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,iEAAiE,CAAC,EAAE,cAAgB,CAAC,MAAQ,kBAAkB,KAAO,CAAC,MAAQ,aAAa,MAAQ,2DAA2D,EAAE,UAAY,CAAC,MAAQ,uBAAuB,MAAQ,qEAAqE,EAAE,iBAAmB,CAAC,MAAQ,6BAA6B,MAAQ,sDAAsD,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,gFAAgF,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,2EAA2E,EAAE,kBAAoB,CAAC,MAAQ,iBAAiB,MAAQ,uDAAuD,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,0DAA0D,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,2CAA2C,EAAE,YAAc,CAAC,MAAQ,aAAa,MAAQ,0CAA0C,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,sDAAsD,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,mDAAmD,EAAE,kBAAoB,CAAC,MAAQ,6BAA6B,MAAQ,8EAA8E,EAAE,cAAgB,CAAC,MAAQ,mBAAmB,MAAQ,6EAA6E,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,oDAAoD,CAAC,EAAE,sBAAwB,CAAC,MAAQ,6BAA6B,GAAK,CAAC,MAAQ,WAAW,MAAQ,mEAAmE,EAAE,MAAQ,CAAC,MAAQ,UAAU,MAAQ,sCAAsC,EAAE,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,uDAAuD,EAAE,qBAAuB,CAAC,MAAQ,kCAAkC,MAAQ,kDAAkD,EAAE,OAAS,CAAC,MAAQ,UAAU,MAAQ,0DAA0D,CAAC,EAAE,cAAgB,CAAC,MAAQ,wBAAwB,YAAc,CAAC,MAAQ,gBAAgB,MAAQ,gDAAgD,EAAE,YAAc,CAAC,MAAQ,YAAY,MAAQ,2CAA2C,EAAE,gBAAkB,CAAC,MAAQ,oBAAoB,MAAQ,sDAAsD,EAAE,YAAc,CAAC,MAAQ,kBAAkB,MAAQ,gDAAgD,CAAC,EAAE,eAAiB,CAAC,MAAQ,oBAAoB,QAAU,CAAC,MAAQ,QAAQ,MAAQ,+CAA+C,EAAE,OAAS,CAAC,MAAQ,gBAAgB,MAAQ,+CAA+C,CAAC,EAAE,cAAgB,CAAC,MAAQ,CAAC,MAAQ,UAAU,MAAQ,oDAAoD,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,uDAAuD,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,sDAAsD,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,uCAAuC,EAAE,eAAiB,CAAC,MAAQ,qBAAqB,MAAQ,+DAA+D,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,6CAA6C,EAAE,cAAgB,CAAC,MAAQ,sBAAsB,MAAQ,6CAA6C,EAAE,mBAAqB,CAAC,MAAQ,wBAAwB,MAAQ,+CAA+C,EAAE,aAAe,CAAC,MAAQ,mBAAmB,MAAQ,4CAA4C,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,iDAAiD,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,qCAAqC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,0CAA0C,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,0DAA0D,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,8CAA8C,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,gDAAgD,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,yCAAyC,CAAC,EAAE,QAAU,CAAC,MAAQ,SAAS,GAAK,CAAC,MAAQ,WAAW,MAAQ,4CAA4C,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,mCAAmC,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,wCAAwC,EAAE,QAAU,CAAC,MAAQ,UAAU,MAAQ,8BAA8B,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,oDAAoD,EAAE,YAAc,CAAC,MAAQ,gBAAgB,MAAQ,gCAAgC,CAAC,EAAE,sBAAwB,CAAC,MAAQ,yBAAyB,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,8CAA8C,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,uDAAuD,EAAE,gBAAkB,CAAC,MAAQ,yBAAyB,MAAQ,qCAAqC,CAAC,EAAE,4BAA8B,CAAC,MAAQ,yBAAyB,MAAQ,CAAC,MAAQ,UAAU,MAAQ,uCAAuC,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,wCAAwC,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,mCAAmC,CAAC,EAAE,gBAAkB,CAAC,MAAQ,qBAAqB,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,oCAAoC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,sDAAsD,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,0CAA0C,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,6BAA6B,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,wBAAwB,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,2CAA2C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,kCAAkC,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,oCAAoC,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,mCAAmC,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,4BAA4B,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,8BAA8B,EAAE,QAAU,CAAC,MAAQ,4BAA4B,MAAQ,mDAAmD,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,sCAAsC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,+BAA+B,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,+CAA+C,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,kCAAkC,EAAE,cAAgB,CAAC,MAAQ,SAAS,MAAQ,uBAAuB,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,2BAA2B,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,2CAA2C,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,+BAA+B,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,2BAA2B,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,8BAA8B,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,qBAAqB,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,4BAA4B,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,gCAAgC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,yCAAyC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,oCAAoC,CAAC,EAAE,YAAc,CAAC,MAAQ,CAAC,MAAQ,UAAU,MAAQ,uCAAuC,EAAE,iBAAmB,CAAC,MAAQ,6BAA6B,MAAQ,iDAAiD,EAAE,sBAAwB,CAAC,MAAQ,oCAAoC,MAAQ,wDAAwD,EAAE,iBAAmB,CAAC,MAAQ,iCAAiC,MAAQ,4DAA4D,EAAE,sBAAwB,CAAC,MAAQ,wCAAwC,MAAQ,mEAAmE,EAAE,yBAA2B,CAAC,MAAQ,qBAAqB,MAAQ,kDAAkD,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,6CAA6C,EAAE,cAAgB,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,EAAE,YAAc,CAAC,MAAQ,iBAAiB,MAAQ,0CAA0C,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,4CAA4C,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,6BAA6B,EAAE,eAAiB,CAAC,MAAQ,yBAAyB,MAAQ,wDAAwD,EAAE,oBAAsB,CAAC,MAAQ,gCAAgC,MAAQ,+DAA+D,CAAC,EAAE,YAAc,CAAC,MAAQ,UAAU,IAAM,CAAC,MAAQ,WAAW,MAAQ,2CAA2C,EAAE,UAAY,CAAC,MAAQ,YAAY,MAAQ,qCAAqC,EAAE,MAAQ,CAAC,MAAQ,OAAO,MAAQ,4BAA4B,CAAC,EAAE,WAAa,CAAC,MAAQ,eAAe,YAAc,CAAC,MAAQ,eAAe,MAAQ,mCAAmC,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,+CAA+C,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,6BAA6B,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,mDAAmD,EAAE,OAAS,CAAC,MAAQ,UAAU,MAAQ,kDAAkD,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,iDAAiD,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,6CAA6C,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,uCAAuC,EAAE,GAAK,CAAC,MAAQ,uBAAuB,MAAQ,2CAA2C,EAAE,YAAc,CAAC,MAAQ,iBAAiB,MAAQ,6CAA6C,EAAE,SAAW,CAAC,MAAQ,mBAAmB,MAAQ,gCAAgC,CAAC,EAAE,aAAe,CAAC,MAAQ,mBAAmB,SAAW,CAAC,MAAQ,aAAa,MAAQ,kCAAkC,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,iBAAiB,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,sCAAsC,EAAE,KAAO,CAAC,MAAQ,cAAc,MAAQ,wBAAwB,EAAE,WAAa,CAAC,MAAQ,WAAW,MAAQ,gCAAgC,EAAE,aAAe,CAAC,MAAQ,kBAAkB,MAAQ,kDAAkD,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,6CAA6C,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,uCAAuC,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,6BAA6B,EAAE,YAAc,CAAC,MAAQ,cAAc,MAAQ,qCAAqC,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,uCAAuC,EAAE,UAAY,CAAC,MAAQ,WAAW,MAAQ,oCAAoC,EAAE,YAAc,CAAC,MAAQ,mBAAmB,MAAQ,gCAAgC,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,yBAAyB,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,mCAAmC,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,+BAA+B,CAAC,EAAE,YAAc,CAAC,MAAQ,kBAAkB,SAAW,CAAC,MAAQ,cAAc,MAAQ,mCAAmC,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,wBAAwB,EAAE,oBAAsB,CAAC,MAAQ,2BAA2B,MAAQ,0CAA0C,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,oCAAoC,EAAE,aAAe,CAAC,MAAQ,kBAAkB,MAAQ,2DAA2D,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,4CAA4C,EAAE,UAAY,CAAC,MAAQ,UAAU,MAAQ,mBAAmB,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,oBAAoB,EAAE,QAAU,CAAC,MAAQ,OAAO,MAAQ,gCAAgC,EAAE,gBAAkB,CAAC,MAAQ,mBAAmB,MAAQ,mCAAmC,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,8BAA8B,CAAC,EAAE,gBAAkB,CAAC,MAAQ,iBAAiB,YAAc,CAAC,MAAQ,eAAe,MAAQ,yDAAyD,EAAE,IAAM,CAAC,MAAQ,YAAY,MAAQ,qDAAqD,EAAE,aAAe,CAAC,MAAQ,kBAAkB,MAAQ,2DAA2D,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,sDAAsD,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,sDAAsD,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,sDAAsD,EAAE,iBAAmB,CAAC,MAAQ,yBAAyB,MAAQ,kEAAkE,EAAE,oBAAsB,CAAC,MAAQ,uBAAuB,MAAQ,gEAAgE,EAAE,QAAU,CAAC,MAAQ,mBAAmB,MAAQ,uDAAuD,CAAC,EAAE,cAAgB,CAAC,MAAQ,sBAAsB,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,iDAAiD,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,0DAA0D,EAAE,MAAQ,CAAC,MAAQ,aAAa,MAAQ,6DAA6D,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,0DAA0D,EAAE,MAAQ,CAAC,MAAQ,aAAa,MAAQ,oEAAoE,EAAE,cAAgB,CAAC,MAAQ,oBAAoB,MAAQ,sEAAsE,EAAE,aAAe,CAAC,MAAQ,kBAAkB,MAAQ,mEAAmE,EAAE,UAAY,CAAC,MAAQ,UAAU,MAAQ,+CAA+C,CAAC,EAAE,kBAAoB,CAAC,MAAQ,kBAAkB,kBAAoB,CAAC,MAAQ,6BAA6B,MAAQ,+CAA+C,EAAE,aAAe,CAAC,MAAQ,cAAc,MAAQ,yCAAyC,EAAE,aAAe,CAAC,MAAQ,gCAAgC,MAAQ,8DAA8D,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,oCAAoC,EAAE,gBAAkB,CAAC,MAAQ,qBAAqB,MAAQ,mDAAmD,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,kCAAkC,EAAE,qBAAuB,CAAC,MAAQ,yBAAyB,MAAQ,oDAAoD,EAAE,OAAS,CAAC,MAAQ,UAAU,MAAQ,8CAA8C,CAAC,EAAE,kBAAoB,CAAC,MAAQ,kCAAkC,MAAQ,CAAC,MAAQ,OAAO,MAAQ,uDAAuD,EAAE,cAAgB,CAAC,MAAQ,oBAAoB,MAAQ,2CAA2C,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,6EAA6E,EAAE,UAAY,CAAC,MAAQ,kBAAkB,MAAQ,mEAAmE,EAAE,kBAAoB,CAAC,MAAQ,sBAAsB,MAAQ,gDAAgD,EAAE,cAAgB,CAAC,MAAQ,eAAe,MAAQ,yCAAyC,CAAC,EAAE,sBAAwB,CAAC,MAAQ,4BAA4B,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,yCAAyC,CAAC,EAAE,UAAY,CAAC,MAAQ,aAAa,mBAAqB,CAAC,MAAQ,kBAAkB,MAAQ,+CAA+C,EAAE,aAAe,CAAC,MAAQ,oBAAoB,MAAQ,yCAAyC,CAAC,EAAE,WAAa,CAAC,MAAQ,aAAa,KAAO,CAAC,MAAQ,WAAW,MAAQ,kCAAkC,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,2CAA2C,EAAE,KAAO,CAAC,MAAQ,iBAAiB,MAAQ,4BAA4B,EAAE,YAAc,CAAC,MAAQ,cAAc,MAAQ,gCAAgC,EAAE,gBAAkB,CAAC,MAAQ,sBAAsB,MAAQ,iCAAiC,EAAE,eAAiB,CAAC,MAAQ,kBAAkB,MAAQ,yCAAyC,EAAE,mBAAqB,CAAC,MAAQ,uBAAuB,MAAQ,8CAA8C,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,kCAAkC,EAAE,wBAA0B,CAAC,MAAQ,+BAA+B,MAAQ,yCAAyC,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,gCAAgC,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,yCAAyC,EAAE,IAAM,CAAC,MAAQ,cAAc,MAAQ,iCAAiC,EAAE,qBAAuB,CAAC,MAAQ,gBAAgB,MAAQ,oCAAoC,EAAE,qBAAuB,CAAC,MAAQ,mBAAmB,MAAQ,wCAAwC,CAAC,EAAE,gBAAkB,CAAC,MAAQ,gBAAgB,SAAW,CAAC,MAAQ,YAAY,MAAQ,0CAA0C,EAAE,UAAY,CAAC,MAAQ,kBAAkB,MAAQ,4BAA4B,EAAE,aAAe,CAAC,MAAQ,qBAAqB,MAAQ,kEAAkE,EAAE,OAAS,CAAC,MAAQ,oBAAoB,MAAQ,6BAA6B,EAAE,YAAc,CAAC,MAAQ,iBAAiB,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,UAAU,MAAQ,yBAAyB,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,0BAA0B,CAAC,EAAE,+BAAiC,CAAC,MAAQ,8BAA8B,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,sCAAsC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,iCAAiC,CAAC,EAAE,kBAAoB,CAAC,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,2BAA2B,EAAE,qBAAuB,CAAC,MAAQ,2BAA2B,MAAQ,mDAAmD,EAAE,iBAAmB,CAAC,MAAQ,6BAA6B,MAAQ,qCAAqC,EAAE,sBAAwB,CAAC,MAAQ,yBAAyB,MAAQ,iCAAiC,EAAE,gBAAkB,CAAC,MAAQ,8BAA8B,MAAQ,2CAA2C,EAAE,GAAK,CAAC,MAAQ,cAAc,MAAQ,+BAA+B,EAAE,OAAS,CAAC,MAAQ,gBAAgB,MAAQ,yBAAyB,EAAE,YAAc,CAAC,MAAQ,kBAAkB,MAAQ,oCAAoC,EAAE,IAAM,CAAC,MAAQ,YAAY,MAAQ,gBAAgB,EAAE,UAAY,CAAC,MAAQ,kBAAkB,MAAQ,iCAAiC,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,gCAAgC,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,iCAAiC,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,mCAAmC,CAAC,EAAE,WAAa,CAAC,MAAQ,CAAC,MAAQ,OAAO,MAAQ,gBAAgB,EAAE,uBAAyB,CAAC,MAAQ,mBAAmB,MAAQ,sDAAsD,EAAE,YAAc,CAAC,MAAQ,kBAAkB,MAAQ,iDAAiD,EAAE,mCAAqC,CAAC,MAAQ,uCAAuC,MAAQ,+DAA+D,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,yBAAyB,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,0BAA0B,EAAE,IAAM,CAAC,MAAQ,OAAO,MAAQ,8BAA8B,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,kCAAkC,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,sCAAsC,CAAC,EAAE,oBAAsB,CAAC,MAAQ,CAAC,MAAQ,OAAO,MAAQ,gBAAgB,EAAE,uBAAyB,CAAC,MAAQ,8BAA8B,MAAQ,mDAAmD,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,yCAAyC,EAAE,4BAA8B,CAAC,MAAQ,4BAA4B,MAAQ,8CAA8C,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,yBAAyB,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,0BAA0B,EAAE,IAAM,CAAC,MAAQ,OAAO,MAAQ,8BAA8B,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,kCAAkC,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,sCAAsC,CAAC,EAAE,eAAiB,CAAC,MAAQ,CAAC,MAAQ,OAAO,MAAQ,gBAAgB,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,yBAAyB,EAAE,sBAAwB,CAAC,MAAQ,qBAAqB,MAAQ,uCAAuC,EAAE,eAAiB,CAAC,MAAQ,aAAa,MAAQ,uCAAuC,EAAE,sBAAwB,CAAC,MAAQ,yBAAyB,MAAQ,wCAAwC,EAAE,sBAAwB,CAAC,MAAQ,sBAAsB,MAAQ,6CAA6C,EAAE,kBAAoB,CAAC,MAAQ,oBAAoB,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,kCAAkC,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,0BAA0B,EAAE,IAAM,CAAC,MAAQ,OAAO,MAAQ,8BAA8B,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,sCAAsC,CAAC,EAAE,iBAAmB,CAAC,MAAQ,CAAC,MAAQ,OAAO,MAAQ,gBAAgB,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,yBAAyB,EAAE,mBAAqB,CAAC,MAAQ,mBAAmB,MAAQ,6CAA6C,EAAE,wBAA0B,CAAC,MAAQ,wBAAwB,MAAQ,0CAA0C,EAAE,iBAAmB,CAAC,MAAQ,gBAAgB,MAAQ,0CAA0C,EAAE,wBAA0B,CAAC,MAAQ,4BAA4B,MAAQ,2CAA2C,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,kCAAkC,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,0BAA0B,EAAE,IAAM,CAAC,MAAQ,OAAO,MAAQ,8BAA8B,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,sCAAsC,CAAC,EAAE,kBAAoB,CAAC,MAAQ,CAAC,MAAQ,OAAO,MAAQ,gBAAgB,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,yBAAyB,EAAE,eAAiB,CAAC,MAAQ,qBAAqB,MAAQ,0CAA0C,EAAE,gBAAkB,CAAC,MAAQ,2BAA2B,MAAQ,mCAAmC,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,gCAAgC,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,kCAAkC,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,0BAA0B,EAAE,IAAM,CAAC,MAAQ,OAAO,MAAQ,8BAA8B,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,sCAAsC,CAAC,EAAE,wBAA0B,CAAC,MAAQ,CAAC,MAAQ,OAAO,MAAQ,4BAA4B,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,6DAA6D,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,qCAAqC,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,uCAAuC,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,6CAA6C,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,8CAA8C,EAAE,IAAM,CAAC,MAAQ,OAAO,MAAQ,yBAAyB,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,8CAA8C,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,8CAA8C,CAAC,EAAE,2BAA6B,CAAC,MAAQ,CAAC,MAAQ,OAAO,MAAQ,4BAA4B,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,uCAAuC,EAAE,mBAAqB,CAAC,MAAQ,+BAA+B,MAAQ,+CAA+C,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,6CAA6C,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,8CAA8C,EAAE,IAAM,CAAC,MAAQ,OAAO,MAAQ,yBAAyB,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,8CAA8C,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,8CAA8C,CAAC,EAAE,eAAiB,CAAC,MAAQ,CAAC,MAAQ,OAAO,MAAQ,4BAA4B,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,uCAAuC,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,6CAA6C,EAAE,eAAiB,CAAC,MAAQ,sBAAsB,MAAQ,uDAAuD,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,8CAA8C,EAAE,IAAM,CAAC,MAAQ,OAAO,MAAQ,yBAAyB,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,8CAA8C,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,8CAA8C,CAAC,EAAE,mBAAqB,CAAC,MAAQ,6BAA6B,WAAa,CAAC,MAAQ,qBAAqB,MAAQ,qCAAqC,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,gEAAgE,EAAE,SAAW,CAAC,MAAQ,YAAY,MAAQ,oCAAoC,EAAE,SAAW,CAAC,MAAQ,eAAe,MAAQ,0BAA0B,EAAE,YAAc,CAAC,MAAQ,uBAAuB,MAAQ,mDAAmD,CAAC,EAAE,aAAe,CAAC,MAAQ,0BAA0B,WAAa,CAAC,MAAQ,qBAAqB,MAAQ,qCAAqC,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,mCAAmC,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,+CAA+C,CAAC,EAAE,YAAc,CAAC,MAAQ,mBAAmB,KAAO,CAAC,MAAQ,OAAO,MAAQ,uCAAuC,CAAC,EAAE,uBAAyB,CAAC,MAAQ,0BAA0B,KAAO,CAAC,MAAQ,QAAQ,MAAQ,+CAA+C,EAAE,WAAa,CAAC,MAAQ,WAAW,MAAQ,gDAAgD,EAAE,KAAO,CAAC,MAAQ,iBAAiB,MAAQ,+BAA+B,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,kDAAkD,EAAE,KAAO,CAAC,MAAQ,eAAe,MAAQ,8CAA8C,CAAC,EAAE,8BAAgC,CAAC,MAAQ,6BAA6B,IAAM,CAAC,MAAQ,YAAY,MAAQ,sDAAsD,CAAC,EAAE,qBAAuB,CAAC,MAAQ,uCAAuC,UAAY,CAAC,MAAQ,eAAe,MAAQ,oDAAoD,EAAE,aAAe,CAAC,MAAQ,mBAAmB,MAAQ,gDAAgD,EAAE,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,kDAAkD,EAAE,eAAiB,CAAC,MAAQ,uBAAuB,MAAQ,oDAAoD,CAAC,EAAE,kBAAoB,CAAC,MAAQ,kCAAkC,SAAW,CAAC,MAAQ,WAAW,MAAQ,oDAAoD,EAAE,cAAgB,CAAC,MAAQ,wBAAwB,MAAQ,sDAAsD,CAAC,EAAE,QAAU,CAAC,MAAQ,aAAa,OAAS,CAAC,MAAQ,aAAa,MAAQ,gDAAgD,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,4DAA4D,EAAE,KAAO,CAAC,MAAQ,oBAAoB,MAAQ,mDAAmD,EAAE,UAAY,CAAC,MAAQ,iBAAiB,MAAQ,wDAAwD,EAAE,OAAS,CAAC,MAAQ,sBAAsB,MAAQ,mDAAmD,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,4CAA4C,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,yCAAyC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,yDAAyD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,oDAAoD,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,kDAAkD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,8CAA8C,CAAC,EAAE,aAAe,CAAC,MAAQ,0BAA0B,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,8CAA8C,EAAE,MAAQ,CAAC,MAAQ,kBAAkB,MAAQ,sCAAsC,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,sCAAsC,EAAE,SAAW,CAAC,MAAQ,kBAAkB,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,wCAAwC,EAAE,YAAc,CAAC,MAAQ,WAAW,MAAQ,yDAAyD,EAAE,YAAc,CAAC,MAAQ,6BAA6B,MAAQ,gEAAgE,EAAE,cAAgB,CAAC,MAAQ,sBAAsB,MAAQ,iCAAiC,EAAE,mBAAqB,CAAC,MAAQ,gCAAgC,MAAQ,0CAA0C,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,wDAAwD,EAAE,WAAa,CAAC,MAAQ,eAAe,MAAQ,2CAA2C,EAAE,8BAAgC,CAAC,MAAQ,mCAAmC,MAAQ,6DAA6D,EAAE,KAAO,CAAC,MAAQ,kBAAkB,MAAQ,kCAAkC,EAAE,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,+BAA+B,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,iCAAiC,CAAC,EAAE,cAAgB,CAAC,MAAQ,kBAAkB,KAAO,CAAC,MAAQ,eAAe,MAAQ,kDAAkD,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,iCAAiC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,kDAAkD,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,oBAAoB,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,sBAAsB,MAAQ,sCAAsC,EAAE,OAAS,CAAC,MAAQ,kBAAkB,MAAQ,yCAAyC,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,iBAAiB,EAAE,IAAM,CAAC,MAAQ,OAAO,MAAQ,iCAAiC,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,mCAAmC,CAAC,EAAE,eAAiB,CAAC,MAAQ,sBAAsB,YAAc,CAAC,MAAQ,gBAAgB,MAAQ,iDAAiD,EAAE,mBAAqB,CAAC,MAAQ,0BAA0B,MAAQ,gDAAgD,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,8BAA8B,EAAE,eAAiB,CAAC,MAAQ,kBAAkB,MAAQ,6BAA6B,EAAE,cAAgB,CAAC,MAAQ,qBAAqB,MAAQ,+CAA+C,CAAC,EAAE,eAAiB,CAAC,MAAQ,mBAAmB,eAAiB,CAAC,MAAQ,gBAAgB,MAAQ,0DAA0D,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,2CAA2C,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,iCAAiC,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,iDAAiD,EAAE,SAAW,CAAC,MAAQ,aAAa,MAAQ,mDAAmD,EAAE,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,kDAAkD,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,4CAA4C,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,iCAAiC,CAAC,EAAE,cAAgB,CAAC,MAAQ,eAAe,QAAU,CAAC,MAAQ,aAAa,MAAQ,wDAAwD,EAAE,cAAgB,CAAC,MAAQ,aAAa,MAAQ,sDAAsD,EAAE,YAAc,CAAC,MAAQ,aAAa,MAAQ,oDAAoD,EAAE,gBAAkB,CAAC,MAAQ,iBAAiB,MAAQ,mDAAmD,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,4CAA4C,CAAC,EAAE,sBAAwB,CAAC,MAAQ,yBAAyB,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,+DAA+D,EAAE,YAAc,CAAC,MAAQ,uBAAuB,MAAQ,8DAA8D,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,yEAAyE,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,qEAAqE,EAAE,OAAS,CAAC,MAAQ,WAAW,MAAQ,8CAA8C,EAAE,aAAe,CAAC,MAAQ,uBAAuB,MAAQ,qDAAqD,EAAE,WAAa,CAAC,MAAQ,uBAAuB,MAAQ,kDAAkD,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,+CAA+C,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,wDAAwD,CAAC,EAAE,YAAc,CAAC,MAAQ,sBAAsB,GAAK,CAAC,MAAQ,sBAAsB,MAAQ,oEAAoE,EAAE,UAAY,CAAC,MAAQ,iBAAiB,MAAQ,gEAAgE,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,yCAAyC,EAAE,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,yDAAyD,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,uEAAuE,EAAE,UAAY,CAAC,MAAQ,YAAY,MAAQ,yDAAyD,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,uDAAuD,EAAE,cAAgB,CAAC,MAAQ,aAAa,MAAQ,uDAAuD,EAAE,YAAc,CAAC,MAAQ,aAAa,MAAQ,uDAAuD,EAAE,gBAAkB,CAAC,MAAQ,iBAAiB,MAAQ,4DAA4D,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,kDAAkD,CAAC,EAAE,sBAAwB,CAAC,MAAQ,sBAAsB,uBAAyB,CAAC,MAAQ,uBAAuB,MAAQ,+DAA+D,EAAE,yBAA2B,CAAC,MAAQ,yBAAyB,MAAQ,8DAA8D,EAAE,kCAAoC,CAAC,MAAQ,gCAAgC,MAAQ,yFAAyF,EAAE,2BAA6B,CAAC,MAAQ,wBAAwB,MAAQ,iFAAiF,EAAE,gCAAkC,CAAC,MAAQ,qCAAqC,MAAQ,8FAA8F,EAAE,qCAAuC,CAAC,MAAQ,oCAAoC,MAAQ,6FAA6F,EAAE,sCAAwC,CAAC,MAAQ,qCAAqC,MAAQ,8FAA8F,CAAC,EAAE,0BAA4B,CAAC,MAAQ,uBAAuB,GAAK,CAAC,MAAQ,uBAAuB,MAAQ,gEAAgE,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,yDAAyD,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,4CAA4C,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,8CAA8C,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,oCAAoC,EAAE,iBAAmB,CAAC,MAAQ,2BAA2B,MAAQ,uDAAuD,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,6DAA6D,EAAE,gBAAkB,CAAC,MAAQ,cAAc,MAAQ,0CAA0C,EAAE,YAAc,CAAC,MAAQ,cAAc,MAAQ,0CAA0C,CAAC,EAAE,oBAAsB,CAAC,MAAQ,8BAA8B,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,gCAAgC,EAAE,OAAS,CAAC,MAAQ,aAAa,MAAQ,kCAAkC,EAAE,GAAK,CAAC,MAAQ,kBAAkB,MAAQ,8CAA8C,EAAE,OAAS,CAAC,MAAQ,kBAAkB,MAAQ,uBAAuB,EAAE,UAAY,CAAC,MAAQ,sBAAsB,MAAQ,oCAAoC,EAAE,OAAS,CAAC,MAAQ,qBAAqB,MAAQ,uCAAuC,EAAE,iBAAmB,CAAC,MAAQ,cAAc,MAAQ,6CAA6C,EAAE,IAAM,CAAC,MAAQ,kBAAkB,MAAQ,yCAAyC,EAAE,OAAS,CAAC,MAAQ,mBAAmB,MAAQ,6BAA6B,EAAE,MAAQ,CAAC,MAAQ,eAAe,MAAQ,2BAA2B,EAAE,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,oCAAoC,CAAC,EAAE,4BAA8B,CAAC,MAAQ,4BAA4B,MAAQ,CAAC,MAAQ,cAAc,MAAQ,iCAAiC,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,sCAAsC,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,sCAAsC,CAAC,EAAE,gBAAkB,CAAC,MAAQ,qBAAqB,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,oCAAoC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,qDAAqD,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,uCAAuC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,8BAA8B,EAAE,OAAS,CAAC,MAAQ,oBAAoB,MAAQ,uCAAuC,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,2CAA2C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,kCAAkC,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,oCAAoC,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,uBAAuB,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,4BAA4B,EAAE,IAAM,CAAC,MAAQ,QAAQ,MAAQ,gCAAgC,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,mCAAmC,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,uCAAuC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,yBAAyB,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,6CAA6C,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,eAAe,MAAQ,oCAAoC,EAAE,cAAgB,CAAC,MAAQ,cAAc,MAAQ,iBAAiB,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,qBAAqB,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,wCAAwC,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,+BAA+B,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,2BAA2B,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,8BAA8B,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,4BAA4B,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,4BAA4B,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,6BAA6B,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,mBAAmB,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,CAAC,EAAE,YAAc,CAAC,MAAQ,CAAC,MAAQ,UAAU,MAAQ,yBAAyB,EAAE,yBAA2B,CAAC,MAAQ,4BAA4B,MAAQ,iDAAiD,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,yBAAyB,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,2CAA2C,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,wCAAwC,EAAE,YAAc,CAAC,MAAQ,aAAa,MAAQ,uCAAuC,EAAE,YAAc,CAAC,MAAQ,cAAc,MAAQ,iCAAiC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,mCAAmC,EAAE,UAAY,CAAC,MAAQ,iBAAiB,MAAQ,yBAAyB,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,uBAAuB,EAAE,cAAgB,CAAC,MAAQ,qBAAqB,MAAQ,oCAAoC,EAAE,kBAAoB,CAAC,MAAQ,mCAAmC,MAAQ,mDAAmD,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,wCAAwC,EAAE,eAAiB,CAAC,MAAQ,cAAc,MAAQ,4CAA4C,EAAE,eAAiB,CAAC,MAAQ,sBAAsB,MAAQ,sCAAsC,CAAC,EAAE,OAAS,CAAC,MAAQ,CAAC,MAAQ,UAAU,MAAQ,mBAAmB,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,oCAAoC,EAAE,SAAW,CAAC,MAAQ,sBAAsB,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,0CAA0C,EAAE,WAAa,CAAC,MAAQ,eAAe,MAAQ,kBAAkB,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,6BAA6B,EAAE,QAAU,CAAC,MAAQ,sBAAsB,MAAQ,+BAA+B,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,kBAAkB,EAAE,YAAc,CAAC,MAAQ,WAAW,MAAQ,iCAAiC,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,oCAAoC,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,8BAA8B,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,qCAAqC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,sDAAsD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,oBAAoB,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,2CAA2C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,yCAAyC,CAAC,EAAE,WAAa,CAAC,MAAQ,gBAAgB,SAAW,CAAC,MAAQ,eAAe,MAAQ,8DAA8D,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,wEAAwE,CAAC,EAAE,2BAA6B,CAAC,MAAQ,wBAAwB,MAAQ,CAAC,MAAQ,cAAc,MAAQ,mFAAmF,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,gEAAgE,EAAE,MAAQ,CAAC,MAAQ,uBAAuB,MAAQ,mEAAmE,CAAC,EAAE,eAAiB,CAAC,MAAQ,aAAa,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,qCAAqC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,sDAAsD,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,2CAA2C,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,gCAAgC,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,yBAAyB,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,iDAAiD,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,mDAAmD,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,6BAA6B,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,+BAA+B,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,0CAA0C,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,oDAAoD,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,0BAA0B,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,iEAAiE,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,kBAAkB,MAAQ,iDAAiD,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,2BAA2B,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,yCAAyC,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,6DAA6D,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,8CAA8C,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,6BAA6B,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,4EAA4E,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,uDAAuD,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,6BAA6B,EAAE,GAAK,CAAC,MAAQ,KAAK,MAAQ,iCAAiC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,uCAAuC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,sDAAsD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,yCAAyC,CAAC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,WAAa,CAAC,MAAQ,eAAe,MAAQ,yDAAyD,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,0DAA0D,CAAC,EAAE,gBAAkB,CAAC,MAAQ,eAAe,OAAS,CAAC,MAAQ,UAAU,MAAQ,8BAA8B,EAAE,OAAS,CAAC,MAAQ,aAAa,MAAQ,mDAAmD,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,uCAAuC,EAAE,aAAe,CAAC,MAAQ,mBAAmB,MAAQ,4CAA4C,EAAE,GAAK,CAAC,MAAQ,KAAK,MAAQ,sCAAsC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,2CAA2C,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,0DAA0D,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,4DAA4D,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,4CAA4C,CAAC,EAAE,sBAAwB,CAAC,MAAQ,wBAAwB,YAAc,CAAC,MAAQ,SAAS,MAAQ,oDAAoD,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,6DAA6D,EAAE,cAAgB,CAAC,MAAQ,kBAAkB,MAAQ,0DAA0D,CAAC,EAAE,qBAAuB,CAAC,MAAQ,0BAA0B,KAAO,CAAC,MAAQ,kBAAkB,MAAQ,iDAAiD,EAAE,KAAO,CAAC,MAAQ,sBAAsB,MAAQ,yDAAyD,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,kDAAkD,CAAC,EAAE,oCAAsC,CAAC,MAAQ,iCAAiC,MAAQ,CAAC,MAAQ,UAAU,MAAQ,iDAAiD,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,wDAAwD,EAAE,MAAQ,CAAC,MAAQ,kBAAkB,MAAQ,yDAAyD,CAAC,EAAE,wBAA0B,CAAC,MAAQ,8BAA8B,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,oDAAoD,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,+CAA+C,EAAE,QAAU,CAAC,MAAQ,mBAAmB,MAAQ,wDAAwD,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,8CAA8C,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,kDAAkD,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,2DAA2D,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,kDAAkD,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,oDAAoD,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,6DAA6D,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,sDAAsD,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,wDAAwD,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,wCAAwC,EAAE,eAAiB,CAAC,MAAQ,wBAAwB,MAAQ,+CAA+C,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,yCAAyC,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,oDAAoD,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,uDAAuD,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,gDAAgD,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,kDAAkD,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,2CAA2C,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,2DAA2D,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,6DAA6D,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,iCAAiC,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,gCAAgC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,0CAA0C,EAAE,GAAK,CAAC,MAAQ,SAAS,MAAQ,8CAA8C,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,mDAAmD,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,+CAA+C,CAAC,EAAE,oBAAsB,CAAC,MAAQ,oBAAoB,EAAE,OAAS,CAAC,MAAQ,CAAC,MAAQ,mBAAmB,MAAQ,gDAAgD,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,2CAA2C,EAAE,KAAO,CAAC,MAAQ,kBAAkB,MAAQ,+BAA+B,EAAE,OAAS,CAAC,MAAQ,aAAa,MAAQ,+CAA+C,EAAE,UAAY,CAAC,MAAQ,iBAAiB,MAAQ,qCAAqC,EAAE,QAAU,CAAC,MAAQ,cAAc,MAAQ,gDAAgD,EAAE,QAAU,CAAC,MAAQ,cAAc,MAAQ,2DAA2D,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,WAAW,MAAQ,0CAA0C,EAAE,aAAe,CAAC,MAAQ,0BAA0B,MAAQ,2CAA2C,EAAE,GAAK,CAAC,MAAQ,oBAAoB,MAAQ,mCAAmC,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,iCAAiC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,gDAAgD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,qDAAqD,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,CAAC,EAAE,qBAAuB,CAAC,MAAQ,sBAAsB,SAAW,CAAC,MAAQ,aAAa,MAAQ,0CAA0C,EAAE,OAAS,CAAC,MAAQ,aAAa,MAAQ,0CAA0C,EAAE,SAAW,CAAC,MAAQ,cAAc,MAAQ,2CAA2C,EAAE,OAAS,CAAC,MAAQ,SAAS,MAAQ,yBAAyB,EAAE,KAAO,CAAC,MAAQ,QAAQ,MAAQ,0CAA0C,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,gDAAgD,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,8CAA8C,EAAE,OAAS,CAAC,MAAQ,mBAAmB,MAAQ,kCAAkC,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,kCAAkC,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,wCAAwC,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,0CAA0C,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,uCAAuC,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,kDAAkD,EAAE,GAAK,CAAC,MAAQ,qBAAqB,MAAQ,oCAAoC,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,iCAAiC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,gDAAgD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,sDAAsD,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,CAAC,EAAE,sBAAwB,CAAC,MAAQ,6BAA6B,KAAO,CAAC,MAAQ,QAAQ,MAAQ,gCAAgC,EAAE,UAAY,CAAC,MAAQ,kBAAkB,MAAQ,qCAAqC,EAAE,WAAa,CAAC,MAAQ,eAAe,MAAQ,6CAA6C,EAAE,SAAW,CAAC,MAAQ,aAAa,MAAQ,yCAAyC,EAAE,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,iCAAiC,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,kCAAkC,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,gCAAgC,CAAC,EAAE,oBAAsB,CAAC,MAAQ,0BAA0B,QAAU,CAAC,MAAQ,aAAa,MAAQ,kCAAkC,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,yBAAyB,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,+BAA+B,EAAE,cAAgB,CAAC,MAAQ,aAAa,MAAQ,iCAAiC,EAAE,YAAc,CAAC,MAAQ,aAAa,MAAQ,8BAA8B,EAAE,YAAc,CAAC,MAAQ,aAAa,MAAQ,mBAAmB,EAAE,YAAc,CAAC,MAAQ,YAAY,MAAQ,kBAAkB,EAAE,KAAO,CAAC,MAAQ,SAAS,MAAQ,sCAAsC,EAAE,OAAS,CAAC,MAAQ,SAAS,MAAQ,yCAAyC,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,6CAA6C,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,qBAAqB,EAAE,KAAO,CAAC,MAAQ,UAAU,MAAQ,qBAAqB,EAAE,sBAAwB,CAAC,MAAQ,aAAa,MAAQ,oCAAoC,CAAC,EAAE,6BAA+B,CAAC,MAAQ,gCAAgC,MAAQ,CAAC,MAAQ,YAAY,MAAQ,4CAA4C,EAAE,OAAS,CAAC,MAAQ,iBAAiB,MAAQ,yCAAyC,EAAE,aAAe,CAAC,MAAQ,uBAAuB,MAAQ,gDAAgD,EAAE,WAAa,CAAC,MAAQ,uBAAuB,MAAQ,gDAAgD,CAAC,EAAE,sBAAwB,CAAC,MAAQ,0BAA0B,WAAa,CAAC,MAAQ,wBAAwB,MAAQ,2FAA2F,CAAC,EAAE,eAAiB,CAAC,MAAQ,wBAAwB,YAAc,CAAC,MAAQ,eAAe,MAAQ,mGAAmG,EAAE,YAAc,CAAC,MAAQ,YAAY,MAAQ,4FAA4F,EAAE,OAAS,CAAC,MAAQ,aAAa,MAAQ,+DAA+D,CAAC,EAAE,kBAAoB,CAAC,MAAQ,4BAA4B,WAAa,CAAC,MAAQ,WAAW,MAAQ,qFAAqF,EAAE,WAAa,CAAC,MAAQ,eAAe,MAAQ,0EAA0E,EAAE,SAAW,CAAC,MAAQ,aAAa,MAAQ,kEAAkE,EAAE,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,sEAAsE,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,gEAAgE,EAAE,QAAU,CAAC,MAAQ,sBAAsB,MAAQ,kEAAkE,EAAE,OAAS,CAAC,MAAQ,gBAAgB,MAAQ,2EAA2E,EAAE,aAAe,CAAC,MAAQ,YAAY,MAAQ,iFAAiF,CAAC,EAAE,4BAA8B,CAAC,MAAQ,4BAA4B,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,+DAA+D,EAAE,YAAc,CAAC,MAAQ,uBAAuB,MAAQ,gFAAgF,EAAE,qBAAuB,CAAC,MAAQ,sBAAsB,MAAQ,mEAAmE,EAAE,0BAA4B,CAAC,MAAQ,mCAAmC,MAAQ,gFAAgF,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,6DAA6D,EAAE,oBAAsB,CAAC,MAAQ,gCAAgC,MAAQ,6EAA6E,CAAC,EAAE,sBAAwB,CAAC,MAAQ,0BAA0B,KAAO,CAAC,MAAQ,QAAQ,MAAQ,6EAA6E,CAAC,EAAE,wBAA0B,CAAC,MAAQ,gCAAgC,KAAO,CAAC,MAAQ,QAAQ,MAAQ,+DAA+D,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,kEAAkE,EAAE,SAAW,CAAC,MAAQ,aAAa,MAAQ,yCAAyC,EAAE,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,oDAAoD,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,6BAA6B,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,mCAAmC,CAAC,EAAE,2BAA6B,CAAC,MAAQ,qCAAqC,eAAiB,CAAC,MAAQ,qBAAqB,MAAQ,oDAAoD,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,2CAA2C,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,kDAAkD,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,2CAA2C,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,gCAAgC,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,qDAAqD,EAAE,UAAY,CAAC,MAAQ,YAAY,MAAQ,+BAA+B,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,8BAA8B,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,oEAAoE,CAAC,EAAE,mCAAqC,CAAC,MAAQ,0BAA0B,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,kEAAkE,EAAE,SAAW,CAAC,MAAQ,aAAa,MAAQ,yCAAyC,EAAE,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,oDAAoD,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,6BAA6B,EAAE,YAAc,CAAC,MAAQ,WAAW,MAAQ,iCAAiC,EAAE,aAAe,CAAC,MAAQ,aAAa,MAAQ,oDAAoD,CAAC,EAAE,uCAAyC,CAAC,MAAQ,gCAAgC,YAAc,CAAC,MAAQ,YAAY,MAAQ,2CAA2C,EAAE,YAAc,CAAC,MAAQ,WAAW,MAAQ,qDAAqD,CAAC,EAAE,wBAA0B,CAAC,MAAQ,iCAAiC,WAAa,CAAC,MAAQ,WAAW,MAAQ,4CAA4C,EAAE,OAAS,CAAC,MAAQ,aAAa,MAAQ,yCAAyC,EAAE,2BAA6B,CAAC,MAAQ,kCAAkC,MAAQ,kDAAkD,EAAE,iBAAmB,CAAC,MAAQ,mBAAmB,MAAQ,8CAA8C,EAAE,cAAgB,CAAC,MAAQ,2BAA2B,MAAQ,8DAA8D,EAAE,aAAe,CAAC,MAAQ,oBAAoB,MAAQ,4CAA4C,EAAE,WAAa,CAAC,MAAQ,eAAe,MAAQ,qDAAqD,EAAE,SAAW,CAAC,MAAQ,aAAa,MAAQ,yCAAyC,EAAE,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,oDAAoD,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,6BAA6B,EAAE,QAAU,CAAC,MAAQ,sBAAsB,MAAQ,+BAA+B,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,uBAAuB,EAAE,aAAe,CAAC,MAAQ,YAAY,MAAQ,2CAA2C,CAAC,EAAE,oBAAsB,CAAC,MAAQ,yBAAyB,WAAa,CAAC,MAAQ,aAAa,MAAQ,mDAAmD,EAAE,eAAiB,CAAC,MAAQ,eAAe,MAAQ,+CAA+C,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,oDAAoD,CAAC,EAAE,uBAAyB,CAAC,MAAQ,oCAAoC,KAAO,CAAC,MAAQ,QAAQ,MAAQ,2DAA2D,EAAE,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,wCAAwC,CAAC,EAAE,sBAAwB,CAAC,MAAQ,2BAA2B,QAAU,CAAC,MAAQ,SAAS,MAAQ,8BAA8B,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,sBAAsB,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,+BAA+B,EAAE,MAAQ,CAAC,MAAQ,8BAA8B,MAAQ,8BAA8B,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,sCAAsC,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,uCAAuC,CAAC,EAAE,mBAAqB,CAAC,MAAQ,0BAA0B,SAAW,CAAC,MAAQ,aAAa,MAAQ,mBAAmB,EAAE,eAAiB,CAAC,MAAQ,oBAAoB,MAAQ,+BAA+B,EAAE,eAAiB,CAAC,MAAQ,oBAAoB,MAAQ,4BAA4B,EAAE,UAAY,CAAC,MAAQ,WAAW,MAAQ,gCAAgC,EAAE,aAAe,CAAC,MAAQ,4BAA4B,MAAQ,wCAAwC,EAAE,eAAiB,CAAC,MAAQ,iBAAiB,MAAQ,uCAAuC,EAAE,aAAe,CAAC,MAAQ,iBAAiB,MAAQ,4BAA4B,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,oBAAoB,CAAC,EAAE,oBAAsB,CAAC,MAAQ,8BAA8B,OAAS,CAAC,MAAQ,iBAAiB,MAAQ,sCAAsC,EAAE,KAAO,CAAC,MAAQ,UAAU,MAAQ,oBAAoB,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,6BAA6B,CAAC,EAAE,aAAe,CAAC,MAAQ,uBAAuB,KAAO,CAAC,MAAQ,eAAe,MAAQ,mDAAmD,CAAC,EAAE,oBAAsB,CAAC,MAAQ,wDAAwD,KAAO,CAAC,MAAQ,qBAAqB,MAAQ,gFAAgF,CAAC,EAAE,oBAAsB,CAAC,MAAQ,0BAA0B,KAAO,CAAC,MAAQ,oBAAoB,MAAQ,qDAAqD,CAAC,EAAE,yBAA2B,CAAC,MAAQ,+BAA+B,KAAO,CAAC,MAAQ,gBAAgB,MAAQ,uDAAuD,CAAC,EAAE,gBAAkB,CAAC,MAAQ,uBAAuB,KAAO,CAAC,MAAQ,kBAAkB,MAAQ,oDAAoD,EAAE,KAAO,CAAC,MAAQ,iBAAiB,MAAQ,mDAAmD,CAAC,EAAE,6BAA+B,CAAC,MAAQ,sCAAsC,KAAO,CAAC,MAAQ,qBAAqB,MAAQ,8GAA8G,CAAC,EAAE,+BAAiC,CAAC,MAAQ,kCAAkC,KAAO,CAAC,MAAQ,gBAAgB,MAAQ,+GAA+G,CAAC,EAAE,qBAAuB,CAAC,MAAQ,qCAAqC,KAAO,CAAC,MAAQ,UAAU,MAAQ,+FAA+F,EAAE,KAAO,CAAC,MAAQ,sBAAsB,MAAQ,sHAAsH,CAAC,EAAE,+CAAiD,CAAC,MAAQ,mCAAmC,iBAAmB,CAAC,MAAQ,eAAe,MAAQ,gHAAgH,EAAE,QAAU,CAAC,MAAQ,cAAc,MAAQ,gHAAgH,EAAE,KAAO,CAAC,MAAQ,gBAAgB,MAAQ,+GAA+G,CAAC,EAAE,2BAA6B,CAAC,MAAQ,sBAAsB,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,uFAAuF,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,kGAAkG,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,yEAAyE,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,8FAA8F,EAAE,KAAO,CAAC,MAAQ,kBAAkB,MAAQ,sGAAsG,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,8HAA8H,CAAC,EAAE,sBAAwB,CAAC,MAAQ,0BAA0B,QAAU,CAAC,MAAQ,MAAM,MAAQ,oEAAoE,EAAE,OAAS,CAAC,MAAQ,gBAAgB,MAAQ,8EAA8E,EAAE,KAAO,CAAC,MAAQ,oBAAoB,MAAQ,yFAAyF,CAAC,EAAE,sBAAwB,CAAC,MAAQ,8BAA8B,EAAE,0BAA4B,CAAC,MAAQ,0CAA0C,QAAU,CAAC,MAAQ,uBAAuB,MAAQ,8GAA8G,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,qGAAqG,EAAE,KAAO,CAAC,MAAQ,wBAAwB,MAAQ,oGAAoG,CAAC,EAAE,sBAAwB,CAAC,MAAQ,8BAA8B,UAAY,CAAC,MAAQ,WAAW,MAAQ,uEAAuE,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,sEAAsE,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,8EAA8E,EAAE,KAAO,CAAC,MAAQ,wBAAwB,MAAQ,qEAAqE,CAAC,EAAE,yBAA2B,CAAC,MAAQ,sCAAsC,UAAY,CAAC,MAAQ,WAAW,MAAQ,iFAAiF,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,8EAA8E,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,sFAAsF,EAAE,KAAO,CAAC,MAAQ,gCAAgC,MAAQ,6EAA6E,CAAC,EAAE,kBAAoB,CAAC,MAAQ,6BAA6B,SAAW,CAAC,MAAQ,WAAW,MAAQ,yCAAyC,EAAE,kBAAoB,CAAC,MAAQ,uBAAuB,MAAQ,uDAAuD,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,iEAAiE,EAAE,eAAiB,CAAC,MAAQ,aAAa,MAAQ,0DAA0D,EAAE,UAAY,CAAC,MAAQ,WAAW,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,iBAAiB,MAAQ,wDAAwD,CAAC,EAAE,mBAAqB,CAAC,MAAQ,0BAA0B,UAAY,CAAC,MAAQ,WAAW,MAAQ,0CAA0C,EAAE,aAAe,CAAC,MAAQ,oBAAoB,MAAQ,8BAA8B,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,wBAA0B,CAAC,MAAQ,8BAA8B,MAAQ,gDAAgD,EAAE,KAAO,CAAC,MAAQ,iBAAiB,MAAQ,qDAAqD,CAAC,EAAE,oBAAsB,CAAC,MAAQ,4BAA4B,gBAAkB,CAAC,MAAQ,cAAc,MAAQ,+BAA+B,EAAE,kBAAoB,CAAC,MAAQ,mBAAmB,MAAQ,iCAAiC,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,yBAAyB,CAAC,EAAE,qBAAuB,CAAC,MAAQ,uBAAuB,OAAS,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,iBAAmB,CAAC,MAAQ,cAAc,MAAQ,8CAA8C,EAAE,aAAe,CAAC,MAAQ,0BAA0B,MAAQ,mDAAmD,CAAC,EAAE,mBAAqB,CAAC,MAAQ,8BAA8B,gBAAkB,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,sCAAsC,EAAE,gBAAkB,CAAC,MAAQ,sBAAsB,MAAQ,sEAAsE,EAAE,qBAAuB,CAAC,MAAQ,wBAAwB,MAAQ,sDAAsD,EAAE,0BAA4B,CAAC,MAAQ,4BAA4B,MAAQ,uDAAuD,EAAE,uBAAyB,CAAC,MAAQ,yBAAyB,MAAQ,uEAAuE,EAAE,6BAA+B,CAAC,MAAQ,yBAAyB,MAAQ,+DAA+D,EAAE,KAAO,CAAC,MAAQ,wBAAwB,MAAQ,qDAAqD,CAAC,EAAE,gBAAkB,CAAC,MAAQ,qBAAqB,GAAK,CAAC,MAAQ,WAAW,MAAQ,iDAAiD,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,sDAAsD,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,+CAA+C,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,8CAA8C,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,4DAA4D,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,8CAA8C,CAAC,EAAE,2BAA6B,CAAC,MAAQ,8BAA8B,MAAQ,CAAC,MAAQ,UAAU,MAAQ,0CAA0C,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,6DAA6D,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,0CAA0C,CAAC,EAAE,eAAiB,CAAC,MAAQ,aAAa,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,oDAAoD,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,+CAA+C,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,6CAA6C,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,8CAA8C,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,wCAAwC,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,oDAAoD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,4CAA4C,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,8CAA8C,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,uCAAuC,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,4CAA4C,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,8CAA8C,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,sDAAsD,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,+CAA+C,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,yCAAyC,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,oDAAoD,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uDAAuD,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,2CAA2C,EAAE,cAAgB,CAAC,MAAQ,SAAS,MAAQ,iCAAiC,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,8BAA8B,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,6CAA6C,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,+CAA+C,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,2CAA2C,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,gCAAgC,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,4CAA4C,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,gDAAgD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,6CAA6C,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,0DAA0D,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,8CAA8C,CAAC,EAAE,WAAa,CAAC,MAAQ,YAAY,KAAO,CAAC,MAAQ,QAAQ,MAAQ,kCAAkC,CAAC,EAAE,aAAe,CAAC,MAAQ,eAAe,KAAO,CAAC,MAAQ,OAAO,MAAQ,qCAAqC,EAAE,KAAO,CAAC,MAAQ,QAAQ,MAAQ,sCAAsC,EAAE,SAAW,CAAC,MAAQ,eAAe,MAAQ,6CAA6C,EAAE,KAAO,CAAC,MAAQ,WAAW,MAAQ,8CAA8C,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,gDAAgD,EAAE,eAAiB,CAAC,MAAQ,oBAAoB,MAAQ,uDAAuD,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,cAAc,MAAQ,iDAAiD,EAAE,SAAW,CAAC,MAAQ,SAAS,MAAQ,6CAA6C,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,gDAAgD,EAAE,UAAY,CAAC,MAAQ,cAAc,MAAQ,iDAAiD,EAAE,KAAO,CAAC,MAAQ,UAAU,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,oDAAoD,EAAE,UAAY,CAAC,MAAQ,YAAY,MAAQ,+CAA+C,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,gDAAgD,EAAE,aAAe,CAAC,MAAQ,kBAAkB,MAAQ,8CAA8C,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,sDAAsD,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,2DAA2D,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,+CAA+C,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,mDAAmD,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,iEAAiE,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,8CAA8C,CAAC,EAAE,qBAAuB,CAAC,MAAQ,6BAA6B,KAAO,CAAC,MAAQ,WAAW,MAAQ,qDAAqD,EAAE,UAAY,CAAC,MAAQ,YAAY,MAAQ,gDAAgD,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,iDAAiD,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,gDAAgD,EAAE,eAAiB,CAAC,MAAQ,oBAAoB,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,gDAAgD,EAAE,SAAW,CAAC,MAAQ,SAAS,MAAQ,gDAAgD,EAAE,UAAY,CAAC,MAAQ,cAAc,MAAQ,2DAA2D,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,2DAA2D,CAAC,EAAE,wBAA0B,CAAC,MAAQ,yBAAyB,WAAa,CAAC,MAAQ,cAAc,MAAQ,kDAAkD,CAAC,EAAE,uBAAyB,CAAC,MAAQ,2BAA2B,gBAAkB,CAAC,MAAQ,4BAA4B,MAAQ,sDAAsD,EAAE,sBAAwB,CAAC,MAAQ,gCAAgC,MAAQ,wDAAwD,EAAE,QAAU,CAAC,MAAQ,mBAAmB,MAAQ,4DAA4D,CAAC,EAAE,2BAA6B,CAAC,MAAQ,kCAAkC,WAAa,CAAC,MAAQ,kCAAkC,MAAQ,gEAAgE,CAAC,EAAE,oBAAsB,CAAC,MAAQ,sBAAsB,mBAAqB,CAAC,MAAQ,uBAAuB,MAAQ,wDAAwD,EAAE,uBAAyB,CAAC,MAAQ,uBAAuB,MAAQ,yDAAyD,CAAC,EAAE,oBAAsB,CAAC,MAAQ,4BAA4B,aAAe,CAAC,MAAQ,mBAAmB,MAAQ,oEAAoE,EAAE,SAAW,CAAC,MAAQ,gBAAgB,MAAQ,kEAAkE,CAAC,EAAE,qBAAuB,CAAC,MAAQ,uBAAuB,eAAiB,CAAC,MAAQ,oBAAoB,MAAQ,0FAA0F,EAAE,SAAW,CAAC,MAAQ,eAAe,MAAQ,uEAAuE,CAAC,EAAE,qBAAuB,CAAC,MAAQ,yBAAyB,KAAO,CAAC,MAAQ,OAAO,MAAQ,2DAA2D,EAAE,KAAO,CAAC,MAAQ,UAAU,MAAQ,sEAAsE,CAAC,EAAE,sBAAwB,CAAC,MAAQ,4BAA4B,iBAAmB,CAAC,MAAQ,0BAA0B,MAAQ,gFAAgF,EAAE,wBAA0B,CAAC,MAAQ,2BAA2B,MAAQ,wFAAwF,EAAE,KAAO,CAAC,MAAQ,eAAe,MAAQ,2DAA2D,CAAC,EAAE,iBAAmB,CAAC,MAAQ,wBAAwB,OAAS,CAAC,MAAQ,wBAAwB,MAAQ,qEAAqE,EAAE,UAAY,CAAC,MAAQ,wBAAwB,MAAQ,+DAA+D,EAAE,WAAa,CAAC,MAAQ,yBAAyB,MAAQ,sDAAsD,EAAE,MAAQ,CAAC,MAAQ,UAAU,MAAQ,0DAA0D,CAAC,EAAE,oBAAsB,CAAC,MAAQ,gCAAgC,SAAW,CAAC,MAAQ,kBAAkB,MAAQ,wGAAwG,CAAC,EAAE,sBAAwB,CAAC,MAAQ,0BAA0B,gBAAkB,CAAC,MAAQ,kBAAkB,MAAQ,6DAA6D,EAAE,0BAA4B,CAAC,MAAQ,gCAAgC,MAAQ,iEAAiE,EAAE,gCAAkC,CAAC,MAAQ,gCAAgC,MAAQ,6DAA6D,CAAC,EAAE,kBAAoB,CAAC,MAAQ,yBAAyB,EAAE,WAAa,CAAC,MAAQ,cAAc,iBAAmB,CAAC,MAAQ,+BAA+B,MAAQ,oGAAoG,EAAE,eAAiB,CAAC,MAAQ,iBAAiB,MAAQ,+FAA+F,CAAC,EAAE,yBAA2B,CAAC,MAAQ,6BAA6B,GAAK,CAAC,MAAQ,SAAS,MAAQ,mFAAmF,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,wEAAwE,EAAE,OAAS,CAAC,MAAQ,YAAY,MAAQ,wFAAwF,EAAE,iBAAmB,CAAC,MAAQ,+BAA+B,MAAQ,+DAA+D,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,6FAA6F,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,+FAA+F,EAAE,OAAS,CAAC,MAAQ,SAAS,MAAQ,kFAAkF,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,+EAA+E,CAAC,EAAE,uBAAyB,CAAC,MAAQ,yBAAyB,QAAU,CAAC,MAAQ,cAAc,MAAQ,wDAAwD,EAAE,UAAY,CAAC,MAAQ,WAAW,MAAQ,qDAAqD,EAAE,YAAc,CAAC,MAAQ,aAAa,MAAQ,sDAAsD,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,kDAAkD,CAAC,EAAE,kBAAoB,CAAC,MAAQ,wBAAwB,IAAM,CAAC,MAAQ,MAAM,MAAQ,gDAAgD,EAAE,SAAW,CAAC,MAAQ,cAAc,MAAQ,sCAAsC,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,6CAA6C,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,0CAA0C,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,mDAAmD,CAAC,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,KAAO,CAAC,MAAQ,OAAO,MAAQ,2BAA2B,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,+BAA+B,EAAE,MAAQ,CAAC,MAAQ,aAAa,MAAQ,kCAAkC,EAAE,mBAAqB,CAAC,MAAQ,cAAc,MAAQ,iDAAiD,CAAC,EAAE,iCAAmC,CAAC,MAAQ,6BAA6B,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,2DAA2D,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,iEAAiE,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,mDAAmD,CAAC,EAAE,qBAAuB,CAAC,MAAQ,sBAAsB,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,2CAA2C,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,2DAA2D,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,6CAA6C,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,oCAAoC,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,8BAA8B,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,kDAAkD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,yCAAyC,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,2CAA2C,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,uCAAuC,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,gCAAgC,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,4CAA4C,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,uCAAuC,EAAE,eAAiB,CAAC,MAAQ,wBAAwB,MAAQ,wDAAwD,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,+BAA+B,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,iDAAiD,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,sCAAsC,EAAE,cAAgB,CAAC,MAAQ,SAAS,MAAQ,uBAAuB,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,8CAA8C,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,+CAA+C,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,mDAAmD,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,8CAA8C,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,6CAA6C,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,4CAA4C,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,yBAAyB,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,iDAAiD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,4CAA4C,CAAC,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,yBAA2B,CAAC,MAAQ,wBAAwB,MAAQ,8CAA8C,EAAE,KAAO,CAAC,MAAQ,iBAAiB,MAAQ,qCAAqC,EAAE,KAAO,CAAC,MAAQ,UAAU,MAAQ,yCAAyC,EAAE,WAAa,CAAC,MAAQ,yBAAyB,MAAQ,kCAAkC,EAAE,KAAO,CAAC,MAAQ,iBAAiB,MAAQ,0BAA0B,CAAC,EAAE,YAAc,CAAC,MAAQ,kBAAkB,aAAe,CAAC,MAAQ,cAAc,MAAQ,wDAAwD,EAAE,cAAgB,CAAC,MAAQ,iBAAiB,MAAQ,wDAAwD,EAAE,kBAAoB,CAAC,MAAQ,gBAAgB,MAAQ,2CAA2C,EAAE,OAAS,CAAC,MAAQ,oBAAoB,MAAQ,uCAAuC,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,yBAAyB,EAAE,kBAAoB,CAAC,MAAQ,0BAA0B,MAAQ,uCAAuC,EAAE,eAAiB,CAAC,MAAQ,4BAA4B,MAAQ,sCAAsC,EAAE,gBAAkB,CAAC,MAAQ,sBAAsB,MAAQ,iDAAiD,EAAE,SAAW,CAAC,MAAQ,qBAAqB,MAAQ,oDAAoD,CAAC,EAAE,iBAAmB,CAAC,MAAQ,mBAAmB,SAAW,CAAC,MAAQ,iBAAiB,MAAQ,iCAAiC,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,gCAAgC,EAAE,OAAS,CAAC,MAAQ,eAAe,MAAQ,yBAAyB,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,yBAAyB,EAAE,SAAW,CAAC,MAAQ,QAAQ,MAAQ,4BAA4B,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,yBAAyB,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,qCAAqC,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,8BAA8B,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,iBAAiB,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,2CAA2C,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,0BAA0B,CAAC,EAAE,yBAA2B,CAAC,MAAQ,yBAAyB,iBAAmB,CAAC,MAAQ,kBAAkB,MAAQ,4BAA4B,EAAE,mBAAqB,CAAC,MAAQ,qBAAqB,MAAQ,+BAA+B,EAAE,gBAAkB,CAAC,MAAQ,sBAAsB,MAAQ,iDAAiD,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,6BAA6B,EAAE,QAAU,CAAC,MAAQ,wBAAwB,MAAQ,2CAA2C,EAAE,gBAAkB,CAAC,MAAQ,eAAe,MAAQ,oCAAoC,EAAE,sBAAwB,CAAC,MAAQ,oBAAoB,MAAQ,8BAA8B,EAAE,SAAW,CAAC,MAAQ,kBAAkB,MAAQ,8CAA8C,EAAE,YAAc,CAAC,MAAQ,cAAc,MAAQ,gCAAgC,EAAE,gBAAkB,CAAC,MAAQ,kBAAkB,MAAQ,0CAA0C,EAAE,eAAiB,CAAC,MAAQ,oBAAoB,MAAQ,uCAAuC,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,wCAAwC,CAAC,EAAE,gBAAkB,CAAC,MAAQ,eAAe,QAAU,CAAC,MAAQ,aAAa,MAAQ,iCAAiC,EAAE,eAAiB,CAAC,MAAQ,gBAAgB,MAAQ,yBAAyB,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,2BAA2B,EAAE,uBAAyB,CAAC,MAAQ,wBAAwB,MAAQ,mCAAmC,EAAE,eAAiB,CAAC,MAAQ,iBAAiB,MAAQ,iCAAiC,EAAE,sBAAwB,CAAC,MAAQ,uBAAuB,MAAQ,uCAAuC,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,wCAAwC,EAAE,OAAS,CAAC,MAAQ,kBAAkB,MAAQ,gCAAgC,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,sBAAsB,MAAQ,sCAAsC,CAAC,EAAE,kBAAoB,CAAC,MAAQ,kBAAkB,mBAAqB,CAAC,MAAQ,mBAAmB,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,6BAA6B,EAAE,eAAiB,CAAC,MAAQ,gBAAgB,MAAQ,2CAA2C,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,iCAAiC,EAAE,0BAA4B,CAAC,MAAQ,8BAA8B,MAAQ,2CAA2C,EAAE,KAAO,CAAC,MAAQ,mBAAmB,MAAQ,2DAA2D,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,2CAA2C,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,mCAAmC,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,4CAA4C,EAAE,KAAO,CAAC,MAAQ,QAAQ,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,sBAAsB,MAAQ,8CAA8C,CAAC,EAAE,uBAAyB,CAAC,MAAQ,mCAAmC,UAAY,CAAC,MAAQ,iBAAiB,MAAQ,wCAAwC,EAAE,KAAO,CAAC,MAAQ,uBAAuB,MAAQ,iCAAiC,EAAE,KAAO,CAAC,MAAQ,uBAAuB,MAAQ,iCAAiC,EAAE,eAAiB,CAAC,MAAQ,yBAAyB,MAAQ,gDAAgD,EAAE,aAAe,CAAC,MAAQ,eAAe,MAAQ,kCAAkC,CAAC,EAAE,qBAAuB,CAAC,MAAQ,yBAAyB,UAAY,CAAC,MAAQ,iBAAiB,MAAQ,iCAAiC,CAAC,EAAE,wBAA0B,CAAC,MAAQ,+BAA+B,WAAa,CAAC,MAAQ,kCAAkC,MAAQ,iDAAiD,CAAC,EAAE,eAAiB,CAAC,MAAQ,sBAAsB,EAAE,eAAiB,CAAC,MAAQ,uBAAuB,OAAS,CAAC,MAAQ,eAAe,MAAQ,yEAAyE,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,wEAAwE,EAAE,MAAQ,CAAC,MAAQ,aAAa,MAAQ,sDAAsD,EAAE,UAAY,CAAC,MAAQ,gBAAgB,MAAQ,mDAAmD,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,+DAA+D,CAAC,EAAE,oBAAsB,CAAC,MAAQ,yBAAyB,SAAW,CAAC,MAAQ,eAAe,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,cAAc,MAAQ,yCAAyC,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,sDAAsD,EAAE,KAAO,CAAC,MAAQ,UAAU,MAAQ,yDAAyD,CAAC,EAAE,uBAAyB,CAAC,MAAQ,0BAA0B,KAAO,CAAC,MAAQ,qBAAqB,MAAQ,0DAA0D,EAAE,UAAY,CAAC,MAAQ,uBAAuB,MAAQ,6DAA6D,EAAE,QAAU,CAAC,MAAQ,mCAAmC,MAAQ,uDAAuD,EAAE,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,0DAA0D,EAAE,eAAiB,CAAC,MAAQ,8BAA8B,MAAQ,oDAAoD,EAAE,QAAU,CAAC,MAAQ,iBAAiB,MAAQ,oDAAoD,EAAE,SAAW,CAAC,MAAQ,iBAAiB,MAAQ,mDAAmD,EAAE,QAAU,CAAC,MAAQ,wBAAwB,MAAQ,4DAA4D,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,mEAAmE,EAAE,MAAQ,CAAC,MAAQ,kBAAkB,MAAQ,6CAA6C,EAAE,GAAK,CAAC,MAAQ,SAAS,MAAQ,gDAAgD,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,4CAA4C,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,2DAA2D,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,+CAA+C,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,4DAA4D,CAAC,EAAE,oBAAsB,CAAC,MAAQ,qBAAqB,iBAAmB,CAAC,MAAQ,0BAA0B,MAAQ,iEAAiE,EAAE,iBAAmB,CAAC,MAAQ,kBAAkB,MAAQ,kDAAkD,EAAE,mBAAqB,CAAC,MAAQ,qBAAqB,MAAQ,wDAAwD,EAAE,sBAAwB,CAAC,MAAQ,8BAA8B,MAAQ,uDAAuD,EAAE,gBAAkB,CAAC,MAAQ,yBAAyB,MAAQ,+DAA+D,EAAE,eAAiB,CAAC,MAAQ,kBAAkB,MAAQ,6CAA6C,CAAC,EAAE,kBAAoB,CAAC,MAAQ,uBAAuB,iBAAmB,CAAC,MAAQ,0BAA0B,MAAQ,oEAAoE,EAAE,iBAAmB,CAAC,MAAQ,8BAA8B,MAAQ,oEAAoE,EAAE,wBAA0B,CAAC,MAAQ,iCAAiC,MAAQ,4DAA4D,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,kDAAkD,CAAC,EAAE,mBAAqB,CAAC,MAAQ,wBAAwB,iBAAmB,CAAC,MAAQ,0BAA0B,MAAQ,6DAA6D,EAAE,gBAAkB,CAAC,MAAQ,yBAAyB,MAAQ,0DAA0D,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,qDAAqD,EAAE,sBAAwB,CAAC,MAAQ,gCAAgC,MAAQ,8DAA8D,EAAE,eAAiB,CAAC,MAAQ,sBAAsB,MAAQ,kDAAkD,EAAE,yBAA2B,CAAC,MAAQ,oCAAoC,MAAQ,wDAAwD,CAAC,EAAE,uBAAyB,CAAC,MAAQ,+BAA+B,iBAAmB,CAAC,MAAQ,0BAA0B,MAAQ,oEAAoE,EAAE,WAAa,CAAC,MAAQ,6CAA6C,MAAQ,wEAAwE,CAAC,EAAE,gBAAkB,CAAC,MAAQ,iBAAiB,iBAAmB,CAAC,MAAQ,0BAA0B,MAAQ,gEAAgE,EAAE,mBAAqB,CAAC,MAAQ,uBAAuB,MAAQ,wDAAwD,EAAE,uBAAyB,CAAC,MAAQ,uBAAuB,MAAQ,0DAA0D,CAAC,EAAE,gBAAkB,CAAC,MAAQ,iBAAiB,iBAAmB,CAAC,MAAQ,0BAA0B,MAAQ,gEAAgE,EAAE,cAAgB,CAAC,MAAQ,eAAe,MAAQ,4DAA4D,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,+CAA+C,EAAE,eAAiB,CAAC,MAAQ,oBAAoB,MAAQ,+CAA+C,EAAE,SAAW,CAAC,MAAQ,eAAe,MAAQ,gDAAgD,CAAC,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,iBAAmB,CAAC,MAAQ,0BAA0B,MAAQ,uEAAuE,EAAE,SAAW,CAAC,MAAQ,kBAAkB,MAAQ,mDAAmD,EAAE,UAAY,CAAC,MAAQ,wBAAwB,MAAQ,qDAAqD,CAAC,EAAE,kBAAoB,CAAC,MAAQ,qBAAqB,iBAAmB,CAAC,MAAQ,0BAA0B,MAAQ,4DAA4D,EAAE,gBAAkB,CAAC,MAAQ,kBAAkB,MAAQ,iEAAiE,EAAE,0BAA4B,CAAC,MAAQ,gCAAgC,MAAQ,uEAAuE,EAAE,gCAAkC,CAAC,MAAQ,gCAAgC,MAAQ,8DAA8D,CAAC,EAAE,cAAgB,CAAC,MAAQ,kBAAkB,iBAAmB,CAAC,MAAQ,0BAA0B,MAAQ,2DAA2D,CAAC,EAAE,8BAAgC,CAAC,MAAQ,8BAA8B,mBAAqB,CAAC,MAAQ,mBAAmB,MAAQ,6DAA6D,CAAC,EAAE,wBAA0B,CAAC,MAAQ,yBAAyB,mBAAqB,CAAC,MAAQ,kBAAkB,MAAQ,6CAA6C,EAAE,YAAc,CAAC,MAAQ,2BAA2B,MAAQ,wDAAwD,EAAE,WAAa,CAAC,MAAQ,0BAA0B,MAAQ,kEAAkE,CAAC,EAAE,kBAAoB,CAAC,MAAQ,wBAAwB,OAAS,CAAC,MAAQ,gBAAgB,MAAQ,8CAA8C,CAAC,EAAE,yBAA2B,CAAC,MAAQ,8BAA8B,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,0DAA0D,EAAE,QAAU,CAAC,MAAQ,iBAAiB,MAAQ,+CAA+C,CAAC,EAAE,sBAAwB,CAAC,MAAQ,2BAA2B,qBAAuB,CAAC,MAAQ,4BAA4B,MAAQ,uDAAuD,EAAE,sBAAwB,CAAC,MAAQ,yBAAyB,MAAQ,uDAAuD,EAAE,mCAAqC,CAAC,MAAQ,wCAAwC,MAAQ,uEAAuE,CAAC,EAAE,wBAA0B,CAAC,MAAQ,4BAA4B,EAAE,cAAgB,CAAC,MAAQ,kBAAkB,IAAM,CAAC,MAAQ,WAAW,MAAQ,uCAAuC,EAAE,MAAQ,CAAC,MAAQ,cAAc,MAAQ,2CAA2C,EAAE,OAAS,CAAC,MAAQ,WAAW,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,cAAc,MAAQ,6CAA6C,CAAC,EAAE,0BAA4B,CAAC,MAAQ,kCAAkC,MAAQ,CAAC,MAAQ,qBAAqB,MAAQ,mDAAmD,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,0DAA0D,EAAE,MAAQ,CAAC,MAAQ,kBAAkB,MAAQ,gEAAgE,CAAC,EAAE,cAAgB,CAAC,MAAQ,uBAAuB,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,0CAA0C,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,2DAA2D,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,6CAA6C,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,mCAAmC,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,8BAA8B,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,kDAAkD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,wCAAwC,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,0CAA0C,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,yCAAyC,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,kCAAkC,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,4BAA4B,MAAQ,sDAAsD,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,+BAA+B,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,0DAA0D,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,uDAAuD,EAAE,KAAO,CAAC,MAAQ,iBAAiB,MAAQ,sDAAsD,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,6BAA6B,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,8BAA8B,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,6CAA6C,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,qCAAqC,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,kCAAkC,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,sCAAsC,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,2CAA2C,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,mDAAmD,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,yBAAyB,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,iDAAiD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,8CAA8C,CAAC,EAAE,UAAY,CAAC,MAAQ,iBAAiB,KAAO,CAAC,MAAQ,OAAO,MAAQ,6BAA6B,EAAE,KAAO,CAAC,MAAQ,UAAU,MAAQ,4BAA4B,CAAC,EAAE,mCAAqC,CAAC,MAAQ,0CAA0C,MAAQ,CAAC,MAAQ,UAAU,MAAQ,yCAAyC,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,8CAA8C,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,mDAAmD,CAAC,EAAE,uBAAyB,CAAC,MAAQ,sCAAsC,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,4CAA4C,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,6DAA6D,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,+CAA+C,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,qCAAqC,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,gCAAgC,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,oDAAoD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,0CAA0C,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,4CAA4C,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,2CAA2C,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,oCAAoC,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,sCAAsC,EAAE,QAAU,CAAC,MAAQ,4BAA4B,MAAQ,wDAAwD,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,gDAAgD,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,iCAAiC,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,4DAA4D,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,yDAAyD,EAAE,KAAO,CAAC,MAAQ,mBAAmB,MAAQ,wDAAwD,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,+BAA+B,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,gCAAgC,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,+CAA+C,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,uCAAuC,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,wCAAwC,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,6CAA6C,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,qDAAqD,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,qCAAqC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,2BAA2B,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,mDAAmD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,gDAAgD,CAAC,EAAE,mBAAqB,CAAC,MAAQ,gCAAgC,IAAM,CAAC,MAAQ,QAAQ,MAAQ,4BAA4B,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,iBAAiB,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,kCAAkC,CAAC,EAAE,cAAgB,CAAC,MAAQ,mBAAmB,qBAAuB,CAAC,MAAQ,yBAAyB,MAAQ,wFAAwF,EAAE,IAAM,CAAC,MAAQ,OAAO,MAAQ,wDAAwD,CAAC,EAAE,4BAA8B,CAAC,MAAQ,+BAA+B,MAAQ,CAAC,MAAQ,kBAAkB,MAAQ,0DAA0D,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,sDAAsD,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,gDAAgD,CAAC,EAAE,gBAAkB,CAAC,MAAQ,yBAAyB,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,yCAAyC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,yDAAyD,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,6CAA6C,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,iCAAiC,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,2BAA2B,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,+CAA+C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,+CAA+C,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,0DAA0D,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,qCAAqC,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,8BAA8B,EAAE,IAAM,CAAC,MAAQ,QAAQ,MAAQ,4CAA4C,EAAE,QAAU,CAAC,MAAQ,4BAA4B,MAAQ,sDAAsD,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,4CAA4C,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,0CAA0C,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,sDAAsD,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,yDAAyD,EAAE,KAAO,CAAC,MAAQ,mBAAmB,MAAQ,wCAAwC,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,0BAA0B,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,2CAA2C,EAAE,MAAQ,CAAC,MAAQ,QAAQ,MAAQ,kDAAkD,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,iDAAiD,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,yCAAyC,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,iFAAiF,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,wCAAwC,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,sEAAsE,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,sBAAsB,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,0DAA0D,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,sCAAsC,CAAC,EAAE,YAAc,CAAC,MAAQ,mBAAmB,QAAU,CAAC,MAAQ,WAAW,MAAQ,yCAAyC,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,oCAAoC,EAAE,YAAc,CAAC,MAAQ,WAAW,MAAQ,mDAAmD,EAAE,YAAc,CAAC,MAAQ,gBAAgB,MAAQ,oCAAoC,EAAE,YAAc,CAAC,MAAQ,6BAA6B,MAAQ,4EAA4E,EAAE,cAAgB,CAAC,MAAQ,sBAAsB,MAAQ,0CAA0C,EAAE,WAAa,CAAC,MAAQ,eAAe,MAAQ,8CAA8C,EAAE,KAAO,CAAC,MAAQ,kBAAkB,MAAQ,6BAA6B,EAAE,aAAe,CAAC,MAAQ,sBAAsB,MAAQ,+CAA+C,EAAE,yBAA2B,CAAC,MAAQ,mBAAmB,MAAQ,mDAAmD,EAAE,MAAQ,CAAC,MAAQ,UAAU,MAAQ,qDAAqD,EAAE,IAAM,CAAC,MAAQ,QAAQ,MAAQ,0DAA0D,EAAE,UAAY,CAAC,MAAQ,YAAY,MAAQ,uBAAuB,EAAE,SAAW,CAAC,MAAQ,cAAc,MAAQ,6BAA6B,EAAE,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,uCAAuC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,6BAA6B,CAAC,EAAE,0BAA4B,CAAC,MAAQ,uCAAuC,aAAe,CAAC,MAAQ,kBAAkB,MAAQ,sDAAsD,EAAE,YAAc,CAAC,MAAQ,qBAAqB,MAAQ,yDAAyD,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,kDAAkD,EAAE,aAAe,CAAC,MAAQ,uBAAuB,MAAQ,2CAA2C,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,4CAA4C,EAAE,KAAO,CAAC,MAAQ,kBAAkB,MAAQ,oCAAoC,EAAE,SAAW,CAAC,MAAQ,cAAc,MAAQ,oCAAoC,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,sCAAsC,CAAC,EAAE,sBAAwB,CAAC,MAAQ,kCAAkC,OAAS,CAAC,MAAQ,wBAAwB,MAAQ,6EAA6E,EAAE,KAAO,CAAC,MAAQ,kBAAkB,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,0BAA0B,MAAQ,2DAA2D,EAAE,WAAa,CAAC,MAAQ,gBAAgB,MAAQ,uCAAuC,EAAE,WAAa,CAAC,MAAQ,iBAAiB,MAAQ,8CAA8C,EAAE,gBAAkB,CAAC,MAAQ,sBAAsB,MAAQ,2DAA2D,EAAE,kBAAoB,CAAC,MAAQ,wBAAwB,MAAQ,sDAAsD,CAAC,EAAE,uBAAyB,CAAC,MAAQ,kCAAkC,IAAM,CAAC,MAAQ,iBAAiB,MAAQ,8CAA8C,EAAE,KAAO,CAAC,MAAQ,oBAAoB,MAAQ,2DAA2D,EAAE,MAAQ,CAAC,MAAQ,kBAAkB,MAAQ,2DAA2D,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,yCAAyC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,4CAA4C,EAAE,sBAAwB,CAAC,MAAQ,sBAAsB,MAAQ,oEAAoE,EAAE,SAAW,CAAC,MAAQ,mBAAmB,MAAQ,gEAAgE,CAAC,EAAE,WAAa,CAAC,MAAQ,aAAa,SAAW,CAAC,MAAQ,eAAe,MAAQ,wCAAwC,EAAE,YAAc,CAAC,MAAQ,YAAY,MAAQ,qCAAqC,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,yCAAyC,EAAE,YAAc,CAAC,MAAQ,aAAa,MAAQ,sCAAsC,EAAE,cAAgB,CAAC,MAAQ,qBAAqB,MAAQ,+CAA+C,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,sCAAsC,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,qDAAqD,EAAE,YAAc,CAAC,MAAQ,UAAU,MAAQ,gDAAgD,EAAE,WAAa,CAAC,MAAQ,WAAW,MAAQ,oCAAoC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,4DAA4D,EAAE,UAAY,CAAC,MAAQ,YAAY,MAAQ,iEAAiE,CAAC,EAAE,gBAAkB,CAAC,MAAQ,oBAAoB,MAAQ,CAAC,MAAQ,WAAW,MAAQ,wCAAwC,EAAE,eAAiB,CAAC,MAAQ,iBAAiB,MAAQ,gDAAgD,CAAC,EAAE,0BAA4B,CAAC,MAAQ,wBAAwB,eAAiB,CAAC,MAAQ,oBAAoB,MAAQ,wDAAwD,EAAE,mBAAqB,CAAC,MAAQ,yBAAyB,MAAQ,0CAA0C,EAAE,yBAA2B,CAAC,MAAQ,oCAAoC,MAAQ,6CAA6C,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,wCAAwC,EAAE,eAAiB,CAAC,MAAQ,yBAAyB,MAAQ,kDAAkD,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,mDAAmD,EAAE,iBAAmB,CAAC,MAAQ,sBAAsB,MAAQ,wCAAwC,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,sDAAsD,CAAC,EAAE,8BAAgC,CAAC,MAAQ,0CAA0C,IAAM,CAAC,MAAQ,aAAa,MAAQ,kDAAkD,EAAE,IAAM,CAAC,MAAQ,cAAc,MAAQ,8CAA8C,EAAE,IAAM,CAAC,MAAQ,kBAAkB,MAAQ,iDAAiD,EAAE,IAAM,CAAC,MAAQ,QAAQ,MAAQ,qCAAqC,EAAE,KAAO,CAAC,MAAQ,OAAO,MAAQ,sBAAsB,EAAE,WAAa,CAAC,MAAQ,UAAU,MAAQ,oBAAoB,EAAE,YAAc,CAAC,MAAQ,WAAW,MAAQ,qBAAqB,EAAE,QAAU,CAAC,MAAQ,OAAO,MAAQ,uCAAuC,EAAE,MAAQ,CAAC,MAAQ,mBAAmB,MAAQ,6BAA6B,EAAE,eAAiB,CAAC,MAAQ,wBAAwB,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,cAAc,MAAQ,yBAAyB,EAAE,OAAS,CAAC,MAAQ,cAAc,MAAQ,oCAAoC,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,0BAA0B,EAAE,sBAAwB,CAAC,MAAQ,2BAA2B,MAAQ,2CAA2C,EAAE,QAAU,CAAC,MAAQ,SAAS,MAAQ,yBAAyB,EAAE,WAAa,CAAC,MAAQ,aAAa,MAAQ,sDAAsD,EAAE,wCAAwC,CAAC,MAAQ,aAAa,MAAQ,+BAA+B,EAAE,uCAAuC,CAAC,MAAQ,cAAc,MAAQ,0CAA0C,EAAE,oCAAoC,CAAC,MAAQ,eAAe,MAAQ,iCAAiC,CAAC,EAAE,mBAAqB,CAAC,MAAQ,0BAA0B,cAAgB,CAAC,MAAQ,kBAAkB,MAAQ,yBAAyB,EAAE,YAAc,CAAC,MAAQ,kBAAkB,MAAQ,wBAAwB,EAAE,SAAW,CAAC,MAAQ,iBAAiB,MAAQ,2BAA2B,EAAE,YAAc,CAAC,MAAQ,aAAa,MAAQ,+CAA+C,CAAC,EAAE,sBAAwB,CAAC,MAAQ,0BAA0B,eAAiB,CAAC,MAAQ,aAAa,MAAQ,uBAAuB,EAAE,SAAW,CAAC,MAAQ,cAAc,MAAQ,wBAAwB,EAAE,YAAc,CAAC,MAAQ,cAAc,MAAQ,wBAAwB,CAAC,EAAE,uBAAyB,CAAC,MAAQ,qBAAqB,WAAa,CAAC,MAAQ,aAAa,MAAQ,yCAAyC,EAAE,YAAc,CAAC,MAAQ,WAAW,MAAQ,gCAAgC,EAAE,KAAO,CAAC,MAAQ,eAAe,MAAQ,gCAAgC,EAAE,KAAO,CAAC,MAAQ,iBAAiB,MAAQ,iBAAiB,EAAE,QAAU,CAAC,MAAQ,iBAAiB,MAAQ,2CAA2C,EAAE,MAAQ,CAAC,MAAQ,uBAAuB,MAAQ,6BAA6B,EAAE,eAAiB,CAAC,MAAQ,wBAAwB,MAAQ,wDAAwD,EAAE,aAAe,CAAC,MAAQ,0BAA0B,MAAQ,0BAA0B,EAAE,sBAAwB,CAAC,MAAQ,2BAA2B,MAAQ,qDAAqD,EAAE,QAAU,CAAC,MAAQ,mBAAmB,MAAQ,yBAAyB,EAAE,cAAgB,CAAC,MAAQ,kBAAkB,MAAQ,oCAAoC,EAAE,mBAAqB,CAAC,MAAQ,uBAAuB,MAAQ,8CAA8C,CAAC,EAAE,sBAAwB,CAAC,MAAQ,sBAAsB,iBAAmB,CAAC,MAAQ,gCAAgC,MAAQ,wEAAwE,EAAE,YAAc,CAAC,MAAQ,gBAAgB,MAAQ,+BAA+B,CAAC,EAAE,oBAAsB,CAAC,MAAQ,0BAA0B,YAAc,CAAC,MAAQ,iBAAiB,MAAQ,wDAAwD,EAAE,YAAc,CAAC,MAAQ,iBAAiB,MAAQ,iEAAiE,EAAE,IAAM,CAAC,MAAQ,eAAe,MAAQ,+DAA+D,EAAE,KAAO,CAAC,MAAQ,QAAQ,MAAQ,gDAAgD,EAAE,MAAQ,CAAC,MAAQ,OAAO,MAAQ,8CAA8C,CAAC,EAAE,OAAS,CAAC,MAAQ,aAAa,QAAU,CAAC,MAAQ,aAAa,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,gBAAgB,MAAQ,6CAA6C,EAAE,WAAa,CAAC,MAAQ,qBAAqB,MAAQ,2CAA2C,EAAE,SAAW,CAAC,MAAQ,kBAAkB,MAAQ,0CAA0C,EAAE,OAAS,CAAC,MAAQ,SAAS,MAAQ,2CAA2C,EAAE,SAAW,CAAC,MAAQ,WAAW,MAAQ,gDAAgD,EAAE,YAAc,CAAC,MAAQ,mBAAmB,MAAQ,mEAAmE,EAAE,aAAe,CAAC,MAAQ,wBAAwB,MAAQ,wEAAwE,CAAC,EAAE,QAAU,CAAC,MAAQ,eAAe,IAAM,CAAC,MAAQ,MAAM,MAAQ,wDAAwD,EAAE,MAAQ,CAAC,MAAQ,OAAO,MAAQ,+CAA+C,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,6DAA6D,EAAE,KAAO,CAAC,MAAQ,QAAQ,MAAQ,uDAAuD,EAAE,SAAW,CAAC,MAAQ,cAAc,MAAQ,yCAAyC,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,gDAAgD,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,kDAAkD,EAAE,OAAS,CAAC,MAAQ,SAAS,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,YAAY,MAAQ,uDAAuD,EAAE,MAAQ,CAAC,MAAQ,UAAU,MAAQ,qDAAqD,EAAE,aAAe,CAAC,MAAQ,mBAAmB,MAAQ,8DAA8D,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,wDAAwD,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,0DAA0D,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,wEAAwE,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,2CAA2C,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,kDAAkD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,8DAA8D,CAAC,EAAE,cAAgB,CAAC,MAAQ,2BAA2B,WAAa,CAAC,MAAQ,iBAAiB,MAAQ,mCAAmC,EAAE,MAAQ,CAAC,MAAQ,OAAO,MAAQ,yCAAyC,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,8DAA8D,EAAE,OAAS,CAAC,MAAQ,uBAAuB,MAAQ,+DAA+D,EAAE,QAAU,CAAC,MAAQ,uBAAuB,MAAQ,6DAA6D,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,uDAAuD,EAAE,QAAU,CAAC,MAAQ,UAAU,MAAQ,8CAA8C,CAAC,EAAE,YAAc,CAAC,MAAQ,yBAAyB,MAAQ,CAAC,MAAQ,OAAO,MAAQ,uCAAuC,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,qDAAqD,EAAE,QAAU,CAAC,MAAQ,UAAU,MAAQ,4CAA4C,CAAC,EAAE,4BAA8B,CAAC,MAAQ,qCAAqC,MAAQ,CAAC,MAAQ,gCAAgC,MAAQ,sEAAsE,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,gEAAgE,EAAE,MAAQ,CAAC,MAAQ,kBAAkB,MAAQ,kDAAkD,CAAC,EAAE,gBAAkB,CAAC,MAAQ,8BAA8B,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,2CAA2C,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,4DAA4D,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,kDAAkD,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,sCAAsC,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,gCAAgC,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,MAAQ,oDAAoD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,yCAAyC,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,2CAA2C,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,yCAAyC,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,kCAAkC,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,4BAA4B,MAAQ,2DAA2D,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,iDAAiD,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,iCAAiC,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,sEAAsE,EAAE,WAAa,CAAC,MAAQ,mBAAmB,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,qBAAqB,MAAQ,gCAAgC,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,+BAA+B,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,gDAAgD,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,uDAAuD,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,wDAAwD,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,gDAAgD,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,yBAAyB,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,oCAAoC,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,wCAAwC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,2BAA2B,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,iDAAiD,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,8CAA8C,CAAC,EAAE,oBAAsB,CAAC,MAAQ,uCAAuC,yBAA2B,CAAC,MAAQ,2CAA2C,MAAQ,wDAAwD,EAAE,YAAc,CAAC,MAAQ,SAAS,MAAQ,6CAA6C,EAAE,KAAO,CAAC,MAAQ,QAAQ,MAAQ,8CAA8C,EAAE,MAAQ,CAAC,MAAQ,YAAY,MAAQ,8CAA8C,CAAC,EAAE,YAAc,CAAC,MAAQ,eAAe,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,kCAAkC,EAAE,UAAY,CAAC,MAAQ,aAAa,MAAQ,+BAA+B,EAAE,KAAO,CAAC,MAAQ,aAAa,MAAQ,sDAAsD,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,sCAAsC,CAAC,EAAE,cAAgB,CAAC,MAAQ,oBAAoB,GAAK,CAAC,MAAQ,WAAW,MAAQ,iCAAiC,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,sCAAsC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,sDAAsD,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,oBAAoB,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,4CAA4C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,uCAAuC,CAAC,EAAE,2BAA6B,CAAC,MAAQ,6BAA6B,MAAQ,CAAC,MAAQ,kBAAkB,MAAQ,6DAA6D,EAAE,aAAe,CAAC,MAAQ,yBAAyB,MAAQ,iDAAiD,EAAE,MAAQ,CAAC,MAAQ,gBAAgB,MAAQ,uCAAuC,CAAC,EAAE,eAAiB,CAAC,MAAQ,qBAAqB,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,qCAAqC,EAAE,UAAY,CAAC,MAAQ,qBAAqB,MAAQ,0CAA0C,EAAE,QAAU,CAAC,MAAQ,qBAAqB,MAAQ,6CAA6C,EAAE,UAAY,CAAC,MAAQ,mBAAmB,MAAQ,mCAAmC,EAAE,OAAS,CAAC,MAAQ,OAAO,MAAQ,uCAAuC,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,MAAQ,6CAA6C,EAAE,QAAU,CAAC,MAAQ,oBAAoB,MAAQ,+BAA+B,EAAE,MAAQ,CAAC,MAAQ,sBAAsB,MAAQ,iCAAiC,EAAE,YAAc,CAAC,MAAQ,eAAe,MAAQ,2BAA2B,EAAE,QAAU,CAAC,MAAQ,QAAQ,MAAQ,+BAA+B,EAAE,IAAM,CAAC,MAAQ,UAAU,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,eAAe,MAAQ,6CAA6C,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,MAAQ,0DAA0D,EAAE,UAAY,CAAC,MAAQ,eAAe,MAAQ,8CAA8C,EAAE,gBAAkB,CAAC,MAAQ,wBAAwB,MAAQ,mEAAmE,EAAE,WAAa,CAAC,MAAQ,cAAc,MAAQ,uCAAuC,EAAE,KAAO,CAAC,MAAQ,qBAAqB,MAAQ,yCAAyC,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,2BAA2B,EAAE,IAAM,CAAC,MAAQ,MAAM,MAAQ,2CAA2C,EAAE,MAAQ,CAAC,MAAQ,SAAS,MAAQ,6CAA6C,EAAE,SAAW,CAAC,MAAQ,UAAU,MAAQ,+CAA+C,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,6BAA6B,EAAE,YAAc,CAAC,MAAQ,sBAAsB,MAAQ,4CAA4C,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,mCAAmC,EAAE,WAAa,CAAC,MAAQ,oBAAoB,MAAQ,kDAAkD,EAAE,GAAK,CAAC,MAAQ,WAAW,MAAQ,mCAAmC,EAAE,MAAQ,CAAC,MAAQ,WAAW,MAAQ,oCAAoC,EAAE,WAAa,CAAC,MAAQ,YAAY,MAAQ,+BAA+B,EAAE,QAAU,CAAC,MAAQ,WAAW,MAAQ,kDAAkD,CAAC,EAAE,WAAa,CAAC,MAAQ,qBAAqB,KAAO,CAAC,MAAQ,oBAAoB,MAAQ,wDAAwD,EAAE,mBAAqB,CAAC,MAAQ,gBAAgB,MAAQ,mCAAmC,EAAE,QAAU,CAAC,MAAQ,aAAa,MAAQ,4CAA4C,EAAE,UAAY,CAAC,MAAQ,oBAAoB,MAAQ,+BAA+B,EAAE,QAAU,CAAC,MAAQ,sBAAsB,MAAQ,iCAAiC,EAAE,YAAc,CAAC,MAAQ,gBAAgB,MAAQ,8BAA8B,EAAE,aAAe,CAAC,MAAQ,YAAY,MAAQ,0BAA0B,CAAC,EAAE,SAAW,CAAC,MAAQ,aAAa,YAAc,CAAC,MAAQ,mBAAmB,MAAQ,+BAA+B,EAAE,SAAW,CAAC,MAAQ,aAAa,MAAQ,wBAAwB,EAAE,WAAa,CAAC,MAAQ,iBAAiB,MAAQ,6BAA6B,EAAE,aAAe,CAAC,MAAQ,oBAAoB,MAAQ,gCAAgC,EAAE,eAAiB,CAAC,MAAQ,mBAAmB,MAAQ,+BAA+B,EAAE,aAAe,CAAC,MAAQ,oBAAoB,MAAQ,gCAAgC,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,mBAAmB,EAAE,aAAe,CAAC,MAAQ,cAAc,MAAQ,0BAA0B,EAAE,UAAY,CAAC,MAAQ,YAAY,MAAQ,wBAAwB,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,2BAA2B,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,4BAA4B,EAAE,aAAe,CAAC,MAAQ,cAAc,MAAQ,0BAA0B,EAAE,gBAAkB,CAAC,MAAQ,mBAAmB,MAAQ,+BAA+B,EAAE,aAAe,CAAC,MAAQ,aAAa,MAAQ,wBAAwB,EAAE,aAAe,CAAC,MAAQ,aAAa,MAAQ,yBAAyB,EAAE,cAAgB,CAAC,MAAQ,eAAe,MAAQ,2BAA2B,CAAC,EAAE,SAAW,CAAC,MAAQ,aAAa,YAAc,CAAC,MAAQ,mBAAmB,MAAQ,+BAA+B,EAAE,SAAW,CAAC,MAAQ,aAAa,MAAQ,wBAAwB,EAAE,WAAa,CAAC,MAAQ,iBAAiB,MAAQ,6BAA6B,EAAE,aAAe,CAAC,MAAQ,oBAAoB,MAAQ,gCAAgC,EAAE,eAAiB,CAAC,MAAQ,mBAAmB,MAAQ,+BAA+B,EAAE,aAAe,CAAC,MAAQ,oBAAoB,MAAQ,gCAAgC,EAAE,OAAS,CAAC,MAAQ,QAAQ,MAAQ,mBAAmB,EAAE,aAAe,CAAC,MAAQ,cAAc,MAAQ,0BAA0B,EAAE,UAAY,CAAC,MAAQ,YAAY,MAAQ,wBAAwB,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,2BAA2B,EAAE,aAAe,CAAC,MAAQ,gBAAgB,MAAQ,4BAA4B,EAAE,aAAe,CAAC,MAAQ,cAAc,MAAQ,0BAA0B,EAAE,gBAAkB,CAAC,MAAQ,mBAAmB,MAAQ,+BAA+B,EAAE,aAAe,CAAC,MAAQ,aAAa,MAAQ,wBAAwB,EAAE,aAAe,CAAC,MAAQ,aAAa,MAAQ,yBAAyB,EAAE,cAAgB,CAAC,MAAQ,eAAe,MAAQ,2BAA2B,CAAC,EAAE,cAAgB,CAAC,MAAQ,sBAAsB,KAAO,CAAC,MAAQ,oBAAoB,MAAQ,uDAAuD,EAAE,SAAW,CAAC,MAAQ,iBAAiB,MAAQ,+EAA+E,CAAC,CAAC,EAAE,MAAQ,CAAC,eAAiB,CAAC,OAAS,CAAC,MAAQ,OAAO,CAAC,EAAE,sBAAwB,CAAC,iBAAmB,CAAC,MAAQ,UAAU,EAAE,YAAc,CAAC,MAAQ,eAAe,EAAE,iBAAmB,CAAC,MAAQ,QAAQ,EAAE,aAAe,CAAC,MAAQ,QAAQ,CAAC,EAAE,mBAAqB,CAAC,MAAQ,aAAa,MAAQ,qCAAqC,QAAU,CAAC,MAAQ,YAAY,EAAE,sBAAwB,CAAC,MAAQ,+BAA+B,EAAE,eAAiB,CAAC,MAAQ,wCAAwC,EAAE,yBAA2B,CAAC,MAAQ,4CAA4C,EAAE,gBAAkB,CAAC,MAAQ,kBAAkB,CAAC,EAAE,yBAA2B,CAAC,UAAY,CAAC,MAAQ,UAAU,EAAE,QAAU,CAAC,MAAQ,mBAAmB,MAAQ,8CAA8C,CAAC,EAAE,SAAW,CAAC,eAAiB,CAAC,MAAQ,aAAa,EAAE,kBAAoB,CAAC,MAAQ,sBAAsB,EAAE,gBAAkB,CAAC,MAAQ,yBAAyB,EAAE,cAAgB,CAAC,MAAQ,WAAW,EAAE,YAAc,CAAC,MAAQ,YAAY,CAAC,EAAE,QAAU,CAAC,eAAiB,CAAC,MAAQ,gBAAgB,CAAC,EAAE,aAAe,CAAC,MAAQ,CAAC,MAAQ,UAAU,EAAE,SAAW,CAAC,MAAQ,oBAAoB,CAAC,EAAE,UAAY,CAAC,MAAQ,QAAQ,MAAQ,CAAC,MAAQ,MAAM,EAAE,IAAM,CAAC,MAAQ,OAAO,EAAE,UAAY,CAAC,MAAQ,iBAAiB,EAAE,KAAO,CAAC,MAAQ,iBAAiB,CAAC,EAAE,cAAgB,CAAC,WAAa,CAAC,MAAQ,eAAe,CAAC,EAAE,eAAiB,CAAC,UAAY,CAAC,MAAQ,OAAO,EAAE,UAAY,CAAC,MAAQ,YAAY,CAAC,EAAE,YAAc,CAAC,MAAQ,CAAC,MAAQ,MAAM,EAAE,iBAAmB,CAAC,MAAQ,WAAW,EAAE,sBAAwB,CAAC,MAAQ,YAAY,aAAe,gBAAgB,EAAE,yBAA2B,CAAC,MAAQ,eAAe,CAAC,EAAE,gBAAkB,CAAC,UAAY,CAAC,MAAQ,OAAO,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,WAAa,CAAC,MAAQ,aAAa,EAAE,QAAU,CAAC,aAAe,kBAAkB,EAAE,SAAW,CAAC,MAAQ,UAAU,aAAe,aAAa,EAAE,OAAS,WAAW,EAAE,oBAAsB,CAAC,MAAQ,CAAC,aAAe,KAAK,EAAE,YAAc,CAAC,MAAQ,QAAQ,EAAE,QAAU,CAAC,MAAQ,OAAO,EAAE,OAAS,CAAC,MAAQ,MAAM,EAAE,SAAW,CAAC,MAAQ,UAAU,aAAe,cAAc,uBAAyB,kBAAkB,EAAE,WAAa,CAAC,MAAQ,aAAa,EAAE,UAAY,CAAC,MAAQ,QAAQ,CAAC,EAAE,gBAAkB,CAAC,WAAa,CAAC,MAAQ,cAAc,EAAE,yBAA2B,CAAC,MAAQ,eAAe,EAAE,cAAgB,CAAC,MAAQ,qBAAqB,EAAE,WAAa,CAAC,MAAQ,gBAAgB,EAAE,cAAgB,CAAC,MAAQ,mBAAmB,EAAE,YAAc,CAAC,MAAQ,oBAAoB,CAAC,EAAE,aAAe,CAAC,YAAc,CAAC,MAAQ,4BAA4B,EAAE,oBAAsB,CAAC,MAAQ,aAAa,EAAE,OAAS,CAAC,MAAQ,MAAM,EAAE,eAAiB,CAAC,MAAQ,sBAAsB,CAAC,EAAE,cAAgB,CAAC,MAAQ,kBAAkB,EAAE,gBAAkB,CAAC,QAAU,CAAC,MAAQ,UAAU,EAAE,MAAQ,CAAC,MAAQ,SAAS,aAAe,SAAS,CAAC,EAAE,YAAc,CAAC,QAAU,CAAC,MAAQ,OAAO,EAAE,YAAc,CAAC,MAAQ,UAAU,EAAE,YAAc,CAAC,MAAQ,UAAU,EAAE,WAAa,CAAC,MAAQ,eAAe,EAAE,YAAc,CAAC,MAAQ,eAAe,CAAC,EAAE,gBAAkB,CAAC,OAAS,CAAC,MAAQ,MAAM,EAAE,SAAW,CAAC,MAAQ,UAAU,aAAe,cAAc,uBAAyB,mBAAmB,uBAAyB,iBAAiB,mBAAqB,UAAU,qBAAuB,cAAc,CAAC,EAAE,YAAc,CAAC,QAAU,CAAC,MAAQ,mBAAmB,aAAe,QAAQ,EAAE,QAAU,CAAC,MAAQ,kBAAkB,aAAe,UAAU,EAAE,KAAO,CAAC,MAAQ,cAAc,CAAC,EAAE,gBAAkB,CAAC,OAAS,CAAC,MAAQ,gBAAgB,EAAE,QAAU,CAAC,MAAQ,cAAc,EAAE,MAAQ,CAAC,MAAQ,UAAU,EAAE,UAAY,CAAC,MAAQ,OAAO,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,QAAU,CAAC,MAAQ,eAAe,aAAe,iBAAiB,EAAE,UAAY,CAAC,MAAQ,OAAO,EAAE,SAAW,CAAC,MAAQ,SAAS,CAAC,EAAE,YAAc,CAAC,MAAQ,CAAC,MAAQ,QAAQ,EAAE,yBAA2B,CAAC,MAAQ,eAAe,CAAC,EAAE,wBAA0B,CAAC,UAAY,CAAC,MAAQ,OAAO,EAAE,MAAQ,CAAC,MAAQ,aAAa,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,OAAS,CAAC,MAAQ,MAAM,EAAE,WAAa,CAAC,MAAQ,aAAa,EAAE,QAAU,CAAC,MAAQ,OAAO,EAAE,YAAc,CAAC,MAAQ,QAAQ,EAAE,SAAW,CAAC,MAAQ,UAAU,aAAe,aAAa,CAAC,EAAE,oBAAsB,CAAC,yBAA2B,CAAC,MAAQ,eAAe,EAAE,iBAAmB,CAAC,MAAQ,qBAAqB,EAAE,gBAAkB,CAAC,MAAQ,mBAAmB,EAAE,aAAe,CAAC,MAAQ,gBAAgB,CAAC,EAAE,qBAAuB,CAAC,UAAY,CAAC,MAAQ,OAAO,EAAE,MAAQ,CAAC,MAAQ,aAAa,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,OAAS,CAAC,MAAQ,MAAM,EAAE,WAAa,CAAC,MAAQ,aAAa,EAAE,QAAU,CAAC,MAAQ,YAAY,EAAE,YAAc,CAAC,MAAQ,QAAQ,EAAE,SAAW,CAAC,MAAQ,UAAU,aAAe,aAAa,EAAE,YAAc,CAAC,aAAe,UAAU,CAAC,EAAE,iBAAmB,CAAC,yBAA2B,CAAC,MAAQ,eAAe,EAAE,iBAAmB,CAAC,MAAQ,qBAAqB,EAAE,gBAAkB,CAAC,MAAQ,mBAAmB,EAAE,aAAe,CAAC,MAAQ,gBAAgB,EAAE,gBAAkB,CAAC,MAAQ,oBAAoB,EAAE,wBAA0B,CAAC,MAAQ,UAAU,CAAC,EAAE,sBAAwB,CAAC,iBAAmB,CAAC,MAAQ,iBAAiB,EAAE,UAAY,CAAC,MAAQ,OAAO,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,MAAQ,CAAC,MAAQ,qBAAqB,EAAE,YAAc,CAAC,aAAe,OAAO,EAAE,UAAY,CAAC,MAAQ,QAAQ,EAAE,OAAS,CAAC,MAAQ,SAAS,EAAE,SAAW,CAAC,MAAQ,UAAU,aAAe,OAAO,CAAC,EAAE,kBAAoB,CAAC,yBAA2B,CAAC,MAAQ,eAAe,CAAC,EAAE,MAAQ,CAAC,MAAQ,iBAAiB,EAAE,aAAe,CAAC,OAAS,CAAC,MAAQ,MAAM,CAAC,EAAE,gBAAkB,CAAC,MAAQ,eAAe,EAAE,WAAa,CAAC,MAAQ,WAAW,QAAU,CAAC,MAAQ,6BAA6B,EAAE,SAAW,CAAC,MAAQ,UAAU,CAAC,EAAE,uBAAyB,CAAC,MAAQ,oBAAoB,QAAU,CAAC,MAAQ,KAAK,EAAE,cAAgB,CAAC,MAAQ,iBAAiB,CAAC,EAAE,aAAe,CAAC,MAAQ,oBAAoB,EAAE,iBAAmB,CAAC,MAAQ,kBAAkB,EAAE,kBAAoB,CAAC,MAAQ,sBAAsB,EAAE,yBAA2B,CAAC,GAAK,CAAC,MAAQ,UAAU,EAAE,OAAS,CAAC,MAAQ,uBAAuB,EAAE,iBAAmB,CAAC,MAAQ,iBAAiB,EAAE,OAAS,CAAC,MAAQ,QAAQ,EAAE,KAAO,CAAC,MAAQ,MAAM,EAAE,QAAU,CAAC,MAAQ,kBAAkB,EAAE,WAAa,CAAC,MAAQ,gCAAgC,CAAC,EAAE,oBAAsB,CAAC,iBAAmB,CAAC,MAAQ,kBAAkB,EAAE,mBAAqB,CAAC,MAAQ,0CAA0C,EAAE,oBAAsB,CAAC,MAAQ,0BAA0B,EAAE,eAAiB,CAAC,MAAQ,kBAAkB,CAAC,EAAE,8BAAgC,CAAC,mBAAqB,CAAC,MAAQ,kBAAkB,CAAC,EAAE,sBAAwB,CAAC,qBAAuB,CAAC,MAAQ,uCAAuC,EAAE,sBAAwB,CAAC,MAAQ,4CAA4C,EAAE,mCAAqC,CAAC,MAAQ,iCAAiC,CAAC,EAAE,wBAA0B,CAAC,YAAc,CAAC,MAAQ,gCAAgC,UAAY,+BAA+B,EAAE,mBAAqB,CAAC,MAAQ,0BAA0B,CAAC,EAAE,kBAAoB,CAAC,MAAQ,oBAAoB,iBAAmB,CAAC,MAAQ,8BAA8B,MAAQ,8DAA8D,EAAE,0BAA4B,CAAC,MAAQ,4BAA4B,MAAQ,8DAA8D,EAAE,QAAU,CAAC,MAAQ,QAAQ,UAAY,eAAe,EAAE,GAAK,CAAC,MAAQ,UAAU,EAAE,OAAS,CAAC,MAAQ,MAAM,EAAE,eAAiB,CAAC,MAAQ,eAAe,EAAE,UAAY,CAAC,MAAQ,cAAc,EAAE,QAAU,CAAC,MAAQ,gBAAgB,EAAE,mBAAqB,CAAC,MAAQ,mBAAmB,CAAC,EAAE,gBAAkB,CAAC,MAAQ,6BAA6B,sBAAwB,CAAC,MAAQ,WAAW,EAAE,iBAAmB,CAAC,MAAQ,mBAAmB,EAAE,gBAAkB,CAAC,MAAQ,qBAAqB,EAAE,WAAa,CAAC,MAAQ,YAAY,CAAC,EAAE,kBAAoB,CAAC,MAAQ,qBAAqB,iBAAmB,CAAC,MAAQ,oBAAoB,EAAE,gBAAkB,CAAC,MAAQ,yBAAyB,EAAE,0BAA4B,CAAC,MAAQ,qCAAqC,EAAE,gCAAkC,CAAC,MAAQ,4CAA4C,CAAC,EAAE,oBAAsB,CAAC,MAAQ,eAAe,QAAU,CAAC,MAAQ,SAAS,EAAE,SAAW,CAAC,MAAQ,qBAAqB,EAAE,QAAU,CAAC,MAAQ,aAAa,EAAE,SAAW,CAAC,MAAQ,QAAQ,EAAE,KAAO,CAAC,MAAQ,uBAAuB,CAAC,EAAE,uBAAyB,CAAC,QAAU,CAAC,MAAQ,aAAa,EAAE,UAAY,CAAC,MAAQ,SAAS,EAAE,YAAc,CAAC,MAAQ,cAAc,EAAE,KAAO,CAAC,MAAQ,MAAM,EAAE,mBAAqB,CAAC,MAAQ,kBAAkB,CAAC,EAAE,gBAAkB,CAAC,MAAQ,iBAAiB,SAAW,CAAC,MAAQ,cAAc,EAAE,cAAgB,CAAC,MAAQ,uBAAuB,EAAE,eAAiB,CAAC,MAAQ,cAAc,EAAE,iBAAmB,CAAC,MAAQ,oBAAoB,EAAE,QAAU,CAAC,MAAQ,sBAAsB,CAAC,EAAE,gBAAkB,CAAC,MAAQ,mBAAmB,QAAU,CAAC,MAAQ,QAAQ,UAAY,eAAe,EAAE,GAAK,CAAC,MAAQ,UAAU,EAAE,OAAS,CAAC,MAAQ,MAAM,EAAE,eAAiB,CAAC,MAAQ,eAAe,EAAE,UAAY,CAAC,MAAQ,cAAc,EAAE,QAAU,CAAC,MAAQ,gBAAgB,EAAE,uBAAyB,CAAC,MAAQ,uBAAuB,MAAQ,qIAAqI,EAAE,eAAiB,CAAC,MAAQ,mCAAmC,MAAQ,qrBAAqrB,EAAE,sBAAwB,CAAC,MAAQ,2BAA2B,EAAE,WAAa,CAAC,MAAQ,2BAA2B,CAAC,EAAE,uBAAyB,CAAC,UAAY,CAAC,MAAQ,yBAAyB,EAAE,KAAO,CAAC,MAAQ,QAAQ,EAAE,KAAO,CAAC,MAAQ,QAAQ,EAAE,aAAe,CAAC,MAAQ,cAAc,EAAE,eAAiB,CAAC,MAAQ,kBAAkB,CAAC,EAAE,uBAAyB,CAAC,MAAQ,aAAa,gBAAkB,CAAC,MAAQ,kBAAkB,EAAE,QAAU,CAAC,MAAQ,YAAY,EAAE,sBAAwB,CAAC,MAAQ,sBAAsB,CAAC,EAAE,qBAAuB,CAAC,MAAQ,SAAS,KAAO,CAAC,MAAQ,MAAM,EAAE,KAAO,CAAC,MAAQ,eAAe,CAAC,EAAE,aAAe,CAAC,MAAQ,eAAe,GAAK,CAAC,MAAQ,IAAI,EAAE,KAAO,CAAC,MAAQ,MAAM,CAAC,EAAE,qBAAuB,CAAC,MAAQ,wBAAwB,UAAY,CAAC,MAAQ,SAAS,EAAE,MAAQ,CAAC,MAAQ,mBAAmB,EAAE,WAAa,CAAC,MAAQ,YAAY,EAAE,SAAW,CAAC,MAAQ,YAAY,EAAE,UAAY,CAAC,MAAQ,WAAW,EAAE,QAAU,CAAC,MAAQ,cAAc,EAAE,eAAiB,CAAC,MAAQ,iBAAiB,EAAE,QAAU,CAAC,MAAQ,cAAc,CAAC,EAAE,qBAAuB,CAAC,MAAQ,aAAa,eAAiB,CAAC,MAAQ,iBAAiB,EAAE,SAAW,CAAC,MAAQ,YAAY,CAAC,EAAE,oBAAsB,CAAC,MAAQ,cAAc,aAAe,CAAC,MAAQ,kBAAkB,EAAE,SAAW,CAAC,MAAQ,eAAe,CAAC,EAAE,iBAAmB,CAAC,MAAQ,wBAAwB,OAAS,CAAC,MAAQ,oBAAoB,EAAE,WAAa,CAAC,MAAQ,6BAA6B,EAAE,UAAY,CAAC,MAAQ,iBAAiB,EAAE,MAAQ,CAAC,MAAQ,SAAS,EAAE,QAAU,CAAC,MAAQ,YAAY,CAAC,EAAE,oBAAsB,CAAC,MAAQ,eAAe,mBAAqB,CAAC,MAAQ,qCAAqC,EAAE,uBAAyB,CAAC,MAAQ,yBAAyB,CAAC,EAAE,oBAAsB,CAAC,MAAQ,4BAA4B,SAAW,CAAC,MAAQ,cAAc,CAAC,EAAE,sBAAwB,CAAC,MAAQ,YAAY,gBAAkB,CAAC,MAAQ,yBAAyB,EAAE,0BAA4B,CAAC,MAAQ,qCAAqC,CAAC,EAAE,qBAAuB,CAAC,MAAQ,gBAAgB,MAAQ,CAAC,MAAQ,WAAW,CAAC,EAAE,kBAAoB,CAAC,MAAQ,eAAe,MAAQ,CAAC,MAAQ,wBAAwB,EAAE,IAAM,CAAC,MAAQ,gCAAgC,EAAE,SAAW,CAAC,MAAQ,uBAAuB,EAAE,UAAY,CAAC,MAAQ,cAAc,CAAC,EAAE,gBAAkB,CAAC,MAAQ,4BAA4B,iBAAmB,CAAC,MAAQ,oBAAoB,EAAE,SAAW,CAAC,MAAQ,cAAc,CAAC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,WAAa,CAAC,MAAQ,iBAAiB,CAAC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,WAAa,CAAC,MAAQ,iBAAiB,CAAC,EAAE,iBAAmB,CAAC,GAAK,CAAC,MAAQ,iBAAiB,EAAE,QAAU,CAAC,MAAQ,YAAY,CAAC,EAAE,uBAAyB,CAAC,MAAQ,kBAAkB,MAAQ,oEAAoE,iBAAmB,CAAC,MAAQ,oBAAoB,EAAE,WAAa,CAAC,MAAQ,wBAAwB,CAAC,EAAE,2BAA6B,CAAC,MAAQ,kBAAkB,MAAQ,oEAAoE,WAAa,CAAC,MAAQ,wBAAwB,CAAC,EAAE,kCAAoC,CAAC,MAAQ,wBAAwB,GAAK,CAAC,MAAQ,QAAQ,EAAE,MAAQ,CAAC,MAAQ,SAAS,EAAE,QAAU,CAAC,MAAQ,cAAc,EAAE,iBAAmB,CAAC,MAAQ,mBAAmB,EAAE,WAAa,CAAC,MAAQ,mBAAmB,EAAE,MAAQ,CAAC,MAAQ,UAAU,CAAC,EAAE,8BAAgC,CAAC,MAAQ,iBAAiB,MAAQ,CAAC,MAAQ,MAAM,EAAE,KAAO,CAAC,MAAQ,QAAQ,EAAE,MAAQ,CAAC,MAAQ,UAAU,CAAC,EAAE,cAAgB,CAAC,MAAQ,YAAY,MAAQ,CAAC,MAAQ,kBAAkB,EAAE,UAAY,CAAC,MAAQ,WAAW,EAAE,SAAW,CAAC,MAAQ,WAAW,EAAE,MAAQ,CAAC,MAAQ,SAAS,EAAE,WAAa,CAAC,MAAQ,kBAAkB,CAAC,EAAE,cAAgB,CAAC,MAAQ,iCAAiC,iBAAmB,CAAC,MAAQ,oBAAoB,EAAE,UAAY,CAAC,MAAQ,WAAW,CAAC,EAAE,kBAAoB,CAAC,MAAQ,iCAAiC,UAAY,CAAC,MAAQ,WAAW,CAAC,EAAE,cAAgB,CAAC,SAAW,CAAC,UAAY,CAAC,MAAQ,SAAS,EAAE,SAAW,CAAC,MAAQ,UAAU,EAAE,WAAa,CAAC,MAAQ,eAAe,EAAE,WAAa,CAAC,MAAQ,mBAAmB,CAAC,EAAE,QAAU,CAAC,MAAQ,CAAC,MAAQ,kBAAkB,EAAE,UAAY,CAAC,MAAQ,eAAe,EAAE,OAAS,CAAC,MAAQ,YAAY,EAAE,WAAa,CAAC,MAAQ,aAAa,EAAE,KAAO,CAAC,MAAQ,UAAU,EAAE,YAAc,CAAC,MAAQ,KAAK,CAAC,EAAE,gBAAkB,CAAC,MAAQ,uDAAuD,CAAC,EAAE,oBAAsB,CAAC,kBAAoB,CAAC,MAAQ,mBAAmB,EAAE,kBAAoB,CAAC,MAAQ,iBAAiB,EAAE,KAAO,CAAC,MAAQ,yCAAyC,EAAE,gBAAkB,CAAC,MAAQ,mCAAmC,CAAC,EAAE,mBAAqB,CAAC,aAAe,CAAC,MAAQ,0BAA0B,EAAE,qBAAuB,CAAC,MAAQ,uBAAuB,EAAE,0BAA4B,CAAC,MAAQ,+BAA+B,EAAE,gBAAkB,CAAC,MAAQ,qBAAqB,EAAE,uBAAyB,CAAC,MAAQ,uBAAuB,EAAE,6BAA+B,CAAC,MAAQ,iCAAiC,EAAE,gBAAkB,CAAC,MAAQ,sCAAsC,CAAC,EAAE,0BAA4B,CAAC,KAAO,CAAC,MAAQ,wBAAwB,EAAE,QAAU,CAAC,MAAQ,YAAY,EAAE,QAAU,CAAC,MAAQ,oBAAoB,CAAC,EAAE,kBAAoB,CAAC,KAAO,CAAC,MAAQ,iBAAiB,EAAE,SAAW,CAAC,MAAQ,gBAAgB,EAAE,kBAAoB,CAAC,MAAQ,oBAAoB,EAAE,WAAa,CAAC,MAAQ,YAAY,EAAE,UAAY,CAAC,MAAQ,mBAAmB,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,CAAC,EAAE,yBAA2B,CAAC,KAAO,CAAC,MAAQ,+BAA+B,EAAE,UAAY,CAAC,MAAQ,0BAA0B,EAAE,cAAgB,CAAC,MAAQ,6BAA6B,CAAC,EAAE,sBAAwB,CAAC,KAAO,CAAC,MAAQ,+BAA+B,EAAE,UAAY,CAAC,MAAQ,0BAA0B,EAAE,cAAgB,CAAC,MAAQ,6BAA6B,CAAC,EAAE,oBAAsB,CAAC,KAAO,CAAC,MAAQ,mBAAmB,CAAC,EAAE,sBAAwB,CAAC,KAAO,CAAC,MAAQ,mBAAmB,CAAC,EAAE,mBAAqB,CAAC,KAAO,CAAC,MAAQ,aAAa,EAAE,aAAe,CAAC,MAAQ,sBAAsB,EAAE,WAAa,CAAC,MAAQ,mDAAmD,EAAE,UAAY,CAAC,MAAQ,6CAA6C,CAAC,EAAE,oBAAsB,CAAC,KAAO,CAAC,MAAQ,UAAU,CAAC,EAAE,yBAA2B,CAAC,KAAO,CAAC,MAAQ,UAAU,CAAC,EAAE,+BAAiC,CAAC,KAAO,CAAC,MAAQ,UAAU,CAAC,EAAE,6BAA+B,CAAC,KAAO,CAAC,MAAQ,UAAU,CAAC,EAAE,+CAAiD,CAAC,KAAO,CAAC,MAAQ,wBAAwB,CAAC,EAAE,iBAAmB,CAAC,UAAY,CAAC,MAAQ,KAAK,EAAE,OAAS,CAAC,MAAQ,aAAa,EAAE,iBAAmB,CAAC,MAAQ,cAAc,EAAE,MAAQ,CAAC,MAAQ,SAAS,CAAC,EAAE,oBAAsB,CAAC,WAAa,CAAC,MAAQ,KAAK,EAAE,OAAS,CAAC,MAAQ,YAAY,EAAE,OAAS,CAAC,MAAQ,kBAAkB,EAAE,UAAY,CAAC,MAAQ,KAAK,EAAE,OAAS,CAAC,MAAQ,aAAa,EAAE,iBAAmB,CAAC,MAAQ,cAAc,EAAE,eAAiB,CAAC,MAAQ,gBAAgB,EAAE,MAAQ,CAAC,MAAQ,SAAS,CAAC,EAAE,qBAAuB,CAAC,aAAe,CAAC,MAAQ,cAAc,UAAY,uDAAuD,WAAa,mBAAmB,CAAC,EAAE,qBAAuB,CAAC,KAAO,CAAC,MAAQ,sBAAsB,CAAC,EAAE,gBAAkB,CAAC,KAAO,CAAC,MAAQ,sBAAsB,CAAC,EAAE,kBAAoB,CAAC,KAAO,CAAC,MAAQ,eAAe,CAAC,EAAE,gCAAkC,CAAC,QAAU,CAAC,MAAQ,aAAa,EAAE,eAAiB,CAAC,MAAQ,KAAK,EAAE,OAAS,CAAC,MAAQ,yBAAyB,EAAE,UAAY,CAAC,MAAQ,UAAU,EAAE,YAAc,CAAC,MAAQ,WAAW,EAAE,eAAiB,CAAC,MAAQ,eAAe,EAAE,yBAA2B,CAAC,MAAQ,wCAAwC,CAAC,EAAE,aAAe,CAAC,eAAiB,CAAC,MAAQ,sBAAsB,CAAC,EAAE,4BAA8B,CAAC,KAAO,CAAC,MAAQ,kBAAkB,EAAE,sBAAwB,CAAC,MAAQ,8BAA8B,EAAE,aAAe,CAAC,MAAQ,eAAe,EAAE,kBAAoB,CAAC,MAAQ,mBAAmB,EAAE,iBAAmB,CAAC,MAAQ,wCAAwC,CAAC,EAAE,WAAa,CAAC,2BAA6B,CAAC,MAAQ,4BAA4B,EAAE,sBAAwB,CAAC,MAAQ,sCAAsC,EAAE,gBAAkB,CAAC,MAAQ,sCAAsC,EAAE,oBAAsB,CAAC,MAAQ,+BAA+B,EAAE,oBAAsB,CAAC,MAAQ,iBAAiB,EAAE,0BAA4B,CAAC,MAAQ,oCAAoC,EAAE,4BAA8B,CAAC,MAAQ,4BAA4B,EAAE,uBAAyB,CAAC,MAAQ,qCAAqC,EAAE,iBAAmB,CAAC,MAAQ,qCAAqC,EAAE,qBAAuB,CAAC,MAAQ,+BAA+B,EAAE,sBAAwB,CAAC,MAAQ,kBAAkB,EAAE,2BAA6B,CAAC,MAAQ,qCAAqC,EAAE,4BAA8B,CAAC,MAAQ,4BAA4B,EAAE,uBAAyB,CAAC,MAAQ,yBAAyB,EAAE,iBAAmB,CAAC,MAAQ,6BAA6B,EAAE,8BAAgC,CAAC,MAAQ,4BAA4B,EAAE,yBAA2B,CAAC,MAAQ,+CAA+C,EAAE,mBAAqB,CAAC,MAAQ,+CAA+C,EAAE,uBAAyB,CAAC,MAAQ,+BAA+B,EAAE,2BAA6B,CAAC,MAAQ,6BAA6B,EAAE,sBAAwB,CAAC,MAAQ,+BAA+B,EAAE,gBAAkB,CAAC,MAAQ,+BAA+B,EAAE,oBAAsB,CAAC,MAAQ,sBAAsB,EAAE,SAAW,CAAC,MAAQ,4BAA4B,EAAE,UAAY,CAAC,MAAQ,qCAAqC,EAAE,QAAU,CAAC,MAAQ,aAAa,CAAC,EAAE,mBAAqB,CAAC,MAAQ,2BAA2B,sBAAwB,CAAC,MAAQ,8BAA8B,EAAE,YAAc,CAAC,MAAQ,WAAW,EAAE,iBAAmB,CAAC,MAAQ,4BAA4B,EAAE,cAAgB,CAAC,MAAQ,+BAA+B,EAAE,YAAc,CAAC,MAAQ,oCAAoC,EAAE,QAAU,CAAC,MAAQ,gBAAgB,EAAE,cAAgB,CAAC,MAAQ,iBAAiB,EAAE,UAAY,CAAC,MAAQ,iBAAiB,EAAE,QAAU,CAAC,MAAQ,eAAe,EAAE,OAAS,CAAC,MAAQ,OAAO,EAAE,SAAW,CAAC,MAAQ,oBAAoB,CAAC,EAAE,uBAAyB,CAAC,MAAQ,0BAA0B,KAAO,CAAC,MAAQ,kBAAkB,EAAE,iBAAmB,CAAC,MAAQ,yBAAyB,EAAE,QAAU,CAAC,MAAQ,gBAAgB,EAAE,cAAgB,CAAC,MAAQ,iBAAiB,EAAE,UAAY,CAAC,MAAQ,iBAAiB,EAAE,QAAU,CAAC,MAAQ,eAAe,EAAE,OAAS,CAAC,MAAQ,OAAO,EAAE,SAAW,CAAC,MAAQ,oBAAoB,CAAC,EAAE,gBAAkB,CAAC,MAAQ,eAAe,iBAAmB,CAAC,MAAQ,oBAAoB,EAAE,mBAAqB,CAAC,MAAQ,qCAAqC,EAAE,uBAAyB,CAAC,MAAQ,yBAAyB,CAAC,EAAE,iBAAmB,CAAC,MAAQ,gBAAgB,iBAAmB,CAAC,MAAQ,oBAAoB,EAAE,MAAQ,CAAC,MAAQ,WAAW,CAAC,EAAE,uBAAyB,CAAC,MAAQ,uBAAuB,GAAK,CAAC,MAAQ,oBAAoB,EAAE,YAAc,CAAC,MAAQ,kBAAkB,EAAE,KAAO,CAAC,MAAQ,kBAAkB,EAAE,aAAe,CAAC,MAAQ,eAAe,EAAE,eAAiB,CAAC,MAAQ,sBAAsB,EAAE,iBAAmB,CAAC,MAAQ,4BAA4B,EAAE,eAAiB,CAAC,MAAQ,wBAAwB,EAAE,YAAc,CAAC,MAAQ,2BAA2B,EAAE,OAAS,CAAC,MAAQ,OAAO,EAAE,QAAU,CAAC,MAAQ,gBAAgB,EAAE,cAAgB,CAAC,MAAQ,iBAAiB,EAAE,UAAY,CAAC,MAAQ,iBAAiB,EAAE,QAAU,CAAC,MAAQ,eAAe,EAAE,SAAW,CAAC,MAAQ,oBAAoB,CAAC,EAAE,wBAA0B,CAAC,MAAQ,kBAAkB,GAAK,CAAC,MAAQ,UAAU,EAAE,KAAO,CAAC,MAAQ,MAAM,CAAC,EAAE,uBAAyB,CAAC,MAAQ,sBAAsB,QAAU,CAAC,MAAQ,4BAA4B,CAAC,EAAE,UAAY,CAAC,MAAQ,SAAS,SAAW,CAAC,MAAQ,oBAAoB,EAAE,UAAY,CAAC,MAAQ,iBAAiB,EAAE,QAAU,CAAC,MAAQ,eAAe,EAAE,SAAW,CAAC,MAAQ,cAAc,EAAE,KAAO,CAAC,MAAQ,MAAM,EAAE,QAAU,CAAC,MAAQ,gBAAgB,EAAE,cAAgB,CAAC,MAAQ,iBAAiB,EAAE,SAAW,CAAC,MAAQ,aAAa,EAAE,KAAO,CAAC,MAAQ,MAAM,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,UAAY,CAAC,MAAQ,YAAY,CAAC,EAAE,kBAAoB,CAAC,MAAQ,UAAU,KAAO,CAAC,MAAQ,iBAAiB,EAAE,OAAS,CAAC,MAAQ,OAAO,EAAE,KAAO,CAAC,MAAQ,SAAS,EAAE,UAAY,CAAC,MAAQ,WAAW,EAAE,QAAU,CAAC,MAAQ,YAAY,CAAC,CAAC,EAAE,SAAW,CAAC,aAAe,CAAC,MAAQ,mBAAmB,WAAa,CAAC,MAAQ,eAAe,EAAE,iBAAmB,CAAC,MAAQ,QAAQ,EAAE,UAAY,CAAC,MAAQ,kBAAkB,EAAE,eAAiB,CAAC,MAAQ,gBAAgB,EAAE,WAAa,CAAC,MAAQ,eAAe,CAAC,EAAE,gBAAkB,CAAC,GAAK,CAAC,MAAQ,UAAU,EAAE,UAAY,CAAC,MAAQ,aAAa,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,MAAQ,CAAC,MAAQ,UAAU,EAAE,QAAU,CAAC,MAAQ,UAAU,EAAE,OAAS,CAAC,MAAQ,iBAAiB,EAAE,SAAW,CAAC,MAAQ,mBAAmB,EAAE,UAAY,CAAC,MAAQ,yBAAyB,EAAE,aAAe,CAAC,MAAQ,SAAS,EAAE,WAAa,CAAC,MAAQ,0CAA0C,CAAC,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,MAAQ,CAAC,MAAQ,YAAY,EAAE,KAAO,CAAC,MAAQ,MAAM,EAAE,UAAY,CAAC,MAAQ,eAAe,EAAE,mBAAqB,CAAC,MAAQ,YAAY,CAAC,EAAE,GAAK,CAAC,KAAO,CAAC,MAAQ,UAAU,EAAE,KAAO,CAAC,MAAQ,QAAQ,EAAE,YAAc,CAAC,MAAQ,UAAU,EAAE,YAAc,CAAC,MAAQ,WAAW,CAAC,EAAE,cAAgB,CAAC,MAAQ,+CAA+C,YAAc,CAAC,MAAQ,8CAA8C,EAAE,UAAY,CAAC,MAAQ,WAAW,EAAE,QAAU,CAAC,MAAQ,YAAY,CAAC,EAAE,MAAQ,CAAC,MAAQ,UAAU,QAAU,CAAC,MAAQ,2BAA2B,EAAE,SAAW,CAAC,MAAQ,qBAAqB,EAAE,kBAAoB,CAAC,MAAQ,qBAAqB,EAAE,mBAAqB,CAAC,MAAQ,yBAAyB,CAAC,EAAE,WAAa,CAAC,YAAc,CAAC,MAAQ,gBAAgB,EAAE,UAAY,CAAC,MAAQ,sCAAsC,CAAC,EAAE,WAAa,CAAC,WAAa,CAAC,MAAQ,iBAAiB,CAAC,EAAE,QAAU,CAAC,GAAK,CAAC,MAAQ,cAAc,EAAE,OAAS,CAAC,MAAQ,YAAY,EAAE,MAAQ,CAAC,MAAQ,IAAI,EAAE,WAAa,CAAC,MAAQ,aAAa,EAAE,WAAa,CAAC,MAAQ,kBAAkB,EAAE,YAAc,CAAC,MAAQ,UAAU,EAAE,YAAc,CAAC,MAAQ,WAAW,CAAC,EAAE,aAAe,CAAC,MAAQ,qBAAqB,GAAK,CAAC,MAAQ,cAAc,EAAE,OAAS,CAAC,MAAQ,YAAY,EAAE,MAAQ,CAAC,MAAQ,IAAI,EAAE,WAAa,CAAC,MAAQ,aAAa,EAAE,WAAa,CAAC,MAAQ,kBAAkB,EAAE,YAAc,CAAC,MAAQ,UAAU,EAAE,YAAc,CAAC,MAAQ,WAAW,EAAE,YAAc,CAAC,MAAQ,kBAAkB,CAAC,EAAE,gBAAkB,CAAC,MAAQ,gBAAgB,KAAO,CAAC,MAAQ,gCAAgC,EAAE,aAAe,CAAC,MAAQ,8BAA8B,EAAE,QAAU,CAAC,MAAQ,wBAAwB,CAAC,EAAE,aAAe,CAAC,MAAQ,aAAa,gBAAkB,CAAC,MAAQ,wBAAwB,EAAE,UAAY,CAAC,MAAQ,wBAAwB,EAAE,YAAc,CAAC,MAAQ,eAAe,EAAE,eAAiB,CAAC,MAAQ,+BAA+B,CAAC,EAAE,kBAAoB,CAAC,kBAAoB,CAAC,MAAQ,wBAAwB,EAAE,SAAW,CAAC,MAAQ,iBAAiB,CAAC,EAAE,QAAU,CAAC,YAAc,CAAC,MAAQ,oBAAoB,EAAE,WAAa,CAAC,MAAQ,oBAAoB,EAAE,iBAAmB,CAAC,MAAQ,iBAAiB,CAAC,EAAE,kBAAoB,CAAC,UAAY,CAAC,MAAQ,yCAAyC,EAAE,YAAc,CAAC,MAAQ,gBAAgB,EAAE,UAAY,CAAC,MAAQ,SAAS,EAAE,SAAW,CAAC,MAAQ,UAAU,EAAE,UAAY,CAAC,MAAQ,aAAa,EAAE,OAAS,CAAC,MAAQ,WAAW,CAAC,EAAE,WAAa,CAAC,KAAO,CAAC,MAAQ,sCAAsC,EAAE,KAAO,CAAC,MAAQ,uCAAuC,EAAE,MAAQ,CAAC,MAAQ,4BAA4B,MAAQ,gCAAgC,CAAC,EAAE,WAAa,CAAC,MAAQ,sBAAsB,SAAW,CAAC,MAAQ,mBAAmB,EAAE,eAAiB,CAAC,MAAQ,wBAAwB,EAAE,SAAW,CAAC,MAAQ,uBAAuB,EAAE,SAAW,CAAC,MAAQ,2BAA2B,EAAE,aAAe,CAAC,MAAQ,oCAAoC,EAAE,aAAe,CAAC,MAAQ,oBAAoB,EAAE,kBAAoB,CAAC,MAAQ,6BAA6B,EAAE,kBAAoB,CAAC,MAAQ,6BAA6B,CAAC,EAAE,OAAS,CAAC,MAAQ,kCAAkC,UAAY,CAAC,MAAQ,WAAW,EAAE,QAAU,CAAC,MAAQ,YAAY,CAAC,EAAE,iBAAmB,CAAC,MAAQ,8BAA8B,KAAO,CAAC,MAAQ,sCAAsC,EAAE,KAAO,CAAC,MAAQ,yCAAyC,CAAC,EAAE,cAAgB,CAAC,MAAQ,gCAAgC,KAAO,CAAC,MAAQ,mCAAmC,EAAE,KAAO,CAAC,MAAQ,iCAAiC,CAAC,EAAE,iBAAmB,CAAC,MAAQ,mBAAmB,eAAiB,CAAC,MAAQ,6BAA6B,EAAE,kBAAoB,CAAC,MAAQ,+BAA+B,EAAE,gBAAkB,CAAC,MAAQ,uBAAuB,CAAC,EAAE,kBAAoB,CAAC,MAAQ,uBAAuB,eAAiB,CAAC,MAAQ,wCAAwC,CAAC,EAAE,QAAU,CAAC,oBAAsB,CAAC,MAAQ,uCAAuC,EAAE,kBAAoB,CAAC,MAAQ,wCAAwC,CAAC,EAAE,cAAgB,CAAC,qBAAuB,CAAC,MAAQ,oBAAoB,CAAC,EAAE,oBAAsB,CAAC,MAAQ,iBAAiB,UAAY,CAAC,MAAQ,WAAW,EAAE,QAAU,CAAC,MAAQ,YAAY,EAAE,YAAc,CAAC,MAAQ,4BAA4B,EAAE,UAAY,CAAC,MAAQ,gBAAgB,CAAC,EAAE,YAAc,CAAC,mBAAqB,CAAC,MAAQ,uBAAuB,CAAC,EAAE,kBAAoB,CAAC,MAAQ,iBAAiB,UAAY,CAAC,MAAQ,WAAW,EAAE,QAAU,CAAC,MAAQ,YAAY,EAAE,YAAc,CAAC,MAAQ,4BAA4B,EAAE,aAAe,CAAC,MAAQ,8BAA8B,EAAE,UAAY,CAAC,MAAQ,gBAAgB,EAAE,OAAS,CAAC,MAAQ,4CAA4C,EAAE,sBAAwB,CAAC,MAAQ,8BAA8B,EAAE,SAAW,CAAC,MAAQ,sBAAsB,CAAC,EAAE,aAAe,CAAC,MAAQ,uBAAuB,YAAc,CAAC,MAAQ,oBAAoB,EAAE,WAAa,CAAC,MAAQ,oBAAoB,EAAE,iBAAmB,CAAC,MAAQ,iBAAiB,CAAC,EAAE,OAAS,CAAC,aAAe,CAAC,MAAQ,WAAW,CAAC,EAAE,YAAc,CAAC,MAAQ,WAAW,eAAiB,CAAC,MAAQ,WAAW,EAAE,eAAiB,CAAC,MAAQ,gBAAgB,EAAE,cAAgB,CAAC,MAAQ,mBAAmB,EAAE,aAAe,CAAC,MAAQ,iBAAiB,EAAE,UAAY,CAAC,MAAQ,gBAAgB,EAAE,WAAa,CAAC,MAAQ,SAAS,EAAE,YAAc,CAAC,MAAQ,+BAA+B,EAAE,YAAc,CAAC,MAAQ,YAAY,EAAE,aAAe,CAAC,MAAQ,6BAA6B,EAAE,aAAe,CAAC,MAAQ,aAAa,EAAE,aAAe,CAAC,MAAQ,aAAa,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,CAAC,EAAE,OAAS,CAAC,MAAQ,kBAAkB,KAAO,CAAC,MAAQ,oCAAoC,EAAE,KAAO,CAAC,MAAQ,2BAA2B,CAAC,EAAE,cAAgB,CAAC,MAAQ,gBAAgB,UAAY,CAAC,MAAQ,WAAW,EAAE,QAAU,CAAC,MAAQ,YAAY,CAAC,EAAE,qBAAuB,CAAC,MAAQ,mBAAmB,cAAgB,CAAC,MAAQ,0BAA0B,EAAE,SAAW,CAAC,MAAQ,2BAA2B,CAAC,EAAE,SAAW,CAAC,MAAQ,gBAAgB,UAAY,CAAC,MAAQ,cAAc,EAAE,WAAa,CAAC,MAAQ,mBAAmB,EAAE,SAAW,CAAC,MAAQ,SAAS,CAAC,EAAE,WAAa,CAAC,eAAiB,CAAC,MAAQ,iBAAiB,EAAE,aAAe,CAAC,MAAQ,gBAAgB,EAAE,WAAa,CAAC,MAAQ,sBAAsB,EAAE,eAAiB,CAAC,MAAQ,0BAA0B,CAAC,EAAE,YAAc,CAAC,MAAQ,+BAA+B,WAAa,CAAC,MAAQ,mBAAmB,CAAC,EAAE,YAAc,CAAC,MAAQ,aAAa,SAAW,CAAC,MAAQ,mDAAmD,CAAC,EAAE,aAAe,CAAC,MAAQ,8BAA8B,aAAe,CAAC,MAAQ,sBAAsB,EAAE,YAAc,CAAC,MAAQ,gDAAgD,EAAE,SAAW,CAAC,MAAQ,qDAAqD,EAAE,mBAAqB,CAAC,MAAQ,gCAAgC,CAAC,EAAE,kBAAoB,CAAC,MAAQ,gCAAgC,YAAc,CAAC,MAAQ,YAAY,EAAE,UAAY,CAAC,MAAQ,WAAW,EAAE,QAAU,CAAC,MAAQ,YAAY,CAAC,EAAE,aAAe,CAAC,MAAQ,cAAc,eAAiB,CAAC,MAAQ,kBAAkB,EAAE,iBAAmB,CAAC,MAAQ,kCAAkC,EAAE,iBAAmB,CAAC,MAAQ,uBAAuB,CAAC,EAAE,iBAAmB,CAAC,MAAQ,wBAAwB,UAAY,CAAC,MAAQ,WAAW,EAAE,QAAU,CAAC,MAAQ,YAAY,CAAC,EAAE,aAAe,CAAC,MAAQ,cAAc,WAAa,CAAC,MAAQ,mCAAmC,EAAE,YAAc,CAAC,MAAQ,UAAU,EAAE,YAAc,CAAC,MAAQ,WAAW,CAAC,EAAE,iBAAmB,CAAC,MAAQ,wBAAwB,gBAAkB,CAAC,MAAQ,iBAAiB,EAAE,OAAS,CAAC,MAAQ,OAAO,EAAE,QAAU,CAAC,MAAQ,4BAA4B,EAAE,OAAS,CAAC,MAAQ,cAAc,EAAE,SAAW,CAAC,MAAQ,iBAAiB,EAAE,iBAAmB,CAAC,MAAQ,iBAAiB,CAAC,EAAE,cAAgB,CAAC,MAAQ,aAAa,QAAU,CAAC,MAAQ,QAAQ,EAAE,qBAAuB,CAAC,MAAQ,0BAA0B,EAAE,OAAS,CAAC,MAAQ,SAAS,CAAC,EAAE,mBAAqB,CAAC,MAAQ,kBAAkB,KAAO,CAAC,MAAQ,OAAO,EAAE,IAAM,CAAC,MAAQ,OAAO,EAAE,IAAM,CAAC,MAAQ,QAAQ,EAAE,KAAO,CAAC,MAAQ,QAAQ,CAAC,EAAE,aAAe,CAAC,MAAQ,kBAAkB,GAAK,CAAC,MAAQ,UAAU,EAAE,UAAY,CAAC,MAAQ,aAAa,EAAE,UAAY,CAAC,MAAQ,YAAY,EAAE,MAAQ,CAAC,MAAQ,UAAU,EAAE,QAAU,CAAC,MAAQ,UAAU,EAAE,OAAS,CAAC,MAAQ,iBAAiB,EAAE,SAAW,CAAC,MAAQ,mBAAmB,EAAE,UAAY,CAAC,MAAQ,yBAAyB,EAAE,aAAe,CAAC,MAAQ,SAAS,EAAE,WAAa,CAAC,MAAQ,0CAA0C,CAAC,EAAE,eAAiB,CAAC,MAAQ,yBAAyB,YAAc,CAAC,MAAQ,0BAA0B,EAAE,UAAY,CAAC,MAAQ,iBAAiB,EAAE,SAAW,CAAC,MAAQ,gBAAgB,EAAE,WAAa,CAAC,MAAQ,+BAA+B,EAAE,aAAe,CAAC,MAAQ,gBAAgB,EAAE,aAAe,CAAC,MAAQ,eAAe,EAAE,UAAY,CAAC,MAAQ,qBAAqB,EAAE,KAAO,CAAC,MAAQ,UAAU,EAAE,UAAY,CAAC,MAAQ,cAAc,EAAE,QAAU,CAAC,MAAQ,QAAQ,CAAC,EAAE,kBAAoB,CAAC,MAAQ,eAAe,GAAK,CAAC,MAAQ,gBAAgB,EAAE,QAAU,CAAC,MAAQ,SAAS,EAAE,OAAS,CAAC,MAAQ,WAAW,CAAC,EAAE,aAAe,CAAC,MAAQ,aAAa,KAAO,CAAC,MAAQ,OAAO,EAAE,MAAQ,CAAC,MAAQ,UAAU,CAAC,EAAE,WAAa,CAAC,MAAQ,kBAAkB,WAAa,CAAC,MAAQ,qBAAqB,EAAE,WAAa,CAAC,MAAQ,8BAA8B,EAAE,SAAW,CAAC,MAAQ,wBAAwB,EAAE,cAAgB,CAAC,MAAQ,0BAA0B,CAAC,CAAC,EAAE,IAAM,CAAC,uBAAyB,CAAC,GAAK,KAAK,MAAQ,WAAW,SAAW,YAAY,QAAU,UAAU,KAAO,OAAO,YAAc,SAAS,WAAa,SAAS,OAAS,SAAS,aAAe,2CAA2C,EAAE,mBAAqB,CAAC,QAAU,UAAU,EAAE,oBAAsB,CAAC,uBAAyB,4CAA4C,wBAA0B,2BAA2B,wBAA0B,4BAA4B,iCAAmC,4CAA4C,gCAAkC,oDAAoD,oBAAsB,mCAAmC,qBAAuB,wCAAwC,EAAE,qCAAuC,CAAC,WAAa,aAAa,aAAe,gBAAgB,WAAa,gBAAgB,QAAU,aAAa,KAAO,UAAU,MAAQ,WAAW,KAAO,UAAU,aAAe,iBAAiB,OAAS,cAAc,OAAS,OAAO,QAAU,cAAc,gBAAkB,2BAA2B,YAAc,CAAC,QAAU,aAAa,IAAM,oBAAoB,QAAU,YAAY,MAAQ,WAAW,UAAY,YAAY,QAAU,eAAe,OAAS,gBAAgB,CAAC,EAAE,uBAAyB,CAAC,OAAS,CAAC,cAAgB,6BAA6B,cAAgB,wBAAwB,EAAE,QAAU,CAAC,aAAe,kBAAkB,cAAgB,sBAAsB,cAAgB,uBAAuB,eAAiB,yBAAyB,cAAgB,uBAAuB,cAAgB,oBAAoB,eAAiB,iBAAiB,aAAe,iBAAiB,aAAe,kBAAkB,EAAE,KAAO,CAAC,MAAQ,OAAO,WAAa,yBAAyB,YAAc,SAAS,UAAY,QAAQ,UAAY,YAAY,MAAQ,UAAU,EAAE,OAAS,CAAC,IAAM,SAAS,QAAU,aAAa,IAAM,oBAAoB,QAAU,YAAY,MAAQ,WAAW,UAAY,YAAY,QAAU,eAAe,OAAS,UAAU,EAAE,QAAU,CAAC,OAAS,0BAA0B,QAAU,eAAe,UAAY,kBAAkB,4BAA8B,uCAAuC,QAAU,yBAAyB,QAAU,eAAe,KAAO,kBAAkB,WAAa,UAAU,YAAc,kBAAkB,QAAU,WAAW,MAAQ,YAAY,YAAc,kBAAkB,cAAgB,uBAAuB,SAAW,iBAAiB,WAAa,uBAAuB,qBAAuB,0BAA0B,QAAU,aAAa,gCAAkC,mBAAmB,+BAAiC,qCAAqC,iBAAmB,YAAY,SAAW,QAAQ,cAAgB,mDAAmD,eAAiB,kHAAkH,gBAAkB,oDAAsD,EAAE,eAAiB,CAAC,OAAS,OAAO,GAAK,KAAK,YAAc,SAAS,UAAY,QAAQ,WAAa,cAAc,OAAS,cAAc,YAAc,YAAY,KAAO,CAAC,QAAU,aAAa,UAAY,iBAAiB,IAAM,SAAS,SAAW,mBAAmB,CAAC,EAAE,YAAc,CAAC,KAAO,eAAe,cAAgB,mBAAmB,EAAE,YAAc,CAAC,MAAQ,eAAe,YAAc,oBAAoB,CAAC,EAAE,kBAAoB,CAAC,QAAU,SAAS,QAAU,WAAW,YAAc,eAAe,SAAW,SAAS,WAAa,aAAa,gBAAkB,yBAAyB,SAAW,eAAe,iBAAmB,iCAAiC,sBAAwB,0BAA0B,KAAO,WAAW,OAAS,OAAO,UAAY,gBAAgB,0BAA4B,uBAAuB,WAAa,sBAAsB,eAAiB,wBAAwB,IAAM,QAAQ,iBAAmB,CAAC,KAAO,mDAAmD,EAAE,eAAiB,iBAAiB,MAAQ,UAAU,KAAO,WAAW,KAAO,cAAc,aAAe,iBAAiB,iBAAmB,MAAM,cAAgB,iBAAiB,eAAiB,8BAA8B,WAAa,mCAAmC,eAAiB,sBAAsB,WAAa,iBAAiB,YAAc,mBAAmB,IAAM,SAAS,kBAAoB,uCAAuC,EAAE,uBAAyB,CAAC,SAAW,SAAS,WAAa,aAAa,KAAO,UAAU,EAAE,4BAA8B,CAAC,KAAO,+CAA+C,KAAO,SAAS,cAAgB,iBAAiB,aAAe,YAAY,wBAA0B,0OAA0O,2BAA6B,gQAAgQ,EAAE,sBAAwB,CAAC,MAAQ,2BAA2B,QAAU,aAAa,QAAU,yBAAyB,QAAU,uBAAuB,UAAY,8BAA8B,KAAO,CAAC,KAAO,mcAAmc,CAAC,EAAE,gBAAkB,CAAC,cAAgB,CAAC,IAAM,eAAe,QAAU,6BAA6B,MAAQ,uBAAuB,KAAO,wBAAwB,EAAE,OAAS,CAAC,SAAW,aAAa,OAAS,YAAY,sBAAwB,gCAAgC,qBAAuB,sBAAsB,2BAA6B,yCAAyC,EAAE,aAAe,+BAA+B,EAAE,eAAiB,CAAC,aAAe,kBAAkB,OAAS,OAAO,WAAa,cAAc,SAAW,cAAc,QAAU,aAAa,YAAc,SAAS,WAAa,+BAA+B,SAAW,WAAW,QAAU,WAAW,cAAgB,sBAAsB,eAAiB,4BAA4B,EAAE,eAAiB,CAAC,aAAe,kBAAkB,iBAAmB,qBAAqB,OAAS,OAAO,MAAQ,WAAW,SAAW,cAAc,YAAc,aAAa,QAAU,WAAW,SAAW,WAAW,QAAU,WAAW,cAAgB,sBAAsB,eAAiB,4BAA4B,EAAE,qBAAuB,CAAC,MAAQ,kBAAkB,QAAU,4CAA4C,WAAa,sBAAsB,YAAc,kFAAkF,eAAiB,8DAA8D,QAAU,SAAS,cAAgB,cAAc,YAAc,gBAAgB,gBAAkB,eAAe,cAAgB,eAAe,sBAAwB,4CAA4C,EAAE,wBAA0B,CAAC,YAAc,aAAa,aAAe,gBAAgB,MAAQ,kBAAkB,SAAW,iBAAiB,QAAU,UAAU,UAAY,eAAe,MAAQ,UAAU,KAAO,aAAa,QAAU,WAAW,gBAAkB,cAAc,KAAO,oBAAoB,OAAS,SAAS,YAAc,SAAS,oBAAsB,CAAC,KAAO,sCAAsC,EAAE,MAAQ,QAAQ,WAAa,eAAe,WAAa,QAAQ,MAAQ,WAAW,WAAa,kBAAkB,SAAW,eAAe,aAAe,qBAAqB,EAAE,6BAA+B,CAAC,oBAAsB,yBAAyB,YAAc,kBAAkB,YAAc,CAAC,KAAO,6BAA6B,EAAE,WAAa,eAAe,mBAAqB,0BAA0B,gBAAkB,0CAA0C,aAAe,kBAAkB,mBAAqB,gBAAgB,gBAAkB,mBAAmB,cAAgB,oBAAoB,WAAa,cAAc,cAAgB,gBAAgB,+BAAiC,2DAA2D,EAAE,wBAA0B,CAAC,gBAAkB,+DAA+D,gBAAkB,2BAA2B,WAAa,iBAAiB,QAAU,0BAA0B,gBAAkB,+DAA+D,gBAAkB,CAAC,gBAAkB,CAAC,KAAO,6JAA6J,EAAE,WAAa,CAAC,KAAO,wFAAwF,EAAE,KAAO,qBAAqB,WAAa,iEAAiE,SAAW,8DAA8D,eAAiB,8BAA8B,SAAW,4BAA4B,EAAE,gBAAkB,2EAA2E,qBAAuB,oBAAoB,eAAiB,CAAC,gBAAkB,4EAA4E,iBAAmB,8JAA8J,kBAAoB,uCAAuC,qBAAuB,sDAAsD,eAAiB,aAAa,eAAiB,aAAa,sBAAwB,oBAAoB,eAAiB,iBAAiB,kBAAoB,wBAAwB,aAAe,uBAAuB,SAAW,sBAAsB,iBAAmB,qBAAqB,oBAAsB,wBAAwB,QAAU,CAAC,cAAgB,gBAAgB,EAAE,UAAY,CAAC,MAAQ,2MAA6M,MAAQ,gCAAgC,EAAE,KAAO,CAAC,MAAQ,yUAAyU,EAAE,YAAc,CAAC,MAAQ,2OAA6O,eAAiB,iSAAiS,oBAAsB,6CAA6C,iBAAmB,sGAAsG,EAAE,SAAW,CAAC,MAAQ,uBAAuB,EAAE,eAAiB,CAAC,MAAQ,gLAAgL,QAAU,yDAAyD,oBAAsB,yBAAyB,iBAAmB,gTAAgT,EAAE,uBAAyB,CAAC,MAAQ,2LAA2L,QAAU,yDAAyD,oBAAsB,yBAAyB,iBAAmB;AAAA;AAAA,+fAAukB,EAAE,WAAa,CAAC,MAAQ,gLAAgL,QAAU,qCAAqC,oBAAsB,kCAAkC,iBAAmB,iOAAiO,EAAE,YAAc,CAAC,MAAQ,gLAAgL,QAAU,sBAAsB,oBAAsB,kCAAkC,iBAAmB,yMAAyM,EAAE,iBAAmB,CAAC,MAAQ,gLAAgL,oBAAsB,yBAAyB,iBAAmB,kPAAkP,EAAE,iBAAmB,CAAC,MAAQ,iKAAiK,QAAU,oCAAoC,oBAAsB,+BAA+B,iBAAmB;AAAA;AAAA;AAAA;AAAA,uHAAyS,eAAiB,mBAAmB,mBAAqB,sBAAsB,EAAE,OAAS,CAAC,MAAQ,iKAAiK,QAAU,oCAAoC,oBAAsB,+BAA+B,iBAAmB;AAAA;AAAA;AAAA;AAAA,uHAAyS,eAAiB,mBAAmB,mBAAqB,sBAAsB,EAAE,oBAAsB,CAAC,MAAQ,uBAAuB,EAAE,qBAAuB,CAAC,MAAQ,uBAAuB,EAAE,oBAAsB,CAAC,MAAQ,uBAAuB,EAAE,qBAAuB,CAAC,MAAQ,uBAAuB,EAAE,sBAAwB,CAAC,MAAQ,uBAAuB,EAAE,qBAAuB,CAAC,MAAQ,uBAAuB,EAAE,gBAAkB,CAAC,MAAQ,uBAAuB,EAAE,YAAc,CAAC,MAAQ,4aAA4a,QAAU,0CAA0C,oBAAsB,yBAAyB,iBAAmB,8UAA8U,eAAiB,CAAC,KAAO,2QAA2Q,KAAO,kHAAkH,EAAE,YAAc,CAAC,KAAO,8JAA8J,oBAAsB,6CAA6C,iBAAmB,sGAAsG,CAAC,EAAE,cAAgB,CAAC,MAAQ,mfAAmf,QAAU,2CAA2C,oBAAsB,yBAAyB,iBAAmB,0RAA0R,EAAE,SAAW,CAAC,MAAQ,uBAAuB,EAAE,WAAa,CAAC,MAAQ,gaAAga,QAAU,qCAAqC,oBAAsB,yBAAyB,iBAAmB,uUAAuU,eAAiB,CAAC,KAAO,qQAAqQ,KAAO,4GAA4G,EAAE,YAAc,CAAC,KAAO,6JAA6J,CAAC,EAAE,WAAa,CAAC,MAAQ,iXAAiX,EAAE,cAAgB,CAAC,MAAQ,2WAA2W,QAAU,oDAAoD,oBAAsB,yBAAyB,iBAAmB,sPAAsP,eAAiB,CAAC,KAAO,sQAAsQ,CAAC,EAAE,cAAgB,CAAC,MAAQ,qXAAqX,EAAE,QAAU,CAAC,MAAQ,8WAA8W,QAAU,sCAAsC,oBAAsB,yBAAyB,iBAAmB,2RAA2R,EAAE,MAAQ,CAAC,MAAQ,+cAA+c,QAAU,oCAAoC,oBAAsB,yBAAyB,iBAAmB,4QAA4Q,EAAE,SAAW,CAAC,MAAQ,gXAAgX,QAAU,uCAAuC,oBAAsB,yBAAyB,iBAAmB,mRAAmR,EAAE,WAAa,CAAC,MAAQ,oXAAoX,QAAU,iCAAiC,oBAAsB,yBAAyB,iBAAmB,0TAA0T,EAAE,aAAe,CAAC,MAAQ,qXAAqX,QAAU,oCAAoC,oBAAsB,yBAAyB,iBAAmB,mTAAmT,EAAE,KAAO,CAAC,MAAQ,0WAA0W,QAAU,0BAA0B,oBAAsB,yBAAyB,iBAAmB,6RAA6R,EAAE,SAAW,CAAC,MAAQ,0WAA0W,QAAU,mCAAmC,oBAAsB,iCAAiC,iBAAmB,sPAAsP,EAAE,KAAO,CAAC,MAAQ,4WAA4W,QAAU,2BAA2B,oBAAsB,yBAAyB,iBAAmB,iSAAiS,EAAE,SAAW,CAAC,MAAQ,+WAA+W,QAAU,8BAA8B,oBAAsB,yBAAyB,iBAAmB,uSAAuS,EAAE,MAAQ,CAAC,MAAQ,kXAAkX,QAAU,6BAA6B,oBAAsB,yBAAyB,iBAAmB,qSAAqS,EAAE,MAAQ,CAAC,MAAQ,gXAAgX,QAAU,2BAA2B,oBAAsB,yBAAyB,iBAAmB,0PAA0P,CAAC,CAAC,EAAE,gBAAkB,CAAC,OAAS,yBAAyB,gBAAkB,iBAAiB,QAAU,aAAa,MAAQ,CAAC,MAAQ,CAAC,SAAW,oBAAoB,WAAa,+BAA+B,iBAAmB,sBAAsB,QAAU,mBAAmB,EAAE,aAAe,CAAC,SAAW,YAAY,WAAa,0BAA0B,iBAAmB,aAAa,aAAe,QAAQ,QAAU,gBAAgB,EAAE,aAAe,CAAC,SAAW,mLAAuL,WAAa,gJAAkJ,CAAC,EAAE,gBAAkB,CAAC,QAAU,wCAAwC,iBAAmB,mFAAmF,mBAAqB,uCAAuC,mBAAqB,iBAAiB,EAAE,oBAAsB,CAAC,oBAAsB,+CAA+C,SAAW,sBAAsB,MAAQ,uBAAuB,EAAE,sBAAwB,CAAC,iBAAmB,oCAAoC,0BAA4B,4EAA4E,cAAgB,gCAAgC,oBAAsB,oDAAoD,SAAW,QAAQ,MAAQ,OAAO,EAAE,qBAAuB,CAAC,UAAY,yLAAyL,EAAE,0BAA4B,CAAC,UAAY,4EAA4E,SAAW,2IAA2I,EAAE,OAAS,CAAC,QAAU,QAAQ,KAAO,oCAAoC,kBAAoB,wBAAwB,6BAA+B,yEAAyE,EAAE,cAAgB,CAAC,kBAAoB,wBAAwB,uBAAyB,yEAAyE,EAAE,aAAe,CAAC,KAAO,CAAC,MAAQ,2BAA2B,IAAM,gDAAgD,MAAQ,CAAC,MAAQ,4BAA4B,IAAM,wCAAwC,EAAE,eAAiB,uBAAuB,EAAE,eAAiB,CAAC,gBAAkB,CAAC,OAAS,WAAW,EAAE,SAAW,CAAC,OAAS,yBAAyB,mBAAqB,yCAAyC,aAAe,mDAAmD,kBAAoB,sDAAsD,iBAAmB,yDAAyD,WAAa,6EAA6E,EAAE,WAAa,CAAC,OAAS,kCAAkC,mBAAqB,mBAAmB,eAAiB,wDAAwD,kBAAoB,mDAAmD,QAAU,yDAAyD,CAAC,CAAC,EAAE,SAAW,CAAC,YAAc,CAAC,QAAU,QAAQ,KAAO,qCAAqC,EAAE,eAAiB,CAAC,QAAU,wBAAwB,KAAO,wEAAwE,CAAC,EAAE,wBAA0B,CAAC,sBAAwB,2BAA2B,UAAY,CAAC,QAAU,8BAA8B,KAAO,0EAA0E,EAAE,cAAgB,CAAC,QAAU,kCAAkC,KAAO,+DAA+D,CAAC,CAAC,EAAE,sBAAwB,CAAC,QAAU,WAAW,OAAS,kBAAkB,OAAS,kBAAkB,YAAc,CAAC,UAAY,mBAAmB,UAAY,iBAAiB,QAAU,iBAAiB,QAAU,cAAc,CAAC,EAAE,qBAAuB,CAAC,QAAU,YAAY,KAAO,QAAQ,aAAe,cAAc,QAAU,eAAe,YAAc,kBAAkB,MAAQ,WAAW,SAAW,gBAAgB,kBAAoB,CAAC,KAAO,sDAAsD,UAAY,2LAA2L,QAAU,+BAA+B,CAAC,EAAE,4BAA8B,CAAC,YAAc,SAAS,WAAa,aAAa,OAAS,UAAU,SAAW,QAAQ,WAAa,cAAc,WAAa,0BAA0B,WAAa,aAAa,uBAAyB,0BAA0B,wBAA0B,qBAAqB,sBAAwB,+BAA+B,2BAA6B,cAAc,sBAAwB,UAAU,gBAAkB,qBAAqB,MAAQ,YAAY,2BAA6B,8BAA8B,mBAAqB,oDAAoD,EAAE,0BAA4B,CAAC,kBAAoB,qBAAqB,cAAgB,oBAAoB,EAAE,wBAA0B,CAAC,SAAW,CAAC,MAAQ,cAAc,aAAe,iBAAiB,UAAY,cAAc,EAAE,UAAY,CAAC,MAAQ,qBAAqB,YAAc,QAAQ,iBAAmB,WAAW,kBAAoB,eAAe,YAAc,mBAAmB,cAAgB,wCAAwC,WAAa,gBAAgB,gBAAkB,8BAA8B,cAAgB,gCAAgC,eAAiB,mBAAmB,EAAE,QAAU,YAAY,OAAS,CAAC,YAAc,0BAA0B,aAAe,uBAAuB,CAAC,EAAE,wBAA0B,CAAC,MAAQ,eAAe,cAAgB,aAAa,YAAc,SAAS,OAAS,SAAS,EAAE,gCAAkC,CAAC,MAAQ,gBAAgB,YAAc,QAAQ,eAAiB,QAAQ,gBAAkB,WAAW,cAAgB,SAAS,iBAAmB,eAAe,oBAAsB,uBAAuB,eAAiB,0BAA0B,eAAiB,uBAAuB,aAAe,mBAAmB,MAAQ,YAAY,iBAAmB,mBAAmB,KAAO,QAAQ,gBAAkB,gBAAgB,mBAAqB,8BAA8B,mBAAqB,gCAAgC,aAAe,cAAc,OAAS,UAAU,IAAM,SAAS,KAAO,OAAO,EAAE,6BAA+B,CAAC,MAAQ,gBAAgB,WAAa,eAAe,eAAiB,+CAA+C,gBAAkB,kCAAkC,aAAe,qBAAqB,EAAE,oBAAsB,CAAC,MAAQ,+BAA+B,oBAAsB,aAAa,gBAAkB,WAAW,eAAiB,cAAc,EAAE,eAAiB,CAAC,MAAQ,uBAAuB,KAAO,QAAQ,YAAc,SAAS,OAAS,OAAO,EAAE,gBAAkB,CAAC,oBAAsB,uBAAuB,eAAiB,oCAAoC,EAAE,oBAAsB,CAAC,eAAiB,oCAAoC,EAAE,gCAAkC,CAAC,eAAiB,0CAA0C,EAAE,8BAAgC,CAAC,MAAQ,kBAAkB,oBAAsB,kBAAkB,YAAc,cAAc,kBAAoB,YAAY,eAAiB,gBAAgB,4BAA8B,sBAAsB,0BAA4B,aAAa,8BAAgC,2BAA2B,iBAAmB,iCAAiC,gBAAkB,QAAQ,iBAAmB,KAAK,wBAA0B,oBAAoB,IAAM,QAAQ,0BAA4B,eAAe,uBAAyB,gBAAgB,gCAAkC,oBAAoB,EAAE,gCAAkC,CAAC,QAAU,qBAAqB,SAAW,aAAa,aAAe,iBAAiB,iBAAmB,CAAC,KAAO,wDAAwD,EAAE,OAAS,eAAe,QAAU,cAAc,UAAY,uBAAuB,WAAa,yBAAyB,EAAE,8BAAgC,CAAC,QAAU,qBAAqB,UAAY,aAAa,UAAY,aAAa,cAAgB,cAAc,EAAE,oCAAsC,CAAC,oBAAsB,mBAAmB,cAAgB,8BAA8B,YAAc,cAAc,eAAiB,sBAAsB,gBAAkB,YAAY,uBAAyB,aAAa,cAAgB,iBAAiB,cAAgB,kBAAkB,gBAAkB,kBAAkB,qBAAuB,4BAA4B,WAAa,4BAA4B,SAAW,CAAC,KAAO,wEAA4E,EAAE,aAAe,uCAAuC,WAAa,CAAC,KAAO,iGAAqG,EAAE,sBAAwB,kCAAkC,oBAAsB,CAAC,KAAO,uEAA2E,CAAC,EAAE,iCAAmC,CAAC,YAAc,OAAO,gBAAkB,eAAe,aAAe,uBAAuB,WAAa,SAAS,eAAiB,uBAAuB,eAAiB,WAAW,aAAe,CAAC,KAAO,+NAA+N,EAAE,cAAgB,gBAAgB,WAAa,OAAO,iBAAmB,sBAAsB,YAAc,CAAC,KAAO,mDAAmD,EAAE,mBAAqB,sCAAsC,WAAa,SAAS,UAAY,OAAO,eAAiB,eAAe,UAAY,SAAS,kBAAoB,CAAC,KAAO,8CAA8C,CAAC,EAAE,kCAAoC,CAAC,YAAc,2CAA2C,qBAAuB,wDAAwD,oBAAsB,qHAAqH,qBAAuB,cAAc,aAAe,SAAS,8BAAgC,CAAC,WAAa,kBAAkB,UAAY,iDAAiD,CAAC,EAAE,kCAAoC,CAAC,UAAY,OAAO,eAAiB,CAAC,KAAO,8GAA8G,EAAE,gBAAkB,gBAAgB,sBAAwB,CAAC,KAAO,iMAAiM,CAAC,EAAE,8BAAgC,CAAC,uBAAyB,gBAAgB,sBAAwB,eAAe,iBAAmB,OAAO,wBAA0B,mBAAmB,qBAAuB,aAAa,EAAE,2BAA6B,CAAC,YAAc,4BAA4B,EAAE,qBAAuB,CAAC,WAAa,2BAA2B,YAAc,iBAAiB,YAAc,aAAa,gBAAkB,eAAe,kBAAoB,YAAY,gBAAkB,mBAAmB,MAAQ,aAAa,MAAQ,gBAAgB,QAAU,SAAS,WAAa,aAAa,YAAc,CAAC,KAAO,sQAAsQ,EAAE,KAAO,CAAC,SAAW,iOAAiO,WAAa,+BAA+B,YAAc,2BAA2B,EAAE,WAAa,WAAW,aAAe,gBAAgB,gBAAkB,uBAAuB,EAAE,+BAAiC,CAAC,iBAAmB,qBAAqB,gBAAkB,QAAQ,mBAAqB,oBAAoB,aAAe,0BAA0B,cAAgB,wBAAwB,oBAAsB,uBAAuB,eAAiB,4CAA4C,eAAiB,iDAAiD,OAAS,QAAQ,UAAY,WAAW,WAAa,eAAe,iBAAmB,YAAY,kBAAoB,mBAAmB,oBAAsB,wCAAwC,gBAAkB,QAAQ,iBAAmB,gBAAgB,mBAAqB,8BAA8B,mBAAqB,gCAAgC,OAAS,OAAO,KAAO,MAAM,OAAS,SAAS,QAAU,QAAQ,YAAc,+BAA+B,UAAY,WAAW,EAAE,8BAAgC,CAAC,cAAgB,cAAc,YAAc,SAAS,MAAQ,WAAW,YAAc,WAAW,YAAc,SAAS,WAAa,QAAQ,IAAM,QAAQ,cAAgB,iBAAiB,WAAa,iBAAiB,EAAE,+BAAiC,CAAC,OAAS,QAAQ,uBAAyB,4BAA4B,aAAe,eAAe,mBAAqB,yBAAyB,aAAe,mBAAmB,YAAc,0BAA0B,QAAU,CAAC,QAAU,CAAC,MAAQ,eAAe,EAAE,QAAU,CAAC,MAAQ,iBAAiB,EAAE,SAAW,CAAC,MAAQ,gBAAgB,CAAC,EAAE,OAAS,OAAO,eAAiB,oBAAoB,EAAE,0BAA4B,CAAC,WAAa,eAAe,aAAe,gBAAgB,YAAc,0BAA0B,eAAiB,uBAAuB,gBAAkB,iBAAiB,aAAe,mBAAmB,EAAE,2BAA6B,CAAC,KAAO,QAAQ,OAAS,QAAQ,SAAW,SAAS,SAAW,SAAS,YAAc,WAAW,QAAU,gBAAgB,SAAW,WAAW,kBAAoB,gBAAgB,UAAY,iBAAiB,SAAW,kBAAkB,IAAM,MAAM,eAAiB,eAAe,YAAc,+BAA+B,kBAAoB,uBAAuB,YAAc,oBAAoB,GAAK,KAAK,oBAAsB,0BAA0B,MAAQ,YAAY,WAAa,aAAa,EAAE,gCAAkC,CAAC,kBAAoB,uBAAuB,YAAc,oBAAoB,GAAK,KAAK,oBAAsB,0BAA0B,MAAQ,YAAY,WAAa,aAAa,EAAE,iCAAmC,CAAC,uBAAyB,yBAAyB,WAAa,iFAAiF,YAAc,qDAAqD,SAAW,yEAAyE,KAAO,OAAO,GAAK,KAAK,SAAW,YAAY,eAAiB,kBAAkB,iBAAmB,aAAa,aAAe,aAAa,cAAgB,cAAc,QAAU,mBAAmB,QAAU,OAAO,KAAO,CAAC,SAAW,cAAc,gBAAkB,+BAA+B,aAAe,uCAAuC,WAAa,SAAS,MAAQ,mBAAmB,gBAAkB,kBAAkB,EAAE,mBAAqB,sBAAsB,4BAA8B,oDAAoD,SAAW,iBAAiB,cAAgB,aAAa,UAAY,kBAAkB,qBAAuB,6CAA6C,cAAgB,eAAe,eAAiB,CAAC,KAAO,mrEAAqrE,EAAE,YAAc,0BAA0B,mBAAqB,4BAA4B,cAAgB,wBAAwB,SAAW,QAAQ,QAAU,aAAa,YAAc,CAAC,eAAiB,UAAU,YAAc,wBAAwB,OAAS,OAAO,KAAO,KAAK,OAAS,SAAS,QAAU,QAAQ,YAAc,+BAA+B,SAAW,iBAAiB,aAAe,WAAW,EAAE,YAAc,CAAC,eAAiB,4BAA4B,yBAA2B,eAAe,YAAc,SAAS,YAAc,WAAW,UAAY,0BAA0B,WAAa,2BAA2B,SAAW,YAAY,SAAW,aAAa,QAAU,WAAW,SAAW,cAAc,eAAiB,2BAA2B,gBAAkB,4BAA4B,YAAc,kBAAkB,SAAW,kBAAkB,cAAgB,2BAA2B,oBAAsB,mCAAmC,mBAAqB,wBAAwB,iBAAmB,cAAc,SAAW,aAAa,kBAAoB,oBAAoB,YAAc,qCAAqC,aAAe,iBAAiB,gBAAkB,WAAW,aAAe,OAAO,EAAE,QAAU,CAAC,WAAa,QAAQ,IAAM,eAAe,mBAAqB,kBAAkB,MAAQ,qBAAqB,WAAa,uBAAuB,aAAe,uBAAuB,OAAS,4CAA4C,CAAC,EAAE,2BAA6B,CAAC,iBAAmB,qBAAqB,cAAgB,iBAAiB,MAAQ,WAAW,OAAS,QAAQ,EAAE,yBAA2B,CAAC,MAAQ,kBAAkB,MAAQ,6DAA6D,iBAAmB,aAAa,mBAAqB,eAAe,sBAAwB,qBAAqB,cAAgB,aAAa,EAAE,oBAAsB,CAAC,MAAQ,8BAA8B,MAAQ,kKAAkK,kBAAoB,6BAA6B,OAAS,6FAA6F,KAAO,OAAO,WAAa,WAAW,MAAQ,aAAa,MAAQ,gBAAgB,eAAiB,yBAAyB,eAAiB,iCAAiC,sBAAwB,4CAA4C,uBAAyB,uCAAuC,uBAAyB,0DAA0D,+BAAiC,8BAA8B,oCAAsC,qGAAqG,EAAE,yBAA2B,CAAC,SAAW,CAAC,aAAe,CAAC,WAAa,sBAAsB,UAAY,sIAAsI,EAAE,iBAAmB,gBAAgB,WAAa,mBAAmB,UAAY,mIAAmI,YAAc,CAAC,WAAa,wBAAwB,UAAY,8HAA8H,CAAC,EAAE,QAAU,CAAC,IAAM,yBAAyB,YAAc,0HAA0H,KAAO,qBAAqB,EAAE,OAAS,CAAC,IAAM,yBAAyB,YAAc,gFAAgF,KAAO,oBAAoB,EAAE,KAAO,CAAC,IAAM,uBAAuB,YAAc,wRAAwR,KAAO,kBAAkB,EAAE,MAAQ,CAAC,IAAM,yBAAyB,YAAc,wEAAwE,KAAO,sBAAsB,EAAE,MAAQ,CAAC,IAAM,wBAAwB,YAAc,ySAAyS,KAAO,kBAAkB,EAAE,MAAQ,CAAC,IAAM,uBAAuB,YAAc,qIAAqI,KAAO,mBAAmB,EAAE,aAAe,CAAC,IAAM,gCAAgC,YAAc,sMAAsM,KAAO,qCAAqC,EAAE,WAAa,CAAC,IAAM,4BAA4B,YAAc,yEAAyE,KAAO,oCAAoC,EAAE,MAAQ,CAAC,IAAM,uBAAuB,YAAc,qHAAqH,KAAO,0BAA0B,EAAE,OAAS,CAAC,IAAM,oCAAoC,YAAc,6IAA6I,KAAO,wBAAwB,EAAE,UAAY,CAAC,IAAM,8BAA8B,YAAc,2JAA2J,KAAO,0BAA0B,EAAE,OAAS,CAAC,IAAM,6BAA6B,YAAc,uNAAuN,KAAO,wBAAwB,EAAE,kBAAoB,CAAC,IAAM,2CAA2C,YAAc,8FAA8F,KAAO,0CAA0C,EAAE,cAAgB,CAAC,IAAM,8BAA8B,YAAc,iPAAiP,KAAO,gCAAgC,EAAE,UAAY,CAAC,IAAM,4BAA4B,YAAc,oIAAoI,KAAO,uBAAuB,EAAE,YAAc,CAAC,IAAM,kCAAkC,YAAc;AAAA,EAAolB,KAAO,6BAA6B,EAAE,QAAU,CAAC,YAAc,wBAAwB,KAAO,6BAA6B,IAAM,aAAa,EAAE,QAAU,CAAC,YAAc,6IAA6I,IAAM,wBAAwB,KAAO,yBAAyB,EAAE,QAAU,CAAC,IAAM,0BAA0B,YAAc,wFAAwF,KAAO,0BAA0B,EAAE,cAAgB,CAAC,IAAM,gCAAgC,YAAc,yPAAyP,KAAO,+BAA+B,CAAC,EAAE,8BAAgC,CAAC,QAAU,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAAiZ,EAAE,OAAS,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAA8Y,EAAE,MAAQ,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAA2Y,EAAE,MAAQ,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuY,EAAE,WAAa,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAiW,EAAE,MAAQ,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAAsZ,EAAE,OAAS,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAA6Z,EAAE,UAAY,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAqa,EAAE,OAAS,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAA+a,EAAE,kBAAoB,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAA+Y,EAAE,cAAgB,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAA0Z,EAAE,UAAY,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAAqa,EAAE,YAAc,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAAob,EAAE,QAAU,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAge,EAAE,QAAU,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA,YAA0T,EAAE,QAAU,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAAkZ,EAAE,cAAgB,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAAwb,CAAC,EAAE,YAAc,CAAC,mBAAqB,oBAAoB,WAAa,sBAAsB,sBAAwB,oCAAoC,YAAc,kBAAkB,QAAU,WAAW,QAAU,eAAe,cAAgB,gBAAgB,KAAO,iBAAiB,gBAAkB,sBAAsB,WAAa,kBAAkB,sBAAwB,2BAA2B,QAAU,QAAQ,EAAE,cAAgB,CAAC,YAAc,sKAAsK,YAAc,CAAC,QAAU,gBAAgB,SAAW,CAAC,KAAO,0BAA0B,EAAE,YAAc,4BAA4B,EAAE,eAAiB,CAAC,QAAU,iBAAiB,SAAW,CAAC,KAAO,0BAA0B,CAAC,EAAE,cAAgB,CAAC,QAAU,gCAAgC,SAAW,CAAC,KAAO,0BAA0B,WAAa,cAAc,IAAM,OAAO,WAAa,aAAa,aAAe,yBAAyB,iBAAmB,yBAAyB,YAAc,2BAA2B,CAAC,EAAE,YAAc,CAAC,QAAU,YAAY,EAAE,cAAgB,CAAC,QAAU,8BAA8B,iBAAmB,qBAAqB,oBAAsB,yBAAyB,EAAE,SAAW,CAAC,QAAU,SAAS,KAAO,UAAU,cAAgB,iBAAiB,UAAY,YAAY,QAAU,YAAY,EAAE,kBAAoB,mCAAmC,eAAiB,mDAAmD,gBAAkB,+BAA+B,2BAA6B,SAAS,OAAS,CAAC,qBAAuB,yEAAyE,4BAA8B,2BAA2B,iBAAmB,aAAa,sBAAwB,2CAA2C,iBAAmB,uBAAuB,wBAA0B,qBAAqB,WAAa,4CAA4C,EAAE,gCAAkC,kBAAkB,yBAA2B,eAAe,yBAA2B,gBAAgB,EAAE,2BAA6B,CAAC,OAAS,WAAW,QAAU,qBAAqB,SAAW,UAAU,SAAW,mBAAmB,mBAAqB,yBAAyB,kBAAoB,0EAA0E,EAAE,yBAA2B,CAAC,YAAc,WAAW,kBAAoB,WAAW,EAAE,mBAAqB,CAAC,oBAAsB,CAAC,YAAc,CAAC,iBAAmB,UAAU,gBAAkB,gBAAgB,aAAe,aAAa,cAAgB,QAAQ,CAAC,EAAE,kBAAoB,CAAC,YAAc,CAAC,cAAgB,2BAA2B,IAAM,kBAAkB,gBAAkB,yBAAyB,cAAgB,gBAAgB,CAAC,CAAC,EAAE,6BAA+B,CAAC,eAAiB,CAAC,KAAO,8FAA8F,iBAAmB,kBAAkB,WAAa,WAAW,MAAQ,UAAU,SAAW,eAAe,EAAE,SAAW,CAAC,oBAAsB,YAAY,gBAAkB,qBAAqB,YAAc,aAAa,aAAe,UAAU,aAAe,aAAa,MAAQ,eAAe,SAAW,MAAM,EAAE,kBAAoB,oDAAoD,iBAAmB,CAAC,YAAc,0MAA0M,MAAQ,aAAa,MAAQ,wBAAwB,EAAE,cAAgB,CAAC,aAAe,cAAc,eAAiB,CAAC,YAAc,iJAAiJ,MAAQ,eAAe,EAAE,mBAAqB,CAAC,YAAc,gJAAgJ,MAAQ,cAAc,EAAE,YAAc,mFAAmF,iBAAmB,CAAC,YAAc,0EAA0E,MAAQ,eAAe,EAAE,YAAc,CAAC,YAAc,kGAAkG,MAAQ,mCAAmC,SAAW,0BAA0B,EAAE,YAAc,CAAC,YAAc,+CAA+C,MAAQ,gCAAgC,SAAW,sBAAsB,EAAE,aAAe,CAAC,YAAc,wCAAwC,MAAQ,4BAA4B,EAAE,MAAQ,iBAAiB,iBAAmB,CAAC,YAAc,kFAAkF,MAAQ,kBAAkB,CAAC,EAAE,WAAa,cAAc,cAAgB,0BAA0B,YAAc,CAAC,KAAO,qaAAua,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0HAA0V,EAAE,aAAe,oBAAoB,kBAAoB,qBAAqB,oBAAsB,2BAA2B,mBAAqB,CAAC,KAAO,iGAAiG,iBAAmB,aAAa,WAAa,SAAS,MAAQ,WAAW,cAAgB,0BAA0B,EAAE,mBAAqB,CAAC,YAAc,wCAAwC,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mDAAkqB,MAAQ,oBAAoB,EAAE,MAAQ,kBAAkB,eAAiB,QAAQ,aAAe,CAAC,YAAc,CAAC,KAAO,+PAA+P,EAAE,iBAAmB,qDAAqD,iBAAmB,iDAAiD,MAAQ,cAAc,SAAW,gBAAgB,YAAc,gBAAgB,YAAc,iCAAiC,mBAAqB,2CAA2C,QAAU,sBAAsB,MAAQ,gBAAgB,WAAa,UAAU,CAAC,EAAE,2BAA6B,CAAC,iBAAmB,gCAAgC,aAAe,CAAC,YAAc,4JAA4J,MAAQ,YAAY,EAAE,YAAc,CAAC,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAud,EAAE,aAAe,CAAC,YAAc,4FAA4F,MAAQ,8BAA8B,WAAa,cAAc,iBAAmB,0CAA0C,eAAiB,gCAAgC,UAAY,yBAAyB,EAAE,WAAa,CAAC,WAAa,oBAAoB,YAAc,6FAA6F,MAAQ,aAAa,EAAE,aAAe,CAAC,YAAc,qJAAqJ,MAAQ,mBAAmB,EAAE,YAAc,yBAAyB,gBAAkB,CAAC,iBAAmB,CAAC,YAAc,uGAAuG,MAAQ,SAAS,cAAgB,gBAAgB,YAAc,cAAc,UAAY,eAAe,MAAQ,6BAA6B,EAAE,aAAe,WAAW,oBAAsB,cAAc,cAAgB,mBAAmB,cAAgB,WAAW,eAAiB,aAAa,SAAW,UAAU,eAAiB,uBAAuB,MAAQ,6BAA6B,mBAAqB,sBAAsB,EAAE,aAAe,CAAC,MAAQ,UAAU,MAAQ,aAAa,EAAE,cAAgB,CAAC,OAAS,YAAY,MAAQ,gBAAgB,EAAE,aAAe,CAAC,YAAc,gHAAgH,OAAS,SAAS,MAAQ,cAAc,EAAE,MAAQ,uBAAuB,EAAE,yBAA2B,CAAC,YAAc,CAAC,WAAa,sJAAsJ,WAAa,8GAA8G,MAAQ,qBAAqB,EAAE,UAAY,6BAA6B,kBAAoB,gBAAgB,eAAiB,aAAa,WAAa,SAAS,YAAc,cAAc,MAAQ,cAAc,aAAe,CAAC,YAAc,CAAC,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAwrB,EAAE,MAAQ,uBAAuB,EAAE,iBAAmB,CAAC,yBAA2B,sBAAsB,iBAAmB,wCAAwC,oBAAsB,iBAAiB,oBAAsB,wBAAwB,mBAAqB,eAAe,sBAAwB,oBAAoB,gBAAkB,0CAA0C,gBAAkB,aAAa,YAAc,oBAAoB,YAAc,OAAO,YAAc,uCAAuC,aAAe,6BAA6B,eAAiB,2BAA2B,MAAQ,2BAA2B,SAAW,kBAAkB,EAAE,SAAW,mBAAmB,gBAAkB,cAAc,YAAc,kBAAkB,iBAAmB,mBAAmB,iBAAmB,CAAC,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAgY,MAAQ,qBAAqB,EAAE,mBAAqB,CAAC,YAAc,+GAA+G,MAAQ,iBAAiB,EAAE,eAAiB,CAAC,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAqS,MAAQ,YAAY,EAAE,cAAgB,iBAAiB,QAAU,+BAA+B,SAAW,4BAA4B,QAAU,wBAAwB,EAAE,2BAA6B,CAAC,eAAiB,sBAAsB,YAAc,wFAAwF,IAAM,eAAe,gBAAkB,0BAA0B,kBAAoB,uBAAuB,QAAU,cAAc,UAAY,cAAc,WAAa,kBAAkB,iBAAmB,0BAA0B,YAAc,uBAAuB,aAAe,sBAAsB,eAAiB,4BAA4B,sBAAwB,6BAA6B,WAAa,kBAAkB,WAAa,uBAAuB,YAAc,iCAAiC,UAAY,CAAC,YAAc,CAAC,KAAO,yPAAyP,EAAE,MAAQ,kBAAkB,EAAE,YAAc,CAAC,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA0d,EAAE,eAAiB,CAAC,YAAc,gKAAgK,MAAQ,sBAAsB,EAAE,SAAW,CAAC,YAAc,wHAAwH,MAAQ,gBAAgB,EAAE,UAAY,CAAC,YAAc,CAAC,KAAO,yIAAyI,EAAE,MAAQ,kBAAkB,EAAE,UAAY,CAAC,IAAM,sBAAsB,YAAc,gIAAgI,MAAQ,iBAAiB,EAAE,cAAgB,CAAC,YAAc,4HAA4H,cAAgB,0BAA0B,aAAe,iBAAiB,MAAQ,6BAA6B,EAAE,aAAe,qBAAqB,WAAa,CAAC,SAAW,WAAW,KAAO,OAAO,QAAU,aAAa,WAAa,iBAAiB,kBAAoB,CAAC,KAAO,6EAA6E,EAAE,MAAQ,oBAAoB,CAAC,EAAE,gCAAkC,CAAC,KAAO,CAAC,KAAO,iMAAiM,EAAE,UAAY,cAAc,aAAe,yBAAyB,WAAa,aAAa,kBAAoB,oBAAoB,SAAW,YAAY,sBAAwB,6BAA6B,cAAgB,iBAAiB,kBAAoB,gCAAgC,eAAiB,iCAAiC,aAAe,6BAA6B,YAAc,QAAQ,oBAAsB,cAAc,gBAAkB,sBAAsB,mBAAqB,mBAAmB,YAAc,cAAc,SAAW,eAAe,YAAc,WAAW,eAAiB,UAAU,WAAa,OAAO,WAAa,KAAK,YAAc,IAAI,2BAA6B,2BAA2B,oBAAsB,uBAAuB,iBAAmB,mBAAmB,UAAY,iBAAiB,YAAc,mBAAmB,aAAe,sBAAsB,aAAe,cAAc,YAAc,kBAAkB,MAAQ,UAAU,EAAE,2BAA6B,CAAC,SAAW,oCAAoC,YAAc,CAAC,MAAQ,2BAA2B,EAAE,YAAc,CAAC,MAAQ,oCAAoC,EAAE,SAAW,CAAC,MAAQ,iBAAiB,MAAQ,4KAA4K,EAAE,SAAW,CAAC,MAAQ,eAAe,OAAS,oCAAoC,MAAQ,mLAAmL,EAAE,WAAa,CAAC,mBAAqB,qBAAqB,MAAQ,4CAA4C,MAAQ,cAAc,MAAQ,2HAA2H,EAAE,SAAW,CAAC,MAAQ,yBAAyB,OAAS,qBAAqB,MAAQ,+JAA+J,EAAE,IAAM,CAAC,MAAQ,oBAAoB,CAAC,EAAE,oBAAsB,CAAC,MAAQ,qBAAqB,YAAc,aAAa,cAAgB,cAAc,YAAc,CAAC,MAAQ,gBAAgB,gBAAkB,cAAc,iBAAmB,aAAa,kBAAoB,cAAc,cAAgB,YAAY,eAAiB,iBAAiB,OAAS,MAAM,EAAE,SAAW,CAAC,MAAQ,uBAAuB,oBAAsB,cAAc,qBAAuB,0BAA0B,uBAAyB,sBAAsB,EAAE,mBAAqB,CAAC,MAAQ,qBAAqB,YAAc,0BAA0B,kBAAoB,CAAC,OAAS,yBAAyB,KAAO,cAAc,cAAgB,gBAAgB,SAAW,qBAAqB,gBAAkB,oDAAoD,0BAA4B,8BAA8B,EAAE,kBAAoB,CAAC,OAAS,2BAA2B,KAAO,cAAc,YAAc,qDAAqD,kBAAoB,4EAA4E,CAAC,EAAE,cAAgB,kBAAkB,gBAAkB,eAAe,cAAgB,WAAW,YAAc,cAAc,sBAAwB,mBAAmB,QAAU,sBAAsB,EAAE,wBAA0B,CAAC,OAAS,CAAC,4BAA8B,kBAAkB,4BAA8B,gCAAgC,CAAC,EAAE,kBAAoB,CAAC,QAAU,cAAc,OAAS,UAAU,gBAAkB,mBAAmB,YAAc,+BAA+B,QAAU,QAAQ,OAAS,SAAS,IAAM,OAAO,KAAO,OAAO,IAAM,QAAQ,MAAQ,WAAW,aAAe,cAAc,SAAW,sBAAsB,OAAS,CAAC,MAAQ,OAAO,MAAQ,UAAU,KAAO,WAAW,eAAiB,kBAAkB,cAAgB,qBAAqB,eAAiB,UAAU,eAAiB,YAAY,EAAE,eAAiB,gBAAgB,YAAc,cAAc,KAAO,MAAM,OAAS,aAAa,YAAc,WAAW,QAAU,cAAc,eAAiB,UAAU,OAAS,UAAU,SAAW,iBAAiB,aAAe,WAAW,eAAiB,UAAU,OAAS,aAAa,MAAQ,CAAC,KAAO;AAAA,mKAAiR,EAAE,MAAQ,CAAC,KAAO,CAAC,QAAU,UAAU,EAAE,MAAQ,CAAC,QAAU,YAAY,EAAE,IAAM,CAAC,QAAU,kBAAkB,EAAE,eAAiB,CAAC,QAAU,iBAAiB,EAAE,KAAO,CAAC,QAAU,WAAW,EAAE,aAAe,CAAC,QAAU,yBAAyB,EAAE,SAAW,CAAC,QAAU,eAAe,EAAE,OAAS,CAAC,QAAU,eAAe,CAAC,CAAC,EAAE,2BAA6B,CAAC,YAAc,oBAAoB,QAAU,gBAAgB,OAAS,OAAO,SAAW,aAAa,SAAW,UAAU,QAAU,UAAU,KAAO,YAAY,MAAQ,UAAU,cAAgB,mBAAmB,QAAU,YAAY,OAAS,aAAa,QAAU,kBAAkB,QAAU,mBAAmB,UAAY,mBAAmB,EAAE,0BAA4B,CAAC,WAAa,iBAAiB,oBAAsB,sBAAsB,SAAW,UAAU,SAAW,YAAY,EAAE,4BAA8B,CAAC,mBAAqB,qBAAqB,SAAW,aAAa,SAAW,SAAS,EAAE,0CAA4C,CAAC,WAAa,cAAc,MAAQ,UAAU,IAAM,SAAS,EAAE,sBAAwB,CAAC,YAAc,yEAAyE,SAAW,CAAC,YAAc,sBAAsB,MAAQ,iBAAiB,EAAE,QAAU,CAAC,YAAc,2CAA2C,MAAQ,oBAAoB,EAAE,UAAY,CAAC,YAAc,8BAA8B,MAAQ,mBAAmB,EAAE,QAAU,CAAC,YAAc,+CAA+C,MAAQ,eAAe,EAAE,MAAQ,8CAA8C,EAAE,qBAAuB,CAAC,YAAc,WAAW,kBAAoB,iBAAiB,eAAiB,uBAAuB,UAAY,uBAAuB,KAAO,iPAAiP,WAAa,kCAAkC,UAAY,gBAAgB,cAAgB,wBAAwB,UAAY,oBAAoB,eAAiB,0BAA0B,aAAe,uBAAuB,cAAgB,qBAAqB,kBAAoB,iDAAiD,eAAiB,sBAAsB,eAAiB,mBAAmB,mBAAqB,gDAAgD,aAAe,8BAA8B,iBAAmB,0LAA4L,gBAAkB,oBAAoB,oBAAsB,qGAAqG,aAAe,sBAAsB,MAAQ,kBAAkB,UAAY,0DAA0D,eAAiB,mCAAmC,mBAAqB,gEAAgE,gBAAkB,yBAAyB,gBAAkB,yBAAyB,aAAe,8BAA8B,mBAAqB,mCAAmC,kBAAoB,sBAAsB,gCAAkC,mCAAmC,0BAA4B,YAAY,kBAAoB,sBAAsB,kBAAoB,2IAA2I,gBAAkB,6BAA6B,eAAiB,KAAK,oBAAsB,wBAAwB,aAAe,iBAAiB,kBAAoB,8BAA8B,KAAO,SAAS,OAAS,YAAY,OAAS,OAAO,mBAAqB,kBAAkB,EAAE,qBAAuB,CAAC,WAAa,SAAS,eAAiB,QAAQ,qBAAuB,sBAAsB,sBAAwB,kBAAkB,kBAAoB,gBAAgB,gBAAkB,mBAAmB,eAAiB,gBAAgB,YAAc,qBAAqB,OAAS,qBAAqB,OAAS,sBAAsB,WAAa,cAAc,mBAAqB,wBAAwB,iBAAmB,0BAA0B,mBAAqB,CAAC,YAAc,UAAU,aAAe,UAAU,SAAW,qBAAqB,UAAY,uCAAuC,SAAW,MAAM,CAAC,EAAE,oBAAsB,CAAC,gBAAkB,oHAAoH,EAAE,uBAAyB,CAAC,cAAgB,qBAAqB,cAAgB,oBAAoB,EAAE,qBAAuB,CAAC,QAAU,oBAAoB,MAAQ,CAAC,KAAO,iNAAiN,EAAE,QAAU,CAAC,MAAQ,mCAAmC,YAAc,mHAAmH,cAAgB,6CAA6C,EAAE,OAAS,CAAC,MAAQ,qBAAqB,YAAc,yPAAyP,EAAE,eAAiB,CAAC,MAAQ,aAAa,OAAS,kBAAkB,EAAE,iBAAmB,gEAAgE,UAAY,kDAAkD,eAAiB,CAAC,gBAAkB,0CAA0C,MAAQ,yCAAyC,EAAE,aAAe,sBAAsB,sBAAwB,CAAC,iBAAmB,oCAAoC,sBAAwB,gFAAgF,kBAAoB,+BAA+B,kBAAoB,mDAAmD,SAAW,QAAQ,MAAQ,OAAO,EAAE,oBAAsB,CAAC,QAAU,4BAA4B,KAAO,uFAAuF,CAAC,EAAE,yBAA2B,CAAC,cAAgB,8BAA8B,eAAiB,2BAA2B,gBAAkB,0EAA0E,WAAa,WAAW,cAAgB,gBAAgB,kBAAoB,kBAAkB,SAAW,kCAAkC,WAAa,CAAC,sBAAwB,oDAAoD,sBAAwB,iDAAiD,gBAAkB,uEAAuE,mBAAqB,uCAAuC,EAAE,kBAAoB,uBAAuB,gBAAkB,oBAAoB,EAAE,kCAAoC,CAAC,WAAa,UAAU,gBAAkB,gEAAgE,UAAY,SAAS,eAAiB,8HAA8H,aAAe,mCAAmC,EAAE,sBAAwB,CAAC,gBAAkB,cAAc,sBAAwB,CAAC,KAAO,4IAA4I,EAAE,gBAAkB,cAAc,sBAAwB,4BAA4B,SAAW,CAAC,MAAQ,uBAAuB,YAAc,qHAAqH,eAAiB,CAAC,MAAQ,cAAc,eAAiB,qBAAqB,mBAAqB,mBAAmB,eAAiB,YAAY,qBAAuB,sBAAsB,CAAC,EAAE,SAAW,CAAC,MAAQ,sBAAsB,oBAAsB,uGAAuG,4BAA8B,+JAA+J,oBAAsB,6EAA6E,YAAc,iCAAiC,sBAAwB,WAAW,kBAAoB,iDAAiD,uBAAyB,qCAAqC,gCAAkC,CAAC,KAAO,kGAAkG,EAAE,iCAAmC,qCAAqC,0CAA4C,0BAA0B,mCAAqC,YAAY,qCAAuC,0BAA0B,iCAAmC,oCAAoC,KAAO,oCAAoC,mBAAqB,aAAa,kBAAoB,0IAA0I,iBAAmB,QAAQ,oBAAsB,uCAAuC,YAAc,gCAAgC,EAAE,SAAW,CAAC,eAAiB,eAAe,WAAa,QAAQ,EAAE,aAAe,CAAC,KAAO,mFAAmF,EAAE,2BAA6B,0BAA0B,4BAA8B,sBAAsB,oBAAsB,uBAAuB,oBAAsB,CAAC,gBAAkB,sIAAsI,iBAAmB,gIAAgI,iBAAmB,mDAAmD,MAAQ,wEAAwE,QAAU,yBAAyB,OAAS,6CAA6C,EAAE,MAAQ,CAAC,QAAU,CAAC,KAAO,sGAAsG,EAAE,eAAiB,CAAC,oBAAsB,yBAAyB,WAAa,0CAA0C,cAAgB,+BAA+B,YAAc,gBAAgB,iBAAmB,wBAAwB,MAAQ,KAAK,EAAE,aAAe,CAAC,cAAgB,WAAW,cAAgB,YAAY,eAAiB,yCAAyC,QAAU,YAAY,gCAAkC,4CAA4C,iBAAmB,6BAA6B,iBAAmB,2BAA2B,oBAAsB,yBAAyB,gBAAkB,qBAAqB,KAAO,SAAS,UAAY,oBAAoB,cAAgB,YAAY,UAAY,OAAO,QAAU,OAAO,CAAC,EAAE,kBAAoB,CAAC,OAAS,6BAA6B,2BAA6B,iDAAiD,6BAA+B,2BAA2B,CAAC,EAAE,wBAA0B,CAAC,aAAe,8CAA8C,WAAa,SAAS,cAAgB,aAAa,OAAS,eAAe,QAAU,cAAc,UAAY,uBAAuB,WAAa,0BAA0B,WAAa,iBAAiB,sBAAwB,sIAAsI,uBAAyB,4HAA4H,UAAY,wBAAwB,YAAc,wBAAwB,sBAAwB,oCAAoC,SAAW,mBAAmB,qBAAuB,kBAAkB,aAAe,iBAAiB,gBAAkB,CAAC,KAAO,wDAAwD,CAAC,EAAE,yBAA2B,CAAC,aAAe,qBAAqB,MAAQ,CAAC,UAAY,MAAM,UAAY,OAAO,QAAU,QAAQ,SAAW,YAAY,UAAY,gBAAgB,OAAS,cAAc,gBAAkB,2BAA2B,UAAY,eAAe,mBAAqB,8DAA8D,MAAQ,SAAS,EAAE,eAAiB,WAAW,iBAAmB,UAAU,iBAAmB,SAAS,oBAAsB,SAAS,EAAE,wBAA0B,CAAC,OAAS,aAAa,mBAAqB,2BAA2B,aAAe,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAwZ,EAAE,cAAgB,kBAAkB,mBAAqB,YAAY,eAAiB,OAAO,EAAE,kBAAoB,CAAC,MAAQ,cAAc,QAAU,YAAY,SAAW,cAAc,OAAS,cAAc,QAAU,aAAa,IAAM,SAAS,MAAQ,wBAAwB,EAAI,KAAK,IAAM,KAAK,EAAE,qBAAuB,CAAC,OAAS,CAAC,qBAAuB,wBAAwB,gBAAkB,uBAAuB,UAAY,oBAAoB,mBAAqB,qCAAqC,OAAS,eAAe,OAAS,WAAW,EAAE,QAAU,eAAe,KAAO,KAAK,aAAe,UAAU,SAAW,kBAAkB,QAAU,OAAO,KAAO,QAAQ,EAAE,4BAA8B,CAAC,aAAe,cAAc,eAAiB,cAAc,KAAO,SAAS,UAAY,oBAAoB,mBAAqB,qCAAqC,OAAS,eAAe,OAAS,YAAY,qBAAuB,qCAAqC,OAAS,aAAa,kBAAoB,4DAA4D,EAAE,4BAA8B,CAAC,YAAc,YAAY,eAAiB,kBAAkB,qBAAuB,CAAC,OAAS,iBAAiB,UAAY,2BAA2B,SAAW,kBAAkB,iBAAmB,kBAAkB,gBAAkB,sCAAsC,QAAU,sBAAsB,CAAC,EAAE,+BAAiC,CAAC,gBAAkB,kBAAkB,YAAc,iBAAiB,YAAc,SAAS,MAAQ,QAAQ,MAAQ,QAAQ,aAAe,oBAAoB,eAAiB,eAAe,gBAAkB,kBAAkB,YAAc,YAAY,YAAc,kBAAkB,oBAAsB,2BAA2B,sBAAwB,sBAAsB,uBAAyB,yBAAyB,MAAQ,WAAW,cAAgB,0BAA0B,mBAAqB,uCAAuC,qBAAuB,kCAAkC,sBAAwB,qCAAqC,2BAA6B,4BAA4B,EAAE,uBAAyB,CAAC,KAAO,CAAC,KAAO,+iBAA+iB,EAAE,MAAQ,uBAAuB,YAAc,YAAY,aAAe,aAAa,eAAiB,kBAAkB,mBAAqB,aAAa,wBAA0B,wBAAwB,gBAAkB,+BAA+B,eAAiB,uCAAuC,cAAgB,eAAe,kBAAoB,iEAAiE,mBAAqB,gDAAgD,oBAAsB,wBAAwB,0BAA4B,YAAY,cAAgB,kBAAkB,kBAAoB,gCAAgC,mBAAqB,8BAA8B,uBAAyB,gCAAgC,oBAAsB,0BAA0B,wBAA0B,gCAAgC,2BAA6B,0EAA0E,qBAAuB,CAAC,WAAa,+BAA+B,MAAQ,qBAAqB,KAAO,sBAAsB,UAAY,wBAAwB,cAAgB,4BAA4B,oBAAsB,0BAA0B,UAAY,gCAAgC,eAAiB,kCAAkC,aAAe,qBAAqB,sBAAwB,oBAAoB,uBAAyB,yCAAyC,yBAA2B,sBAAsB,kCAAoC,gDAAgD,2BAA6B,sCAAsC,gCAAkC,mDAAmD,qCAAuC,sEAAsE,sCAAwC,mDAAmD,yBAA2B,oBAAoB,EAAE,MAAQ,CAAC,UAAY,eAAe,QAAU,eAAe,WAAa,WAAW,YAAc,mBAAmB,sBAAwB,+BAA+B,OAAS,SAAS,qBAAuB,0BAA0B,aAAe,YAAY,qBAAuB,gCAAgC,oBAAsB,uBAAuB,UAAY,SAAS,oBAAsB,6BAA6B,sBAAwB,+BAA+B,qBAAuB,qBAAqB,yBAA2B,sBAAsB,8BAAgC,wBAAwB,8BAAgC,qBAAqB,+BAAiC,4BAA4B,qCAAuC,0BAA0B,kBAAoB,iDAAiD,qBAAuB,YAAY,EAAE,MAAQ,CAAC,MAAQ,gBAAgB,YAAc,QAAQ,YAAc,YAAY,OAAS,eAAe,oBAAsB,uBAAuB,kBAAoB,oBAAoB,qBAAuB,8BAA8B,mBAAqB,+BAA+B,CAAC,EAAE,wBAA0B,CAAC,MAAQ,CAAC,UAAY,kDAAkD,4BAA8B,0EAA0E,EAAE,WAAa,CAAC,aAAe,8BAA8B,MAAQ,gGAAgG,MAAQ,CAAC,KAAO;AAAA,qEAA2K,EAAE,wBAA0B,8CAA8C,MAAQ,CAAC,gBAAkB,CAAC,KAAO;AAAA,sDAAkH,EAAE,iBAAmB,CAAC,KAAO;AAAA,sEAAgI,EAAE,oBAAsB,CAAC,KAAO;AAAA,6EAA8I,EAAE,iBAAmB,CAAC,KAAO;AAAA,0GAA4J,EAAE,4BAA8B,CAAC,KAAO;AAAA,+IAA2M,EAAE,WAAa,CAAC,KAAO;AAAA,oDAA8F,EAAE,MAAQ,CAAC,KAAO;AAAA,sEAA8G,EAAE,OAAS,CAAC,KAAO;AAAA,4CAA8E,EAAE,aAAe,UAAU,sBAAwB,qEAAqE,uBAAyB,0BAA0B,aAAe,oBAAoB,aAAe,cAAc,YAAc,kBAAkB,gBAAkB,0BAA0B,+BAAiC,qBAAqB,aAAe,uBAAuB,UAAY,8BAA8B,4BAA8B,mCAAmC,kBAAoB,kBAAkB,EAAE,SAAW,CAAC,KAAO;AAAA,oGAAuI,EAAE,cAAgB,+BAA+B,iBAAmB,6BAA6B,EAAE,UAAY,CAAC,MAAQ,8BAA8B,MAAQ,kNAAkN,aAAe,kBAAkB,UAAY;AAAA;AAAA;AAAA,oBAAuI,cAAgB,uBAAuB,WAAa;AAAA;AAAA;AAAA,2DAA6M,2BAA6B,kCAAkC,EAAE,WAAa,CAAC,OAAS,6BAA6B,MAAQ,6FAA6F,OAAS,iDAAiD,sBAAwB,8BAA8B,EAAE,oBAAsB,CAAC,SAAW,CAAC,OAAS,uCAAuC,WAAa,YAAY,MAAQ,8KAA8K,OAAS,4EAA4E,kBAAoB,eAAe,WAAa,YAAY,aAAe,kEAAkE,iBAAmB,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA,4CAA4R,CAAC,CAAC,EAAE,QAAU,CAAC,SAAW,CAAC,OAAS,uBAAuB,WAAa,oCAAoC,UAAY,CAAC,KAAO;AAAA,wCAA0R,EAAE,WAAa,CAAC,KAAO,+NAA+N,EAAE,WAAa,CAAC,KAAO,iNAAiN,EAAE,WAAa,CAAC,KAAO,qSAAqS,CAAC,EAAE,aAAe,CAAC,OAAS,iBAAiB,YAAc,+EAA+E,gBAAkB,CAAC,KAAO;AAAA;AAAA,kGAAqT,CAAC,EAAE,gBAAkB,CAAC,OAAS,sBAAsB,YAAc,+CAA+C,aAAe,uCAAuC,EAAE,eAAiB,CAAC,OAAS,yBAAyB,YAAc,sGAAsG,gBAAkB,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAmjB,EAAE,aAAe,4LAA4L,CAAC,EAAE,gBAAkB,CAAC,UAAY,CAAC,aAAe,iBAAiB,cAAgB,aAAa,cAAgB,aAAa,aAAe,cAAc,MAAQ,UAAU,CAAC,EAAE,oBAAsB,CAAC,UAAY,CAAC,OAAS,YAAY,UAAY,SAAS,eAAiB,mBAAmB,EAAE,UAAY,CAAC,kBAAoB,uBAAuB,sBAAwB,wDAAwD,MAAQ,WAAW,UAAY,8BAA8B,OAAS,WAAW,WAAa,mCAAmC,eAAiB,2BAA2B,mBAAqB,kEAAkE,gBAAkB,yBAAyB,sBAAwB;AAAA,0FAA8I,uBAAyB;AAAA,yDAA2H,0BAA4B,wBAAwB,EAAE,qBAAuB,YAAY,EAAE,8BAAgC,CAAC,aAAe,gBAAgB,eAAiB,OAAO,aAAe,QAAQ,mBAAqB,aAAa,oBAAsB,UAAU,iBAAmB,UAAU,cAAgB,mBAAmB,WAAa,4EAA4E,EAAE,mBAAqB,CAAC,UAAY,CAAC,MAAQ,WAAW,UAAY,QAAQ,EAAE,UAAY,CAAC,WAAa,YAAY,eAAiB,uBAAuB,iBAAmB,UAAU,YAAc,uBAAuB,MAAQ,WAAW,yBAA2B,gCAAgC,CAAC,EAAE,0BAA4B,CAAC,aAAe,qCAAqC,KAAO,gBAAgB,UAAY,CAAC,4BAA8B,wBAAwB,EAAE,aAAe,CAAC,MAAQ,6BAA6B,YAAc,0GAA0G,YAAc,aAAa,eAAiB,aAAa,aAAe,cAAc,eAAiB,+BAA+B,kBAAoB,sBAAsB,mBAAqB,mBAAmB,WAAa,WAAW,iBAAmB,SAAS,EAAE,mBAAqB,CAAC,MAAQ,0BAA0B,YAAc,qGAAqG,YAAc,aAAa,eAAiB,aAAa,aAAe,cAAc,eAAiB,+BAA+B,kBAAoB,sBAAsB,kBAAoB,cAAc,WAAa,WAAW,iBAAmB,SAAS,EAAE,YAAc,CAAC,MAAQ,uBAAuB,YAAc,kGAAkG,YAAc,aAAa,WAAa,WAAW,iBAAmB,SAAS,EAAE,SAAW,CAAC,MAAQ,0BAA0B,YAAc,4KAA4K,kBAAoB,sBAAsB,mBAAqB,mBAAmB,kBAAoB,cAAc,WAAa,UAAU,EAAE,UAAY,CAAC,MAAQ,0BAA0B,YAAc,yNAAyN,kBAAoB,sBAAsB,mBAAqB,mBAAmB,kBAAoB,cAAc,WAAa,UAAU,CAAC,EAAE,GAAK,CAAC,aAAe,OAAO,aAAe,QAAQ,UAAY,yBAAyB,cAAgB,gBAAgB,oBAAsB,YAAY,oBAAsB,aAAa,SAAW,CAAC,aAAe,YAAY,WAAa,gBAAgB,iBAAmB,8BAA8B,EAAE,QAAU,CAAC,eAAiB,YAAY,eAAiB,gBAAgB,cAAgB,sBAAsB,qBAAuB,wBAAwB,mBAAqB,iBAAiB,eAAiB,YAAY,KAAO,WAAW,mBAAqB,2BAA2B,qBAAuB,qBAAqB,aAAe,eAAe,MAAQ,YAAY,cAAgB,wBAAwB,EAAE,OAAS,CAAC,KAAO,SAAS,WAAa,UAAU,KAAO,SAAS,WAAa,WAAW,QAAU,kBAAkB,SAAW,aAAa,UAAY,cAAc,KAAO,UAAU,iBAAmB,kBAAkB,CAAC,CAAC,EAAE,kBAAoB,CAAC,YAAc,CAAC,KAAO,2BAA2B,EAAE,KAAO,QAAQ,SAAW,CAAC,KAAO,qBAAqB,EAAE,MAAQ,uBAAuB,EAAE,wBAA0B,CAAC,KAAO,QAAQ,OAAS,UAAU,aAAe,sBAAsB,iBAAmB,iBAAiB,EAAE,sBAAwB,CAAC,KAAO,OAAO,GAAK,KAAK,MAAQ,aAAa,eAAiB,eAAe,EAAE,wBAA0B,CAAC,MAAQ,qBAAqB,mBAAqB,sBAAsB,kBAAoB,oBAAoB,OAAS,oBAAoB,eAAiB,iCAAiC,WAAa,yCAAyC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAA2qB,SAAW,WAAW,OAAS,CAAC,IAAM,uCAAuC,IAAM,mCAAmC,CAAC,EAAE,oBAAsB,CAAC,OAAS,cAAc,KAAO,SAAS,EAAE,kBAAoB,CAAC,eAAiB,cAAc,YAAc,YAAY,mBAAqB,8BAA8B,UAAY,mBAAmB,uBAAyB,oBAAoB,0BAA4B,qBAAqB,OAAS,aAAa,SAAW,6BAA6B,aAAe,gOAAkO,YAAc,uBAAuB,mBAAqB,oBAAoB,iBAAmB,oBAAoB,aAAe,mBAAmB,aAAe,qBAAqB,IAAM,sBAAsB,mBAAqB,4BAA4B,aAAe,iBAAiB,uBAAyB,4BAA4B,MAAQ,OAAO,WAAa,oBAAoB,QAAU,YAAY,SAAW,gBAAgB,QAAU,oBAAoB,QAAU,aAAa,WAAa,eAAe,aAAe,eAAe,YAAc,+BAA+B,YAAc,aAAa,aAAe,iCAAiC,eAAiB,yBAAyB,cAAgB,iBAAiB,KAAO,gCAAgC,eAAiB,cAAc,YAAc,mBAAmB,eAAiB,aAAa,WAAa,gBAAgB,cAAgB,iBAAiB,iBAAmB,eAAe,SAAW,SAAS,EAAE,qBAAuB,CAAC,MAAQ,oBAAoB,MAAQ,aAAa,OAAS,iBAAiB,qBAAuB,kBAAkB,UAAY,UAAU,SAAW,WAAW,MAAQ,aAAa,UAAY,gBAAgB,OAAS,CAAC,MAAQ,eAAe,aAAe,uBAAuB,WAAa,SAAS,eAAiB,uBAAuB,eAAiB,WAAW,aAAe,CAAC,KAAO,+NAA+N,EAAE,cAAgB,gBAAgB,WAAa,OAAO,iBAAmB,sBAAsB,YAAc,CAAC,KAAO,mDAAmD,CAAC,EAAE,MAAQ,CAAC,MAAQ,SAAS,KAAO,OAAO,UAAY,eAAe,KAAO,QAAQ,CAAC,EAAE,wBAA0B,CAAC,aAAe,CAAC,KAAO,oDAAoD,EAAE,SAAW,CAAC,KAAO,oBAAoB,EAAE,UAAY,CAAC,KAAO,yEAAyE,EAAE,eAAiB,uBAAuB,UAAY,CAAC,KAAO,8BAA8B,EAAE,YAAc,CAAC,KAAO,8BAA8B,EAAE,KAAO,OAAO,UAAY,CAAC,KAAO,yBAAyB,EAAE,QAAU,CAAC,KAAO,yBAAyB,EAAE,KAAO,OAAO,oBAAsB,uJAAuJ,aAAe,2BAA2B,EAAE,wBAA0B,CAAC,WAAa,aAAa,YAAc,qFAAqF,WAAa,mBAAmB,cAAgB,iBAAiB,gBAAkB,qCAAqC,YAAc,WAAW,aAAe,kBAAkB,gBAAkB,gBAAgB,QAAU,cAAc,eAAiB,iBAAiB,gBAAkB,0BAA0B,gBAAkB,qBAAqB,WAAa,kBAAkB,eAAiB,sRAAsR,qBAAuB,iKAAiK,iBAAmB,uBAAuB,2BAA6B,CAAC,MAAQ,gDAAgD,QAAU,wHAAwH,EAAE,gBAAkB,8BAA8B,aAAe,oBAAoB,iBAAmB,4CAA4C,cAAgB,wBAAwB,kBAAoB,mCAAmC,eAAiB,6FAA6F,YAAc,CAAC,KAAO,iDAAiD,KAAO,gBAAgB,QAAU,sBAAsB,EAAE,cAAgB,CAAC,MAAQ,iBAAiB,EAAE,YAAc,yCAAyC,kBAAoB,4CAA4C,iBAAmB,mDAAmD,iBAAmB,mDAAmD,cAAgB,CAAC,KAAO,iFAAiF,EAAE,UAAY,WAAW,cAAgB,mBAAmB,eAAiB,kBAAkB,cAAgB,UAAU,mBAAqB,4EAA4E,KAAO,QAAQ,kBAAoB,gBAAgB,uBAAyB,kDAAkD,uBAAyB,WAAW,YAAc,CAAC,eAAiB,CAAC,KAAO,iDAAiD,EAAE,eAAiB,kEAAkE,KAAO,kLAAkL,EAAE,YAAc,oBAAoB,eAAiB,4BAA4B,UAAY,eAAe,WAAa,yBAAyB,kBAAoB,2BAA2B,aAAe,UAAU,cAAgB,gCAAgC,MAAQ,UAAU,KAAO,aAAa,aAAe,iBAAiB,gBAAkB,oBAAoB,eAAiB,4BAA4B,sBAAwB,6BAA6B,UAAY,CAAC,YAAc,8GAA8G,EAAE,uBAAyB,CAAC,YAAc,wQAAwQ,EAAE,mBAAqB,2GAA2G,oBAAsB,yDAAyD,wBAA0B,oBAAoB,cAAgB,qBAAqB,eAAiB,oIAAoI,kBAAoB,8DAA8D,kBAAoB,qBAAqB,SAAW,CAAC,OAAS,aAAa,KAAO,QAAQ,MAAQ,WAAW,QAAU,UAAU,KAAO,WAAW,YAAc,WAAW,YAAc,gBAAgB,QAAU,aAAa,qBAAuB,iBAAiB,eAAiB,CAAC,WAAa,UAAU,qBAAuB,oBAAoB,eAAiB,2BAA2B,WAAa,CAAC,MAAQ,sBAAsB,MAAQ,UAAU,QAAU,CAAC,KAAO,sLAAsL,CAAC,EAAE,iBAAmB,CAAC,OAAS,gCAAgC,kBAAoB,8EAA8E,mBAAqB,CAAC,KAAO,ozBAAozB,CAAC,CAAC,CAAC,EAAE,oBAAsB,+CAA+C,oBAAsB,4BAA4B,mBAAqB,CAAC,KAAO,2BAA2B,cAAgB,0BAA0B,YAAc,mBAAmB,UAAY,uBAAuB,uBAAyB,4CAA4C,EAAE,wBAA0B,+CAA+C,EAAE,0BAA4B,CAAC,gBAAkB,wBAAwB,aAAe,cAAc,eAAiB,iBAAiB,aAAe,cAAc,YAAc,WAAW,YAAc,qBAAqB,eAAiB,kDAAkD,WAAa,QAAQ,sBAAwB,2DAA2D,kBAAoB,uBAAuB,mBAAqB,gFAAgF,eAAiB,sBAAsB,mBAAqB,iEAAiE,eAAiB,qBAAqB,aAAe,yBAAyB,mBAAqB,oDAAoD,WAAa,2BAA2B,YAAc,wBAAwB,OAAS,YAAY,EAAE,oCAAsC,CAAC,MAAQ,yCAAyC,WAAa,gBAAgB,YAAc,aAAa,YAAc,oBAAoB,UAAY,WAAW,IAAM,iBAAiB,cAAgB,iCAAiC,OAAS,eAAe,MAAQ,cAAc,EAAE,eAAiB,CAAC,UAAY,oBAAoB,eAAiB,kBAAkB,iBAAmB,mBAAmB,EAAE,wBAA0B,CAAC,SAAW,KAAK,YAAc,WAAW,kBAAoB,iBAAiB,YAAc,SAAS,kBAAoB,gBAAgB,SAAW,OAAO,SAAW,MAAM,eAAiB,2BAA2B,QAAU,gBAAgB,MAAQ,QAAQ,aAAe,aAAa,iBAAmB,eAAe,IAAM,QAAQ,MAAQ,WAAW,KAAO,OAAO,aAAe,QAAQ,gBAAkB,QAAQ,UAAY,UAAU,cAAgB,oBAAoB,gBAAkB,SAAS,MAAQ,QAAQ,UAAY,gBAAgB,aAAe,SAAS,YAAc,aAAa,IAAM,KAAK,EAAE,2BAA6B,CAAC,WAAa,eAAe,UAAY,qCAAqC,YAAc,0CAA0C,WAAa,eAAe,UAAY,qBAAqB,EAAE,qBAAuB,CAAC,eAAiB,yBAAyB,aAAe,cAAc,aAAe,YAAY,KAAO,SAAS,UAAY,aAAa,SAAW,mBAAmB,gBAAkB,eAAe,aAAe,eAAe,eAAiB,aAAa,EAAE,6BAA+B,CAAC,iBAAmB,sBAAsB,qBAAuB,4CAA4C,EAAE,8BAAgC,CAAC,iBAAmB,qBAAqB,cAAgB,gBAAgB,EAAE,gCAAkC,CAAC,MAAQ,6BAA6B,YAAc,YAAY,eAAiB,WAAW,YAAc,uBAAuB,OAAS,QAAQ,kBAAoB,kBAAkB,KAAO,QAAQ,iBAAmB,4KAA4K,EAAE,8BAAgC,CAAC,iBAAmB,qBAAqB,qBAAuB,gPAAgP,EAAE,uBAAyB,CAAC,aAAe,CAAC,KAAO,yQAAyQ,EAAE,MAAQ,CAAC,KAAO,yJAAyJ,EAAE,UAAY,iDAAiD,SAAW,gCAAgC,aAAe,8CAA8C,aAAe,uBAAuB,gBAAkB,6BAA6B,UAAY,CAAC,KAAO,sQAAsQ,EAAE,KAAO,uDAAuD,aAAe,gEAAgE,aAAe,+BAA+B,MAAQ,oBAAoB,MAAQ,oBAAoB,aAAe,oBAAoB,IAAM,8BAA8B,QAAU,0BAA0B,YAAc,2EAA2E,OAAS,iBAAiB,WAAa,iDAAiD,WAAa,sBAAsB,aAAe,qBAAqB,WAAa,oDAAoD,MAAQ,oBAAoB,MAAQ,gCAAgC,WAAa,qCAAqC,iBAAmB,yLAAyL,EAAE,oBAAsB,CAAC,OAAS,CAAC,SAAW,mBAAmB,SAAW,cAAc,KAAO,aAAa,SAAW,mBAAmB,EAAE,eAAiB,CAAC,oBAAsB,uJAAuJ,aAAe,4BAA4B,MAAQ,4BAA4B,YAAc,kGAAkG,YAAc,mIAAqI,eAAiB,uBAAuB,YAAc,6DAA6D,sBAAwB,CAAC,MAAQ,YAAY,YAAc,4CAA4C,EAAE,YAAc,+BAA+B,eAAiB,yBAAyB,OAAS,aAAa,iBAAmB,eAAe,OAAS,gBAAgB,aAAe,eAAe,EAAE,oBAAsB,oBAAoB,SAAW,CAAC,MAAQ,oBAAoB,YAAc,2JAA2J,aAAe,yBAAyB,EAAE,SAAW,CAAC,MAAQ,iDAAiD,YAAc,qDAAqD,cAAgB,oBAAoB,mBAAqB,WAAW,EAAE,UAAY,CAAC,MAAQ,oBAAoB,YAAc,qEAAqE,aAAe,sFAAsF,KAAO;AAAA,EAAiC,cAAgB;AAAA,EAAkC,oBAAsB,2JAA2J,oBAAsB,4BAA4B,0BAA4B,kGAAkG,cAAgB,cAAc,oBAAsB,6BAA6B,EAAE,OAAS,CAAC,MAAQ,eAAe,YAAc;AAAA,EAA0U,YAAc,8IAA8I,OAAS;AAAA,EAAyI,WAAa,+BAA+B,YAAc,oBAAoB,CAAC,EAAE,uBAAyB,CAAC,KAAO,CAAC,QAAU,WAAW,cAAgB,aAAa,UAAY,SAAS,EAAE,iBAAmB,uBAAuB,eAAiB,oBAAoB,cAAgB,YAAY,uBAAyB,qBAAqB,qBAAuB,aAAa,YAAc,iBAAiB,kBAAoB,iBAAiB,SAAW,sBAAsB,UAAY,eAAe,SAAW,iBAAiB,YAAc,uBAAuB,UAAY,iBAAiB,gBAAkB,kBAAkB,WAAa,mBAAmB,aAAe,oBAAoB,iBAAmB,kBAAkB,kBAAoB,gBAAgB,YAAc,WAAW,gBAAkB,OAAO,sBAAwB,OAAO,uBAAyB,eAAe,kBAAoB,iBAAiB,YAAc,SAAS,OAAS,WAAW,cAAgB,cAAc,EAAE,4BAA8B,CAAC,gBAAkB,8FAA8F,UAAY,wHAAwH,SAAW,mBAAmB,UAAY,4DAA4D,eAAiB,gCAAgC,gBAAkB,sMAAsM,eAAiB,6BAA6B,cAAgB,oCAAoC,eAAiB,uKAAuK,cAAgB,uDAAuD,YAAc,uBAAuB,SAAW,CAAC,KAAO,oqBAAsqB,EAAE,QAAU,2BAA2B,SAAW,gCAAgC,QAAU,mBAAmB,SAAW,2JAA2J,YAAc,gNAAgN,QAAU,0CAA0C,SAAW,mBAAmB,UAAY,+PAA+P,SAAW,sBAAsB,QAAU,mBAAmB,SAAW,yLAAyL,QAAU,gCAAgC,EAAE,2BAA6B,CAAC,QAAU,CAAC,MAAQ,WAAW,UAAY,kBAAkB,YAAc,qRAAqR,aAAe,4CAA4C,YAAc,WAAW,aAAe,2CAA2C,YAAc,oCAAoC,iBAAmB,oMAAoM,SAAW,sBAAsB,gBAAkB,kDAAkD,qBAAuB,CAAC,KAAO,qhBAAqhB,EAAE,eAAiB,gCAAgC,WAAa,0BAA0B,sBAAwB,yJAAyJ,sBAAwB,yCAAyC,uBAAyB,gBAAgB,sBAAwB,qBAAqB,OAAS,CAAC,yBAA2B,CAAC,KAAO;AAAA,wUAA2Y,EAAE,kCAAoC,CAAC,KAAO,mQAAmQ,CAAC,EAAE,mBAAqB,4CAA4C,wBAA0B,qOAAqO,gBAAkB,wBAAwB,EAAE,WAAa,CAAC,MAAQ,eAAe,YAAc,4UAA4U,iBAAmB,kBAAkB,EAAE,UAAY,CAAC,MAAQ,oBAAoB,YAAc,2EAA2E,kBAAoB,2DAA2D,iBAAmB,+WAA+W,YAAc,oBAAoB,aAAe,4CAA4C,sBAAwB,0CAA0C,uBAAyB,gBAAgB,QAAU,gIAAgI,wBAA0B,8FAA8F,sBAAwB,iBAAiB,yBAA2B,oCAAoC,sBAAwB,2BAA2B,2BAA6B,8BAA8B,wBAA0B,uBAAuB,CAAC,EAAE,yBAA2B,CAAC,WAAa,CAAC,MAAQ,qBAAqB,YAAc,8LAA8L,eAAiB,qBAAqB,gBAAkB,aAAa,cAAgB,eAAe,EAAE,SAAW,CAAC,MAAQ,cAAc,YAAc,0FAA0F,kBAAoB,YAAY,eAAiB,mBAAmB,EAAE,IAAM,CAAC,MAAQ,gBAAgB,MAAQ;AAAA;AAAA;AAAA,EAA+jB,eAAiB,gCAAgC,gBAAkB,CAAC,QAAU,iIAAiI,mBAAqB,wCAAwC,gBAAkB,sDAAsD,OAAS,mJAAmJ,CAAC,EAAE,aAAe,CAAC,MAAQ,2BAA2B,MAAQ;AAAA,6EAAsL,EAAE,KAAO,CAAC,MAAQ,0DAA0D,MAAQ,yKAAyK,KAAO,oBAAoB,OAAS,qBAAqB,EAAE,gBAAkB,CAAC,MAAQ,+BAA+B,MAAQ,2IAA2I,OAAS,4HAA4H,oBAAsB,sCAAsC,EAAE,mBAAqB,CAAC,MAAQ,yBAAyB,MAAQ,2IAA2I,OAAS,oJAAoJ,uBAAyB,gCAAgC,EAAE,0BAA4B,CAAC,QAAU,CAAC,MAAQ,6CAA6C,YAAc,2VAA2V,EAAE,UAAY,CAAC,MAAQ,YAAY,MAAQ,wBAAwB,0BAA4B,sDAAsD,CAAC,CAAC,EAAE,qBAAuB,CAAC,KAAO,CAAC,YAAc,cAAc,mBAAqB,uBAAuB,gBAAkB,aAAa,WAAa,kBAAkB,WAAa,aAAa,MAAQ,OAAO,YAAY,eAAe,SAAW,eAAe,SAAW,gBAAgB,WAAa,yBAAyB,EAAE,WAAa,CAAC,aAAe,iBAAiB,aAAe,aAAa,aAAe,iCAAiC,iBAAmB,qBAAqB,EAAE,eAAiB,sBAAsB,QAAU,cAAc,OAAS,iBAAiB,SAAW,SAAS,UAAY,YAAY,UAAY,sBAAsB,gBAAkB,eAAe,WAAa,aAAa,SAAW,eAAe,aAAe,SAAS,SAAW,SAAS,gBAAkB,gBAAgB,WAAa,cAAc,UAAY,oBAAoB,kBAAoB,eAAe,eAAiB,iDAAiD,gBAAkB,wCAAwC,sBAAwB,2CAA2C,iBAAmB,kDAAkD,qBAAuB,8CAA8C,eAAiB,wCAAwC,YAAc,wCAAwC,cAAgB,0CAA0C,eAAiB,6CAA6C,WAAa,4DAA4D,sBAAwB,qBAAqB,cAAgB,cAAc,eAAiB,eAAe,iBAAmB,oBAAoB,mBAAqB,cAAc,iBAAmB,cAAc,eAAiB,qBAAqB,gBAAkB,uCAAuC,mBAAqB,0BAA0B,iBAAmB,0BAA0B,iBAAmB,kBAAkB,gCAAkC,6CAA6C,sBAAwB,0BAA0B,EAAE,yBAA2B,CAAC,iBAAmB,uBAAuB,EAAE,aAAe,CAAC,MAAQ,CAAC,aAAe,cAAc,CAAC,EAAE,uBAAyB,CAAC,aAAe,kBAAkB,eAAiB,qBAAqB,QAAU,QAAQ,YAAc,SAAS,YAAc,8BAA8B,EAAE,oBAAsB,CAAC,QAAU,YAAY,EAAE,sBAAwB,CAAC,OAAS,aAAa,KAAO,QAAQ,MAAQ,WAAW,UAAY,UAAU,KAAO,WAAW,YAAc,WAAW,WAAa,gBAAgB,QAAU,aAAa,YAAc,gBAAgB,QAAU,YAAY,EAAE,kBAAoB,CAAC,WAAa,2BAA2B,SAAW,YAAY,MAAQ,aAAa,YAAc,CAAC,KAAO,0MAA0M,EAAE,KAAO,OAAO,gBAAkB,mBAAmB,YAAc,2BAA2B,SAAW,SAAS,cAAgB,gBAAgB,EAAE,iBAAmB,CAAC,QAAU,aAAa,SAAW,CAAC,KAAO,CAAC,KAAO;AAAA,8IAA0L,CAAC,EAAE,cAAgB,CAAC,KAAO,CAAC,IAAM,wBAAwB,KAAO;AAAA,iEAAqJ,EAAE,WAAa,CAAC,IAAM,cAAc,CAAC,EAAE,mBAAqB,CAAC,KAAO,CAAC,KAAO,qFAAqF,EAAE,wBAA0B,wBAAwB,aAAe,oBAAoB,EAAE,aAAe,CAAC,KAAO,CAAC,KAAO,sEAAsE,EAAE,KAAO,sCAAsC,QAAU,CAAC,KAAO,uIAAyI,QAAU,cAAc,QAAU,wCAAwC,eAAiB,QAAQ,sBAAwB,eAAe,EAAE,UAAY,CAAC,KAAO,iJAAmJ,QAAU,uBAAuB,QAAU,6BAA6B,eAAiB,QAAQ,sBAAwB,eAAe,EAAE,SAAW,CAAC,IAAM,cAAc,CAAC,EAAE,SAAW,CAAC,KAAO,0BAA0B,KAAO,CAAC,KAAO;AAAA,4LAA0N,IAAM,qBAAqB,CAAC,EAAE,eAAiB,CAAC,KAAO,iEAAiE,IAAM,uBAAuB,EAAE,mBAAqB,CAAC,MAAQ,CAAC,KAAO,+UAA+U,EAAE,eAAiB,CAAC,KAAO,qXAAqX,EAAE,cAAgB,CAAC,KAAO,+VAA+V,CAAC,EAAE,QAAU,cAAc,MAAQ,iCAAiC,UAAY,gBAAgB,UAAY,mBAAmB,kBAAoB,qBAAqB,WAAa,4CAA4C,SAAW,CAAC,MAAQ,CAAC,KAAO,mFAAmF,EAAE,WAAa,kCAAkC,MAAQ,wEAAwE,EAAE,yBAA2B,uBAAuB,0BAA4B,oCAAoC,YAAc,CAAC,KAAO,CAAC,KAAO,yHAAyH,CAAC,CAAC,EAAE,4BAA8B,CAAC,KAAO,aAAa,UAAY,YAAY,OAAS,SAAS,OAAS,MAAM,EAAE,sBAAwB,CAAC,WAAa,CAAC,MAAQ,2BAA2B,uBAAyB;AAAA,0OAAkZ,sBAAwB,sIAAsI,2BAA6B,sIAAsI,gBAAkB,aAAa,iBAAmB,wDAAwD,wBAA0B,yNAAyN,EAAE,WAAa,CAAC,YAAc,yBAAyB,aAAe,qBAAqB,kBAAoB,gCAAgC,QAAU,CAAC,MAAQ,0BAA0B,aAAe,aAAa,KAAO,OAAO,IAAM,MAAM,KAAO,OAAO,QAAU,mBAAmB,eAAiB,oIAAoI,iBAAmB,mBAAmB,EAAE,YAAc,6BAA6B,MAAQ,CAAC,MAAQ,aAAa,UAAY,WAAW,QAAU,YAAY,OAAS,0BAA0B,EAAE,MAAQ,oBAAoB,KAAO,CAAC,eAAiB,6BAA6B,gBAAkB,uBAAuB,YAAc,0BAA0B,eAAiB,CAAC,MAAQ,qCAAqC,QAAU,SAAS,MAAQ,QAAQ,MAAQ,QAAQ,OAAS,8BAA8B,KAAO,CAAC,GAAK;AAAA;AAAA;AAAA;AAAA,+DAAuN,CAAC,CAAC,EAAE,KAAO,CAAC,QAAU,iBAAiB,YAAc,mKAAmK,CAAC,EAAE,cAAgB,CAAC,UAAY,kBAAkB,MAAQ,QAAQ,EAAE,MAAQ,CAAC,MAAQ,uBAAuB,EAAE,MAAQ,CAAC,MAAQ,oBAAoB,EAAE,MAAQ,CAAC,MAAQ,UAAU,EAAE,MAAQ,CAAC,MAAQ,mBAAmB,EAAE,MAAQ,CAAC,MAAQ,YAAY,EAAE,OAAS,CAAC,KAAO,QAAQ,MAAQ,iBAAiB,CAAC,EAAE,0BAA4B,CAAC,MAAQ,wCAAwC,KAAO,QAAQ,aAAe,CAAC,MAAQ,mBAAmB,QAAU,0BAA0B,aAAe,4NAA4N,UAAY,UAAU,SAAW,WAAW,MAAQ,aAAa,SAAW,QAAQ,YAAc,gBAAgB,cAAgB,8BAA8B,EAAE,sBAAwB,CAAC,MAAQ,+BAA+B,QAAU,+BAA+B,MAAQ,+GAA+G,iBAAmB,iBAAiB,gBAAkB,CAAC,KAAO,sFAAsF,CAAC,EAAE,aAAe,CAAC,UAAY,6BAA6B,QAAU,2BAA2B,MAAQ,+QAA+Q,MAAQ,oCAAoC,cAAgB,oJAAoJ,eAAiB,8NAA8N,WAAa,oBAAoB,kBAAoB,cAAc,UAAY,CAAC,KAAO,0FAA8F,EAAE,WAAa,cAAc,WAAa,CAAC,KAAO,yIAA6I,EAAE,WAAa,yBAAyB,cAAgB,CAAC,KAAO,8FAAkG,EAAE,YAAc,uDAAuD,YAAc,kBAAkB,aAAe,aAAa,EAAE,QAAU,cAAc,EAAE,kBAAoB,CAAC,eAAiB,iCAAiC,UAAY,UAAU,aAAe,qBAAqB,aAAe,eAAe,SAAW,gBAAgB,oBAAsB,kBAAkB,EAAE,WAAa,CAAC,KAAO,CAAC,QAAU,QAAQ,OAAS,YAAY,YAAc,WAAW,GAAK,gBAAgB,OAAS,aAAa,SAAW,aAAa,MAAQ,YAAY,SAAW,SAAS,EAAE,SAAW,iBAAiB,EAAE,uBAAyB,CAAC,sBAAwB,CAAC,MAAQ,6BAA6B,QAAU;AAAA;AAAA,8CAAyK,EAAE,YAAc,2CAA2C,2BAA6B,iHAAiH,QAAU,SAAS,OAAS,aAAa,KAAO,WAAW,QAAU,gBAAgB,SAAW,iBAAiB,oBAAsB,kBAAkB,MAAQ,mBAAmB,WAAa,8BAA8B,KAAO,QAAQ,YAAc,eAAe,UAAY,UAAU,WAAa,oBAAoB,gBAAkB,6BAA6B,QAAU,mBAAmB,SAAW,WAAW,OAAS,UAAU,QAAU,SAAS,UAAY,iCAAiC,iCAAmC,iHAAiH,eAAiB,CAAC,KAAO,8GAA8G,EAAE,eAAiB,cAAc,WAAa,cAAc,iBAAmB,0BAA0B,aAAe,CAAC,KAAO,sVAAsV,EAAE,SAAW,gBAAgB,oBAAsB,CAAC,KAAO,iMAAiM,EAAE,kBAAoB,CAAC,KAAO,8CAA8C,EAAE,QAAU,CAAC,SAAW,oBAAoB,QAAU,sBAAsB,WAAa,6CAA6C,WAAa,aAAa,UAAY,uBAAuB,cAAgB,qCAAqC,gBAAkB,0CAA0C,MAAQ,MAAM,OAAS,cAAc,WAAa,uBAAuB,MAAQ,sBAAsB,SAAW,wBAAwB,SAAW,eAAe,SAAW,eAAe,QAAU,aAAa,cAAgB,mCAAmC,oBAAsB,sCAAsC,cAAgB,4BAA4B,kBAAoB,iIAAiI,wBAA0B,qUAAqU,eAAiB;AAAA,0CAAuG,OAAS,CAAC,QAAU,UAAU,oBAAsB,sBAAsB,SAAW,UAAU,SAAW,aAAa,QAAU,mBAAmB,EAAE,qBAAuB,CAAC,aAAe,sBAAsB,YAAc,yEAAyE,WAAa,iBAAiB,UAAY,+IAA+I,kBAAoB,2IAA2I,CAAC,EAAE,WAAa,gBAAgB,qBAAuB,gBAAgB,IAAM,gBAAgB,SAAW,QAAQ,WAAa,CAAC,MAAQ,qBAAqB,EAAE,eAAiB,sBAAsB,WAAa,cAAc,aAAe,kBAAkB,SAAW,aAAa,eAAiB,sBAAsB,eAAiB,WAAW,WAAa,WAAW,UAAY,gBAAgB,QAAU,cAAc,SAAW,cAAc,WAAa,4CAA4C,gBAAkB,oBAAoB,SAAW,QAAQ,SAAW,aAAa,mBAAqB,CAAC,OAAS,OAAO,KAAO,MAAM,OAAS,SAAS,QAAU,QAAQ,YAAc,WAAW,QAAU,aAAa,EAAE,iBAAmB,CAAC,iBAAmB,CAAC,KAAO,6HAA6H,CAAC,EAAE,kBAAoB,qCAAqC,QAAU,CAAC,MAAQ,WAAW,WAAa,SAAS,MAAQ,UAAU,KAAO,SAAS,YAAc,WAAW,UAAY,UAAU,MAAQ,QAAQ,eAAiB,sEAAsE,UAAY,gGAAgG,QAAU,mEAAmE,CAAC,EAAE,2BAA6B,CAAC,YAAc,SAAS,GAAK,MAAM,EAAE,wBAA0B,CAAC,YAAc,kGAAkG,MAAQ,uCAAuC,WAAa,0CAA0C,wBAA0B,oCAAoC,yBAA2B,CAAC,KAAO,2CAA2C,EAAE,KAAO,SAAS,YAAc,WAAW,gBAAkB,eAAe,EAAE,0BAA4B,CAAC,eAAiB,sDAAsD,eAAiB,sDAAsD,0BAA4B,aAAa,UAAY,iBAAiB,iBAAmB,kBAAkB,gBAAkB,kBAAkB,eAAiB,yBAAyB,qBAAuB,6GAA6G,gBAAkB,mBAAmB,OAAS,OAAO,KAAO,aAAa,cAAgB,mBAAmB,cAAgB,qBAAqB,OAAS,eAAe,OAAS,mBAAmB,MAAQ,oBAAoB,aAAe,gBAAgB,EAAE,2BAA6B,CAAC,WAAa,6BAA6B,KAAO,QAAQ,MAAQ,CAAC,MAAQ,kBAAkB,MAAQ,wXAAwX,WAAa,gBAAgB,gBAAkB,UAAU,eAAiB,WAAW,cAAgB,wBAAwB,YAAc,aAAa,YAAc,eAAe,EAAE,YAAc,CAAC,MAAQ,uBAAuB,MAAQ,uWAAyW,SAAW,sCAAsC,WAAa,gBAAgB,eAAiB,2BAA2B,EAAE,gBAAkB,CAAC,MAAQ,mBAAmB,MAAQ,0KAA0K,qBAAuB,kRAAkR,wBAA0B,uFAAuF,yBAA2B,iKAAiK,UAAY,mCAAmC,WAAa,qBAAqB,YAAc,wBAAwB,kBAAoB,WAAW,YAAc,iBAAiB,kBAAoB,qOAAqO,aAAe,OAAO,eAAiB,WAAW,WAAa,qQAAqQ,aAAe,MAAM,cAAgB,UAAU,eAAiB,mBAAmB,eAAiB,yBAAyB,cAAgB,YAAY,kBAAoB,cAAc,YAAc,mBAAmB,aAAe,aAAa,aAAe,gBAAgB,YAAc,cAAc,aAAe,mBAAmB,gBAAkB,0CAA0C,gBAAkB,qEAAqE,gBAAkB,WAAW,gBAAkB,mFAAmF,qBAAuB,iBAAiB,oBAAsB,qFAAqF,EAAE,iBAAmB,CAAC,MAAQ,2BAA2B,YAAc,2BAA2B,IAAM,yEAAyE,SAAW,MAAM,WAAa,mZAAmZ,MAAQ,mFAAmF,WAAa,0CAA0C,aAAe,0SAA0S,QAAU,+DAA+D,aAAe,uBAAuB,eAAiB,4QAA4Q,YAAc,0LAA0L,iBAAmB,sBAAsB,gBAAkB,wFAAwF,YAAc,WAAW,KAAO,+BAA+B,SAAW,4RAA4R,EAAE,aAAe,CAAC,MAAQ,aAAa,MAAQ,mLAAmL,KAAO,oVAAsV,eAAiB,oBAAoB,kBAAoB,cAAc,WAAa,yBAAyB,gBAAkB,gJAAgJ,UAAY,CAAC,KAAO,4FAAgG,EAAE,WAAa,cAAc,WAAa,CAAC,KAAO,yIAA6I,EAAE,WAAa,oBAAoB,cAAgB,CAAC,KAAO,8FAAkG,EAAE,gBAAkB,yBAAyB,iBAAmB,sCAAsC,eAAiB,yBAAyB,QAAU,cAAc,CAAC,EAAE,4BAA8B,CAAC,WAAa,sBAAsB,KAAO,QAAQ,MAAQ,CAAC,WAAa,sBAAsB,MAAQ,QAAQ,SAAW,6BAA6B,YAAc,mBAAmB,MAAQ,2BAA2B,UAAY,cAAc,MAAQ,aAAa,EAAE,aAAe,CAAC,MAAQ,6BAA6B,SAAW,6BAA6B,cAAgB,UAAU,aAAe,WAAW,UAAY,aAAa,UAAY,gBAAgB,iBAAmB,uBAAuB,gBAAkB,0KAA0K,eAAiB,gBAAgB,WAAa,WAAW,kBAAoB,cAAc,oBAAsB,oFAAoF,EAAE,gBAAkB,CAAC,MAAQ,mBAAmB,qBAAuB,2GAA2G,YAAc,wBAAwB,kBAAoB,WAAW,YAAc,iBAAiB,eAAiB,mBAAmB,eAAiB,yBAAyB,YAAc,cAAc,cAAgB,YAAY,kBAAoB,cAAc,YAAc,mBAAmB,aAAe,aAAa,aAAe,gBAAgB,YAAc,UAAU,EAAE,iBAAmB,CAAC,MAAQ,2BAA2B,WAAa,2BAA2B,IAAM,yEAAyE,SAAW,MAAM,WAAa,mZAAmZ,MAAQ,mFAAmF,WAAa,0CAA0C,aAAe,0SAA0S,iBAAmB,sBAAsB,gBAAkB,yFAAyF,YAAc,WAAW,KAAO,+BAA+B,SAAW,4RAA4R,EAAE,cAAgB,CAAC,MAAQ,yBAAyB,aAAe,0BAA0B,YAAc,mDAAmD,WAAa,yOAAyO,eAAiB,QAAQ,sBAAwB,gBAAgB,SAAW,aAAa,sBAAwB,iBAAiB,6BAA+B,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA,iEAAoY,EAAE,sCAAwC,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA,iEAAoY,EAAE,eAAiB,uBAAuB,cAAgB,wDAAwD,iBAAmB,QAAQ,wBAA0B,gBAAgB,iBAAmB,0IAA0I,oBAAsB,gMAAgM,gBAAkB,2BAA2B,oBAAsB,8CAA8C,6BAA+B,uJAAuJ,SAAW,eAAe,QAAU,weAAwe,YAAc,gCAAgC,mBAAqB,4BAA4B,2BAA6B,0CAA0C,kBAAoB,+CAA+C,gBAAkB,qBAAqB,eAAiB,uKAAuK,YAAc,kCAAkC,WAAa,2FAA2F,gBAAkB,kBAAkB,EAAE,kBAAoB,CAAC,MAAQ,eAAe,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8DAA4tB,EAAE,cAAgB,kBAAkB,WAAa,CAAC,MAAQ,eAAe,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAAggB,CAAC,EAAE,qBAAuB,CAAC,eAAiB,CAAC,KAAO,8RAAgS,EAAE,YAAc,CAAC,KAAO,+JAA+J,EAAE,aAAe,CAAC,KAAO,0KAA0K,CAAC,EAAE,sBAAwB,CAAC,MAAQ,SAAS,WAAa,mBAAmB,SAAW,aAAa,OAAS,aAAa,OAAS,OAAO,UAAY,cAAc,OAAS,CAAC,KAAO,SAAS,WAAa,gBAAgB,OAAS,WAAW,UAAY,eAAe,MAAQ,YAAY,eAAiB,eAAe,CAAC,EAAE,iBAAmB,CAAC,WAAa,cAAc,eAAiB,sDAAsD,eAAiB,CAAC,KAAO,wYAAwY,EAAE,gBAAkB,CAAC,OAAS,uBAAuB,KAAO,mjBAAqjB,EAAE,aAAe,CAAC,MAAQ,+BAA+B,kBAAoB,2BAA2B,EAAE,UAAY,CAAC,KAAO,QAAQ,WAAa,UAAU,eAAiB,kBAAkB,WAAa,WAAW,QAAU,UAAU,EAAE,YAAc,CAAC,OAAS,cAAc,aAAe,YAAY,KAAO,QAAQ,QAAU,WAAW,MAAQ,gBAAgB,SAAW,SAAS,EAAE,cAAgB,CAAC,MAAQ,oDAAoD,EAAE,eAAiB,CAAC,QAAU,2BAA2B,EAAE,mBAAqB,cAAc,yBAA2B,gCAAgC,yBAA2B,0IAA0I,mBAAqB,yBAAyB,6BAA+B,2BAA2B,qBAAuB,yEAAyE,kCAAoC,eAAe,kCAAoC,oEAAoE,oCAAsC,yCAAyC,oCAAsC,mLAAmL,+BAAiC,qBAAqB,0BAA4B,wCAAwC,0BAA4B,qKAAqK,4BAA8B,qBAAqB,0BAA4B,kCAAkC,0BAA4B,4LAA4L,4BAA8B,qBAAqB,kCAAoC,eAAe,kCAAoC,oEAAoE,oCAAsC,kCAAkC,oCAAsC,4OAA4O,+BAAiC,qBAAqB,sCAAwC,yEAAyE,iCAAmC,iDAAiD,iCAAmC,gFAAgF,qBAAuB,uBAAuB,oBAAsB,uCAAuC,oBAAsB,kCAAkC,0BAA4B,iCAAiC,uBAAyB,0BAA0B,YAAc,6BAA6B,iBAAmB,aAAa,sBAAwB,2CAA2C,iBAAmB,uBAAuB,wBAA0B,qBAAqB,oBAAsB,sBAAsB,SAAW,CAAC,WAAa,gBAAgB,eAAiB,yBAAyB,cAAgB,sBAAsB,kBAAoB,wCAAwC,EAAE,aAAe,CAAC,sBAAwB,aAAa,WAAa,oBAAoB,QAAU,CAAC,eAAiB,iBAAiB,UAAY,mCAAmC,SAAW,wBAAwB,UAAY,2BAA2B,WAAa,0BAA0B,YAAc,6BAA6B,QAAU,qCAAqC,WAAa,sBAAsB,KAAO,OAAO,KAAO,iBAAiB,KAAO,oBAAoB,OAAS,oBAAoB,MAAQ,QAAQ,SAAW,gBAAgB,aAAe,iBAAiB,SAAW,oBAAoB,aAAe,qBAAqB,aAAe,aAAa,EAAE,YAAc,CAAC,MAAQ,6DAA6D,EAAE,YAAc,CAAC,QAAU,CAAC,OAAS,eAAe,QAAU,WAAW,KAAO,UAAU,gBAAkB,oBAAoB,SAAW,iBAAiB,eAAiB,6BAA6B,WAAa,2BAA2B,KAAO,WAAW,aAAe,8BAA8B,OAAS,UAAU,eAAiB,mCAAmC,OAAS,iCAAiC,OAAS,kBAAkB,kBAAoB,+BAA+B,OAAS,yCAAyC,YAAc,sBAAsB,eAAiB,uBAAuB,cAAgB,wBAAwB,WAAa,uBAAuB,UAAY,0CAA0C,IAAM,qBAAqB,EAAE,WAAa,CAAC,OAAS,qBAAqB,WAAa,sBAAsB,UAAY,iBAAiB,WAAa,mBAAmB,aAAe,eAAe,sBAAwB,SAAS,WAAa,eAAe,CAAC,EAAE,iBAAmB,CAAC,QAAU,mBAAmB,aAAe,8IAA8I,eAAiB,6CAA6C,aAAe,UAAU,cAAgB,SAAS,QAAU,yBAAyB,EAAE,iBAAmB,CAAC,QAAU,6BAA6B,MAAQ,4GAA4G,aAAe,UAAU,cAAgB,kBAAkB,QAAU,oCAAoC,EAAE,cAAgB,CAAC,MAAQ,iBAAiB,EAAE,cAAgB,CAAC,UAAY,qBAAqB,YAAc,gBAAgB,aAAe,gBAAgB,EAAE,QAAU,CAAC,eAAiB,4BAA4B,mBAAqB,4BAA4B,EAAE,WAAa,CAAC,kBAAoB,iCAAiC,CAAC,EAAE,YAAc,CAAC,QAAU,CAAC,QAAU,WAAW,qBAAuB,oEAAoE,kBAAoB,0BAA0B,UAAY,iBAAiB,OAAS,oBAAoB,OAAS,SAAS,KAAO,WAAW,MAAQ,cAAc,YAAc,qBAAqB,oBAAsB,8BAA8B,uBAAyB,8BAA8B,eAAiB,SAAS,aAAe,sBAAsB,gBAAkB,sBAAsB,gBAAkB,uBAAuB,EAAE,YAAc,CAAC,gBAAkB,iBAAiB,mBAAqB,qBAAqB,aAAe,cAAc,sBAAwB,SAAS,WAAa,cAAc,mBAAqB,QAAQ,eAAiB,QAAQ,UAAY,iBAAiB,UAAY,YAAY,UAAY,oBAAoB,YAAc,eAAe,aAAe,gBAAgB,SAAW,CAAC,KAAO,0FAA0F,EAAE,UAAY,cAAc,WAAa,kBAAkB,WAAa,SAAS,EAAE,eAAiB,CAAC,MAAQ,UAAU,OAAS,SAAS,UAAY,sCAAsC,mBAAqB,gBAAgB,WAAa,cAAc,aAAe,cAAc,sBAAwB,SAAS,eAAiB,iBAAiB,IAAM,CAAC,QAAU,uBAAuB,MAAQ,kJAAkJ,aAAe,uBAAuB,YAAc,oBAAoB,gBAAkB,wCAAwC,iBAAmB,8BAA8B,oBAAsB,kBAAkB,cAAgB,mBAAmB,oBAAsB,4BAA4B,2BAA6B,mCAAmC,CAAC,EAAE,KAAO,CAAC,eAAiB,cAAc,aAAe,YAAY,SAAW,QAAQ,SAAW,aAAa,QAAU,UAAU,EAAE,QAAU,CAAC,0BAA4B,wCAAwC,CAAC,EAAE,iBAAmB,mBAAmB,qBAAuB,YAAY,YAAc,CAAC,UAAY,WAAW,MAAQ,2DAA2D,eAAiB,CAAC,KAAO,qKAA2K,EAAE,KAAO,CAAC,KAAO,yHAAyH,EAAE,KAAO,CAAC,OAAS,4BAA4B,SAAW,yBAAyB,KAAO,WAAW,aAAe,kBAAkB,WAAa,yBAAyB,CAAC,EAAE,SAAW,CAAC,WAAa,kCAAkC,kBAAoB,gCAAgC,mBAAqB,sCAAsC,MAAQ,oBAAoB,OAAS,iBAAiB,UAAY,iBAAiB,SAAW,qBAAqB,WAAa,sBAAsB,UAAY,mBAAmB,iBAAmB,iCAAiC,gBAAkB,sBAAsB,MAAQ,WAAW,iBAAmB,eAAe,aAAe,eAAe,EAAE,KAAO,CAAC,UAAY,iBAAiB,KAAO,qBAAqB,KAAO,qBAAqB,KAAO,gBAAgB,WAAa,uBAAuB,OAAS,eAAe,aAAe,yBAAyB,SAAW,WAAW,MAAQ,qBAAqB,aAAe,QAAQ,EAAE,SAAW,CAAC,OAAS,aAAa,aAAe,iBAAiB,QAAU,aAAa,SAAW,wBAAwB,KAAO,SAAS,OAAS,QAAQ,MAAQ,QAAQ,MAAQ,WAAW,YAAc,QAAQ,EAAE,eAAiB,CAAC,MAAQ,UAAU,OAAS,cAAc,YAAc,cAAc,eAAiB,aAAa,UAAY,OAAO,aAAe,oBAAoB,QAAU,QAAQ,WAAa,WAAW,SAAW,kBAAkB,CAAC,EAAE,qBAAuB,CAAC,gBAAkB,iBAAiB,mBAAqB,kBAAkB,eAAiB,4BAA4B,UAAY,+BAA+B,YAAc,SAAS,WAAa,cAAc,OAAS,SAAS,OAAS,cAAc,YAAc,aAAa,QAAU,WAAW,aAAe,kBAAkB,cAAgB,eAAe,cAAgB,YAAY,kBAAoB,qBAAqB,SAAW,uBAAuB,aAAe,iBAAiB,EAAE,6BAA+B,CAAC,gBAAkB,kBAAkB,IAAM,QAAQ,MAAQ,MAAM,WAAa,sBAAsB,QAAU,kBAAkB,EAAE,qBAAuB,CAAC,QAAU,gBAAgB,IAAM,qBAAqB,EAAE,mBAAqB,CAAC,MAAQ,uBAAuB,EAAE,2BAA6B,CAAC,WAAa,eAAe,uBAAyB,SAAS,eAAiB,eAAe,mBAAqB,4GAA4G,6BAA+B,4BAA4B,iCAAmC,+JAA+J,QAAU,CAAC,KAAO,8JAA8J,CAAC,EAAE,WAAa,CAAC,YAAc,6BAA6B,OAAS,gBAAgB,aAAe,gBAAgB,EAAE,UAAY,CAAC,eAAiB,gBAAgB,qBAAuB,uBAAuB,aAAe,cAAc,UAAY,YAAY,QAAU,aAAa,WAAa,eAAe,qBAAuB,0BAA0B,sBAAwB,qBAAqB,EAAE,kBAAoB,CAAC,OAAS,CAAC,OAAS,WAAW,UAAY,kBAAkB,OAAS,QAAQ,MAAQ,QAAQ,MAAQ,WAAW,QAAU,aAAa,uBAAyB,8BAA8B,OAAS,CAAC,MAAQ,WAAW,WAAa,eAAe,UAAY,cAAc,UAAY,oBAAoB,aAAe,eAAe,EAAE,QAAU,CAAC,SAAW,YAAY,OAAS,KAAK,WAAa,UAAU,SAAW,gBAAgB,WAAa,cAAc,SAAW,cAAc,EAAE,WAAa,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,EAAE,WAAa,CAAC,SAAW,aAAa,SAAW,eAAe,gBAAkB,mCAAmC,aAAe,CAAC,MAAQ,gBAAgB,UAAY,UAAU,SAAW,gBAAgB,aAAe,qCAAqC,eAAiB,oCAAoC,eAAiB,kCAAkC,EAAE,WAAa,CAAC,eAAiB,kBAAkB,aAAe,iBAAiB,gBAAkB,qBAAqB,oBAAsB,uEAAuE,WAAa,aAAa,eAAiB,2BAA2B,UAAY,mBAAmB,EAAE,kBAAoB,CAAC,KAAO,CAAC,KAAO,iMAAiM,EAAE,sBAAwB,gCAAgC,UAAY,2BAA2B,QAAU,0BAA0B,QAAU,kBAAkB,cAAgB,6BAA6B,EAAE,eAAiB,CAAC,mBAAqB,gCAAgC,UAAY,2BAA2B,QAAU,0BAA0B,QAAU,kBAAkB,cAAgB,6BAA6B,EAAE,aAAe,CAAC,cAAgB,mBAAmB,EAAE,eAAiB,CAAC,cAAgB,oBAAoB,iCAAmC,6BAA6B,EAAE,YAAc,CAAC,gBAAkB,cAAc,UAAY,mBAAmB,iBAAmB,oBAAoB,gBAAkB,qBAAqB,gBAAkB,uBAAuB,gBAAkB,oDAAoD,aAAe,4CAA4C,cAAgB,4EAA4E,wBAA0B,iCAAiC,4BAA8B,iCAAiC,6BAA+B,gCAAgC,UAAY,6CAA6C,EAAE,aAAe,CAAC,iBAAmB,UAAU,EAAE,kBAAoB,CAAC,iBAAmB,UAAU,EAAE,wBAA0B,CAAC,iBAAmB,UAAU,EAAE,sBAAwB,CAAC,0BAA4B,UAAU,EAAE,cAAgB,CAAC,kBAAoB,sBAAsB,EAAE,SAAW,CAAC,aAAe,sBAAsB,EAAE,YAAc,CAAC,gBAAkB,aAAa,EAAE,eAAiB,CAAC,YAAc,SAAS,cAAgB,2BAA2B,EAAE,aAAe,CAAC,YAAc,qBAAqB,UAAY,QAAQ,eAAiB,uBAAuB,EAAE,QAAU,CAAC,KAAO,KAAK,OAAS,UAAU,OAAS,SAAS,MAAQ,OAAO,EAAE,WAAa,CAAC,WAAa,CAAC,MAAQ,iBAAiB,EAAE,YAAc,CAAC,KAAO,CAAC,MAAQ,6BAA6B,YAAc,2EAA2E,EAAE,IAAM,CAAC,MAAQ,2BAA2B,YAAc,2EAA2E,EAAE,IAAM,CAAC,MAAQ,sDAAsD,YAAc,iKAAiK,EAAE,KAAO,CAAC,MAAQ,wDAAwD,YAAc,mKAAmK,EAAE,IAAM,CAAC,MAAQ,wDAAwD,YAAc,oOAAoO,EAAE,GAAK,CAAC,MAAQ,uBAAuB,YAAc,2gBAA2gB,EAAE,OAAS,CAAC,MAAQ,8BAA8B,CAAC,EAAE,iBAAmB,CAAC,uBAAyB,kCAAkC,QAAU,YAAY,mBAAqB,UAAU,IAAM,OAAO,QAAU,YAAY,EAAE,KAAO,aAAa,MAAQ,CAAC,cAAgB,YAAY,kBAAoB,OAAO,mBAAqB,QAAQ,sBAAwB,4BAA4B,mBAAqB,aAAa,oBAAsB,cAAc,yBAA2B,wBAAwB,iBAAmB,CAAC,QAAU,OAAO,YAAc,SAAS,MAAQ,QAAQ,kBAAoB,gCAAgC,gBAAkB,oBAAoB,EAAE,qBAAuB,CAAC,UAAY,aAAa,MAAQ,QAAQ,wBAA0B,6BAA6B,CAAC,CAAC,EAAE,kBAAoB,oBAAoB,kBAAoB,aAAa,UAAY,gEAAgE,gBAAkB,sBAAsB,kBAAoB,oBAAoB,eAAiB,mCAAmC,4BAA8B,0NAA0N,WAAa,kBAAkB,eAAiB,0CAA0C,0BAA4B,oCAAoC,qBAAuB,uBAAuB,6BAA+B,2BAA2B,qCAAuC,wBAAwB,0CAA4C,gCAAgC,gCAAkC,sBAAsB,uCAAyC,wBAAwB,6CAA+C,kCAAkC,+BAAiC,0EAA0E,gCAAkC,uCAAuC,gDAAkD,OAAO,4BAA8B,yBAAyB,oBAAsB,QAAQ,mCAAqC,aAAa,8BAAgC,qBAAqB,4BAA8B,yBAAyB,uDAAyD,eAAe,qDAAuD,YAAY,EAAE,OAAS,CAAC,aAAe,sBAAsB,qBAAuB,eAAe,WAAa,WAAW,UAAY,QAAQ,WAAa,mBAAmB,UAAY,kBAAkB,cAAgB,uBAAuB,kBAAoB,8EAA8E,UAAY,cAAc,YAAc,mBAAmB,UAAY,SAAS,aAAe,SAAS,cAAgB,aAAa,WAAa,cAAc,SAAW,eAAe,WAAa,cAAc,SAAW,cAAc,SAAW,iBAAiB,eAAiB,kBAAkB,gBAAkB,eAAe,OAAS,wBAAwB,oBAAsB,2BAA2B,QAAU,YAAY,UAAY,cAAc,UAAY,YAAY,KAAO,WAAW,WAAa,QAAQ,UAAY,UAAU,WAAa,QAAQ,WAAa,WAAW,eAAiB,wBAAwB,mBAAqB,+FAA+F,oBAAsB,kBAAkB,wBAA0B,WAAW,0BAA4B,aAAa,8BAAgC,2BAA2B,mCAAqC,0BAA0B,wBAA0B,oBAAoB,gCAAkC,2BAA2B,mBAAqB,kEAAkE,2BAA6B,sBAAsB,YAAc,gCAAgC,aAAe,eAAe,uBAAyB,uBAAuB,QAAU,WAAW,WAAa,cAAc,cAAgB,gBAAgB,kBAAoB,mPAAmP,4BAA8B,8BAA8B,0BAA4B,gCAAgC,gBAAkB,gCAAgC,IAAM,iBAAiB,SAAW,aAAa,aAAe,WAAW,YAAc,eAAe,sBAAwB,mCAAmC,SAAW,qBAAqB,kBAAoB,gBAAgB,iBAAmB,sBAAsB,6BAA+B,0BAA0B,sBAAwB,aAAa,4BAA8B,iEAAiE,sBAAwB,0BAA0B,kBAAoB,qBAAqB,gBAAkB,WAAW,6BAA+B,0BAA0B,CAAC,EAAE,qBAAuB,CAAC,QAAU,kBAAkB,eAAiB,SAAS,UAAY,OAAO,QAAU,UAAU,UAAY,OAAO,SAAW,YAAY,EAAE,8BAAgC,CAAC,qBAAuB,yCAAyC,4BAA8B,mDAAmD,EAAE,qBAAuB,CAAC,QAAU,kBAAkB,MAAQ,CAAC,iBAAmB,oBAAoB,aAAe,iBAAiB,2BAA6B,kDAAkD,EAAE,MAAQ,CAAC,MAAQ,wBAAwB,SAAW,eAAe,eAAiB,mBAAmB,eAAiB,wBAAwB,EAAE,MAAQ,CAAC,MAAQ,0EAA0E,MAAQ,WAAW,KAAO,IAAI,EAAE,MAAQ,CAAC,MAAQ,8EAA8E,KAAO,IAAI,CAAC,EAAE,qBAAuB,CAAC,QAAU,kBAAkB,eAAiB,eAAe,KAAO,OAAO,EAAE,sBAAwB,CAAC,gBAAkB,sBAAsB,UAAY,kBAAkB,aAAe,iBAAiB,iBAAmB,uBAAuB,cAAgB,kBAAkB,WAAa,mBAAmB,kBAAoB,qBAAqB,eAAiB,sBAAsB,kBAAoB,gBAAgB,qBAAuB,0BAA0B,2BAA6B,6BAA6B,WAAa,mBAAmB,YAAc,oBAAoB,gBAAkB,0BAA0B,aAAe,yBAAyB,WAAa,kBAAkB,eAAiB,yBAAyB,YAAc,oBAAoB,MAAQ,wCAAwC,UAAY,cAAc,EAAE,gBAAkB,CAAC,WAAa,kBAAkB,iBAAmB,oBAAoB,aAAe,iBAAiB,uBAAyB,mDAAmD,MAAQ,CAAC,KAAO,sBAAsB,EAAE,MAAQ,CAAA,EAAG,MAAQ,CAAA,EAAG,MAAQ,CAAA,CAAE,EAAE,sBAAwB,CAAC,OAAS,CAAC,cAAgB,iBAAiB,iBAAmB,iBAAiB,OAAS,UAAU,SAAW,UAAU,UAAY,cAAc,MAAQ,UAAU,UAAY,uBAAuB,SAAW,cAAc,UAAY,QAAQ,aAAe,WAAW,kBAAoB,kBAAkB,kBAAoB,mBAAmB,oBAAsB,qCAAqC,mBAAqB,oCAAoC,kBAAoB,qBAAqB,WAAa,kBAAkB,kBAAoB,kBAAkB,iBAAmB,sBAAsB,oBAAsB,mGAAmG,uBAAyB,wEAAwE,kBAAoB,gBAAgB,qBAAuB,iBAAiB,eAAiB,WAAW,oBAAsB,iBAAiB,mBAAqB,eAAe,EAAE,aAAe,CAAC,YAAc,YAAY,WAAa,WAAW,MAAQ,OAAO,CAAC,EAAE,wBAA0B,CAAC,KAAO,QAAQ,cAAgB,qBAAqB,cAAgB,qBAAqB,MAAQ,WAAW,uBAAyB,8BAA8B,+BAAiC,wCAAwC,KAAO,OAAO,eAAiB,iBAAiB,wBAA0B,0BAA0B,aAAe,6DAA6D,OAAS,CAAC,sBAAwB,sBAAsB,2BAA6B,2BAA2B,wBAA0B,gCAAgC,CAAC,EAAE,uBAAyB,CAAC,aAAe,eAAe,aAAe,aAAa,SAAW,SAAS,EAAE,6BAA+B,CAAC,KAAO,OAAO,UAAY,cAAc,QAAU,sBAAsB,SAAW,WAAW,QAAU,mBAAmB,UAAY,YAAY,KAAO,UAAU,SAAW,YAAY,WAAa,0BAA0B,SAAW,eAAe,kBAAoB,eAAe,eAAiB,KAAK,iBAAmB,sBAAsB,oBAAsB,eAAe,aAAe,qBAAqB,iBAAmB,CAAC,KAAO,yKAAyK,EAAE,WAAa,mBAAmB,eAAiB,CAAC,KAAO,6OAA6O,EAAE,mBAAqB,qBAAqB,uBAAyB,CAAC,KAAO,4NAA4N,EAAE,eAAiB,wCAAwC,qBAAuB,eAAe,sBAAwB,oCAAoC,eAAiB,eAAe,iBAAmB,kBAAkB,gBAAkB,aAAa,iBAAmB,iCAAiC,qBAAuB,uCAAuC,cAAgB,mCAAmC,eAAiB,sCAAsC,cAAgB,cAAc,YAAc,UAAU,eAAiB,YAAY,gBAAkB,iCAAiC,iBAAmB,oBAAoB,iBAAmB,0BAA0B,mBAAqB,cAAc,iBAAmB,cAAc,eAAiB,qBAAqB,kBAAoB,wBAAwB,oBAAsB,YAAY,kBAAoB,UAAU,cAAgB,sBAAsB,aAAe,aAAa,OAAS,aAAa,SAAW,YAAY,IAAM,SAAS,eAAiB,YAAY,gBAAkB,0BAA0B,cAAgB,0BAA0B,aAAe,CAAC,KAAO,uPAAuP,EAAE,eAAiB,uBAAuB,EAAE,iBAAmB,CAAC,QAAU,+BAA+B,2BAA6B,gMAAgM,QAAU,oDAAoD,uBAAyB,yGAAyG,8BAAgC,kEAAkE,gCAAkC,gDAAgD,kBAAoB,0BAA0B,KAAO,OAAO,MAAQ,aAAa,IAAM,gBAAgB,SAAW,gBAAgB,eAAiB,wBAAwB,mBAAqB,2DAA2D,QAAU,eAAe,SAAW,CAAC,KAAO,kCAAkC,SAAW,mGAAmG,SAAW,qBAAqB,aAAe,+CAA+C,wBAA0B,0QAA0Q,EAAE,gCAAkC,mCAAmC,kDAAoD,gDAAgD,mBAAqB,gBAAgB,uBAAyB,yDAAyD,cAAgB,cAAc,cAAgB,aAAa,aAAe,cAAc,WAAa,mBAAmB,uBAAyB,CAAC,MAAQ,2BAA2B,gBAAkB,yDAAyD,uBAAyB,mZAAmZ,iBAAmB,oFAAoF,6BAA+B,0CAA0C,wBAA0B,0SAA0S,iBAAmB,sBAAsB,gBAAkB,wFAAwF,YAAc,WAAW,SAAW,+BAA+B,aAAe,+SAA+S,2BAA6B,oDAAoD,MAAQ,+BAA+B,yBAA2B,iKAAiK,0BAA4B,CAAC,KAAO,0IAA8I,EAAE,YAAc,YAAY,iBAAmB,8BAA8B,gBAAkB,wBAAwB,EAAE,OAAS,CAAC,OAAS,6BAA6B,MAAQ,8BAA8B,EAAE,SAAW,CAAC,MAAQ,yBAAyB,aAAe,sHAAsH,KAAO,oDAAoD,EAAE,2BAA6B,CAAC,QAAU,gDAAgD,MAAQ,+KAA+K,MAAQ,qOAAqO,oBAAsB,sBAAsB,WAAa,sBAAsB,CAAC,EAAE,yBAA2B,CAAC,OAAS,CAAC,cAAgB,iBAAiB,iBAAmB,iBAAiB,OAAS,UAAU,SAAW,UAAU,UAAY,cAAc,SAAW,cAAc,WAAa,cAAc,SAAW,aAAa,KAAO,QAAQ,QAAU,WAAW,aAAe,+EAA+E,iBAAmB,sBAAsB,oBAAsB,mGAAmG,uBAAyB,wEAAwE,kBAAoB,gBAAgB,qBAAuB,iBAAiB,eAAiB,WAAW,oBAAsB,iBAAiB,mBAAqB,gBAAgB,uBAAyB,uBAAuB,iBAAmB,kBAAkB,KAAO,MAAM,OAAS,aAAa,eAAiB,gCAAgC,SAAW,kBAAkB,QAAU,cAAc,EAAE,SAAW,CAAC,IAAM,CAAC,KAAO,OAAO,UAAY,wDAAwD,EAAE,UAAY,CAAC,KAAO,yBAAyB,EAAE,SAAW,CAAC,KAAO,YAAY,UAAY,qCAAqC,EAAE,MAAQ,CAAC,KAAO,eAAe,QAAU,yBAAyB,UAAY,eAAe,EAAE,QAAU,CAAC,KAAO,gBAAgB,UAAY,8CAA8C,EAAE,UAAY,CAAC,KAAO,WAAW,CAAC,EAAE,gBAAkB,CAAC,eAAiB,CAAC,MAAQ,2CAA2C,EAAE,eAAiB,CAAC,MAAQ,kCAAkC,EAAE,sBAAwB,CAAC,MAAQ,kCAAkC,EAAE,sBAAwB,CAAC,MAAQ,mCAAmC,CAAC,EAAE,aAAe,CAAC,WAAa,WAAW,MAAQ,mBAAmB,UAAY,6BAA6B,OAAS,aAAa,WAAa,+CAA+C,sBAAwB,oBAAoB,kBAAoB,qBAAqB,YAAc,oBAAoB,YAAc,WAAW,oBAAsB,+CAA+C,mBAAqB,8CAA8C,eAAiB,gBAAgB,EAAE,cAAgB,CAAC,MAAQ,mBAAmB,YAAc,iDAAiD,UAAY,YAAY,QAAU,YAAY,EAAE,MAAQ,CAAC,WAAa,kBAAkB,MAAQ,kBAAkB,QAAU,WAAW,YAAc,oBAAoB,YAAc,WAAW,YAAc,iBAAiB,SAAW,WAAW,UAAY,UAAU,UAAY,aAAa,EAAE,QAAU,CAAC,MAAQ,kBAAkB,GAAK,eAAe,OAAS,aAAa,MAAQ,KAAK,WAAa,cAAc,WAAa,mBAAmB,YAAc,WAAW,YAAc,WAAW,EAAE,aAAe,CAAC,WAAa,aAAa,MAAQ,qBAAqB,SAAW,uBAAuB,aAAe,oBAAoB,YAAc,WAAW,YAAc,iBAAiB,SAAW,WAAW,UAAY,UAAU,UAAY,cAAc,OAAS,YAAY,aAAe,qBAAqB,YAAc,mBAAmB,OAAS,aAAa,WAAa,cAAc,WAAa,mBAAmB,mBAAqB,WAAW,gBAAkB,4BAA4B,aAAe,oBAAoB,eAAiB;AAAA,EAA0C,eAAiB;AAAA,EAA8C,qBAAuB,eAAe,EAAE,oBAAsB,CAAC,WAAa,gCAAgC,EAAE,iBAAmB,CAAC,MAAQ,mBAAmB,UAAY,uBAAuB,eAAiB,8BAA8B,kBAAoB,gCAAgC,gBAAkB,uBAAuB,EAAE,kBAAoB,CAAC,MAAQ,uBAAuB,oBAAsB,2BAA2B,EAAE,oBAAsB,CAAC,MAAQ,OAAO,mBAAqB,wBAAwB,EAAE,kBAAoB,CAAC,iBAAmB,gBAAgB,qBAAuB,qBAAqB,oBAAsB,qBAAqB,0BAA4B,kBAAkB,EAAE,YAAc,CAAC,QAAU,gBAAgB,KAAO,wCAAwC,KAAO,uCAAuC,MAAQ,gCAAgC,EAAE,aAAe,CAAC,KAAO,QAAQ,MAAQ,OAAO,CAAC,EAAE,4BAA8B,CAAC,aAAe,sBAAsB,gBAAkB,CAAC,MAAQ,mBAAmB,eAAiB,oBAAoB,WAAa,UAAU,cAAgB,QAAQ,cAAgB,mBAAmB,UAAY,SAAS,YAAc,CAAC,UAAY,CAAC,KAAO,oEAAoE,MAAQ,+CAA+C,EAAE,qBAAuB,CAAC,KAAO;AAAA;AAAA,qDAA2L,CAAC,EAAE,SAAW,CAAC,UAAY,CAAC,KAAO,6JAA6J,CAAC,CAAC,EAAE,iBAAmB,CAAC,gBAAkB,6CAA6C,YAAc,eAAe,qBAAuB,yHAAyH,uBAAyB,+BAA+B,EAAE,kBAAoB,CAAC,eAAiB,kBAAkB,KAAO,CAAC,KAAO,oTAAoT,EAAE,8BAAgC,gRAAgR,kBAAoB,iEAAiE,EAAE,WAAa,CAAC,WAAa,kBAAkB,EAAE,WAAa,CAAC,iBAAmB,kCAAkC,8BAAgC,4CAA4C,kBAAoB,yBAAyB,CAAC,EAAE,0BAA4B,CAAC,sBAAwB,4BAA4B,KAAO,CAAC,cAAgB,wBAAwB,oBAAsB,sBAAsB,sBAAwB,mCAAmC,kBAAoB,QAAQ,QAAU,MAAM,YAAc,OAAO,eAAiB,2BAA2B,UAAY,gBAAgB,wBAA0B,uBAAuB,mBAAqB,qBAAqB,uBAAyB,6EAA6E,wBAA0B,2EAA2E,sBAAwB,uBAAuB,SAAW,2BAA2B,aAAe,CAAC,KAAO,6aAA6a,EAAE,QAAU,2BAA2B,WAAa,4BAA4B,WAAa,mCAAmC,YAAc,QAAQ,cAAgB,QAAQ,WAAa,eAAe,cAAgB,0BAA0B,cAAgB,CAAC,KAAO,4CAA4C,EAAE,cAAgB,WAAW,aAAe,wBAAwB,gBAAkB,cAAc,gBAAkB,+BAA+B,sBAAwB,8BAA8B,uBAAyB,oCAAoC,0BAA4B,sMAAsM,YAAc,uRAAuR,EAAE,UAAY,CAAC,iBAAmB,yBAAyB,mBAAqB,4BAA4B,2BAA6B,0OAA0O,8BAAgC,gHAAgH,+BAAiC,CAAC,KAAO,wQAAwQ,EAAE,kCAAoC,CAAC,KAAO,mQAAmQ,EAAE,cAAgB,CAAC,KAAO,2BAA2B,EAAE,yBAA2B,0BAA0B,qBAAuB,gBAAgB,mBAAqB,8BAA8B,EAAE,SAAW,CAAC,2BAA6B,gCAAgC,SAAW,CAAC,KAAO,gSAAgS,EAAE,SAAW,mCAAmC,aAAe,CAAC,KAAO,gSAAgS,EAAE,cAAgB,CAAC,KAAO,2FAA2F,CAAC,EAAE,aAAe,CAAC,cAAgB,wBAAwB,oBAAsB,sBAAsB,sBAAwB,mCAAmC,eAAiB,2BAA2B,aAAe,CAAC,KAAO,yYAAyY,EAAE,QAAU,2BAA2B,WAAa,4BAA4B,cAAgB,CAAC,KAAO,kJAAoJ,EAAE,qBAAuB,6BAA6B,cAAgB,WAAW,gBAAkB,+BAA+B,sBAAwB,8BAA8B,mBAAqB,8MAA8M,EAAE,IAAM,CAAC,aAAe,CAAC,KAAO,umBAAymB,EAAE,cAAgB,CAAC,KAAO,uGAAuG,EAAE,eAAiB,0CAA0C,EAAE,WAAa,CAAC,cAAgB,uBAAuB,wBAA0B,6BAA6B,aAAe,CAAC,KAAO,sEAAsE,EAAE,cAAgB,CAAC,KAAO,iIAAiI,CAAC,EAAE,GAAK,CAAC,gBAAkB,qBAAqB,gBAAkB,qBAAqB,eAAiB,sBAAsB,WAAa,cAAc,eAAiB,CAAC,KAAO,2IAA2I,CAAC,CAAC,EAAE,uBAAyB,CAAC,GAAK,CAAC,oBAAsB,yBAAyB,EAAE,WAAa,CAAC,YAAc,0BAA0B,kBAAoB,CAAC,KAAO,8KAA8K,CAAC,EAAE,eAAiB,CAAC,YAAc,+BAA+B,OAAS,SAAS,QAAU,QAAQ,OAAS,uBAAuB,QAAU,cAAc,QAAU,kBAAkB,SAAW,iBAAiB,QAAU,uBAAuB,EAAE,MAAQ,4CAA4C,WAAa,cAAc,KAAO,SAAS,OAAS,YAAY,cAAgB,oBAAoB,gBAAkB,0BAA0B,eAAiB,+BAA+B,UAAY,kBAAkB,YAAc,uEAAuE,MAAQ,UAAU,SAAW,gBAAgB,QAAU,OAAO,UAAY,+BAA+B,oBAAsB,cAAc,mBAAqB,kBAAkB,aAAe,0CAA0C,QAAU,WAAW,gBAAkB,gBAAgB,aAAe,oBAAoB,SAAW,kBAAkB,QAAU,oBAAoB,kBAAoB,8CAA8C,wBAA0B,kCAAkC,qBAAuB;AAAA;AAAA;AAAA;AAAA,iEAA0H,cAAgB,4CAA4C,kBAAoB,6BAA6B,iBAAmB,gDAAgD,gBAAkB,sBAAsB,kBAAoB,4BAA4B,oBAAsB,uCAAuC,oBAAsB,kCAAkC,uBAAyB,uBAAuB,EAAE,wBAA0B,CAAC,MAAQ,UAAU,WAAa,cAAc,SAAW,WAAW,OAAS,OAAO,OAAS,YAAY,QAAU,SAAS,QAAU,UAAU,IAAM,KAAK,EAAE,qBAAuB,CAAC,aAAe,CAAC,KAAO,CAAC,MAAQ,wBAAwB,KAAO,ySAAyS,QAAU,wBAAwB,EAAE,IAAM,CAAC,MAAQ,mBAAmB,KAAO,2VAA2V,QAAU,kBAAkB,EAAE,SAAW,CAAC,MAAQ,wBAAwB,KAAO,+MAA+M,QAAU,sBAAsB,CAAC,CAAC,EAAE,oBAAsB,CAAC,eAAiB,uCAAuC,QAAU,cAAc,WAAa,sBAAsB,QAAU,mBAAmB,YAAc,oBAAoB,aAAe,wCAAwC,SAAW,CAAC,KAAO,kbAAkb,EAAE,OAAS,aAAa,IAAM,SAAS,UAAY,iBAAiB,WAAa,WAAW,YAAc,aAAa,YAAc,kBAAkB,kBAAoB,kCAAkC,QAAU,aAAa,mBAAqB,CAAC,YAAc,wCAAwC,6BAA+B,4BAA4B,0BAA4B,oLAAoL,CAAC,EAAE,sBAAwB,CAAC,gBAAkB,iBAAiB,eAAiB,CAAC,MAAQ,yCAAyC,YAAc,+LAA+L,EAAE,uBAAyB,8RAA8R,iBAAmB,0GAA0G,MAAQ,CAAC,SAAW,aAAa,YAAc,eAAe,aAAe,cAAc,aAAe,iBAAiB,QAAU,aAAa,WAAa,iBAAiB,mBAAqB,qBAAqB,yBAA2B,8BAA8B,wBAA0B,2BAA2B,wBAA0B,iDAAiD,eAAiB,iBAAiB,SAAW,UAAU,aAAe,eAAe,CAAC,EAAE,uBAAyB,CAAC,QAAU,CAAC,WAAa,qBAAqB,EAAE,6BAA+B,kBAAkB,oBAAsB,CAAC,MAAQ,qDAAuD,MAAQ,+CAA+C,CAAC,EAAE,kBAAoB,CAAC,UAAY,kBAAkB,QAAU,eAAe,EAAE,uBAAyB,CAAC,UAAY,YAAY,WAAa,aAAa,EAAE,2BAA6B,CAAC,eAAiB,2BAA2B,gBAAkB,6BAA6B,YAAc,+BAA+B,EAAE,kCAAoC,CAAC,cAAgB,aAAa,EAAE,mBAAqB,CAAC,oBAAsB,YAAY,gBAAkB,8BAA8B,EAAE,oBAAsB,CAAC,gBAAkB,oCAAoC,OAAS,WAAW,MAAQ,SAAS,WAAa,gBAAgB,QAAU,aAAa,KAAO,OAAO,QAAU,YAAY,EAAE,6BAA+B,CAAC,KAAO,OAAO,SAAW,oBAAoB,cAAgB,YAAY,iBAAmB,oCAAoC,kBAAoB,6BAA6B,mBAAqB,0BAA0B,EAAE,wBAA0B,CAAC,SAAW,cAAc,cAAgB,CAAC,KAAO,oMAAoM,KAAO,2RAA2R,EAAE,WAAa,CAAC,KAAO,8QAA8Q,KAAO,uSAAuS,EAAE,kBAAoB,2BAA2B,+BAAiC,sCAAsC,EAAE,yCAA2C,CAAC,MAAQ,oBAAoB,aAAe,kBAAkB,eAAiB,6BAA6B,YAAc,0BAA0B,cAAgB,iBAAiB,YAAc,2CAA2C,WAAa,uCAAuC,SAAW,oCAAoC,SAAW,CAAC,SAAW,CAAC,KAAO,yFAAyF,kBAAoB,oDAAoD,uBAAyB,iDAAiD,uBAAyB,yFAAyF,uBAAyB,uGAAuG,uBAAyB,yFAAyF,EAAE,KAAO,CAAC,KAAO,qCAAqC,UAAY,8EAA8E,UAAY,+HAA+H,UAAY,kKAAkK,eAAiB,qCAAqC,eAAiB,uCAAuC,EAAE,QAAU,CAAC,KAAO,4KAA4K,SAAW,iNAAiN,SAAW,QAAQ,KAAO,aAAa,UAAY,iBAAiB,QAAU,WAAW,IAAM,QAAQ,OAAS,UAAU,eAAiB,6BAA6B,QAAU,CAAC,KAAO,8QAA8Q,CAAC,EAAE,cAAgB,CAAC,QAAU,gCAAgC,KAAO,8PAA8P,OAAS,YAAY,WAAa,CAAC,KAAO,iIAAiI,EAAE,IAAM,oBAAoB,QAAU,CAAC,KAAO,uFAAuF,EAAE,UAAY,gCAAgC,eAAiB,8GAA8G,eAAiB,iJAAiJ,CAAC,EAAE,MAAQ,CAAC,MAAQ,CAAC,QAAU,cAAc,MAAQ,0CAA0C,KAAO,CAAC,KAAO,+LAA+L,CAAC,EAAE,MAAQ,CAAC,QAAU,iBAAiB,MAAQ,gDAAgD,KAAO,CAAC,KAAO,0OAA0O,CAAC,EAAE,MAAQ,CAAC,QAAU,YAAY,MAAQ,yBAAyB,KAAO,kFAAkF,QAAU,2HAA2H,UAAY,0EAA0E,UAAY,+GAA+G,UAAY,+GAA+G,EAAE,MAAQ,CAAC,QAAU,gBAAgB,MAAQ,+CAA+C,KAAO,iHAAiH,eAAiB,8BAA8B,OAAS,iGAAiG,aAAe,gDAAgD,cAAgB,yCAAyC,CAAC,EAAE,OAAS,CAAC,YAAc,wCAAwC,iBAAmB,wCAAwC,KAAO,CAAC,KAAO,mGAAmG,UAAY,qFAAqF,UAAY,6EAA6E,UAAY,qFAAqF,EAAE,OAAS,CAAC,KAAO,mFAAmF,UAAY,sFAAsF,UAAY,kIAAkI,CAAC,CAAC,EAAE,6BAA+B,CAAC,QAAU,4BAA4B,eAAiB,qCAAqC,gBAAkB,oBAAoB,iBAAmB,iCAAiC,YAAc,QAAQ,WAAa,UAAU,qBAAuB,CAAC,UAAY,UAAU,SAAW,WAAW,MAAQ,aAAa,UAAY,SAAS,EAAE,qBAAuB,8CAA8C,KAAO,OAAO,WAAa,WAAW,eAAiB,kCAAkC,sBAAwB,CAAC,OAAS,OAAO,kBAAoB,CAAC,KAAO,yDAAyD,YAAc,iVAAiV,eAAiB,gUAAkU,EAAE,eAAiB,CAAC,KAAO,0CAA0C,YAAc,uPAAuP,EAAE,sBAAwB,yBAAyB,2BAA6B,uDAAyD,2BAA6B,0DAA0D,0BAA4B,uDAAyD,mBAAqB,iCAAiC,oBAAsB,4CAA4C,qBAAuB,6BAA6B,CAAC,EAAE,wBAA0B,CAAC,MAAQ,4BAA4B,gBAAkB,mBAAmB,EAAE,8BAAgC,CAAC,oBAAsB,CAAC,OAAS,WAAW,gBAAkB,oBAAoB,cAAgB,WAAW,EAAE,oBAAsB,CAAC,OAAS,oCAAoC,SAAW,4HAA4H,WAAa,0BAA0B,mCAAqC,uCAAuC,qBAAuB,iCAAiC,MAAQ,CAAC,KAAO,kNAAkN,CAAC,EAAE,eAAiB,CAAC,OAAS,6BAA6B,WAAa,oBAAoB,gBAAkB,qBAAqB,EAAE,iBAAmB,CAAC,OAAS,uBAAuB,WAAa,cAAc,EAAE,QAAU,CAAC,KAAO,2CAA2C,CAAC,EAAE,2BAA6B,CAAC,4BAA8B,mCAAmC,EAAE,+BAAiC,CAAC,MAAQ,CAAC,OAAS,CAAC,cAAgB,iCAAiC,mBAAqB,sBAAsB,aAAe,aAAa,2BAA6B,mBAAmB,EAAE,SAAW,CAAC,KAAO,CAAC,KAAO,gNAAgN,EAAE,QAAU,cAAc,SAAW,oHAAoH,UAAY,cAAc,SAAW,gBAAgB,QAAU,yBAAyB,iBAAmB,aAAa,iBAAmB,eAAe,SAAW,0BAA0B,mBAAqB,kBAAkB,iBAAmB,6BAA6B,kBAAoB,gHAAgH,sBAAwB,mBAAmB,sCAAwC,oDAAoD,qBAAuB,0CAA0C,sBAAwB,+GAA+G,mBAAqB,uGAAuG,EAAE,WAAa,CAAC,KAAO,CAAC,SAAW,kEAAkE,iBAAmB,uEAAuE,0BAA4B,8FAA8F,QAAU,gGAAgG,EAAE,mBAAqB,6BAA6B,mBAAqB,qEAAqE,gCAAkC,mCAAmC,kCAAoC,+GAA+G,UAAY,YAAY,CAAC,CAAC,EAAE,wBAA0B,CAAC,KAAO,aAAa,gBAAkB,eAAe,EAAE,mBAAqB,CAAC,OAAS,CAAC,cAAgB,eAAe,uBAAyB,4BAA4B,KAAO,OAAO,SAAW,gBAAgB,YAAc,eAAe,UAAY,gBAAgB,MAAQ,mBAAmB,YAAc,iBAAiB,UAAY,WAAW,cAAgB,aAAa,WAAa,cAAc,KAAO,WAAW,QAAU,MAAM,oBAAsB,+BAA+B,UAAY,+BAA+B,iBAAmB,8FAA8F,gBAAkB,gCAAgC,eAAiB,gBAAgB,SAAW,CAAC,MAAQ,WAAW,KAAO,wJAA4J,EAAE,YAAc,uBAAuB,cAAgB,sBAAsB,QAAU,sBAAsB,EAAE,MAAQ,CAAC,gBAAkB,uBAAuB,oBAAsB,aAAa,sBAAwB,iBAAiB,UAAY,YAAY,uBAAyB,sBAAsB,EAAE,gBAAkB,CAAC,OAAS,CAAC,MAAQ,4BAA4B,SAAW,+BAA+B,mBAAqB,+CAA+C,QAAU,gBAAgB,MAAQ,sCAAsC,MAAQ,oCAAoC,EAAE,iBAAmB,iBAAiB,EAAE,yBAA2B,CAAC,MAAQ,CAAC,KAAO,wFAAwF,CAAC,EAAE,wBAA0B,CAAC,OAAS,CAAC,MAAQ,4BAA4B,QAAU,aAAa,CAAC,EAAE,YAAc,CAAC,OAAS,CAAC,MAAQ,4BAA4B,SAAW,+CAA+C,QAAU,cAAc,MAAQ,aAAa,EAAE,kBAAoB,6NAA6N,EAAE,aAAe,CAAC,OAAS,CAAC,MAAQ,+BAA+B,QAAU,6BAA6B,EAAE,YAAc,mBAAmB,0BAA4B,kCAAkC,iBAAmB,iBAAiB,6BAA+B,mCAAmC,8BAAgC,+CAA+C,eAAiB,cAAc,gBAAkB,0BAA0B,gBAAkB,gBAAgB,EAAE,cAAgB,CAAC,OAAS,CAAC,MAAQ,8CAA8C,EAAE,MAAQ,sOAAsO,EAAE,iBAAmB,CAAC,OAAS,CAAC,MAAQ,4BAA4B,QAAU,6BAA6B,CAAC,EAAE,UAAY,CAAC,OAAS,CAAC,MAAQ,4BAA4B,SAAW,+BAA+B,mBAAqB,+CAA+C,QAAU,gBAAgB,MAAQ,uCAAuC,EAAE,MAAQ,uCAAuC,UAAY,sZAAsZ,UAAY,oBAAoB,YAAc,iBAAiB,WAAa,2BAA2B,QAAU,oBAAoB,gBAAkB,mBAAmB,SAAW,iBAAiB,oBAAsB,cAAc,yBAA2B,kHAAkH,EAAE,MAAQ,CAAC,OAAS,CAAC,MAAQ,wDAAwD,QAAU,gBAAgB,OAAS,qDAAqD,EAAE,QAAU,gBAAgB,SAAW,6HAA6H,aAAe,2CAA2C,cAAgB,iCAAiC,4BAA8B,8BAA8B,EAAE,SAAW,CAAC,OAAS,CAAC,MAAQ,SAAS,EAAE,MAAQ,6JAA6J,+BAAiC,CAAC,KAAO,+BAA+B,KAAO,4UAAgV,EAAE,4BAA8B,CAAC,KAAO,uCAAuC,KAAO,iPAAqP,CAAC,CAAC,EAAE,wBAA0B,CAAC,iBAAmB,wFAAwF,kBAAoB,cAAc,aAAe,WAAW,EAAE,gBAAkB,CAAC,cAAgB,CAAC,kBAAoB,kBAAkB,EAAE,SAAW,CAAC,OAAS,QAAQ,QAAU,QAAQ,CAAC,EAAE,4BAA8B,CAAC,MAAQ,kBAAkB,QAAU,aAAa,aAAe,iBAAiB,EAAE,gCAAkC,CAAC,MAAQ,gBAAgB,WAAa,qBAAqB,WAAa,2BAA2B,WAAa,cAAc,WAAa,oBAAoB,EAAE,WAAa,CAAC,UAAY,QAAQ,eAAiB,eAAe,mBAAqB,OAAO,iBAAmB,UAAU,iBAAmB,mBAAmB,gBAAkB,eAAe,kBAAoB,KAAK,mBAAqB,SAAS,kBAAoB,iBAAiB,kBAAoB,cAAc,mBAAqB,QAAQ,WAAa,QAAQ,aAAe,KAAK,aAAe,eAAe,aAAe,WAAW,KAAO,CAAC,OAAS,CAAC,MAAQ,YAAY,GAAK,KAAK,KAAO,SAAS,KAAO,OAAO,YAAc,QAAQ,EAAE,OAAS,CAAC,MAAQ,aAAa,KAAO,SAAS,MAAQ,OAAO,YAAc,QAAQ,CAAC,EAAE,WAAa,CAAC,MAAQ,qBAAqB,MAAQ,iMAAiM,WAAa,gBAAgB,aAAe,sBAAsB,YAAc,sBAAsB,YAAc,mBAAmB,EAAE,aAAe,CAAC,MAAQ,iBAAiB,MAAQ,yFAAyF,eAAiB,0BAA0B,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,iFAAiF,aAAe,WAAW,aAAe,wBAAwB,CAAC,EAAE,WAAa,CAAC,sBAAwB,qCAAqC,yBAA2B,kCAAkC,0BAA4B,6BAA6B,0BAA4B,sCAAsC,KAAO,CAAC,MAAQ,oBAAoB,SAAW,CAAC,MAAQ,UAAU,KAAO,kHAAkH,KAAO,iLAAiL,CAAC,EAAE,QAAU,CAAC,MAAQ,iCAAiC,QAAU,0BAA0B,mBAAqB,mDAAmD,cAAgB,iCAAiC,2BAA6B,mCAAmC,SAAW,gBAAgB,CAAC,EAAE,aAAe,CAAC,sBAAwB,qCAAqC,yBAA2B,2BAA2B,0BAA4B,6BAA6B,0BAA4B,sCAAsC,KAAO,CAAC,MAAQ,wBAAwB,SAAW,CAAC,MAAQ,UAAU,KAAO,2DAA2D,KAAO,6GAA6G,CAAC,CAAC,EAAE,cAAgB,CAAC,8BAAgC,gCAAgC,+BAAiC,6CAA6C,wCAA0C,4BAA4B,KAAO,CAAC,MAAQ,qBAAqB,SAAW,CAAC,MAAQ,UAAU,KAAO,oDAAoD,KAAO,uMAAuM,CAAC,CAAC,EAAE,uBAAyB,CAAC,OAAS,yEAAyE,YAAc,6HAA6H,SAAW,cAAc,gBAAkB,CAAC,KAAO,mFAAqF,EAAE,YAAc,CAAC,KAAO,sEAAwE,EAAE,eAAiB,CAAC,gBAAkB,CAAC,KAAO,kQAAkQ,CAAC,EAAE,MAAQ,CAAC,gBAAkB,CAAC,KAAO,yQAAyQ,CAAC,EAAE,cAAgB,CAAC,gBAAkB,CAAC,KAAO,wQAAwQ,CAAC,CAAC,EAAE,cAAgB,CAAC,mBAAqB,wBAAwB,gBAAkB,eAAe,MAAQ,UAAU,OAAS,iBAAiB,cAAgB,iBAAiB,eAAiB,cAAc,aAAe,eAAe,OAAS,SAAS,gBAAkB,iBAAiB,SAAW,QAAQ,SAAW,CAAC,uBAAyB,CAAC,KAAO,2KAA2K,EAAE,SAAW,CAAC,KAAO,8CAA8C,EAAE,mBAAqB,CAAC,KAAO,8DAA8D,EAAE,SAAW,CAAC,KAAO,6OAA6O,EAAE,QAAU,CAAC,KAAO,kQAAkQ,CAAC,EAAE,MAAQ,CAAC,SAAW,cAAc,aAAe,cAAc,UAAY,QAAQ,QAAU,SAAS,OAAS,QAAQ,QAAU,WAAW,QAAU,YAAY,CAAC,EAAE,iBAAmB,CAAC,yBAA2B,4JAA4J,EAAE,kBAAoB,CAAC,YAAc,CAAC,MAAQ,yBAAyB,KAAO,CAAC,KAAO,+MAA+M,CAAC,EAAE,QAAU,YAAY,iBAAmB,yBAAyB,eAAiB,qBAAqB,EAAE,mBAAqB,CAAC,gBAAkB,yBAAyB,OAAS,gBAAgB,mBAAqB,WAAW,gBAAkB,CAAC,MAAQ,sCAAsC,KAAO,CAAC,KAAO,wKAAwK,CAAC,EAAE,SAAW,CAAC,MAAQ,UAAU,YAAc,YAAY,KAAO,yCAAyC,OAAS,0CAA0C,EAAE,QAAU,YAAY,iBAAmB,yBAAyB,eAAiB,sBAAsB,YAAc,CAAC,MAAQ,iCAAiC,UAAY,UAAU,aAAe,qBAAqB,oBAAsB,mBAAmB,aAAe,eAAe,SAAW,eAAe,CAAC,EAAE,uBAAyB,CAAC,QAAU,CAAC,MAAQ,OAAO,CAAC,EAAE,gBAAkB,CAAC,qBAAuB,CAAC,QAAU,CAAC,OAAS,kBAAkB,KAAO,gBAAgB,CAAC,EAAE,eAAiB,iBAAiB,cAAgB,yBAAyB,kBAAoB,oBAAoB,iBAAmB,oBAAoB,QAAU,0BAA0B,aAAe,eAAe,gBAAkB,yBAAyB,IAAM,QAAQ,mBAAqB,mBAAmB,mBAAqB,0BAA0B,eAAiB,qBAAqB,KAAO,OAAO,KAAO,OAAO,QAAU,WAAW,QAAU,UAAU,UAAY,SAAS,YAAc,cAAc,QAAU,cAAc,UAAY,8BAA8B,cAAgB,aAAa,eAAiB,+DAA+D,kBAAoB,yBAAyB,SAAW,oBAAoB,mBAAqB,6BAA6B,mBAAqB,0EAA0E,qBAAuB,2DAA2D,gBAAkB,gBAAgB,gBAAkB,sBAAsB,mBAAqB,SAAS,qBAAuB,MAAM,wBAA0B,iBAAiB,sBAAwB,UAAU,oBAAsB,UAAU,kBAAoB,CAAC,IAAM,SAAS,YAAc,cAAc,YAAc,aAAa,cAAgB,YAAY,oBAAsB,iBAAiB,UAAY,iBAAiB,EAAE,cAAgB,CAAC,kBAAoB,kCAAkC,uBAAyB;AAAA;AAAA,2KAAyP,mBAAqB,wOAAwO,kBAAoB,CAAC,wBAA0B,mBAAmB,+BAAiC,kIAAkI,oBAAsB,8JAA8J,4BAA8B,iCAAiC,CAAC,CAAC,EAAE,kBAAoB,CAAC,KAAO,QAAQ,OAAS,WAAW,SAAW,aAAa,SAAW,YAAY,QAAU,CAAC,IAAM,UAAU,OAAS,YAAY,OAAS,YAAY,CAAC,EAAE,uBAAyB,CAAC,cAAgB,oBAAoB,iBAAmB,0BAA0B,KAAO,UAAU,yBAA2B,+EAA+E,0BAA4B,2FAA2F,qCAAuC,0HAA0H,0BAA4B,+EAA+E,qCAAuC,8GAA8G,0BAA4B,yGAAyG,kBAAoB,mBAAmB,6BAA+B,4FAA4F,CAAC,EAAE,UAAY,CAAC,MAAQ,CAAC,SAAW,aAAa,OAAS,aAAa,QAAU,qBAAqB,WAAa,cAAc,EAAE,SAAW,CAAC,MAAQ,yBAAyB,KAAO,2CAA2C,CAAC,EAAE,UAAY,CAAC,kBAAoB,CAAC,MAAQ,oCAAoC,YAAc,aAAa,SAAW,UAAU,EAAE,KAAO,CAAC,QAAU,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA,ikBAAm7B,EAAE,IAAM,CAAC,YAAc,iFAAiF,aAAe,WAAW,cAAgB,sBAAsB,OAAS,gCAAgC,WAAa,yBAAyB,kBAAoB,gCAAgC,qBAAuB,cAAc,EAAE,gBAAkB,CAAC,MAAQ,yBAAyB,EAAE,aAAe,eAAe,SAAW,CAAC,KAAO,2IAA2I,KAAO,mWAAmW,EAAE,QAAU,CAAC,IAAM,CAAC,KAAO,qGAA2G,EAAE,eAAiB,CAAC,KAAO,+GAAqH,EAAE,eAAiB,CAAC,KAAO,iHAAuH,CAAC,CAAC,EAAE,KAAO,CAAC,QAAU,CAAC,QAAU,0BAA0B,KAAO,6IAA6I,eAAiB,wBAAwB,YAAc,uCAAuC,YAAc,aAAa,YAAc,0BAA0B,gBAAkB,6BAA6B,mBAAqB,cAAc,iBAAmB,WAAW,YAAc,OAAO,oBAAsB,yBAAyB,KAAO,QAAQ,YAAc,yBAAyB,YAAc,kBAAkB,sBAAwB,uCAAuC,sBAAwB,CAAC,KAAO,6IAA6I,EAAE,iBAAmB,mCAAmC,SAAW,eAAe,oBAAsB,cAAc,aAAe,WAAW,cAAgB,mBAAmB,aAAe,4BAA4B,IAAM,iBAAiB,QAAU,gBAAgB,sBAAwB,0BAA0B,WAAa,8BAA8B,cAAgB,0BAA0B,cAAgB,wBAAwB,CAAC,EAAE,SAAW,CAAC,QAAU,8BAA8B,WAAa,CAAC,mBAAqB,2BAA2B,YAAc,UAAU,YAAc,QAAQ,aAAe,cAAc,YAAc,cAAc,EAAE,mBAAqB,CAAC,cAAgB,2BAA2B,YAAc,oBAAoB,gBAAkB,qBAAqB,eAAiB,eAAe,cAAgB,UAAU,wBAA0B,4BAA4B,IAAM,kBAAkB,KAAO,YAAY,QAAU,oBAAoB,EAAE,sBAAwB,WAAW,sBAAwB,YAAY,EAAE,KAAO,CAAC,UAAY,qCAAqC,MAAQ,CAAC,aAAe,oBAAoB,KAAO,CAAC,KAAO,8GAA8G,CAAC,CAAC,EAAE,SAAW,CAAC,QAAU,aAAa,MAAQ,cAAc,WAAa,mBAAmB,OAAS,UAAU,gBAAkB,wBAAwB,QAAU,WAAW,EAAE,SAAW,CAAC,WAAa,CAAC,MAAQ,UAAU,YAAc,CAAC,KAAO,8KAA8K,CAAC,EAAE,kBAAoB,CAAC,MAAQ,qBAAqB,YAAc,CAAC,KAAO,8KAA8K,CAAC,CAAC,EAAE,QAAU,CAAC,gBAAkB,0NAA0N,kBAAoB,mBAAmB,iBAAmB,gBAAgB,cAAgB,wHAAwH,YAAc,mBAAmB,cAAgB,wBAAwB,SAAW,CAAC,QAAU,aAAa,SAAW,YAAY,KAAO,QAAQ,SAAW,aAAa,SAAW,cAAc,UAAY,gBAAgB,UAAY,iBAAiB,MAAQ,cAAc,UAAY,mBAAmB,mBAAqB,iDAAiD,MAAQ,cAAc,OAAS,YAAY,aAAe,cAAc,eAAiB,cAAc,uBAAyB,0BAA0B,yBAA2B,aAAa,QAAU,YAAY,EAAE,QAAU,CAAC,QAAU,gDAAgD,KAAO,8NAA8N,0BAA4B,4BAA4B,sBAAwB,4BAA4B,uBAAyB,+BAA+B,QAAU,yBAAyB,EAAE,SAAW,CAAC,YAAc,YAAY,YAAc,YAAY,KAAO,QAAQ,aAAe,gBAAgB,YAAc,aAAa,aAAe,iBAAiB,KAAO,QAAQ,mBAAqB,gDAAgD,oBAAsB,CAAC,KAAO,2BAA2B,EAAE,KAAO,QAAQ,QAAU,CAAC,KAAO,gCAAgC,EAAE,aAAe,CAAC,KAAO,iBAAiB,EAAE,SAAW,UAAU,UAAY,kBAAkB,EAAE,eAAiB,CAAC,MAAQ,CAAC,KAAO,mMAAmM,mBAAqB,2IAA2I,CAAC,CAAC,EAAE,QAAU,CAAC,QAAU,uDAAuD,KAAO,kIAAkI,wBAA0B,8BAA8B,4BAA8B,2BAA2B,cAAgB,oBAAoB,eAAiB,wBAAwB,uBAAyB,+FAA+F,SAAW,kBAAkB,mBAAqB,mBAAmB,2BAA6B,qEAAqE,UAAY,eAAe,aAAe,mBAAmB,qBAAuB,iFAAiF,eAAiB,wBAAwB,eAAiB,cAAc,uBAAyB,+DAA+D,iBAAmB,mBAAmB,SAAW,iBAAiB,iBAAmB,yEAAyE,WAAa,oBAAoB,uBAAyB,CAAC,gBAAkB,oBAAoB,OAAS,OAAO,QAAU,QAAQ,OAAS,SAAS,YAAc,+BAA+B,aAAe,oBAAoB,EAAE,eAAiB,CAAC,qBAAuB,+BAA+B,EAAE,mBAAqB,CAAC,gBAAkB,oBAAoB,OAAS,cAAc,QAAU,QAAQ,aAAe,kBAAkB,cAAgB,uBAAuB,aAAe,oBAAoB,EAAE,MAAQ,CAAC,QAAU,8BAA8B,KAAO,oGAAoG,YAAc,oBAAoB,aAAe,qBAAqB,eAAiB,4BAA4B,UAAY,aAAa,aAAe,iBAAiB,OAAS,aAAa,OAAS,SAAS,WAAa,cAAc,mBAAqB,gCAAgC,QAAU,aAAa,sBAAwB,mDAAmD,OAAS,cAAc,UAAY,qBAAqB,iBAAmB,uCAAuC,cAAgB,iBAAiB,UAAY,gBAAgB,aAAe,cAAc,mBAAqB,mBAAmB,WAAa,gBAAgB,OAAS,mBAAmB,UAAY,aAAa,iBAAmB,eAAe,QAAU,oBAAoB,aAAe,iBAAiB,EAAE,YAAc,CAAC,QAAU,kBAAkB,KAAO,uQAAuQ,OAAS,aAAa,aAAe,qBAAqB,eAAiB,4BAA4B,UAAY,kBAAkB,aAAe,iBAAiB,OAAS,SAAS,WAAa,cAAc,mBAAqB,gCAAgC,QAAU,aAAa,sBAAwB,mDAAmD,OAAS,cAAc,UAAY,qBAAqB,iBAAmB,uCAAuC,cAAgB,iBAAiB,UAAY,gBAAgB,aAAe,cAAc,mBAAqB,mBAAmB,WAAa,gBAAgB,OAAS,mBAAmB,UAAY,aAAa,iBAAmB,eAAe,QAAU,oBAAoB,aAAe,iBAAiB,EAAE,aAAe,CAAC,QAAU,mBAAmB,KAAO,mIAAmI,aAAe,WAAW,aAAe,qBAAqB,eAAiB,4BAA4B,gBAAkB,gBAAgB,aAAe,iBAAiB,OAAS,aAAa,OAAS,SAAS,WAAa,cAAc,mBAAqB,gCAAgC,QAAU,aAAa,sBAAwB,mDAAmD,OAAS,cAAc,UAAY,qBAAqB,iBAAmB,uCAAuC,cAAgB,iBAAiB,UAAY,gBAAgB,aAAe,cAAc,mBAAqB,mBAAmB,WAAa,gBAAgB,OAAS,mBAAmB,UAAY,aAAa,iBAAmB,eAAe,QAAU,oBAAoB,aAAe,iBAAiB,CAAC,EAAE,cAAgB,CAAC,gBAAkB,qBAAqB,KAAO,mVAAmV,QAAU,CAAC,KAAO,4SAA4S,CAAC,EAAE,SAAW,CAAC,eAAiB,CAAC,KAAO,qDAAqD,EAAE,aAAe,CAAC,KAAO,sIAAsI,EAAE,gBAAkB,CAAC,QAAU,0BAA0B,EAAE,eAAiB,CAAC,QAAU,wBAAwB,EAAE,aAAe,mBAAmB,aAAe,eAAe,UAAY,WAAW,gBAAkB,cAAc,gBAAkB,8BAA8B,aAAe,mCAAmC,iBAAmB,UAAU,qBAAuB,aAAa,oBAAsB,kBAAkB,cAAgB,OAAO,EAAE,SAAW,CAAC,QAAU,uBAAuB,KAAO,CAAC,aAAe,+KAA+K,WAAa,2KAA2K,EAAE,QAAU,CAAC,QAAU,mBAAmB,KAAO,yDAAyD,SAAW,wBAAwB,aAAe,oBAAoB,SAAW,QAAQ,QAAU,iBAAiB,YAAc,oBAAoB,aAAe,gBAAgB,iBAAmB,gSAAgS,CAAC,EAAE,SAAW,CAAC,iBAAmB,uBAAuB,QAAU,wBAAwB,KAAO,uRAAuR,EAAE,QAAU,CAAC,UAAY,kBAAkB,SAAW,CAAC,KAAO,yGAAyG,CAAC,CAAC,EAAE,kBAAoB,CAAC,MAAQ,CAAC,QAAU,CAAC,KAAO,OAAO,MAAQ,MAAM,mBAAqB,aAAa,EAAE,MAAQ,CAAC,KAAO,CAAC,KAAO,oEAAoE,EAAE,QAAU,CAAC,KAAO,0PAA0P,CAAC,EAAE,QAAU,CAAC,YAAc,WAAW,gBAAkB,2BAA2B,WAAa,gBAAgB,YAAc,gBAAgB,YAAc,oBAAoB,UAAY,CAAC,KAAO,8FAA8F,EAAE,QAAU,CAAC,eAAiB,oBAAoB,YAAc,iBAAiB,gBAAkB,kBAAkB,EAAE,eAAiB,CAAC,KAAO,2LAA2L,EAAE,gBAAkB,mBAAmB,iBAAmB,oCAAoC,gBAAkB,6IAA6I,EAAE,iBAAmB,CAAC,qBAAuB,yCAAyC,sBAAwB,6EAA6E,gBAAkB,kBAAkB,EAAE,gBAAkB,CAAC,aAAe,kBAAkB,WAAa,kCAAkC,UAAY,wJAAwJ,OAAS,mBAAmB,EAAE,YAAc,CAAC,YAAc,eAAe,UAAY,cAAc,MAAQ,QAAQ,QAAU,CAAC,mBAAqB,gBAAgB,mBAAqB,iBAAiB,eAAiB,WAAW,CAAC,CAAC,EAAE,SAAW,gCAAgC,SAAW,CAAC,MAAQ,CAAC,KAAO,4eAA8e,EAAE,oBAAsB,CAAC,KAAO,2TAA2T,EAAE,QAAU,CAAC,kBAAoB,iCAAiC,oBAAsB,iCAAiC,oBAAsB,+BAA+B,eAAiB,mBAAmB,EAAE,mBAAqB,0BAA0B,gBAAkB,CAAC,KAAO,iOAAmO,EAAE,2BAA6B,kCAAkC,oBAAsB,cAAc,uBAAyB,qBAAqB,iBAAmB,QAAQ,wBAA0B,OAAO,qBAAuB,aAAa,iBAAmB,SAAS,uBAAyB,gBAAgB,wBAA0B,gBAAgB,yBAA2B,oBAAoB,wBAA0B,WAAW,sBAAwB,WAAW,sBAAwB,kBAAkB,0BAA4B,yBAAyB,4BAA8B,gBAAgB,WAAa,SAAS,EAAE,oBAAsB,CAAC,MAAQ,wSAAwS,EAAE,gBAAkB,CAAC,MAAQ,CAAC,KAAO,ggBAAogB,CAAC,CAAC,EAAE,aAAe,CAAC,cAAgB,CAAC,SAAW,CAAC,eAAiB,oCAAoC,cAAgB,6RAA+R,CAAC,EAAE,yBAA2B,CAAC,2BAA6B,CAAC,QAAU,CAAC,MAAQ,UAAU,YAAc,+BAA+B,EAAE,MAAQ,CAAC,MAAQ,QAAQ,YAAc,6BAA6B,EAAE,OAAS,CAAC,MAAQ,SAAS,YAAc,+BAA+B,EAAE,KAAO,CAAC,MAAQ,OAAO,YAAc,qCAAqC,EAAE,MAAQ,CAAC,MAAQ,QAAQ,YAAc,6BAA6B,EAAE,OAAS,CAAC,MAAQ,SAAS,YAAc,gCAAgC,EAAE,OAAS,CAAC,MAAQ,kBAAkB,YAAc,+CAA+C,EAAE,UAAY,CAAC,MAAQ,eAAe,YAAc,sCAAsC,EAAE,MAAQ,CAAC,MAAQ,QAAQ,YAAc,8BAA8B,EAAE,MAAQ,CAAC,MAAQ,QAAQ,YAAc,sEAAsE,EAAE,aAAe,CAAC,MAAQ,gBAAgB,YAAc,iDAAiD,CAAC,CAAC,CAAC,EAAE,YAAc,CAAC,KAAO,YAAY,aAAe,CAAC,KAAO,cAAc,MAAQ,eAAe,KAAO,WAAW,UAAU,WAAW,MAAQ,aAAa,SAAW,gBAAgB,OAAS,YAAY,QAAU,aAAa,OAAS,UAAU,QAAU,iBAAiB,UAAY,wBAAwB,aAAe,gBAAgB,QAAU,eAAe,aAAe,yBAAyB,gBAAkB,uBAAuB,QAAU,CAAC,KAAO,eAAe,QAAU,8BAA8B,OAAS,cAAc,EAAE,YAAc,qBAAqB,EAAE,QAAU,CAAC,KAAO,eAAe,QAAU,8BAA8B,OAAS,cAAc,EAAE,gBAAkB,kBAAkB,SAAW,CAAC,KAAO,UAAU,MAAQ,iBAAiB,IAAM,mBAAmB,QAAU,aAAa,EAAE,QAAU,CAAC,KAAO,cAAc,MAAQ,qBAAqB,YAAc,qBAAqB,SAAW,aAAa,QAAU,qBAAqB,cAAgB,qBAAqB,cAAgB,uBAAuB,EAAE,QAAU,CAAC,KAAO,WAAW,MAAQ,YAAY,WAAa,CAAC,KAAO,aAAa,QAAU,oBAAoB,EAAE,gBAAkB,oBAAoB,iBAAmB,sBAAsB,kBAAoB,uBAAuB,8BAAgC,kBAAkB,cAAgB,2BAA2B,sBAAwB,sBAAsB,oBAAsB,6BAA6B,mBAAqB,+BAA+B,cAAgB,kBAAkB,iBAAmB,kCAAkC,cAAgB,kCAAkC,gBAAkB,yBAAyB,iBAAmB,UAAU,QAAU,kBAAkB,SAAW,CAAC,KAAO,SAAS,QAAU,eAAe,EAAE,SAAS,CAAC,KAAO,eAAe,QAAU,cAAc,EAAE,MAAQ,CAAC,KAAO,yBAAyB,QAAU,qBAAqB,EAAE,MAAQ,CAAC,KAAO,qBAAqB,QAAU,iBAAiB,EAAE,eAAiB,gBAAgB,EAAE,SAAW,CAAC,KAAO,sBAAsB,SAAW,YAAY,SAAW,YAAY,EAAE,QAAU,CAAC,KAAO,mBAAmB,EAAE,SAAW,CAAC,KAAO,YAAY,MAAQ,YAAY,gBAAkB,yBAAyB,WAAa,cAAc,uBAAyB,aAAa,yBAA2B,oBAAoB,gBAAkB,eAAe,cAAgB,iBAAiB,eAAiB,eAAe,YAAc,eAAe,aAAe,eAAe,oBAAsB,0BAA0B,aAAe,iBAAiB,eAAiB,cAAc,YAAc,kBAAkB,iBAAmB,cAAc,iBAAmB,qBAAqB,EAAE,cAAc,CAAC,KAAO,qBAAqB,YAAc,kBAAkB,SAAW,CAAC,KAAO,eAAe,QAAU,aAAa,EAAE,mBAAmB,CAAC,KAAO,0BAA0B,QAAU,0BAA0B,OAAS,wBAAwB,EAAE,sBAAsB,CAAC,KAAO,2BAA2B,QAAU,oBAAoB,EAAE,SAAW,CAAC,KAAO,aAAa,QAAU,SAAS,EAAE,kBAAoB,CAAC,KAAO,yBAAyB,QAAU,uBAAuB,EAAE,iBAAmB,CAAC,KAAO,kBAAkB,QAAU,iBAAiB,EAAE,cAAgB,CAAC,KAAO,gBAAgB,QAAU,eAAe,CAAC,EAAE,KAAO,CAAC,KAAO,iBAAiB,IAAM,kBAAkB,MAAQ,iBAAiB,OAAS,oBAAoB,QAAU,mBAAmB,EAAE,YAAc,CAAC,KAAO,UAAU,SAAW,aAAa,aAAe,CAAC,KAAO,kBAAkB,KAAO,WAAW,KAAO,YAAY,MAAQ,aAAa,MAAQ,qBAAqB,IAAM,gBAAgB,KAAO,iBAAiB,MAAQ,cAAc,EAAE,QAAU,CAAC,KAAO,UAAU,aAAe,yBAAyB,oBAAsB,gBAAgB,yBAA2B,oBAAoB,EAAE,gBAAkB,CAAC,KAAO,sBAAsB,aAAe,kBAAkB,eAAiB,0BAA0B,eAAiB,CAAC,KAAO,qBAAqB,QAAU,8BAA8B,CAAC,EAAE,QAAU,cAAc,IAAM,QAAQ,CAAC,EAAE,UAAY,CAAC,YAAc,CAAC,oBAAsB,gBAAgB,mBAAqB,eAAe,cAAgB,OAAO,qBAAuB,kBAAkB,EAAE,wBAA0B,CAAC,YAAc,OAAO,gBAAkB,eAAe,cAAgB,gBAAgB,aAAe,uBAAuB,WAAa,SAAS,eAAiB,uBAAuB,eAAiB,WAAW,aAAe,CAAC,KAAO,+NAA+N,EAAE,iBAAmB,sBAAsB,kBAAoB,CAAC,KAAO,8CAA8C,CAAC,EAAE,2BAA6B,CAAC,oBAAsB,CAAC,KAAO,uEAA2E,EAAE,sBAAwB,kCAAkC,WAAa,CAAC,KAAO,iGAAqG,EAAE,aAAe,uCAAuC,SAAW,CAAC,KAAO,wEAA4E,EAAE,WAAa,4BAA4B,qBAAuB,4BAA4B,gBAAkB,kBAAkB,cAAgB,kBAAkB,cAAgB,iBAAiB,uBAAyB,aAAa,gBAAkB,YAAY,eAAiB,sBAAsB,YAAc,cAAc,cAAgB,8BAA8B,oBAAsB,kBAAkB,EAAE,yBAA2B,CAAC,oBAAsB,qHAAqH,qBAAuB,cAAc,YAAc,0CAA0C,EAAE,yBAA2B,CAAC,uBAAyB,SAAS,gBAAkB,CAAC,KAAO,8GAA8G,EAAE,sBAAwB,CAAC,KAAO,iMAAiM,CAAC,CAAC,EAAE,QAAU,CAAC,SAAW,CAAC,WAAa,CAAC,KAAO,kHAAkH,EAAE,iBAAmB,uCAAuC,QAAU,YAAY,EAAE,KAAO,CAAC,UAAY,CAAC,WAAa,CAAC,MAAQ,YAAY,EAAE,SAAW,CAAC,MAAQ,cAAc,EAAE,WAAa,CAAC,MAAQ,aAAa,EAAE,SAAW,CAAC,MAAQ,oBAAoB,EAAE,SAAW,CAAC,MAAQ,gBAAgB,EAAE,eAAiB,CAAC,MAAQ,WAAW,EAAE,gBAAkB,CAAC,MAAQ,OAAO,EAAE,OAAS,CAAC,MAAQ,UAAU,CAAC,CAAC,EAAE,SAAW,CAAC,MAAQ,sBAAsB,EAAE,QAAU,CAAC,MAAQ,wBAAwB,aAAe,iCAAiC,gBAAkB,aAAa,EAAE,OAAS,CAAC,MAAQ,iBAAiB,SAAW,cAAc,QAAU,CAAC,yBAA2B,uBAAuB,OAAS,QAAQ,OAAS,UAAU,kBAAoB,aAAa,YAAc,SAAS,SAAW,aAAa,8BAAgC,kBAAkB,4CAA8C,0BAA0B,4BAA8B,qCAAqC,wBAA0B,6CAA6C,2BAA6B,mCAAmC,oBAAsB,qCAAqC,0BAA4B,wCAAwC,kCAAoC,kDAAkD,kBAAoB,oCAAoC,iCAAmC,gFAAgF,mBAAqB,qCAAqC,MAAQ,QAAQ,YAAc,WAAW,oBAAsB,eAAe,UAAY,iBAAiB,aAAe,gBAAgB,QAAU,WAAW,WAAa,gBAAgB,+BAAiC,iCAAiC,mBAAqB,kCAAkC,gBAAkB,gBAAgB,mBAAqB,oDAAoD,mBAAqB,uBAAuB,mBAAqB,kCAAkC,UAAY,cAAc,2BAA6B,uBAAuB,iBAAmB,iBAAiB,yBAA2B,2BAA2B,+BAAiC,8BAA8B,mBAAqB,kBAAkB,2BAA6B,uBAAuB,iCAAmC,0BAA0B,eAAiB,+BAA+B,kBAAoB,yBAAyB,iBAAmB,YAAY,gBAAkB,mBAAmB,OAAS,aAAa,YAAc,+BAA+B,WAAa,cAAc,8BAAgC,kBAAkB,kCAAoC,kBAAkB,4CAA8C,0BAA0B,4BAA8B,oCAAoC,YAAc,mBAAmB,eAAiB,gBAAgB,UAAY,aAAa,gBAAkB,oCAAoC,MAAQ,iBAAiB,SAAW,gBAAgB,qBAAuB,8BAA8B,cAAgB,gBAAgB,WAAa,kBAAkB,WAAa,cAAc,oBAAsB,cAAc,UAAY,YAAY,uBAAyB,uBAAuB,qBAAuB,gBAAgB,YAAc,YAAY,kBAAoB,iBAAiB,mBAAqB,gBAAgB,OAAS,YAAY,SAAW,YAAY,MAAQ,WAAW,UAAY,oBAAoB,kBAAoB,kDAAkD,IAAM,oBAAoB,6BAA+B,0BAA0B,MAAQ,gBAAgB,aAAe,gBAAgB,eAAiB,iBAAiB,gBAAkB,SAAS,OAAS,aAAa,mCAAqC,kDAAkD,gCAAkC,uBAAuB,qCAAuC,kBAAkB,mDAAqD,0BAA0B,kCAAoC,uBAAuB,qCAAuC,kBAAkB,mDAAqD,0BAA0B,8BAAgC,uBAAuB,sBAAwB,kBAAkB,4BAA8B,2BAA2B,WAAa,SAAS,iBAAmB,mCAAmC,SAAW,eAAe,0BAA4B,cAAc,aAAe,WAAW,cAAgB,mBAAmB,aAAe,4BAA4B,IAAM,iBAAiB,QAAU,gBAAgB,sBAAwB,0BAA0B,WAAa,8BAA8B,cAAgB,0BAA0B,cAAgB,yBAAyB,eAAiB,wBAAwB,SAAW,eAAe,aAAe,kBAAkB,YAAc,gBAAgB,iBAAmB,YAAY,oBAAsB,eAAe,mBAAqB,2BAA2B,mBAAqB,oBAAoB,iBAAmB,6DAA6D,0BAA4B,0BAA0B,+BAAiC,4BAA4B,4BAA8B,8BAA8B,iCAAmC,gCAAgC,oBAAsB,yDAAyD,EAAE,KAAO,CAAC,yBAA2B,CAAC,KAAO,0MAA0M,EAAE,eAAiB,4EAA4E,6BAA+B,iFAAiF,oBAAsB,+DAA+D,4BAA8B,oFAAoF,kCAAoC,2EAA2E,wDAA0D,oQAAoQ,8BAAgC,CAAC,KAAO,wOAAwO,EAAE,4CAA8C,gOAAgO,4BAA8B,gJAAgJ,oBAAsB,qEAAqE,kCAAoC,0EAA0E,cAAgB,sEAAsE,4BAA8B,2EAA2E,sBAAwB,2FAA2F,mBAAqB,yVAAyV,sBAAwB,mYAAmY,oBAAsB,mFAAmF,yBAA2B,4PAA4P,wBAA0B,sBAAsB,0BAA4B,WAAW,oBAAsB,uDAAuD,kBAAoB,sCAAsC,UAAY,uBAAuB,uBAAyB,kDAAkD,SAAW,uBAAuB,gBAAkB,sCAAsC,mBAAqB,4JAA4J,2BAA6B,iIAAiI,iCAAmC,2HAA2H,eAAiB,4DAA4D,0BAA4B,gGAAgG,kBAAoB,sDAAsD,qBAAuB,CAAC,KAAO,2NAA2N,EAAE,8BAAgC,CAAC,KAAO,+MAA+M,EAAE,kCAAoC,CAAC,KAAO,yGAAyG,EAAE,4CAA8C,sMAAsM,4BAA8B,oJAAoJ,aAAe,CAAC,KAAO,gLAAgL,EAAE,qBAAuB,CAAC,KAAO,iIAAiI,EAAE,mBAAqB,CAAC,KAAO,qMAAqM,EAAE,uBAAyB,+FAA+F,2BAA6B,CAAC,KAAO,8LAA8L,EAAE,kBAAoB,CAAC,KAAO,8NAA8N,EAAE,gCAAkC,CAAC,KAAO,wKAAwK,EAAE,+DAAiE,gCAAgC,qCAAuC,CAAC,KAAO,yHAAyH,EAAE,mDAAqD,oDAAoD,gCAAkC,6GAA6G,kCAAoC,qHAAqH,qCAAuC,CAAC,KAAO,yHAAyH,EAAE,mDAAqD,oDAAoD,8BAAgC,uKAAuK,CAAC,EAAE,WAAa,CAAC,MAAQ,qBAAqB,KAAO,CAAC,KAAO,OAAO,WAAa,WAAW,MAAQ,aAAa,YAAc,gBAAgB,iBAAmB,YAAY,iBAAmB,eAAe,mBAAqB,2BAA2B,OAAS,SAAS,IAAM,mBAAmB,EAAE,QAAU,CAAC,cAAgB,cAAc,YAAc,SAAS,WAAa,OAAO,IAAM,QAAQ,WAAa,iBAAiB,CAAC,EAAE,QAAU,CAAC,OAAS,CAAC,MAAQ,0BAA0B,SAAW,uDAAuD,EAAE,QAAU,CAAC,KAAO,OAAO,WAAa,WAAW,MAAQ,YAAY,EAAE,MAAQ,CAAC,cAAgB,gBAAgB,iBAAmB,eAAe,iBAAmB,eAAe,iBAAmB,OAAO,SAAW,cAAc,OAAS,YAAY,aAAe,eAAe,IAAM,gBAAgB,QAAU,YAAY,sBAAwB,WAAW,aAAe,WAAW,YAAc,YAAY,gBAAkB,YAAY,cAAgB,aAAa,mBAAqB,YAAY,aAAe,oBAAoB,SAAW,iBAAiB,QAAU,eAAe,eAAiB,OAAO,cAAgB,YAAY,gBAAkB,YAAY,aAAe,WAAW,qBAAuB,WAAW,aAAe,+BAA+B,mBAAqB,uBAAuB,MAAQ,UAAU,EAAE,SAAW,CAAC,GAAK,+CAA+C,GAAK,yBAAyB,GAAK,8EAA8E,CAAC,EAAE,cAAgB,CAAC,QAAU,CAAC,MAAQ,wBAAwB,EAAE,SAAW,aAAa,WAAa,cAAc,WAAa,cAAc,WAAa,yCAAyC,UAAY,WAAW,YAAc,uCAAuC,UAAY,gBAAgB,KAAO,OAAO,MAAQ,CAAC,oBAAsB,2BAA2B,SAAW,oEAAoE,SAAW,iBAAiB,WAAa,iBAAiB,eAAiB,oBAAoB,iBAAmB,mBAAmB,QAAU,cAAc,MAAQ,gCAAgC,8BAAgC,6EAA6E,aAAe,8CAA8C,EAAE,OAAS,CAAC,KAAO,OAAO,WAAa,gBAAgB,UAAY,gBAAgB,MAAQ,aAAa,eAAiB,sMAAsM,mBAAqB,4CAA4C,aAAe,wBAAwB,EAAE,QAAU,CAAC,KAAO,sBAAsB,QAAU,aAAa,MAAQ,mBAAmB,eAAiB,8BAA8B,qBAAuB,wCAAwC,gBAAkB,uCAAuC,eAAiB,uMAAuM,mBAAqB,sIAAsI,gBAAkB,wBAAwB,CAAC,EAAE,QAAU,CAAC,MAAQ,QAAQ,QAAU,CAAC,MAAQ,UAAU,UAAY,cAAc,KAAO,oBAAoB,QAAU,WAAW,gBAAkB,cAAc,KAAO,2BAA2B,IAAM,sBAAsB,QAAU,SAAS,QAAU,uBAAuB,EAAE,MAAQ,CAAC,QAAU,SAAS,YAAc,gBAAgB,MAAQ,QAAQ,MAAQ,QAAQ,KAAO,OAAO,MAAQ,MAAM,WAAa,OAAO,WAAa,YAAY,kBAAoB,uBAAuB,eAAiB,0BAA0B,WAAa,kBAAkB,SAAW,eAAe,aAAe,sBAAsB,UAAY,WAAW,SAAW,UAAU,EAAE,OAAS,CAAC,KAAO,6CAA6C,CAAC,EAAE,QAAU,CAAC,WAAa,CAAC,cAAgB,iBAAiB,WAAa,CAAC,MAAQ,WAAW,EAAE,qBAAuB,CAAC,WAAa,WAAW,OAAS,QAAQ,CAAC,EAAE,UAAY,CAAC,QAAU,cAAc,cAAgB,CAAC,MAAQ,YAAY,EAAE,OAAS,CAAC,MAAQ,QAAQ,EAAE,YAAc,CAAC,MAAQ,gBAAgB,UAAY,CAAC,MAAQ,WAAW,EAAE,SAAW,CAAC,MAAQ,YAAY,CAAC,CAAC,EAAE,SAAW,CAAC,OAAS,CAAC,QAAU,YAAY,EAAE,UAAY,CAAC,QAAU,OAAO,CAAC,EAAE,SAAW,CAAC,QAAU,8BAA8B,SAAW,CAAC,MAAQ,eAAe,EAAE,eAAiB,CAAC,MAAQ,yBAAyB,EAAE,eAAiB,CAAC,QAAU,gBAAgB,SAAW,CAAC,MAAQ,eAAe,CAAC,CAAC,EAAE,YAAc,CAAC,QAAU,aAAa,MAAQ,YAAY,EAAE,iBAAmB,CAAC,QAAU,8BAA8B,YAAc,CAAC,QAAU,gBAAgB,EAAE,cAAgB,CAAC,QAAU,gBAAgB,aAAe,CAAC,WAAa,iBAAiB,YAAc,eAAe,CAAC,EAAE,iBAAmB,WAAW,qBAAuB,qBAAqB,EAAE,WAAa,CAAC,QAAU,aAAa,EAAE,SAAW,CAAC,QAAU,UAAU,UAAY,CAAC,QAAU,OAAO,CAAC,EAAE,WAAa,CAAC,QAAU,oBAAoB,QAAU,CAAC,QAAU,aAAa,EAAE,SAAW,CAAC,QAAU,iBAAiB,CAAC,CAAC,EAAE,OAAS,CAAC,MAAQ,WAAW,QAAU,CAAC,SAAW,YAAY,EAAE,MAAQ,CAAC,QAAU,SAAS,WAAa,WAAW,aAAe,cAAc,WAAa,cAAc,OAAS,aAAa,WAAa,YAAY,SAAW,aAAa,aAAe,WAAW,IAAM,YAAY,cAAgB,QAAQ,aAAe,KAAK,QAAU,UAAU,sBAAwB,SAAS,gBAAkB,UAAU,SAAW,QAAQ,gBAAkB,YAAY,mBAAqB,aAAa,YAAc,WAAW,cAAgB,eAAe,CAAC,EAAE,oBAAsB,CAAC,MAAQ,8BAA8B,QAAU,CAAC,SAAW,sCAAsC,SAAW,aAAa,WAAa,sCAAsC,WAAa,aAAa,2BAA6B,gBAAgB,WAAa,YAAY,EAAE,MAAQ,CAAC,MAAQ,QAAQ,OAAS,UAAU,MAAQ,QAAQ,QAAU,aAAa,IAAM,WAAW,OAAS,WAAW,KAAO,WAAW,OAAS,CAAC,QAAU,YAAY,EAAE,SAAW,CAAC,QAAU,cAAc,EAAE,WAAa,CAAC,MAAQ,aAAa,EAAE,SAAW,CAAC,MAAQ,aAAa,QAAU,gBAAgB,EAAE,aAAe,4BAA4B,IAAM,kBAAkB,QAAU,gBAAgB,6BAA+B,0BAA0B,aAAe,gBAAgB,YAAc,WAAW,gBAAkB,oCAAoC,gBAAkB,kBAAkB,CAAC,EAAE,WAAa,CAAC,OAAS,aAAa,OAAS,gBAAgB,QAAU,SAAS,QAAU,aAAa,YAAc,UAAU,KAAO,SAAS,SAAW,aAAa,WAAa,kBAAkB,MAAQ,QAAQ,MAAQ,QAAQ,MAAQ,UAAU,EAAE,kBAAoB,CAAC,OAAS,aAAa,OAAS,sBAAsB,WAAa,WAAW,QAAU,aAAa,KAAO,UAAU,KAAO,SAAS,QAAU,eAAe,MAAQ,QAAQ,MAAQ,QAAQ,KAAO,UAAU,MAAQ,UAAU,EAAE,WAAa,CAAC,QAAU,8BAA8B,UAAY,QAAQ,kBAAoB,WAAW,YAAc,gBAAgB,YAAc,eAAe,eAAiB,qBAAqB,OAAS,OAAO,QAAU,SAAS,MAAQ,OAAO,MAAQ,SAAS,KAAO,OAAO,cAAgB,qBAAqB,4BAA8B,4CAA4C,wBAA0B,2BAA2B,EAAE,UAAY,CAAC,YAAc,eAAe,UAAY,aAAa,IAAM,cAAc,IAAM,QAAQ,GAAK,KAAK,UAAY,eAAe,YAAc,eAAe,YAAc,cAAc,EAAE,YAAc,CAAC,gBAAkB,yBAAyB,IAAM,QAAQ,mBAAqB,0BAA0B,eAAiB,qBAAqB,KAAO,OAAO,KAAO,OAAO,QAAU,WAAW,YAAc,cAAc,QAAU,cAAc,eAAiB,sBAAsB,QAAU,SAAS,UAAY,QAAQ,kBAAoB,2BAA2B,EAAE,eAAiB,CAAC,KAAO,QAAQ,EAAE,mBAAqB,CAAC,OAAS,aAAa,WAAa,cAAc,kBAAoB,oBAAoB,gBAAkB,qBAAqB,MAAQ,cAAc,kBAAoB,aAAa,gBAAkB,cAAc,YAAc,aAAa,MAAQ,UAAU,EAAE,iBAAmB,CAAC,OAAS,aAAa,QAAU,aAAa,KAAO,SAAS,OAAS,SAAS,MAAQ,YAAY,MAAQ,QAAQ,MAAQ,UAAU,EAAE,eAAiB,CAAC,KAAO,WAAW,UAAY,WAAW,OAAS,QAAQ,YAAc,iBAAiB,KAAO,SAAS,OAAS,QAAQ,MAAQ,QAAQ,YAAc,gBAAgB,gBAAkB,kBAAkB,OAAS,kBAAkB,WAAa,iBAAiB,CAAC,EAAE,aAAe,CAAC,MAAQ,CAAC,SAAW,aAAa,OAAS,aAAa,QAAU,qBAAqB,WAAa,cAAc,EAAE,SAAW,CAAC,MAAQ,yBAAyB,KAAO,4CAA4C,cAAgB,yBAAyB,YAAc,uBAAuB,OAAS,UAAU,EAAE,WAAa,CAAC,iBAAmB,sBAAsB,uBAAyB,0CAA0C,2BAA6B,cAAc,EAAE,MAAQ,CAAC,MAAQ,WAAW,cAAgB,YAAY,EAAE,OAAS,CAAC,MAAQ,mCAAmC,aAAe,wCAAwC,WAAa,qUAAqU,sBAAwB,+QAA+Q,qBAAuB,gTAAgT,mBAAqB,sHAAsH,qBAAuB,qUAAqU,aAAe,uBAAuB,QAAU,gBAAgB,SAAW,oBAAoB,WAAa,wBAAwB,SAAW,uBAAuB,UAAY,6DAA6D,qBAAuB,8BAA8B,qBAAuB,kDAAkD,eAAiB,8BAA8B,iBAAmB,yDAAyD,aAAe,yBAAyB,cAAgB,sEAAsE,iBAAmB,QAAQ,eAAiB,sCAAsC,cAAgB,iCAAiC,kBAAoB,2FAA2F,yBAA2B,iIAAiI,mBAAqB,qBAAqB,kCAAoC,sQAAsQ,kCAAoC,yKAAyK,EAAE,SAAW,CAAC,gBAAkB,oBAAoB,qBAAuB,6CAA6C,wBAA0B,0DAA0D,uBAAyB,mBAAmB,aAAe,8SAA8S,iBAAmB,gQAAgQ,EAAE,eAAiB,CAAC,UAAY,6CAA6C,QAAU,WAAW,QAAU,cAAc,EAAE,iBAAmB,CAAC,aAAe,8BAA8B,YAAc,CAAC,KAAO,oaAAsa,EAAE,aAAe,sCAAsC,QAAU,UAAU,EAAE,QAAU,CAAC,WAAa,CAAC,iBAAmB,wBAAwB,EAAE,cAAgB,CAAC,iBAAmB,+BAA+B,EAAE,eAAiB,CAAC,iBAAmB,8BAA8B,EAAE,qBAAuB,CAAC,iBAAmB,sBAAsB,EAAE,iBAAmB,CAAC,iBAAmB,wBAAwB,EAAE,eAAiB,CAAC,iBAAmB,6BAA6B,EAAE,cAAgB,CAAC,iBAAmB,mCAAmC,EAAE,UAAY,CAAC,iBAAmB,uCAAuC,EAAE,aAAe,CAAC,iBAAmB,6BAA6B,EAAE,oBAAsB,CAAC,iBAAmB,qCAAqC,CAAC,CAAC,EAAE,aAAe,CAAC,eAAiB,CAAC,UAAY,YAAY,EAAE,eAAiB,CAAC,qBAAuB,sBAAsB,sBAAwB,kBAAkB,WAAa,SAAS,eAAiB,QAAQ,kBAAoB,gBAAgB,gBAAkB,mBAAmB,eAAiB,eAAe,EAAE,kBAAoB,CAAC,QAAU,aAAa,MAAQ,WAAW,WAAa,CAAC,KAAO,QAAQ,KAAO,SAAS,EAAE,QAAU,CAAC,SAAW,cAAc,EAAE,YAAc,CAAC,oBAAsB,yEAAyE,CAAC,EAAE,kBAAoB,CAAC,YAAc,6BAA6B,aAAe,iBAAiB,WAAa,sBAAsB,MAAQ,oBAAoB,QAAU,0BAA0B,YAAc,0EAA0E,EAAE,sBAAwB,CAAC,WAAa,CAAC,WAAa,CAAC,MAAQ,iBAAiB,CAAC,EAAE,SAAW,aAAa,SAAW,eAAe,gBAAkB,mCAAmC,aAAe,CAAC,qBAAuB,0GAA0G,EAAE,kBAAoB,CAAC,KAAO,CAAC,KAAO,iMAAiM,EAAE,iBAAmB,0BAA0B,QAAU,iBAAiB,EAAE,eAAiB,CAAC,kBAAoB,0BAA0B,QAAU,iBAAiB,EAAE,wCAA0C,CAAC,qBAAuB,MAAM,EAAE,YAAc,CAAC,iBAAmB,oBAAoB,UAAY,mBAAmB,gBAAkB,qBAAqB,aAAe,4CAA4C,cAAgB,4EAA4E,yBAA2B,iCAAiC,6BAA+B,iCAAiC,8BAAgC,+BAA+B,EAAE,aAAe,CAAC,YAAc,qBAAqB,UAAY,QAAQ,eAAiB,uBAAuB,EAAE,eAAiB,CAAC,iCAAmC,6BAA6B,CAAC,EAAE,sBAAwB,CAAC,eAAiB,CAAC,cAAgB,oBAAoB,cAAgB,eAAe,EAAE,eAAiB,CAAC,YAAc,SAAS,cAAgB,2BAA2B,CAAC,EAAE,gBAAkB,CAAC,eAAiB,sBAAsB,aAAe,yBAAyB,WAAa,kBAAkB,eAAiB,yBAAyB,gBAAkB,0BAA0B,WAAa,mBAAmB,YAAc,oBAAoB,MAAQ,uCAAuC,EAAE,aAAe,CAAC,YAAc,CAAC,cAAgB,2BAA2B,IAAM,kBAAkB,gBAAkB,yBAAyB,cAAgB,gBAAgB,EAAE,cAAgB,CAAC,iBAAmB,UAAU,gBAAkB,gBAAgB,aAAe,aAAa,cAAgB,QAAQ,CAAC,EAAE,MAAQ,CAAC,OAAS,YAAY,EAAE,gBAAkB,CAAC,QAAU,CAAC,aAAe,gBAAgB,WAAa,iBAAiB,EAAE,oBAAsB,eAAe,kBAAoB,iBAAiB,KAAO,SAAS,MAAQ,UAAU,EAAE,0BAA4B,CAAC,QAAU,yBAAyB,eAAiB,kBAAkB,YAAc,YAAY,UAAY,SAAS,EAAE,wBAA0B,CAAC,QAAU,yBAAyB,eAAiB,kBAAkB,YAAc,YAAY,UAAY,cAAc,QAAU,aAAa,EAAE,cAAgB,CAAC,WAAa,kBAAkB,OAAS,CAAC,MAAQ,iBAAiB,EAAE,QAAU,YAAY,EAAE,YAAc,CAAC,oBAAsB,CAAC,aAAe,sBAAsB,YAAc,yEAAyE,WAAa,iBAAiB,UAAY,8IAA8I,EAAE,QAAU,CAAC,OAAS,CAAC,QAAU,UAAU,QAAU,oBAAoB,SAAW,UAAU,oBAAsB,sBAAsB,SAAW,YAAY,CAAC,EAAE,SAAW,CAAC,oBAAsB,CAAC,KAAO,2TAA2T,EAAE,mBAAqB,0BAA0B,oBAAsB,mCAAmC,WAAa,CAAC,KAAO,iIAAiI,EAAE,MAAQ,CAAC,KAAO,+7DAAi8D,EAAE,qBAAuB,aAAa,iBAAmB,SAAS,sBAAwB,WAAW,sBAAwB,kBAAkB,wBAA0B,OAAO,aAAe,oBAAoB,YAAc,UAAU,EAAE,eAAiB,sBAAsB,KAAO,CAAC,iBAAmB,kCAAkC,UAAY,cAAc,gBAAkB,wBAAwB,CAAC,EAAE,kBAAoB,CAAC,cAAgB,2BAA2B,gBAAkB,2BAA2B,oBAAsB,mCAAmC,kBAAoB,CAAC,aAAe,sBAAsB,YAAc,yEAAyE,WAAa,iBAAiB,UAAY,+IAA+I,UAAY,2IAA2I,EAAE,eAAiB,6FAA6F,gBAAkB,qCAAqC,UAAY,WAAW,aAAe,UAAU,WAAa,0BAA0B,aAAe,iBAAiB,cAAgB,gCAAgC,kBAAoB,gBAAgB,MAAQ,UAAU,eAAiB,4BAA4B,sBAAwB,6BAA6B,YAAc,WAAW,aAAe,oBAAoB,kBAAoB,2BAA2B,WAAa,iBAAiB,EAAE,oBAAsB,CAAC,gBAAkB,wBAAwB,aAAe,cAAc,eAAiB,iBAAiB,aAAe,cAAc,YAAc,WAAW,YAAc,qBAAqB,aAAe,yBAAyB,mBAAqB,oDAAoD,WAAa,2BAA2B,YAAc,uBAAuB,EAAE,0BAA4B,CAAC,IAAM,OAAO,EAAE,sBAAwB,CAAC,kBAAoB,CAAC,oBAAsB,sEAAsE,CAAC,EAAE,WAAa,CAAC,UAAY,gBAAgB,EAAE,kBAAoB,CAAC,QAAU,YAAY,SAAW,aAAa,WAAa,SAAS,OAAS,eAAe,QAAU,cAAc,UAAY,uBAAuB,WAAa,0BAA0B,WAAa,iBAAiB,sBAAwB,sIAAsI,uBAAyB,4HAA4H,YAAc,sCAAsC,sBAAwB,oCAAoC,SAAW,mBAAmB,qBAAuB,iBAAiB,EAAE,4BAA8B,CAAC,YAAc,qBAAqB,UAAY,OAAO,QAAU,QAAQ,UAAY,gBAAgB,gBAAkB,2BAA2B,mBAAqB,6DAA6D,EAAE,uBAAyB,CAAC,YAAc,CAAC,OAAS,YAAY,UAAY,QAAQ,EAAE,UAAY,CAAC,kBAAoB,uBAAuB,sBAAwB,wDAAwD,MAAQ,WAAW,UAAY,8BAA8B,gBAAkB,yBAAyB,sBAAwB;AAAA,0FAA8I,uBAAyB;AAAA,yDAA2H,0BAA4B,yBAAyB,OAAS,WAAW,WAAa,6BAA6B,eAAiB,0BAA0B,mBAAqB,kEAAkE,qBAAuB,YAAY,CAAC,EAAE,kBAAoB,CAAC,mBAAqB,YAAY,eAAiB,QAAQ,mBAAqB,2BAA2B,aAAe,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAwZ,CAAC,EAAE,iCAAmC,CAAC,QAAU,gBAAgB,eAAiB,OAAO,aAAe,QAAQ,mBAAqB,aAAa,WAAa,SAAS,EAAE,sBAAwB,CAAC,qBAAuB,CAAC,OAAS,iBAAiB,UAAY,2BAA2B,SAAW,kBAAkB,iBAAmB,kBAAkB,gBAAkB,sCAAsC,QAAU,sBAAsB,EAAE,YAAc,YAAY,eAAiB,kBAAkB,UAAY,CAAC,MAAQ,WAAW,UAAY,SAAS,WAAa,YAAY,eAAiB,sBAAsB,EAAE,UAAY,CAAC,YAAc,uBAAuB,MAAQ,WAAW,yBAA2B,gCAAgC,CAAC,EAAE,kBAAoB,CAAC,QAAU,eAAe,KAAO,KAAK,aAAe,UAAU,SAAW,kBAAkB,QAAU,OAAO,KAAO,SAAS,UAAY,CAAC,MAAQ,8BAA8B,MAAQ,kNAAkN,aAAe,kBAAkB,UAAY;AAAA;AAAA;AAAA,oBAAuI,2BAA6B,mCAAmC,cAAgB,uBAAuB,WAAa;AAAA;AAAA;AAAA,0DAA4M,EAAE,SAAW,CAAC,OAAS,uCAAuC,WAAa,YAAY,MAAQ,8KAA8K,OAAS,4EAA4E,kBAAoB,eAAe,WAAa,YAAY,aAAe,kEAAkE,iBAAmB,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA,4CAA4R,CAAC,EAAE,aAAe,OAAO,aAAe,QAAQ,cAAgB,gBAAgB,UAAY,yBAAyB,oBAAsB,YAAY,oBAAsB,aAAa,WAAa,gBAAgB,iBAAmB,+BAA+B,eAAiB,YAAY,eAAiB,gBAAgB,QAAU,CAAC,KAAO,WAAW,iBAAmB,2BAA2B,aAAe,eAAe,MAAQ,WAAW,EAAE,QAAU,CAAC,SAAW,CAAC,OAAS,uBAAuB,WAAa,oCAAoC,UAAY,CAAC,KAAO;AAAA,wCAA0R,EAAE,WAAa,CAAC,KAAO,+NAA+N,EAAE,WAAa,CAAC,KAAO,iNAAiN,EAAE,WAAa,CAAC,KAAO,qSAAqS,CAAC,EAAE,aAAe,CAAC,OAAS,iBAAiB,YAAc,+EAA+E,gBAAkB,CAAC,KAAO;AAAA;AAAA,kGAAqT,CAAC,EAAE,gBAAkB,CAAC,QAAU,sBAAsB,YAAc,+CAA+C,aAAe,uCAAuC,EAAE,eAAiB,CAAC,OAAS,yBAAyB,YAAc,sGAAsG,gBAAkB,CAAC,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAmjB,EAAE,aAAe,4LAA4L,CAAC,EAAE,cAAgB,sBAAsB,oBAAsB,CAAC,SAAW,CAAC,WAAa,WAAW,CAAC,EAAE,qBAAuB,wBAAwB,mBAAqB,iBAAiB,cAAgB,yBAAyB,mBAAqB,2BAA2B,qBAAuB,qBAAqB,WAAa,CAAC,OAAS,6BAA6B,MAAQ,6FAA6F,OAAS,gDAAgD,EAAE,MAAQ,CAAC,UAAY,kDAAkD,4BAA8B,0EAA0E,CAAC,EAAE,4BAA8B,CAAC,gBAAkB,CAAC,KAAO;AAAA,sDAAkH,EAAE,iBAAmB,CAAC,KAAO;AAAA,sEAAgI,EAAE,oBAAsB,CAAC,KAAO;AAAA,6EAA8I,EAAE,iBAAmB,CAAC,KAAO;AAAA,0GAA4J,EAAE,WAAa,CAAC,KAAO;AAAA,oDAA8F,EAAE,MAAQ,CAAC,KAAO;AAAA,sEAA8G,EAAE,aAAe,8BAA8B,MAAQ,gGAAgG,MAAQ,CAAC,KAAO;AAAA,qEAA2K,EAAE,wBAA0B,8CAA8C,SAAW,CAAC,KAAO;AAAA,oGAAuI,EAAE,cAAgB,+BAA+B,aAAe,UAAU,uBAAyB,0BAA0B,sBAAwB,qEAAqE,aAAe,oBAAoB,MAAQ,CAAC,aAAe,cAAc,YAAc,kBAAkB,gBAAkB,0BAA0B,4BAA8B,qBAAqB,aAAe,uBAAuB,UAAY,8BAA8B,UAAY,WAAW,QAAU,WAAW,EAAE,iBAAmB,6BAA6B,EAAE,iBAAmB,CAAC,WAAa,cAAc,WAAa,WAAW,YAAc,CAAC,aAAe,iBAAiB,WAAa,sBAAsB,QAAU,0BAA0B,YAAc,0EAA0E,CAAC,EAAE,qBAAuB,CAAC,QAAU,gBAAgB,UAAY,UAAU,SAAW,WAAW,MAAQ,mBAAmB,SAAW,QAAQ,gBAAkB,aAAa,WAAa,CAAC,UAAY,WAAW,QAAU,YAAY,YAAc,yBAAyB,aAAe,oBAAoB,EAAE,eAAiB,CAAC,MAAQ,cAAc,oBAAsB,kBAAkB,WAAa,mBAAmB,EAAE,SAAW,gBAAgB,QAAU,SAAS,4BAA8B,iHAAiH,YAAc,2CAA2C,OAAS,aAAa,WAAa,cAAc,KAAO,WAAW,aAAe,CAAC,KAAO,sVAAsV,EAAE,IAAM,eAAe,EAAE,oBAAsB,CAAC,QAAU,CAAC,MAAQ,0BAA0B,YAAc,4BAA4B,EAAE,UAAY,CAAC,MAAQ,mBAAmB,EAAE,KAAO,CAAC,YAAc,0BAA0B,eAAiB,4BAA4B,EAAE,WAAa,CAAC,MAAQ,aAAa,UAAY,WAAW,QAAU,YAAY,YAAc,yBAAyB,aAAe,oBAAoB,EAAE,oBAAsB,iBAAiB,EAAE,WAAa,CAAC,UAAY,QAAQ,eAAiB,eAAe,mBAAqB,OAAO,iBAAmB,UAAU,iBAAmB,mBAAmB,gBAAkB,eAAe,kBAAoB,KAAK,mBAAqB,SAAS,kBAAoB,iBAAiB,kBAAoB,cAAc,mBAAqB,QAAQ,WAAa,QAAQ,aAAe,KAAK,aAAe,eAAe,aAAe,WAAW,KAAO,CAAC,OAAS,CAAC,MAAQ,YAAY,GAAK,KAAK,KAAO,SAAS,KAAO,OAAO,YAAc,QAAQ,EAAE,OAAS,CAAC,MAAQ,aAAa,KAAO,SAAS,MAAQ,OAAO,YAAc,QAAQ,CAAC,EAAE,WAAa,CAAC,MAAQ,qBAAqB,MAAQ,iMAAiM,WAAa,gBAAgB,aAAe,sBAAsB,YAAc,sBAAsB,YAAc,mBAAmB,EAAE,aAAe,CAAC,MAAQ,iBAAiB,MAAQ,yFAAyF,eAAiB,0BAA0B,EAAE,WAAa,CAAC,MAAQ,kBAAkB,MAAQ,iFAAiF,aAAe,WAAW,aAAe,wBAAwB,CAAC,EAAE,WAAa,CAAC,sBAAwB,qCAAqC,yBAA2B,kCAAkC,0BAA4B,6BAA6B,0BAA4B,sCAAsC,KAAO,CAAC,MAAQ,oBAAoB,SAAW,CAAC,MAAQ,UAAU,KAAO,kHAAkH,KAAO,iLAAiL,CAAC,EAAE,QAAU,CAAC,MAAQ,iCAAiC,QAAU,0BAA0B,mBAAqB,mDAAmD,cAAgB,iCAAiC,2BAA6B,mCAAmC,SAAW,gBAAgB,CAAC,EAAE,aAAe,CAAC,sBAAwB,qCAAqC,yBAA2B,2BAA2B,0BAA4B,6BAA6B,0BAA4B,sCAAsC,KAAO,CAAC,MAAQ,wBAAwB,SAAW,CAAC,MAAQ,UAAU,KAAO,2DAA2D,KAAO,6GAA6G,CAAC,CAAC,EAAE,cAAgB,CAAC,8BAAgC,gCAAgC,+BAAiC,6CAA6C,wCAA0C,4BAA4B,KAAO,CAAC,MAAQ,qBAAqB,SAAW,CAAC,MAAQ,UAAU,KAAO,oDAAoD,KAAO,uMAAuM,CAAC,CAAC,EAAE,kBAAoB,CAAC,aAAe,uBAAuB,WAAa,SAAS,eAAiB,uBAAuB,gBAAkB,eAAe,cAAgB,gBAAgB,WAAa,MAAM,EAAE,gBAAkB,CAAC,OAAS,QAAQ,EAAE,YAAc,CAAC,gBAAkB,mBAAmB,MAAQ,aAAa,YAAc,iBAAiB,MAAQ,gBAAgB,WAAa,WAAW,QAAU,SAAS,YAAc,aAAa,WAAa,aAAa,kBAAoB,WAAW,EAAE,aAAe,CAAC,kBAAoB,mCAAmC,OAAS,gBAAgB,aAAe,iBAAiB,2BAA6B,SAAS,SAAW,cAAc,OAAS,SAAS,SAAW,eAAe,WAAa,cAAc,MAAQ,OAAO,iBAAmB,eAAe,QAAU,aAAa,OAAS,aAAa,SAAW,UAAU,WAAa,cAAc,IAAM,OAAO,WAAa,aAAa,aAAe,sBAAsB,iBAAmB,sBAAsB,EAAI,KAAK,cAAgB,YAAY,gBAAkB,uBAAuB,EAAE,UAAY,CAAC,eAAiB,gBAAgB,qBAAuB,uBAAuB,aAAe,cAAc,UAAY,YAAY,WAAa,eAAe,qBAAuB,0BAA0B,sBAAwB,sBAAsB,kBAAoB,mCAAmC,aAAe,SAAS,EAAE,YAAc,CAAC,WAAa,SAAS,eAAiB,QAAQ,kBAAoB,gBAAgB,gBAAkB,mBAAmB,eAAiB,gBAAgB,OAAS,qBAAqB,OAAS,sBAAsB,WAAa,aAAa,EAAE,aAAe,CAAC,MAAQ,uBAAuB,WAAa,eAAe,2BAA6B,0BAA0B,4BAA8B,sBAAsB,kBAAoB,mCAAmC,2BAA6B,SAAS,gBAAkB,cAAc,sBAAwB,CAAC,KAAO,4IAA4I,EAAE,gBAAkB,cAAc,SAAW,CAAC,YAAc,UAAU,YAAc,qHAAqH,iBAAmB,sBAAsB,CAAC,EAAE,cAAgB,CAAC,KAAO,eAAe,SAAW,cAAc,WAAa,cAAc,WAAa,WAAW,SAAW,cAAc,QAAU,aAAa,oBAAsB,mBAAmB,eAAiB,aAAa,QAAU,UAAU,EAAE,qBAAuB,CAAC,cAAgB,cAAc,YAAc,SAAS,MAAQ,WAAW,YAAc,WAAW,YAAc,SAAS,WAAa,QAAQ,IAAM,QAAQ,cAAgB,iBAAiB,WAAa,iBAAiB,EAAE,aAAe,CAAC,OAAS,OAAO,eAAiB,CAAC,QAAU,eAAe,QAAU,KAAK,MAAQ,QAAQ,QAAU,UAAU,EAAE,SAAW,UAAU,KAAO,CAAC,MAAQ,aAAa,UAAY,SAAS,WAAa,cAAc,YAAc,cAAc,EAAE,WAAa,cAAc,cAAgB,eAAe,iBAAmB,cAAc,MAAQ,SAAS,OAAS,WAAW,MAAQ,WAAW,CAAC,EAAE,QAAU,CAAC,gBAAkB,CAAC,oBAAsB,0BAA0B,eAAiB,4BAA4B,mBAAqB,8CAA8C,aAAe,sBAAsB,mBAAqB,iEAAiE,iBAAmB,8DAA8D,iBAAmB,yBAAyB,gBAAkB,kBAAkB,YAAc,eAAe,QAAU,WAAW,cAAgB,eAAe,oBAAsB,2CAA2C,aAAe,kBAAkB,YAAc,mBAAmB,WAAa,eAAe,OAAS,gBAAgB,oBAAsB,4DAA4D,cAAgB,oBAAoB,yBAA2B,0EAA0E,EAAE,aAAe,CAAC,gBAAkB,6CAA6C,gBAAkB,oDAAoD,cAAgB,qBAAqB,eAAiB,8CAA8C,EAAE,eAAiB,CAAC,WAAa,cAAc,kBAAoB,2EAA2E,sBAAwB,8EAA8E,8BAAgC,qDAAqD,kCAAoC,wDAAwD,0BAA4B,wCAAwC,cAAgB,iBAAiB,eAAiB,aAAa,kBAAoB,oBAAoB,eAAiB,aAAa,KAAO,WAAW,yBAA2B,4BAA4B,oBAAsB,oBAAoB,IAAM,OAAO,EAAE,wBAA0B,CAAC,mBAAqB,oCAAoC,0BAA4B,iDAAiD,KAAO,OAAO,MAAQ,WAAW,OAAS,SAAS,KAAO,SAAS,mBAAqB,sBAAsB,sBAAwB,8BAA8B,WAAa,sDAAsD,wBAA0B,kCAAkC,EAAE,SAAW,CAAC,MAAQ,SAAS,gBAAkB,oCAAoC,yBAA2B,0EAA0E,sBAAwB,4BAA4B,EAAE,eAAiB,CAAC,MAAQ,UAAU,yBAA2B,+BAA+B,uBAAyB,2DAA2D,UAAY,uBAAuB,oBAAsB,8EAA8E,eAAiB,uBAAuB,UAAY,iCAAiC,kBAAoB,iCAAiC,gBAAkB,2BAA2B,QAAU,4BAA4B,uBAAyB,6DAA6D,YAAc,SAAS,gBAAkB,uJAAuJ,uBAAyB,yBAAyB,SAAW,aAAa,YAAc,eAAe,OAAS,gBAAgB,MAAQ,YAAY,uBAAyB,6CAA6C,aAAe,gBAAgB,sBAAwB,6BAA6B,gBAAkB,yBAAyB,4BAA8B,uHAAuH,EAAE,mBAAqB,CAAC,aAAe,oFAAoF,iBAAmB,0BAA0B,eAAiB,oBAAoB,KAAO,UAAU,qBAAuB,+CAA+C,gBAAkB,mCAAmC,wBAA0B,4LAA4L,cAAgB,mBAAmB,aAAe,aAAa,oBAAsB,0OAA0O,qBAAuB,iQAAiQ,yBAA2B,4BAA4B,oBAAsB,oBAAoB,IAAM,QAAQ,UAAY,UAAU,EAAE,eAAiB,CAAC,eAAiB,8BAA8B,mBAAqB,oCAAoC,kBAAoB,kBAAkB,sBAAwB,wCAAwC,aAAe,aAAa,iBAAmB,mCAAmC,KAAO,iBAAiB,SAAW,wBAAwB,IAAM,gBAAgB,QAAU,uBAAuB,KAAO,iBAAiB,SAAW,wBAAwB,iBAAmB,8BAA8B,qBAAuB,qCAAqC,eAAiB,oCAAoC,mBAAqB,qDAAqD,gBAAkB,qCAAqC,oBAAsB,sDAAsD,KAAO,iBAAiB,SAAW,wBAAwB,mBAAqB,mBAAmB,uBAAyB,8BAA8B,iBAAmB,6BAA6B,aAAe,iBAAiB,WAAa,sBAAsB,YAAc,oBAAoB,QAAU,0BAA0B,YAAc,0EAA0E,EAAE,gBAAkB,CAAC,gBAAkB,oEAAoE,mBAAqB,yBAAyB,aAAe,yEAAyE,EAAE,aAAe,CAAC,WAAa,iBAAiB,iBAAmB,mBAAmB,aAAe,aAAa,EAAE,kBAAoB,CAAC,sBAAwB,gCAAgC,8BAAgC,0IAA0I,8BAAgC,6IAA6I,kBAAoB,gGAAgG,SAAW,aAAa,SAAW,YAAY,EAAE,cAAgB,CAAC,WAAa,aAAa,EAAE,oBAAsB,CAAC,WAAa,cAAc,YAAc,cAAc,MAAQ,OAAO,IAAM,QAAQ,cAAgB,uBAAuB,uBAAyB,yCAAyC,EAAE,uBAAyB,CAAC,kBAAoB,wHAAwH,aAAe,cAAc,iBAAmB,kDAAkD,iCAAmC,gCAAgC,WAAa,sBAAsB,YAAc,qBAAqB,WAAa,eAAe,oBAAsB,oBAAoB,UAAY,2DAA2D,UAAY,2QAA2Q,UAAY,sSAAsS,EAAE,cAAgB,CAAC,cAAgB,YAAY,OAAS,WAAW,IAAM,QAAQ,MAAQ,SAAS,SAAW,YAAY,KAAO,WAAW,6BAA+B,6BAA6B,iBAAmB,mBAAmB,aAAe,sBAAsB,kBAAoB,6BAA6B,cAAgB,0BAA0B,+BAAiC,sCAAsC,kCAAoC,iCAAiC,EAAE,oBAAsB,CAAC,uBAAyB,0BAA0B,sBAAwB,sIAAsI,oBAAsB,wBAAwB,0BAA4B,+JAA+J,gBAAkB,kBAAkB,4BAA8B,oCAAoC,UAAY,aAAa,kCAAoC,iCAAiC,sBAAwB,2BAA2B,uBAAyB,2BAA2B,0BAA4B,8BAA8B,uBAAyB,6BAA6B,8BAAgC,oCAAoC,sBAAwB,0BAA0B,sBAAwB,2BAA2B,kBAAoB,qCAAqC,yBAA2B,8BAA8B,4BAA8B,iCAAiC,uBAAyB,iGAAiG,yBAA2B,iGAAiG,sBAAwB,8EAA8E,4BAA8B,iCAAiC,yBAA2B,yCAAyC,uBAAyB,uCAAuC,0BAA4B,uCAAuC,4BAA8B,iCAAiC,EAAE,sBAAwB,CAAC,oBAAsB,mBAAmB,EAAE,eAAiB,CAAC,MAAQ,SAAS,MAAQ,QAAQ,mCAAqC,wCAAwC,eAAiB,CAAC,UAAY,CAAC,MAAQ,2MAA6M,MAAQ,gCAAgC,EAAE,eAAiB,CAAC,MAAQ,gLAAgL,QAAU,yDAAyD,oBAAsB,yBAAyB,iBAAmB,gTAAgT,EAAE,WAAa,CAAC,MAAQ,gLAAgL,QAAU,qCAAqC,oBAAsB,kCAAkC,iBAAmB,iOAAiO,EAAE,YAAc,CAAC,MAAQ,gLAAgL,QAAU,wBAAwB,oBAAsB,kCAAkC,iBAAmB,yMAAyM,EAAE,iBAAmB,CAAC,MAAQ,gLAAgL,oBAAsB,yBAAyB,iBAAmB,kPAAkP,EAAE,iBAAmB,CAAC,MAAQ,iKAAiK,QAAU,oCAAoC,oBAAsB,+BAA+B,iBAAmB;AAAA;AAAA;AAAA;AAAA,uHAAyS,eAAiB,mBAAmB,mBAAqB,sBAAsB,EAAE,OAAS,CAAC,MAAQ,iKAAiK,QAAU,oCAAoC,oBAAsB,+BAA+B,iBAAmB;AAAA;AAAA;AAAA;AAAA,uHAAyS,eAAiB,mBAAmB,mBAAqB,sBAAsB,EAAE,YAAc,CAAC,MAAQ,4aAA4a,QAAU,0CAA0C,oBAAsB,yBAAyB,iBAAmB,8UAA8U,eAAiB,CAAC,KAAO,2QAA2Q,KAAO,kHAAkH,EAAE,YAAc,CAAC,KAAO,8JAA8J,oBAAsB,6CAA6C,iBAAmB,sGAAsG,CAAC,EAAE,cAAgB,CAAC,MAAQ,mfAAmf,QAAU,2CAA2C,oBAAsB,yBAAyB,iBAAmB,0RAA0R,EAAE,WAAa,CAAC,MAAQ,gaAAga,QAAU,qCAAqC,oBAAsB,yBAAyB,iBAAmB,uUAAuU,eAAiB,CAAC,KAAO,qQAAqQ,KAAO,4GAA4G,EAAE,YAAc,CAAC,KAAO,6JAA6J,CAAC,EAAE,WAAa,CAAC,MAAQ,iXAAiX,EAAE,cAAgB,CAAC,MAAQ,2WAA2W,QAAU,oDAAoD,oBAAsB,yBAAyB,iBAAmB,sPAAsP,eAAiB,CAAC,KAAO,sQAAsQ,CAAC,EAAE,cAAgB,CAAC,MAAQ,qXAAqX,EAAE,QAAU,CAAC,MAAQ,8WAA8W,QAAU,sCAAsC,oBAAsB,yBAAyB,iBAAmB,2RAA2R,EAAE,MAAQ,CAAC,MAAQ,+cAA+c,QAAU,oCAAoC,oBAAsB,yBAAyB,iBAAmB,4QAA4Q,EAAE,SAAW,CAAC,MAAQ,gXAAgX,QAAU,uCAAuC,oBAAsB,yBAAyB,iBAAmB,mRAAmR,EAAE,WAAa,CAAC,MAAQ,oXAAoX,QAAU,iCAAiC,oBAAsB,yBAAyB,iBAAmB,0TAA0T,EAAE,aAAe,CAAC,MAAQ,qXAAqX,QAAU,oCAAoC,oBAAsB,yBAAyB,iBAAmB,mTAAmT,EAAE,KAAO,CAAC,MAAQ,0WAA0W,QAAU,0BAA0B,oBAAsB,yBAAyB,iBAAmB,6RAA6R,EAAE,SAAW,CAAC,MAAQ,0WAA0W,QAAU,mCAAmC,oBAAsB,iCAAiC,iBAAmB,sPAAsP,EAAE,KAAO,CAAC,MAAQ,4WAA4W,QAAU,2BAA2B,oBAAsB,yBAAyB,iBAAmB,iSAAiS,EAAE,SAAW,CAAC,MAAQ,+WAA+W,QAAU,8BAA8B,oBAAsB,yBAAyB,iBAAmB,uSAAuS,EAAE,MAAQ,CAAC,MAAQ,kXAAkX,QAAU,6BAA6B,oBAAsB,yBAAyB,iBAAmB,qSAAqS,EAAE,MAAQ,CAAC,MAAQ,gXAAgX,QAAU,2BAA2B,oBAAsB,yBAAyB,iBAAmB,0PAA0P,CAAC,CAAC,EAAE,kBAAoB,CAAC,UAAY,cAAc,QAAU,aAAa,WAAa,kBAAkB,EAAE,WAAa,CAAC,MAAQ,UAAU,OAAS,UAAU,MAAQ,QAAQ,GAAK,IAAI,CAAC,EAAE,UAAY,CAAC,WAAa,CAAC,MAAQ,cAAc,KAAO,YAAY,KAAO,YAAY,KAAO,WAAW,QAAU,CAAC,QAAU,YAAY,KAAO,UAAU,MAAQ,OAAO,CAAC,CAAC,EAAE,SAAW,CAAC,IAAM,SAAS,IAAM,MAAM,IAAM,QAAQ,cAAgB,cAAc,QAAU,UAAU,eAAiB,sBAAsB,OAAS,aAAa,OAAS,aAAa,eAAiB,uBAAuB,UAAY,cAAc,WAAa,gBAAgB,KAAO,WAAW,QAAU,UAAU,YAAc,sBAAsB,UAAY,QAAQ,aAAe,YAAY,OAAS,UAAU,UAAY,OAAO,cAAgB,oBAAoB,OAAS,SAAS,MAAQ,WAAW,QAAU,cAAc,OAAS,aAAa,UAAY,iBAAiB,OAAS,UAAU,SAAW,QAAQ,UAAY,aAAa,cAAgB,aAAa,kBAAoB,kBAAkB,oBAAsB,oCAAoC,mBAAqB,wBAAwB,MAAQ,WAAW,MAAQ,QAAQ,QAAU,WAAW,KAAO,QAAQ,OAAS,WAAW,UAAY,iBAAiB,cAAgB,kBAAkB,gBAAkB,SAAS,kBAAoB,WAAW,UAAY,aAAa,YAAc,CAAC,GAAK,SAAS,OAAS,UAAU,EAAE,cAAgB,0BAA0B,KAAO,KAAK,OAAS,SAAS,MAAQ,CAAC,IAAM,KAAK,EAAE,SAAW,iBAAiB,YAAc,kBAAkB,KAAO,gBAAgB,SAAW,kBAAkB,QAAU,SAAS,KAAO,SAAS,SAAW,QAAQ,YAAc,YAAY,cAAgB,uBAAuB,KAAO,UAAU,OAAS,eAAe,MAAQ,QAAQ,MAAQ,WAAW,MAAQ,IAAI,WAAa,gBAAgB,SAAW,kBAAkB,cAAgB,YAAY,UAAY,YAAY,QAAU,cAAc,gBAAkB,kBAAkB,MAAQ,WAAW,OAAS,gBAAgB,UAAY,wBAAwB,UAAY,aAAa,YAAc,yBAAyB,cAAgB,kCAAkC,QAAU,MAAM,UAAY,cAAc,OAAS,KAAK,SAAW,cAAc,KAAO,OAAO,WAAa,aAAa,eAAiB,gBAAgB,KAAO,WAAW,IAAM,OAAO,GAAK,KAAK,kBAAoB,sBAAsB,SAAW,YAAY,GAAK,KAAK,WAAa,eAAe,KAAO,OAAO,SAAW,oBAAoB,YAAc,cAAc,IAAM,QAAQ,OAAS,sEAAsE,YAAc,iBAAiB,WAAa,gBAAgB,WAAa,uBAAuB,SAAW,SAAS,SAAW,YAAY,MAAQ,UAAU,UAAY,UAAU,KAAO,MAAM,SAAW,YAAY,YAAc,mBAAmB,eAAiB,kBAAkB,QAAU,UAAU,SAAW,eAAe,OAAS,SAAS,iBAAmB,eAAe,KAAO,WAAW,eAAiB,oBAAoB,WAAa,qBAAqB,OAAS,SAAS,aAAe,iBAAiB,WAAa,UAAU,cAAgB,aAAa,OAAS,UAAU,SAAW,UAAU,UAAY,iBAAiB,iBAAmB,kBAAkB,UAAY,aAAa,UAAY,oBAAoB,WAAa,oBAAoB,KAAO,SAAS,KAAO,QAAQ,SAAW,aAAa,UAAY,cAAc,QAAU,eAAe,KAAO,QAAQ,mBAAqB,4CAA4C,WAAa,aAAa,MAAQ,aAAa,UAAY,SAAS,cAAgB,QAAQ,MAAQ,WAAW,kBAAoB,mBAAmB,oBAAsB,2BAA2B,IAAM,eAAe,KAAO,WAAW,MAAQ,YAAY,MAAQ,SAAS,KAAO,QAAQ,IAAM,QAAQ,QAAU,QAAQ,QAAU,aAAa,QAAU,UAAU,cAAgB,cAAc,YAAc,WAAW,eAAiB,iBAAiB,OAAS,QAAQ,MAAQ,QAAQ,KAAO,UAAU,eAAiB,yBAAyB,uBAAyB,oKAAoK,IAAM,MAAM,kBAAoB,sDAAsD,iBAAmB,iBAAiB,iBAAmB,gBAAgB,0BAA4B,CAAC,QAAU,QAAQ,SAAW,SAAS,QAAU,QAAQ,SAAW,SAAS,WAAa,aAAa,YAAc,iBAAiB,aAAe,iBAAiB,EAAE,OAAS,OAAO,UAAY,aAAa,EAAE,WAAa,CAAC,OAAS,qJAAqJ,MAAQ,CAAC,iBAAmB,8BAA8B,MAAQ,8BAA8B,YAAc,oCAAoC,QAAU,4CAA4C,UAAY,4CAA4C,EAAE,4BAA8B,CAAC,YAAc,wKAAwK,MAAQ,oBAAoB,EAAE,yBAA2B,CAAC,YAAc,+LAA+L,MAAQ,8CAA8C,EAAE,sBAAwB,CAAC,YAAc,wJAAwJ,MAAQ,2CAA2C,EAAE,0BAA4B,CAAC,YAAc,qDAAqD,MAAQ,iBAAiB,EAAE,yBAA2B,CAAC,YAAc,qDAAqD,MAAQ,iBAAiB,EAAE,0BAA4B,CAAC,YAAc,wIAAwI,MAAQ,2DAA2D,EAAE,uCAAyC,CAAC,YAAc,kEAAkE,MAAQ,iBAAiB,EAAE,uBAAyB,CAAC,YAAc,kCAAkC,MAAQ,iBAAiB,EAAE,sBAAwB,CAAC,YAAc,kKAAkK,MAAQ,yBAAyB,EAAE,wBAA0B,CAAC,MAAQ,qBAAqB,YAAc,2DAA2D,EAAE,6BAA+B,CAAC,YAAc,sFAAsF,MAAQ,wCAAwC,EAAE,eAAiB,CAAC,cAAgB,CAAC,MAAQ,uCAAuC,YAAc,6DAA6D,CAAC,EAAE,KAAO,CAAC,4BAA8B,CAAC,YAAc,wKAAwK,MAAQ,oBAAoB,EAAE,yBAA2B,CAAC,YAAc,+LAA+L,MAAQ,8CAA8C,EAAE,sBAAwB,CAAC,YAAc,wJAAwJ,MAAQ,2CAA2C,EAAE,0BAA4B,CAAC,YAAc,qDAAqD,MAAQ,iBAAiB,EAAE,yBAA2B,CAAC,YAAc,qDAAqD,MAAQ,iBAAiB,EAAE,0BAA4B,CAAC,YAAc,wIAAwI,MAAQ,2DAA2D,EAAE,uCAAyC,CAAC,YAAc,kEAAkE,MAAQ,iBAAiB,EAAE,uBAAyB,CAAC,YAAc,kCAAkC,MAAQ,iBAAiB,EAAE,sBAAwB,CAAC,YAAc,kKAAkK,MAAQ,yBAAyB,EAAE,wBAA0B,CAAC,MAAQ,iCAAiC,YAAc,2DAA2D,EAAE,wBAA0B,CAAC,MAAQ,yCAAyC,YAAc,mEAAmE,EAAE,6BAA+B,CAAC,YAAc,sFAAsF,MAAQ,wCAAwC,EAAE,2BAA6B,CAAC,YAAc,yJAAyJ,MAAQ,0CAA0C,EAAE,yBAA2B,CAAC,YAAc,yJAAyJ,MAAQ,gDAAgD,EAAE,+BAAiC,CAAC,YAAc,yJAAyJ,MAAQ,2CAA2C,EAAE,6BAA+B,CAAC,YAAc,yQAAyQ,MAAQ,0CAA0C,EAAE,2BAA6B,CAAC,YAAc,yQAAyQ,MAAQ,gDAAgD,EAAE,iCAAmC,CAAC,YAAc,yQAAyQ,MAAQ,2CAA2C,EAAE,cAAgB,CAAC,MAAQ,gCAAgC,EAAE,uBAAyB,CAAC,MAAQ,6BAA6B,EAAE,sBAAwB,CAAC,MAAQ,8BAA8B,EAAE,kCAAoC,CAAC,MAAQ,mCAAmC,EAAE,yCAA2C,CAAC,MAAQ,yFAAyF,EAAE,kCAAoC,CAAC,MAAQ,2CAA2C,EAAE,yCAA2C,CAAC,MAAQ,iGAAiG,EAAE,qBAAuB,CAAC,MAAQ,0DAA0D,EAAE,gCAAkC,CAAC,MAAQ,yFAAyF,EAAE,uBAAyB,CAAC,MAAQ,2CAA2C,EAAE,wBAA0B,CAAC,MAAQ,4CAA4C,EAAE,mBAAqB,CAAC,MAAQ,kCAAkC,EAAE,iBAAmB,CAAC,MAAQ,2EAA2E,YAAc,ieAAie,EAAE,kBAAoB,CAAC,MAAQ,uFAAuF,YAAc,kXAAkX,EAAE,0BAA4B,CAAC,MAAQ,+BAA+B,YAAc,kIAAkI,EAAE,6BAA+B,CAAC,MAAQ,8BAA8B,YAAc,kIAAkI,EAAE,qBAAuB,CAAC,MAAQ,0FAA0F,YAAc,0aAA0a,EAAE,kBAAoB,CAAC,MAAQ,mDAAmD,YAAc,0DAA0D,EAAE,uBAAyB,CAAC,MAAQ,sHAAsH,YAAc,yLAAyL,EAAE,0BAA4B,CAAC,MAAQ,yNAAyN,YAAc,uFAAuF,EAAE,8BAAgC,CAAC,MAAQ,8GAA8G,YAAc,+HAA+H,EAAE,wBAA0B,CAAC,MAAQ,gGAAgG,EAAE,sBAAwB,CAAC,MAAQ,mFAAmF,YAAc,oUAAoU,EAAE,4BAA8B,CAAC,MAAQ,0DAA0D,YAAc,qIAAqI,EAAE,gCAAkC,CAAC,MAAQ,8DAA8D,YAAc,uGAAuG,EAAE,8BAAgC,CAAC,MAAQ,2FAA2F,YAAc,uJAAuJ,EAAE,6BAA+B,CAAC,MAAQ,4EAA4E,YAAc,gFAAgF,EAAE,uCAAyC,CAAC,MAAQ,6CAA6C,YAAc,gFAAgF,EAAE,wCAA0C,CAAC,MAAQ,6CAA6C,YAAc,gFAAgF,EAAE,mBAAqB,CAAC,MAAQ,uGAAuG,YAAc,gPAAgP,EAAE,qCAAuC,CAAC,MAAQ,2BAA2B,CAAC,EAAE,QAAU,CAAC,KAAO,CAAC,aAAe,CAAC,MAAQ,4BAA4B,EAAE,kBAAoB,CAAC,MAAQ,6BAA6B,EAAE,YAAc,CAAC,MAAQ,yCAAyC,EAAE,aAAe,CAAC,MAAQ,oBAAoB,EAAE,wBAA0B,CAAC,MAAQ,wCAAwC,EAAE,iBAAmB,CAAC,MAAQ,8BAA8B,EAAE,kBAAoB,CAAC,MAAQ,+CAA+C,EAAE,4BAA8B,CAAC,MAAQ,qFAAqF,EAAE,qBAAuB,CAAC,MAAQ,gCAAgC,EAAE,YAAc,CAAC,MAAQ,mDAAmD,EAAE,WAAa,CAAC,MAAQ,kCAAkC,EAAE,yBAA2B,CAAC,MAAQ,0EAA0E,EAAE,kBAAoB,CAAC,MAAQ,gCAAgC,CAAC,EAAE,eAAiB,CAAC,MAAQ,sBAAsB,CAAC,EAAE,cAAgB,CAAC,YAAc,+OAA+O,MAAQ,yBAAyB,EAAE,SAAW,CAAC,OAAS,yCAAyC,eAAiB,sCAAsC,YAAc,2FAA2F,eAAiB,2FAA2F,WAAa,CAAC,QAAU,wEAAwE,eAAiB,iCAAiC,UAAY,YAAY,YAAc,4BAA4B,kBAAoB,oBAAoB,eAAiB,kBAAkB,eAAiB,+BAA+B,sBAAwB,sCAAsC,EAAE,aAAe,CAAC,mBAAqB,2BAA2B,aAAe,QAAQ,cAAgB,yBAAyB,EAAE,mBAAqB,CAAC,MAAQ,+BAA+B,KAAO,qCAAqC,MAAQ,sEAAsE,OAAS,sEAAsE,MAAQ,oEAAoE,MAAQ,yCAAyC,OAAS,2CAA2C,UAAY,gBAAgB,EAAE,YAAc,CAAC,QAAU,cAAc,UAAY,oBAAoB,kBAAoB,wCAAwC,UAAY,OAAO,UAAY,sGAAsG,EAAE,kBAAoB,CAAC,gBAAkB,yCAAyC,oBAAsB,yCAAyC,qBAAuB,aAAa,qBAAuB,UAAU,YAAc,6CAA6C,EAAE,eAAiB,CAAC,gBAAkB,oCAAoC,oBAAsB,oCAAoC,qBAAuB,aAAa,qBAAuB,UAAU,YAAc,wCAAwC,EAAE,aAAe,CAAC,OAAS,4EAA4E,QAAU,6BAA6B,sBAAwB,qBAAqB,mBAAqB,mBAAmB,eAAiB,WAAW,EAAE,eAAiB,yBAAyB,YAAc,CAAC,QAAU,8EAA8E,QAAU,uCAAuC,EAAE,mBAAqB,CAAC,QAAU,6BAA6B,SAAW,wCAAwC,EAAE,aAAe,CAAC,MAAQ,iEAAiE,WAAa,uCAAuC,WAAa,+GAA+G,gBAAkB,2CAA2C,MAAQ,+GAA+G,WAAa,2CAA2C,QAAU,mCAAmC,CAAC,EAAE,eAAiB,CAAC,sBAAwB,CAAC,MAAQ,sBAAsB,EAAE,kBAAoB,CAAC,MAAQ,iCAAiC,CAAC,EAAE,iBAAmB,CAAC,QAAU,6BAA6B,UAAY,wCAAwC,UAAY,yCAAyC,SAAW,uBAAuB,eAAiB,6BAA6B,YAAc,4BAA4B,SAAW,6BAA6B,QAAU,oCAAoC,WAAa,iCAAiC,eAAiB,gCAAgC,UAAY,2BAA2B,mBAAqB,uBAAuB,yBAA2B,6JAA6J,gBAAkB,kCAAkC,gBAAkB,kDAAkD,gBAAkB,8BAA8B,uBAAyB,0BAA0B,cAAgB,+BAA+B,kCAAoC,wCAAwC,gBAAkB,gCAAgC,QAAU,sBAAsB,SAAW,sBAAsB,cAAgB,sBAAsB,eAAiB,sBAAsB,aAAe,uBAAuB,CAAC,CAAC,CAAC,ECGr0x2B,MAAMC,EAA8B,CA0CzC,YAAYC,EAAgB,CAC1B,OAAO,OAAO,KAAMA,CAAM,CAC5B,CAGO,QAAoD,CACzD,OAAK,KAAK,WAAW,QAAQ,WAAW,GAAK,IAAM,GAC1C,SAEJ,KAAK,WAAW,QAAQ,IAAI,GAAK,IAAM,GACnC,MAEJ,KAAK,oBAAoB,QAAQ,MAAM,GAAK,IAAM,GAC9C,OAGJ,KAAK,WAGH,OAFE,MAGX,CAGO,oBAA6B,CAClC,OAAQ,KAAK,SAAO,CAClB,IAAK,OACH,MAAO,2BACT,IAAK,QACH,MAAO,wBACT,IAAK,OACH,MAAO,gCACT,IAAK,KACL,IAAK,OACL,QACE,MAAO,+BAAA,CAEb,CAGO,uBAAgC,CACrC,OAAQ,KAAK,SAAO,CAClB,IAAK,OACH,MAAO,8BACT,IAAK,QACH,MAAO,yBACT,IAAK,OACH,MAAO,mCACT,IAAK,KACL,IAAK,OACL,QACE,MAAO,kCAAA,CAEb,CAEF,CCxFO,MAAMC,EAAQ,CAEnB,WAAmB,eAAgB,CACjC,MAAO,CACL,UAAW,2BACX,UAAW,8BACX,UAAW,sCACX,aAAc,kCACd,mBAAoB,uCACpB,WAAY,sCACZ,WAAY,GACZ,UAAW,EAAA,CAEf,CAEA,OAAe,iBAAiC,CAC9C,MAAMC,EAAI,KAAK,UAAA,EACf,OAAQA,EAAE,QAAUA,EAAE,OAAO,OAAUA,EAAE,OAAO,OAAS,IAC3D,CAEA,OAAe,gBAAgBF,EAAgB,CAC7C,MAAME,EAAI,KAAK,UAAA,EACfA,EAAE,OAASA,EAAE,QAAU,CAAA,EACvBA,EAAE,OAAO,OAASF,CACpB,CAEA,OAAe,WAAiB,CAC9B,GAAI,OAAO,WAAe,IAAe,OAAO,WAChD,GAAI,OAAO,KAAS,IAAe,OAAO,KAC1C,GAAI,OAAO,OAAW,IAAe,OAAO,OAC5C,GAAI,OAAO,OAAW,IAAe,OAAO,OAC5C,MAAM,IAAI,MAAM,gCAAgC,CAClD,CAMA,WAAkB,SAAuB,CACvC,OAAO,IAAID,GAAY,KAAK,gBAAA,GAAqB,KAAK,aAAa,CACrE,CAKA,WAAkB,QAAQC,EAAgB,CACxC,KAAK,gBAAgBA,CAAM,CAC7B,CAGA,WAAkB,QAAc,CAC9B,OAAO,KAAK,UAAA,CACd,CACF,CC7DO,MAAMG,EAAQ,CASnB,OAAc,IAAIC,EAAUnO,EAAsB,CAChD,OAAKmO,EAGE,OAAO,UAAU,eAAe,KAAKA,EAAKnO,CAAG,EAF3C,EAGX,CAQA,OAAc,YAAYmO,EAAUC,EAA2B,CAC7D,GAAI,CAACA,GAAgB,CAACD,EACpB,OAAO,KAET,MAAME,EAAMD,EAAa,MAAM,OAAO,EAAE,IAAKpO,GACpCA,EAAI,SAAS,GAAG,EAAI,SAASA,EAAI,UAAU,EAAGA,EAAI,OAAS,CAAC,CAAC,EAAIA,CACzE,EACD,KAAOqO,EAAI,QAAQ,CACjB,MAAMrO,EAAWqO,EAAI,MAAA,EAKrB,GAJIrO,IAAQ,SAGZmO,EAAMA,EAAInO,CAAuB,EAC7B,CAACmO,GAAOE,EAAI,QACd,OAAO,IAEX,CACA,OAAOF,CACT,CAYA,OAAc,YAAYA,EAAUC,EAAsBE,EAAqB,CAC7E,GAAI,CAACF,GAAgB,CAACD,EACpB,MAAO,GAET,MAAME,EAAMD,EAAa,MAAM,OAAO,EAAE,IAAKpO,GACpCA,EAAI,SAAS,GAAG,EAAI,SAASA,EAAI,UAAU,EAAGA,EAAI,OAAS,CAAC,CAAC,EAAIA,CACzE,EACD,KAAOqO,EAAI,OAAS,GAAG,CACrB,MAAMrO,EAAMqO,EAAI,MAAA,EAChB,GAAIrO,IAAQ,OACV,MAAO,GAEJmO,EAAInO,CAAuB,IAC1B,OAAO,UAAUqO,EAAI,CAAC,CAAC,EACzBF,EAAInO,CAAuB,EAAI,CAAA,EAE/BmO,EAAInO,CAAuB,EAAI,CAAA,GAGnCmO,EAAMA,EAAInO,CAAuB,CACnC,CACA,MAAMuO,EAAWF,EAAI,CAAC,EAItB,OAHIF,EAAII,CAAO,IAAM,QAAaD,IAAU,QAGxCH,EAAII,CAAO,IAAMD,EAEZ,IAETH,EAAII,CAAO,EAAID,EACR,GACT,CAOA,OAAc,KAAQA,EAAa,CACjC,OAAO,KAAK,MAAM,KAAK,UAAUA,EAAO,CAACE,EAAGC,IAAMA,IAAM,OAAY,KAAOA,CAAC,CAAC,CAC/E,CAQA,OAAc,OAAaC,EAAUC,EAAkB,CACrD,MAAM5O,EAAS,CAAA,EACf,UAAW6O,KAAMF,EACXR,GAAQ,IAAIQ,EAAOE,CAAE,IACtB7O,EAAe6O,CAAE,EAAKF,EAAcE,CAAE,GAG3C,UAAWA,KAAMD,EACXT,GAAQ,IAAIS,EAAQC,CAAE,GAAK,CAACV,GAAQ,IAAInO,EAAQ6O,CAAE,IACnD7O,EAAe6O,CAAE,EAAKD,EAAeC,CAAE,GAG5C,OAAO7O,CACT,CASA,OAAc,MAAM8O,EAAQC,EAAiB,CAC3C,GAAID,IAAMC,EACR,MAAO,GAGT,GAAID,GAAKC,GAAK,OAAOD,GAAM,UAAY,OAAOC,GAAM,SAAU,CAC5D,MAAMC,EAAO,MAAM,QAAQF,CAAC,EACtBG,EAAO,MAAM,QAAQF,CAAC,EAC5B,IAAIG,EACAC,EACAlP,EAEJ,GAAI+O,GAAQC,EAAM,CAGhB,GADAE,EAASL,EAAE,OACPK,IAAWJ,EAAE,OAEf,MAAO,GAET,IAAKG,EAAIC,EAAQD,MAAQ,GACvB,GAAI,CAAC,KAAK,MAAMJ,EAAEI,CAAC,EAAGH,EAAEG,CAAC,CAAC,EAExB,MAAO,GAIX,MAAO,EACT,CAEA,GAAIF,IAASC,EAEX,MAAO,GAGT,MAAMG,EAAQN,aAAa,KACrBO,EAAQN,aAAa,KAC3B,GAAIK,IAAUC,EAEZ,MAAO,GAET,GAAID,GAASC,EAEX,OAAOP,EAAE,YAAcC,EAAE,QAAA,EAG3B,MAAMO,EAAUR,aAAa,OACvBS,EAAUR,aAAa,OAC7B,GAAIO,IAAYC,EAEd,MAAO,GAET,GAAID,GAAWC,EAEb,OAAOT,EAAE,aAAeC,EAAE,SAAA,EAG5B,MAAMS,EAAO,OAAO,KAAKV,CAAC,EAG1B,GAFAK,EAASK,EAAK,OAEVL,IAAW,OAAO,KAAKJ,CAAC,EAAE,OAE5B,MAAO,GAGT,IAAKG,EAAIC,EAAQD,MAAQ,GACvB,GAAI,CAAC,OAAO,UAAU,eAAe,KAAKH,EAAGS,EAAKN,CAAC,CAAC,EAElD,MAAO,GAIX,IAAKA,EAAIC,EAAQD,MAAQ,GAEvB,GADAjP,EAAMuP,EAAKN,CAAC,EACR,CAAC,KAAK,MAAMJ,EAAE7O,CAAG,EAAG8O,EAAE9O,CAAG,CAAC,EAE5B,MAAO,GAKX,MAAO,EACT,CAGA,OAAO6O,IAAMA,GAAKC,IAAMA,CAC1B,CACF,CC9LO,MAAMU,EAAqB,CA2BhC,YAAYC,EAAO,KAAM,CAxBzB,KAAO,YAAc,UAgBrB,KAAQ,gBAA4B,CAAA,EASlC,KAAK,WAAaA,GAAQ,CAAA,EAC1B,KAAK,WAAW,GAAK,KAAK,WAAW,IAAMC,GAC3C,KAAK,WAAW,GAAK,KAAK,WAAW,IAAM,CAAA,EAC3C,KAAK,WAAW,GAAK,KAAK,WAAW,IAAM,CAAA,EACvC,KAAK,WAAW,GAAG,SACrB,KAAK,gBAAgB,KAAK,IAAI,EAC9B,KAAK,KAAO,MAEV,KAAK,WAAW,GAAG,QACrB,KAAK,gBAAgB,KAAK,IAAI,EAE5B,KAAK,WAAW,GAAG,QACrB,KAAK,gBAAgB,KAAK,IAAI,CAElC,CAeO,IAAI1P,EAAa2P,EAAyBC,EAAeC,EAAe,GAAe,CAC5F,IAAIC,EAAW,KAAK,eAAe9P,EAAK,OAAW4P,CAAI,EAEvD,GAAI,CAACE,GAAY9P,GAAK,WAAW,SAAS,EAAG,CAK3C,GAHI4P,GAAQ,OACVE,EAAW,KAAK,eAAe9P,EAAK,OAAW,IAAI,GAEjD,CAAC8P,EAAU,CACb,MAAMC,EAAU/P,EAAI,MAAM,GAAG,EAC7B,IAAIgQ,EAAOD,EAAQA,EAAQ,OAAS,CAAC,EACrC,OAAKC,GAAQ,SAAWA,GAAQ,eAAiBA,GAAQ,UAAYD,EAAQ,OAAS,IACpFC,EAAOD,EAAQA,EAAQ,OAAS,CAAC,GAE5B,IAAWC,CACpB,CACIhC,GAAQ,SAAS,aACnB8B,EAAW,IAAWA,EAE1B,CACA,GAAI,CAACA,EACH,OAAO9P,EAGT,GAAI6P,EACF,OAAOC,EAIT,MAAMG,EAAQ,uBAGd,OAAOH,EAAS,QAAQG,EAAO,CAACC,EAASC,IAChC,KAAK,UAAUR,EAAmBQ,EAAS,EAAE,CACrD,CACH,CASO,eAAenQ,EAAaoQ,EAAe,GAAIR,EAA8B,CAClF,GAAI,CAAC5P,EACH,OAAOoQ,EAET,MAAM9B,EAAQ,KAAK,OAAOtO,EAAK4P,CAAI,EACnC,OAAItB,GAAS,OAAOA,GAAU,SACrBA,EAEF8B,CACT,CAQO,OAAOpQ,EAAa4P,EAA2B,CACpD,GAAI,CAAC5P,EACH,OAAO,KAET,MAAMqQ,EAAUrQ,EAAI,MAAM,GAAG,EAC7B,IAAIsO,EAAQ,KAAK,qBAAA,EAAuBsB,GAAQ,KAAK,IAAI,EACzD,UAAWU,KAAUD,EACnB,GAAInC,GAAQ,IAAII,EAAOgC,CAAM,EAC3BhC,EAAQA,EAAMgC,CAAM,MAEpB,QAAO,KAGX,OAAOhC,CACT,CAUA,MAAa,aAAasB,EAA6B,CACrD,GAAI,CAAC,KAAK,YAAa,CACrB,MAAMW,EAAM,2EACZ,eAAQ,MAAMA,CAAG,EACV,QAAQ,OAAOA,CAAG,CAC3B,CAEA,GAAI,CAAC,KAAK,aAAaX,CAAI,EAAG,CAC5B,MAAMW,EAAM,uCAAuCX,CAAI,oCACvD,eAAQ,MAAMW,CAAG,EACV,QAAQ,OAAOA,CAAG,CAC3B,CAEA,GAAI,KAAK,gBAAgB,SAASX,CAAI,EACpC,OAAO,QAAQ,QAAA,EAGjB,GAAIA,GAAQ,MAAQ,CAAE5B,GAAQ,SAAiB,QAC7C,YAAK,gBAAgB,KAAK4B,CAAI,EAC9B,KAAK,cAAcA,EAAMF,EAAiB,EACnC,QAAQ,QAAA,EAGjB,MAAM3P,EAAS,MAAM,KAAK,cAAc6P,CAAI,EAC5C,KAAK,gBAAgB,KAAKA,CAAI,EAC9B,KAAK,cAAcA,EAAM7P,CAAM,CACjC,CAOO,cAAc6P,EAAcY,EAAoC,CACrE,MAAMC,EAAgB,CAAA,EACtBA,EAAcb,CAAI,EAAIY,EACtB,KAAK,WAAa,KAAK,UAAU,KAAK,WAAYC,CAAa,CACjE,CAQO,gBAAgBD,EAAsD,CAC3E,UAAWxQ,KAAOwQ,EACZtC,GAAQ,IAAIsC,EAAcxQ,CAAG,GAC/B,KAAK,cAAcA,EAAKwQ,EAAaxQ,CAAG,CAAC,CAG/C,CASO,SAAS0Q,EAAwC,CACtD,GAAKA,EAGL,OAAO,OAAO,KAAKA,CAAK,EAAE,QAAS1Q,GAAQ,CACzCkO,GAAQ,YAAY,KAAK,WAAYlO,EAAK0Q,EAAM1Q,CAAG,CAAC,CACtD,CAAC,CACH,CAMO,YAAY4P,EAAgC,CACjD,KAAK,KAAOA,CACd,CAMO,aAAkC,CACvC,OAAO,KAAK,IACd,CAGO,sBAA+C,CACpD,OAAO,KAAK,UACd,CAMA,MAAa,mBAAqD,CAChE,MAAMe,EAAkB,CAAA,EACxB,CAAC,KAAM,KAAM,IAAI,EAAE,QAAQf,GAAQ,CACjCe,EAAS,KAAK,KAAK,cAAcf,CAAI,CAAC,CACxC,CAAC,EACD,MAAMgB,EAAS,MAAM,QAAQ,IAAID,CAAQ,EACnCxC,EAAW,CAAA,EACjB,OAAAA,EAAI,GAAQyC,EAAO,CAAC,EACpBzC,EAAI,GAAQyC,EAAO,CAAC,EACpBzC,EAAI,GAAQyC,EAAO,CAAC,EACbzC,CACT,CAOA,MAAc,cAAcyB,EAAuC,CAEjE,GAAI,KAAK,YACP,OAAO,KAAK,YAAYA,CAAI,EAG9B,MAAMiB,EAAM,GAAG,KAAK,WAAW,IAAIjB,CAAI,WAAW,IAAI,OAAO,QAAA,CAAS,GAChEkB,EAAW,MAAM,MAAMD,CAAG,EAChC,GAAIC,EAAS,GAGX,OAFa,MAAMA,EAAS,KAAA,EAI9B,MAAM,IAAI,MAAM,6BAA6BD,CAAG,GAAG,CACrD,CAMQ,aAAaE,EAAgB,CACnC,MAAMC,EAAY7C,GAAaA,GAAO,OAAOA,GAAQ,SAErD,OAAO4C,EAAQ,OAAO,CAAChR,EAAQkR,KAC7B,OAAO,KAAKA,CAAO,EAAE,QAASjR,GAAQ,CACpC,MAAMkR,EAAaD,EAAQjR,CAAG,EACxBmR,EAAYpR,EAAOC,CAAG,EAExB,MAAM,QAAQmR,CAAS,GAAK,MAAM,QAAQD,CAAU,EACtDnR,EAAOC,CAAG,EAAImR,EAAU,OAAO,GAAGD,CAAU,EACnCF,EAASG,CAAS,GAAKH,EAASE,CAAU,EACnDnR,EAAOC,CAAG,EAAI,KAAK,UAAUmR,EAAWD,CAAU,EAElDnR,EAAOC,CAAG,EAAIkR,CAElB,CAAC,EACMnR,GACN,CAAA,CAAE,CACP,CAEQ,UAAUqR,EAAaC,EAAcjB,EAAwB,CACnE,GAAI,CAACgB,GAAU,CAACC,EACd,OAAOjB,EAET,MAAMC,EAAUgB,EAAK,MAAM,GAAG,EAC9B,IAAI/C,EAAQ8C,EACZ,UAAWd,KAAUD,EACnB,GAAInC,GAAQ,IAAII,EAAOgC,CAAM,EAC3BhC,EAAQA,EAAMgC,CAAM,MAEpB,QAAOF,EAGX,OAAO9B,CACT,CAEQ,WAAqB,CAC3B,OAAO,OAAO,WAAW,MAAU,GACrC,CAEF,CCzUO,MAAMgD,GAAN,MAAMA,EAAa,CAYxB,OAAc,eAAeD,EAAoB,CAC/C,KAAK,SAAS,YAAcA,GAAM,QAAQ,UAAW,EAAE,GAAK,KAAK,SAAS,WAC5E,CAOA,OAAc,eAAeE,EAA+D,CAC1F,KAAK,SAAS,YAAcA,CAC9B,CAeA,OAAc,IAAIvR,EAAa2P,EAAyBC,EAAeC,EAAe,GAAe,CACnG,OAAO,KAAK,SAAS,IAAI7P,EAAK2P,EAAmBC,EAAMC,CAAY,CACrE,CASA,OAAc,eAAe7P,EAAaoQ,EAAe,GAAIR,EAA8B,CACzF,OAAO,KAAK,SAAS,eAAe5P,EAAKoQ,EAAcR,CAAI,CAC7D,CASA,OAAc,OAAO5P,EAAa4P,EAAoB,CACpD,OAAO,KAAK,SAAS,OAAO5P,EAAK4P,CAAI,CACvC,CAUA,OAAc,aAAaA,EAA6B,CACtD,OAAO,KAAK,SAAS,aAAaA,CAAI,CACxC,CAOA,OAAc,cAAcA,EAAcY,EAAoC,CAC5E,OAAO,KAAK,SAAS,cAAcZ,EAAMY,CAAY,CACvD,CAOA,OAAc,gBAAgBA,EAAsD,CAClF,OAAO,KAAK,SAAS,gBAAgBA,CAAY,CACnD,CAMA,OAAc,YAAYZ,EAAgC,CACxD,OAAO,KAAK,SAAS,YAAYA,CAAI,CACvC,CAMA,OAAc,aAAkC,CAC9C,OAAO,KAAK,SAAS,YAAA,CACvB,CACF,EAvGE0B,GAAuB,SAAW,IAAI9B,GANjC,IAAMgC,EAANF,GCGA,MAAMG,EAAiB,CAM5B,OAAc,OAAOC,EAA4C,CAC/D,MAAMC,EAAiBF,GAAiB,OAAA,EAAS,OAAQG,GAAMA,EAAE,WAAW,EAC5E,MAAI,CAACF,GAAgBA,EAAa,KAAA,EAAO,OAAS,EACzCC,GAETD,EAAeA,EAAa,KAAA,EAAO,YAAA,EAC5BC,EAAe,OAAQC,GAAMA,EAAE,KAAK,WAAW,QAAQF,CAAY,GAAK,GAC1EE,EAAE,MAAM,YAAA,EAAc,QAAQF,CAAY,GAAK,CAAC,EACvD,CAQA,OAAc,OAAOG,EAAiC,OAAiC,CACrF,OAAAA,EAAWA,GAAYL,EAAa,YAAA,GAAwB9L,GAAS,GAC7B,CAAC,CACvC,KAAM,EACN,MAAQmM,IAAanM,GAAS,GAAK,kBAAqBmM,IAAanM,GAAS,GAAK,qBAAuB,+BAC1G,oBAAqB,GACrB,iBAAkB,GAClB,kBAAmB,GACnB,sBAAuB,GACvB,gBAAiB,GACjB,4BAA6B,GAC7B,WAAY,EACZ,kBAAmB,KACnB,YAAa8L,EAAa,IAAI,4DAA4D,EAC1F,qBAAsBA,EAAa,IAAI,sEAAsE,EAC7G,YAAa,GACb,eAAgB,EAChB,aAAc,UAAA,CACf,EAAE,OAAO,KAAK,YAAYK,CAAQ,CAAC,CAEtC,CAQA,OAAe,YAAYA,EAAiC,OAAiC,CAC3F,OAAOjE,GAAgB,IAAKgE,IAAO,CACjC,KAAMA,EAAE,KACR,MAAQC,IAAanM,GAAS,GAAKkM,EAAE,OAAUC,IAAanM,GAAS,GAAKkM,EAAE,OAASA,EAAE,OACvF,oBAAqBA,EAAE,oBACvB,iBAAkBA,EAAE,iBACpB,kBAAmBA,EAAE,kBACrB,sBAAuBA,EAAE,sBACzB,gBAAiBA,EAAE,gBACnB,4BAA6BA,EAAE,4BAC/B,WAAYA,EAAE,WACd,kBAAmBA,EAAE,kBACrB,YAAcC,IAAanM,GAAS,GAAKkM,EAAE,cAAiBC,IAAanM,GAAS,GAAKkM,EAAE,cAAgBA,EAAE,cAC3G,qBAAuBC,IAAanM,GAAS,GAAKkM,EAAE,uBAA0BC,IAAanM,GAAS,GAAKkM,EAAE,uBAAyBA,EAAE,uBACtI,YAAaA,EAAE,YACf,eAAgBA,EAAE,eAClB,aAAcA,EAAE,aAChB,gBAAiBA,EAAE,eAAA,EACnB,CACJ,CACF,CCxEO,MAAME,GAAoB,CAC/B,CACE,KAAQ,aACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,GACT,KAAQ,YAAA,EAEV,CACE,MAAS,GACT,KAAQ,WAAA,EAEV,CACE,MAAS,GACT,KAAQ,QAAA,EAEV,CACE,MAAS,GACT,KAAQ,UAAA,EAEV,CACE,MAAS,GACT,KAAQ,iBAAA,EAEV,CACE,MAAS,GACT,KAAQ,sBAAA,EAEV,CACE,MAAS,IACT,KAAQ,MAAA,EAEV,CACE,MAAS,IACT,KAAQ,OAAA,EAEV,CACE,MAAS,IACT,KAAQ,gBAAA,EAEV,CACE,MAAS,IACT,KAAQ,mBAAA,EAEV,CACE,MAAS,IACT,KAAQ,QAAA,EAEV,CACE,MAAS,IACT,KAAQ,UAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,EAEV,CACE,MAAS,IACT,KAAQ,aAAA,EAEV,CACE,MAAS,IACT,KAAQ,eAAA,EAEV,CACE,MAAS,IACT,KAAQ,wBAAA,EAEV,CACE,MAAS,IACT,KAAQ,mBAAA,EAEV,CACE,MAAS,IACT,KAAQ,yBAAA,CACV,CACF,EAEF,CACE,KAAQ,mBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,GACT,KAAQ,aAAA,EAEV,CACE,MAAS,GACT,KAAQ,gBAAA,EAEV,CACE,MAAS,KACT,KAAQ,SAAA,EAEV,CACE,MAAS,KACT,KAAQ,mBAAA,EAEV,CACE,MAAS,KACT,KAAQ,eAAA,EAEV,CACE,MAAS,KACT,KAAQ,uBAAA,EAEV,CACE,MAAS,KACT,KAAQ,gBAAA,EAEV,CACE,MAAS,KACT,KAAQ,cAAA,EAEV,CACE,MAAS,KACT,KAAQ,wBAAA,EAEV,CACE,MAAS,KACT,KAAQ,UAAA,EAEV,CACE,MAAS,KACT,KAAQ,qBAAA,EAEV,CACE,MAAS,KACT,KAAQ,YAAA,EAEV,CACE,MAAS,KACT,KAAQ,kBAAA,EAEV,CACE,MAAS,KACT,KAAQ,6BAAA,EAEV,CACE,MAAS,KACT,KAAQ,gBAAA,EAEV,CACE,MAAS,KACT,KAAQ,2BAAA,EAEV,CACE,MAAS,KACT,KAAQ,iBAAA,EAEV,CACE,MAAS,KACT,KAAQ,QAAA,EAEV,CACE,MAAS,KACT,KAAQ,gBAAA,EAEV,CACE,MAAS,KACT,KAAQ,gBAAA,EAEV,CACE,MAAS,KACT,KAAQ,gBAAA,EAEV,CACE,MAAS,KACT,KAAQ,sBAAA,EAEV,CACE,MAAS,KACT,KAAQ,aAAA,EAEV,CACE,MAAS,KACT,KAAQ,oCAAA,EAEV,CACE,MAAS,KACT,KAAQ,OAAA,CACV,CACF,EAEF,CACE,KAAQ,iBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,wBAAA,EAEV,CACE,MAAS,EACT,KAAQ,wBAAA,EAEV,CACE,MAAS,EACT,KAAQ,uBAAA,EAEV,CACE,MAAS,GACT,KAAQ,gBAAA,EAEV,CACE,MAAS,GACT,KAAQ,MAAA,CACV,CACF,EAEF,CACE,KAAQ,oBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,KACT,KAAQ,YAAA,EAEV,CACE,MAAS,KACT,KAAQ,eAAA,EAEV,CACE,MAAS,KACT,KAAQ,cAAA,CACV,CACF,EAEF,CACE,KAAQ,gCACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,YAAA,EAEV,CACE,MAAS,EACT,KAAQ,kBAAA,EAEV,CACE,MAAS,EACT,KAAQ,+BAAA,EAEV,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,wBAAA,EAEV,CACE,MAAS,EACT,KAAQ,8BAAA,EAEV,CACE,MAAS,EACT,KAAQ,2CAAA,CACV,CACF,EAEF,CACE,KAAQ,0BACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,OAAA,EAEV,CACE,MAAS,EACT,KAAQ,QAAA,EAEV,CACE,MAAS,EACT,KAAQ,OAAA,EAEV,CACE,MAAS,EACT,KAAQ,aAAA,EAEV,CACE,MAAS,EACT,KAAQ,YAAA,EAEV,CACE,MAAS,EACT,KAAQ,UAAA,CACV,CACF,EAEF,CACE,KAAQ,4BACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,QAAA,EAEV,CACE,MAAS,EACT,KAAQ,QAAA,CACV,CACF,EAEF,CACE,KAAQ,yBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,aAAA,EAEV,CACE,MAAS,EACT,KAAQ,eAAA,EAEV,CACE,MAAS,EACT,KAAQ,cAAA,CACV,CACF,EAEF,CACE,KAAQ,eACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,GAAA,EAEV,CACE,MAAS,EACT,KAAQ,GAAA,EAEV,CACE,MAAS,EACT,KAAQ,GAAA,EAEV,CACE,MAAS,EACT,KAAQ,GAAA,CACV,CACF,EAEF,CACE,KAAQ,WACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,GACT,KAAQ,QAAA,EAEV,CACE,MAAS,GACT,KAAQ,OAAA,EAEV,CACE,MAAS,GACT,KAAQ,OAAA,EAEV,CACE,MAAS,GACT,KAAQ,UAAA,EAEV,CACE,MAAS,GACT,KAAQ,UAAA,EAEV,CACE,MAAS,GACT,KAAQ,UAAA,EAEV,CACE,MAAS,GACT,KAAQ,UAAA,EAEV,CACE,MAAS,GACT,KAAQ,cAAA,CACV,CACF,EAEF,CACE,KAAQ,gBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,eAAA,EAEV,CACE,MAAS,EACT,KAAQ,uBAAA,EAEV,CACE,MAAS,EACT,KAAQ,oBAAA,EAEV,CACE,MAAS,EACT,KAAQ,6BAAA,EAEV,CACE,MAAS,EACT,KAAQ,+BAAA,CACV,CACF,EAEF,CACE,KAAQ,yBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,EAEV,CACE,MAAS,IACT,KAAQ,oBAAA,EAEV,CACE,MAAS,IACT,KAAQ,aAAA,EAEV,CACE,MAAS,IACT,KAAQ,UAAA,EAEV,CACE,MAAS,IACT,KAAQ,WAAA,CACV,CACF,EAEF,CACE,KAAQ,iBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,OAAA,CACV,CACF,EAEF,CACE,KAAQ,kBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,OAAA,CACV,CACF,EAEF,CACE,KAAQ,kBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,GACT,KAAQ,aAAA,EAEV,CACE,MAAS,GACT,KAAQ,gBAAA,EAEV,CACE,MAAS,GACT,KAAQ,eAAA,EAEV,CACE,MAAS,GACT,KAAQ,eAAA,EAEV,CACE,MAAS,GACT,KAAQ,aAAA,EAEV,CACE,MAAS,GACT,KAAQ,uBAAA,EAEV,CACE,MAAS,GACT,KAAQ,YAAA,EAEV,CACE,MAAS,GACT,KAAQ,SAAA,EAEV,CACE,MAAS,GACT,KAAQ,aAAA,EAEV,CACE,MAAS,GACT,KAAQ,iBAAA,EAEV,CACE,MAAS,GACT,KAAQ,gBAAA,EAEV,CACE,MAAS,GACT,KAAQ,SAAA,EAEV,CACE,MAAS,GACT,KAAQ,iBAAA,EAEV,CACE,MAAS,GACT,KAAQ,YAAA,EAEV,CACE,MAAS,GACT,KAAQ,gBAAA,EAEV,CACE,MAAS,GACT,KAAQ,aAAA,EAEV,CACE,MAAS,GACT,KAAQ,SAAA,EAEV,CACE,MAAS,GACT,KAAQ,gBAAA,EAEV,CACE,MAAS,GACT,KAAQ,SAAA,EAEV,CACE,MAAS,GACT,KAAQ,QAAA,EAEV,CACE,MAAS,GACT,KAAQ,UAAA,EAEV,CACE,MAAS,GACT,KAAQ,cAAA,EAEV,CACE,MAAS,GACT,KAAQ,eAAA,EAEV,CACE,MAAS,GACT,KAAQ,SAAA,EAEV,CACE,MAAS,GACT,KAAQ,SAAA,EAEV,CACE,MAAS,GACT,KAAQ,SAAA,EAEV,CACE,MAAS,GACT,KAAQ,eAAA,EAEV,CACE,MAAS,GACT,KAAQ,cAAA,EAEV,CACE,MAAS,GACT,KAAQ,iBAAA,EAEV,CACE,MAAS,GACT,KAAQ,mBAAA,EAEV,CACE,MAAS,GACT,KAAQ,kBAAA,EAEV,CACE,MAAS,KACT,KAAQ,YAAA,CACV,CACF,EAEF,CACE,KAAQ,mBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,GACT,KAAQ,cAAA,CACV,CACF,EAEF,CACE,KAAQ,cACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,aAAA,EAEV,CACE,MAAS,EACT,KAAQ,iBAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,GACT,KAAQ,gBAAA,EAEV,CACE,MAAS,GACT,KAAQ,SAAA,EAEV,CACE,MAAS,GACT,KAAQ,uBAAA,EAEV,CACE,MAAS,GACT,KAAQ,oBAAA,EAEV,CACE,MAAS,GACT,KAAQ,YAAA,EAEV,CACE,MAAS,IACT,KAAQ,eAAA,EAEV,CACE,MAAS,IACT,KAAQ,eAAA,EAEV,CACE,MAAS,IACT,KAAQ,WAAA,CACV,CACF,EAEF,CACE,KAAQ,yBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,GACT,KAAQ,UAAA,EAEV,CACE,MAAS,GACT,KAAQ,SAAA,EAEV,CACE,MAAS,GACT,KAAQ,SAAA,CACV,CACF,EAEF,CACE,KAAQ,uBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,eAAA,EAEV,CACE,MAAS,GACT,KAAQ,UAAA,EAEV,CACE,MAAS,GACT,KAAQ,QAAA,EAEV,CACE,MAAS,GACT,KAAQ,WAAA,EAEV,CACE,MAAS,GACT,KAAQ,UAAA,EAEV,CACE,MAAS,GACT,KAAQ,eAAA,EAEV,CACE,MAAS,GACT,KAAQ,MAAA,EAEV,CACE,MAAS,GACT,KAAQ,QAAA,EAEV,CACE,MAAS,GACT,KAAQ,MAAA,EAEV,CACE,MAAS,GACT,KAAQ,UAAA,EAEV,CACE,MAAS,GACT,KAAQ,gBAAA,EAEV,CACE,MAAS,GACT,KAAQ,aAAA,EAEV,CACE,MAAS,IACT,KAAQ,mBAAA,CACV,CACF,EAEF,CACE,KAAQ,sBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,IAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,EAEV,CACE,MAAS,IACT,KAAQ,mBAAA,EAEV,CACE,MAAS,IACT,KAAQ,mBAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,CACV,CACF,EAEF,CACE,KAAQ,oBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,MAAA,EAEV,CACE,MAAS,EACT,KAAQ,uBAAA,EAEV,CACE,MAAS,EACT,KAAQ,gBAAA,EAEV,CACE,MAAS,EACT,KAAQ,iBAAA,EAEV,CACE,MAAS,EACT,KAAQ,iBAAA,EAEV,CACE,MAAS,IACT,KAAQ,QAAA,EAEV,CACE,MAAS,IACT,KAAQ,WAAA,CACV,CACF,EAEF,CACE,KAAQ,oBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,MAAA,EAEV,CACE,MAAS,EACT,KAAQ,UAAA,EAEV,CACE,MAAS,EACT,KAAQ,UAAA,CACV,CACF,EAEF,CACE,KAAQ,kBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,OAAA,EAEV,CACE,MAAS,GACT,KAAQ,eAAA,EAEV,CACE,MAAS,GACT,KAAQ,iBAAA,EAEV,CACE,MAAS,GACT,KAAQ,oBAAA,EAEV,CACE,MAAS,GACT,KAAQ,eAAA,EAEV,CACE,MAAS,GACT,KAAQ,sBAAA,EAEV,CACE,MAAS,GACT,KAAQ,qBAAA,EAEV,CACE,MAAS,GACT,KAAQ,uBAAA,EAEV,CACE,MAAS,GACT,KAAQ,uBAAA,EAEV,CACE,MAAS,GACT,KAAQ,WAAA,EAEV,CACE,MAAS,GACT,KAAQ,eAAA,EAEV,CACE,MAAS,GACT,KAAQ,oBAAA,EAEV,CACE,MAAS,GACT,KAAQ,qBAAA,EAEV,CACE,MAAS,IACT,KAAQ,YAAA,EAEV,CACE,MAAS,IACT,KAAQ,KAAA,EAEV,CACE,MAAS,IACT,KAAQ,SAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,EAEV,CACE,MAAS,IACT,KAAQ,UAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,EAEV,CACE,MAAS,IACT,KAAQ,sBAAA,EAEV,CACE,MAAS,IACT,KAAQ,MAAA,EAEV,CACE,MAAS,KACT,KAAQ,mBAAA,EAEV,CACE,MAAS,KACT,KAAQ,eAAA,EAEV,CACE,MAAS,KACT,KAAQ,kBAAA,EAEV,CACE,MAAS,KACT,KAAQ,iBAAA,EAEV,CACE,MAAS,KACT,KAAQ,aAAA,EAEV,CACE,MAAS,KACT,KAAQ,sBAAA,EAEV,CACE,MAAS,KACT,KAAQ,mBAAA,EAEV,CACE,MAAS,KACT,KAAQ,eAAA,EAEV,CACE,MAAS,KACT,KAAQ,uBAAA,EAEV,CACE,MAAS,KACT,KAAQ,mBAAA,EAEV,CACE,MAAS,IACT,KAAQ,OAAA,EAEV,CACE,MAAS,KACT,KAAQ,YAAA,EAEV,CACE,MAAS,KACT,KAAQ,aAAA,EAEV,CACE,MAAS,MACT,KAAQ,gBAAA,EAEV,CACE,MAAS,MACT,KAAQ,cAAA,CACV,CACF,EAEF,CACE,KAAQ,cACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,sBAAA,EAEV,CACE,MAAS,EACT,KAAQ,kBAAA,EAEV,CACE,MAAS,EACT,KAAQ,aAAA,EAEV,CACE,MAAS,EACT,KAAQ,eAAA,CACV,CACF,EAEF,CACE,KAAQ,eACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,kBAAA,EAEV,CACE,MAAS,EACT,KAAQ,QAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,iBAAA,EAEV,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,UAAA,EAEV,CACE,MAAS,EACT,KAAQ,UAAA,EAEV,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,UAAA,EAEV,CACE,MAAS,GACT,KAAQ,UAAA,EAEV,CACE,MAAS,GACT,KAAQ,QAAA,EAEV,CACE,MAAS,IACT,KAAQ,eAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,EAEV,CACE,MAAS,IACT,KAAQ,YAAA,CACV,CACF,EAEF,CACE,KAAQ,iBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,gBAAA,EAEV,CACE,MAAS,EACT,KAAQ,aAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,KAAA,EAEV,CACE,MAAS,IACT,KAAQ,YAAA,EAEV,CACE,MAAS,IACT,KAAQ,mBAAA,CACV,CACF,EAEF,CACE,KAAQ,iBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,MAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,QAAA,CACV,CACF,EAEF,CACE,KAAQ,YACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,YAAA,EAEV,CACE,MAAS,EACT,KAAQ,iBAAA,EAEV,CACE,MAAS,EACT,KAAQ,UAAA,EAEV,CACE,MAAS,EACT,KAAQ,UAAA,EAEV,CACE,MAAS,EACT,KAAQ,YAAA,EAEV,CACE,MAAS,EACT,KAAQ,gBAAA,EAEV,CACE,MAAS,IACT,KAAQ,QAAA,EAEV,CACE,MAAS,IACT,KAAQ,UAAA,CACV,CACF,EAEF,CACE,KAAQ,kBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,kBAAA,EAEV,CACE,MAAS,EACT,KAAQ,mBAAA,EAEV,CACE,MAAS,EACT,KAAQ,uBAAA,EAEV,CACE,MAAS,EACT,KAAQ,iBAAA,EAEV,CACE,MAAS,GACT,KAAQ,qBAAA,EAEV,CACE,MAAS,IACT,KAAQ,OAAA,EAEV,CACE,MAAS,IACT,KAAQ,KAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,EAEV,CACE,MAAS,IACT,KAAQ,aAAA,EAEV,CACE,MAAS,IACT,KAAQ,WAAA,EAEV,CACE,MAAS,IACT,KAAQ,aAAA,EAEV,CACE,MAAS,IACT,KAAQ,qBAAA,CACV,CACF,EAEF,CACE,KAAQ,qBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,QAAA,EAEV,CACE,MAAS,EACT,KAAQ,UAAA,EAEV,CACE,MAAS,EACT,KAAQ,YAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,YAAA,CACV,CACF,EAEF,CACE,KAAQ,2BACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,eAAA,EAEV,CACE,MAAS,EACT,KAAQ,eAAA,EAEV,CACE,MAAS,EACT,KAAQ,6BAAA,EAEV,CACE,MAAS,EACT,KAAQ,iCAAA,EAEV,CACE,MAAS,EACT,KAAQ,oCAAA,EAEV,CACE,MAAS,EACT,KAAQ,cAAA,EAEV,CACE,MAAS,EACT,KAAQ,qBAAA,EAEV,CACE,MAAS,EACT,KAAQ,sBAAA,EAEV,CACE,MAAS,EACT,KAAQ,0BAAA,EAEV,CACE,MAAS,GACT,KAAQ,oBAAA,EAEV,CACE,MAAS,GACT,KAAQ,mBAAA,EAEV,CACE,MAAS,GACT,KAAQ,0BAAA,EAEV,CACE,MAAS,GACT,KAAQ,2BAAA,EAEV,CACE,MAAS,GACT,KAAQ,+BAAA,EAEV,CACE,MAAS,GACT,KAAQ,yBAAA,EAEV,CACE,MAAS,GACT,KAAQ,eAAA,EAEV,CACE,MAAS,GACT,KAAQ,aAAA,EAEV,CACE,MAAS,GACT,KAAQ,UAAA,EAEV,CACE,MAAS,GACT,KAAQ,iBAAA,EAEV,CACE,MAAS,GACT,KAAQ,cAAA,EAEV,CACE,MAAS,GACT,KAAQ,oBAAA,EAEV,CACE,MAAS,GACT,KAAQ,cAAA,CACV,CACF,EAEF,CACE,KAAQ,uBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,UAAA,EAEV,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,IACT,KAAQ,gBAAA,EAEV,CACE,MAAS,IACT,KAAQ,iBAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,EAEV,CACE,MAAS,IACT,KAAQ,gBAAA,EAEV,CACE,MAAS,IACT,KAAQ,aAAA,EAEV,CACE,MAAS,IACT,KAAQ,eAAA,CACV,CACF,EAEF,CACE,KAAQ,qBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,QAAA,EAEV,CACE,MAAS,EACT,KAAQ,cAAA,EAEV,CACE,MAAS,EACT,KAAQ,eAAA,EAEV,CACE,MAAS,EACT,KAAQ,oBAAA,EAEV,CACE,MAAS,EACT,KAAQ,sBAAA,EAEV,CACE,MAAS,EACT,KAAQ,aAAA,EAEV,CACE,MAAS,EACT,KAAQ,cAAA,EAEV,CACE,MAAS,GACT,KAAQ,UAAA,EAEV,CACE,MAAS,GACT,KAAQ,uBAAA,EAEV,CACE,MAAS,GACT,KAAQ,iBAAA,EAEV,CACE,MAAS,GACT,KAAQ,kBAAA,EAEV,CACE,MAAS,GACT,KAAQ,kBAAA,EAEV,CACE,MAAS,GACT,KAAQ,YAAA,EAEV,CACE,MAAS,GACT,KAAQ,gBAAA,EAEV,CACE,MAAS,GACT,KAAQ,qBAAA,EAEV,CACE,MAAS,GACT,KAAQ,2BAAA,EAEV,CACE,MAAS,GACT,KAAQ,4BAAA,EAEV,CACE,MAAS,GACT,KAAQ,gBAAA,EAEV,CACE,MAAS,GACT,KAAQ,sBAAA,EAEV,CACE,MAAS,GACT,KAAQ,uBAAA,EAEV,CACE,MAAS,IACT,KAAQ,qBAAA,EAEV,CACE,MAAS,IACT,KAAQ,aAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,EAEV,CACE,MAAS,IACT,KAAQ,YAAA,EAEV,CACE,MAAS,IACT,KAAQ,gBAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,EAEV,CACE,MAAS,IACT,KAAQ,qBAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,EAEV,CACE,MAAS,IACT,KAAQ,eAAA,EAEV,CACE,MAAS,IACT,KAAQ,gBAAA,EAEV,CACE,MAAS,IACT,KAAQ,oBAAA,EAEV,CACE,MAAS,IACT,KAAQ,kBAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,EAEV,CACE,MAAS,IACT,KAAQ,kBAAA,EAEV,CACE,MAAS,IACT,KAAQ,UAAA,EAEV,CACE,MAAS,IACT,KAAQ,aAAA,EAEV,CACE,MAAS,IACT,KAAQ,aAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,EAEV,CACE,MAAS,IACT,KAAQ,aAAA,EAEV,CACE,MAAS,IACT,KAAQ,SAAA,EAEV,CACE,MAAS,IACT,KAAQ,uBAAA,EAEV,CACE,MAAS,IACT,KAAQ,iBAAA,EAEV,CACE,MAAS,IACT,KAAQ,iBAAA,EAEV,CACE,MAAS,IACT,KAAQ,uCAAA,EAEV,CACE,MAAS,IACT,KAAQ,kBAAA,EAEV,CACE,MAAS,IACT,KAAQ,mBAAA,EAEV,CACE,MAAS,KACT,KAAQ,cAAA,EAEV,CACE,MAAS,KACT,KAAQ,mBAAA,EAEV,CACE,MAAS,KACT,KAAQ,cAAA,EAEV,CACE,MAAS,KACT,KAAQ,OAAA,EAEV,CACE,MAAS,KACT,KAAQ,cAAA,EAEV,CACE,MAAS,KACT,KAAQ,mBAAA,EAEV,CACE,MAAS,KACT,KAAQ,yBAAA,EAEV,CACE,MAAS,KACT,KAAQ,uBAAA,EAEV,CACE,MAAS,KACT,KAAQ,yCAAA,EAEV,CACE,MAAS,KACT,KAAQ,eAAA,EAEV,CACE,MAAS,KACT,KAAQ,UAAA,EAEV,CACE,MAAS,KACT,KAAQ,UAAA,EAEV,CACE,MAAS,KACT,KAAQ,aAAA,EAEV,CACE,MAAS,KACT,KAAQ,gBAAA,EAEV,CACE,MAAS,IACT,KAAQ,eAAA,EAEV,CACE,MAAS,IACT,KAAQ,eAAA,EAEV,CACE,MAAS,KACT,KAAQ,SAAA,EAEV,CACE,MAAS,IACT,KAAQ,QAAA,EAEV,CACE,MAAS,KACT,KAAQ,QAAA,CACV,CACF,EAEF,CACE,KAAQ,qBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,OAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,MAAA,EAEV,CACE,MAAS,EACT,KAAQ,YAAA,EAEV,CACE,MAAS,EACT,KAAQ,OAAA,EAEV,CACE,MAAS,EACT,KAAQ,OAAA,EAEV,CACE,MAAS,EACT,KAAQ,QAAA,CACV,CACF,EAEF,CACE,KAAQ,oBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,OAAA,EAEV,CACE,MAAS,EACT,KAAQ,gBAAA,EAEV,CACE,MAAS,EACT,KAAQ,kBAAA,EAEV,CACE,MAAS,EACT,KAAQ,iBAAA,EAEV,CACE,MAAS,EACT,KAAQ,cAAA,EAEV,CACE,MAAS,EACT,KAAQ,mBAAA,EAEV,CACE,MAAS,EACT,KAAQ,iBAAA,EAEV,CACE,MAAS,EACT,KAAQ,uBAAA,EAEV,CACE,MAAS,EACT,KAAQ,uBAAA,EAEV,CACE,MAAS,EACT,KAAQ,iBAAA,EAEV,CACE,MAAS,GACT,KAAQ,mBAAA,EAEV,CACE,MAAS,IACT,KAAQ,iBAAA,EAEV,CACE,MAAS,IACT,KAAQ,cAAA,EAEV,CACE,MAAS,IACT,KAAQ,QAAA,EAEV,CACE,MAAS,IACT,KAAQ,UAAA,EAEV,CACE,MAAS,IACT,KAAQ,eAAA,EAEV,CACE,MAAS,IACT,KAAQ,gBAAA,EAEV,CACE,MAAS,IACT,KAAQ,gBAAA,EAEV,CACE,MAAS,IACT,KAAQ,SAAA,EAEV,CACE,MAAS,IACT,KAAQ,UAAA,CACV,CACF,EAEF,CACE,KAAQ,4BACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,KAAA,EAEV,CACE,MAAS,EACT,KAAQ,UAAA,EAEV,CACE,MAAS,EACT,KAAQ,UAAA,EAEV,CACE,MAAS,EACT,KAAQ,MAAA,EAEV,CACE,MAAS,EACT,KAAQ,QAAA,EAEV,CACE,MAAS,EACT,KAAQ,UAAA,EAEV,CACE,MAAS,EACT,KAAQ,OAAA,CACV,CACF,EAEF,CACE,KAAQ,qBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,OAAA,EAEV,CACE,MAAS,EACT,KAAQ,OAAA,EAEV,CACE,MAAS,GACT,KAAQ,YAAA,EAEV,CACE,MAAS,GACT,KAAQ,QAAA,EAEV,CACE,MAAS,GACT,KAAQ,aAAA,CACV,CACF,EAEF,CACE,KAAQ,sBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,WAAA,EAEV,CACE,MAAS,IACT,KAAQ,WAAA,EAEV,CACE,MAAS,IACT,KAAQ,WAAA,EAEV,CACE,MAAS,IACT,KAAQ,WAAA,EAEV,CACE,MAAS,IACT,KAAQ,aAAA,EAEV,CACE,MAAS,IACT,KAAQ,WAAA,EAEV,CACE,MAAS,IACT,KAAQ,WAAA,CACV,CACF,EAEF,CACE,KAAQ,iBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,mBAAA,EAEV,CACE,MAAS,EACT,KAAQ,gBAAA,CACV,CACF,EAEF,CACE,KAAQ,cACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,IACT,KAAQ,MAAA,EAEV,CACE,MAAS,IACT,KAAQ,MAAA,EAEV,CACE,MAAS,IACT,KAAQ,MAAA,EAEV,CACE,MAAS,IACT,KAAQ,MAAA,CACV,CACF,EAEF,CACE,KAAQ,oBACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,QAAA,EAEV,CACE,MAAS,EACT,KAAQ,eAAA,CACV,CACF,EAEF,CACE,KAAQ,cACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,SAAA,EAEV,CACE,MAAS,EACT,KAAQ,eAAA,EAEV,CACE,MAAS,EACT,KAAQ,kBAAA,EAEV,CACE,MAAS,GACT,KAAQ,SAAA,CACV,CACF,EAEF,CACE,KAAQ,+BACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,MAAA,EAEV,CACE,MAAS,EACT,KAAQ,aAAA,EAEV,CACE,MAAS,EACT,KAAQ,KAAA,EAEV,CACE,MAAS,IACT,KAAQ,QAAA,CACV,CACF,EAEF,CACE,KAAQ,UACR,YAAe,KACf,OAAU,CACR,CACE,MAAS,EACT,KAAQ,IAAA,EAEV,CACE,MAAS,EACT,KAAQ,IAAA,EAEV,CACE,MAAS,EACT,KAAQ,IAAA,EAEV,CACE,MAAS,EACT,KAAQ,IAAA,EAEV,CACE,MAAS,EACT,KAAQ,IAAA,EAEV,CACE,MAAS,EACT,KAAQ,IAAA,EAEV,CACE,MAAS,EACT,KAAQ,IAAA,EAEV,CACE,MAAS,EACT,KAAQ,IAAA,EAEV,CACE,MAAS,EACT,KAAQ,IAAA,EAEV,CACE,MAAS,EACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MAAS,GACT,KAAQ,IAAA,EAEV,CACE,MA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","x_google_ignoreList":[19,20,21,22,23,24,25,26,27,47]}