import { Model } from "mongoose";
import { NotificationsService } from "./notifications.service";
import { BatchDocument } from "./schemas/batch.schema";
import { InventoryBalanceDocument } from "./schemas/inventory-balance.schema";
import { InventoryThresholdStateDocument } from "./schemas/inventory-threshold-state.schema";
import { ItemDocument } from "./schemas/item.schema";
import { StockMovementSheetDocument } from "./schemas/stock-movement-sheet.schema";
import { StockTransactionDocument } from "./schemas/stock-transaction.schema";
import { UserDocument } from "./schemas/user.schema";
import { WarehouseDocument } from "./schemas/warehouse.schema";
export declare class StockTransactionsService {
    private readonly txModel;
    private readonly warehouseModel;
    private readonly itemModel;
    private readonly batchModel;
    private readonly balanceModel;
    private readonly sheetModel;
    private readonly userModel;
    private readonly thresholdStateModel;
    private readonly notificationsService;
    constructor(txModel: Model<StockTransactionDocument>, warehouseModel: Model<WarehouseDocument>, itemModel: Model<ItemDocument>, batchModel: Model<BatchDocument>, balanceModel: Model<InventoryBalanceDocument>, sheetModel: Model<StockMovementSheetDocument>, userModel: Model<UserDocument>, thresholdStateModel: Model<InventoryThresholdStateDocument>, notificationsService: NotificationsService);
    createStockIn(payload: {
        warehouseId: string;
        itemId: string;
        batchNumber: string;
        expiryDate: string;
        quantityMt: number;
        submittedBy?: string;
        supplierName?: string;
        supplierTrn?: string;
        documentNumber?: string;
        documentDate?: string;
        referenceNumber?: string;
        unit?: string;
        unitPrice?: number;
    }): Promise<{
        id: string;
        type: any;
        warehouseId: any;
        itemId: any;
        batchId: any;
        quantityMt: any;
        transactionDate: any;
        approvalStatus: any;
        approvedBy: any;
        approvedAt: any;
        rejectedBy: any;
        rejectedAt: any;
        rejectedReason: any;
        submittedBy: any;
        supplierName: any;
        supplierTrn: any;
        documentNumber: any;
        documentDate: any;
        referenceNumber: any;
        unit: any;
        unitPrice: any;
        jobCardReference: any;
        expiryDate: any;
        createdAt: any;
    }>;
    createStockOut(payload: {
        warehouseId: string;
        itemId: string;
        batchId?: string;
        expiryDate?: string;
        quantityMt: number;
        submittedBy?: string;
    }): Promise<{
        id: string;
        type: any;
        warehouseId: any;
        itemId: any;
        batchId: any;
        quantityMt: any;
        transactionDate: any;
        approvalStatus: any;
        approvedBy: any;
        approvedAt: any;
        rejectedBy: any;
        rejectedAt: any;
        rejectedReason: any;
        submittedBy: any;
        supplierName: any;
        supplierTrn: any;
        documentNumber: any;
        documentDate: any;
        referenceNumber: any;
        unit: any;
        unitPrice: any;
        jobCardReference: any;
        expiryDate: any;
        createdAt: any;
    }>;
    findPending(): Promise<{
        warehouseName: string | null;
        itemCode: string | null;
        itemName: string | null;
        batchNumber: string | null;
        expiryDate: any;
        id: string;
        type: any;
        warehouseId: any;
        itemId: any;
        batchId: any;
        quantityMt: any;
        transactionDate: any;
        approvalStatus: any;
        approvedBy: any;
        approvedAt: any;
        rejectedBy: any;
        rejectedAt: any;
        rejectedReason: any;
        submittedBy: any;
        supplierName: any;
        supplierTrn: any;
        documentNumber: any;
        documentDate: any;
        referenceNumber: any;
        unit: any;
        unitPrice: any;
        jobCardReference: any;
        createdAt: any;
    }[]>;
    findAll(params?: {
        status?: string;
        page?: number;
        limit?: number;
    }): Promise<{
        warehouseName: string | null;
        itemCode: string | null;
        itemName: string | null;
        batchNumber: string | null;
        expiryDate: any;
        id: string;
        type: any;
        warehouseId: any;
        itemId: any;
        batchId: any;
        quantityMt: any;
        transactionDate: any;
        approvalStatus: any;
        approvedBy: any;
        approvedAt: any;
        rejectedBy: any;
        rejectedAt: any;
        rejectedReason: any;
        submittedBy: any;
        supplierName: any;
        supplierTrn: any;
        documentNumber: any;
        documentDate: any;
        referenceNumber: any;
        unit: any;
        unitPrice: any;
        jobCardReference: any;
        createdAt: any;
    }[]>;
    approve(id: string, approvedByName: string): Promise<{
        id: string;
        type: any;
        warehouseId: any;
        itemId: any;
        batchId: any;
        quantityMt: any;
        transactionDate: any;
        approvalStatus: any;
        approvedBy: any;
        approvedAt: any;
        rejectedBy: any;
        rejectedAt: any;
        rejectedReason: any;
        submittedBy: any;
        supplierName: any;
        supplierTrn: any;
        documentNumber: any;
        documentDate: any;
        referenceNumber: any;
        unit: any;
        unitPrice: any;
        jobCardReference: any;
        expiryDate: any;
        createdAt: any;
    }>;
    reject(id: string, rejectedByName: string, reason: string): Promise<{
        id: string;
        type: any;
        warehouseId: any;
        itemId: any;
        batchId: any;
        quantityMt: any;
        transactionDate: any;
        approvalStatus: any;
        approvedBy: any;
        approvedAt: any;
        rejectedBy: any;
        rejectedAt: any;
        rejectedReason: any;
        submittedBy: any;
        supplierName: any;
        supplierTrn: any;
        documentNumber: any;
        documentDate: any;
        referenceNumber: any;
        unit: any;
        unitPrice: any;
        jobCardReference: any;
        expiryDate: any;
        createdAt: any;
    }>;
    private _findOrCreateBatch;
    private _applyInventoryChange;
    private _notifyKeepers;
    private _markThresholdReachedIfNeeded;
    private _mapTx;
    private _mapTxWithDetails;
}
