import { Types, HydratedDocument } from "mongoose";
export type InvoiceDocument = HydratedDocument<Invoice>;
export declare class Invoice {
    userId: Types.ObjectId;
    invoiceNo: string;
    systemInvoiceNo: number;
    dueDate: Date;
    clientId: Types.ObjectId;
    items: any[];
    subTotal: number;
    templateId: string;
    taxPercentage: number;
    taxAmount: number;
    taxName: string;
    taxType: string;
    total: number;
    estimateIds: Types.ObjectId[];
    expenseIds: Types.ObjectId[];
    paymentMethods: string[];
    discountType: string;
    discountValue: number;
    discountAmount: number;
    currency: string | null;
    status: string;
    dueAlertSent: boolean;
    overdueAlertSent: boolean;
    isPaid: boolean;
    isRewardGenerated: boolean;
    paidDate?: Date;
    paidByUser?: Types.ObjectId;
    paidByClient?: Types.ObjectId;
    stripeSessionId?: string;
    isDeleted: boolean;
    deletedAt?: Date;
}
export declare const InvoiceSchema: import("mongoose").Schema<Invoice, import("mongoose").Model<Invoice, any, any, any, import("mongoose").Document<unknown, any, Invoice, any, {}> & Invoice & {
    _id: Types.ObjectId;
} & {
    __v: number;
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, Invoice, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<Invoice>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<Invoice> & {
    _id: Types.ObjectId;
} & {
    __v: number;
}>;
