import { AccountingData } from '@salaxy/core';
import { AuthorizationPdfParams } from '@salaxy/core';
import { Avatar } from '@salaxy/core';
import { CalcGroup } from '@salaxy/core';
import { Calculation } from '@salaxy/core';
import { CalendarDay } from '@salaxy/core';
import { CalendarMonth } from '@salaxy/core';
import { CalendarSeries } from '@salaxy/core';
import { Contact } from '@salaxy/core';
import { CostAccountingDimensionDefinition } from '@salaxy/core';
import { DateRange } from '@salaxy/core';
import { Invoice } from '@salaxy/core';
import { InvoiceListItem } from '@salaxy/core';
import { IrRow } from '@salaxy/core';
import { Language } from '@salaxy/core';
import { ReportType } from '@salaxy/core';
import { SummaryReportData } from '@salaxy/core';
import { WorkerSummaryReportData } from '@salaxy/core';

/**
 * Mapper for accounting report.
 */
export declare class AccountingMapper {
    /**
     * Maps data to hbs supported report format
     * @param data BusinessObject data for mapping
     * @returns Mapped data
     */
    static getAccountingReport(data: AccountingData): AccountingReport;
    /**
     * Creates HeaderFooterData from provided parameters
     * @param businessObject AccountingData that
     * @param options Report options
     * @param lang gets translation with this lang, if null use current lang
     * @returns HeaderFooterData for provided businessObject
     */
    static getHeaderFooter(businessObject: AccountingData, options: ReportOptions, lang: Language): HeaderFooterData;
    /**
     * Creates ReporLayout object depending on switchToPortrait boolean
     * @param switchToPortrait boolean indicating if layout should be portrait
     * @returns ReportLayout object
     */
    static getReportLayout(switchToPortrait: boolean, pdf?: boolean): ReportLayout;
}

/** Contains accounting data structured for easy rendering in reports. */
export declare interface AccountingReport extends AccountingData {
    /** Accounting report result row displayed in report */
    result?: IAccountingReportResultRow[] | null;
    /** Optional data based dimension headers for report */
    dimensionHeaders?: string[] | null;
    /** Global pre defined dimension headers for report */
    globalDimensions?: string[] | null;
}

/**
 * Mapper for authorization.
 */
export declare class AuthorizationMapper {
    /**
     * Loads report type specific HeaderFooterData.
     * @param reportOptions The AuthorizationPdf entity used to load the HeaderFooterData.
     * @param lang gets translation with this lang, if null use current lang
     * @returns Returns HeaderFooterData.
     */
    static getHeaderFooter(reportOptions: ReportOptions, lang: Language): HeaderFooterData;
    /**
     * Loads report type specific HeaderFooterData.
     * @param reportOptions The AuthorizationPdf entity used to load the HeaderFooterData.
     * @param lang gets translation with this lang, if null use current lang
     * @returns Returns HeaderFooterData.
     */
    static getRaksaHeaderFooter(reportOptions: ReportOptions, lang: Language): HeaderFooterData;
    /**
     * Loads report type specific HeaderFooterData.
     * @param reportOptions The AuthorizationPdf entity used to load the HeaderFooterData.
     * @param lang gets translation with this lang, if null use current lang
     * @returns Returns HeaderFooterData.
     */
    static getKycHeaderFooter(reportOptions: ReportOptions, lang: Language): HeaderFooterData;
    /**
     * Loads the raw report that is then rendered downstream as an html or pdf report. Also handles if person or company
     * @param businessObject Authorization entity
     * @returns Authorization
     */
    static getAuthorizationReport(businessObject: AuthorizationPdfParams): AuthorizationPdfParams;
    /**
     * Loads the authorization layout for pdf or html reports.
     * @param pdf Are we rendering a pdf report or not.
     * @returns Returns authorization layout.
     */
    static loadReportLayout(pdf: boolean): ReportLayout;
}

/**
 * Helpers for generating barcode values.
 * Using format Code 128 (Uniform Symbology Specification)
 * with Modulo 103 algorithm for generating checksum.
 * @see http://www.finanssiala.fi/maksujenvalitys/dokumentit/Bank_bar_code_guide.pdf
 * @see http://www.finanssiala.fi/maksujenvalitys/dokumentit/Pankkiviivakoodi-opas.pdf
 */
export declare class Barcodes {
    /**
     * Creates a value for barcode labels. Does not calculate the checksum by default.
     * Most libraries, which generate barcode labels, add the checksum and start and stop sequences automatically,
     * and those are not needed to be calculated externally.
     * @param iban - IBAN bank account number. Must be a Finnish IBAN. Can have whitespace.
     * @param ref - Reference number as a string. Either fully numeric (max len 20), or starting with RF (max len 2+23).
     * Can have whitespace.
     * @param dueDate - Date as ISO date (yyyy-MM-dd). False fills values with zeros.
     * @param euroAmount - Euro amount. If string, e.g. 3030,33€, is converted to cents amount 303033.
     * Alternative can be passed cents amount as number.
     * @param includeChecksum - Calculates and appends the checksum to the end of the barcode value.
     * @returns The barcode value (without start and end characters). The checksum is only calculated and appended to the value if the includeChecksum-parameter is true.
     */
    static getValue(iban: string, ref: string, dueDate: string | false, euroAmount: number | string, includeChecksum?: boolean): string;
    /**
     * Takes in 54 characters string value and calculates modulo 103 value.
     * @param val - 54 characters long string of numbers
     * @returns A Number within range of 0-99. Reminder of dividing the sum total of weighted value pairs with 103.
     */
    static modulo103(val: string): number;
    /**
     * Creates a barcode SVG string based on the provided parameters.
     * @param getDocumentAndSvgNode - The document and SVG node to render the barcode on.
     * @param iban - The IBAN number.
     * @param ref - The reference number.
     * @param dueDate - The due date.
     * @param euroAmount - The euro amount.
     * @param barcodeOptions - The options for the barcode (width, height, displayValue, fontSize).
     * @param barcodeOptions.width - Width of the barcode.
     * @param barcodeOptions.height - Height of the barcode
     * @param barcodeOptions.displayValue - Whether to display the value of the barcode.
     * @param barcodeOptions.fontSize - Fontsize of the barcode.
     * @returns The SVG string of the created barcode.
     */
    static createBarcode(getDocumentAndSvgNode: () => any, iban: string, ref: string, dueDate: string, euroAmount: number, barcodeOptions: {
        width: number;
        height: number;
        displayValue: boolean;
        fontSize: number;
    }): string;
}

/**
 * Maps Calculation-object to report template ready objects.
 */
