Contents — find the section you need

Separate solids capture from nitrogen and phosphorus load

Do not call cloudy water and dissolved nitrate one load

The previous guide separated fish tank, biofilter and plant observations. This guide separates fish solids from dissolved nitrogen and phosphorus. Cornell describes aquaponics as a path through fish tanks, solids collection, plant areas and return circulation. Cornell Small Farms

Solids capture changes what leaves as particles and what later mineralizes. Dissolved nitrogen passes through nitrification and plant uptake. Phosphorus can be concentrated in solids and must not be inferred from a nitrogen equation.

Keep four paths in separate ledgers

Path Record Do not conflate with
Solids capture Mass, water content, time and destination Dissolved nitrate concentration
Dissolved nitrogen Ammonia, nitrite, nitrate and flow Total nitrogen in feed
Phosphorus Dissolved/particulate, capture and discharge Nitrogen-derived estimate
Plant uptake and discharge Harvest, discharge and recovery Pre-filter load

Measure filter inlet and outlet together. Whether captured solids are discarded, mineralized separately or returned to plants changes downstream load.

Calculate a synthetic load

Assume daily inputs of 10 g nitrogen and 1.2 g phosphorus from feed. Solids capture removes 3 g N and 0.8 g P; plants take up 4 g dissolved N and 0.2 g P. Residuals are 3 g N and 0.2 g P.

inputs = {"N": 10.0, "P": 1.2}
solids = {"N": 3.0, "P": 0.8}
plants = {"N": 4.0, "P": 0.2}
residual = {k: inputs[k] - solids[k] - plants[k] for k in inputs}
print(residual)

The output is {'N': 3.0, 'P': 0.2}. Residuals may include nitrification, tank storage, other discharge and measurement error; they are not plant uptake or a safe loading limit.

Record the destination of captured solids

Moving solids to another vessel does not make nutrients disappear. Record water content, storage time, treatment and whether material is returned, composted or discarded. If treated liquid returns, register a new lot in both nutrient and sanitation ledgers.

Do not replenish phosphorus or trace elements by assuming the nitrogen ratio. Separate feed, fish, media, plant biomass and discharge boundaries, and do not force unexplained residuals to zero.

Scope

This guide covers solids, nitrogen and phosphorus accounting boundaries. Feed composition, filter design, mineralization kinetics, species limits, pathogens and food release decisions remain outside scope. Next comes design variables connecting water-quality load with fish and plant capacity.

Connect water-quality load to fish and plant capacity

One fish-to-plant ratio is not a system design

The previous guide separated solids, nitrogen and phosphorus loads. This guide connects those loads to fish-tank, biofilter and plant capacity. Oklahoma State University treats solids removal, biofiltration and the hydroponic unit as separate components and recommends adding capacity after sizing them.SRAC aquaponics guide

The relationship between plants and fish changes with species, growth stage, feeding rate, filtration, flow and harvest cycle. Do not turn a fixed ratio into a safety limit or performance guarantee. Compare load and capacity over the same daily time window.

Keep five design tables

Table Minimum variables Compare capacity with
Fish tank Biomass, feed, feeding times, temperature, DO Respiration, excretion and tank volume
Solids Inlet mass, capture, water content, destination Filter throughput and cleaning interval
Biofilter Ammonia load, nitrite, nitrate, contact area, flow Peak load and oxygen supply
Plants Growing area, crop stage, harvest, uptake Dissolved nutrient residual and light/water temperature
Hydraulics and headroom Recirculation, exchange, downtime, reserve Minimum zone flow and recovery time

Do not use fish biomass as a substitute for feed input. As fish move from juvenile to harvest stage, feed and waste time series change even when the count stays the same. Record newly planted and harvest-ready plant areas as separate stages.

Assign a synthetic daily load to capacity

Assume 100 g daily feed, 10 g nitrogen load, 3 g nitrogen in the solids path and a 4 g plant uptake target. The residual is 3 g, including biofilter processing, tank storage, discharge and measurement error. Do not increase plant area just to force that residual to zero; assign it to the next capacity columns.

load = {"feed_g": 100.0, "N_g": 10.0}
paths = {"solids_N_g": 3.0, "plant_target_N_g": 4.0,
         "biofilter_or_other_N_g": 3.0}
