package digital.laboratory.platform.inspection.service;

import digital.laboratory.platform.inspection.dto.HairSewageDataDto;

import java.math.BigDecimal;

/**
 * @author ChenJiangBao
 * @version 1.0
 * @description: 处理检验数据接口
 * @date 2025/3/24 9:56
 */
public interface ProcessInspectDataService {

    //设置是否在误差范围内
    String getWithinErrorText(BigDecimal actualValue, BigDecimal expectedValue);

    //判断保留时间范围是否符合
    String getRtWithinErrorText(double targetRtErr, double errorRange);

    /**
     * 计算离子丰度比 相对偏差 (目标物离子丰度比 - 标准物离子丰度比) / 标准物质离子丰度比 * 100
     *
     * @param ionAbundanceRatioWithinError 检测样本的丰度比偏差
     * @param stdIonAbundanceRatio 标准物质的离子丰度比
     */
    String calculateHairCaseIonAbundanceRatioWithinError(double ionAbundanceRatioWithinError, double stdIonAbundanceRatio);

    /**
     * 根据给定的标准离子丰度比获取生物样本案件离子丰度比相对误差范围内的最大允许相对误差
     *
     * @param stdIonAbundanceRatio 标准离子丰度比
     * @return 发案离子丰度比允许的最大误差值
     */
    Double getHairCaseIonAbundanceRatioWithinErrorRange(double stdIonAbundanceRatio);

    /**
     * 计算离子丰度比偏差
     *
     * @param sampleIonAbundanceRatio 目标物的离子丰度比
     * @param stdIonAbundanceRatio 标准物质的离子丰度比
     * @return
     */
    double getAbundanceRatioErrorValue(double sampleIonAbundanceRatio, double stdIonAbundanceRatio);

    /**
     * 计算相对误差  (目标物保留时间 - 标准物保留时间) / 标准物质保留时间 * 100
     *
     * @param hairSewageDataDto
     * @param hairSewageDataDtoStd
     */
    void calculateHairCaseRtTimeError(HairSewageDataDto hairSewageDataDto, HairSewageDataDto hairSewageDataDtoStd);

    /**
     * 计算保留时间的相对误差
     *
     * @param targetRtTime 目标物保留时间信息
     * @param stdRtTime    标准物保留时间信息
     * @return
     */
    BigDecimal getHairCaseRtTimeError(double targetRtTime, double stdRtTime);

    /**
     * 判断保留时间相对误差是否符合误差范围
     *
     * @param rtTimeError
     */
    String setHairCaseRtTimeWithinError(double rtTimeError);

    /**
     * 获取碎片的丰度比偏差范围
     *
     * @param abundanceRatio
     * @return
     */
    BigDecimal getErrorRange(BigDecimal abundanceRatio);
}