export declare class CalculationMapper {
    /**
     * Creates a new CalculationReport from the fiven Calculation.
     * @param calc Calcuation for the report.
     * @param reportType Report type.
     */
    static getCalculationReport(calc: Calculation, reportType: ReportType, lang: Language | undefined): CalculationReport | undefined;
    /**
     * Creates a new CalculationSummaryReport from the given calculations.
     * @param calcs Calculations for the report.
     * @param lang Language.
     */
    static getCalculationSummaryReport(calcs: Calculation[], lang: Language): CalculationSummaryReport | undefined;
    /**
     * Creates HeaderFooterData from provided parameters
     * @param type ReportType
     * @param calc Calculation BusinessObject
     * @param options ReportOptions
     * @param lang gets translation with this lang, if null use current lang
     * @returns Created HeaderFooterData
     */
    static getHeaderFooter(type: ReportType, calc: Calculation, options: ReportOptions, lang?: Language | undefined): HeaderFooterData;
    /**
     * Creates HeaderFooterData from provided parameters
     * @param calc Calculation BusinessObject
     * @param options ReportOptions
     * @param lang gets translation with this lang, if null use current lang
     * @returns Created HeaderFooterData
     */
    static getTotalReportHeaderFooter(calc: Calculation | Calculation[], options: ReportOptions, lang?: Language | undefined): HeaderFooterData;
    /**
     * Get ReportLayout for calculation
     * @param isLandscape If true, the layout is rendered as landscape.
     * @param pdf By default the mode is htmlPage. Set this to true to use pdf mode. This may affect some rendering details.
     * @param watermark If provided, the watermark is shown in the report. Use "default" to show the default watermark ("SALAXY.REPORTS.document.preview").
     * @returns Report task
     */
    static getReportLayout(isLandscape?: boolean, pdf?: boolean, watermark?: string): ReportLayout;
    /**
     * Creates HeaderFooterData (for summaryreport) from provided parameters
     * @param calcs Array of Calculation BusinessObjects
     * @param reportOptions ReportOptions
     * @param lang gets translation with this lang, if null use current lang
     * @returns Created HeaderFooterData
     */
    static getCalculationSummaryReportHeaderFooter(calcs: Calculation[], reportOptions: ReportOptions, lang: Language): HeaderFooterData;
    private static createSalarySlipRowGroups;
    private static createEmployerReportRowGroups;
    private static createPaymentReportRowGroups;
    private static createHeader;
    private static createSummaryHeader;
    private static createValidationMessages;
    private static createEmployerReportNotes;
    private static createSalarySlipNotes;
    private static createCumulativeData;
    private static getPensionCompanyName;
    private static isCompensation;
    private static getEnum;
    private static isRaksa;
    private static calculateCalculationsResultsSummary;
    private static summarizeField;
    private static getYearlyChangingNumbers;
    /** Current household deduction max amount. */
    private static getHouseholdDeductionMaxAmount;
    private static getHouseholdDeductionDeductible;
    private static getTaxDeductionWorkCategories;
    private static getHouseholdDeductionCategoriesExtended;
    private static getPalkkausVatPercent;
    private static displayVatPercent;
    private static calculateVat;
    private static calculatePriceExclVat;
}

/** Contains calculation data structured for easy rendering in reports. */
export declare interface CalculationReport {
    /** Calculation report type. */
    reportType?: ReportType | null;
    /** Report header section. */
    header?: CalculationReportHeader | null;
    /** Cumulative data for the report. */
    cumulative?: CalculationReportSimpleRow[] | null;
    /** Report row groups. */
    rowGroups?: ICalculationReportRowGroup[] | null;
    /** Validation messages for the report. Contains for example deduction warnings. */
    validationMessages?: CalculationReportText[] | null;
    /** Returns true if the report has validation messages. */
    readonly hasValidationMessages?: boolean | null;
    /** Additional notes for the report. */
    notes?: CalculationReportText[] | null;
    /** Returns true if the report has notes. */
    readonly hasNotes?: boolean | null;
}

/** Employer name and contact details for reports. */
export declare interface CalculationReportEmployer {
    /** Finnish Business Identifier (Y-tunnus) for the company. */
    businessId?: string | null;
    /** Employer avatar. */
    avatar?: Avatar | null;
    /** Employer contact information. */
    contact?: Contact | null;
}

/** Report header information for the report. Contains employer and worker details as well as further info about the work. */
export declare interface CalculationReportHeader {
    /** Employer name and contact details. */
    employer?: CalculationReportEmployer | null;
    /** Worker name and contact details. */
    worker?: CalculationReportWorker | null;
    /** Start date of the work. */
    workStartDate?: string | null;
    /** End date of the work. */
    workEndDate?: string | null;
    /** Employment period: Start and potential end date of the employment relation. */
    employmentPeriod?: DateRange | null;
    /** Description of the work for reporting purposes. */
    workDescription?: string | null;
    /** The day when the total amount was paid by Employer to Palkkaus.fi */
    paidAt?: string | null;
    /** The estimated date for the salary in worker. */
    salaryDate?: string | null;
    /** The actual date for the salary in worker. */
    requestedSalaryDate?: string | null;
    /** Number of days may affect calculation of different payments calculated based on a Framework agreement. */
    numberOfDays?: number | null;
    /** If true, the worker has not given any tax card, 60% will be taken. */
    workerHasNoTaxcard?: boolean | null;
    /** If true, the employer is household and no withholding tax is deducted (less than 1500€/year/Worker). */
    noWithholdingHousehold?: boolean | null;
    /** Calculated tax percent. Please note this is a number between 0-1. */
    taxPercent?: number | null;
    /** Tax percent in the tax card. */
    taxcardTaxPercent?: number | null;
    /** Additional tax percent in the tax card. */
    taxcardTaxPercent2?: number | null;
    /** Income limit for the taxcard */
    taxcardIncomeLimit?: number | null;
    /** The cumulative income on the taxcard - including this calculation. Note that with shared taxcards, this may include income from other employers. */
    taxcardCumulativeIncome?: number | null;
    /** Salary slip message */
    salarySlipMessage?: string | null;
    /** TaxAtSource is being used */
    isTaxAtSource?: boolean | null;
    /** Tax at source deduction percent */
    taxAtSourceDeductionPercent?: number | null;
}

/** CalculationReport implementation. */
export declare class CalculationReportImpl implements CalculationReport {
    reportType: ReportType;
    /** Report header section. */
    header: CalculationReportHeader;
    /** Report row groups. */
    rowGroups: ICalculationReportRowGroup[];
    /** Validation messages for the report. Contains for example deduction warnings. */
    validationMessages: CalculationReportText[];
    /** Returns true if the report has validation messages. */
    get hasValidationMessages(): boolean;
    /** Additional notes for the report. */
    notes: CalculationReportText[];
    /** Returns true if the report has notes. */
    get hasNotes(): boolean;
    /**
     * Creates a new report.
     * @param reportType Report type for the report.
     */
    constructor(reportType: ReportType);
}

/** Extension to IR row for reporting purposes. */
export declare class CalculationReportRow<T extends ICalculationReportRowData> implements ICalculationReportRow {
    data: T;
    /** Contains sub rows. */
    subRows: Array<CalculationReportRow<T>>;
    private _mainRow;
    /**
     * Creates a new report row based on given row data.
     * @param data The data for the row.
     */
    constructor(data: T);
    /** Level of the row in the row hierarchy. */
    get level(): number;
    /** Returns true if level is 0. */
    get isLevel0(): boolean;
    /** Returns true if level is 1. */
    get isLevel1(): boolean;
    /** Returns true if level is 2. */
    get isLevel2(): boolean;
    /** Returns true if level is 3. */
    get isLevel3(): boolean;
    /** Returns true if level is 4. */
    get isLevel4(): boolean;
    /** Boolean to indicate if this row has sub rows */
    get hasSubRows(): boolean;
    /** Sum of sub row totals. */
    get subTotal(): number | undefined | null;
    /** Parent row for this row. */
    get mainRow(): CalculationReportRow<T> | undefined;
    /** Parent row for this row. */
    set mainRow(value: CalculationReportRow<T>);
}

