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

CEAの回収液 — 衛生・処理・再利用の境界を分けて記録する

ECが戻っても、回収液が安全になったとは限らない

エアロポニックスの記事では、噴霧量と根室の回収量を別に記録した。回収液をタンクへ戻す段階では、EC・pH・水温だけでなく、濁り、沈殿、バイオフィルム、微生物検査、処理薬剤の残留を別の項目として扱う必要がある。

再循環では同じ液が複数の根や配管を通るため、問題が発生したときに共有経路を通じて広がる可能性がある。UVM Extensionは、食品・水と接触する表面の洗浄・衛生化を重要な管理点として整理している。Virginia Cooperative Extensionの食品安全資料も、水が灌水・養液供給・洗浄など複数の工程に関わることを説明している。

四つの状態を同じ「水質」にまとめない

状態 記録するもの 次の判断
回収前 回収元、時刻、流量、根室・配管の異常 系外排出か隔離容器へ
隔離中 容器ID、液位、濁り、沈殿、採取時刻 検査・処理へ進めるか保留
処理後 処理方式、開始・終了、濃度や線量、接触時間、洗浄・すすぎ 再検査または廃棄
再投入前 水質、衛生検査、処理残留、承認者 指定系統へ戻すか拒否

ECが目標内でも、処理履歴がない液は「再利用可能」と記録しない。逆に、処理を行ったからといって、養分組成や植物への適合性が自動的に戻るわけでもない。

処理は目的と副作用を一緒に記録する

ろ過は粒子を減らせるが、溶解した物質や微生物をすべて除去するとは限らない。UV、熱、酸化剤などの処理は、濁度、流量、接触時間、液温、薬剤濃度、処理後のすすぎで結果が変わる。方式を一語で保存せず、実際の処理条件を記録する。

処理剤を使う場合は、対象液への適合、残留、分解生成物、作物・作業者・排水への影響を確認する。研究報告では、次亜塩素酸ナトリウムによる衛生化後にすすぎがないと塩素酸が検出された例が報告されている。PubMed掲載研究は、処理条件と残留確認を切り離せないことを示す一例である。濃度や接触時間を本記事から設備へ転用しない。

合成ログを再利用判定へ変換する

次の関数は、合成ログを「REJECT」「TEST」「HOLD」「REUSE_CANDIDATE」に分類するだけである。衛生検査の代替ではなく、入力欠落や処理履歴のない液を自動的に再投入しないための境界例である。

from math import isfinite

def classify(log):
    required = ("ec", "temperature", "turbidity", "sanitized",
                "residual_checked", "sample_age_h")
    if any(key not in log for key in required):
        return "REJECT"
    numeric = (log["ec"], log["temperature"], log["turbidity"], log["sample_age_h"])
    if not all(isfinite(x) for x in numeric) or log["sample_age_h"] < 0:
        return "REJECT"
    if log["turbidity"] > 2.0:
        return "HOLD"
    if not log["sanitized"] or not log["residual_checked"]:
        return "TEST"
    if log["sample_age_h"] > 2:
        return "HOLD"
    return "REUSE_CANDIDATE"

cases = [
    {"ec": 1.5, "temperature": 22, "turbidity": 0.8,
     "sanitized": True, "residual_checked": True, "sample_age_h": 1},
    {"ec": 1.5, "temperature": 22, "turbidity": 0.8,
     "sanitized": False, "residual_checked": False, "sample_age_h": 1},
    {"ec": 1.5, "temperature": 22, "turbidity": 3.0,
     "sanitized": True, "residual_checked": True, "sample_age_h": 1},
]
print([classify(case) for case in cases])

出力は['REUSE_CANDIDATE', 'TEST', 'HOLD']となる。REUSE_CANDIDATEは承認済みの再投入ではない。水質と衛生の必要な検査が完了し、設備の運用手順が許可した場合だけ、別の段階で再投入を決める。

回収液を戻す前に系統境界を確認する

観測 分かること 分からないこと
回収量 水収支、漏れや排出の兆候 微生物状態
EC・pH・水温 化学・熱の変化 病原体やバイオフィルム
濁度・沈殿 粒子や析出の兆候 透明な汚染や残留薬剤
微生物検査 指定した検査項目の結果 検査対象外の全てのリスク
処理履歴・残留 処理が行われた記録 根への適合性や養分組成

隔離容器から再投入するなら、投入先を限定し、操作IDと液のロットを記録する。異常が一つの根室で見つかった場合、共有タンク、戻り配管、フィルタ、ノズル列を同じ系統として扱うかを先に定義する。問題のある液を、ECが合うという理由だけで別の区画へ移さない。

