mirror of
https://github.com/andre482/O-tie.git
synced 2026-07-22 07:44:11 +00:00
- Single-finger touch panning now works even when starting on a node; a tap still selects. - Add keyboard node selection (Tab/Enter/Space/Escape) and validated settings input. - Guard against overwriting malformed .bowtie files; show a notice and keep original data. - Add Vitest tests (model/layout/panZoom) and a GitHub Actions CI workflow. - Split bowtieView into history/panZoom/stackRows/externalSync modules; refresh README, examples, and contributor docs. Co-authored-by: Cursor <cursoragent@cursor.com>
550 lines
16 KiB
Text
550 lines
16 KiB
Text
{
|
|
"id": "bowtie-0",
|
|
"name": "Cold storage ammonia refrigeration",
|
|
"events": [
|
|
{
|
|
"id": "event-1",
|
|
"label": "Loss of primary containment from ammonia refrigeration circuit",
|
|
"hazard": "Pressurised anhydrous ammonia (NH3) refrigeration inventory",
|
|
"transitionBarriers": []
|
|
}
|
|
],
|
|
"threats": [
|
|
{
|
|
"id": "threat-2",
|
|
"label": "Corrosion or fatigue of piping, vessels, or evaporator coils",
|
|
"preventionBarriers": [
|
|
{
|
|
"id": "barrier-3",
|
|
"label": "Mechanical integrity inspection program",
|
|
"degradationChains": [
|
|
{
|
|
"id": "chain-10",
|
|
"safeguards": [
|
|
{
|
|
"id": "safeguard-11",
|
|
"label": "QA audit of mechanical integrity backlog"
|
|
}
|
|
],
|
|
"degradationFactor": {
|
|
"id": "degradation-12",
|
|
"label": "Deferred inspection due to production pressure"
|
|
}
|
|
}
|
|
],
|
|
"stack": [
|
|
{
|
|
"id": "stack-4",
|
|
"field": "type",
|
|
"label": "Active Hardware",
|
|
"color": "#48c9b0"
|
|
},
|
|
{
|
|
"id": "stack-5",
|
|
"field": "effectiveness",
|
|
"label": "Good",
|
|
"color": "#27ae60"
|
|
},
|
|
{
|
|
"id": "stack-6",
|
|
"field": "criticality",
|
|
"label": "Very High",
|
|
"color": "#2c3e50"
|
|
},
|
|
{
|
|
"id": "stack-7",
|
|
"field": "responsible",
|
|
"label": "Tech Department",
|
|
"color": "#ffffff"
|
|
},
|
|
{
|
|
"id": "stack-8",
|
|
"field": "validation",
|
|
"label": "Inspection",
|
|
"color": "#ffffff"
|
|
},
|
|
{
|
|
"id": "stack-9",
|
|
"field": "status",
|
|
"label": "Available",
|
|
"color": "#1e8449"
|
|
}
|
|
],
|
|
"stackCollapsed": false,
|
|
"notes": "NDT, thickness monitoring, and replacement intervals per IIAR-6 / company standards."
|
|
},
|
|
{
|
|
"id": "barrier-13",
|
|
"label": "Materials of construction and corrosion allowance",
|
|
"degradationChains": [],
|
|
"stack": [
|
|
{
|
|
"id": "stack-14",
|
|
"field": "type",
|
|
"label": "Passive Hardware",
|
|
"color": "#7f8c8d"
|
|
},
|
|
{
|
|
"id": "stack-15",
|
|
"field": "effectiveness",
|
|
"label": "Good",
|
|
"color": "#27ae60"
|
|
},
|
|
{
|
|
"id": "stack-16",
|
|
"field": "criticality",
|
|
"label": "High",
|
|
"color": "#566573"
|
|
},
|
|
{
|
|
"id": "stack-17",
|
|
"field": "status",
|
|
"label": "Available",
|
|
"color": "#1e8449"
|
|
}
|
|
],
|
|
"stackCollapsed": true,
|
|
"notes": "Compatible metallurgy, coatings, and design margin for operating conditions."
|
|
}
|
|
],
|
|
"notes": "Credible in aged plant with cyclic thermal loading, condensate, or corrosion under insulation."
|
|
},
|
|
{
|
|
"id": "threat-18",
|
|
"label": "Forklift or vehicle impact on exposed ammonia piping",
|
|
"preventionBarriers": [
|
|
{
|
|
"id": "barrier-19",
|
|
"label": "Physical protection and traffic segregation",
|
|
"degradationChains": [
|
|
{
|
|
"id": "chain-24",
|
|
"safeguards": [
|
|
{
|
|
"id": "safeguard-25",
|
|
"label": "Supervisor housekeeping and barrier inspection rounds"
|
|
}
|
|
],
|
|
"degradationFactor": {
|
|
"id": "degradation-26",
|
|
"label": "Bollards removed or bypassed for convenience"
|
|
}
|
|
}
|
|
],
|
|
"stack": [
|
|
{
|
|
"id": "stack-20",
|
|
"field": "type",
|
|
"label": "Passive Hardware",
|
|
"color": "#7f8c8d"
|
|
},
|
|
{
|
|
"id": "stack-21",
|
|
"field": "effectiveness",
|
|
"label": "Good",
|
|
"color": "#27ae60"
|
|
},
|
|
{
|
|
"id": "stack-22",
|
|
"field": "criticality",
|
|
"label": "High",
|
|
"color": "#566573"
|
|
},
|
|
{
|
|
"id": "stack-23",
|
|
"field": "status",
|
|
"label": "Available",
|
|
"color": "#1e8449"
|
|
}
|
|
],
|
|
"stackCollapsed": true,
|
|
"notes": "Bollards, rack guards, marked routes, and restricted machine-room access."
|
|
}
|
|
],
|
|
"notes": "Common in warehouse aisles adjacent to machine rooms or overhead pipe runs."
|
|
},
|
|
{
|
|
"id": "threat-27",
|
|
"label": "Overpressure in low-side or high-side refrigeration circuit",
|
|
"preventionBarriers": [
|
|
{
|
|
"id": "barrier-28",
|
|
"label": "Pressure relief devices and high-pressure interlocks",
|
|
"degradationChains": [
|
|
{
|
|
"id": "chain-33",
|
|
"safeguards": [
|
|
{
|
|
"id": "safeguard-34",
|
|
"label": "PSV inspection and register management program"
|
|
}
|
|
],
|
|
"degradationFactor": {
|
|
"id": "degradation-35",
|
|
"label": "Relief device isolated, blocked, or inspection overdue"
|
|
}
|
|
}
|
|
],
|
|
"stack": [
|
|
{
|
|
"id": "stack-29",
|
|
"field": "type",
|
|
"label": "Active Hardware",
|
|
"color": "#48c9b0"
|
|
},
|
|
{
|
|
"id": "stack-30",
|
|
"field": "effectiveness",
|
|
"label": "Good",
|
|
"color": "#27ae60"
|
|
},
|
|
{
|
|
"id": "stack-31",
|
|
"field": "criticality",
|
|
"label": "Very High",
|
|
"color": "#2c3e50"
|
|
},
|
|
{
|
|
"id": "stack-32",
|
|
"field": "status",
|
|
"label": "Available",
|
|
"color": "#1e8449"
|
|
}
|
|
],
|
|
"stackCollapsed": true,
|
|
"notes": "PSVs discharge to a safe location; alarm and trip on abnormal pressure."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "threat-36",
|
|
"label": "Maintenance isolation or re-commissioning error",
|
|
"preventionBarriers": [
|
|
{
|
|
"id": "barrier-37",
|
|
"label": "Permit-to-work and LOTO procedures",
|
|
"degradationChains": [
|
|
{
|
|
"id": "chain-42",
|
|
"safeguards": [
|
|
{
|
|
"id": "safeguard-43",
|
|
"label": "Competency assessment and authorization records"
|
|
}
|
|
],
|
|
"degradationFactor": {
|
|
"id": "degradation-44",
|
|
"label": "Technician competency not verified for ammonia work"
|
|
}
|
|
}
|
|
],
|
|
"stack": [
|
|
{
|
|
"id": "stack-38",
|
|
"field": "type",
|
|
"label": "Active Human",
|
|
"color": "#5dade2"
|
|
},
|
|
{
|
|
"id": "stack-39",
|
|
"field": "effectiveness",
|
|
"label": "Good",
|
|
"color": "#27ae60"
|
|
},
|
|
{
|
|
"id": "stack-40",
|
|
"field": "criticality",
|
|
"label": "Very High",
|
|
"color": "#2c3e50"
|
|
},
|
|
{
|
|
"id": "stack-41",
|
|
"field": "status",
|
|
"label": "Available",
|
|
"color": "#1e8449"
|
|
}
|
|
],
|
|
"stackCollapsed": true,
|
|
"notes": "Verified isolation, zero-energy confirmation, and ammonia-specific competency."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "threat-45",
|
|
"label": "Operator error during startup, shutdown, or abnormal operation",
|
|
"preventionBarriers": [
|
|
{
|
|
"id": "barrier-46",
|
|
"label": "Operating procedures and abnormal situation guidance",
|
|
"degradationChains": [],
|
|
"stack": [
|
|
{
|
|
"id": "stack-47",
|
|
"field": "type",
|
|
"label": "Active Human",
|
|
"color": "#5dade2"
|
|
},
|
|
{
|
|
"id": "stack-48",
|
|
"field": "effectiveness",
|
|
"label": "Good",
|
|
"color": "#27ae60"
|
|
},
|
|
{
|
|
"id": "stack-49",
|
|
"field": "criticality",
|
|
"label": "High",
|
|
"color": "#566573"
|
|
},
|
|
{
|
|
"id": "stack-50",
|
|
"field": "status",
|
|
"label": "Available",
|
|
"color": "#1e8449"
|
|
}
|
|
],
|
|
"stackCollapsed": true,
|
|
"notes": "Written procedures for charge management, alarms, and emergency slowdown."
|
|
},
|
|
{
|
|
"id": "barrier-51",
|
|
"label": "Operator training and competency assurance",
|
|
"degradationChains": [],
|
|
"stack": [
|
|
{
|
|
"id": "stack-52",
|
|
"field": "type",
|
|
"label": "Active Human",
|
|
"color": "#5dade2"
|
|
},
|
|
{
|
|
"id": "stack-53",
|
|
"field": "effectiveness",
|
|
"label": "Fair",
|
|
"color": "#f1c40f"
|
|
},
|
|
{
|
|
"id": "stack-54",
|
|
"field": "criticality",
|
|
"label": "Medium",
|
|
"color": "#7f8c8d"
|
|
},
|
|
{
|
|
"id": "stack-55",
|
|
"field": "status",
|
|
"label": "Available",
|
|
"color": "#1e8449"
|
|
}
|
|
],
|
|
"stackCollapsed": true,
|
|
"notes": "Refresher training on ammonia properties, alarms, and first actions."
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"consequences": [
|
|
{
|
|
"id": "consequence-56",
|
|
"label": "Personnel harm due to toxic ammonia exposure",
|
|
"mitigationBarriers": [
|
|
{
|
|
"id": "barrier-57",
|
|
"label": "Fixed ammonia gas detection and alarm",
|
|
"degradationChains": [
|
|
{
|
|
"id": "chain-64",
|
|
"safeguards": [
|
|
{
|
|
"id": "safeguard-65",
|
|
"label": "Calibration management and functional test program"
|
|
}
|
|
],
|
|
"degradationFactor": {
|
|
"id": "degradation-66",
|
|
"label": "Sensor calibration overdue or drift"
|
|
}
|
|
}
|
|
],
|
|
"stack": [
|
|
{
|
|
"id": "stack-58",
|
|
"field": "type",
|
|
"label": "Active Hardware",
|
|
"color": "#48c9b0"
|
|
},
|
|
{
|
|
"id": "stack-59",
|
|
"field": "effectiveness",
|
|
"label": "Good",
|
|
"color": "#27ae60"
|
|
},
|
|
{
|
|
"id": "stack-60",
|
|
"field": "criticality",
|
|
"label": "Very High",
|
|
"color": "#2c3e50"
|
|
},
|
|
{
|
|
"id": "stack-61",
|
|
"field": "responsible",
|
|
"label": "HSE Department",
|
|
"color": "#ffffff"
|
|
},
|
|
{
|
|
"id": "stack-62",
|
|
"field": "validation",
|
|
"label": "Barrier Test",
|
|
"color": "#ffffff"
|
|
},
|
|
{
|
|
"id": "stack-63",
|
|
"field": "status",
|
|
"label": "Available",
|
|
"color": "#1e8449"
|
|
}
|
|
],
|
|
"stackCollapsed": false,
|
|
"notes": "Audible/visual alarm, with potential automatic isolation or ventilation actuation."
|
|
},
|
|
{
|
|
"id": "barrier-67",
|
|
"label": "Emergency ventilation and isolation valves",
|
|
"degradationChains": [],
|
|
"stack": [
|
|
{
|
|
"id": "stack-68",
|
|
"field": "type",
|
|
"label": "Active Hardware",
|
|
"color": "#48c9b0"
|
|
},
|
|
{
|
|
"id": "stack-69",
|
|
"field": "effectiveness",
|
|
"label": "Good",
|
|
"color": "#27ae60"
|
|
},
|
|
{
|
|
"id": "stack-70",
|
|
"field": "criticality",
|
|
"label": "Very High",
|
|
"color": "#2c3e50"
|
|
},
|
|
{
|
|
"id": "stack-71",
|
|
"field": "status",
|
|
"label": "Available",
|
|
"color": "#1e8449"
|
|
}
|
|
],
|
|
"stackCollapsed": true,
|
|
"notes": "Reduce airborne concentration; close isolation valves where safe to do so."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "consequence-72",
|
|
"label": "Environmental damage due to ammonia release",
|
|
"mitigationBarriers": [
|
|
{
|
|
"id": "barrier-73",
|
|
"label": "Containment sump and emergency dilution / knock-down",
|
|
"degradationChains": [],
|
|
"stack": [
|
|
{
|
|
"id": "stack-74",
|
|
"field": "type",
|
|
"label": "Passive Hardware",
|
|
"color": "#7f8c8d"
|
|
},
|
|
{
|
|
"id": "stack-75",
|
|
"field": "effectiveness",
|
|
"label": "Fair",
|
|
"color": "#f1c40f"
|
|
},
|
|
{
|
|
"id": "stack-76",
|
|
"field": "criticality",
|
|
"label": "High",
|
|
"color": "#566573"
|
|
},
|
|
{
|
|
"id": "stack-77",
|
|
"field": "status",
|
|
"label": "Degraded",
|
|
"color": "#f39c12"
|
|
}
|
|
],
|
|
"stackCollapsed": true,
|
|
"notes": "Limit spread to drains, waterways, or off-site receptors."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "consequence-78",
|
|
"label": "Operational loss due to cold-chain interruption",
|
|
"mitigationBarriers": [
|
|
{
|
|
"id": "barrier-79",
|
|
"label": "Emergency response plan and qualified contractor standby",
|
|
"degradationChains": [
|
|
{
|
|
"id": "chain-85",
|
|
"safeguards": [
|
|
{
|
|
"id": "safeguard-86",
|
|
"label": "Pre-qualified contractor agreement and annual drill"
|
|
}
|
|
],
|
|
"degradationFactor": {
|
|
"id": "degradation-87",
|
|
"label": "Contractor availability or response time not assured"
|
|
}
|
|
}
|
|
],
|
|
"stack": [
|
|
{
|
|
"id": "stack-80",
|
|
"field": "type",
|
|
"label": "Active Human",
|
|
"color": "#5dade2"
|
|
},
|
|
{
|
|
"id": "stack-81",
|
|
"field": "effectiveness",
|
|
"label": "Good",
|
|
"color": "#27ae60"
|
|
},
|
|
{
|
|
"id": "stack-82",
|
|
"field": "criticality",
|
|
"label": "High",
|
|
"color": "#566573"
|
|
},
|
|
{
|
|
"id": "stack-83",
|
|
"field": "responsible",
|
|
"label": "Management",
|
|
"color": "#ffffff"
|
|
},
|
|
{
|
|
"id": "stack-84",
|
|
"field": "status",
|
|
"label": "Available",
|
|
"color": "#1e8449"
|
|
}
|
|
],
|
|
"stackCollapsed": true,
|
|
"notes": "Ammonia-qualified emergency repair and product salvage / transfer plan."
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"view": {
|
|
"zoom": 1,
|
|
"panX": 0,
|
|
"panY": 0
|
|
},
|
|
"createdAt": "2026-06-12T00:00:00.000Z",
|
|
"updatedAt": "2026-06-12T00:00:00.000Z"
|
|
}
|