/** Row group for calculation. Groups logically calculation rows. */
export declare class CalculationReportRowGroup<T extends ICalculationReportRow> implements ICalculationReportRowGroup {
    /** Grouping for the row group. */
    grouping: CalcGroup | undefined;
    /** Grouping term */
    get groupingTerm(): string;
    /** Grouping term */
    set groupingTerm(value: string | undefined);
    /** Total term */
    get totalTerm(): string;
    /** Total term */
    set totalTerm(value: string | undefined);
    /** Additional ui data for the renderer */
    params: any;
    /** Returns true if the group has rows. */
    get hasRows(): boolean;
    /** Returns true if this is Deductions group. */
    get isDeductions(): boolean;
    /** Returns true if this is Totals group. */
    get isTotals(): boolean;
    /** Returns true if this is Benefits group. */
    get isBenefits(): boolean;
    /** Returns true if this is Expenses group. */
    get isExpenses(): boolean;
    /** Returns true if this is SalaryAdditions group. */
    get isSalaryAdditions(): boolean;
    /** Returns true if this is BaseSalary group. */
    get isBaseSalary(): boolean;
    /** Returns true if this is Disabled group. */
    get isDisabled(): boolean;
    /** Returns true if this is OtherNoPayment group. */
    get isOtherNoPayment(): boolean;
    /** Returns true if this is Undefined group. */
    get isUndefined(): boolean;
    /** Rows that are compatible with Incomes Register (tulorekisteri) process. */
    rows: T[];
    /** If true, the group is not visible in the report */
    isHidden: boolean | undefined | null;
    /** Group total. */
    get total(): number;
    /** Group total. */
    set total(value: number | undefined);
    /** Returns true if this the total field has value greater than 0. */
    get hasTotalValue(): boolean;
    private _groupingTerm;
    private _totalTerm;
    private _total?;
    /** Constructor */
    constructor(data: ICalculationReportRowGroupInput<T>);
}

/** A simple row for misc. tables in calculation. */
export declare interface CalculationReportSimpleRow {
    /**
     * Technical name / key for the cumulative field.
     */
    key?: string | null;
    /**
     * Label for the row.
     */
    label?: string | null;
    /**
     * Total for the row. This may later be extended with count and/or price.
     */
    total?: number | null;
    /**
     * Additional data for the row.
     */
    data?: {
        [key: string]: any;
    } | null;
    /**
     * Unit for the row.
     */
    unit?: string | null;
}

/** Generic text object for the report. Contains heading, text and optional interpolation parameters. */
export declare interface CalculationReportText {
    /** Heading for the text. */
    heading?: string | null;
    /** The actual content for the text. */
    text?: string | null;
    /** Parameters to be interpolated in the text. */
    parameters?: {
        [key: string]: any;
    } | null;
}

/** Worker name and contact details for reports. */
export declare interface CalculationReportWorker {
    /** The Person ID of the worker if known. */
    socialSecurityNumberValid?: string | null;
    /** Bank account number. */
    ibanNumber?: string | null;
    /** Employer avatar. */
    avatar?: Avatar | null;
    /** Worker contact information. */
    contact?: Contact | null;
}

/**
 * Calculation summary data for report rendering.
 */
declare interface CalculationSummaryReport extends CalculationReport {
    header?: CalculationSummaryReportHeader;
}

/**
 * Header data for CalculationSummaryReport.
 */
declare interface CalculationSummaryReportHeader extends CalculationReportHeader {
    /** The number of workers on the report. */
    workerCount?: number | null;
    /** The number of calculations on the report. */
    calculationCount?: number | null;
    /** The total salary costa summarized from all the calculations on the report. */
    totalSalaryCost?: number | null;
    /** The total gross salary summarized from all the calculations on the report. */
    totalGrossSalary?: number | null;
    /** The total worker payment summarized from all the calculations on the report. */
    totalWorkerPaymentLegacy?: number | null;
}

/** Row data for worker and employer calculation tables. */
export declare class CalculationTableRowData implements ICalculationReportRowData {
    /** Ir row. */
    irRow: IrRow;
    /** Full total for the row. For example the original calculated version. */
    fullTotal?: number;
    /** Returns true if there is no enough money to pay the calculated amount. */
    isTotalReduced?: boolean;
    private _comment;
    /** Constructor for creating row. */
    constructor(data: ICalculationTableRowDataInput, lang?: Language);
    /** Total amount. */
    get total(): number;
    /** Total amount. */
    set total(value: number);
    /** Returns true if the unit is percentage */
    get isUnitPercent(): boolean;
    /** Row further information. */
    get comment(): string | undefined;
    /** Row further information. */
    set comment(value: string | undefined);
    private getEnum;
}

/**
 * The CalendarMapper class provides methods to generate and manipulate calendar data,
 * including mapping months and series to a structured result, and loading report layouts
 * and options for invoice reports.
 */
export declare class CalendarMapper {
    /**
     * Generates calendar data by mapping months and series to a structured result.
     * @param {CalendarMonth[]} months - An array of calendar months to be processed.
     * @param {CalendarSeries[]} series - An array of calendar series to be mapped to each month.
     * @returns {CalendarResult} The structured calendar result containing mapped months with their respective days, series, title, and weeks.
     */
    static getCalendarData(months: CalendarMonth[], series: CalendarSeries[]): CalendarResult;
    /**
     * Loads the invoice layout for pdf or html reports.
     * @param pdf Are we rendering a pdf report or not.
     * @returns Returns invoice layout.
     */
    static loadReportLayout(pdf: boolean): ReportLayout;
    /**
     * Loads Invoice specific ReportOptions
     * @returns ReportOptions for report
     */
    static loadReportOptions(): ReportOptions;
    private static getWeekNumbersForMonth;
}

/**
 * Represents the result of a calendar mapping operation.
 */
export declare type CalendarResult = {
    /** An array of mapped calendar months. */
    months?: MappendCalendarMonth[];
};

/**
 * Helper class used to create CostCenterReport (kustannuspaikkaraportti) config for sxy-table.
 */
export declare class CostCenterReportConfigGenerator {
    /**
     * Generates config for SxyTable component.
     * @param calcs Calculations for report
     * @returns Configuration for SxyTable component
     */
    static getConfig(calcs: Calculation[], sysDims: CostAccountingDimensionDefinition[]): {
        options: any;
        include: any[];
        data: any[];
    };
    /**
     * Adds same css class to child rows, recursively.
     * @param row Row element.
     * @param cssClass Either "nested-odd" or "nested-even".
     */
    private static addClassToChildRows;
    /**
     * Get all the dimensions from system settings.
     * @param dims System dimensions.
     * @returns Dimensions.
     */
    static getDimensions(dims: CostAccountingDimensionDefinition[]): any[];
    /**
     * Headers for the report (both browser and excel).
     * @returns Array of headers.
     */
    static getHeaders(): {
        field: string;
        title: string;
    }[];
    /**
     * Creates column config for tabulator table.
     * @param dimensions System dimensions.
     * @returns Column configuration.
     */
    private static getColConfig;
    /**
     * Returns currency formatting settings for table column.
     * @returns Table column settings.
     */
    private static getCurrencySettings;
    /**
     * Returns dimensions row data for the report.
     * @param calcs Array of calculations.
     * @param allDimensions All dimensions in the system.
     * @returns Data in an array.
     */
    private static getData;
    /**
     * Splits a row into dimension rows which have a percentage weight calculated for the sum.
     * @param calcDimensions Dimensions to calculate.
     * @param sysDims All dimensions in the system, used for header labeling.
     * @param row The row whose sums are to be calculated.
     * @returns Split rows array.
     */
    private static getSplitRows;
    /**
     * Creates the excel rows out of generated data.
     * @param config Generated config (data, headers, options).
     * @returns Flat array containing excel header and data rows.
     */
    static createCostCenterExcelRows(config: any): any[];
}

