1
0

init
Some checks failed
Validate OIPF Library / validate-yaml (push) Has been cancelled

This commit is contained in:
2026-06-16 08:07:49 +03:00
commit 0ca748c9a5
45 changed files with 901 additions and 0 deletions

24
.github/workflows/validate.yml vendored Normal file
View 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
View File

@@ -0,0 +1,3 @@
.DS_Store
*.tmp
*.log

View 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
View 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
View 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.

View 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"

View 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

View 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."

View 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>

View 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>&gt;= 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>&lt; 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
View 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
View 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`.

View 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
View 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.

View 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.

View 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"

View 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.

View 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"

View 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.

View 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"

View 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.

View 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"

View 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.

View 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
View 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"

View 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.

View 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

View 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

View 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"

View 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

View 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"

View 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"

View 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"

View 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"

View 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"

View 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."

View File

@@ -0,0 +1,3 @@
# Energy Loss Detection Package
Placeholder package for future OIPF energy optimisation work.

View 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

View File

@@ -0,0 +1,3 @@
# Predictive Maintenance Package
Placeholder package for future OIPF predictive maintenance work.

View 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

View 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
View 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
View 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

View 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"

View 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"}
}
}
}
}