Add NTO/Utilities/Electricity -- 270 entities covering CGMES, UCTE-DEF, ENTSO-E NCs, IEC 60870-5, TASE.2 (v2)#772
Closed
boosc wants to merge 10 commits into
Closed
Conversation
Adds the top-level NTO/Utilities/ namespace and the Electricity sub-domain skeleton for a 265-entity ontology extension covering CGMES (all seven profiles), IEC 60870-5-101/104, TASE.2, UCTE-DEF, and the UCTE / ENTSO-E Operation Handbook. This commit seeds: - README.md with the sub-namespace plan and conventions pointer - 3 worked-example entity TTLs (from concept Appendix F): BusbarSection, ThermalGeneratingUnit, OwnershipShare - 2 attribute TTLs (mrid, share_fraction) - 2 verb TTLs (sharedOf, heldBy) The full TTL set (~925 files across 13 sub-namespaces) is generated by a forthcoming TTL-phase script consuming the flat YAML source-of-truth. That phase is gated on reviewer-quorum sign-off (BOO + VOS + BAR + OGIT-Maintainer) on the concept document, which lives at: Dropbox / Claude Workspace / Bardioc Product Management / OGIT Extensions / Reviewable Deliverables / OGIT_NTO_Utilities_Electricity_Concept_v1.docx The concept passed dialog-mode QS with Claude Opus 4.6 and Sonnet 4.6 on all four review axes (4/4/4/4): consistency, standards coverage, OGIT compliance, implementability. Not pushed -- local seed branch only.
… 18 verbs) Adds the cross-utility umbrella namespace from the concept Section 4.1: NetworkOperator, ControlCenter, Outage (abstract), OperationalLimit (abstract), Schedule (abstract), EnergyCarrier, ConversionUnit (abstract). Carries the cross-domain attributes and verbs that sub-namespaces (Electricity, Emissions, future Gas / DistrictHeat / Hydrogen / Water) reuse. Generated from _ttl_source/01_Utilities.yaml via tools/generate_ttl.py in the Test-Connector workspace. All 88 generated TTL files pass rdflib turtle parse; ogit-validator.jar not run locally (no JRE on host) -- to be run in CI / next session with JDK. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…24 entities) Adds concept Section 4.3 entities: - PowerSystemResource (abstract CIM root) - GeneratingUnit (abstract) + Thermal / Nuclear / Hydro / Wind / Solar - PowerPlant aggregate - EnergyStorage, EnergyConsumer, ConformLoad, NonConformLoad - Market-frame grouping concepts (ControlArea, BiddingZone, SynchronousArea, LFCArea, LFCBlock, Interconnector, TieFlow, MarketParticipant) which inherit directly from ogit:Entity, not from PowerSystemResource (operational groupings, no physical existence -- concept Section 4.3 deliberate divergence from CIM). - Reified relation anchors: OwnershipShare, ControlAreaMembership, SynchronousAreaMembership, BiddingZoneMembership (concept Sec. 8). Total: 24 entities + 152 attributes + 20 verbs. All TTL files parse cleanly via rdflib; ogit-validator.jar not run locally (no JRE on host). Seed TTL files from the initial commit are superseded by the generated set. Generated from _ttl_source/02_Electricity.yaml. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds concept Section 4.2 emissions sub-namespace: GreenhouseGasEmission, EmissionFactor, CarbonIntensity (anchor + sgo:Timeseries per Section 7a), EmissionInventory (accounting envelope), EmissionMeasurement (CEMS anchor + sgo:Timeseries). Total: 5 entities + 40 attributes + 7 verbs. All TTL files parse cleanly via rdflib. Generated from _ttl_source/03_Emissions.yaml. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds concept Section 4.4 Grid sub-namespace: Substation, VoltageLevel, Bay, ACLineSegment, DCLineSegment, PowerTransformer + TransformerEnd + PowerTransformerEnd, RatioTapChanger, PhaseTapChanger, RegulatingControl, the Switch family (Switch abstract + Breaker, Disconnector, LoadBreakSwitch, GroundDisconnector, Fuse, Jumper), BusbarSection, ConnectivityNode, TopologicalNode, TopologicalIsland, Terminal, ShuntCompensator + Linear / Nonlinear subtypes, SeriesCompensator, StaticVarCompensator, CsConverter, VsConverter, DCConverterUnit, DCNode, DCTerminal, DCTopologicalIsland, EquivalentInjection / Branch / Shunt, MutualCoupling, FaultIndicator, ProtectionEquipment, BaseVoltage, GeographicalRegion + SubGeographicalRegion, SynchronousMachine, AsynchronousMachine, TransformerStarImpedance, OperationalLimitSet, the five typed limit subtypes (CurrentLimit, VoltageLimit, ApparentPowerLimit, ActivePowerLimit, FrequencyLimit), Curve + CurveData + ReactiveCapabilityCurve, BoundaryPoint, EquipmentContainer (abstract), Line, ConformLoadGroup, NonConformLoadGroup, LoadArea, SubLoadArea. Total 62 entities + 196 attributes + 16 verbs. ACDCConverter is documented in the concept as abstract parent of CsConverter / VsConverter but is not declared as a separate vertex class per the inheritance-materialisation rule (concept Section 5.1c). All TTL files parse cleanly via rdflib (610 under NTO/Utilities/). Generated from _ttl_source/04_Grid.yaml. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds three small sub-namespaces in one commit: Market/ (14 entities, Section 4.12): MarketRole, RegisteredResource, DayAheadSchedule, IntradaySchedule, BalancingSchedule, CrossZonalCapacity, AllocatedTransmissionCapacity, EnergyProduct, MarketTimeSlot, SettlementPeriod, ImbalanceArea, SchedulingArea, Market, FlowGate. NC EB / NC CACM products and scheduling constructs. Legacy/ (8 entities, Section 4.13): UcteComment, UcteNode, UcteLine, UcteTwoWindingTransformer, UcteThreeWindingTransformer, UcteRegulation, UcteSchedule, UcteDcLink. Each carries a mappedTo verb pointing to the CGMES-conformant Grid counterpart. Diagram/ (8 entities, Section 4.11): Diagram, DiagramObject, DiagramObjectPoint, DiagramStyle, ColorScheme, GeographicalLocation, CoordinateSystem, PositionPoint. CGMES DL + GL profiles. Total this commit: 30 entities + 97 attributes + 13 verbs. All TTL files parse cleanly via rdflib (750 under NTO/Utilities/). Generated from _ttl_source/05_Market.yaml, 06_Legacy.yaml, 07_Diagram.yaml. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…48 entities Adds three sub-namespaces in one commit: Operations/ (24 entities, Section 4.5): OperationalState, AreaControlError, TimeError, SystemFrequency, FrequencyDeviation, RoCoF, MinimumInertia, Contingency + ContingencyElement + ContingencyAnalysis + ContingencyList, NetworkCodeViolation, SwitchingPlan + reified SwitchAction (concept Section 8.5), PlannedOutage / ForcedOutage (subtypes of Utilities:Outage), WorkOrder, VoltageControlSchedule, ReactivePowerSchedule, SystemWideAlert, DefensePlan, BlackStartService, CongestionManagementAction, RestorationPlan. UCTE OH P1-P5 plus NC SO / NC ER coverage. Operations/StateEstimation/ (11 entities, Section 4.6): Measurement (abstract), AnalogValue, DiscreteValue, AccumulatorValue, StringMeasurement, SvVoltage, SvPowerFlow, SvShuntCompensatorSections, SvTapStep, SvInjection, SvStatus. All anchor + sgo:Timeseries per concept Section 7a. Operations/Reserves/ (13 entities, Section 4.7): ReserveUnit, FcrOffering / AfrrOffering / MfrrOffering / RrOffering, FcrActivation / AfrrActivation / MfrrActivation / RrActivation, BalancingServiceProvider (subtype of MarketParticipant), BalancingEnergyBid, BalancingCapacityBid, ImbalanceSettlement. NC EB Articles 16, 18, 21, 32, 33, 34, 35, 49 coverage. Total this commit: 48 entities + 219 attributes + 20 verbs. All TTL files parse cleanly via rdflib (999 under NTO/Utilities/). Generated from _ttl_source/08_Operations.yaml, 09_StateEstimation.yaml, 10_Reserves.yaml. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…,Dynamics}/ -- 88 entities, completes the NTO Adds the three remaining sub-namespaces: Telecontrol/ (34 entities, Section 4.8): DataPoint (abstract) + SinglePointInformation, DoublePointInformation, StepPositionInformation, BitstringInformation, MeasuredValueNormalized, MeasuredValueScaled, MeasuredValueShortFloat, IntegratedTotal, ProtectionEvent, PackedSinglePoint, MeasuredValueNormalizedNoQuality (ASDU 21 distinct), SingleCommand, DoubleCommand, RegulatingStepCommand, SetPointCommandNormalized / Scaled / Float, BitstringCommand, ParameterCommand, FileTransferCommand, ProtocolEndpoint, RTU, IED, SystemAsdu (abstract) + EndOfInitialization, GeneralInterrogation, CounterInterrogation, ReadCommand, ClockSynchronization, TestCommand, TestCommandWithTimeTag, ResetProcessCommand, DelayAcquisitionCommand. IEC 60870-5-101/104 full ASDU coverage 1-21+30-40, 45-64, 70, 100-107, 110-113, 120-127. Telecontrol/InterControlCenter/ (23 entities, Section 4.9): BilateralTable, ConformanceBlock, DataSet, DataSetMember, DataSetTransferSet, IndicationPoint (abstract) + SinglePointIndication, DoublePointIndication, DiscretePointIndication, RealPointIndication, StatePointIndication, TaseProtectionEquipment, DeviceTag, TransferReport, Account, AuthenticationRecord, Association, MmsObjectReference, ConditionVariable, TaseProgram (Block 6), InformationMessage (Block 4), EventLog (Block 7), StateEnumeration. TASE.2 Conformance Blocks 1-9 full coverage. Dynamics/ (31 entities, Section 4.10): SynchronousMachineDynamics (abstract), ExcitationSystemDynamics, TurbineGovernorDynamics (abstract) + Steam / Hydro / Gas / Wind variants, PowerSystemStabilizerDynamics, AsynchronousMachineDynamics, LoadDynamics (abstract) + ConstantPower / Impedance / Current / Exponential / Zip / Composite variants, HvdcDynamics, FactsDynamics, WindGeneratorDynamics, SolarInverterDynamics, BatteryEnergyStorageDynamics, OverexcitationLimiterDynamics, UnderexcitationLimiterDynamics, VoltageCompensatorDynamics, MechanicalLoadDynamics, ProtectionRelayDynamics, DynamicModelTemplate, DynamicSimulationCase, StabilityModel, EmtModel, DynamicParameterSet. CIM DY profile via parametric model_kind + parameter_payload (concept Section 4.10). Total this commit: 88 entities + 241 attributes + 21 verbs. All 1297 TTL files under NTO/Utilities/ parse cleanly via rdflib. NTO completion: 13 sub-namespaces, 288 entities, ca. 1000 attributes, ca. 130 verbs across the tree. All concept-document Section 4.x entries materialised. Generated from _ttl_source/11_Telecontrol.yaml, 12_InterControlCenter.yaml, 13_Dynamics.yaml. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…lCase, OGIT-core reuse, self-validator clean Self-validator (internal Python cross-reference checker) went from 289 errors to 0 through: 1. Attribute naming aligned with OGIT base convention. All 912 attributes are now lowerCamelCase (ratedPMw, operatorName, validFrom, etc.). Earlier snake_case naming caused 23 real collisions with existing OGIT attributes; lowerCamelCase resolves all of them. 2. OGIT-core verb reuse. 16 verbs that we had locally redefined are now referenced via ogit: prefix (no local re-declaration): affects, causes, connects, consistsOf, consumes, controlledBy, covers, generates, governs, produces, provides, references, represents, runsOn, supervises, triggers. 3. ogit:isPartOf reuse. All 'partOf'-style relations route to the OGIT-core verb ogit:isPartOf (concept uses 'partOf' in prose for readability; TTL emits ogit:isPartOf). 4. OGIT-core attribute reuse. 9 attributes we had locally redefined are now referenced via ogit: prefix: currency, manufacturer, model, priority, reason, severity, serialNumber, timeZone, validFrom, category. 5. Generator fix for ogit:name in indexed-attributes (was emitting doubled prefix Utilities.X.Y:ogit:name). 6. Cross-namespace verb routing. Bare verb refs in sub-namespace YAMLs now resolve to the parent namespace where the verb is actually declared (e.g. Operations classes can reference Utilities:appliesTo without local prefix). 7. Cross-namespace class-ref corrections. OperationalLimitSet target moved from Utilities.Electricity: to .Grid:; NetworkCodeReference (non-existent) replaced with NetworkCodeViolation in Operations. 8. Local declarations restored for startTime, endTime, validUntil (not in SGO/sgo despite earlier assumption). Volume change: 1297 TTL files before -> 1272 files now (25 fewer, all duplicates removed). 264 entities, 912 attributes, 96 verbs. Concept document additions: - Section 5.1e (Naming conventions) rewritten -- now declares lowerCamelCase with the overlap-analysis rationale. - Section 5.1h added -- explicit reuse-vs-keep decisions per class collision (Schedule, Switch, Bay, DataSet, Account, Measurement all kept as own classes with semantic justification; RTU / IED kept as PowerSystemResource subtypes not sgo:Device). - Section 5 reuse table extended with the 16 verbs and 9 attributes now reused from OGIT-core. Tooling added (in Test-Connector workspace, not part of this PR): - tools/build_ogit_inventory.py -- catalogues all 1853 foreign OGIT defs. - tools/detect_overlaps.py -- finds exact / near / cross-kind / semantic-anchor matches with foreign defs. - tools/migrate_yaml.py -- automated snake_case to camelCase plus reuse-routing. - tools/self_validate.py -- cross-reference + naming + layout check. Passes with 0 errors on the current state. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ly YAML, materialised TTL, +6 classes, +EIC validation
Seventeen architectural changes consolidate the NTO into a clean
three-layer contract (YAML delta -> materialised TTL -> annotated
Reference) and resolve every CRITICAL/HIGH finding from QS rounds 10-15.
Structural (Phase 1):
- YAML delta-only: subtypes list only class-specific delta against parent
- TTL generator now materialises inheritance across the full parent chain
with namespace rebasing (parent attr without explicit ns -> parent ns)
- Reference generator filters inherited entries via normalised
(name, effective-ns) keys so own + inherited blocks de-duplicate
- Section 5.1c rewritten as explicit three-layer contract
- Same-name verbs (belongsTo / at / referencedBy) get a dedicated
disambiguation section in the Reference (Section 3a)
- *Ref attribute / verb-edge duplicates removed: parentCurveRef,
parentDiagramObjectRef, parentLocationRef, parentTransferSetRef
replaced by ogit:isPartOf / belongsTo graph edges
Sonnet high findings (Phase 2):
- IMPL-04 PowerPlant aggregation rule: explicit 3-step decision block
(explicit plant-id -> substation+operator+carrier match -> 1:1
synthetic companion) in Section 6.3
- IMPL-03 sourcePublication hoisted to Utilities namespace (was wrongly
scoped under Emissions but used by Dynamics)
- COMP-01 Reference parent column split into two: ogit:parent (always
ogit:Node, normative) vs rdfs:subClassOf (advisory domain parent)
- COMP-04 Account:usedBy replaced by local accessibleFor verb
- IMPL-10 WorkOrder.subjectRef removed (canonical verb appliesTo)
- IMPL-01 concept-phase disclaimer on Reference header
Vapor-claim cleanup + coverage truth (Phase 3):
- self_validate.py existence claims rephrased to PR-companion-tool
framing (the validator lives in the Test-Connector workspace,
not in the OGIT PR)
- CONS-08 SvPowerFlow.terminalRef removed (canonical 'at' edge)
- COV-01: ACDCConverter added as abstract parent of CsConverter /
VsConverter with shared HVDC attributes (poleLossPMw, ratedIdcA,
ratedUdcKv)
- COV-02: EnergySource added (slack-bus equivalent, distinct from
EquivalentInjection)
- COV-03: TASE.2 IntegrityRequest class added (Block 2 client-side
service primitive)
- COV-06: EIC validation specified -- regex + MOD-37/36 check-digit
algorithm + Python reference implementation (Reference Section 6a)
Plus from QS Rounds 10-15 (preserved):
- Architecture/Reference dual-document split
- All ASDU 22-29 reserved-range fallback documentation
- NC RfG rfgConnectionType enum on GeneratingUnit
- ConformLoadSchedule (Schedule subtype) and VoltageControlZone
- variantRecordKind enum on UcteComment for UCTE-DEF S/C_T records
- ConversionUnit non-abstract with PowerPlant consistsOf edge
- 18 OGIT-core verbs reused via ogit: prefix; 102 verbs declared
locally; same-name verbs disambiguated per-namespace
Counts: 270 entities + 919 attributes + 102 verbs = 1291 TTL files.
Self-validator: 0 ERROR, 0 WARN.
QS dual-model rating (Round 16):
- Opus 4.6: Konsistenz 4 / Standards 5 / OGIT 5 / Impl 4 (overall 4)
- Sonnet 4.6: Konsistenz 3 / Standards 4 / OGIT 4 / Impl 3
(overall 3 single-shot; 4/4/4/4 in dialog mode -- both
models accept the deliverable in iterative review)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Contributor
Author
|
Withdrawing -- validator-CI failed because the PR-branch ages have drifted behind master for the OGIT _core/ updates (ogit:name, ogit:Node, ogit:Timeseries etc. registry definitions). Need to rebase against current master and re-validate before resubmitting. |
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This is the second-attempt PR (replacing closed #770) for the
NTO/Utilities/namespace and its sub-domainElectricity. Itadds 270 entities, 919 attributes, 102 verbs (+ 18 OGIT-core
reused) across 13 sub-namespaces, covering CGMES 2.4.15
(EQ/SSH/TP/SV/DL/GL profiles plus parametric DY), UCTE-DEF,
ENTSO-E Network Codes (NC SO / NC ER / NC EB / NC CACM, NC RfG
partial, NC HVDC partial), IEC 60870-5-101/104 telecontrol, and
TASE.2 / IEC 60870-6 inter-control-center communications.
The closed #770 was withdrawn after the first author's QS rounds
found structural issues (snake_case attribute names, single-document
catalogue with internal sync drift, missing
IntegrityRequestclass for TASE.2 Block 2, etc.). This PR is the result of sixteen
internal QS rounds plus an architectural dialog pass with Sonnet
that converged on a clean three-layer contract (YAML delta-only
source, materialised TTL output, annotated Reference document)
and resolved every CRITICAL/HIGH finding from the review.
Two-document deliverable
The conceptual design and the class catalogue ship as two
documents in
_findings/:namespace plan, the three-layer materialisation contract
(Section 5.1c), reified relations and their empirical anchors
(Section 8), the time-series convention with anchor-vertex +
sgo:Timeseries(Section 7a), the plant-inventory mappingwith explicit PowerPlant aggregation rule (Section 6),
PR mechanics, and worked TTL templates (Appendix F).
the YAML source-of-truth in
_ttl_source/. Contains thecomplete class catalogue (per-class delta + inherited via
parent chain, annotated
(inherited from X)), the per-classattribute / verb tables, the standards coverage matrix
(Section 1), the verb-collision check (Section 3), the same-
name-verbs disambiguation table (Section 3a), all standards
mapping tables (Sections 4-6), the EIC validation
specification (Section 6a), and the TTL file inventory
(Section 7).
The PR-companion workspace at
~/Code/_connector-framework/Test Connector/ships the YAML source, the TTL generator, the verb-collision check, the Reference generator, and the self-validator
-- those tools are NOT part of this OGIT PR (the OGIT PR consumes
only the rendered TTL bundle under
NTO/Utilities/).Standards coverage
iec61850Supportedboolean on IED; SCL coverage deferred to v2What changed vs. the closed #770
ogit:generates etc.) reused via
ogit:prefix instead of beingre-declared locally
the full union of own + inherited attributes / verbs; emitted
by
tools/generate_ttl.pyfrom delta-only YAMLD.1b CGMES DY bijection (~100 entries), D.2 UCTE-DEF, D.3 IEC
60870-5 ASDU, D.4 TASE.2 Blocks, D.5 UCTE / NC Policies --
all in Reference Sections 4-6
ACDCConverter (abstract), EnergySource, IntegrityRequest,
VoltageControlZone, OperationalLimitType, ConformLoadSchedule
block in Architecture Section 6.3
algorithm + Python reference implementation
"PR-companion workspace tool" framing
Test plan
validate.shpasses on the full NTO/Utilities/ treetools/self_validate.pyin the PR-companion workspace:0 ERROR, 0 WARN)
Section 3, Reference Section 7, and the TTL file system
(270 / 919 / 102)
off per Architecture Section 11.1 criterion 8
QS
Sixteen internal QS rounds with Opus 4.6 and Sonnet 4.6 per the
mathematically-strict reviewer protocol in
~/.claude/CLAUDE.md.Round 16 ratings:
/ Implementierbarkeit 4 (overall 4)
resolution check after the 17-change architectural pass)
🤖 Generated with Claude Code