/**
 * Mapper for ESalary
 */
export declare class ESalaryMapper {
    /**
     * Maps input calc to hbs supported format
     * @param businessObject calculation to be mapped
     * @returns Extended calculation with eSalary property
     */
    static getESalary(businessObject: Calculation): ESalaryReport;
    /**
     * get xml file name
     * @returns name of eSalary xml name
     */
    static getXmlFileName(): string;
    /**
     * Maps cumulative calculation to hbs supported format
     * @param calc cumulative calculation
     * @returns object containing array of current and previous earnings
     */
    private static getCumulativeData;
    private static addBenefitsToReportTotals;
}

/**
 * Contains eSalary data structured for easy rendering in reports.
 *
 */
export declare interface ESalaryReport extends Calculation {
    /** Interface for hbs template data */
    eSalaryHbs?: IESalaryHbs | null;
}

/**
 * Represents a mapped calendar day with an additional background color property.
 */
export declare type ExtendedCalendarDay = CalendarDay & {
    style?: string;
    hasEvents?: boolean;
};

/**
 * Represents an extended calendar series which includes a calendar day and an array of extended calendar days.
 */
export declare type ExtendedCalendarSeries = CalendarSeries & {
    days: ExtendedCalendarDay[];
};

export declare const hbsTemplates: {
    heartbeat: (data: any) => string;
    accountingReport: (data: any) => string;
    employerReportV2: (data: any) => string;
    employerReportV2Page1: (data: any) => string;
    paymentReportV2: (data: any) => string;
    paymentSummaryReportV2: (data: any) => string;
    salarySlipV2: (data: any) => string;
    salarySlipV2Page1: (data: any) => string;
    accountingReportHead: (data: any) => string;
    accountingTable: (data: any) => string;
    contractPartiesContactDetailsV2: (data: any) => string;
    document: (data: any) => string;
    employerCalculationAdditionalInfoV2: (data: any) => string;
    employerCalculationTablesV2: (data: any) => string;
    employerContractDetailsV2: (data: any) => string;
    employerReportHeadV2: (data: any) => string;
    page: (data: any) => string;
    partial: (data: any) => string;
    paymentReportHeadV2: (data: any) => string;
    paymentSummaryReportHeadV2: (data: any) => string;
    paymentTablesV2: (data: any) => string;
    workerCalculationAdditionalInfoV2: (data: any) => string;
    workerCalculationTablesV2: (data: any) => string;
    workerContractDetailsV2: (data: any) => string;
    workerCumulativeTables: (data: any) => string;
    workerDeductionWarningsV2: (data: any) => string;
    workerReportHeadV2: (data: any) => string;
    defaultFooter: (data: any) => string;
    defaultHeader: (data: any) => string;
    img2: (data: any) => string;
    logo: (data: any) => string;
    pageNumber: (data: any) => string;
    totalPages: (data: any) => string;
    summaryReport: (data: any) => string;
    summaryReportHead: (data: any) => string;
    summaryReportTable: (data: any) => string;
    authorizationPerson: (data: any) => string;
    authorizationCompany: (data: any) => string;
    authorizationRaksa: (data: any) => string;
    iamPerson: (data: any) => string;
    invoice: (data: any) => string;
    invoiceHead: (data: any) => string;
    invoiceTable: (data: any) => string;
    kycCompany: (data: any) => string;
    eSalary: (data: any) => string;
    totalsReport: (data: any) => string;
    totalsTables: (data: any) => string;
    totalsHead: (data: any) => string;
    workerSummaryReport: (data: any) => string;
    workerSummaryReportHead: (data: any) => string;
    workerSummaryReportTable: (data: any) => string;
    invoiceList: (data: any) => string;
    calendar: (data: any) => string;
};

/**
 * Data that is avaible for the header and footer templates.
 */
export declare interface HeaderFooterData {
    /** Logical report date, e.g. Salary date for salary slip. */
    date?: string;
    /** Printing date of the report. */
    today?: string;
    /** Report specific title, e.g. "Palkkalaskelma". */
    title?: string | undefined | null;
    /** Report specific sub title, e.g. "Palkkapäivä 1.6.2020". */
    subTitle?: string;
    /** The HTML for the logo in the header and/or footer */
    logo?: string;
    /** The HTML for the secondary image in the header and/or footer */
    img2?: string;
}

/** Interface for result row. */
export declare interface IAccountingReportResultRow {
    /** row account number */
    accountNumber?: string | null;
    /** row account name */
    accountName?: string | null;
    /** VAT */
    vatPercent?: number | null;
    /** row sum*/
    sum?: number | null;
    /** Dimensions of row */
    dimensions?: {
        [key: string]: number;
    } | null;
}

/** Interface for report row. */
export declare interface ICalculationReportRow {
    /** Level of the row in the row hierarchy. */
    level?: number | null;
    /** Sum of sub row totals. */
    subTotal?: number | null;
}

/** Interface for report row data. */
export declare interface ICalculationReportRowData {
    /** Total amount. */
    total?: number | null;
}

/** Interface for report row group. */
export declare interface ICalculationReportRowGroup {
    /** Group total. */
    total?: number | null;
}

/** Row group for calculation. Groups logically calculation rows. */
export declare interface ICalculationReportRowGroupInput<T extends ICalculationReportRow> {
    /** Grouping for the row group. */
    grouping?: CalcGroup;
    /** Grouping term */
    groupingTerm?: string;
    /** Total term */
    totalTerm?: string;
    /** Additional ui data for the renderer */
    params?: any;
    /** Rows that are compatible with Incomes Register (tulorekisteri) process. */
    rows?: T[];
    /** Group total. */
    total?: number;
    /** If true, the group is not visible in the report */
    isHidden?: boolean | null;
}

/** Row data for worker and employer calculation tables. */
export declare interface ICalculationTableRowDataInput {
    /** Ir row. */
    irRow?: IrRow;
    /** Full total for the row. For example the original calculated version. */
    fullTotal?: number;
    /** Returns true if there is no enough money to pay the calculated amount. */
    isTotalReduced?: boolean;
    /** Row further information. */
    comment?: string;
}

/** Interface for eSalary bank account*/
export declare interface IESalaryBankAccount {
    /** Bank account description */
    heading?: string | null;
    /** Account code description */
    label?: string | null;
    /** IBAN code without spaces */
    value?: string | null;
    /** Bic code */
    bic?: string | null;
}

/** Interface for eSalary calculation bases*/
export declare interface IESalaryCalculationBases {
    /** Payment information description */
    heading?: string | null;
    /** Salaryrates information */
    salaryRates?: {
        heading: string | null;
    };
    /** Taxation information */
    taxationRates?: {
        /** Taxation rate description */
        heading?: string | null;
        /** Deduction rates */
        recordLabels?: {
            /** Tax percent */
            taxPercent: string | null;
            /** Additional tax percent */
            taxPercent2: string | null;
        };
    };
    /** Label for income limit */
    incomeLimitLabel?: string | null;
    /** Income limit value */
    incomeLimit?: string | null;
    /** Label for taxcard validity */
    taxcardValidityLabel?: string | null;
    /** Taxcard value  */
    taxcardValidity?: string | null;
}

