import { Repository } from 'typeorm';
import { ClsService } from 'nestjs-cls';
import { BookingHotelItemEntity } from '../../entities/booking-hotel-item.entity';
import { BookingTransportItemEntity } from '../../entities/booking-transport-item.entity';
import { BookingActivityItemEntity } from '../../entities/booking-activity-item.entity';
import { BookingSpecialItemEntity } from '../../entities/booking-special-item.entity';
import { CustomerInvoiceEntity } from '../../entities/customer-invoice.entity';
import { TaxLedgerQueryDto } from './dto/tax-ledger-query.dto';
import { ReceivablesParty } from './dto/aging-query.dto';
import { CustomerInvoiceRepository } from './repositories/customer-invoice.repository';
import { BookingService } from '../booking/booking.service';
export interface TaxLedgerRow {
    group_key: string;
    group_label: string;
    group_sublabel?: string;
    count: number;
    taxable_base: number;
    tax_collected: number;
    supplier_tax: number;
    net_tax: number;
    effective_rate: number;
    refund_only?: boolean;
}
export interface TaxLedgerResponse {
    rows: TaxLedgerRow[];
    totals: {
        count: number;
        taxable_base: number;
        tax_collected: number;
        supplier_tax: number;
        net_tax: number;
    };
}
export declare class AccountingService {
    private readonly cls;
    private readonly hotelRepo;
    private readonly transportRepo;
    private readonly activityRepo;
    private readonly specialRepo;
    private readonly invoices;
    private readonly bookingService;
    constructor(cls: ClsService, hotelRepo: Repository<BookingHotelItemEntity>, transportRepo: Repository<BookingTransportItemEntity>, activityRepo: Repository<BookingActivityItemEntity>, specialRepo: Repository<BookingSpecialItemEntity>, invoices: CustomerInvoiceRepository, bookingService: BookingService);
    private getTenantId;
    getTaxLedger(query: TaxLedgerQueryDto): Promise<TaxLedgerResponse>;
    private collectLines;
    private bifurcate;
    private aggregate;
    private serviceLabel;
    getReceivablesAging(input: {
        as_of?: string;
        party?: ReceivablesParty;
    }): Promise<{
        party: ReceivablesParty;
        rows: Array<{
            party_name: string;
            guest_name: string;
            guest_mobile: string;
            currency_code: string;
            total_outstanding: number;
            current: number;
            d_0_30: number;
            d_31_60: number;
            d_61_90: number;
            d_90p: number;
        }>;
        totals: {
            total_outstanding: number;
            current: number;
            d_0_30: number;
            d_31_60: number;
            d_61_90: number;
            d_90p: number;
        };
    }>;
    getPayablesAging(input: {
        as_of?: string;
    }): Promise<{
        rows: Array<{
            supplier_id: string;
            supplier_name: string;
            currency_code: string;
            total_outstanding: number;
            current: number;
            d_0_30: number;
            d_31_60: number;
            d_61_90: number;
            d_90p: number;
        }>;
        totals: {
            total_outstanding: number;
            current: number;
            d_0_30: number;
            d_31_60: number;
            d_61_90: number;
            d_90p: number;
        };
    }>;
    getProfitAndLoss(input: {
        from: string;
        to: string;
        group_by?: 'destination' | 'source' | 'service' | null;
    }): Promise<{
        rows: Array<{
            group_key: string;
            group_label: string;
            revenue: number;
            cost: number;
            margin: number;
            margin_pct: number;
        }>;
        totals: {
            revenue: number;
            cost: number;
            margin: number;
            margin_pct: number;
        };
    }>;
    generateCustomerInvoice(input: {
        booking_id: string;
    }): Promise<CustomerInvoiceEntity>;
    findInvoiceById(id: string): Promise<CustomerInvoiceEntity>;
    findInvoicesForBooking(bookingId: string): Promise<CustomerInvoiceEntity[]>;
}
