import { ModelsService } from 'src/models/models.service';
import { CommonService } from 'src/common/common.service';
import { TranslationService } from 'src/common/services/translation.service';
import { PremiumFrequency } from 'src/policy/schema/policy.schema';
import { CalculatePremiumDto, CreateProductDto, ProductListDto, UpdateProductDto } from './dto/product.dto';
export declare class ProductService {
    private readonly models;
    private readonly common;
    private readonly translationService;
    constructor(models: ModelsService, common: CommonService, translationService: TranslationService);
    private t;
    private fail;
    private canSeeCommission;
    private restrictToCategoryIds;
    private toDto;
    private populated;
    private findProduct;
    private assertCategoryAndInsurer;
    private netBreakdown;
    calculateExpiryDate(issueDate: number, durationYears: number): number;
    calculatePolicyPremium(product: {
        gst_rate: number;
    }, params: {
        grossPremium: number;
        frequency: PremiumFrequency;
        durationYears: number;
    }): {
        gross_premium: number;
        net_premium: number;
        gst_amount: number;
        gross_annual_premium: number;
        net_annual_premium: number;
        annual_gst_amount: number;
        gross_interval_premium: number;
        net_interval_premium: number;
    };
    commissionSchedule(product: {
        one_time_commission: number;
        first_year_commission: number;
        renewal_commission: number;
        commission_years: number;
    }, params: {
        netAnnualPremium: number;
        isOneTime: boolean;
        durationYears: number;
    }): {
        first_year_commission_amount: number;
        renewal_commission_amount: number | null;
        commission_total_years: number;
        total_commission_amount: number;
    };
    create(dto: CreateProductDto, actor: any, lang: string): Promise<{
        status: string;
        message: string;
        data: any;
    }>;
    list(query: ProductListDto, actor: any, lang: string): Promise<{
        status: string;
        message: string;
        data: any[];
        pagination: {
            total: number;
            page: number;
            limit: number;
            totalPages: number;
            hasNextPage: boolean;
            hasPrevPage: boolean;
        };
    }>;
    getById(id: string, actor: any, lang: string): Promise<{
        status: string;
        message: string;
        data: any;
    }>;
    update(id: string, dto: UpdateProductDto, actor: any, lang: string): Promise<{
        status: string;
        message: string;
        data: any;
    }>;
    buildPremiumPreview(product: {
        gst_rate: number;
        one_time_commission: number;
        first_year_commission: number;
        renewal_commission: number;
        commission_years: number;
    }, params: {
        grossPremium: number;
        frequency: PremiumFrequency;
        durationYears: number;
        issueDate: number;
    }): {
        one_time_commission_amount: number;
        gst_rate: number;
        one_time_commission: number;
        first_year_commission: number;
        renewal_commission: number;
        commission_years: number;
        commission_total_years: number;
        total_commission_amount: number;
        gross_premium: number;
        net_premium: number;
        gst_amount: number;
        gross_annual_premium: number;
        net_annual_premium: number;
        annual_gst_amount: number;
        gross_interval_premium: number;
        net_interval_premium: number;
        issue_date: number;
        policy_duration_years: number;
        expiry_date: number;
        premium_frequency: PremiumFrequency;
    } | {
        first_year_commission_amount: number;
        renewal_commission_amount: number | null;
        gst_rate: number;
        one_time_commission: number;
        first_year_commission: number;
        renewal_commission: number;
        commission_years: number;
        commission_total_years: number;
        total_commission_amount: number;
        gross_premium: number;
        net_premium: number;
        gst_amount: number;
        gross_annual_premium: number;
        net_annual_premium: number;
        annual_gst_amount: number;
        gross_interval_premium: number;
        net_interval_premium: number;
        issue_date: number;
        policy_duration_years: number;
        expiry_date: number;
        premium_frequency: PremiumFrequency;
    };
    calculate(id: string, query: CalculatePremiumDto, actor: any, lang: string): Promise<{
        status: string;
        message: string;
        data: any;
    }>;
}
