import { Types, HydratedDocument } from 'mongoose';
export type InvoiceDocument = HydratedDocument<Invoice>;
export declare enum InvoiceType {
    SINGLE_TRIP = "SINGLE_TRIP",
    CONSOLIDATED = "CONSOLIDATED",
    OPENING_BALANCE = "OPENING_BALANCE"
}
export declare enum InvoiceStatus {
    ACTIVE = "ACTIVE",
    CANCELLED = "CANCELLED"
}
export declare class Invoice {
    invoice_number: string;
    business_id: Types.ObjectId;
    is_demo: boolean;
    customer_id: Types.ObjectId;
    invoice_type: InvoiceType;
    trip_ids: Types.ObjectId[];
    trip_snapshots: {
        trip_ref: Types.ObjectId;
        trip_id: string;
        date: number;
        route: string;
        vehicle: string;
        freight_amount: number;
        gst_amount: number;
    }[];
    invoice_date: number;
    billing_period_start: number;
    billing_period_end: number;
    subject: string;
    payment_terms: string;
    due_date: number;
    subtotal_freight: number;
    gst_amount: number;
    grand_total: number;
    advance_received: number;
    previous_outstanding: number;
    amount_due: number;
    status: InvoiceStatus;
    paid_date: number;
    internal_notes: string;
    previous_invoice_id: Types.ObjectId;
    cancel_reason: string;
    created_by: {
        _id: Types.ObjectId;
        name: string;
        user_type: string;
    };
}
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").FlatRecord<Invoice> & {
    _id: Types.ObjectId;
} & {
    __v: number;
}>;
