5D Library › 本草的分子与风土 · English
第六章 批次间波动与分析证明书
证明书是什么
分析证明书(Certificate of Analysis,COA)是针对某一个已标识批次、写明做了哪些检测、用什么方法、得到什么结果、对照什么限度的文件。买家看不到一袋干茎或一桶粉末里面,COA 是他了解里面有什么的主要途径。一份好的 COA 回答六个问题:
- 哪一批? 一个能追溯到某次采收或某次生产的批号。
- 谁检测的? 一个实验室,最好是相关项目通过 ISO/IEC 17025 认可的实验室,意味着有独立机构核查过它的能力和质量体系 (International Organization for Standardization 2017)。
- 用什么方法? 写明方法名称(药典正文、ISO 或 AOAC 方法,或经过验证的内部方法),因为如第二、四章所示,方法不同,数字就不同。
- 对照什么限度? 产品销售地适用的规格。
- 结果是多少,不确定度多大? 带单位的数字;接近限度时,还要有测量不确定度的估计。
- 样品怎么来的? 样品是怎样抽取的,因为对一份没有代表性的样品做再完美的分析,也说明不了整批货。
用于放行检验的分析方法应当在准确度、精密度、专属性、检测限与定量限、线性和范围等方面经过验证;药品领域的国际指导原则 ICH Q2(R2) 说明了每一项的含义和证明方法 (International Council for Harmonisation 2023),食品和草药实验室使用的是同样的思路。
抽样:通常被省略的那一步
质量控制中的大多数错误,发生在样品到达实验室之前。一批农产品并不均匀:来自不同植株的茎、田间不同位置的根茎、不同苗床的浆果。两类问题需要两种不同的抽样。
第一类问题是:整批中是否有任何地方出了问题? 霉变、异物或某一袋被污染,可能只影响一批中的一部分。如果受影响的单元占比为 ,随机抽取 个单元,至少抽到一个的概率是 。第二类问题是:平均值是多少? 对多糖含量这类性质,要把均值估计到误差 以内,需要的单元数取决于单元之间差异有多大。
推导
要抽多少个单元,才能发现只影响一批中一部分的问题;要抽多少个单元,才能把平均值估计到给定精度。
import math
# 1. Finding a problem that affects only part of a lot (e.g. mould in some
# bags). With n independent units drawn at random, the chance that at
# least one is affected is 1 − (1 − p)^n.
def units_needed(p, confidence=0.95):
return math.ceil(math.log(1 - confidence) / math.log(1 - p))
for p in (0.20, 0.05, 0.01):
print(f"{100 * p:4.0f} % of units affected: sample {units_needed(p):3d} "
f"units for a 95 % chance of catching at least one")
# 2. Estimating an average (e.g. polysaccharide %) to within ± d with 95 %
# confidence when units vary with standard deviation s: n = (1.96 s / d)².
for s, d in ((3.0, 1.0), (3.0, 2.0), (6.0, 2.0)):
n = math.ceil((1.96 * s / d) ** 2)
print(f"sd {s:.0f} points, margin ± {d:.0f}: {n:3d} units to sample")
# 20 % of units affected: sample 14 units for a 95 % chance of catching at least one
# 5 % of units affected: sample 59 units for a 95 % chance of catching at least one
# 1 % of units affected: sample 299 units for a 95 % chance of catching at least one
# sd 3 points, margin ± 1: 35 units to sample
# sd 3 points, margin ± 2: 9 units to sample
# sd 6 points, margin ± 2: 35 units to sample要以 95% 的把握发现百分之一单元的缺陷,大约需要抽三百个单元。这就是为什么单靠检测无法保证一批货没有罕见问题,也是为什么过程控制(干净的干燥、合适的储存、批次隔离)比最后的检测更重要。
色谱指纹图谱
对草药材料而言,单一的标志性成分很少能完整代表品质。因此《中国药典》对许多药材采用指纹图谱或特征图谱:把一次高效液相色谱运行得到的全部色谱峰模式,与对照图谱比较。相似度常用一个数字概括,即两组峰面积向量夹角的余弦,或它们的相关系数。
推导
三个批次与对照指纹图谱的相似度,以及单个色谱峰的最大变化。
import math
# HPLC fingerprints as peak areas at the same retention times (invented).
reference = [12.0, 30.5, 8.2, 44.0, 5.1, 19.6, 3.3]
batches = {
"batch A": [11.4, 31.9, 7.8, 42.6, 5.5, 20.3, 3.0],
"batch B": [14.8, 24.1, 9.9, 39.0, 7.2, 25.5, 4.6],
"batch C": [12.5, 29.8, 0.4, 47.3, 5.0, 18.9, 3.4], # one peak missing
}
def cosine(a, b):
dot = sum(x * y for x, y in zip(a, b))
return dot / math.sqrt(sum(x * x for x in a) * sum(y * y for y in b))
def correlation(a, b):
ma, mb = sum(a) / len(a), sum(b) / len(b)
return cosine([x - ma for x in a], [y - mb for y in b])
for name, peaks in batches.items():
worst = max(range(len(peaks)), key=lambda i: abs(peaks[i] / reference[i] - 1))
print(f"{name}: cosine {cosine(reference, peaks):.3f}, "
f"correlation {correlation(reference, peaks):.3f}, "
f"largest change at peak {worst + 1} "
f"({100 * (peaks[worst] / reference[worst] - 1):+.0f} %)")
# batch A: cosine 0.999, correlation 0.998, largest change at peak 7 (-9 %)
# batch B: cosine 0.984, correlation 0.967, largest change at peak 5 (+41 %)
# batch C: cosine 0.990, correlation 0.984, largest change at peak 3 (-95 %)批次 C 的七个峰中有一个几乎消失了,它与对照图谱的相似度却仍有 0.990,因为大峰主导了得分。只看相似度阈值,它就会合格。一份只报告「相似度 ≥ 0.90」的 COA,恰恰掩盖了买家最想知道的那种变化。规格还应当写明哪些标志峰必须出现,以及各自应落在什么范围。
污染物
植物材料可能携带一些对安全的影响比任何活性成分都大的污染物:从土壤吸收或由空气沉降的重金属(铅、镉、砷、汞);农药残留;黄曲霉毒素等真菌毒素,即霉菌在温暖潮湿条件下储存的根茎和种子上产生的毒素;以及微生物。限度因产品和市场而异:《中国药典》规定药材的限度,国际食品法典的食品污染物通用标准是许多国家食品法规的依据 (Codex Alimentarius Commission 1995),马来西亚《1985 年食品条例》规定在当地销售的食品的限度 (Government of Malaysia 1985)。COA 应当写明对照的是哪一套限度。没有方法、限度和数字的「重金属:合格」,没有用处。
水分活度
水分含量说的是产品含有多少水,水分活度说的是这些水有多「可用」。它的定义是
即产品上方水的蒸气压,与同温度下纯水上方蒸气压之比。纯水的 ;与相对湿度 30% 的空气达到平衡的产品,。与糖、蛋白质和表面结合的水较不可用,所以水分含量相同的两种产品,水分活度可能差别很大。
微生物需要可用的水。每一类微生物都有一个最低水分活度,低于它就不能生长:大多数革兰氏阴性菌约 0.97,大多数革兰氏阳性菌 0.90,金黄色葡萄球菌 0.86,大多数酵母 0.88,大多数霉菌 0.80,嗜旱霉菌和耐高渗酵母约 0.61 (Barbosa-Cánovas et al. 2020; Manitoba Agriculture, n.d.)。使用这些限值的一种简单方法是「γ(gamma)法」:把每个因素看作把生长速率乘上一个 0 到 1 之间的系数;对水分活度而言,这个系数从最低值处的 0 线性上升到 时的 1 (Zwietering et al. 1992)。
推导
按 γ 法计算各类微生物在五个水分活度下的相对生长速率。0 表示不能生长。
# Minimum water activity for growth (typical values, see the text).
AW_MIN = {
"most Gram-negative bacteria": 0.97,
"most Gram-positive bacteria": 0.90,
"Staphylococcus aureus": 0.86,
"most yeasts": 0.88,
"most moulds": 0.80,
"xerophilic moulds": 0.61,
}
def gamma_aw(aw, aw_min):
"""Relative growth rate (0 to 1) in the 'gamma' approach:
linear from aw_min (no growth) to aw = 1 (no limitation)."""
return max(0.0, (aw - aw_min) / (1 - aw_min))
levels = (0.95, 0.85, 0.70, 0.55, 0.30)
print("organism group " + " ".join(f"aw {a:.2f}" for a in levels))
for name, m in AW_MIN.items():
print(f"{name:28s} " + " ".join(f"{gamma_aw(a, m):7.2f}" for a in levels))
print("growth stops below about 0.6; 0.3 is chosen for texture and slower chemistry")
# organism group aw 0.95 aw 0.85 aw 0.70 aw 0.55 aw 0.30
# most Gram-negative bacteria 0.00 0.00 0.00 0.00 0.00
# most Gram-positive bacteria 0.50 0.00 0.00 0.00 0.00
# Staphylococcus aureus 0.64 0.00 0.00 0.00 0.00
# most yeasts 0.58 0.00 0.00 0.00 0.00
# most moulds 0.75 0.25 0.00 0.00 0.00
# xerophilic moulds 0.87 0.62 0.23 0.00 0.00
# growth stops below about 0.6; 0.3 is chosen for texture and slower chemistry注
纠正一个常见说法。 常听人说水分活度要低于 0.3 才能抑制微生物生长,这不太准确。所有已知微生物的生长在约 0.6 以下都会停止 (Barbosa-Cánovas et al. 2020)。干燥食品之所以常常控制在 0.2~0.3,远低于这条线,是出于其他原因:在这个范围内许多干燥食品是酥脆而不是发韧的,拉布扎(Labuza)等人画出的「食品稳定性图」也显示,这里褐变反应很慢,脂肪氧化接近最低 (Labuza et al. 1970)。低水分活度还只能阻止生长,并不能杀菌:沙门氏菌等细菌可以在干燥食品中存活数月,遇水后再次生长。所以对干燥产品而言,低水分活度是安全的必要组成部分,而不是安全的保证;干燥前和干燥中的卫生依然必不可少。
对冻干产品来说,水分活度尤其重要,因为它的多孔结构会很快从潮湿空气中吸收水分。一件出机时 为 0.2 的产品,如果包装漏气,在热带仓库里可以升到 0.6 以上。
假说 · 尚未验证
尚未确立。 对存放在同样热带仓储条件下的干姜和石斛产品,储存期间水分活度上升的速率,比初始水分含量更能预测之后标志性成分(6-姜辣素;多糖分子量)的损失。如果在储存研究中,初始水分含量预测损失的效果与水分活度上升速率相同或更好,假说就被推翻。
参考文献
Fan, Y. (2026). Molecules and Terroir: Polysaccharides of Dendrobium officinale, Gingerols of Zingiber officinale, A-Type Proanthocyanidins and the Mass Transfer of Freeze-Drying [本草的分子与风土] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23693057 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).