{"$defs":{"ControlLoopDefinition":{"description":"Structured control loop with tuning and setpoint metadata.","properties":{"loop_id":{"pattern":"^[0-9]{3}-[A-Z]-[0-9]{2,4}$","title":"Loop Id","type":"string"},"segment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Segment Id"},"equipment_uid":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}],"default":null,"title":"Equipment Uid"},"process_variable_tag":{"title":"Process Variable Tag","type":"string"},"manipulated_variable_tag":{"title":"Manipulated Variable Tag","type":"string"},"measured_variable":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Measured Variable"},"manipulated_variable":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Manipulated Variable"},"loop_type":{"enum":["PID","CASCADE","RATIO","FEEDFORWARD","OVERRIDE","SPLIT_RANGE","ONOFF"],"title":"Loop Type","type":"string"},"setpoint_source":{"anyOf":[{"enum":["LOCAL","REMOTE","CASCADE"],"type":"string"},{"type":"null"}],"default":null,"title":"Setpoint Source"},"controller_algorithm":{"anyOf":[{"enum":["PID","PI","PD","ONOFF","LOGIC"],"type":"string"},{"type":"null"}],"default":null,"title":"Controller Algorithm"},"controller_action":{"anyOf":[{"enum":["DIRECT","REVERSE"],"type":"string"},{"type":"null"}],"default":null,"title":"Controller Action"},"units":{"anyOf":[{"$ref":"#/$defs/EngineeringUnit"},{"type":"null"}],"default":null},"range_low":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Range Low"},"range_high":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Range High"},"output_low_pct":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Output Low Pct"},"output_high_pct":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Output High Pct"},"kp":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Kp"},"ti_s":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Ti S"},"td_s":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Td S"},"deadband":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Deadband"},"default_mode":{"anyOf":[{"enum":["AUTO","MANUAL","CASCADE"],"type":"string"},{"type":"null"}],"default":null,"title":"Default Mode"},"alarm_limits":{"additionalProperties":{"type":"number"},"title":"Alarm Limits","type":"object"},"source_document_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Source Document Ref"}},"required":["loop_id","process_variable_tag","manipulated_variable_tag","loop_type"],"title":"ControlLoopDefinition","type":"object"},"ControlSequenceDefinition":{"description":"Control sequence for startup, shutdown, batch, or emergency logic.","properties":{"sequence_id":{"title":"Sequence Id","type":"string"},"sequence_type":{"enum":["STARTUP","SHUTDOWN","BATCH","CLEANING","TRANSFER","CHANGEOVER","EMERGENCY_STOP","MAINTENANCE"],"title":"Sequence Type","type":"string"},"segment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Segment Id"},"equipment_uid":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}],"default":null,"title":"Equipment Uid"},"trigger_source":{"anyOf":[{"enum":["OPERATOR","TIMER","CONDITION","EXTERNAL"],"type":"string"},{"type":"null"}],"default":null,"title":"Trigger Source"},"trigger_condition":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Trigger Condition"},"hold_allowed":{"default":true,"title":"Hold Allowed","type":"boolean"},"min_cycle_time_s":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Min Cycle Time S"},"max_cycle_time_s":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Max Cycle Time S"},"timeout_alarm":{"default":true,"title":"Timeout Alarm","type":"boolean"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Description"},"source_document_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Source Document Ref"},"steps":{"items":{"$ref":"#/$defs/ControlSequenceStep"},"title":"Steps","type":"array"}},"required":["sequence_id","sequence_type"],"title":"ControlSequenceDefinition","type":"object"},"ControlSequenceStep":{"description":"ISA-88-inspired procedural step.","properties":{"step_number":{"minimum":1,"title":"Step Number","type":"integer"},"step_role":{"default":"NORMAL","enum":["NORMAL","ABORT"],"title":"Step Role","type":"string"},"step_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Step Name"},"target_tag":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Target Tag"},"action_text":{"title":"Action Text","type":"string"},"command":{"anyOf":[{"enum":["START","STOP","OPEN","CLOSE","SET","WAIT","RAMP"],"type":"string"},{"type":"null"}],"default":null,"title":"Command"},"setpoint":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Setpoint"},"units":{"anyOf":[{"$ref":"#/$defs/EngineeringUnit"},{"type":"null"}],"default":null},"duration_s":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Duration S"},"transition_condition":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Transition Condition"},"timeout_s":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Timeout S"},"on_timeout":{"anyOf":[{"enum":["ABORT","RETRY","SKIP","ALARM"],"type":"string"},{"type":"null"}],"default":null,"title":"On Timeout"}},"required":["step_number","action_text"],"title":"ControlSequenceStep","type":"object"},"EngineeringUnit":{"description":"Constrained engineering units for water/wastewater treatment.\n\nCodes follow QUDT / UN/CEFACT Rec 20 conventions with Python-safe\nidentifiers (underscores for slashes).  JSON values match the Python\nname except where noted (e.g. ``min_`` → ``\"min\"``).","enum":["m3_per_d","m3_per_h","L_per_s","L_per_min","MGD","gpm","mg_per_L","g_per_m3","ug_per_L","percent","mg_per_kg","kg_per_d","kg_per_h","t_per_d","degC","K","kPa","bar","psi","mH2O","kW","W","hp","kWh","MJ","m","mm","cm","m2","m3","L","kg","g","mg","s","min","h","d","m_per_s","m_per_min","kg_per_m3_per_d","kg_per_m2_per_d","PH","NTU","SVI_mL_per_g","V","A","ohm","Hz","mS_per_cm","uS_per_cm","meq_per_L","CFU_per_100mL","MPN_per_100mL","SU","L_per_m2_per_h","gpd_per_ft2","ppmv","BTU_per_scf","MJ_per_Nm3","mg_per_Nm3","percent_vol","mg_per_kg_dry","CFU_per_g","MPN_per_g","ug_per_m3","kg_per_yr","percent_VS_reduction","MPN_per_4g","Pt_Co"],"title":"EngineeringUnit","type":"string"},"InterlockAction":{"description":"Action executed when an interlock is active.","properties":{"action_order":{"minimum":1,"title":"Action Order","type":"integer"},"target_tag":{"title":"Target Tag","type":"string"},"command":{"enum":["STOP","START","CLOSE","OPEN","TRIP","DISABLE","ENABLE","SET"],"title":"Command","type":"string"},"setpoint":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Setpoint"},"units":{"anyOf":[{"$ref":"#/$defs/EngineeringUnit"},{"type":"null"}],"default":null},"delay_s":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Delay S"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Description"}},"required":["action_order","target_tag","command"],"title":"InterlockAction","type":"object"},"InterlockCondition":{"description":"Condition that participates in an interlock trigger.","properties":{"condition_order":{"minimum":1,"title":"Condition Order","type":"integer"},"instrument_tag":{"title":"Instrument Tag","type":"string"},"condition_type":{"enum":["HIGH","LOW","HIGH_HIGH","LOW_LOW","FAULT","TRIP","ON","OFF"],"title":"Condition Type","type":"string"},"setpoint":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Setpoint"},"units":{"anyOf":[{"$ref":"#/$defs/EngineeringUnit"},{"type":"null"}],"default":null},"logic_operator":{"anyOf":[{"enum":["AND","OR","NOT","XOR"],"type":"string"},{"type":"null"}],"default":null,"title":"Logic Operator"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Description"}},"required":["condition_order","instrument_tag","condition_type"],"title":"InterlockCondition","type":"object"},"InterlockDefinition":{"description":"Structured process or safety interlock.","properties":{"interlock_id":{"title":"Interlock Id","type":"string"},"segment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Segment Id"},"interlock_type":{"enum":["SAFETY","PROCESS","PERMISSIVE","TRIP","CROSS_AREA"],"title":"Interlock Type","type":"string"},"sil_level":{"anyOf":[{"enum":[1,2,3,4],"type":"integer"},{"type":"null"}],"default":null,"title":"Sil Level"},"reset_mode":{"anyOf":[{"enum":["AUTO","MANUAL","LATCH"],"type":"string"},{"type":"null"}],"default":null,"title":"Reset Mode"},"bypass_allowed":{"default":false,"title":"Bypass Allowed","type":"boolean"},"max_bypass_duration_h":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Max Bypass Duration H"},"trigger_area_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Trigger Area Code"},"action_area_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Action Area Code"},"cause_effect_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Cause Effect Reference"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Description"},"source_document_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Source Document Ref"},"conditions":{"items":{"$ref":"#/$defs/InterlockCondition"},"title":"Conditions","type":"array"},"actions":{"items":{"$ref":"#/$defs/InterlockAction"},"title":"Actions","type":"array"}},"required":["interlock_id","interlock_type"],"title":"InterlockDefinition","type":"object"},"PlcProgramUnit":{"description":"IEC 61131-3 program organization unit.","properties":{"pou_name":{"pattern":"^[A-Za-z][A-Za-z0-9_]*$","title":"Pou Name","type":"string"},"pou_type":{"enum":["FUNCTION","FUNCTION_BLOCK","PROGRAM"],"title":"Pou Type","type":"string"},"iec_language":{"enum":["ST","LD","FBD","IL","SFC"],"title":"Iec Language","type":"string"},"segment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Segment Id"},"equipment_uid":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}],"default":null,"title":"Equipment Uid"},"resource_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Resource Name"},"configuration_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Configuration Name"},"source_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Source Path"},"source_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Source Hash"},"compiled_artifact_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Compiled Artifact Ref"},"program_summary":{"additionalProperties":true,"title":"Program Summary","type":"object"},"version":{"default":"1","title":"Version","type":"string"}},"required":["pou_name","pou_type","iec_language"],"title":"PlcProgramUnit","type":"object"},"PlcTaskBinding":{"description":"IEC 61131-3 task to POU binding.","properties":{"task_name":{"title":"Task Name","type":"string"},"pou_name":{"title":"Pou Name","type":"string"},"task_priority":{"minimum":1,"title":"Task Priority","type":"integer"},"task_interval_ms":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Task Interval Ms"},"single_trigger_tag":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Single Trigger Tag"},"resource_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Resource Name"},"configuration_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Configuration Name"}},"required":["task_name","pou_name","task_priority"],"title":"PlcTaskBinding","type":"object"},"ProcessSegmentDefinition":{"description":"ISA-88 / ISA-95 process segment or procedure element.","properties":{"segment_id":{"description":"Segment identifier from ISA-95 / ISA-88","title":"Segment Id","type":"string"},"segment_name":{"title":"Segment Name","type":"string"},"segment_type":{"enum":["Process","Process Stage","Process Operation","Process Action","Other"],"title":"Segment Type","type":"string"},"operations_type":{"anyOf":[{"enum":["Production","Maintenance","Quality","Inventory","Mixed","Other"],"type":"string"},{"type":"null"}],"default":null,"title":"Operations Type"},"equipment_uid":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}],"default":null,"title":"Equipment Uid"},"operations_definition_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Operations Definition Id"},"operations_segment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Operations Segment Id"},"dependent_segment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Dependent Segment Id"},"dependency_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Dependency Type"},"work_master_source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Work Master Source Id"},"hierarchy_scope":{"additionalProperties":{"type":"string"},"title":"Hierarchy Scope","type":"object"},"parameters":{"items":{"additionalProperties":true,"type":"object"},"title":"Parameters","type":"array"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Description"},"version":{"default":"1","title":"Version","type":"string"},"source_document_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Source Document Ref"}},"required":["segment_id","segment_name","segment_type"],"title":"ProcessSegmentDefinition","type":"object"}},"description":"Project-level control execution package.","properties":{"package_id":{"title":"Package Id","type":"string"},"project_ref":{"title":"Project Ref","type":"string"},"segments":{"items":{"$ref":"#/$defs/ProcessSegmentDefinition"},"title":"Segments","type":"array"},"control_loops":{"items":{"$ref":"#/$defs/ControlLoopDefinition"},"title":"Control Loops","type":"array"},"interlocks":{"items":{"$ref":"#/$defs/InterlockDefinition"},"title":"Interlocks","type":"array"},"sequences":{"items":{"$ref":"#/$defs/ControlSequenceDefinition"},"title":"Sequences","type":"array"},"plc_programs":{"items":{"$ref":"#/$defs/PlcProgramUnit"},"title":"Plc Programs","type":"array"},"plc_task_bindings":{"items":{"$ref":"#/$defs/PlcTaskBinding"},"title":"Plc Task Bindings","type":"array"},"version":{"default":"1","title":"Version","type":"string"},"published_at":{"format":"date-time","title":"Published At","type":"string"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Created By"}},"required":["project_ref"],"title":"ControlExecutionPackage","type":"object","$id":"https://puranwater.com/schemas/control-execution-package.schema.json"}