import { Prisma } from '@prisma/client';
import { PrismaService } from '../prisma/prisma.service';
export declare class GlService {
    private readonly prisma;
    constructor(prisma: PrismaService);
    private parseRange;
    listJournals(organizationId: string, q: {
        from?: string;
        to?: string;
        sourceModule?: string;
        sourceType?: string;
        accountId?: string;
        page?: number;
        pageSize?: number;
        search?: string;
    }): Promise<{
        total: number;
        page: number;
        pageSize: number;
        rows: {
            id: string;
            description: string | null;
            status: import("@prisma/client").$Enums.JournalStatus;
            reference: string | null;
            sourceType: string;
            sourceId: string;
            reversesId: string | null;
            journalDate: Date;
            sourceModule: string;
            postingEvent: string;
            isReversal: boolean;
            totalDebit: Prisma.Decimal;
            totalCredit: Prisma.Decimal;
            postedAt: Date;
        }[];
    }>;
    journalDetail(organizationId: string, id: string): Promise<{
        reverses: {
            id: string;
        } | null;
        reversedBy: {
            id: string;
        } | null;
        lines: ({
            customer: {
                id: string;
                name: string;
            } | null;
            worker: {
                id: string;
                name: string;
            } | null;
            order: {
                id: string;
                orderNumber: string | null;
            } | null;
            supplier: {
                id: string;
                name: string;
            } | null;
            financialAccount: {
                id: string;
                name: string;
            } | null;
            account: {
                code: string;
                name: string;
            };
        } & {
            id: string;
            organizationId: string;
            description: string | null;
            customerId: string | null;
            workerId: string | null;
            orderId: string | null;
            accountId: string;
            journalDate: Date;
            lineNo: number;
            debit: Prisma.Decimal;
            credit: Prisma.Decimal;
            supplierId: string | null;
            financialAccountId: string | null;
            journalId: string;
        })[];
    } & {
        id: string;
        organizationId: string;
        description: string | null;
        reason: string | null;
        status: import("@prisma/client").$Enums.JournalStatus;
        reference: string | null;
        sourceType: string;
        sourceId: string;
        reversesId: string | null;
        journalDate: Date;
        periodYear: number;
        periodMonth: number;
        sourceModule: string;
        postingEvent: string;
        isReversal: boolean;
        totalDebit: Prisma.Decimal;
        totalCredit: Prisma.Decimal;
        postedById: string | null;
        postedAt: Date;
    }>;
    /** Account ledger: opening balance + paged movements for a date range. */
    accountLedger(organizationId: string, accountId: string, q: {
        from?: string;
        to?: string;
        page?: number;
        pageSize?: number;
    }): Promise<{
        account: {
            id: string;
            code: string;
            name: string;
            accountClass: import("@prisma/client").$Enums.LedgerAccountClass;
            normalBalance: import("@prisma/client").$Enums.NormalBalance;
        };
        openingBalance: string;
        periodDebit: string;
        periodCredit: string;
        total: number;
        page: number;
        pageSize: number;
        rows: ({
            journal: {
                id: string;
                description: string | null;
                reference: string | null;
                sourceType: string;
                sourceModule: string;
                postingEvent: string;
                isReversal: boolean;
            };
        } & {
            id: string;
            organizationId: string;
            description: string | null;
            customerId: string | null;
            workerId: string | null;
            orderId: string | null;
            accountId: string;
            journalDate: Date;
            lineNo: number;
            debit: Prisma.Decimal;
            credit: Prisma.Decimal;
            supplierId: string | null;
            financialAccountId: string | null;
            journalId: string;
        })[];
    }>;
    /** Trial balance as of a date (inclusive). */
    /** P&L for a date range: revenue − COS − expenses, per-account detail. */
    profitAndLoss(organizationId: string, from?: string, to?: string): Promise<{
        from: string | null;
        to: string | null;
        revenue: {
            rows: {
                accountId: string;
                code: string;
                name: string;
                amount: string;
            }[];
            total: string;
        };
        costOfSales: {
            rows: {
                accountId: string;
                code: string;
                name: string;
                amount: string;
            }[];
            total: string;
        };
        grossProfit: string;
        expenses: {
            rows: {
                accountId: string;
                code: string;
                name: string;
                amount: string;
            }[];
            total: string;
        };
        netProfit: string;
    }>;
    /** Balance sheet as of a date. Retained earnings = cumulative P&L to date. */
    balanceSheet(organizationId: string, asOf?: string): Promise<{
        asOf: string | null;
        assets: {
            rows: {
                accountId: string;
                code: string;
                name: string;
                amount: string;
            }[];
            total: string;
        };
        liabilities: {
            rows: {
                accountId: string;
                code: string;
                name: string;
                amount: string;
            }[];
            total: string;
        };
        equity: {
            rows: {
                accountId: string | null;
                code: string | null;
                name: string;
                amount: string;
            }[];
            total: string;
        };
        balanced: boolean;
    }>;
    /** Order profitability (P7-0.6): journal-derived revenue vs material/stage costs. */
    orderProfitability(organizationId: string, orderId: string): Promise<{
        orderId: string;
        orderNumber: string | null;
        status: import("@prisma/client").$Enums.OrderStatus;
        grandTotal: string;
        revenue: string;
        costs: {
            code: string | null;
            name: string;
            amount: string;
        }[];
        totalCost: string;
        profit: string;
        margin: string | null;
    }>;
    trialBalance(organizationId: string, asOf?: string): Promise<{
        asOf: string | null;
        rows: {
            accountId: string;
            code: string;
            name: string;
            accountClass: import("@prisma/client").$Enums.LedgerAccountClass;
            normalBalance: import("@prisma/client").$Enums.NormalBalance;
            debit: string;
            credit: string;
            hasActivity: boolean;
        }[];
        totalDebit: string;
        totalCredit: string;
        balanced: boolean;
    }>;
}
//# sourceMappingURL=gl.service.d.ts.map