Skip to content

Add NTO/Utilities/Electricity -- 264 entities covering CGMES, UCTE-DEF, ENTSO-E, IEC 60870-5, TASE.2#770

Closed
boosc wants to merge 8 commits into
almatoai:masterfrom
boosc:feature/nto-utilities-electricity
Closed

Add NTO/Utilities/Electricity -- 264 entities covering CGMES, UCTE-DEF, ENTSO-E, IEC 60870-5, TASE.2#770
boosc wants to merge 8 commits into
almatoai:masterfrom
boosc:feature/nto-utilities-electricity

Conversation

@boosc
Copy link
Copy Markdown
Contributor

@boosc boosc commented May 27, 2026

Summary

Adds a new top-level NTO namespace Utilities/ with first sub-domain
Electricity/. Thirteen sub-namespaces, 264 entities, ca. 920
attributes, ca. 110 verbs across 1297 TTL files.

Full coverage of the following standards on class level:

  • CIM / CGMES (IEC 61970 + IEC 61968, ENTSO-E profile) -- all
    seven profiles EQ, SSH, TP, SV, DY, DL, GL
  • UCTE-DEF (legacy load-flow exchange) -- all canonical record
    types (C, N, L, T, TT, R, E, DC) with mappedTo verbs pointing at
    the CGMES counterparts
  • UCTE / ENTSO-E Operation Handbook plus Network Codes NC SO
    (Regulation EU 2017/1485), NC ER (2017/2196), NC EB (2017/2195),
    NC CACM (2015/1222), NC RfG (2016/631), NC HVDC (2016/1447)
  • IEC 60870-5-101 / 60870-5-104 (telecontrol) -- all ASDU types
    monitor 1-21 + CP56Time2a variants 30-40, control 45-64, system 70
    • 100-107, parameter 110-113, file-transfer 120-127
  • TASE.2 / IEC 60870-6 / ICCP -- Conformance Blocks 1 through 9
    (BilateralTable, DataSet, DataSetTransferSet, IndicationPoint
    family, TransferReport, InformationMessage, DeviceTag, TaseProgram,
    EventLog, Account, AuthenticationRecord, Association, MMS object
    reference)
  • ENTSO-E EIC identifier system (X, Y, W, Z, T codes)

Plus cross-domain Utilities/Emissions/ for greenhouse-gas
accounting and an EnergyCarrier / ConversionUnit pair on the
Utilities top level for sector-coupling readiness (electrolysers,
fuel cells, heat pumps, Power-to-X).

Structure

Path Entities Scope
NTO/Utilities/ 7 Cross-domain umbrella
NTO/Utilities/Emissions/ 5 GHG accounting + CEMS anchor
NTO/Utilities/Electricity/ 24 CIM PSR hierarchy + market frame + reified relations
NTO/Utilities/Electricity/Grid/ 62 CGMES EQ + TP equipment
NTO/Utilities/Electricity/Market/ 14 NC EB / NC CACM market constructs
NTO/Utilities/Electricity/Legacy/ 8 UCTE-DEF records
NTO/Utilities/Electricity/Diagram/ 8 CGMES DL + GL
NTO/Utilities/Electricity/Operations/ 24 UCTE OH + NC SO/ER
NTO/Utilities/Electricity/Operations/StateEstimation/ 11 CGMES SV anchors + sgo:Timeseries
NTO/Utilities/Electricity/Operations/Reserves/ 13 FCR / aFRR / mFRR / RR
NTO/Utilities/Electricity/Telecontrol/ 34 IEC 60870-5-101/104 ASDU coverage
NTO/Utilities/Electricity/Telecontrol/InterControlCenter/ 23 TASE.2 Conformance Blocks 1-9
NTO/Utilities/Electricity/Dynamics/ 31 CGMES DY profile (parametric model_kind)

Design decisions

  • Reified relations for relations that need own attributes:
    OwnershipShare (Krsko-AKW SI/HR 50/50 anchor),
    ControlAreaMembership, SynchronousAreaMembership (Baltic
    desync 2025-02-09 anchor), BiddingZoneMembership, SwitchAction.
    Reason: OGIT edges carry no attributes (PLAN D13).
  • Time-series anchor pattern uniformly across all time-variant
    values (SCADA, schedules, set-points, reserve activations,
    contingency results, carbon intensity, CEMS, SV-profile estimates).
    Every anchor vertex has a generates verb to sgo:Timeseries;
    no JSON payloads on vertices for time-variant data.
  • CGMES Dynamics modelled with one parent class per category
    (ExcitationSystemDynamics, TurbineGovernorDynamics etc.) plus
    model_kind enum + parameter_payload JSON blob, rather than
    declaring one OGIT class per CIM DY model subtype (~100 named
    subtypes; the parameter sets are pure floats, no relations).
  • Market-frame grouping concepts (ControlArea, BiddingZone,
    SynchronousArea, LFCArea, LFCBlock, Interconnector, TieFlow,
    MarketParticipant) inherit directly from ogit:Entity, not from
    PowerSystemResource -- they are operational groupings without
    physical existence.
  • Snake_case attribute names (consistent with CGMES CSV / XML
    exports and other public European power-system datasets);
    CamelCase class names; lowerCamelCase verb names.
  • External ontologies (Open Energy Ontology, OEP, Wikidata, GEM,
    energy-system simulation outputs) route through the Connector-
    Framework MappingRule DSL, not through OWL equivalence
    assertions in TTL.

Test plan

  • All 1297 TTL files parse cleanly via rdflib (Turtle syntax
    check)
  • validate.sh on CI: locally the validator stops at a
    pre-existing _c-id.ttl directory-mismatch issue (present
    on master with the same exit 123 before this branch); the
    single-call validator run shows 0 new errors introduced by
    this branch. Awaiting CI result on this PR.
  • Reviewer quorum per OGIT contribution guidelines (Almato-
    intern + OGIT maintainers)

🤖 Generated with Claude Code

boosc and others added 8 commits May 27, 2026 22:37
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>
@boosc
Copy link
Copy Markdown
Contributor Author

boosc commented May 27, 2026

Closing for now -- internal self-validator surfaced bare verb references that resolve to local namespace instead of ogit core (partOf, consistsOf, generates, locatedIn etc.), plus 16 verb duplicates of OGIT core, plus a generator bug with ogit:name in indexed lists. Will fix locally and re-open.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant