commit 0ca748c9a5c30c5e0f7b05c91417ce544c00af32 Author: rg4444 Date: Tue Jun 16 08:07:49 2026 +0300 init diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..50189c7 --- /dev/null +++ b/.github/workflows/validate.yml @@ -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 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8da82e1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.DS_Store +*.tmp +*.log diff --git a/.processgit/repository.yaml b/.processgit/repository.yaml new file mode 100644 index 0000000..1f8e809 --- /dev/null +++ b/.processgit/repository.yaml @@ -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" diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5b2c4a2 --- /dev/null +++ b/LICENSE @@ -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. diff --git a/README.md b/README.md new file mode 100644 index 0000000..3b23dd8 --- /dev/null +++ b/README.md @@ -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 / +cd +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. diff --git a/algorithm-cards/model-inference.card.yaml b/algorithm-cards/model-inference.card.yaml new file mode 100644 index 0000000..47b760d --- /dev/null +++ b/algorithm-cards/model-inference.card.yaml @@ -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" diff --git a/algorithm-cards/recommendation-generation.card.yaml b/algorithm-cards/recommendation-generation.card.yaml new file mode 100644 index 0000000..7d0ceb8 --- /dev/null +++ b/algorithm-cards/recommendation-generation.card.yaml @@ -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 diff --git a/algorithm-cards/tag-contextualisation.card.yaml b/algorithm-cards/tag-contextualisation.card.yaml new file mode 100644 index 0000000..a8a0145 --- /dev/null +++ b/algorithm-cards/tag-contextualisation.card.yaml @@ -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." diff --git a/bpmn/generic-industrial-process.bpmn b/bpmn/generic-industrial-process.bpmn new file mode 100644 index 0000000..b080701 --- /dev/null +++ b/bpmn/generic-industrial-process.bpmn @@ -0,0 +1,65 @@ + + + + + Flow_1 + + + Flow_1 + Flow_2 + + + Flow_2 + Flow_3 + + + Flow_3 + Flow_4 + + + Flow_4 + Flow_5 + + + Flow_5 + Flow_6 + + + Flow_6 + Flow_7 + + + Flow_7 + Flow_8 + Flow_Reject + + + Flow_8 + Flow_9 + + + Flow_9 + Flow_Reject + Flow_10 + + + Flow_10 + Flow_11 + + + Flow_11 + + + + + + + + + + + + + + + diff --git a/dmn/action-readiness-decision.dmn b/dmn/action-readiness-decision.dmn new file mode 100644 index 0000000..91b28b7 --- /dev/null +++ b/dmn/action-readiness-decision.dmn @@ -0,0 +1,29 @@ + + + + + + confidence + + + constraintStatus + + + + >= 0.80 + "clear" + "ready_for_human_review" + + + - + "blocked" + "hold_do_not_recommend" + + + < 0.80 + - + "need_more_evidence" + + + + diff --git a/docs/00-charter.md b/docs/00-charter.md new file mode 100644 index 0000000..c50672e --- /dev/null +++ b/docs/00-charter.md @@ -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. diff --git a/docs/01-library-model.md b/docs/01-library-model.md new file mode 100644 index 0000000..64e6efc --- /dev/null +++ b/docs/01-library-model.md @@ -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`. diff --git a/docs/02-publishing-to-processgit.md b/docs/02-publishing-to-processgit.md new file mode 100644 index 0000000..7d8b6ce --- /dev/null +++ b/docs/02-publishing-to-processgit.md @@ -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`. diff --git a/docs/03-github-mirror.md b/docs/03-github-mirror.md new file mode 100644 index 0000000..f914764 --- /dev/null +++ b/docs/03-github-mirror.md @@ -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. diff --git a/levels/L0-production-enterprise/README.md b/levels/L0-production-enterprise/README.md new file mode 100644 index 0000000..c479747 --- /dev/null +++ b/levels/L0-production-enterprise/README.md @@ -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. diff --git a/levels/L0-production-enterprise/process.yaml b/levels/L0-production-enterprise/process.yaml new file mode 100644 index 0000000..86e86a3 --- /dev/null +++ b/levels/L0-production-enterprise/process.yaml @@ -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" diff --git a/levels/L1-production-domain/README.md b/levels/L1-production-domain/README.md new file mode 100644 index 0000000..b1e2d67 --- /dev/null +++ b/levels/L1-production-domain/README.md @@ -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. diff --git a/levels/L1-production-domain/process.yaml b/levels/L1-production-domain/process.yaml new file mode 100644 index 0000000..906cf4f --- /dev/null +++ b/levels/L1-production-domain/process.yaml @@ -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" diff --git a/levels/L2-production-line-operations/README.md b/levels/L2-production-line-operations/README.md new file mode 100644 index 0000000..ff30bd4 --- /dev/null +++ b/levels/L2-production-line-operations/README.md @@ -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. diff --git a/levels/L2-production-line-operations/process.yaml b/levels/L2-production-line-operations/process.yaml new file mode 100644 index 0000000..1b8631d --- /dev/null +++ b/levels/L2-production-line-operations/process.yaml @@ -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" diff --git a/levels/L3-operational-intelligence-loop/README.md b/levels/L3-operational-intelligence-loop/README.md new file mode 100644 index 0000000..763648d --- /dev/null +++ b/levels/L3-operational-intelligence-loop/README.md @@ -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. diff --git a/levels/L3-operational-intelligence-loop/process.yaml b/levels/L3-operational-intelligence-loop/process.yaml new file mode 100644 index 0000000..4b20475 --- /dev/null +++ b/levels/L3-operational-intelligence-loop/process.yaml @@ -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" diff --git a/levels/L4-recommend-act-record-learn/README.md b/levels/L4-recommend-act-record-learn/README.md new file mode 100644 index 0000000..5195d79 --- /dev/null +++ b/levels/L4-recommend-act-record-learn/README.md @@ -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. diff --git a/levels/L4-recommend-act-record-learn/process.yaml b/levels/L4-recommend-act-record-learn/process.yaml new file mode 100644 index 0000000..6e5160c --- /dev/null +++ b/levels/L4-recommend-act-record-learn/process.yaml @@ -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" diff --git a/library.yaml b/library.yaml new file mode 100644 index 0000000..6f8545f --- /dev/null +++ b/library.yaml @@ -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" diff --git a/packages/cleaning-optimisation/README.md b/packages/cleaning-optimisation/README.md new file mode 100644 index 0000000..f6a4af2 --- /dev/null +++ b/packages/cleaning-optimisation/README.md @@ -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. diff --git a/packages/cleaning-optimisation/agentic_workflow.yaml b/packages/cleaning-optimisation/agentic_workflow.yaml new file mode 100644 index 0000000..3cbd4d4 --- /dev/null +++ b/packages/cleaning-optimisation/agentic_workflow.yaml @@ -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 diff --git a/packages/cleaning-optimisation/audit_policy.yaml b/packages/cleaning-optimisation/audit_policy.yaml new file mode 100644 index 0000000..b88f1f3 --- /dev/null +++ b/packages/cleaning-optimisation/audit_policy.yaml @@ -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 diff --git a/packages/cleaning-optimisation/constraints.yaml b/packages/cleaning-optimisation/constraints.yaml new file mode 100644 index 0000000..5fb063a --- /dev/null +++ b/packages/cleaning-optimisation/constraints.yaml @@ -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" diff --git a/packages/cleaning-optimisation/model_contract.yaml b/packages/cleaning-optimisation/model_contract.yaml new file mode 100644 index 0000000..043e22f --- /dev/null +++ b/packages/cleaning-optimisation/model_contract.yaml @@ -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 diff --git a/packages/cleaning-optimisation/operating_modes.yaml b/packages/cleaning-optimisation/operating_modes.yaml new file mode 100644 index 0000000..0dedc63 --- /dev/null +++ b/packages/cleaning-optimisation/operating_modes.yaml @@ -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" diff --git a/packages/cleaning-optimisation/package.yaml b/packages/cleaning-optimisation/package.yaml new file mode 100644 index 0000000..58eb8b4 --- /dev/null +++ b/packages/cleaning-optimisation/package.yaml @@ -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" diff --git a/packages/cleaning-optimisation/plant_graph.yaml b/packages/cleaning-optimisation/plant_graph.yaml new file mode 100644 index 0000000..f5961aa --- /dev/null +++ b/packages/cleaning-optimisation/plant_graph.yaml @@ -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" diff --git a/packages/cleaning-optimisation/savings.yaml b/packages/cleaning-optimisation/savings.yaml new file mode 100644 index 0000000..1be3b20 --- /dev/null +++ b/packages/cleaning-optimisation/savings.yaml @@ -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" diff --git a/packages/cleaning-optimisation/tag_mapping.yaml b/packages/cleaning-optimisation/tag_mapping.yaml new file mode 100644 index 0000000..137e30c --- /dev/null +++ b/packages/cleaning-optimisation/tag_mapping.yaml @@ -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" diff --git a/packages/cleaning-optimisation/validation_tests.yaml b/packages/cleaning-optimisation/validation_tests.yaml new file mode 100644 index 0000000..c091c42 --- /dev/null +++ b/packages/cleaning-optimisation/validation_tests.yaml @@ -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." diff --git a/packages/energy-loss-detection/README.md b/packages/energy-loss-detection/README.md new file mode 100644 index 0000000..5bf15bf --- /dev/null +++ b/packages/energy-loss-detection/README.md @@ -0,0 +1,3 @@ +# Energy Loss Detection Package + +Placeholder package for future OIPF energy optimisation work. diff --git a/packages/energy-loss-detection/package.yaml b/packages/energy-loss-detection/package.yaml new file mode 100644 index 0000000..d5445f6 --- /dev/null +++ b/packages/energy-loss-detection/package.yaml @@ -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 diff --git a/packages/predictive-maintenance/README.md b/packages/predictive-maintenance/README.md new file mode 100644 index 0000000..e3bfac8 --- /dev/null +++ b/packages/predictive-maintenance/README.md @@ -0,0 +1,3 @@ +# Predictive Maintenance Package + +Placeholder package for future OIPF predictive maintenance work. diff --git a/packages/predictive-maintenance/package.yaml b/packages/predictive-maintenance/package.yaml new file mode 100644 index 0000000..8a99b23 --- /dev/null +++ b/packages/predictive-maintenance/package.yaml @@ -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 diff --git a/process-cards/generic-industrial-process.card.yaml b/process-cards/generic-industrial-process.card.yaml new file mode 100644 index 0000000..66be983 --- /dev/null +++ b/process-cards/generic-industrial-process.card.yaml @@ -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 diff --git a/processgit.viewer.json b/processgit.viewer.json new file mode 100644 index 0000000..900adf0 --- /dev/null +++ b/processgit.viewer.json @@ -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" + } + ] +} diff --git a/processgit.yaml b/processgit.yaml new file mode 100644 index 0000000..cd87977 --- /dev/null +++ b/processgit.yaml @@ -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 diff --git a/resources/examples/minimal_cleaning_optimisation.oipf.yaml b/resources/examples/minimal_cleaning_optimisation.oipf.yaml new file mode 100644 index 0000000..5238383 --- /dev/null +++ b/resources/examples/minimal_cleaning_optimisation.oipf.yaml @@ -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" diff --git a/resources/schemas/oipf-package.schema.json b/resources/schemas/oipf-package.schema.json new file mode 100644 index 0000000..d7911e1 --- /dev/null +++ b/resources/schemas/oipf-package.schema.json @@ -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"} + } + } + } +}