目次 — 知りたいところから読む

CEAの回収液ロット — 混合前後の追跡と系統隔離

混ぜても、出所は平均されない

二つの帳簿の記事では、養分状態と衛生状態を分けた。今回は回収液ロットを混ぜたときの履歴を扱う。ロットAとBを混ぜてECを計算できても、Aに異常があった可能性は消えない。混合後の液はAとBの両方へ追跡できなければならない。

UVM Extensionは、循環する養液が複数の表面をつなぎ、一か所の問題が系全体へ広がりうることを説明している。UVMの食品安全資料を踏まえ、混合を「新しい清浄ロットの生成」と記録しない。

混合ロットへ継承する項目

項目 例 目的
新しいロットID M-2026-09-14-01 混合後の一意な参照
親ロットと量 A: 6 L、B: 4 L 祖先と寄与量の追跡
接触した系統 根室2、戻り配管、隔離容器 影響範囲の逆引き
混合時刻・担当 UTC時刻、操作ID 時系列の確定
検査・処理状態 未検査、処理済み、保留 再投入判断の根拠

親ロットの一つが保留なら、子ロットも保留にする。量が少ない親を無視して「大部分は正常」とは扱わない。これは病原体濃度を計算する式ではなく、追跡性を失わないための記録ルールである。

共有系統をグラフとして残す

タンク、ポンプ、フィルタ、ノズル列、根室、回収容器をノード、液が移動した事実を有向辺として記録する。異常ロットが接触した辺を逆向きにたどると、隔離候補の系統を列挙できる。

def ancestors(lot, parents):
    seen = set()
    stack = [lot]
    while stack:
        current = stack.pop()
        if current in seen:
            continue
        seen.add(current)
        stack.extend(parents.get(current, ()))
    return seen

parents = {"M-01": ("A-01", "B-01"), "M-02": ("M-01", "C-01")}
print(sorted(ancestors("M-02", parents)))

出力は['A-01', 'B-01', 'C-01', 'M-01', 'M-02']となる。循環があってもseenで停止する。これはロットの祖先を求める例で、微生物の移動確率や実際の汚染範囲を計算するものではない。

隔離を解除する条件を先に決める

異常を検出したら、対象ロット、共有タンク、戻り配管、接触した根室を記録し、通常の再投入ループから外す。隔離解除には、検査結果、処理履歴、残留確認、洗浄・衛生化の完了、責任者の承認を結び付ける。検査結果がないまま別タンクへ移すことは、隔離の解除ではなく影響範囲の拡大である。

回収液が収穫物や食品接触面へ触れる構成では、農業用水・食品安全上の要件が別途関係する。VCEの食品安全資料も、養液が収穫物へ接触するかどうかで管理上の扱いが変わることを説明している。VCE資料を参照し、ここでのロット記録を法的な出荷判定の代用にしない。

範囲

本記事は混合ロットの祖先、共有系統、隔離記録を扱った。病原体の検査法、汚染確率、処理剤の濃度、法令上のリリース判定は含まない。次は回収液を混ぜない設計と、区画別の排液・処理経路を比較する。

区画隔離 — 回収液を混ぜない排液・処理経路

記録だけでなく、配管を分ける

回収液ロットの追跡では、混合後も親ロットを継承した。さらに影響範囲を小さくするには、区画ごとにタンク、戻り配管、回収容器、処理先を分け、通常運転で混合しない構成を検討する。

UVM Extensionは、循環水が複数の表面をつなぎ、一つの場所の問題が他へ広がりうることを説明している。UVM資料の考え方を、ここでは物理経路の分離へ適用する。これは病原体をゼロにする設計ではなく、隔離と追跡の単位を明確にする設計である。

区画ごとに四つの経路を持つ

経路 区画A 区画B 混ぜない理由
給液 タンクA → ポンプA タンクB → ポンプB 供給履歴を分ける
戻り 根室A → 回収A 根室B → 回収B 異常ロットの共有を避ける
排液 隔離ドレンA 隔離ドレンB 排出・処理量を区別する
処理 フィルタ/処理A フィルタ/処理B 処理状態の混同を避ける

共通の原水を使う場合でも、原水から区画タンクへ入る前の境界を記録する。共有ヘッダ、共通フィルタ、共通床排水があれば、区画を別名で呼ぶだけでは隔離にならない。

区画グラフで隔離範囲を列挙する

def connected(start, edges):
    seen, stack = set(), [start]
    while stack:
        node = stack.pop()
        if node in seen:
            continue
        seen.add(node)
        stack.extend(edges.get(node, ()))
    return seen

edges = {
    "tank-A": ("root-A", "drain-A"),
    "root-A": ("tank-A",),
    "tank-B": ("root-B", "drain-B"),
    "root-B": ("tank-B",),
    "drain-A": ("treatment-A",),
    "drain-B": ("treatment-B",),
}
print(sorted(connected("tank-A", edges)))

出力は['drain-A', 'root-A', 'tank-A', 'treatment-A']となる。区画Aの異常を検出したとき、Bを自動的に止めるかどうかは、共通部分と運用手順を別途確認して決める。グラフが記録にない接続を推測することはできない。

排液を分けても、処理能力は増えない

区画ドレンを分けると、量とロットを区別できる。しかし処理装置が一台で順番処理なら、処理前後の容器ID、開始・終了、すすぎ、処理残留を記録する。処理先を共通にする場合も、処理前の区画IDを失わない。

排液量が増えたとき、給液ポンプの異常、根室からの漏れ、回収容器の満杯、処理装置の停止を分けて調べる。排液を別タンクへ移すだけでは、元の異常を解消したことにならない。

範囲

本記事は区画隔離の経路設計と記録単位を扱った。配管径、バルブ選定、病原体検査、処理剤、法令上の出荷判定は含まない。次は、アクアポニックスで魚・微生物・植物の水質境界がどう変わるかを整理する。

次に読む

化学帳簿と衛生帳簿を分ける。CEA回収液・衛生・ロット・区画 — 記録と隔離運用シリーズの次の内容へ進むCEAアクアポニックス — 魚・微生物・植物の水質境界同じ分野を別の観点から読むCEAアクアポニックス — 負荷・設備容量・隔離と復旧