Water Intelligence Engine
Adults Total = {{ adultsTotal }} (auto-sum)
| User Type | Count | Shower Mult | Sink Mult | Toilet Mult |
|---|---|---|---|---|
| {{ b.user_type }} | {{ userCount(b.user_type) }} | {{ behaviorErrors[behaviorFieldKey(b.user_type, 'shower_mult')] }} | {{ behaviorErrors[behaviorFieldKey(b.user_type, 'sink_mult')] }} | {{ behaviorErrors[behaviorFieldKey(b.user_type, 'toilet_mult')] }} |
| Activity | Flow (gal/min) | Duration (min) | Events/Day | Gal/Unit | Grey | Black |
|---|---|---|---|---|---|---|
| {{ a.name }} | {{ activityErrors[activityFieldKey(a.id, 'flow_gal_per_min')] }} | {{ activityErrors[activityFieldKey(a.id, 'duration_min')] }} | {{ activityErrors[activityFieldKey(a.id, 'events_per_day_per_person')] }} | {{ activityErrors[activityFieldKey(a.id, 'gal_per_unit')] }} |
| Tank | Capacity | Current | Daily Δ | Runway (days) | Note |
|---|---|---|---|---|---|
| {{ t.tank }} | {{ t.capacity_gal?.toFixed(1) }} | {{ t.current_gal?.toFixed(1) }} | {{ t.daily_delta_gal > 0 ? '+' : '' }}{{ t.daily_delta_gal?.toFixed(2) }} | {{ t.days_remaining >= 9999 ? '∞' : t.days_remaining?.toFixed(2) }} | {{ t.status }} |
| Activity | Fresh/day | Grey/day | Black/day | Attrib % |
|---|---|---|---|---|
| {{ r.activity_name }} | {{ r.daily_fresh_gal?.toFixed(2) }} | {{ r.grey_added_gal?.toFixed(2) }} | {{ r.black_added_gal?.toFixed(2) }} | {{ r.fresh_attrib_pct?.toFixed(1) }}% |
| TOTAL | {{ totalFresh?.toFixed(2) }} | {{ totalGrey?.toFixed(2) }} | {{ totalBlack?.toFixed(2) }} | 100% |
| Activity | Day {{ d }} |
|---|---|
| {{ group.icon }} {{ group.name }} | |
| {{ row.activity }} |
{{ cellVal(row, d) }}
×{{ row[`factor_${d}`]?.toFixed(2) }}
|
| Activity | {{ col.label }} |
|---|---|
| {{ group.icon }} {{ group.name }} | |
| {{ row.activity }} |
{{ realtimeCellVal(row, col.streamKey) }}
×{{ row['factor_'+realtimeDay]?.toFixed(2) }}
|