schema-aggregator

ServiceCoordination Schema

Container: Contract.contractAttributes Extends: ServiceContract/v2.1 Protocol Version: 2.0 Semantic Model: generalised Use Cases: Coordination contract (T1), referral lifecycle, handover, deviation signalling Tags: generic-service, coordination, contract

Overview

ServiceCoordination is the coordination contract (T1) — the core of the generic coordination layer. It carries the persistent coordination identity, a lifecycle state machine, the targetCriteria the coordinator discovers against, an optional named-target snapshot (recommendedTargetRef), a credential-scoped handoverDocument, a notificationRoster, an in-band deviation signal, and transfer (handoff) support. Chain: ServiceContract <- ServiceCoordination <- HealthReferral.

Attachment points

Design rationale

Non-goals

Upstream candidates

Coded values & enums

Self-owned coded fields (deviation.reasonCode, targetCriteria.serviceCategory) use the pinned typed-CodedValue pattern (const @type, open/defaulted @context). Resolution of a code to its value set, and value-set extension by another network, follow the CodedValue resolution & extension convention (under discussion).

Small, schema-owned, operational/structural value sets — lifecycleState, targetCriteria.urgencyTier, handoverDocument.revocationStatus, notificationRoster[].partyRole / .notificationScope — are deliberately plain enums, not CodedValues, per that convention’s thumb rule (closed, network-owned sets stay plain enums).

UrgencyTier across the coordination packs

UrgencyTier (ROUTINE / URGENT / EMERGENCY) appears as a parallel RDF class in all three packs — scoord:UrgencyTier (this contract), scres:UrgencyTier (ServiceCoordinationResource) and scoff:UrgencyTier (ServiceCoordinationOffer). On the wire it is a plain string enum, so there is no wire-level identity concern. At the semantic-graph layer the three classes are intentionally separate but equivalent: scoord:UrgencyTier is the shared anchor, and the scres: / scoff: members carry skos:exactMatch links back to it. This is the decentralised-vocabulary model in miniature — each pack owns its vocabulary and equivalence is published, not centrally mandated. Cross-pack reconciliation is an analytics/semantic-layer concern.

Filtering

profile.json lists targetCriteria.urgencyTier as a filterable path. It is a scalar enum (not a CodedValue array), so this is an ordinary nested-scalar filter; whether a given gateway supports nested-path filtering is a deployment capability.