02 - Component Metadata Mapping
How CAD components map to ML model input parameters
Overview
Each component in the Water Treatment Plant 3D model contains metadata representing water quality parameters at that specific stage. When a user selects a component and clicks "Fetch", this metadata populates the input form.
Metadata Structure
interface ComponentMetadata {
// Component identification
id: string;
tagId: string; // P&ID tag (e.g., "AER-01", "CL-01")
name: string;
type: WTPComponentType;
// Position in 3D space
position: [number, number, number];
rotation: [number, number, number];
scale: [number, number, number];
// Visual properties
color: string;
highlightColor: string;
// Description
description: string;
processDescription: string;
// Associated instruments (from P&ID)
instruments: InstrumentTag[];
// Inlet/Outlet stream IDs
inletStream?: string; // e.g., "S-103"
outletStream?: string; // e.g., "S-104"
// Water quality parameters at this stage
waterQuality: WaterQualityMetadata;
// Operational parameters
operational: OperationalMetadata;
}
interface InstrumentTag {
tagId: string; // e.g., "FIT-101", "AIT-PH-101"
parameter: string; // e.g., "flow_rate", "pH"
description: string; // e.g., "Influent Flow Transmitter"
value?: number; // Current/default value
unit: string; // e.g., "m³/hr", "pH", "mg/L"
}
interface WaterQualityMetadata {
// Common parameters (maps to TreatmentInput)
pH: number;
TSS: number; // mg/L
Turbidity: number; // NTU
BOD: number; // mg/L
COD: number; // mg/L
NH4_N: number; // mg/L
Total_Nitrogen: number; // mg/L
Phosphate: number; // mg/L
Fecal_Coliform: number; // count
Oil_Grease: number; // mg/L
TDS: number; // mg/L
Heavy_Metals: number; // concentration
}
interface OperationalMetadata {
// Maps to WastewaterInput
flow_rate: number; // m³/day
aeration_rate?: number; // kg O₂/hr
chemical_dose?: number; // mg/L
sludge_recycle_rate?: number; // %
retention_time?: number; // hours
temperature?: number; // °C
}
Component-Specific Metadata
1. Inlet / Raw Water Intake (S-101)
const inletMetadata: ComponentMetadata = {
id: "inlet",
tagId: "S-101", // Stream tag
name: "Raw Water Inlet",
type: "inlet",
position: [-10, 0, 0],
rotation: [0, 0, 0],
scale: [1, 1, 1],
color: "#8B4513",
highlightColor: "#D2691E",
description: "Raw wastewater entry point",
processDescription: "Untreated wastewater enters the treatment plant here",
// Associated P&ID instruments
instruments: [{ tagId: "FIT-101", parameter: "flow_rate", description: "Influent Flow", value: 1000, unit: "m³/hr" }],
outletStream: "S-101",
waterQuality: {
// Typical raw wastewater values
pH: 6.8,
TSS: 250,
Turbidity: 150,
BOD: 300,
COD: 600,
NH4_N: 35,
Total_Nitrogen: 50,
Phosphate: 12,
Fecal_Coliform: 100000,
Oil_Grease: 50,
TDS: 800,
Heavy_Metals: 1.5,
},
operational: {
flow_rate: 1000,
temperature: 25,
},
};
2. Screening Unit
const screeningMetadata: ComponentMetadata = {
id: "screening",
name: "Screening Unit",
type: "screening",
position: [-7, 0, 0],
rotation: [0, 0, 0],
scale: [1, 1, 1],
color: "#696969",
highlightColor: "#A9A9A9",
description: "Coarse solids removal",
processDescription: "Removes large debris, rags, and floating materials",
waterQuality: {
// Slightly improved after screening
pH: 6.8,
TSS: 230,
Turbidity: 140,
BOD: 290,
COD: 580,
NH4_N: 35,
Total_Nitrogen: 50,
Phosphate: 12,
Fecal_Coliform: 95000,
Oil_Grease: 45,
TDS: 790,
Heavy_Metals: 1.4,
},
operational: {
flow_rate: 1000,
temperature: 25,
},
};
3. Grit Chamber
const gritChamberMetadata: ComponentMetadata = {
id: "grit_chamber",
name: "Grit Chamber",
type: "grit_chamber",
position: [-4, 0, 0],
rotation: [0, 0, 0],
scale: [1.5, 1, 1],
color: "#808080",
highlightColor: "#C0C0C0",
description: "Sand and grit removal",
processDescription: "Removes sand, gravel, and heavy inorganic particles",
waterQuality: {
pH: 6.9,
TSS: 200,
Turbidity: 120,
BOD: 280,
COD: 560,
NH4_N: 34,
Total_Nitrogen: 48,
Phosphate: 11,
Fecal_Coliform: 90000,
Oil_Grease: 40,
TDS: 780,
Heavy_Metals: 1.2,
},
operational: {
flow_rate: 1000,
retention_time: 0.5,
temperature: 25,
},
};
4. Primary Clarifier
const primaryClarifierMetadata: ComponentMetadata = {
id: "primary_clarifier",
name: "Primary Clarifier",
type: "primary_clarifier",
position: [0, 0, 0],
rotation: [0, 0, 0],
scale: [2, 1.5, 2],
color: "#4682B4",
highlightColor: "#87CEEB",
description: "Primary sedimentation tank",
processDescription: "Settles suspended solids through gravity separation",
waterQuality: {
// Significant TSS reduction
pH: 7.0,
TSS: 120,
Turbidity: 80,
BOD: 200,
COD: 400,
NH4_N: 32,
Total_Nitrogen: 45,
Phosphate: 10,
Fecal_Coliform: 70000,
Oil_Grease: 25,
TDS: 750,
Heavy_Metals: 1.0,
},
operational: {
flow_rate: 1000,
retention_time: 2,
sludge_recycle_rate: 0,
temperature: 24,
},
};
5. Aeration Tank
const aerationTankMetadata: ComponentMetadata = {
id: "aeration_tank",
name: "Aeration Tank",
type: "aeration_tank",
position: [5, 0, 0],
rotation: [0, 0, 0],
scale: [3, 1.5, 2],
color: "#20B2AA",
highlightColor: "#48D1CC",
description: "Biological treatment zone",
processDescription: "Aerobic bacteria break down organic matter",
waterQuality: {
// Major BOD/COD reduction
pH: 7.2,
TSS: 150, // Increases due to biomass
Turbidity: 60,
BOD: 80,
COD: 180,
NH4_N: 15,
Total_Nitrogen: 30,
Phosphate: 6,
Fecal_Coliform: 40000,
Oil_Grease: 10,
TDS: 700,
Heavy_Metals: 0.8,
},
operational: {
flow_rate: 1000,
aeration_rate: 50,
retention_time: 6,
sludge_recycle_rate: 25,
temperature: 22,
},
};
6. Secondary Clarifier
const secondaryClarifierMetadata: ComponentMetadata = {
id: "secondary_clarifier",
name: "Secondary Clarifier",
type: "secondary_clarifier",
position: [10, 0, 0],
rotation: [0, 0, 0],
scale: [2, 1.5, 2],
color: "#5F9EA0",
highlightColor: "#7FFFD4",
description: "Secondary sedimentation",
processDescription: "Settles biological floc from aeration tank",
waterQuality: {
pH: 7.3,
TSS: 40,
Turbidity: 25,
BOD: 30,
COD: 80,
NH4_N: 10,
Total_Nitrogen: 20,
Phosphate: 4,
Fecal_Coliform: 20000,
Oil_Grease: 5,
TDS: 650,
Heavy_Metals: 0.5,
},
operational: {
flow_rate: 1000,
retention_time: 3,
sludge_recycle_rate: 30,
temperature: 22,
},
};
7. Filtration Unit
const filtrationMetadata: ComponentMetadata = {
id: "filtration",
name: "Filtration Unit",
type: "filtration",
position: [14, 0, 0],
rotation: [0, 0, 0],
scale: [1.5, 1, 1.5],
color: "#DEB887",
highlightColor: "#F5DEB3",
description: "Tertiary filtration",
processDescription: "Sand/media filtration removes remaining particles",
waterQuality: {
pH: 7.4,
TSS: 10,
Turbidity: 5,
BOD: 15,
COD: 40,
NH4_N: 5,
Total_Nitrogen: 12,
Phosphate: 2,
Fecal_Coliform: 5000,
Oil_Grease: 2,
TDS: 600,
Heavy_Metals: 0.3,
},
operational: {
flow_rate: 1000,
retention_time: 0.5,
temperature: 21,
},
};
8. Disinfection Unit
const disinfectionMetadata: ComponentMetadata = {
id: "disinfection",
name: "Disinfection Unit",
type: "disinfection",
position: [17, 0, 0],
rotation: [0, 0, 0],
scale: [1, 1, 1],
color: "#FFD700",
highlightColor: "#FFFF00",
description: "Chlorination/UV treatment",
processDescription: "Kills pathogens using chlorine or UV light",
waterQuality: {
pH: 7.5,
TSS: 8,
Turbidity: 3,
BOD: 10,
COD: 30,
NH4_N: 3,
Total_Nitrogen: 10,
Phosphate: 1.5,
Fecal_Coliform: 100,
Oil_Grease: 1,
TDS: 580,
Heavy_Metals: 0.2,
},
operational: {
flow_rate: 1000,
chemical_dose: 5, // Chlorine dose mg/L
retention_time: 0.5,
temperature: 21,
},
};
9. Outlet / Treated Water
const outletMetadata: ComponentMetadata = {
id: "outlet",
name: "Treated Water Outlet",
type: "outlet",
position: [20, 0, 0],
rotation: [0, 0, 0],
scale: [1, 1, 1],
color: "#00CED1",
highlightColor: "#00FFFF",
description: "Final effluent discharge",
processDescription: "Treated water ready for discharge or reuse",
waterQuality: {
// Final treated water quality
pH: 7.5,
TSS: 5,
Turbidity: 2,
BOD: 8,
COD: 25,
NH4_N: 2,
Total_Nitrogen: 8,
Phosphate: 1,
Fecal_Coliform: 50,
Oil_Grease: 0.5,
TDS: 550,
Heavy_Metals: 0.1,
},
operational: {
flow_rate: 950, // Slightly less due to sludge removal
temperature: 20,
},
};
Metadata to Input Mapping
Map to TreatmentInput
function mapToTreatmentInput(metadata: ComponentMetadata): TreatmentInput {
const { waterQuality, operational } = metadata;
return {
pH: waterQuality.pH,
TSS: waterQuality.TSS,
Turbidity: waterQuality.Turbidity,
BOD: waterQuality.BOD,
COD: waterQuality.COD,
NH4_N: waterQuality.NH4_N,
Total_Nitrogen: waterQuality.Total_Nitrogen,
Phosphate: waterQuality.Phosphate,
Fecal_Coliform: waterQuality.Fecal_Coliform,
Oil_Grease: waterQuality.Oil_Grease,
TDS: waterQuality.TDS,
Heavy_Metals: waterQuality.Heavy_Metals,
flow_rate: operational.flow_rate,
};
}
Map to WastewaterInput
function mapToWastewaterInput(metadata: ComponentMetadata): WastewaterInput {
const { waterQuality, operational } = metadata;
return {
flow_rate: operational.flow_rate,
influent_BOD: waterQuality.BOD,
influent_COD: waterQuality.COD,
influent_TSS: waterQuality.TSS,
influent_pH: waterQuality.pH,
influent_TDS: waterQuality.TDS,
aeration_rate: operational.aeration_rate,
chemical_dose: operational.chemical_dose,
sludge_recycle_rate: operational.sludge_recycle_rate,
retention_time: operational.retention_time,
temperature: operational.temperature,
};
}
Parameter Ranges by Stage
| Stage | BOD (mg/L) | COD (mg/L) | TSS (mg/L) | pH | Fecal Coliform |
|---|---|---|---|---|---|
| Raw Inlet | 250-400 | 500-800 | 200-350 | 6.5-7 | 80,000-150,000 |
| After Screening | 240-380 | 480-760 | 180-320 | 6.5-7 | 75,000-140,000 |
| After Grit Chamber | 230-360 | 460-720 | 160-280 | 6.8-7 | 70,000-130,000 |
| After Primary | 150-250 | 300-500 | 80-150 | 7-7.2 | 50,000-100,000 |
| After Aeration | 50-100 | 120-220 | 100-180 | 7-7.5 | 30,000-60,000 |
| After Secondary | 20-50 | 60-120 | 20-60 | 7-7.5 | 10,000-30,000 |
| After Filtration | 10-25 | 30-60 | 5-20 | 7-7.5 | 2,000-10,000 |
| After Disinfection | 5-15 | 20-50 | 3-15 | 7-7.5 | 50-500 |
| Final Outlet | 5-10 | 15-40 | 2-10 | 7-7.5 | less than 100 |
Dynamic Metadata (Future Enhancement)
In future versions, metadata could be:
- Fetched from IoT sensors in real-time
- Simulated based on time of day/season
- User-editable for scenario testing
- Historical from database records
interface DynamicMetadataSource {
type: "static" | "iot" | "simulated" | "historical";
updateInterval?: number; // ms for real-time updates
dataSource?: string; // API endpoint or sensor ID
}
Next: 03-WTP-MODEL.md
Learn about the 3D Water Treatment Plant model structure →