assert sum(paths.values()) == load["N_g"]
capacity = {"fish_tank_feed_g": 120.0,
            "biofilter_N_g": 3.5,
            "plant_target_N_g": 5.0}
headroom = {"feed_g": capacity["fish_tank_feed_g"] - load["feed_g"],
            "biofilter_N_g": capacity["biofilter_N_g"] - paths["biofilter_or_other_N_g"],
            "plant_N_g": capacity["plant_target_N_g"] - paths["plant_target_N_g"]}
print(headroom)

The output is {'feed_g': 20.0, 'biofilter_N_g': 0.5, 'plant_N_g': 1.0}. These are synthetic capacity differences, not species limits, food-safety conclusions or pathogen controls. Use the smallest headroom to identify whether the fish tank, biofilter, plant unit or pump becomes the first constraint.

Keep time windows and downtime boundaries

Daily averages can hide post-feeding peaks, night-time oxygen decline, pump stoppage and filter bypass during cleaning. Record feeding time, sampling time, flow, DO, ammonia, nitrite, nitrate and solids status. During downtime, do not assume plant area makes the system safe; keep fish tank, biofilter and plant recovery steps separate.

Scope

This guide covers variables, time windows and headroom for connecting load to capacity. Species thresholds, hardware filter design, feed composition, fluid calculations and food-release decisions remain outside scope. Next comes operating updates to the design table from fish, microbe and plant observations.

Update load and capacity tables from observations

Do not collapse observations into one health score

The previous guide separated feed, biomass, solids, biofiltration, plant area and flow into capacity tables. This guide updates those tables from fish, microbe and plant observations. Oklahoma State University describes monitoring ammonia, nitrite, nitrate, pH, temperature and dissolved oxygen, while checking fish, bacteria and plants separately. Nitrification and Maintenance

A timestamped snapshot can group measurements, but it should not merge their meanings. Low fish-tank DO, rising biofilter nitrite and reduced plant uptake have different boundaries and responses.

Keep five boundaries in each snapshot

Boundary Representative observations Table fields updated
Fish tank Biomass, feed, DO, temperature, behavior Input load and fish headroom
Solids Captured mass, water content, cleaning time, destination Solids path and filter headroom
Biofilter Ammonia, nitrite, nitrate, flow Conversion load and filter headroom
Plants Area, crop stage, harvest, leaf condition Uptake target and plant headroom
Hydraulic/sanitation Recirculation, downtime, zone, lot Recovery and isolation state

Attach observed_at, sampling location, unit, method and missing-data reason to every row. Missing data should become a review state, not a new measurement copied from the previous row.

Calculate a headroom change with synthetic data

Place morning and evening observations against the previous capacity table. Here we calculate feed, biofilter nitrogen and plant uptake headroom.

capacity = {"feed_g": 120.0, "biofilter_N_g": 3.5, "plant_N_g": 5.0}
morning = {"feed_g": 100.0, "biofilter_N_g": 3.0, "plant_N_g": 4.0}
evening = {"feed_g": 108.0, "biofilter_N_g": 3.2, "plant_N_g": 4.4}
headroom = {
    slot: {k: capacity[k] - obs[k] for k in capacity}
    for slot, obs in [("morning", morning), ("evening", evening)]
}
delta = {k: headroom["evening"][k] - headroom["morning"][k] for k in capacity}
print(headroom)
print(delta)

The morning headroom is {'feed_g': 20.0, 'biofilter_N_g': 0.5, 'plant_N_g': 1.0}; evening is {'feed_g': 12.0, 'biofilter_N_g': 0.3, 'plant_N_g': 0.6}; the change is {'feed_g': -8.0, 'biofilter_N_g': -0.2, 'plant_N_g': -0.4}. A negative change means less remaining headroom. It is not an instruction to change feed or flow automatically.

Separate updates from stop states

Define states such as normal, watch, hold and isolate. watch asks for repeat sampling or sensor review. hold pauses new feeding, transfer or reintroduction. isolate separates a lot or zone. Record who can release the state and which observation is required.

Sensor missingness, calibration age and a changed sampling location are quality flags separate from the water-quality value. Do not hide an abnormal value with an average or substitute a value from another zone.

Scope