/** Interface for eSalary cumulative*/
export declare interface IESalaryCumulative {
    /** Cumulative data heading */
    heading?: string | null;
    /** Current data */
    current?: {
        heading?: string | null;
        data?: Array<{
            label: string;
            value: string;
        }>;
    } | null;
    /** Previous data */
    previous?: {
        heading?: string | null;
        data?: Array<{
            label: string;
            value: string;
        }>;
    } | null;
}

/** Interface for eSalary delivery*/
export declare interface IESalaryDelivery {
    /** Sender element */
    sender?: IESalarySender | null;
    /** Recipient elemenet */
    recipient?: IESalaryRecipient | null;
    /** ESalary payoffice */
    payOffice?: IESalaryPayOffice | null;
}

/** Interface for eSalary delivery channel. */
export declare interface IESalaryDeliveryChannel {
    /** Delivery code */
    deliveryMethodCode?: string | null;
    /** Delivery location data. Bankcode: Unique bank identifier */
    deliveryInfo?: {
        bankCode: string;
    } | null;
}

/** Interface for eSalary employee*/
export declare interface IESalaryEmployee {
    /** Employee description */
    heading?: string | null;
    /** Employee identity */
    identity?: {
        label: string;
        item: string | undefined | null;
    } | null;
    /** Employee employment date */
    employmentDate?: {
        label: string;
        value: string | undefined | null;
    } | null;
    /** Classification information of job */
    classification?: {
        /** Classification description */
        heading?: string | null;
        /** Job title element */
        jobTitle?: {
            label?: string | null;
            value?: string | null;
        };
    };
    /** Name of employee */
    employeeName?: {
        foreName: string | undefined | null;
        surName: string | undefined | null;
    } | null;
}

/**
 * Contains eSalary data structured for easy rendering in reports.
 *
 */
export declare interface IESalaryHbs {
    /** Esalary version */
    version?: string | null;
    /** Headerdata element*/
    headerData?: IESalaryHeaderData | null;
    /** Payperiod element */
    payPeriod?: IESalaryPayPeriod | null;
    /** Delivery element */
    delivery?: IESalaryDelivery | null;
    /** Employee element */
    employee?: IESalaryEmployee | null;
    /** Bank account element */
    bankAccount?: IESalaryBankAccount | null;
    /** Calculation bases element */
    calculationBases?: IESalaryCalculationBases | null;
    /** Pay details element */
    payDetails?: IESalaryPayDetails | null;
    /** Report element */
    report?: CalculationReport | null;
    /** Messages element */
    messages?: IESalaryMessages | null;
    /** Cumulative element */
    cumulative?: IESalaryCumulative | null;
}

/** Interface for Esalary header data. */
export declare interface IESalaryHeaderData {
    /** Unique payslip identifier */
    messageId?: string | null;
    /** report timestamp */
    timestamp?: string | null;
    /** Report title */
    documentTitle?: string | null;
    /** Report payment date */
    payDate?: string | null;
    /** Netpayment information */
    netPayment?: {
        label: string;
        value: string | undefined;
    } | undefined;
    /** Name of payer */
    payer?: string | null;
    /** Payer info */
    partyIdentifications?: Array<{
        authority: string;
        value: string | undefined | null;
    }> | null;
    /** Delivery channel information */
    deliveryChannels?: IESalaryDeliveryChannel[] | null;
}

/** Interface for eSalary messages*/
export declare interface IESalaryMessages {
    /** Messages description */
    heading?: string | null;
    /** Salaryslip message to worker */
    salarySlipMessage?: {
        label: string;
        message: string | undefined | null;
    } | null;
    /** Transient messages */
    transient?: {
        heading: string;
    } | null;
}

/** Interface for eSalary pay details*/
export declare interface IESalaryPayDetails {
    /** Pay details description */
    heading?: string | null;
}

/** Interface for eSalary pay office*/
export declare interface IESalaryPayOffice {
    /** Name of pay office */
    fullName?: string | null;
    /** Pay office street address */
    addressLine?: string | null;
    /** Pay office postal code */
    postalCode?: string | null;
    /** Pay office post office */
    postOffice?: string | null;
    /** Countrycode of pay office */
    countryCode?: string | null;
    /** Telephone of pay office */
    telephone?: Array<{
        phoneNumber: string;
    }> | null;
    /** Pay office email */
    emailAddress: string | null;
}

/** Interface for eSalary pay period. */
export declare interface IESalaryPayPeriod {
    /** Pay period description */
    heading?: string | null;
    /** Payment date element */
    dateOfPayment?: {
        label: string;
        date: string;
    } | null;
    /** Period dates element */
    period?: {
        label: string;
        date: string;
    } | null;
    /** Periods dates of esalary */
    periodDates?: IESalaryPeriodDates | null;
}

/** Interface for eSalary period dates */
export declare interface IESalaryPeriodDates {
    /** Payperiod description */
    label?: string | null;
    /** Job description */
    jobLabel?: string | null;
    /** Message description */
    messageLabel?: string | null;
    /** Start date element */
    startDate?: {
        label: string;
        date: string | undefined | null;
    } | null;
    /** Term date element */
    termDate?: {
        label: string;
        date: string | undefined | null;
    } | null;
}

/** Interface for eSalary recipient*/
export declare interface IESalaryRecipient {
    /** Recipient description */
    heading?: string;
    /** Recipient name element */
    recipientName?: {
        foreName: string | undefined | null;
        surName: string | undefined | null;
    } | undefined | null;
    /** Recipient street address */
    addressLine?: string | null;
    /** Recipient postal code */
    postalCode?: string | null;
    /** Recipient post office */
    postOffice?: string | null;
    /** Recipient country code */
    countryCode?: string | null;
    /** Recipient country */
    country?: string | null;
}

/** Interface for eSalary sender*/
export declare interface IESalarySender {
    /** Sender heading */
    heading?: string | null;
    /** Name of sender */
    name?: string | null;
    /** Street */
    addressLine?: string | null;
    /** Sender portal code */
    postalCode?: string | null;
    /** Sender post office */
    postOffice?: string | null;
    /** Sender country code */
    countryCode?: string | null;
    /** Sender country */
    country?: string | null;
    /** Sender telephone */
    telephone?: Array<{
        phoneNumber: string | undefined | null;
    }> | null;
    /** Sender email */
    emailAddress?: string | null;
}

/**
 * Mapper for InvoiceList.

 */
