Настройка лабораторных журналов в LIMS myLab: расчёт погрешности по ГОСТ 4386-89 п. 3

В этой статье мы начнём серию публикаций, посвящённых настройке лабораторных журналов в LIMS myLab.

LIMS myLab поддерживает большое количество настроек, позволяющих создавать сложные системы обработки первичных данных. Однако на практике встречаются случаи, которые сложно учесть, и для которых невозможно реализовать стандартное решение.

Например, в ГОСТ 4386-89 (п. 3) расчёт погрешности выполняется по формуле, зависящей от первичных данных.

где
С — среднеарифметическое результатов двух параллельных определений концентрации фторидов в добавке, мг/дм³;
С0 —действительная концентрация фторидов в введенной добавке, мг/дм³.

Также в документе задано условие:

Результат считают удовлетворительным, если найденное значение погрешности не превышает 25-30 % с Р = 0,95 при массовой концентрации фторидов 0,1-0,15 мг/дм³; 15 % при концентрации 0,2-0,5 мг/дм³ и 7 % при концентрации фторидов более 0,5 мг/дм³.

В этой статье мы разберём, как настроить такой расчёт в LIMS myLab.

Этапы настройки

В LIMS myLab создается лабораторный журнал с методом ввода данных python.

Добавление переменных

В уникальных параметрах журнала добавляются четыре переменные:

  • pF1 — равновесный потенциал анализируемой пробы
  • pF2 — равновесный потенциал пробы с введенной добавкой
  • c0 — действительная концентрация фторидов в введенной добавке, мг/дм³
  • c1 — массовая концентрация фторидов (фторид-ионов), мг/дм³

Расчет погрешности

Задаем расчет погрешности:

def Expression():
    pF1 = lims.GetVariable("pF1")
    pF2 = lims.GetVariable("pF2")
    c0 = lims.GetVariable("c0")
    
    if c0 == 0 or pF1 == "" or pF2 == "" or c0 == "" or pF1 == None or pF2 == None or c0 == None:
        return None
    
    c1 = lims.GetTableValue(1, 0, pF1, True)
    c2 = lims.GetTableValue(1, 0, pF2, True)
    c = c2 - c1
    
    delta = math.fabs((c - c0) * 100 / c0)
    if 0.1 <= c1 <= 0.15 and delta < 30:
        return str(round(delta, 1)) + " %"
    elif 0.2 <= c1 <= 0.5 and delta < 15:
        return str(round(delta, 1)) + " %"
    elif 0.5 < c1 <= 19 and delta < 7:
        return str(round(delta, 1)) + " %"
    else:
        return None

Данный код возвращает значения параметров «pF1», «pF2» и «c0». Валидируем значения данных параметров. Далее вычисляем значения переменных «c1», «c2» и «с», на основании значений равновесных потенциалов. Методом lims.GetTableValue() из справочника LIMS myLab возвращаем соответствующие значения массовой концентрации фторидов. Справочник необходимо заранее создать в LIMS myLab, в соответствии с таблицей из приложения ГОСТ 4386-89.

Далее вычисляем значение погрешности по формуле представленной выше. Так как могут получаться данные, когда «с0» больше «с», используем функцию модуля, чтобы полученное значение было положительным и его можно было сравнить с нормативами.

Далее, используются функции условия, чтобы выполнить проверку на условия удовлетворения результата. Записываем диапазоны для параметра «с1» и погрешности (параметр «delta»). Если ни одно из условий не выполняется, то поле остается пустым. Так как в ГОСТ 4386-89 значение погрешности представлено в %, а массовая концентрация фторидов (фторид-ионов) выражается в мг/дм³, мы переводим значение параметра «delta» в строковый тип данных и дополняем ее » %». Также в случае получения иррациональных чисел параметра «delta», мы используя функцию round(), выполняем округление.

Расчет результата

Переменная «c1» является результатом в рамках данного журнала. Ставим флаг слева от параметра.

Задаем «Формулу» для переменной «c1»:

def Expression():
    pF1 = lims.GetVariable("pF1")
    pF2 = lims.GetVariable("pF2")
    c0 = lims.GetVariable("c0")
    
    if c0 == 0 or pF1 == "" or pF2 == "" or c0 == "" or pF1 == None or pF2 == None or c0 == None:
        return None
    
    c1 = lims.GetTableValue(1, 0, pF1, True)
    c2 = lims.GetTableValue(1, 0, pF2, True)
    c = c2 - c1
    
    delta = math.fabs((c - c0) * 100 / c0)
    if 0.1 <= c1 <= 0.15 and delta < 30:
        return c1
    elif 0.2 <= c1 <= 0.5 and delta < 15:
        return c1
    elif 0.5 < c1 <= 19 and delta < 7:
        return c1
    else:
        return None

Данный код, дублирует код для расчета погрешности, что обусловлено необходимостью учета условии удовлетворения значения погрешности условиям из ГОСТ. Соответственно в данном случае, в части кода с функцией условия, выводится значение параметра «c1». Если значение погрешности не удовлетворяет условию, то ячейка с результатом остается пустой.

Пример ввода первичных данных представлен на скриншоте ниже.

Использованные источники

ГОСТ 4386-89. Вода питьевая. Методы определения массовой концентрации фторидов : межгосударственный стандарт / разработан и введён в действие Постановлением Государственного комитета СССР по управлению качеством продукции и стандартами от 27 ноября 1989 г. №3473 взамен ГОСТ 4386-81 // М.: Издательство стандартов, 1990.