import type { AuthUserContext } from '../common/request-context';
import { BomService } from './bom.service';
type ReqAuth = {
    authUser?: AuthUserContext;
};
export declare class BomController {
    private readonly bom;
    constructor(bom: BomService);
    private user;
    list(req: ReqAuth, query: Record<string, string>): Promise<{
        items: ({
            inventoryItem: {
                id: string;
                code: string;
                name: string;
                uom: string;
            };
            inventoryVariant: {
                id: string;
                isActive: boolean;
                name: string | null;
                variantCode: string;
                isBase: boolean;
            } | null;
        } & {
            id: string;
            createdAt: Date;
            organizationId: string;
            isActive: boolean;
            updatedAt: Date;
            archivedAt: Date | null;
            code: string;
            name: string;
            notes: string | null;
            effectiveFrom: Date | null;
            rateItemId: string | null;
            createdById: string | null;
            inventoryItemId: string;
            inventoryVariantId: string | null;
            locationId: string | null;
            family: import("@prisma/client").$Enums.RateApplicability;
            triggerField: string;
            triggerValue: string | null;
            qtyBasis: import("@prisma/client").$Enums.MaterialQtyBasis;
            qtyFactor: import("@prisma/client/runtime/library").Decimal;
        })[];
        page: number;
        pageSize: number;
        total: number;
        totalPages: number;
    }>;
    get(req: ReqAuth, id: string): Promise<{
        inventoryItem: {
            id: string;
            code: string;
            name: string;
            uom: string;
        };
        inventoryVariant: {
            id: string;
            isActive: boolean;
            name: string | null;
            variantCode: string;
            isBase: boolean;
        } | null;
    } & {
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        code: string;
        name: string;
        notes: string | null;
        effectiveFrom: Date | null;
        rateItemId: string | null;
        createdById: string | null;
        inventoryItemId: string;
        inventoryVariantId: string | null;
        locationId: string | null;
        family: import("@prisma/client").$Enums.RateApplicability;
        triggerField: string;
        triggerValue: string | null;
        qtyBasis: import("@prisma/client").$Enums.MaterialQtyBasis;
        qtyFactor: import("@prisma/client/runtime/library").Decimal;
    }>;
    create(req: ReqAuth, body: unknown): Promise<{
        inventoryItem: {
            id: string;
            code: string;
            name: string;
            uom: string;
        };
        inventoryVariant: {
            id: string;
            isActive: boolean;
            name: string | null;
            variantCode: string;
            isBase: boolean;
        } | null;
    } & {
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        code: string;
        name: string;
        notes: string | null;
        effectiveFrom: Date | null;
        rateItemId: string | null;
        createdById: string | null;
        inventoryItemId: string;
        inventoryVariantId: string | null;
        locationId: string | null;
        family: import("@prisma/client").$Enums.RateApplicability;
        triggerField: string;
        triggerValue: string | null;
        qtyBasis: import("@prisma/client").$Enums.MaterialQtyBasis;
        qtyFactor: import("@prisma/client/runtime/library").Decimal;
    }>;
    update(req: ReqAuth, id: string, body: unknown): Promise<{
        inventoryItem: {
            id: string;
            code: string;
            name: string;
            uom: string;
        };
        inventoryVariant: {
            id: string;
            isActive: boolean;
            name: string | null;
            variantCode: string;
            isBase: boolean;
        } | null;
    } & {
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        code: string;
        name: string;
        notes: string | null;
        effectiveFrom: Date | null;
        rateItemId: string | null;
        createdById: string | null;
        inventoryItemId: string;
        inventoryVariantId: string | null;
        locationId: string | null;
        family: import("@prisma/client").$Enums.RateApplicability;
        triggerField: string;
        triggerValue: string | null;
        qtyBasis: import("@prisma/client").$Enums.MaterialQtyBasis;
        qtyFactor: import("@prisma/client/runtime/library").Decimal;
    }>;
    archive(req: ReqAuth, id: string): Promise<{
        id: string;
        createdAt: Date;
        organizationId: string;
        isActive: boolean;
        updatedAt: Date;
        archivedAt: Date | null;
        code: string;
        name: string;
        notes: string | null;
        effectiveFrom: Date | null;
        rateItemId: string | null;
        createdById: string | null;
        inventoryItemId: string;
        inventoryVariantId: string | null;
        locationId: string | null;
        family: import("@prisma/client").$Enums.RateApplicability;
        triggerField: string;
        triggerValue: string | null;
        qtyBasis: import("@prisma/client").$Enums.MaterialQtyBasis;
        qtyFactor: import("@prisma/client/runtime/library").Decimal;
    }>;
    /**
     * Resolve BOM rules → candidate auto inventory lines for the order-creation
     * preview. Allowed for BOM viewers OR order creators/editors (OR semantics),
     * so order desk users can preview materials without the BOM admin permission.
     */
    resolve(req: ReqAuth, body: unknown): Promise<{
        lines: {
            available: string;
            insufficient: boolean;
            ruleId: string;
            ruleCode: string;
            ruleName: string;
            inventoryItemId: string;
            inventoryVariantId: string;
            variantCode: string;
            variantName: string | null;
            isBaseVariant: boolean;
            itemName: string;
            uom: string;
            locationId: string | null;
            qty: string;
            unitSellPrice: string;
        }[];
        blocked: {
            ruleId: string;
            ruleCode: string;
            ruleName: string;
            reason: string;
        }[];
    }>;
}
export {};
//# sourceMappingURL=bom.controller.d.ts.map