export declare class InvoiceListMapper {
    /**
     * Loads report type specific HeaderFooterData.
     * @param businessObject - The array of invoice list items.
     * @param reportOptions The ReportOptions entity used to load the HeaderFooterData.
     * @param _lang gets translation with this lang, if null use current lang
     * @returns Returns HeaderFooterData.
     */
    static getHeaderFooter(businessObject: InvoiceListItem[], reportOptions: ReportOptions, _lang?: Language): HeaderFooterData;
    /**
     * Loads the invoice layout for pdf or html reports.
     * @param pdf Are we rendering a pdf report or not.
     * @returns Returns invoice layout.
     */
    static loadReportLayout(pdf: boolean): ReportLayout;
    /**
     * Retrieves a invoice list based on the provided business object.
     * @param businessObject - The array of invoice list items.
     * @param getDocumentAndSvgNode - A function that returns the document and SVG node.
     * @returns A promise that resolves to an array of mapped invoices.
     */
    static getInvoiceList(businessObject: InvoiceListItem[], getDocumentAndSvgNode: () => any): Promise<MappedInvoiceListItem[]>;
    /**
     * Loads InvoiceList specific ReportOptions
     * @returns ReportOptions for report
     */
    static loadReportOptions(): ReportOptions;
    /**
     * Calculates the invoice payment amount for a given invoice item.
     * If the invoice item is of type "tax" or "union" and the total paid amount
     * is different from the payment amount, it returns the rounded difference
     * between the payment amount and the total paid amount.
     * Otherwise, it returns the payment amount.
     * @param {InvoiceListItem} item - The invoice item to calculate the payment for.
     * @returns {number} - The calculated payment amount.
     */
    private static getInvoicePayment;
    private static getHeadingText;
    private static createBarCode;
    private static createQrCode;
}

/**
 * Mapper for Invoice.
 */
export declare class InvoiceMapper {
    /**
     * Loads report type specific HeaderFooterData.
     * @param businessObject The Invoice entity used to load the HeaderFooterData.
     * @param reportOptions The ReportOptions entity used to load the HeaderFooterData.
     * @param lang gets translation with this lang, if null use current lang
     * @returns Returns HeaderFooterData.
     */
    static getHeaderFooter(businessObject: Invoice, reportOptions: ReportOptions, lang?: Language | undefined): HeaderFooterData;
    /**
     * Loads the raw report that is then rendered downstream as an html or pdf report.
     * @param businessObject Invoice entity
     * @returns Authorization
     */
    static getInvoice(businessObject: Invoice, getDocumentAndSvgNode: () => any): Promise<MappedInvoice>;
    private static getReferenceNumber;
    private static getPayment;
    private static createBarCode;
    private static createQrCode;
    private static isPreviewInvoice;
    /**
     * Loads the invoice layout for pdf or html reports.
     * @param pdf Are we rendering a pdf report or not.
     * @returns Returns invoice layout.
     */
    static loadReportLayout(pdf: boolean): ReportLayout;
    /**
     * Loads Invoice specific ReportOptions
     * @returns ReportOptions for report
     */
    static loadReportOptions(businessObject: Invoice): ReportOptions;
}

/** Row data for payment tables. */
export declare interface IPaymentTableRowDataInput {
    /** Name for the payment. */
    label?: string;
    /** Receiver of the payment. */
    receiver?: string;
    /** Base amount for the payment calculation. */
    baseAmount?: number;
    /** Worker part of the payment. */
    workerPercent?: number;
    /** Employer part of the payment. */
    employerPercent?: number;
    /** Total amount. */
    total?: number;
    /** Comment for the row. */
    comment?: string;
}

/**
 * Helper class used to create IrRowsReport config for sxy-table and create tableData for ExcelHelpers(ng1)
 */
export declare class IrRowsReportConfigGenerator {
    /**
     * Generates config for SxyTable component
     * @param calcs Calculations for report
     * @param lang Language for report
     * @returns Configuration for SxyTable component
     */
    static getConfig(calcs: Calculation[], lang: Language): {
        options: any;
        include: any[];
        data: any[];
    };
    private static getKind;
    private static getType;
    /** Generates tableData for ExcelHelpers.export (ng1) */
    static getTableData(calcs: Calculation[], lang: Language): any[];
    private static getIncomeType;
    private static translateRowType;
}

/** Type used to present InvoiceMappers getInvoice() result */
export declare type MappedInvoice = {
    /** Containing header related data */
    header?: {
        /** Date of invoice */
        date: string | null | undefined;
        /** Due date of invoice */
        dueDate: string | null | undefined;
        /** Payment reference (e.g. RF0710010831). Please note that in salary payment scenarios, this is not necessarily unique. */
        referenceNumber: string | null | undefined;
        /** The free text that is displayed / sent with the invoice. May have multiple lines. */
        message?: string | null | undefined;
    };
    /** Containing total related data */
    totals?: {
        /** Total amount without vat */
        totalExVat: number | null | undefined;
        /** Total amount of vat */
        totalVat: number | null | undefined;
        /** Total amount with vat */
        total: number | null | undefined;
        /** Total amount of social security tax */
        taxSocialSecurity: number | null | undefined;
        /** Total amount of withholding tax */
        taxWithholding: number | null;
        /** Invoice total paid */
        totalPaid?: number | null;
        /** Invoice total remaining */
        toBePaid?: number | null;
        /** Helper for hbs template to show totalPaid and toBePaid */
        showTotalPaid?: boolean | null;
    };
    /** Containing row related data */
    rows?: {
        /** Message (RowFreeText in Finvoice) is the message is mainly designed for accounting systems. */
        message: string | null;
        /** Name of the product or service. In the case of Salaxy salaries, this is language versioned text of CalculationRowType. */
        articleName: string | null;
        /** Count (DeliveredQuantity in Finvoice) is the quantity of product or service. */
        count: number | null;
        /** Price including VAT (UnitPriceVatIncludedAmount, Yksikköhinta verollinen) */
        price: number | null;
        /** Price of one product or service without Vat (UnitPriceAmount, Yksikköhinta veroton). Yksikköhinta voidaan ilmoittaa myös verollisena UnitPriceVatIncludedAmount- elementissä laskutuskäytännön ja verottajan ALV-ohjeistuksen mukaan. */
        priceExVat: number | null;
        /** Row total with VAT (RowAmount, Yhteensä verollinen) */
        total: number | null;
        /** Row total excluding VAT (RowVatExcludedAmount, Yhteensä veroton) */
        totalExVat: number | null;
        /** Vat percent related to the product or service (RowVatRatePercent, Alv%) */
        vatPercent: number | null;
        /** Suggested account number (RowNormalProposedAccountIdentifier). */
        accountingAccountNumber: string | null;
        /** Textual code for accounting mapping (RowProposedAccountText, Raportointikoodi). In Finvoice: "Accounting information agreed between seller and buyer." */
        accountingCode: string | null;
    }[];
    /** Is this a preview invoice */
    isPreview?: boolean | null;
    /** Containing payer related data */
    payer?: {
        /** Name of payer */
        name: string | null | undefined;
        /** Official identifier of the party: Finnish HETU (Soc. sec. number) for a Person or Y-tunnus (Company ID for a company or association). */
        officialId: string | null | undefined;
        /** Street of payer */
        street: string | null | undefined;
        /** Postal code of payer */
        postalCode: string | null | undefined;
        /** City of payer */
        city: string | null | undefined;
    };
    /** Containing recipient related data */
    recipient?: {
        /** Name of recipient */
        name: string | null | undefined;
        /**
         * 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.
         * WARNING: This is currently needed for Finvoice only (https://www.finanssiala.fi/finvoice/Sivut/default.aspx). As such we consider removing it from persons.
         * Please inform if you use this property!
         */
        officialId: string | null | undefined;
        /** Street of recipient */
        street: string | null | undefined;
        /** Postal code of recipient */
        postalCode: string | null | undefined;
        /** City of recipient */
        city: string | null | undefined;
        /** The International Bank Account Number of the receiver. */
        iban: string | null | undefined;
        /** Bic of recipient */
        bic: string | null | undefined;
    };
    /** Barcode string, svg */
    barcode?: string | null | undefined;
    /** QrCode, data url */
    qrCode?: string | null | undefined;
};

