You've already forked generic-industrial-process
Import UAPF package
This commit is contained in:
24
.github/workflows/validate.yml
vendored
Normal file
24
.github/workflows/validate.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
name: Validate OIPF Library
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
jobs:
|
||||
validate-yaml:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Check YAML syntax
|
||||
run: |
|
||||
python - <<'PY'
|
||||
import pathlib, sys, yaml
|
||||
errors = []
|
||||
for p in pathlib.Path('.').rglob('*.yaml'):
|
||||
try:
|
||||
yaml.safe_load(p.read_text(encoding='utf-8'))
|
||||
except Exception as e:
|
||||
errors.append(f'{p}: {e}')
|
||||
if errors:
|
||||
print('\n'.join(errors))
|
||||
sys.exit(1)
|
||||
print('YAML OK')
|
||||
PY
|
||||
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.DS_Store
|
||||
*.tmp
|
||||
*.log
|
||||
10
.processgit/repository.yaml
Normal file
10
.processgit/repository.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
repository:
|
||||
owner: "OIPF"
|
||||
name: "generic-industrial-process"
|
||||
title: "Generic Industrial Process Library"
|
||||
classification:
|
||||
repo_type: "process"
|
||||
uapf_level: "0-4"
|
||||
status: "draft"
|
||||
reference_kind: "n/a"
|
||||
recommended_route: "/OIPF/generic-industrial-process"
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 OIPF contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
113
README.md
Normal file
113
README.md
Normal file
@@ -0,0 +1,113 @@
|
||||
# OIPF / generic-industrial-process
|
||||
|
||||
**Generic Industrial Process Library** is the first ProcessGit library for OIPF — the Operational Intelligence Packaging Format.
|
||||
|
||||
It is not a normal software repository and not a general documentation site. It is a **ProcessGit process library** intended to be published as:
|
||||
|
||||
```text
|
||||
https://processgit.org/OIPF/generic-industrial-process
|
||||
```
|
||||
|
||||
The library provides a reusable, industry-neutral production process skeleton for AI-native operational intelligence projects. It defines the common process pattern by which an industrial site is observed, contextualised, modelled, recommended, acted upon, recorded, and improved.
|
||||
|
||||
## Purpose
|
||||
|
||||
Most industrial AI deployments become bespoke because every plant has different tags, historians, maintenance records, recipes, operator workflows, and local terminology.
|
||||
|
||||
This ProcessGit library provides a neutral starting point for repeatable industrial intelligence packages:
|
||||
|
||||
```text
|
||||
Observe → Contextualise → Infer → Check → Recommend → Approve → Act → Record → Learn
|
||||
```
|
||||
|
||||
It is designed to support future OIPF packages such as:
|
||||
|
||||
- cleaning optimisation;
|
||||
- fouling detection;
|
||||
- energy-loss detection;
|
||||
- predictive maintenance;
|
||||
- quality drift detection;
|
||||
- downtime root-cause analysis.
|
||||
|
||||
## What this repository contains
|
||||
|
||||
```text
|
||||
.processgit/ ProcessGit metadata hints
|
||||
processgit.yaml ProcessGit library descriptor
|
||||
processgit.viewer.json Viewer/editor hints for ProcessGit
|
||||
library.yaml OIPF process library manifest
|
||||
levels/ UAPF-style L0-L4 process decomposition
|
||||
bpmn/ BPMN model for the generic industrial process
|
||||
/dmn Decision model example
|
||||
process-cards/ Process cards for the library
|
||||
algorithm-cards/ Algorithm cards referenced by process tasks
|
||||
packages/ First OIPF package skeletons
|
||||
resources/schemas/ OIPF schemas used by packages
|
||||
resources/examples/ Minimal deployable examples
|
||||
docs/ Concept, architecture and publishing notes
|
||||
```
|
||||
|
||||
## ProcessGit classification
|
||||
|
||||
Recommended ProcessGit repository metadata:
|
||||
|
||||
```yaml
|
||||
repo_type: process
|
||||
uapf_level: 0-4
|
||||
status: draft
|
||||
reference_kind: n/a
|
||||
```
|
||||
|
||||
If your ProcessGit instance stores classification at platform level, set these values in the repository settings rather than treating this file as the source of truth.
|
||||
|
||||
## Core idea
|
||||
|
||||
The library treats production operations as versioned process assets:
|
||||
|
||||
- assets and lines;
|
||||
- industrial tags;
|
||||
- operating states;
|
||||
- events;
|
||||
- constraints;
|
||||
- model contracts;
|
||||
- recommendations;
|
||||
- human approvals;
|
||||
- outcomes;
|
||||
- feedback loops.
|
||||
|
||||
It does not replace OPC UA, ISA-88, ISA-95, MQTT/Sparkplug, MES, CMMS, ERP, SCADA, DCS, or historians. It defines an AI-native process layer above them.
|
||||
|
||||
## First package
|
||||
|
||||
The first concrete package is:
|
||||
|
||||
```text
|
||||
packages/cleaning-optimisation/
|
||||
```
|
||||
|
||||
It is intentionally simple. It is meant to become the first real OIPF package that can be evolved into a deployable production-intelligence process.
|
||||
|
||||
## Publishing
|
||||
|
||||
To publish to ProcessGit:
|
||||
|
||||
```bash
|
||||
git clone https://processgit.org/OIPF/generic-industrial-process.git
|
||||
cp -R generic-industrial-process/* generic-industrial-process/.processgit generic-industrial-process/.github <repo>/
|
||||
cd <repo>
|
||||
git add .
|
||||
git commit -m "Initial OIPF generic industrial process library"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
To mirror to GitHub, create a repository such as:
|
||||
|
||||
```text
|
||||
https://github.com/OIPFormat/generic-industrial-process
|
||||
```
|
||||
|
||||
and push the same contents.
|
||||
|
||||
## Status
|
||||
|
||||
Draft reference library. Not yet a normative OIPF specification.
|
||||
18
algorithm-cards/model-inference.card.yaml
Normal file
18
algorithm-cards/model-inference.card.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
algorithm_card:
|
||||
id: "oipf.algorithm.model-inference"
|
||||
name: "Model Inference"
|
||||
status: "draft"
|
||||
purpose: "Run a declared ML, physics, statistical or rules model under a model contract."
|
||||
algorithm_type: "external"
|
||||
inputs:
|
||||
- model contract
|
||||
- contextualised time-series window
|
||||
- operating state
|
||||
- constraints
|
||||
outputs:
|
||||
- prediction
|
||||
- confidence
|
||||
- explanation payload
|
||||
- recommended action candidate
|
||||
implementation:
|
||||
type: "external_model_runtime"
|
||||
17
algorithm-cards/recommendation-generation.card.yaml
Normal file
17
algorithm-cards/recommendation-generation.card.yaml
Normal file
@@ -0,0 +1,17 @@
|
||||
algorithm_card:
|
||||
id: "oipf.algorithm.recommendation-generation"
|
||||
name: "Recommendation Generation"
|
||||
status: "draft"
|
||||
purpose: "Convert model outputs into a governed human-readable and machine-readable operational recommendation."
|
||||
algorithm_type: "composite"
|
||||
inputs:
|
||||
- prediction
|
||||
- confidence
|
||||
- constraints
|
||||
- economic parameters
|
||||
- workflow policy
|
||||
outputs:
|
||||
- recommendation object
|
||||
- approval requirement
|
||||
- expected impact
|
||||
- audit metadata
|
||||
17
algorithm-cards/tag-contextualisation.card.yaml
Normal file
17
algorithm-cards/tag-contextualisation.card.yaml
Normal file
@@ -0,0 +1,17 @@
|
||||
algorithm_card:
|
||||
id: "oipf.algorithm.tag-contextualisation"
|
||||
name: "Tag Contextualisation"
|
||||
status: "draft"
|
||||
purpose: "Map raw industrial tags to assets, variables, units, process states and semantic roles."
|
||||
algorithm_type: "composite"
|
||||
inputs:
|
||||
- tag list
|
||||
- asset hierarchy
|
||||
- historian metadata
|
||||
- engineering documents
|
||||
outputs:
|
||||
- canonical tag mapping
|
||||
- validation warnings
|
||||
implementation:
|
||||
type: "external_or_runtime"
|
||||
note: "Implementation is runtime-specific; this card describes the governed algorithm object."
|
||||
65
bpmn/generic-industrial-process.bpmn
Normal file
65
bpmn/generic-industrial-process.bpmn
Normal file
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_OIPF_Generic_Industrial_Process" targetNamespace="https://oipf.uapf.dev/bpmn">
|
||||
<bpmn:process id="OIPF_GenericIndustrialProcess" name="OIPF Generic Industrial Process" isExecutable="false">
|
||||
<bpmn:startEvent id="Start_Observe" name="Operational signals available">
|
||||
<bpmn:outgoing>Flow_1</bpmn:outgoing>
|
||||
</bpmn:startEvent>
|
||||
<bpmn:task id="Task_Observe" name="Observe production signals">
|
||||
<bpmn:incoming>Flow_1</bpmn:incoming>
|
||||
<bpmn:outgoing>Flow_2</bpmn:outgoing>
|
||||
</bpmn:task>
|
||||
<bpmn:task id="Task_Contextualise" name="Contextualise tags and assets">
|
||||
<bpmn:incoming>Flow_2</bpmn:incoming>
|
||||
<bpmn:outgoing>Flow_3</bpmn:outgoing>
|
||||
</bpmn:task>
|
||||
<bpmn:task id="Task_Infer" name="Run model contract">
|
||||
<bpmn:incoming>Flow_3</bpmn:incoming>
|
||||
<bpmn:outgoing>Flow_4</bpmn:outgoing>
|
||||
</bpmn:task>
|
||||
<bpmn:businessRuleTask id="Task_Check" name="Check constraints and readiness">
|
||||
<bpmn:incoming>Flow_4</bpmn:incoming>
|
||||
<bpmn:outgoing>Flow_5</bpmn:outgoing>
|
||||
</bpmn:businessRuleTask>
|
||||
<bpmn:task id="Task_Recommend" name="Generate recommendation">
|
||||
<bpmn:incoming>Flow_5</bpmn:incoming>
|
||||
<bpmn:outgoing>Flow_6</bpmn:outgoing>
|
||||
</bpmn:task>
|
||||
<bpmn:userTask id="Task_Approve" name="Human review and approval">
|
||||
<bpmn:incoming>Flow_6</bpmn:incoming>
|
||||
<bpmn:outgoing>Flow_7</bpmn:outgoing>
|
||||
</bpmn:userTask>
|
||||
<bpmn:exclusiveGateway id="Gateway_Approved" name="Approved?">
|
||||
<bpmn:incoming>Flow_7</bpmn:incoming>
|
||||
<bpmn:outgoing>Flow_8</bpmn:outgoing>
|
||||
<bpmn:outgoing>Flow_Reject</bpmn:outgoing>
|
||||
</bpmn:exclusiveGateway>
|
||||
<bpmn:task id="Task_Act" name="Execute approved action">
|
||||
<bpmn:incoming>Flow_8</bpmn:incoming>
|
||||
<bpmn:outgoing>Flow_9</bpmn:outgoing>
|
||||
</bpmn:task>
|
||||
<bpmn:task id="Task_Record" name="Record outcome and audit event">
|
||||
<bpmn:incoming>Flow_9</bpmn:incoming>
|
||||
<bpmn:incoming>Flow_Reject</bpmn:incoming>
|
||||
<bpmn:outgoing>Flow_10</bpmn:outgoing>
|
||||
</bpmn:task>
|
||||
<bpmn:task id="Task_Learn" name="Feed outcome back to model">
|
||||
<bpmn:incoming>Flow_10</bpmn:incoming>
|
||||
<bpmn:outgoing>Flow_11</bpmn:outgoing>
|
||||
</bpmn:task>
|
||||
<bpmn:endEvent id="End_Learned" name="Outcome captured">
|
||||
<bpmn:incoming>Flow_11</bpmn:incoming>
|
||||
</bpmn:endEvent>
|
||||
<bpmn:sequenceFlow id="Flow_1" sourceRef="Start_Observe" targetRef="Task_Observe" />
|
||||
<bpmn:sequenceFlow id="Flow_2" sourceRef="Task_Observe" targetRef="Task_Contextualise" />
|
||||
<bpmn:sequenceFlow id="Flow_3" sourceRef="Task_Contextualise" targetRef="Task_Infer" />
|
||||
<bpmn:sequenceFlow id="Flow_4" sourceRef="Task_Infer" targetRef="Task_Check" />
|
||||
<bpmn:sequenceFlow id="Flow_5" sourceRef="Task_Check" targetRef="Task_Recommend" />
|
||||
<bpmn:sequenceFlow id="Flow_6" sourceRef="Task_Recommend" targetRef="Task_Approve" />
|
||||
<bpmn:sequenceFlow id="Flow_7" sourceRef="Task_Approve" targetRef="Gateway_Approved" />
|
||||
<bpmn:sequenceFlow id="Flow_8" name="yes" sourceRef="Gateway_Approved" targetRef="Task_Act" />
|
||||
<bpmn:sequenceFlow id="Flow_Reject" name="no" sourceRef="Gateway_Approved" targetRef="Task_Record" />
|
||||
<bpmn:sequenceFlow id="Flow_9" sourceRef="Task_Act" targetRef="Task_Record" />
|
||||
<bpmn:sequenceFlow id="Flow_10" sourceRef="Task_Record" targetRef="Task_Learn" />
|
||||
<bpmn:sequenceFlow id="Flow_11" sourceRef="Task_Learn" targetRef="End_Learned" />
|
||||
</bpmn:process>
|
||||
</bpmn:definitions>
|
||||
29
dmn/action-readiness-decision.dmn
Normal file
29
dmn/action-readiness-decision.dmn
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" id="Definitions_ActionReadiness" name="Action Readiness Decision" namespace="https://oipf.uapf.dev/dmn">
|
||||
<decision id="Decision_ActionReadiness" name="Action readiness decision">
|
||||
<decisionTable id="DecisionTable_ActionReadiness" hitPolicy="FIRST">
|
||||
<input id="Input_Confidence" label="model confidence">
|
||||
<inputExpression id="InputExpression_Confidence" typeRef="number"><text>confidence</text></inputExpression>
|
||||
</input>
|
||||
<input id="Input_Constraint" label="constraint status">
|
||||
<inputExpression id="InputExpression_Constraint" typeRef="string"><text>constraintStatus</text></inputExpression>
|
||||
</input>
|
||||
<output id="Output_Readiness" name="readiness" typeRef="string" />
|
||||
<rule id="Rule_ApproveForReview">
|
||||
<inputEntry id="Rule_ApproveForReview_Confidence"><text>>= 0.80</text></inputEntry>
|
||||
<inputEntry id="Rule_ApproveForReview_Constraint"><text>"clear"</text></inputEntry>
|
||||
<outputEntry id="Rule_ApproveForReview_Output"><text>"ready_for_human_review"</text></outputEntry>
|
||||
</rule>
|
||||
<rule id="Rule_Hold">
|
||||
<inputEntry id="Rule_Hold_Confidence"><text>-</text></inputEntry>
|
||||
<inputEntry id="Rule_Hold_Constraint"><text>"blocked"</text></inputEntry>
|
||||
<outputEntry id="Rule_Hold_Output"><text>"hold_do_not_recommend"</text></outputEntry>
|
||||
</rule>
|
||||
<rule id="Rule_NeedMoreEvidence">
|
||||
<inputEntry id="Rule_NeedMoreEvidence_Confidence"><text>< 0.80</text></inputEntry>
|
||||
<inputEntry id="Rule_NeedMoreEvidence_Constraint"><text>-</text></inputEntry>
|
||||
<outputEntry id="Rule_NeedMoreEvidence_Output"><text>"need_more_evidence"</text></outputEntry>
|
||||
</rule>
|
||||
</decisionTable>
|
||||
</decision>
|
||||
</definitions>
|
||||
26
docs/00-charter.md
Normal file
26
docs/00-charter.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# OIPF Generic Industrial Process Library — Charter
|
||||
|
||||
## Mission
|
||||
|
||||
Create a reusable ProcessGit library for AI-native production operations. The library defines a generic industrial process pattern that can be adapted to factories, process plants, utilities, and industrial facilities.
|
||||
|
||||
## Scope
|
||||
|
||||
The first scope is the operational intelligence loop:
|
||||
|
||||
```text
|
||||
Observe → Contextualise → Infer → Check → Recommend → Approve → Act → Record → Learn
|
||||
```
|
||||
|
||||
The library is neutral and not tied to any single vendor, plant, sector, or runtime.
|
||||
|
||||
## Out of scope
|
||||
|
||||
- Direct PLC/DCS control logic.
|
||||
- Hard real-time safety functions.
|
||||
- Replacement of OPC UA, ISA-88, ISA-95, MES, SCADA, historians, or ERP.
|
||||
- A universal ML model for every factory.
|
||||
|
||||
## Design principle
|
||||
|
||||
The library should help turn industrial AI projects from bespoke consulting into reusable production-intelligence packages.
|
||||
13
docs/01-library-model.md
Normal file
13
docs/01-library-model.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Library Model
|
||||
|
||||
The library is organised as a UAPF-style process decomposition.
|
||||
|
||||
| Level | Meaning | Folder |
|
||||
|---|---|---|
|
||||
| L0 | Production enterprise context | `levels/L0-production-enterprise` |
|
||||
| L1 | Production domain | `levels/L1-production-domain` |
|
||||
| L2 | Production line operations | `levels/L2-production-line-operations` |
|
||||
| L3 | Operational intelligence loop | `levels/L3-operational-intelligence-loop` |
|
||||
| L4 | Recommendation-to-outcome work task | `levels/L4-recommend-act-record-learn` |
|
||||
|
||||
The library is intended to be viewed in ProcessGit as a process repository, with BPMN/DMN and package viewers enabled through `processgit.viewer.json`.
|
||||
38
docs/02-publishing-to-processgit.md
Normal file
38
docs/02-publishing-to-processgit.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# Publishing to ProcessGit
|
||||
|
||||
Target URL:
|
||||
|
||||
```text
|
||||
https://processgit.org/OIPF/generic-industrial-process
|
||||
```
|
||||
|
||||
## Steps
|
||||
|
||||
1. Create organisation `OIPF` in ProcessGit if it does not already exist.
|
||||
2. Create a new processpository named `generic-industrial-process`.
|
||||
3. Set recommended metadata:
|
||||
|
||||
```yaml
|
||||
repo_type: process
|
||||
uapf_level: 0-4
|
||||
status: draft
|
||||
```
|
||||
|
||||
4. Push this repository content:
|
||||
|
||||
```bash
|
||||
git clone https://processgit.org/OIPF/generic-industrial-process.git
|
||||
cd generic-industrial-process
|
||||
# copy files from this package into the repo root
|
||||
git add .
|
||||
git commit -m "Initial OIPF generic industrial process library"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
5. Verify ProcessGit viewers:
|
||||
|
||||
- README markdown view;
|
||||
- BPMN view: `bpmn/generic-industrial-process.bpmn`;
|
||||
- DMN view: `dmn/action-readiness-decision.dmn`;
|
||||
- YAML/package view: `packages/cleaning-optimisation/package.yaml`;
|
||||
- JSON schema view: `resources/schemas/oipf-package.schema.json`.
|
||||
15
docs/03-github-mirror.md
Normal file
15
docs/03-github-mirror.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# GitHub Mirror
|
||||
|
||||
Recommended GitHub mirror:
|
||||
|
||||
```text
|
||||
https://github.com/OIPFormat/generic-industrial-process
|
||||
```
|
||||
|
||||
This mirror should be secondary. The canonical process library should live in ProcessGit:
|
||||
|
||||
```text
|
||||
https://processgit.org/OIPF/generic-industrial-process
|
||||
```
|
||||
|
||||
The GitHub mirror can be used for public discoverability, issues, external contributions, and GitHub Actions validation.
|
||||
11
levels/L0-production-enterprise/README.md
Normal file
11
levels/L0-production-enterprise/README.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# L0 — Production Enterprise
|
||||
|
||||
The top-level enterprise context for the production organisation.
|
||||
|
||||
Typical concerns:
|
||||
|
||||
- production portfolio;
|
||||
- plants and sites;
|
||||
- high-level KPIs;
|
||||
- safety, quality, environmental and financial targets;
|
||||
- enterprise data governance.
|
||||
15
levels/L0-production-enterprise/process.yaml
Normal file
15
levels/L0-production-enterprise/process.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
process:
|
||||
id: "oipf.l0.production-enterprise"
|
||||
level: "L0"
|
||||
name: "Production Enterprise"
|
||||
purpose: "Represent the enterprise-level production context in which operational intelligence is deployed."
|
||||
inputs:
|
||||
- production strategy
|
||||
- plant portfolio
|
||||
- business KPIs
|
||||
- compliance obligations
|
||||
outputs:
|
||||
- production intelligence scope
|
||||
- enterprise-level operational objectives
|
||||
children:
|
||||
- "oipf.l1.production-domain"
|
||||
12
levels/L1-production-domain/README.md
Normal file
12
levels/L1-production-domain/README.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# L1 — Production Domain
|
||||
|
||||
Defines the domain context for production operations. The generic library remains industry-neutral, but domain packages can specialise it.
|
||||
|
||||
Examples:
|
||||
|
||||
- food and beverage;
|
||||
- chemicals;
|
||||
- pulp and paper;
|
||||
- water and wastewater;
|
||||
- pharma;
|
||||
- metals and materials.
|
||||
16
levels/L1-production-domain/process.yaml
Normal file
16
levels/L1-production-domain/process.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
process:
|
||||
id: "oipf.l1.production-domain"
|
||||
level: "L1"
|
||||
name: "Production Domain"
|
||||
purpose: "Represent a domain such as food production, chemical processing, water treatment, pulp and paper, pharma, or metals."
|
||||
inputs:
|
||||
- plant scope
|
||||
- domain-specific production constraints
|
||||
- asset classes
|
||||
- regulatory context
|
||||
outputs:
|
||||
- domain process model
|
||||
- domain package selection
|
||||
parent: "oipf.l0.production-enterprise"
|
||||
children:
|
||||
- "oipf.l2.production-line-operations"
|
||||
13
levels/L2-production-line-operations/README.md
Normal file
13
levels/L2-production-line-operations/README.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# L2 — Production Line Operations
|
||||
|
||||
Represents a production line, unit operation, or operational area.
|
||||
|
||||
This level maps real plant systems into OIPF structures:
|
||||
|
||||
- asset hierarchy;
|
||||
- tag mapping;
|
||||
- material and energy flows;
|
||||
- operating states;
|
||||
- events;
|
||||
- procedures;
|
||||
- constraints.
|
||||
18
levels/L2-production-line-operations/process.yaml
Normal file
18
levels/L2-production-line-operations/process.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
process:
|
||||
id: "oipf.l2.production-line-operations"
|
||||
level: "L2"
|
||||
name: "Production Line Operations"
|
||||
purpose: "Represent a line, unit operation, or production area where operational intelligence is applied."
|
||||
inputs:
|
||||
- asset hierarchy
|
||||
- tag list
|
||||
- historian data
|
||||
- operating modes
|
||||
- events
|
||||
- procedures
|
||||
outputs:
|
||||
- mapped operational context
|
||||
- selected optimisation use case
|
||||
parent: "oipf.l1.production-domain"
|
||||
children:
|
||||
- "oipf.l3.operational-intelligence-loop"
|
||||
9
levels/L3-operational-intelligence-loop/README.md
Normal file
9
levels/L3-operational-intelligence-loop/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# L3 — Operational Intelligence Loop
|
||||
|
||||
The reusable intelligence loop:
|
||||
|
||||
```text
|
||||
Observe → Contextualise → Infer → Check → Recommend → Approve → Act → Record → Learn
|
||||
```
|
||||
|
||||
This is the central reusable process pattern of the library.
|
||||
18
levels/L3-operational-intelligence-loop/process.yaml
Normal file
18
levels/L3-operational-intelligence-loop/process.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
process:
|
||||
id: "oipf.l3.operational-intelligence-loop"
|
||||
level: "L3"
|
||||
name: "Operational Intelligence Loop"
|
||||
purpose: "Convert contextualised production data into governed recommendations and learning feedback."
|
||||
pattern:
|
||||
- observe
|
||||
- contextualise
|
||||
- infer
|
||||
- check
|
||||
- recommend
|
||||
- approve
|
||||
- act
|
||||
- record
|
||||
- learn
|
||||
parent: "oipf.l2.production-line-operations"
|
||||
children:
|
||||
- "oipf.l4.recommend-act-record-learn"
|
||||
5
levels/L4-recommend-act-record-learn/README.md
Normal file
5
levels/L4-recommend-act-record-learn/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# L4 — Recommendation-to-Outcome Work Task
|
||||
|
||||
This level describes the concrete work task by which an AI/ML/physics model recommendation becomes a governed operational action.
|
||||
|
||||
The key output is not only the action. It is the recorded outcome, because outcome feedback allows the intelligence loop to improve.
|
||||
16
levels/L4-recommend-act-record-learn/process.yaml
Normal file
16
levels/L4-recommend-act-record-learn/process.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
process:
|
||||
id: "oipf.l4.recommend-act-record-learn"
|
||||
level: "L4"
|
||||
name: "Recommendation-to-Outcome Work Task"
|
||||
purpose: "Execute a human-in-the-loop recommendation cycle and record the measurable outcome."
|
||||
inputs:
|
||||
- model output
|
||||
- recommendation
|
||||
- constraint result
|
||||
- operator approval
|
||||
outputs:
|
||||
- action record
|
||||
- measured outcome
|
||||
- audit event
|
||||
- feedback signal
|
||||
parent: "oipf.l3.operational-intelligence-loop"
|
||||
31
library.yaml
Normal file
31
library.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
oipf_library:
|
||||
id: "oipf.generic-industrial-process"
|
||||
name: "Generic Industrial Process"
|
||||
version: "0.1.0-draft"
|
||||
status: "draft"
|
||||
namespace: "OIPF"
|
||||
kind: "process-library"
|
||||
description: "Generic process library for repeatable factory-to-factory operational intelligence deployments."
|
||||
process_pattern:
|
||||
- observe
|
||||
- contextualise
|
||||
- infer
|
||||
- check
|
||||
- recommend
|
||||
- approve
|
||||
- act
|
||||
- record
|
||||
- learn
|
||||
levels:
|
||||
L0: "Production enterprise"
|
||||
L1: "Production domain"
|
||||
L2: "Production line operations"
|
||||
L3: "Operational intelligence loop"
|
||||
L4: "Recommendation-to-outcome work task"
|
||||
packages:
|
||||
- id: "oipf.package.cleaning-optimisation"
|
||||
path: "packages/cleaning-optimisation/package.yaml"
|
||||
- id: "oipf.package.energy-loss-detection"
|
||||
path: "packages/energy-loss-detection/package.yaml"
|
||||
- id: "oipf.package.predictive-maintenance"
|
||||
path: "packages/predictive-maintenance/package.yaml"
|
||||
5
packages/cleaning-optimisation/README.md
Normal file
5
packages/cleaning-optimisation/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# Cleaning Optimisation Package
|
||||
|
||||
First concrete OIPF package skeleton.
|
||||
|
||||
It models the generic process by which cleaning-related production loss is observed, analysed, recommended, approved, executed and learned from.
|
||||
11
packages/cleaning-optimisation/agentic_workflow.yaml
Normal file
11
packages/cleaning-optimisation/agentic_workflow.yaml
Normal file
@@ -0,0 +1,11 @@
|
||||
agentic_workflow:
|
||||
id: "oipf.workflow.cleaning-optimisation"
|
||||
steps:
|
||||
- observe_current_state
|
||||
- evaluate_cleaning_need
|
||||
- check_constraints
|
||||
- generate_recommendation
|
||||
- request_operator_approval
|
||||
- record_decision
|
||||
- record_measured_outcome
|
||||
- feed_outcome_to_model
|
||||
13
packages/cleaning-optimisation/audit_policy.yaml
Normal file
13
packages/cleaning-optimisation/audit_policy.yaml
Normal file
@@ -0,0 +1,13 @@
|
||||
audit_policy:
|
||||
record:
|
||||
- timestamp
|
||||
- package_version
|
||||
- model_contract_id
|
||||
- input_data_window
|
||||
- prediction
|
||||
- confidence
|
||||
- constraints_checked
|
||||
- recommendation
|
||||
- human_decision
|
||||
- outcome
|
||||
immutable: true
|
||||
10
packages/cleaning-optimisation/constraints.yaml
Normal file
10
packages/cleaning-optimisation/constraints.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
constraints:
|
||||
- id: "quality_hold"
|
||||
type: "quality"
|
||||
rule: "do_not_delay_cleaning_if_quality_risk_is_high"
|
||||
- id: "operator_approval_required"
|
||||
type: "governance"
|
||||
rule: "all_cleaning_delay_recommendations_require_human_approval"
|
||||
- id: "read_only_first"
|
||||
type: "safety"
|
||||
rule: "package_must_not_write_to_plc_or_dcs_in_advisory_mode"
|
||||
26
packages/cleaning-optimisation/model_contract.yaml
Normal file
26
packages/cleaning-optimisation/model_contract.yaml
Normal file
@@ -0,0 +1,26 @@
|
||||
model_contract:
|
||||
id: "oipf.model.cleaning-optimisation.v0"
|
||||
model_type: "physics_ml_or_rules"
|
||||
purpose: "Estimate cleaning need and avoidable cleaning/downtime loss."
|
||||
inputs:
|
||||
- tag: "tag.inlet_pressure"
|
||||
role: "process_signal"
|
||||
- tag: "tag.outlet_pressure"
|
||||
role: "process_signal"
|
||||
- tag: "tag.flow_rate"
|
||||
role: "process_signal"
|
||||
- event: "cleaning_event"
|
||||
role: "historical_action"
|
||||
outputs:
|
||||
- name: "cleaning_need_score"
|
||||
type: "number"
|
||||
range: [0, 1]
|
||||
- name: "recommendation_candidate"
|
||||
type: "string"
|
||||
- name: "confidence"
|
||||
type: "number"
|
||||
range: [0, 1]
|
||||
- name: "estimated_saving"
|
||||
type: "number"
|
||||
unit: "EUR"
|
||||
human_review_required: true
|
||||
9
packages/cleaning-optimisation/operating_modes.yaml
Normal file
9
packages/cleaning-optimisation/operating_modes.yaml
Normal file
@@ -0,0 +1,9 @@
|
||||
operating_modes:
|
||||
- id: "running"
|
||||
description: "Normal production mode"
|
||||
- id: "cleaning"
|
||||
description: "Cleaning or CIP mode"
|
||||
- id: "idle"
|
||||
description: "No production"
|
||||
- id: "degraded"
|
||||
description: "Production mode with performance loss"
|
||||
33
packages/cleaning-optimisation/package.yaml
Normal file
33
packages/cleaning-optimisation/package.yaml
Normal file
@@ -0,0 +1,33 @@
|
||||
package:
|
||||
id: "oipf.package.cleaning-optimisation"
|
||||
name: "Cleaning Optimisation"
|
||||
version: "0.1.0-draft"
|
||||
kind: "production-intelligence-package"
|
||||
status: "draft"
|
||||
library: "oipf.generic-industrial-process"
|
||||
target_pain:
|
||||
- over-cleaning
|
||||
- under-cleaning
|
||||
- fouling-related efficiency loss
|
||||
- avoidable downtime
|
||||
- water and chemical waste
|
||||
process_pattern:
|
||||
- observe
|
||||
- contextualise
|
||||
- infer
|
||||
- check
|
||||
- recommend
|
||||
- approve
|
||||
- act
|
||||
- record
|
||||
- learn
|
||||
files:
|
||||
plant_graph: "plant_graph.yaml"
|
||||
tag_mapping: "tag_mapping.yaml"
|
||||
operating_modes: "operating_modes.yaml"
|
||||
constraints: "constraints.yaml"
|
||||
model_contract: "model_contract.yaml"
|
||||
agentic_workflow: "agentic_workflow.yaml"
|
||||
validation_tests: "validation_tests.yaml"
|
||||
savings: "savings.yaml"
|
||||
audit_policy: "audit_policy.yaml"
|
||||
14
packages/cleaning-optimisation/plant_graph.yaml
Normal file
14
packages/cleaning-optimisation/plant_graph.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
plant_graph:
|
||||
plant: "example_plant"
|
||||
line: "line_1"
|
||||
unit: "cleaning_sensitive_unit"
|
||||
assets:
|
||||
- id: "asset.filter_1"
|
||||
type: "filter_or_heat_exchanger"
|
||||
tags:
|
||||
- "tag.inlet_pressure"
|
||||
- "tag.outlet_pressure"
|
||||
- "tag.flow_rate"
|
||||
- "tag.temperature"
|
||||
procedures:
|
||||
- "procedure.cleaning_cycle"
|
||||
8
packages/cleaning-optimisation/savings.yaml
Normal file
8
packages/cleaning-optimisation/savings.yaml
Normal file
@@ -0,0 +1,8 @@
|
||||
savings:
|
||||
currency: "EUR"
|
||||
components:
|
||||
- production_downtime_avoided
|
||||
- water_usage_reduction
|
||||
- chemical_usage_reduction
|
||||
- energy_loss_reduction
|
||||
formula: "estimated_saving = avoided_downtime_cost + avoided_resource_cost + avoided_energy_loss"
|
||||
19
packages/cleaning-optimisation/tag_mapping.yaml
Normal file
19
packages/cleaning-optimisation/tag_mapping.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
tag_mapping:
|
||||
- tag_id: "tag.inlet_pressure"
|
||||
source: "historian"
|
||||
source_name: "PT_001"
|
||||
asset: "asset.filter_1"
|
||||
variable: "inlet_pressure"
|
||||
unit: "bar"
|
||||
- tag_id: "tag.outlet_pressure"
|
||||
source: "historian"
|
||||
source_name: "PT_002"
|
||||
asset: "asset.filter_1"
|
||||
variable: "outlet_pressure"
|
||||
unit: "bar"
|
||||
- tag_id: "tag.flow_rate"
|
||||
source: "historian"
|
||||
source_name: "FT_001"
|
||||
asset: "asset.filter_1"
|
||||
variable: "flow_rate"
|
||||
unit: "m3/h"
|
||||
9
packages/cleaning-optimisation/validation_tests.yaml
Normal file
9
packages/cleaning-optimisation/validation_tests.yaml
Normal file
@@ -0,0 +1,9 @@
|
||||
validation_tests:
|
||||
- id: "tag_mapping_complete"
|
||||
description: "All required model input tags are mapped to real source tags."
|
||||
- id: "units_consistent"
|
||||
description: "Units match model contract expectations."
|
||||
- id: "approval_required"
|
||||
description: "Recommendation workflow includes human approval."
|
||||
- id: "read_only_advisory"
|
||||
description: "Package does not require PLC/DCS write-back."
|
||||
3
packages/energy-loss-detection/README.md
Normal file
3
packages/energy-loss-detection/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Energy Loss Detection Package
|
||||
|
||||
Placeholder package for future OIPF energy optimisation work.
|
||||
21
packages/energy-loss-detection/package.yaml
Normal file
21
packages/energy-loss-detection/package.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
package:
|
||||
id: "oipf.package.energy-loss-detection"
|
||||
name: "Energy Loss Detection"
|
||||
version: "0.1.0-draft"
|
||||
kind: "production-intelligence-package"
|
||||
status: "placeholder"
|
||||
library: "oipf.generic-industrial-process"
|
||||
target_pain:
|
||||
- abnormal energy consumption
|
||||
- unexplained process efficiency loss
|
||||
- energy cost increase
|
||||
process_pattern:
|
||||
- observe
|
||||
- contextualise
|
||||
- infer
|
||||
- check
|
||||
- recommend
|
||||
- approve
|
||||
- act
|
||||
- record
|
||||
- learn
|
||||
3
packages/predictive-maintenance/README.md
Normal file
3
packages/predictive-maintenance/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Predictive Maintenance Package
|
||||
|
||||
Placeholder package for future OIPF predictive maintenance work.
|
||||
21
packages/predictive-maintenance/package.yaml
Normal file
21
packages/predictive-maintenance/package.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
package:
|
||||
id: "oipf.package.predictive-maintenance"
|
||||
name: "Predictive Maintenance"
|
||||
version: "0.1.0-draft"
|
||||
kind: "production-intelligence-package"
|
||||
status: "placeholder"
|
||||
library: "oipf.generic-industrial-process"
|
||||
target_pain:
|
||||
- asset degradation
|
||||
- unplanned downtime
|
||||
- maintenance timing uncertainty
|
||||
process_pattern:
|
||||
- observe
|
||||
- contextualise
|
||||
- infer
|
||||
- check
|
||||
- recommend
|
||||
- approve
|
||||
- act
|
||||
- record
|
||||
- learn
|
||||
20
process-cards/generic-industrial-process.card.yaml
Normal file
20
process-cards/generic-industrial-process.card.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
process_card:
|
||||
id: "oipf.card.generic-industrial-process"
|
||||
title: "Generic Industrial Process"
|
||||
level: "L3"
|
||||
status: "draft"
|
||||
description: "Reusable Observe-Contextualise-Infer-Check-Recommend-Approve-Act-Record-Learn pattern for industrial intelligence."
|
||||
bpmn: "bpmn/generic-industrial-process.bpmn"
|
||||
dmn: "dmn/action-readiness-decision.dmn"
|
||||
algorithm_cards:
|
||||
- "algorithm-cards/tag-contextualisation.card.yaml"
|
||||
- "algorithm-cards/model-inference.card.yaml"
|
||||
- "algorithm-cards/recommendation-generation.card.yaml"
|
||||
inputs:
|
||||
- contextualised operational data
|
||||
- model contract
|
||||
- constraints
|
||||
outputs:
|
||||
- governed recommendation
|
||||
- outcome record
|
||||
- audit trail
|
||||
37
processgit.viewer.json
Normal file
37
processgit.viewer.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"schemaVersion": "0.1",
|
||||
"repositoryType": "process",
|
||||
"defaultView": "library-overview",
|
||||
"viewers": [
|
||||
{
|
||||
"id": "library-overview",
|
||||
"label": "Library Overview",
|
||||
"type": "markdown",
|
||||
"path": "README.md"
|
||||
},
|
||||
{
|
||||
"id": "bpmn-process",
|
||||
"label": "BPMN Process",
|
||||
"type": "bpmn",
|
||||
"path": "bpmn/generic-industrial-process.bpmn"
|
||||
},
|
||||
{
|
||||
"id": "dmn-decision",
|
||||
"label": "DMN Decision",
|
||||
"type": "dmn",
|
||||
"path": "dmn/action-readiness-decision.dmn"
|
||||
},
|
||||
{
|
||||
"id": "oipf-package",
|
||||
"label": "Cleaning Optimisation Package",
|
||||
"type": "yaml",
|
||||
"path": "packages/cleaning-optimisation/package.yaml"
|
||||
},
|
||||
{
|
||||
"id": "schema",
|
||||
"label": "OIPF Package Schema",
|
||||
"type": "json-schema",
|
||||
"path": "resources/schemas/oipf-package.schema.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
23
processgit.yaml
Normal file
23
processgit.yaml
Normal file
@@ -0,0 +1,23 @@
|
||||
processgit:
|
||||
schema_version: "0.1"
|
||||
namespace: "OIPF"
|
||||
repository: "generic-industrial-process"
|
||||
title: "Generic Industrial Process Library"
|
||||
type: "process-library"
|
||||
repo_type: "process"
|
||||
uapf_level: "0-4"
|
||||
status: "draft"
|
||||
visibility: "public"
|
||||
description: >
|
||||
A ProcessGit library for repeatable AI-native industrial operations.
|
||||
Provides a generic Observe-Contextualise-Infer-Check-Recommend-Approve-Act-Record-Learn process model.
|
||||
canonical_url: "https://processgit.org/OIPF/generic-industrial-process"
|
||||
github_mirror: "https://github.com/OIPFormat/generic-industrial-process"
|
||||
default_viewer: "oipf-package-viewer"
|
||||
tags:
|
||||
- OIPF
|
||||
- production-as-code
|
||||
- operational-intelligence
|
||||
- industrial-ai
|
||||
- process-library
|
||||
- uapf-inspired
|
||||
19
resources/examples/minimal_cleaning_optimisation.oipf.yaml
Normal file
19
resources/examples/minimal_cleaning_optimisation.oipf.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
package:
|
||||
id: "oipf.example.cleaning-optimisation.minimal"
|
||||
name: "Minimal Cleaning Optimisation"
|
||||
version: "0.1.0-draft"
|
||||
kind: "production-intelligence-package"
|
||||
status: "draft"
|
||||
process_pattern:
|
||||
- observe
|
||||
- contextualise
|
||||
- infer
|
||||
- check
|
||||
- recommend
|
||||
- approve
|
||||
- act
|
||||
- record
|
||||
- learn
|
||||
model_contract: "packages/cleaning-optimisation/model_contract.yaml"
|
||||
bpmn: "bpmn/generic-industrial-process.bpmn"
|
||||
dmn: "dmn/action-readiness-decision.dmn"
|
||||
24
resources/schemas/oipf-package.schema.json
Normal file
24
resources/schemas/oipf-package.schema.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://oipf.uapf.dev/schemas/oipf-package.schema.json",
|
||||
"title": "OIPF Package",
|
||||
"type": "object",
|
||||
"required": ["package"],
|
||||
"properties": {
|
||||
"package": {
|
||||
"type": "object",
|
||||
"required": ["id", "name", "version", "kind", "status", "process_pattern"],
|
||||
"properties": {
|
||||
"id": {"type": "string"},
|
||||
"name": {"type": "string"},
|
||||
"version": {"type": "string"},
|
||||
"kind": {"type": "string"},
|
||||
"status": {"type": "string"},
|
||||
"process_pattern": {"type": "array", "items": {"type": "string"}},
|
||||
"model_contract": {"type": "string"},
|
||||
"bpmn": {"type": "string"},
|
||||
"dmn": {"type": "string"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user