import { Prisma } from "../generated/prisma/client.js";
import type { Response } from "express";
export interface NormalizedTransaction {
    id: string;
    date: string;
    rawDate: Date;
    createdAt: Date;
    voucherNo: string;
    type: "SALE" | "CUSTOMER_RECEIPT" | "SUPPLIER_PAYMENT" | "EXPENSE" | "TRANSFER";
    typeLabelTamil: string;
    typeLabelEnglish: string;
    account: "CASH" | "BANK";
    accountLabelTamil: string;
    paymentMode: "CASH" | "UPI" | "BANK";
    party: string;
    description: string;
    varavu: number;
    patru: number;
    balance: number;
    source: string;
    sourceId: string;
}
export declare class CashBankService {
    /**
     * Get active CashBankSetting or create default
     */
    getSetting(): Promise<{
        id: bigint;
        createdAt: Date;
        updatedAt: Date;
        remarks: string | null;
        openingCashInHand: Prisma.Decimal;
        openingCashInBank: Prisma.Decimal;
        openingDate: Date;
        isLocked: boolean;
    }>;
    /**
     * Update or initialize active CashBankSetting with audit log
     */
    updateSetting(data: {
        openingCashInHand: number | string;
        openingCashInBank: number | string;
        openingDate: string | Date;
        remarks?: string | null | undefined;
    }, userId?: bigint): Promise<{
        id: string;
        openingCashInHand: number;
        openingCashInBank: number;
        createdAt: Date;
        updatedAt: Date;
        remarks: string | null;
        openingDate: Date;
        isLocked: boolean;
    }>;
    /**
     * Calculate live balances for Cash in Hand, Cash in Bank (UPI + Bank), and Combined
     */
    getBalances(): Promise<{
        openingDate: string;
        remarks: string | null;
        openingCashInHand: number;
        openingCashInBank: number;
        openingCombined: number;
        totalCashVaravu: number;
        totalCashPatru: number;
        currentCashInHand: number;
        totalBankVaravu: number;
        totalBankPatru: number;
        currentCashInBank: number;
        totalTransfers: number;
        totalCombinedBalance: number;
        isLocked: boolean;
    }>;
    /**
     * Create a Cash to Bank transfer (Contra)
     */
    createTransfer(data: {
        transferDate: string | Date;
        amount: number | string;
        referenceNo?: string | null | undefined;
        remarks?: string | null | undefined;
    }, userId?: bigint): Promise<{
        id: string;
        amount: number;
        createdAt: Date;
        updatedAt: Date;
        createdBy: bigint | null;
        deletedAt: Date | null;
        referenceNo: string | null;
        remarks: string | null;
        transferDate: Date;
        fromAccount: string;
        toAccount: string;
        deletedBy: bigint | null;
    }>;
    /**
     * Soft-delete a transfer
     */
    deleteTransfer(id: bigint, userId?: bigint): Promise<{
        id: string;
        amount: number;
        createdAt: Date;
        updatedAt: Date;
        createdBy: bigint | null;
        deletedAt: Date | null;
        referenceNo: string | null;
        remarks: string | null;
        transferDate: Date;
        fromAccount: string;
        toAccount: string;
        deletedBy: bigint | null;
    }>;
    /**
     * Get list of transfers
     */
    getTransfers(dateFrom?: string, dateTo?: string): Promise<{
        id: string;
        transferDate: string;
        amount: number;
        referenceNo: string | null;
        remarks: string | null;
        createdByName: string;
        createdAt: Date;
    }[]>;
    /**
     * Fetch all raw transactions starting from openingDate and normalize them
     */
    private fetchNormalizedTransactions;
    /**
     * Get ledger with filters, search, and running balances
     */
    getLedger(filters?: {
        account?: "ALL" | "CASH" | "BANK" | undefined;
        type?: string | undefined;
        date?: string | undefined;
        dateFrom?: string | undefined;
        dateTo?: string | undefined;
        search?: string | undefined;
    }): Promise<{
        openingBalance: number;
        totalVaravu: number;
        totalPatru: number;
        closingBalance: number;
        currentCashInHand: number;
        currentCashInBank: number;
        totalCombined: number;
        openingDate: string | undefined;
        entries: NormalizedTransaction[];
    }>;
    /**
     * Export Cash & Bank ledger to Excel
     */
    exportExcel(res: Response, filters?: {
        account?: "ALL" | "CASH" | "BANK" | undefined;
        type?: string | undefined;
        date?: string | undefined;
        dateFrom?: string | undefined;
        dateTo?: string | undefined;
        search?: string | undefined;
    }): Promise<void>;
    /**
     * Export Cash & Bank ledger to PDF
     */
    exportPdf(res: Response, filters?: {
        account?: "ALL" | "CASH" | "BANK" | undefined;
        type?: string | undefined;
        date?: string | undefined;
        dateFrom?: string | undefined;
        dateTo?: string | undefined;
        search?: string | undefined;
    }): Promise<void>;
}
declare const _default: CashBankService;
export default _default;
//# sourceMappingURL=CashBankService.d.ts.map