This guide covers observation snapshots, headroom updates and state-transition records. Species thresholds, sensor calibration, pathogen decisions, food release and hardware automation remain outside scope. Next comes zone- and lot-level isolation and recovery records from observation history.

Zone isolation and staged recovery records

A restarted zone can still contain held lots

Following the observation update guide, connect an incident to its isolation and recovery records. A zone identifies equipment and water connections; a lot identifies a fish cohort, plant production or harvest batch, or collected water. Restoring zone flow does not release every associated lot.

Oklahoma State University describes monitoring ammonia, nitrite, nitrate, pH, temperature and dissolved oxygen for fish, bacteria and plants. See Nitrification and Maintenance. The record design below is an original example informed by these monitoring needs, not a recovery procedure prescribed by that university.

Reconstruct connections before detection

Record the detection time separately from the period under investigation. Review water through shared tanks, fish transfers and plant irrigation since the previous valid observation. Mark missing periods as unresolved rather than recording that no contact occurred.

Record Required information Synthetic example
Incident ID, detection time, observation ID, location INC-01, 09:00, OBS-17, fish tank A
Investigation interval Basis for start, end, unknown periods Valid observation at 08:00 through verified separation at 09:10
Connections Supply, return, bypass and change times Water W-01 transferred to shared tank at 08:40
Lots Fish, plants, water and parent relationships F-A, P-A, W-01 and mixed child W-02
Isolation verification Requested action, observed result, operator, evidence Closure requested 09:05; flow path checked 09:10

Lot ancestry helps investigate origins. To investigate destinations from suspect W-01, follow its children and descendants forward, then their subsequent contacts. The current plumbing diagram cannot reconstruct transfers made before a valve closed.

Preserve life support during isolation

Disconnecting a shared loop changes water and oxygen conditions at fish tanks and biofilters. Link each zone path to site procedures for maintained aeration and circulation, alternative routes and power loss. Record irrigation and drainage destinations for disconnected plant zones too.

Keep isolation_requested separate from isolation_verified. A valve closure command does not prove physical separation, including bypasses and backflow. Reassess the capacity table after removing any biofilter capacity or plant area that isolation makes unavailable.

Recovery needs observations at a stated load

Link the recovery review to corrective work, verified equipment paths, observation quality, response under the proposed load and the responsible reviewer's decision. Define observation periods and acceptable ranges separately for the species, equipment and operating conditions. Improved water quality under no load does not demonstrate capacity for the former feeding load.

Zone record state Evidence to retain Separate decision
isolated Verified separation, support paths, affected lots Confirming the cause
recovery_review Corrective work, calibration and sampling checks, observations with load conditions Reconnection approval
limited_restart Approval ID, limited load, monitoring frequency, stop criteria Return to normal load
normal Post-restart observations, capacity table, reviewer decision Individual lot holds and product release

For example, zone A may receive limited restart approval at 10:00 while W-01, transferred at 08:40, and its mixed child W-02 remain on hold. If the abnormality returns at 11:00, append a record under the same incident ID, revoke the limited restart and investigate lots contacted during reconnection. Preserve earlier normal observations and hold history.

Build one recovery record

For synthetic incident INC-01, create separate rows for zone A's limited restart and W-02's continuing hold. Include event_id, object_type, object_id, previous_state, new_state, effective_at, recorded_at, evidence_ids, reviewer and next_review_at. Use timezone-aware times so late entries can be reconstructed in occurrence order.

Check three things: can W-02 be traced back to W-01; is zone restart approval kept separate from water-lot release; and can contacts after 10:00 be added when the incident recurs? Missing evidence and unresolved investigations must remain visibly incomplete.

Scope and next step

This guide designs records linking incidents, connections, lots and recovery decisions. It does not validate equipment isolation, species limits, pathogen assays, treatment conditions or food release. The introductory aquaponics sequence now leads to fungal biology, substrates and growth phases in controlled mushroom cultivation, whose assumptions must be developed separately from photosynthetic plant models.

What to read next

Review the three water-quality boundaries.CEA aquaponics — water-quality boundaries for fish, microbes and plantsReview zone-specific drainage and treatment.CEA lot and zone traceability and isolation operationsContinue the seriesCEA mushroom cultivation — fungi, substrates, environment and contamination boundaries