/** Represents a mapped invoice list item. */
export declare type MappedInvoiceListItem = {
    /** The heading of the invoice */
    heading: string;
    /** The IBAN of the receiver */
    iban: string;
    /** The name of the receiver. */
    nameOfReceiver: string | undefined | null;
    /** The due date of the invoice. */
    dueDate: string | undefined | null;
    /** The label for the reference or message. */
    referenceOrMessageLabel: string;
    /** The due date of the invoice. */
    referenceOrMessageValue: string | undefined | null;
    /** The payment amount. */
    payment: number | undefined | null;
    /** The total amount paid. */
    totalPaid: number | undefined | null;
    /** Indicates if the total amount has been paid. */
    isTotalPaid: boolean;
    /** The payable amount. */
    payable: number | undefined | null;
    /** The status text of the invoice. */
    statusText: string;
    /** The SVG representation of the QR code. */
    qrCodeSvg: string;
    /** The barcode of the invoice. */
    barcode: string;
    /** The SVG representation of the barcode. */
    barcodeSvg: string;
    /** Indicates if the invoice has been paid. */
    isPaid: boolean;
    /** Indicates if the invoice has been canceled. */
    isCanceled: boolean;
    /** Indicates if the invoice is in preview mode. */
    isPreview: boolean;
    /** The display date of the invoice. */
    displayDate: string;
    /** The text for unpaid invoices. */
    unPaidText: string;
    /** Indicates if the QR code is available. */
    qrCodeAvailable: boolean;
    /** Indicates if the QR code is unavailable. */
    qrCodeUnavailable: boolean;
    /** The end date of the invoice. */
    endAt: string | undefined | null;
};

/**
 * Represents a mapped calendar month.
 */
export declare type MappendCalendarMonth = {
    /** The title of the calendar month. */
    title: string | undefined;
    /** An array of mapped calendar days. */
    days: ExtendedCalendarDay[] | undefined;
    /** An array of calendar series. */
    series: ExtendedCalendarSeries[] | undefined;
    /** An array of weeknumbers in month. */
    weeks: {
        weekNumber: number;
        colspan: number;
    }[] | undefined;
};

/** Row data for payment tables. */
export declare class PaymentTableRowData implements ICalculationReportRowData {
    /** Name for the payment. */
    label: string | undefined;
    /** Receiver of the payment. */
    receiver: string | undefined;
    /** Base amount for the payment calculation. */
    baseAmount?: number;
    /** Worker part of the payment. */
    workerPercent?: number;
    /** Employer part of the payment. */
    employerPercent?: number;
    /** Total amount. */
    total: number | undefined;
    /** Comment for the row. */
    comment?: string;
    /** Constructor */
    constructor(data: IPaymentTableRowDataInput);
}

/**
 * Helpers for generating qr code values.
 * @see https://www.finanssiala.fi/wp-content/uploads/2021/03/QR_koodin_kaytto_tilisiirtolomakkeella.pdf
 */
export declare class QrCodes {
    /**
     * Get the value as svg.
     * @param bic The BIC code.
     * @param nameOfReceiver The name of the receiver.
     * @param iban The IBAN.
     * @param ref The reference.
     * @param message The message.
     * @param amount The amount.
     * @param dueDate The due date.
     * @returns The value as svg.
     */
    static getValue(bic: string, nameOfReceiver: string, iban: string, ref?: string | undefined | null, message?: string | undefined | null, amount?: number, dueDate?: string | false): Promise<string>;
}

/** Data that the templates use for rendering the report */
export declare interface ReportData<T> {
    /** Data that can be used in Header and footer */
    headerFooter?: HeaderFooterData;
    /** Layout and rendering related data: CSS etc. */
    layout?: ReportLayout;
    /** The actual payload: The report specific data. */
    report: T;
    /** Header Html*/
    headerHtml?: string;
    /** Footer Html*/
    footerHtml?: string;
}

/** Template-level data about the layout / Rendering data */
export declare interface ReportLayout {
    /** If true, the report instance has custom embedded CSS */
    hasCustomCss?: boolean;
    /**
     * Contains custom CSS that should be used in report rendering.
     * This CSS is included directly as HTML: It is not a path to external files.
     */
    customCss?: string;
    /** This should probably remain, but consider another root property */
    date?: string;
    /**
     * Text to show as watermark text in the report. In the api requests, you may use text "default" to show the default watermark ("SALAXY.REPORTS.document.preview").
     * Note that only some reports currently support the watermark (as of writing, the calculation reports).
     */
    watermark?: string;
    /**
     * In the HBS template, this is used as a marker that the watermark text should be shown.
     * NOTE that this property is not respected in API controller requests as it is used as flag for saving on the Salaxy server-side.
     * Instead, set the `watermark` property to "default".
     */
    isPreview?: boolean;
    /** TODO: Sync this (and HTML / CSS that it affects) with ReportOptions.landscape */
    layout?: string;
    /** TODO: Sync this (and HTML / CSS that it affects) with ReportOptions.landscape */
    isLayoutA4Portrait?: boolean;
    /** Landscape */
    isLayoutA4Landscape?: boolean;
    /** TODO: Check the semantics of this with the new infra.  */
    mode?: "pdf" | "htmlPage";
    /** TODO: Check the semantics of this with the new infra.  */
    isModeHtmlPage?: boolean;
    /** TODO: Check the semantics of this with the new infra.  */
    isModePdf?: boolean;
    /** This should probably remain, but consider another root property */
    baseUrl?: string;
    /** Page margins */
    margin?: {
        /** Top margin. */
        top?: string | number;
        /** Right margin. */
        right?: string | number;
        /** Bottom margin. */
        bottom?: string | number;
        /** Left margin. */
        left?: string | number;
    };
}