範囲

本記事は回収液の分類、処理履歴、再投入前の境界を扱った。病原体ごとの検査法、薬剤濃度、食品衛生法上の出荷判定、処理装置の性能保証は扱わない。次は水・養分の再利用を、養液の化学収支と衛生管理の二つの帳簿で接続する。

CEAの二つの帳簿 — 養分収支と衛生状態を接続する

ECが正常でも再投入を止める場合がある

回収液の記事では、衛生・処理履歴をECやpHと分けた。ここではその二つを一つの判断へ接続する。養分の帳簿は水量、成分質量、EC、pH、温度を追う。衛生の帳簿は回収元、隔離、検査、処理、残留確認を追う。

UVM Extensionは、循環する養液が系内の複数の食品接触面をつなぎ、問題が広がりうることを説明している。また、水質を時系列で追跡し、ろ過・処理、衛生管理を組み合わせることを挙げている。UVMの資料を根拠に、本記事では「化学条件が合う」ことと「衛生条件がそろう」ことを別の真偽値として扱う。

二つの帳簿を同じ行へ押し込まない

帳簿 例 更新の契機 欠けると起きる誤り
養分・水 体積、成分質量、EC、pH、温度 補給、排液、吸収、測定 濃度だけで成分量を復元する
衛生・処理 回収元、隔離ID、検査、処理、残留 回収、異常、洗浄、処理完了 ECが合う液を無条件で戻す

同じ時刻を持たせても、同じ測定ではない。回収液が10 L減ったという水収支は、微生物状態を示さない。処理済みという記録も、処理後に新しい汚染経路へ触れていないことを保証しない。

再投入は四つの条件をすべて満たすときだけ候補にする

候補判定に使う合成条件を次のように置く。

  1. 養分帳簿の体積と成分質量が有限で、差分が許容範囲にある。
  2. 回収液のロットIDと隔離記録がある。
  3. 必要な衛生検査と処理残留の確認が完了している。
  4. サンプルが古すぎず、戻す先の系統が指定されている。

一つでも欠ければHOLDまたはREJECTとし、別の液を混ぜて帳尻を合わせない。UVM資料が示すように、循環水が接触する表面も食品接触面になりうるため、戻し先を変えることは衛生状態をリセットしない。

合成ログを二つの帳簿で判定する

from math import isfinite

def decision(chem, hygiene):
    if chem.get("volume_l", 0) <= 0 or chem.get("mass_mg", 0) < 0:
        return "REJECT"
    if not all(isfinite(float(chem.get(k, float("nan"))))
               for k in ("volume_l", "mass_mg", "ec")):
        return "REJECT"
    if not hygiene.get("lot_id") or not hygiene.get("isolated"):
        return "HOLD"
    if not hygiene.get("test_passed") or not hygiene.get("residual_checked"):
        return "HOLD"
    if hygiene.get("age_h", 999) > 2:
        return "HOLD"
    return "REUSE_CANDIDATE"

cases = [
    ({"volume_l": 10, "mass_mg": 800, "ec": 1.4},
     {"lot_id": "R-01", "isolated": True, "test_passed": True,
      "residual_checked": True, "age_h": 1}),
    ({"volume_l": 10, "mass_mg": 800, "ec": 1.4},
     {"lot_id": "R-02", "isolated": True, "test_passed": False,
      "residual_checked": True, "age_h": 1}),
    ({"volume_l": 0, "mass_mg": 800, "ec": 1.4},
     {"lot_id": "R-03", "isolated": True, "test_passed": True,
      "residual_checked": True, "age_h": 1}),
]
print([decision(c, h) for c, h in cases])

出力は['REUSE_CANDIDATE', 'HOLD', 'REJECT']となる。これは再投入の命令ではなく、二つの帳簿が揃った候補を次の承認工程へ送る分類である。

再投入後も帳簿を閉じない

再投入した量を養分帳簿へ加え、ロットID・処理記録・戻し先を衛生帳簿へ紐付ける。投入後のEC変化や水位変化だけで処理成功を判断しない。異常が出た場合は、最後に接続した回収ロットと共有配管を追跡できるようにする。

本記事の四条件は、法的な出荷判定、病原体検査、処理薬剤の選択を置き換えない。次は、複数ロットの回収液を混ぜるときのトレーサビリティと系統隔離を扱う。

次に読む

噴霧・回収の経路を確認する。CEA水路・多段送液 — NFT・DWC・点滴と揚程分配シリーズの次の内容へ進むCEAロット・区画の追跡と隔離運用同じ分野を別の観点から読むCEAアクアポニックス — 魚・微生物・植物の水質境界