import { IBomEntry, IMaterialConsumeData } from '../../../../../types/material.type';
export declare class BomEntryValidator {
    bomEntry: IBomEntry;
    /** 是否启用顺序投料 */
    enableSequenceLoading: boolean;
    /** 批次数量 */
    materialNoNum: number;
    /** 历史填报数据 */
    historyData: IMaterialConsumeData[];
    /** 表单实例的批次号 */
    mainMaterialNo: string;
    /** 该明细使用到的产品的id集合 */
    productIds: string[];
    /** 物料和code的映射 */
    productCodes: Record<string, string>;
    /** 历史数据中已经消耗的 */
    hasConsumed: number;
    /** 需求总量 */
    total: number;
    /** 剩于可消耗数量 */
    get remainingNum(): number;
    constructor(bomEntry: IBomEntry, 
    /** 是否启用顺序投料 */
    enableSequenceLoading: boolean, 
    /** 批次数量 */
    materialNoNum: number, 
    /** 历史填报数据 */
    historyData: IMaterialConsumeData[], 
    /** 表单实例的批次号 */
    mainMaterialNo: string);
    /**
     * 翻译物料的code
     * @param productId
     * @return {*}
     */
    translateProductCode(productId: string): string | undefined;
    /**
     *过滤出该组明细的数据
     * @param arr
     * @return {*}
     */
    filterGroupData(arr: IMaterialConsumeData[]): IMaterialConsumeData[];
    validateSubstitute(arr: IMaterialConsumeData[]): void;
    validateLotMixing(arr: IMaterialConsumeData[]): void;
    /**
     * 校验数量
     * @param arr
     * @return {*}
     */
    validateNum(arr: IMaterialConsumeData[]): Promise<void>;
    /**
     * 校验库存
     * @param row 当前行数据
     */
    validateStock(row: IMaterialConsumeData): Promise<void>;
    /**
     * 计算已经消耗的数量之和
     * @param arr
     * @return {*}
     */
    calcQtyConsumed(arr?: IMaterialConsumeData[]): number;
    /**
     * 计算自定义的数量校验的最大值和最小值
     * @param data
     * @return {*}
     */
    calcCustomNumberLimit(data: IMaterialConsumeData): Promise<{
        max: any;
        min: any;
    }>;
    /**
     * 按顺序投料用
     * 检查数据中的当前明细的填报是否已经完成
     * @param arr
     */
    validateHasCompleted(arr: IMaterialConsumeData[]): Promise<void>;
}
export declare class BomEntriesValidator {
    entries: IBomEntry[];
    /** 是否启用顺序投料 */
    enableSequenceLoading: boolean;
    /** 批次数量 */
    materialNoNum: number;
    /** 历史填报数据 */
    historyData: IMaterialConsumeData[];
    /** 表单实例的批次号 */
    mainMaterialNo: string;
    bomEntryValidators: BomEntryValidator[];
    constructor(entries: IBomEntry[], 
    /** 是否启用顺序投料 */
    enableSequenceLoading: boolean, 
    /** 批次数量 */
    materialNoNum: number, 
    /** 历史填报数据 */
    historyData: IMaterialConsumeData[], 
    /** 表单实例的批次号 */
    mainMaterialNo: string);
    /**
     * 翻译物料的code
     * @param productId
     * @return {*}
     */
    translateProductCode(productId?: string): string | undefined;
    /**
     * 找到物料对应的validator
     * @param productId
     * @return {*}
     */
    findUtilByProductId(productId: string): BomEntryValidator | undefined;
    /**
     * 检验是否符合顺序投料的顺序要求
     * @param row 当前编辑的行
     * @param arr 所有的数据
     * @return {*}
     */
    validateSequenceLoading(row: IMaterialConsumeData | undefined, arr: IMaterialConsumeData[]): Promise<void>;
    /**
     * 校验物料是否在bom里被使用
     * @param row 单行的数据
     */
    validateInBom(row: IMaterialConsumeData): void;
    /**
     * 检查数据是否完整
     * @param arr
     */
    validateDataCompleted(row: IMaterialConsumeData): void;
    /**
     * 校验替代料校验
     * @param arr
     */
    validateSubstitute(arr: IMaterialConsumeData[]): void;
    /**
     * 校验混批校验
     * @param arr
     */
    validateLotMixing(arr: IMaterialConsumeData[]): void;
    /**
     * 校验数量
     * @param arr
     */
    validateNum(arr: IMaterialConsumeData[]): Promise<void>;
    /**
     * 校验库存消耗
     * @param row
     */
    validateStock(row: IMaterialConsumeData): Promise<void>;
    /**
     * 检验整个数组是否符合bom配置的要求
     * @param arr
     */
    validate(arr: IMaterialConsumeData[]): Promise<void>;
    /**
     * 检查扫描数据是否可以插入
     * @param arr
     */
    validateScanCanInsert(arr: IMaterialConsumeData[]): Promise<void>;
    /**
     * 把扫描数据按情况插入到数组的位置，返回新数组
     * @param row
     * @param arr
     * @return {*}
     */
    mergeRowInArr(row: IMaterialConsumeData, arr: IMaterialConsumeData[]): IMaterialConsumeData[];
    /**
     * 获取BOM里面所有的主料，替换料的id集合
     */
    getAllMaterialIds(): (string | undefined)[];
}