/** Report options that would be editable by partner / customer. */
export declare interface ReportOptions {
    /**
     * HTML template for the print header.
     * Should add following handlebars tags to inject values into them:
     * - `{{ date }}` Logical report date, e.g. Salary date for salary slip.
     * - `{{ today }}` Printing date of the report.
     * - `{{ title }}` Report specific title, e.g. "Palkkalaskelma".
     * - `{{ subTitle}}` Report specific sub title, e.g. "Palkkapäivä 1.6.2020".
     * - `{{> pageNumber }}` Current page number. Rendered as SPAN element.
     * - `{{> totalPages }}` total pages in the document. Rendered as SPAN element.
     * - `{{> logo }}` The main logo for the page as uploaded to settings. Rendered as SVG or IMG element.
     * - `{{> img2 }}` Secondary image as uploaded to settings. Rendered as SVG or IMG element.
     */
    headerTemplate?: string;
    /**
     * HTML template for the print footer.
     * Should add following handlebars tags to inject values into them:
     * - `{{ date }}` Logical report date, e.g. Salary date for salary slip.
     * - `{{ today }}` Printing date of the report.
     * - `{{ title }}` Report specific title, e.g. "Palkkalaskelma".
     * - `{{ subTitle}}` Report specific sub title, e.g. "Palkkapäivä 1.6.2020".
     * - `{{> pageNumber }}` Current page number. Rendered as SPAN element.
     * - `{{> totalPages }}` total pages in the document. Rendered as SPAN element.
     * - `{{> logo }}` The main logo for the page as uploaded to settings. Rendered as SVG or IMG element.
     * - `{{> img2 }}` Secondary image as uploaded to settings. Rendered as SVG or IMG element.
     */
    footerTemplate?: string;
    /** Content margins, defaults to none. */
    margin?: {
        /** Top margin. */
        top?: string | number;
        /** Right margin. */
        right?: string | number;
        /** Bottom margin. */
        bottom?: string | number;
        /** Left margin. */
        left?: string | number;
    };
    /**
     * Additional CSS that is used to customize the layout of the report.
     * @example .salaxy-component div.salaxy-rpt .document { font-size: 15px; }
     */
    css?: string;
    /**
     * Print background graphics if such are added to the report using css property above.
     * @default false
     */
    printBackground?: boolean;
    /**
     * Main logo image as embedded SVG or image (HTML).
     * This should preferably be an SVG or alternatively an image tag with data uri.
     * @example
     * <svg height="100" width="100"><circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" /></svg>
     * <!-- OR -->
     * <img src="data:image/png;base64,iVBOR[LONG-BASE64-ENCODED-TEXT-HERE]==" alt="Red dot" />
     */
    logo?: string;
    /**
     * Secondary image that can be used in header / footer as embedded SVG or image (HTML).
     * This should preferably be an SVG or alternatively an image tag with data uri.
     * @example
     * <svg height="100" width="100"><circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" /></svg>
     * <!-- OR -->
     * <img src="data:image/png;base64,iVBOR[LONG-BASE64-ENCODED-TEXT-HERE]==" alt="Red dot" />
     */
    img2?: string;
}

/**
 * Helper class used to create RowsReport config for sxy-table and create tableData for ExcelHelpers(ng1)
 */
export declare class RowsReportConfigGenerator {
    /**
     * Generates config for SxyTable component
     * @param calcs Calculations for report
     * @param lang Language for report
     * @returns Configuration for SxyTable component
     */
    static getConfig(calcs: Calculation[], lang: Language): {
        options: any;
        include: any[];
        data: any[];
    };
    private static getKind;
    /** Generates tableData for ExcelHelpers.export (ng1) */
    static getTableData(calcs: Calculation[], lang: Language): any[];
}

/**
 * Mapper for summary report
 */
export declare class SummaryMapper {
    private static calculationTypeMetaData;
    /**
     * Creates HeaderFooterData from provided parameters
     * @param businessObject SummaryReportData that
     * @param options Report options
     * @param lang gets translation with this lang, if null use current lang
     * @returns HeaderFooterData for provided businessObject
     */
    static getSummaryReportHeaderFooter(businessObject: SummaryReportData, options: ReportOptions, lang: Language): HeaderFooterData;
    /**
     * Creates ReporLayout object depending on switchToPortrait boolean
     * @param switchToPortrait boolean indicating if layout should be portrait
     * @returns ReportLayout object
     */
    static getReportLayout(switchToPortrait: boolean, pdf?: boolean): ReportLayout;
    /**
     * Maps data to hbs supported report format
     * @param data Business Object for mapping
     * @returns Mapped data
     */
    static getSummaryReport(data: SummaryReportData): SummaryReportData;
    private static getTotalByRowCategory;
    private static getTotalByIrCode;
    private static isEntrepreneurPensionContract;
    private static isInRange;
    private static isInIrCodes;
}

/**
 * Provides helper methods for Handlebars templating.
 */
export declare class Templates {
    /**
     * Creates a new instance of the service.
     */
    constructor();
    /**
     * Gets the HTML using the Handlebars template.
     * @param templateName Name of the template to render.
     * @param data Data for the template.
     * @param lang Translation language
     * @returns HTML as string
     */
    getHtml(templateName: string, data?: any, lang?: string): string;
    /**
     * Gets HTML from provided templateContent and data
     * @param templateContent Template as handlebars HTML / string.
     * @param data Data for the rendering.
     * @param lang Translation language
     * @returns HTML as string
     */
    getHtmlDynamic(templateContent: string, data?: any, lang?: string): string;
    /**
     * Register helpers.
     */
    private registerHelpers;
    private readValue;
    private runHelper;
    private readValueOrConstant;
    private readValueOrConstantOrHelper;
    private getHelperArgs;
    private getHelperOptions;
    private splitParameters;
}

/**
 * Helper class used to create totalReport config for sxy-table and create tableData for ExcelHelpers(ng1)
 */
export declare class TotalsReportConfigGenerator {
    /**
     * Generates config for SxyTable component
     * @param calcs Calculations for report
     * @param lang Language for report
     * @returns Configuration for SxyTable component
     */
    static getConfig(calcs: Calculation | Calculation[], lang: Language): {
        options: any;
        include: any[];
        data: any[];
    };
    /** Generates tableData for ExcelHelpers.export (ng1) */
    static getTableData(calcs: Calculation[], lang: Language): any[];
}

/**
 * Helper class used to create UnionPaymentReport (AY-jäsenmaksuraportti) config for sxy-table.
 */
export declare class UnionPaymentReportConfigGenerator {
    /**
     * Generates config for SxyTable component.
     * @param calcs Calculations for report
     * @param headers Headers for report
     * @returns Configuration for SxyTable component
     */
    static getConfig(calcs: Calculation[], headers: any[]): {
        options: any;
        include: any[];
        data: any[];
    };
    /**
     * Creates column config for tabulator table.
     * @param headers Header field ids and titles.
     * @returns Column configuration.
     */
    private static getColConfig;
}

/**
 * Mapper for worker summary report
 */
export declare class WorkerSummaryMapper {
    /**
     * Creates HeaderFooterData from provided parameters
     * @param businessObject WorkerSummaryReportData used to get neede data for header
     * @param options Report options
     * @param lang gets translation with this lang, if null use current lang
     * @returns HeaderFooterData for provided businessObject
     */
    static getWorkerSummaryReportHeaderFooter(businessObject: WorkerSummaryReportData, options: ReportOptions, lang?: Language | undefined): HeaderFooterData;
    /**
     * Creates ReporLayout object depending on switchToPortrait boolean
     * @param switchToPortrait boolean indicating if layout should be portrait
     * @param pdf mode for report
     * @returns ReportLayout object
     */
    static getReportLayout(switchToPortrait: boolean, pdf?: boolean): ReportLayout;
    /**
     * Maps data to hbs supported report format
     * @param businessObject businessObject used to create WorkerSummaryReportDataExtended
     * @returns WorkerSummaryReportData with 4 added boolean fields as WorkerSummaryReportDataExtended
     */
    static getWorkerSummaryReport(businessObject: WorkerSummaryReportData, lang?: Language | undefined): WorkerSummaryReportDataExtended;
    private static translateMessage;
}

/**
 * Contains WorkerSummaryReportData and boolean values for showing fields in hbs template
 *
 */
export declare interface WorkerSummaryReportDataExtended extends WorkerSummaryReportData {
    /** Show UnionPayment in report */
    showUnionPayment: boolean | null;
    /** Show Foreclosure in report */
    showForeclosure: boolean | null;
    /** Show PrepaidExpenses in report */
    showPrepaidExpenses: boolean | null;
    /** Show OtherDeductions in report */
    showOtherDeductions: boolean | null;
}

export { }
