The standard

SIGNET

Secure Intelligent Governed Network for Exchange and Trade — the open specification for governed procurement networks. This page renders directly from the standard's source repository.

SIGNET · Domain model

Four layers, one dependency stack

Every entity is defined once and referenced by the layers above it. Primitives sit at the foundation; a verifiable record of trust sits at the apex.

29 entities · 4 layers
04

Trust layer

Verifiable record

The audit-grade truth every transaction is judged against.

03

Agent layer

Autonomous actors

Who may act, under what mandate, and the decisions they take.

02

Process layer

Commercial lifecycle

The full arc from a need to a settled obligation.

01

Foundation layer

Primitives

The shared vocabulary every other layer is built from.

Specification

The Canonical Data Model

SIGNET Canonical Data Model

Specification v0.1 (Working Draft) Steward: Concert Foundation Tier: Normative Licence: CC0 1.0 (public domain dedication) Status: Request for Comments


About this document

This specification defines the SIGNET Canonical Data Model (CDM) — the common vocabulary for representing procurement and multi-party commerce across a SIGNET network. The CDM is the central normative artifact of the SIGNET standard. Every conforming implementation reads and writes data that is expressible in, and losslessly mappable to, this model.

The CDM is deliberately published under CC0. The vocabulary is meant to be implemented everywhere, by anyone, without friction or attribution burden. Concert Foundation holds no proprietary claim over the model; it stewards its evolution through the Standards Committee and the formal change-control process described in §11.

This is a working draft for community review. Field-level definitions in §4–§7 are illustrative of the model's shape and depth; they are not yet frozen. Comments are invited at hello@concert.foundation.


1. Purpose and design principles

The CDM exists to solve one problem: procurement data today is fragmented across mutually unintelligible standards and proprietary platforms, which prevents both interoperability and the deployment of intelligent agents across organisational boundaries. The CDM is the Rosetta Stone — a single coherent model that bridges the established standards and adds the structures needed for agent-native, governed, decentralised commerce.

The model is governed by eight design principles.

1.1 Reuse before invention. The CDM does not reinvent procurement semantics. Where a concept is well defined by an existing open standard — OCDS for the contracting lifecycle, EN 16931 for invoicing, UBL for document syntax, the EU eProcurement Ontology (ePO) for semantic relationships — the CDM adopts and aligns to it. New structure is introduced only where existing standards are silent, principally around synthetic agents, machine-readable policy, and decentralised identity.

1.2 Standards as profiles, not forks. The CDM is expressed as a coherent superset that profiles existing standards. A SIGNET document can always be projected down to a conforming OCDS release, a Peppol BIS invoice, or an eForms notice, and data arriving in those formats can always be lifted into the CDM. Mapping tables (§8) are normative.

1.3 Agent-native by construction. Human and synthetic agents are first-class parties. The model represents not only what was decided but which agent decided it, under what authority, using which inputs, and with what rationale. Provenance is structural, not an afterthought.

1.4 Identity is decentralised. Parties are identified by stable, resolvable identifiers that may be Decentralised Identifiers (DIDs). Claims about parties — certifications, financial standing, qualifications — are represented as W3C Verifiable Credentials, verifiable independently of any central registry.

1.5 Data sovereignty is explicit. The model distinguishes between an assertion and the right to access the data behind it. Consent and access grants are represented as data, consistent with the Solid data-sovereignty pattern. The CDM never assumes a central data warehouse.

1.6 Policy is data. Procurement rules — eligibility thresholds, evaluation weightings, approval routing, agent mandates — are represented as machine-readable, human-auditable policy objects, not buried in application logic.

1.7 Events are immutable. Every material change is an append-only event with provenance. The current state of any object is a projection over its event history. This makes audit native and tampering evident.

1.8 Linked-data foundation. The canonical serialisation is JSON-LD, giving every object and property a globally unique URI while remaining ordinary JSON to consumers that do not process the semantics. This aligns the CDM simultaneously with OCDS (JSON), W3C VC/DID (JSON-LD), ePO (RDF/OWL), and Solid (RDF).


2. Architectural overview

The CDM is organised into four layers. Each layer builds on the one below.

2.1 Foundation layer — the primitive value types and reference objects used everywhere: identifiers, parties, values, periods, classifications, documents, items, credentials. (§4)

2.2 Process layer — the procurement lifecycle objects, aligned to the OCDS stages of planning, tender, award, contract, and implementation: needs, sourcing events, lots, submissions, evaluations, awards, contracts, orders, catalogues, invoices, obligations, performance records. (§5)

2.3 Agent layer — the structures that make SIGNET agent-native: synthetic agents, capabilities, mandates, agent actions, decisions, and the policy objects that govern them. (§6)

2.4 Trust layer — the cross-cutting governance structures: events, provenance, consent, and audit records that wrap every object in the layers above. (§7)


3. Notation and conformance keywords

The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL in this document are to be interpreted as described in RFC 2119 and RFC 8174.

Field cardinality is shown as: 1 (exactly one, required), 0..1 (optional single), 1..* (one or more, required), 0..* (zero or more). Data types reference the foundation types in §4 or the JSON Schema primitives string, number, boolean, integer, and ISO 8601 date-time.


4. Foundation layer

4.1 Identifier

A typed, scheme-qualified identifier. Every Party, document, and major object carries at least one.

FieldTypeCard.Definition
schemestring (URI)1The identifier scheme, as a URI. Registered schemes include did, gleif:lei, gs1:gln, vat, companies-house, peppol.
idstring1The identifier value within the scheme.
uristring (URI)0..1A resolvable URI for the identified entity, where one exists.

A did-scheme identifier (e.g. did:web:supplier.example.com) makes the Party self-sovereign and resolvable without a central registry (§1.4).

4.2 Party

Any actor in the network. The single most important foundation object. Subtyped by role.

FieldTypeCard.Definition
idIdentifier1Primary identifier (DID RECOMMENDED).
identifiersIdentifier[]0..*Additional identifiers (LEI, VAT, GLN, etc.).
namestring1Legal or display name.
rolesstring[]1..*One or more of: buyer, supplier, procuringEntity, payer, payee, humanAgent, syntheticAgent, certifier, observer.
partyTypestring1organization, person, or agent.
addressAddress0..1Postal/registered address.
contactPointContactPoint0..1Contact details.
credentialsCredential[]0..*Verifiable Credentials held by the Party (§4.7).
memberOfIdentifier0..1The organisation a person or agent acts for.

A Party with partyType: agent is further described by the Agent layer (§6).

4.3 Value

A monetary amount. Aligned to EN 16931 monetary representation.

FieldTypeCard.Definition
amountnumber1The numeric amount.
currencystring1ISO 4217 three-letter code.
taxIncludedboolean0..1Whether the amount is tax-inclusive.

4.4 Period

FieldTypeCard.Definition
startDatedate-time0..1Inclusive start.
endDatedate-time0..1Inclusive end.
durationInDaysinteger0..1Convenience duration where dates are indicative.

4.5 Classification

A coded classification against a controlled scheme.

FieldTypeCard.Definition
schemestring1e.g. cpv, unspsc, cpvs, gsin.
idstring1Code value.
descriptionstring0..1Human-readable label.

4.6 Item

A line item — a unit of what is being bought, offered, ordered, or invoiced.

FieldTypeCard.Definition
idstring1Item identifier, unique within its containing object.
descriptionstring1What the item is.
classificationClassification0..1Primary classification.
additionalClassificationsClassification[]0..*Further classifications.
quantitynumber0..1Quantity.
unitUnit0..1Unit of measure (UN/ECE Rec 20) and unit price.
deliveryLocationLocation0..1Where the item is delivered.

4.7 Credential

A reference to a W3C Verifiable Credential asserting a claim about a Party (e.g. ISO 27001 certification, EcoVadis rating, insurance cover).

FieldTypeCard.Definition
idstring (URI)1Credential identifier.
typestring[]1..*VC types, e.g. VerifiableCredential, ISO27001Certificate.
issuerIdentifier1DID or identifier of the issuing authority.
issuanceDatedate-time1When issued.
expirationDatedate-time0..1When it expires.
credentialSubjectobject1The claims, per the VC data model.
proofobject1Cryptographic proof (may be a BBS proof enabling selective disclosure).
selectiveDisclosureboolean0..1Whether the credential supports zero-knowledge selective disclosure.

4.8 Document

FieldTypeCard.Definition
idstring1Document identifier.
documentTypestring1Coded type (e.g. tenderNotice, evaluationCriteria, signedContract).
titlestring0..1Title.
urlstring (URI)0..1Resolvable location.
hashstring0..1Content hash (integrity).
accessGrantIdentifier0..1Reference to a Consent/access-grant object (§7.3) where access is controlled.

5. Process layer

The process layer follows the OCDS lifecycle so that any SIGNET process can be projected to a conforming OCDS release. The five OCDS stages — planning, tender, award, contract, implementation — are preserved as the canonical phase model.

5.1 Need (planning stage)

The demand signal that initiates procurement. Equivalent to OCDS planning.

FieldTypeCard.Definition
idIdentifier1Need identifier.
titlestring1Short description of the need.
descriptionstring0..1Fuller description.
requestingPartyIdentifier1The Party raising the need.
budgetValue0..1Indicative budget.
classificationClassification0..1What is needed.
rationalestring0..1Why it is needed.
governingPoliciesIdentifier[]0..*Policy objects that constrain this procurement (§6.5).

5.2 SourcingEvent (tender stage)

A request to the market — RFP, RFQ, ITT, tender, or call-off competition. Equivalent to OCDS tender.

FieldTypeCard.Definition
idIdentifier1Event identifier.
titlestring1Title.
procuringPartyIdentifier1The buyer/procuring entity.
procedurestring1Procedure type, e.g. open, restricted, competitiveFlexible, directAward, frameworkCallOff.
statusstring1planned, active, evaluating, complete, cancelled, withdrawn.
lotsLot[]0..*Divisible portions (§5.3).
itemsItem[]0..*What is being sourced.
valueValue0..1Estimated value.
eligibilityCriteriaPolicy[]0..*Machine-readable entry criteria (§6.5).
evaluationCriteriaPolicy[]0..*Machine-readable scoring model (§6.5).
periodPeriod0..1Submission window.
documentsDocument[]0..*Tender documents.

5.3 Lot

A divisible portion of a SourcingEvent that may be awarded independently.

FieldTypeCard.Definition
idstring1Lot identifier within the event.
titlestring1Lot title.
itemsItem[]0..*Items in this lot.
valueValue0..1Estimated lot value.

5.4 Submission

A supplier's response to a SourcingEvent — a bid, tender, quote, or proposal.

FieldTypeCard.Definition
idIdentifier1Submission identifier.
sourcingEventIdentifier1The event responded to.
lotstring0..1The lot, if lot-specific.
submittingPartyIdentifier1The supplier.
submittedByIdentifier0..1The agent (human or synthetic) that lodged it.
itemsItem[]0..*Offered items with prices.
valueValue0..1Total offered value.
disclosedCredentialsCredential[]0..*Credentials presented, possibly via selective disclosure.
sealedProofobject0..1Where sealed-bid cryptography applies, the encrypted submission and proof (§9.3).
statusstring1draft, submitted, withdrawn, admissible, inadmissible.

5.5 Evaluation

The scoring of submissions against the evaluation criteria.

FieldTypeCard.Definition
idIdentifier1Evaluation identifier.
submissionIdentifier1The submission scored.
criteriaPolicy1The evaluation model applied.
scoresScore[]1..*Per-criterion scores with rationale.
evaluatedByIdentifier1The agent (human or synthetic) performing the evaluation.
resultstring1passed, failed, ranked.
decisionIdentifier0..1Link to the Decision record (§6.4).

5.6 Award (award stage)

The decision to award. Equivalent to OCDS award.

FieldTypeCard.Definition
idIdentifier1Award identifier.
sourcingEventIdentifier1The event.
awardedPartyIdentifier1The winning supplier.
valueValue1Awarded value.
rationalestring0..1Award rationale.
decisionIdentifier1The Decision record supporting the award (§6.4).
standstillPeriodPeriod0..1Where regulation requires a standstill (e.g. UK Procurement Act).

5.7 Contract (contract stage)

The binding agreement. Equivalent to OCDS contract.

FieldTypeCard.Definition
idIdentifier1Contract identifier.
awardIdentifier0..1The award it derives from.
partiesIdentifier[]1..*Contracting parties.
titlestring1Contract title.
valueValue1Contract value.
periodPeriod1Contract term.
obligationsObligation[]0..*Obligations and milestones (§5.10).
documentsDocument[]0..*Signed contract and annexes.
governingPoliciesIdentifier[]0..*Policies governing performance.

5.8 Order

A call-off or purchase order against a contract or catalogue. Aligned to UBL Order.

FieldTypeCard.Definition
idIdentifier1Order identifier.
contractIdentifier0..1The contract drawn against.
buyerIdentifier1Ordering party.
sellerIdentifier1Supplying party.
itemsItem[]1..*Ordered items.
valueValue1Order value.
deliveryPeriodPeriod0..1Required delivery.

5.9 Catalogue

A structured offering of goods/services. Aligned to UBL Catalogue and Peppol BIS Catalogue.

FieldTypeCard.Definition
idIdentifier1Catalogue identifier.
providerPartyIdentifier1The supplier.
itemsItem[]1..*Catalogue lines with prices.
validityPeriodPeriod0..1Validity.

5.10 Obligation

A contractual obligation, deliverable, or milestone with a compliance state.

FieldTypeCard.Definition
idstring1Obligation identifier within the contract.
descriptionstring1What must be done.
dueDatedate-time0..1When.
responsiblePartyIdentifier0..1Who is responsible.
statusstring1pending, met, breached, waived.
evidenceDocument[]0..*Evidence of fulfilment.

5.11 Invoice (implementation stage)

An invoice, fully aligned to EN 16931 so it is convertible to Peppol BIS / UBL Invoice or Factur-X. Field names below reference EN 16931 Business Terms (BT) for traceability.

FieldTypeCard.EN 16931Definition
idIdentifier1BT-1Invoice number.
issueDatedate-time1BT-2Issue date.
contractIdentifier0..1BT-12Related contract.
orderIdentifier0..1BT-13Related order.
sellerIdentifier1BG-4Seller.
buyerIdentifier1BG-7Buyer.
linesInvoiceLine[]1..*BG-25Invoice lines.
taxTotalValue1BG-22Total tax.
payableAmountValue1BT-115Amount due for payment.
paymentTermsstring0..1BT-20Payment terms.

The CDM's EN 16931 alignment is what makes a SIGNET network natively compliant with the EU ViDA cross-border e-invoicing mandate (from July 2030) and the national B2B mandates preceding it.


6. Agent layer

This layer is SIGNET's distinctive contribution. No existing procurement standard represents synthetic agents as first-class, governed, accountable participants. The agent layer does.

6.1 SyntheticAgent

An AI agent operating within the network as a first-class Party (partyType: agent, role syntheticAgent).

FieldTypeCard.Definition
idIdentifier1Agent DID.
namestring1Agent name.
operatedByIdentifier1The Party accountable for the agent.
modelstring0..1The underlying model family (model-agnostic; for provenance only).
capabilitiesAgentCapability[]1..*Declared capabilities (§6.2).
mandateIdentifier1The Mandate governing the agent (§6.3).
agentCardstring (URI)0..1A2A Agent Card location (/.well-known/agent.json).

6.2 AgentCapability

A declared capability, aligned to the A2A Agent Card model so capabilities are discoverable across organisational boundaries.

FieldTypeCard.Definition
namestring1Capability name, e.g. evaluate.submission, negotiate.price.
descriptionstring0..1What it does.
inputSchemaobject0..1Expected input.
outputSchemaobject0..1Produced output.

6.3 Mandate

The authority granted to an agent — what it may do, within what limits, and where human approval is required. The structural guarantee that agents cannot exceed their remit.

FieldTypeCard.Definition
idIdentifier1Mandate identifier.
agentIdentifier1The agent governed.
grantedByIdentifier1The Party granting authority.
permittedCapabilitiesstring[]1..*Capabilities the agent may exercise.
constraintsPolicy[]0..*Hard limits (e.g. max discount, value ceiling).
approvalThresholdsPolicy[]0..*Conditions requiring human-in-the-loop approval.
scopeobject1Data and entity scope the agent may operate within (sandbox boundary).
validityPeriod0..1Time bound on the mandate.

6.4 Decision

A record of a decision taken in the network, by a human or synthetic agent, with the inputs and rationale that produced it. The backbone of accountability.

FieldTypeCard.Definition
idIdentifier1Decision identifier.
decisionTypestring1e.g. admissibility, evaluation, award, negotiationMove.
madeByIdentifier1The agent (human or synthetic) that decided.
underMandateIdentifier0..1The mandate relied on, where the decider is synthetic.
inputsIdentifier[]0..*The objects considered (submissions, credentials, policies).
policiesAppliedIdentifier[]0..*The policies applied.
rationalestring1Human-readable rationale.
outcomeobject1The decision outcome.
humanApprovalIdentifier0..1Where a mandate threshold required it, the approving Party and record.
provenanceProvenance1Full provenance (§7.2).

A Decision record satisfies the "material decision" record-keeping that regulation increasingly requires — including the assessment-summary and decision-record obligations of the UK Procurement Act 2023, and the documentation expectations for AI-assisted evaluation under the EU AI Act.

6.5 Policy

A machine-readable, human-auditable rule. Policies express eligibility criteria, evaluation models, approval routing, agent constraints, and compliance rules. "Rules as code" made concrete.

FieldTypeCard.Definition
idIdentifier1Policy identifier.
policyTypestring1eligibility, evaluation, approval, constraint, compliance.
expressionLanguagestring1The language the rule is written in, e.g. rego, dmn, cel.
expressionstring1The executable rule.
humanReadablestring1A plain-language statement of the same rule.
versionstring1Policy version.
issuedByIdentifier1The governing Party.

The dual requirement — expression (machine-executable) and humanReadable (auditable) — is mandatory. A Policy MUST carry both so that the same rule governs agents and is reviewable by humans.


7. Trust layer

Cross-cutting structures that wrap every object above with auditability, provenance, and consent.

7.1 Event

An append-only record of a material change. The current state of any object is the projection of its ordered Event stream (§1.7).

FieldTypeCard.Definition
idIdentifier1Event identifier.
eventTypestring1e.g. submission.lodged, award.decided, mandate.granted.
subjectIdentifier1The object the event concerns.
actorIdentifier1The Party (human or synthetic) that caused the event.
timestampdate-time1When it occurred.
payloadobject0..1The change.
previousEventHashstring0..1Hash of the prior event, forming a tamper-evident chain.
provenanceProvenance1Provenance (§7.2).

7.2 Provenance

Who or what produced an assertion, when, and from what. Aligned to W3C PROV.

FieldTypeCard.Definition
generatedByIdentifier1The agent or activity that produced the assertion.
generatedAtdate-time1When.
derivedFromIdentifier[]0..*Source objects.
usedPoliciesIdentifier[]0..*Policies applied.
signatureobject0..1Cryptographic signature over the assertion.

7.3 Consent

A data-sovereignty access grant — the right of a named party, for a stated purpose, for a bounded time, to access data held by another party. Expresses the Solid consent pattern as CDM data (§1.5).

FieldTypeCard.Definition
idIdentifier1Consent identifier.
grantorIdentifier1The party who owns the data.
granteeIdentifier1The party granted access.
resourceIdentifier[]1..*The data resources covered.
purposestring1The permitted purpose.
validityPeriod1Time bound.
revocableboolean1Whether revocable before expiry.
proofobject0..1Signed grant.

8. Standards mapping (normative)

The CDM is a profile-and-bridge over established standards. The following mappings are normative: a conforming implementation MUST be able to transform between the CDM and these formats without loss of the fields defined in the mapping.

CDM objectMaps to / fromMapping basis
NeedOCDS planningOCDS 1.1 release
SourcingEvent, LotOCDS tender; eForms noticeOCDS 1.1; eForms
SubmissionOCDS bid (bid extension); UBL TenderOCDS bid extension
AwardOCDS awardOCDS 1.1
ContractOCDS contractOCDS 1.1
OrderUBL 2.3 Order; Peppol BIS OrderingUBL 2.3
CatalogueUBL 2.3 Catalogue; Peppol BIS CatalogueUBL 2.3
InvoiceEN 16931; Peppol BIS Billing; UBL Invoice; Factur-XEN 16931 semantic model
PartyOCDS parties; ePO AgentOCDS org; ePO
CredentialW3C Verifiable Credentials 2.0VC data model
Identifier (did)W3C DID 1.0DID core
ProvenanceW3C PROV-OPROV
Semantic layer (all)EU eProcurement Ontology (ePO)ePO OWL/RDF

Where a CDM object has no counterpart in a target standard (notably the entire Agent layer when projecting to OCDS), the projection omits it without error, and the reverse lift leaves those fields empty. SIGNET-original structures are always cleanly separable from third-party standards, consistent with the IP & Licensing Policy.


9. Serialisation

9.1 Canonical form. The canonical serialisation is JSON-LD 1.1. Concert publishes the SIGNET @context at a stable URI. Every object type and property resolves to a URI in the SIGNET vocabulary namespace, itself aligned to ePO terms where equivalents exist.

9.2 Plain-JSON consumption. Consumers that do not process linked-data semantics MAY treat CDM documents as ordinary JSON; the @context is ignorable without loss of the document's tree structure. This preserves the low-friction adoption that made OCDS's plain-JSON approach successful.

9.3 Cryptographic envelopes. Where confidentiality is required — sealed-bid submissions (§5.4), selective credential disclosure (§4.7) — the relevant fields carry a cryptographic envelope (zero-knowledge proof, homomorphic ciphertext, or BBS selective-disclosure proof) in place of cleartext, with verification metadata. The envelope formats are specified in the separate SIGNET Cryptographic Profiles document.


10. Identifiers and namespaces

10.1 Every CDM object MUST carry a network-unique id. Decentralised Identifiers (DIDs) are RECOMMENDED for Parties and agents; URN or URI identifiers are acceptable for process objects.

10.2 The SIGNET vocabulary namespace, the published @context, and the registry of identifier schemes and codelists are maintained by Concert at stable URIs under the concert.foundation domain and MUST NOT be repurposed by implementers to publish non-conforming extensions under the SIGNET name.


11. Extension mechanism

The CDM is extensible without forking, following the OCDS extension pattern.

11.1 An extension is a published, versioned package that adds object types, fields, or codelist values under its own namespace. Extensions MUST NOT redefine or remove core fields.

11.2 Community extensions MAY be submitted to Concert for review and, if broadly useful, promotion into the core model through the change-control process (§12). This keeps the core lean while allowing domain-specific elaboration (e.g. a defence-procurement extension, a construction extension).

11.3 Core conformance (§13) is assessed against the core model only; extensions are conformance-assessed separately.


12. Versioning and change control

12.1 The CDM uses semantic versioning. The major version changes only on a breaking change to the core model; minor versions add backward-compatible structure; patch versions clarify without changing meaning.

12.2 As a normative artifact, the core model changes only through the formal revision process governed by the Standards Committee, with a published comment period. Non-normative material (examples, guidance, mapping notes) MAY be updated freely, consistent with the normative/non-normative distinction in the governance model.

12.3 Every published version is permanently retrievable at a version-stable URI. Implementations declare the CDM version they target.


13. Conformance

13.1 A document conforms to the CDM if it validates against the published SIGNET JSON Schema for its declared version and satisfies the structural rules in this specification.

13.2 An implementation conforms if it (a) reads and writes conforming documents, (b) performs the normative standards mappings in §8 without loss of mapped fields, and (c) preserves provenance and event integrity for every material change it makes.

13.3 Conformance is verified against the SIGNET conformance test suite (a separate normative artifact, Apache-2.0 licensed) and its synthetic test datasets (CDLA-Permissive). Certification of conformance, and the "SIGNET Certified" mark, are administered by Concert under the IP & Licensing Policy, on identical terms to all implementers.


Appendix A — Worked example (illustrative)

A minimal award Decision made by a synthetic evaluation agent, in canonical JSON-LD (abbreviated):

{
  "@context": "https://concert.foundation/signet/v0.1/context.jsonld",
  "type": "Decision",
  "id": { "scheme": "did", "id": "did:web:buyer.example#decision-8842" },
  "decisionType": "award",
  "madeBy": { "scheme": "did", "id": "did:web:buyer.example#agent-eval-3" },
  "underMandate": { "scheme": "did", "id": "did:web:buyer.example#mandate-eval-3" },
  "inputs": [
    { "scheme": "did", "id": "did:web:buyer.example#submission-5521" },
    { "scheme": "did", "id": "did:web:buyer.example#submission-5522" }
  ],
  "policiesApplied": [
    { "scheme": "did", "id": "did:web:buyer.example#policy-eval-mat" }
  ],
  "rationale": "Most Advantageous Tender (price 0.2, quality 0.55, social 0.25). submission-5521 scored 0.859474, ahead of submission-5522 at 0.841500 (margin 0.017974). The dearer bid wins on materially higher quality, accepting a 5.56% price premium over the lower bid.",
  "outcome": { "awardedSubmission": "did:web:buyer.example#submission-5521" },
  "humanApproval": { "scheme": "did", "id": "did:web:buyer.example#approval-771" },
  "provenance": {
    "generatedBy": { "scheme": "did", "id": "did:web:buyer.example#agent-eval-3" },
    "generatedAt": "2026-06-21T14:08:00Z",
    "usedPolicies": [{ "scheme": "did", "id": "did:web:buyer.example#policy-eval-mat" }],
    "signature": { "type": "Ed25519Signature2020", "value": "z58…" }
  }
}

This single object records what was decided, which synthetic agent decided it, under which mandate, from which inputs, under which policy, with what rationale, with which human approval, and with cryptographic provenance — the accountability guarantee that distinguishes a SIGNET network from a conventional procurement platform.


This is a working draft published for comment under CC0 1.0. © 2026 Concert Foundation — to the extent any rights subsist, they are dedicated to the public domain. SIGNET and "SIGNET Certified" are marks administered by Concert Foundation under the IP & Licensing Policy.

Object reference

The model, field by field

Generated from the JSON Schema. EN 16931 Business Term mappings appear on the invoicing objects.

Foundation layer

Identifier

A typed, scheme-qualified identifier.

FieldTypeCard.Definition
schemestring1Identifier scheme. See codelists/identifierScheme.csv.
idstring1Identifier value within the scheme.
uristring0..1Resolvable URI for the identified entity, where one exists.

Value

A monetary amount (EN 16931 aligned).

FieldTypeCard.Definition
amountnumber1Numeric amount.
currencystring1ISO 4217 three-letter code.
taxIncludedboolean0..1Whether the amount is tax-inclusive.

Period

A span of time.

FieldTypeCard.Definition
startDatestring0..1Inclusive start.
endDatestring0..1Inclusive end.
durationInDaysinteger0..1Convenience duration where dates are indicative.

Classification

A coded classification against a controlled scheme.

FieldTypeCard.Definition
schemestring1Classification scheme.
idstring1Code value.
descriptionstring0..1Human-readable label.

Item

A line item.

FieldTypeCard.Definition
idstring1Item identifier, unique within its containing object.
descriptionstring1What the item is.
classificationClassification0..1
additionalClassificationsClassification[]0..*
quantitynumber0..1Quantity.
unitPriceValue0..1Price per unit.

Credential

Reference to a W3C Verifiable Credential asserting a claim about a Party.

FieldTypeCard.Definition
idstring1Credential identifier.
typestring[]1..*VC types.
issuerIdentifier1Issuing authority.
issuanceDatestring1
expirationDatestring0..1
credentialSubjectobject1The claims, per the VC data model.
proofobject1Cryptographic proof (may be a BBS selective-disclosure proof).
selectiveDisclosureboolean0..1Whether the credential supports zero-knowledge selective disclosure.

Document

A reference to a document or attachment.

FieldTypeCard.Definition
idstring1
documentTypestring1Coded type. See codelists/documentType.csv.
titlestring0..1
urlstring0..1
hashstring0..1Content hash for integrity.
accessGrantIdentifier0..1Reference to a Consent object where access is controlled.

Provenance

Who or what produced an assertion, when, and from what (W3C PROV aligned).

FieldTypeCard.Definition
generatedByIdentifier1The agent or activity that produced the assertion.
generatedAtstring1
derivedFromIdentifier[]0..*
usedPoliciesIdentifier[]0..*
signatureobject0..1Cryptographic signature over the assertion.

Score

A per-criterion evaluation score.

FieldTypeCard.Definition
criterionstring1The criterion scored.
valuenumber1The score.
weightnumber0..1Criterion weight, where applicable.
rationalestring0..1Why this score.

Unit

Unit of measure and unit price.

FieldTypeCard.Definition
codestring0..1UN/ECE Rec 20 unit-of-measure code (e.g. C62, DAY, MTR).
namestring0..1
unitPriceValue0..1

InvoiceLine

A single invoice line. Aligned to EN 16931 BG-25 (INVOICE LINE).

FieldTypeCard.DefinitionEN 16931
idstring1Invoice line identifier.BT-126 Invoice line identifier
notestring0..1BT-127 Invoice line note
quantitynumber1BT-129 Invoiced quantity
unitOfMeasurestring0..1BT-130 Invoiced quantity unit of measure code (UN/ECE Rec 20)
itemNamestring1BT-153 Item name
itemNetPriceValue0..1BT-146 Item net price
netAmountValue1BT-131 Invoice line net amount
classificationClassification0..1BT-158 Item classification identifier
vatCategoryCodestring0..1BT-151 Invoiced item VAT category code
vatRatenumber0..1BT-152 Invoiced item VAT rate

VatBreakdown

A VAT category subtotal. Aligned to EN 16931 BG-23 (VAT BREAKDOWN).

FieldTypeCard.DefinitionEN 16931
taxableAmountValue1BT-116 VAT category taxable amount
taxAmountValue1BT-117 VAT category tax amount
categoryCodestring1BT-118 VAT category code (e.g. S, Z, E, AE)
ratenumber0..1BT-119 VAT category rate

Process layer

Party

Any actor in the network. Subtyped by role.

FieldTypeCard.Definition
type"Party"0..1
idIdentifier1
identifiersIdentifier[]0..*
namestring1
rolesstring[]1..*
partyTypestring organization · person · agent1
addressobject0..1
contactPointobject0..1
credentialsCredential[]0..*
memberOfIdentifier0..1

Need

The demand signal that initiates procurement (OCDS planning stage).

FieldTypeCard.Definition
type"Need"0..1
idIdentifier1
titlestring1
descriptionstring0..1
requestingPartyIdentifier1
budgetValue0..1
classificationClassification0..1
rationalestring0..1
governingPoliciesIdentifier[]0..*Policy references constraining this procurement.

SourcingEvent

A request to the market: RFP, RFQ, ITT, tender, or call-off competition (OCDS tender stage).

FieldTypeCard.Definition
type"SourcingEvent"0..1
idIdentifier1
titlestring1
procuringPartyIdentifier1
procedurestring1See codelists/procedure.csv.
statusstring planned · active · evaluating · complete · cancelled · withdrawn1
lotsobject[]0..*
itemsItem[]0..*
valueValue0..1
eligibilityCriteriaIdentifier[]0..*References to Policy objects.
evaluationCriteriaIdentifier[]0..*References to Policy objects.
periodPeriod0..1
documentsDocument[]0..*

Submission

A supplier's response to a SourcingEvent: bid, tender, quote, or proposal.

FieldTypeCard.Definition
type"Submission"0..1
idIdentifier1
sourcingEventIdentifier1
lotstring0..1
submittingPartyIdentifier1
submittedByIdentifier0..1
itemsItem[]0..*
valueValue0..1
disclosedCredentialsCredential[]0..*
sealedProofobject0..1Encrypted submission + proof where sealed-bid cryptography applies.
statusstring draft · submitted · withdrawn · admissible · inadmissible1

Evaluation

The scoring of a submission against the evaluation criteria.

FieldTypeCard.Definition
type"Evaluation"0..1
idIdentifier1
submissionIdentifier1
criteriaIdentifier1Reference to the Policy holding the evaluation model.
scoresScore[]1..*
evaluatedByIdentifier1The agent (human or synthetic) performing the evaluation.
resultstring passed · failed · ranked1
decisionIdentifier0..1Link to the Decision record.

Award

The decision to award (OCDS award stage).

FieldTypeCard.Definition
type"Award"0..1
idIdentifier1
sourcingEventIdentifier1
awardedPartyIdentifier1
valueValue1
rationalestring0..1
decisionIdentifier1The Decision record supporting the award.
standstillPeriodPeriod0..1Where regulation requires a standstill (e.g. UK Procurement Act).

Contract

The binding agreement (OCDS contract stage).

FieldTypeCard.Definition
type"Contract"0..1
idIdentifier1
awardIdentifier0..1The award it derives from.
partiesIdentifier[]1..*
titlestring1
valueValue1
periodPeriod1
obligationsobligation[]0..*
documentsDocument[]0..*
governingPoliciesIdentifier[]0..*

Order

A call-off or purchase order against a contract or catalogue (UBL Order aligned).

FieldTypeCard.Definition
type"Order"0..1
idIdentifier1
contractIdentifier0..1The contract drawn against.
buyerIdentifier1
sellerIdentifier1
itemsItem[]1..*
valueValue1
deliveryPeriodPeriod0..1

Catalogue

A structured offering of goods/services (UBL Catalogue / Peppol BIS Catalogue aligned).

FieldTypeCard.Definition
type"Catalogue"0..1
idIdentifier1
providerPartyIdentifier1
itemsItem[]1..*
validityPeriodPeriod0..1

Obligation

A contractual obligation, deliverable, or milestone with a compliance state.

FieldTypeCard.Definition
type"Obligation"0..1
idstring1
descriptionstring1
dueDatestring0..1
responsiblePartyIdentifier0..1
statusstring pending · met · breached · waived1
evidenceDocument[]0..*
dischargedByIdentifier[]0..*The Order, Invoice, or Document(s) that discharged this obligation. SHOULD be present once status is `met`.

Invoice

An invoice, fully aligned to EN 16931 so it is convertible to Peppol BIS Billing / UBL Invoice / Factur-X. This alignment is what makes a SIGNET network natively compliant with the EU ViDA cross-border e-invoicing mandate.

FieldTypeCard.DefinitionEN 16931
type"Invoice"0..1
idIdentifier1BT-1 Invoice number
invoiceTypeCodestring0..1BT-3 Invoice type code (e.g. 380 commercial invoice)
issueDatestring1BT-2 Invoice issue date
currencystring1BT-5 Invoice currency code (ISO 4217)
contractIdentifier0..1BT-12 Contract reference
orderIdentifier0..1BT-13 Purchase order reference
settlesIdentifier[]0..*SIGNET-original (not an EN 16931 BT). The Obligation(s) this invoice settles. Omitted on Peppol BIS projection.
sellerIdentifier1BG-4 SELLER (BT-27 seller name resolved via Party)
buyerIdentifier1BG-7 BUYER (BT-44 buyer name resolved via Party)
linesInvoiceLine[]1..*BG-25 INVOICE LINE
vatBreakdownVatBreakdown[]0..*BG-23 VAT BREAKDOWN
lineExtensionTotalValue0..1BT-106 Sum of invoice line net amount
taxExclusiveTotalValue0..1BT-109 Invoice total amount without VAT
taxTotalValue1BT-110 Invoice total VAT amount
taxInclusiveTotalValue0..1BT-112 Invoice total amount with VAT
payableAmountValue1BT-115 Amount due for payment
paymentDueDatestring0..1BT-9 Payment due date
paymentTermsstring0..1BT-20 Payment terms

Agent layer

SyntheticAgent

An AI agent operating in the network as a first-class Party.

FieldTypeCard.Definition
type"SyntheticAgent"0..1
idIdentifier1
namestring1
operatedByIdentifier1
modelstring0..1Underlying model family (provenance only; SIGNET is model-agnostic).
capabilitiesobject[]1..*
mandateIdentifier1
agentCardstring0..1A2A Agent Card location.

Mandate

The authority granted to an agent: what it may do, within what limits.

FieldTypeCard.Definition
type"Mandate"0..1
idIdentifier1
agentIdentifier1
grantedByIdentifier1
permittedCapabilitiesstring[]1..*
constraintsIdentifier[]0..*Policy references: hard limits.
approvalThresholdsIdentifier[]0..*Policy references: human-in-the-loop conditions.
scopeobject1Data and entity scope (sandbox boundary).
validityPeriod0..1

Decision

A decision taken in the network, by a human or synthetic agent, with inputs and rationale.

FieldTypeCard.Definition
type"Decision"0..1
idIdentifier1
decisionTypestring1See codelists/decisionType.csv.
madeByIdentifier1
underMandateIdentifier0..1
inputsIdentifier[]0..*
policiesAppliedIdentifier[]0..*
rationalestring1Human-readable rationale. MANDATORY.
outcomeobject1The decision outcome.
humanApprovalIdentifier0..1
provenanceProvenance1

Policy

A machine-readable, human-auditable rule. Rules-as-code.

FieldTypeCard.Definition
type"Policy"0..1
idIdentifier1
policyTypestring eligibility · evaluation · approval · constraint · compliance1
expressionLanguagestring1e.g. rego, dmn, cel.
expressionstring1The executable rule.
humanReadablestring1Plain-language statement of the same rule. MANDATORY.
versionstring1
issuedByIdentifier1

Trust layer

Event

An append-only record of a material change. Tamper-evident via hash chaining.

FieldTypeCard.Definition
type"Event"0..1
idIdentifier1
eventTypestring1See codelists/eventType.csv (open).
subjectIdentifier1
actorIdentifier1
timestampstring1
payloadobject0..1
previousEventHashstring0..1Hash of the prior event, forming a tamper-evident chain.
provenanceProvenance1

Codelists

Controlled vocabularies

Closed lists are normative; open lists are extensible.

partyRoleClosed
CodeTitleDescription
buyerBuyerThe party acquiring goods/services.
supplierSupplierThe party offering goods/services.
procuringEntityProcuring entityThe entity running the procurement on behalf of the buyer.
payerPayerThe party making payment.
payeePayeeThe party receiving payment.
humanAgentHuman agentA natural person acting in the network.
syntheticAgentSynthetic agentAn AI agent acting in the network.
certifierCertifierAn authority issuing verifiable credentials.
observerObserverA read-only participant (auditor, regulator).
procedureClosed
CodeTitleDescription
openOpenAny interested supplier may submit.
restrictedRestrictedTwo-stage: select then invite.
competitiveFlexibleCompetitive flexible procedureBespoke multi-stage procedure (UK Procurement Act 2023).
directAwardDirect awardAward without competition where permitted.
frameworkCallOffFramework call-offCall-off competition under an existing framework.
policyTypeClosed
CodeTitleDescription
eligibilityEligibilityEntry criteria for participation.
evaluationEvaluationScoring model for submissions.
approvalApprovalApproval routing and thresholds.
constraintConstraintHard limits on agent behaviour.
complianceComplianceRegulatory or policy compliance rules.
submissionStatusClosed
CodeTitleDescription
draftDraftNot yet submitted.
submittedSubmittedLodged with the procuring entity.
withdrawnWithdrawnWithdrawn by the supplier.
admissibleAdmissiblePassed admissibility checks.
inadmissibleInadmissibleFailed admissibility checks.
decisionTypeClosed
CodeTitleDescription
admissibilityAdmissibilityWhether a submission is admissible.
evaluationEvaluationScoring of a submission.
awardAwardDecision to award.
negotiationMoveNegotiation moveA move within a negotiation.
qualificationQualificationDecision to qualify a supplier (onboarding).
identifierSchemeClosed
CodeTitleDescription
didDecentralised IdentifierW3C DID. RECOMMENDED for parties and agents.
gleif:leiLegal Entity IdentifierISO 17442 LEI issued under GLEIF.
gs1:glnGlobal Location NumberGS1 GLN.
vatVAT numberNational VAT registration number.
companies-houseUK Companies House numberUK company registration number.
peppolPEPPOL Participant IdentifierPeppol network participant id.
invoiceTypeCodeClosed
CodeTitleDescription
380Commercial invoiceStandard commercial invoice (EN 16931 BT-3 default).
381Credit noteDocument cancelling all or part of an invoice.
384Corrected invoiceInvoice correcting a previously issued invoice.
389Self-billed invoiceInvoice raised by the buyer on behalf of the supplier.
326Partial invoiceInvoice for part of a delivery or contract.
vatCategoryClosed
CodeTitleDescription
SStandard rateStandard VAT rate applies (EN 16931 BT-151/BT-118).
ZZero ratedGoods/services taxed at zero rate.
EExemptExempt from VAT.
AEReverse chargeVAT reverse charge applies (buyer accounts for VAT).
GExport outside EUFree export item, VAT not charged.
KIntra-community supplyZero-rated intra-community supply of goods/services.
OOutside scopeServices outside the scope of VAT.
eventTypeOpen
CodeTitleDescription
need.raisedNeed raisedA procurement need was raised.
sourcingEvent.publishedSourcing event publishedA sourcing event was published to the market.
submission.lodgedSubmission lodgedA supplier lodged a submission.
evaluation.completedEvaluation completedA submission was evaluated.
award.decidedAward decidedAn award decision was taken.
contract.signedContract signedA contract was executed.
mandate.grantedMandate grantedAn agent mandate was granted.
mandate.revokedMandate revokedAn agent mandate was revoked.
obligation.dischargedObligation dischargedAn obligation reached `met`, discharged by a settling artefact (Order/Invoice/Document).
bid.placedBid placedA bid was placed or revised in an Auction; the ordered bid.placed stream is the hash-chained auction record.
documentTypeOpen
CodeTitleDescription
tenderNoticeTender noticeNotice advertising a sourcing event.
evaluationCriteriaEvaluation criteriaThe published evaluation model.
specificationSpecificationTechnical or service specification.
signedContractSigned contractThe executed contract document.
evidenceEvidenceEvidence of obligation fulfilment.

Examples

Worked instances

invoice.json
{
  "@context": "https://concert.foundation/signet/v0.1/context.jsonld",
  "type": "Invoice",
  "id": {
    "scheme": "peppol",
    "id": "INV-2026-000512"
  },
  "invoiceTypeCode": "380",
  "issueDate": "2026-10-05T00:00:00Z",
  "currency": "EUR",
  "contract": {
    "scheme": "did",
    "id": "did:web:buyer.example#contract-3310"
  },
  "order": {
    "scheme": "did",
    "id": "did:web:buyer.example#order-7781"
  },
  "settles": [
    {
      "scheme": "did",
      "id": "did:web:buyer.example#contract-3310/ob-1"
    }
  ],
  "seller": {
    "scheme": "gleif:lei",
    "id": "5299000ACME00NETWRK1"
  },
  "buyer": {
    "scheme": "gleif:lei",
    "id": "5299000BUYER00000001"
  },
  "lines": [
    {
      "id": "1",
      "itemName": "Core router managed service — monthly",
      "quantity": 100,
      "unitOfMeasure": "MON",
      "itemNetPrice": {
        "amount": 50,
        "currency": "EUR"
      },
      "netAmount": {
        "amount": 5000,
        "currency": "EUR"
      },
      "classification": {
        "scheme": "cpv",
        "id": "72720000"
      },
      "vatCategoryCode": "S",
      "vatRate": 21
    },
    {
      "id": "2",
      "itemName": "Field engineering — day rate",
      "quantity": 10,
      "unitOfMeasure": "DAY",
      "itemNetPrice": {
        "amount": 120,
        "currency": "EUR"
      },
      "netAmount": {
        "amount": 1200,
        "currency": "EUR"
      },
      "vatCategoryCode": "S",
      "vatRate": 21
    }
  ],
  "vatBreakdown": [
    {
      "taxableAmount": {
        "amount": 6200,
        "currency": "EUR"
      },
      "taxAmount": {
        "amount": 1302,
        "currency": "EUR"
      },
      "categoryCode": "S",
      "rate": 21
    }
  ],
  "lineExtensionTotal": {
    "amount": 6200,
    "currency": "EUR"
  },
  "taxExclusiveTotal": {
    "amount": 6200,
    "currency": "EUR"
  },
  "taxTotal": {
    "amount": 1302,
    "currency": "EUR"
  },
  "taxInclusiveTotal": {
    "amount": 7502,
    "currency": "EUR"
  },
  "payableAmount": {
    "amount": 7502,
    "currency": "EUR"
  },
  "paymentDueDate": "2026-11-04T00:00:00Z",
  "paymentTerms": "Net 30 days from invoice date."
}
sourcing-event.json
{
  "@context": "https://concert.foundation/signet/v0.1/context.jsonld",
  "type": "SourcingEvent",
  "id": {
    "scheme": "did",
    "id": "did:web:buyer.example#event-1207"
  },
  "title": "Network managed services — Northern region",
  "procuringParty": {
    "scheme": "did",
    "id": "did:web:buyer.example#buyer"
  },
  "procedure": "competitiveFlexible",
  "status": "active",
  "lots": [
    {
      "id": "lot-1",
      "title": "Core transport",
      "value": {
        "amount": 12000000,
        "currency": "EUR"
      }
    }
  ],
  "value": {
    "amount": 12000000,
    "currency": "EUR"
  },
  "eligibilityCriteria": [
    {
      "scheme": "did",
      "id": "did:web:buyer.example#policy-elig-iso27001"
    }
  ],
  "evaluationCriteria": [
    {
      "scheme": "did",
      "id": "did:web:buyer.example#policy-eval-mat"
    }
  ],
  "period": {
    "startDate": "2026-07-01T00:00:00Z",
    "endDate": "2026-08-15T17:00:00Z"
  }
}
award-decision.json
{
  "@context": "https://concert.foundation/signet/v0.1/context.jsonld",
  "type": "Decision",
  "id": { "scheme": "did", "id": "did:web:buyer.example#decision-8842" },
  "decisionType": "award",
  "madeBy": { "scheme": "did", "id": "did:web:buyer.example#agent-eval-3" },
  "underMandate": { "scheme": "did", "id": "did:web:buyer.example#mandate-eval-3" },
  "inputs": [
    { "scheme": "did", "id": "did:web:buyer.example#submission-5521" },
    { "scheme": "did", "id": "did:web:buyer.example#submission-5522" }
  ],
  "policiesApplied": [ { "scheme": "did", "id": "did:web:buyer.example#policy-eval-mat" } ],
  "rationale": "Most Advantageous Tender (price 0.2, quality 0.55, social 0.25). submission-5521 scored 0.859474, ahead of submission-5522 at 0.841500 (margin 0.017974). The dearer bid wins on materially higher quality, accepting a 5.56% price premium over the lower bid.",
  "outcome": {
    "awardedSubmission": "did:web:buyer.example#submission-5521",
    "ranking": [
      { "submission": "did:web:buyer.example#submission-5521", "total": 0.859474 },
      { "submission": "did:web:buyer.example#submission-5522", "total": 0.8415 }
    ]
  },
  "humanApproval": { "scheme": "did", "id": "did:web:buyer.example#approval-771" },
  "provenance": {
    "generatedBy": { "scheme": "did", "id": "did:web:buyer.example#agent-eval-3" },
    "generatedAt": "2026-06-21T14:08:00Z",
    "derivedFrom": [
      { "scheme": "did", "id": "did:web:buyer.example#submission-5521" },
      { "scheme": "did", "id": "did:web:buyer.example#submission-5522" }
    ],
    "usedPolicies": [ { "scheme": "did", "id": "did:web:buyer.example#policy-eval-mat" } ],
    "signature": { "type": "Ed25519Signature2020", "value": "z58…" }
  }
}
need.json
{
  "@context": "https://concert.foundation/signet/v0.1/context.jsonld",
  "type": "Need",
  "id": {
    "scheme": "did",
    "id": "did:web:buyer.example#need-0420"
  },
  "title": "Managed network services — Northern region refresh",
  "requestingParty": {
    "scheme": "did",
    "id": "did:web:buyer.example#buyer"
  },
  "budget": {
    "amount": 12000000,
    "currency": "EUR"
  },
  "classification": {
    "scheme": "cpv",
    "id": "72720000",
    "description": "Wide area network services"
  },
  "rationale": "End-of-life transport equipment refresh across the northern operating region.",
  "governingPolicies": [
    {
      "scheme": "did",
      "id": "did:web:buyer.example#policy-elig-iso27001"
    }
  ]
}
contract.json
{
  "@context": "https://concert.foundation/signet/v0.1/context.jsonld",
  "type": "Contract",
  "id": {
    "scheme": "did",
    "id": "did:web:buyer.example#contract-3310"
  },
  "award": {
    "scheme": "did",
    "id": "did:web:buyer.example#award-2208"
  },
  "parties": [
    {
      "scheme": "did",
      "id": "did:web:buyer.example#buyer"
    },
    {
      "scheme": "did",
      "id": "did:web:acme-networks.example#acme"
    }
  ],
  "title": "Managed network services — Northern region",
  "value": {
    "amount": 12000000,
    "currency": "EUR"
  },
  "period": {
    "startDate": "2026-09-01T00:00:00Z",
    "endDate": "2029-08-31T23:59:59Z"
  },
  "obligations": [
    {
      "type": "Obligation",
      "id": "ob-1",
      "description": "Achieve 99.95% core availability each calendar month.",
      "status": "met",
      "dischargedBy": [
        {
          "scheme": "peppol",
          "id": "INV-2026-000512"
        }
      ]
    },
    {
      "type": "Obligation",
      "id": "ob-2",
      "description": "Complete northern transport migration by 2027-06-30.",
      "dueDate": "2027-06-30T00:00:00Z",
      "status": "pending"
    }
  ]
}
policy-evaluation.json
{
  "@context": "https://concert.foundation/signet/v0.1/context.jsonld",
  "type": "Policy",
  "id": {
    "scheme": "did",
    "id": "did:web:buyer.example#policy-eval-mat"
  },
  "policyType": "evaluation",
  "expressionLanguage": "rego",
  "expression": "package signet.eval\nscore := price*0.2 + quality*0.55 + social*0.25",
  "humanReadable": "Most Advantageous Tender: price 20%, quality 55%, social value 25%.",
  "version": "1.1.0",
  "issuedBy": {
    "scheme": "did",
    "id": "did:web:buyer.example#buyer"
  }
}

Extensions & profiles

The core stays lean; domains extend it

Domain structure is added through extensions and profiles that add object types, fields, or codelist values and never redefine core fields — the OCDS extension pattern. This index is maintained in the standard's repository.

onboarding

Schemas + demo shipped (in-tree, core v0.1); conformance rules ship (conformance/rules/check-onboarding.js)

OnboardingCase, SupplierQualification (durable status with first-class conditional qualification, value caps, category restrictions); credentialType codelist

onboarding.md
auction

Schemas + demo shipped (in-tree, core v0.1); conformance rules ship (conformance/rules/check-auction.js)

Auction, Bid (a profile of the sourcing flow — reverse / english / dutch / sealed-bid / multi-criteria; deterministic, operator-independent close); auctionType codelist

auction.md
identity

Working Draft — schema + worked example shipped; demo emits Approval; conformance rules ship (conformance/rules/check-identity.js)

Approval (verifiable human approval); delegationOfAuthority credential type; normative no-PII rule for hash-anchored records

identity.md
commodity-risk

Spec + schemas + conformance rules shipped — six schemas, ten codelists, an eleven-file full-loop example, and the six rules as an executable checker (conformance/rules/check-commodity-risk.js); separately-namespaced

Portfolio-level commodity risk governance (positions, coverage corridors as Policy subtypes, price marks, assessments, price-shock scenarios, hedge proposals bridging to core Need)

commodity-risk.md
receipt

Working Draft (spec only; schemas to follow)

Receipt, MatchResult — receipt/acceptance and the governed three-way match (tolerances as a matchTolerance Policy; the match is a mandate-bound Decision)

receipt.md
performance

Working Draft (spec only; schemas to follow)

ServiceLevelPolicy, PerformanceAssessment — SLAs/KPIs as Policy and derived, event-anchored supplier performance assessments that feed the qualification lifecycle

performance.md
amendments

Working Draft (spec only; schemas to follow)

Amendment — event-anchored contract deltas (variation / extension / renewal / novation / termination) with derived current state

amendments.md
frameworks

Working Draft (spec only; schemas to follow)

FrameworkAgreement (Contract subtype), CallOff (direct award / mini-competition) with a conformance-checkable drawdown invariant (Σ call-offs ≤ ceiling)

frameworks.md
negotiation

Working Draft (spec only; schemas to follow)

Negotiation, Offer — a governed exchange of offers over named terms under per-term Mandates; the object model behind the existing decisionType: negotiationMove

negotiation.md
auction-platform

Working Draft

Certification profile for eAuction platforms — the first product-certification path; composes the auction + identity extensions and the public conformance suite into five demonstrable requirements (valid objects · deterministic close · tamper-evident record · governed awards · no PII in the chain)

auction-platform.md

The full index — its status vocabulary, the governance notes, and the in-tree versus separately-namespaced rule — is maintained at docs/extensions/README.md at v0.12.0.

Machine-readable source

Download the artifacts

How the standard evolves

Changelog

Unreleased2026-07-20

[0.12.0] — 2026-07-20 — Working Draft

Added

  • Auction conformance profile — the first product-certification path (docs/profiles/auction-platform.md), composing entirely from shipped artifacts: it names five demonstrable requirements (valid objects, deterministic close, tamper-evident record, governed awards, no PII in the chain) checkable with the public suite.
  • Extension conformance rules — executable cross-object checkers for the onboarding (case↔qualification closure, conditional integrity), auction (the recorded winner equals the deterministic close; reserve integrity), and identity (Full-level: humanApproval resolves both ways; approver ceiling covers the decided value) extensions, wired into CI. All four extensions now have machine-backed conformance. Governance: commodity-risk resubmission record — merged as Working Draft.
  • Five P2P/SRM extension specs (Working Drafts, spec-first) — receipt & governed three-way match; supplier performance (SLAs as Policy, assessments feeding the qualification lifecycle); contract amendments (event-anchored deltas, derived state); framework agreements & call-offs; negotiation under per-term mandates. Schemas and conformance rules follow per-extension after review, per the process established by commodity-risk.
0.10.02026-07-05

Added

  • Onboarding extension spec at docs/extensions/onboarding.md (previously undelivered; schemas and demo shipped in 0.6.x).
  • Commodity-risk extension — technical artifacts. Six schemas (ExposurePosition, CoveragePolicy as a Policy subtype, PriceMark, CoverageAssessment, Scenario, HedgeProposal), ten codelists (positionStatus and policyEvaluationStatus closed), an eleven-file full-loop worked example (belowMinimum → proposal → executed → withinCorridor, arithmetically reconciled), and the six conformance rules as an executable checker (conformance/rules/check-commodity-risk.js) — three are cross-object checks beyond schema validation: reconciliation arithmetic, scenario fixed-cost invariance, escalation-first rule ordering. Completes the extension accepted in principle in governance/reviews/2026-07-commodity-risk.md.
0.9.02026-07-05

Added

  • Identity profile (Working Draft)docs/extensions/identity.md: how SIGNET represents natural persons. Humans act under Mandates (core Mandate reused — agent accepts any actor); authority is a delegationOfAuthority Credential; new Approval object makes humanApproval resolvable and verifiable (approver pseudonym, role, authority credential, provenance). Normative no-PII rule for hash-anchored records (pseudonymous person references only; resolution is an organisational obligation). Authentication is out of scope by design. The agent demo now emits the verifiable Approval at runtime and checks the approver's authority ceiling covers the award value.
  • Commodity-risk extension (Working Draft spec)docs/extensions/commodity-risk.md: portfolio-level commodity risk governance (positions, coverage corridors as Agent-layer Policy subtypes, price marks, assessments, scenarios, hedge proposals bridging to core Need). Accepted in principle by the Standards Committee (governance/reviews/2026-07-commodity-risk.md) — the first member-proposed extension, reviewed under the identical process as any proposer. Schemas, worked example, and conformance rules to follow as a separate change.

Changed

  • Documentation & demo alignment. Brought the repository's prose level with its code: the top-level README.md now documents the conformance harness, the three demonstrations (agent award, onboarding, auction) with their current outcomes, and an Extensions & profiles table with per-item status. agent/README.md was corrected to the current MAT weighting (price 0.20 / quality 0.55 / social 0.25 — the dearer, higher-quality bid wins 0.859474 vs 0.8415) and the verifiable-Approval check. Extension specs are consolidated under docs/extensions/<id>.md (the auction spec renamed to auction.md) with a new docs/extensions/README.md index; the wiki sidebar points at the specs and demos. No schema or normative change.
0.8.02026-07

Added

  • Auction extension — process-layer objects Auction (a profile of the sourcing flow; reverse / english / dutch / sealed-bid / multi-criteria via auctionType + deterministic rules) and Bid. The auction rules and canonical bid record are normative and operator-independent — any conformant operator closing the same bids under the same rules MUST reach the same Award. The close reuses Decision/Award; eligibility ties to SupplierQualification; the bid history is a hash-chained Event trail. Open auctionType codelist; reverse-auction worked example. Modelled on Prozorro's neutral-core architecture: price formation in the standard, UX in the operators.
0.7.02026-06

Added (all optional, non-breaking)

  • Settlement linkage — makes the commitment→discharge loop traversable as data (Concepts of Open Commerce §9, the Settlement primitive):
    • Obligation.dischargedBy — references the Order/Invoice/Document(s) that discharged the obligation. SHOULD be present once status is met.
    • Invoice.settles — references the Obligation(s) the invoice settles. SIGNET-original: it is not an EN 16931 Business Term and is omitted on the Peppol BIS projection, so ViDA convertibility is unchanged. A new projection-skip guard (npm run test:projection-skip) proves settles never leaks into UBL.
    • eventType codelist: obligation.discharged.
    • Three worked fixtures, all conformance-checked: a discharged obligation, a pending obligation carrying neither new field (the machine proof the additions are optional), and an invoice with settles.
  • Referent granularity uses a composite contractId/obligationId URI (option (a)); Obligation.id is unchanged. No existing field changed; documents valid before this release remain valid.

Changed (non-breaking; examples only)

  • MAT evaluation policy reweighted to price 20% / quality 55% / social value 25% (was 40 / 35 / 25). The change is carried in the policy's own expression (score := price*0.2 + quality*0.55 + social*0.25) and its humanReadable statement; examples/policy-evaluation.json bumped to version: 1.1.0. The agent demo reads the weights from the Policy expression, so its trace and scores regenerate from this single source.
  • Award scenario now demonstrates a justified price premium. Under the new weighting the dearer bid wins: submission-5521 (€11.4M, quality 0.9, social 0.7) scores 0.859474, ahead of submission-5522 (€10.8M, quality 0.78, social 0.85) at 0.841500 (margin 0.017974) — a 5.56% price premium accepted on materially higher quality. The demo is now a proof of governed multi-criteria judgement rather than a low-bid pick. examples/award-decision.json (Appendix A) and the agent run resolve to the same winner, weights, and scores.
  • The award value (€11.4M, the winning bid) remains intentionally distinct from the contract value (€12M, the category tier) in examples/contract.json: awards are struck at the bid, contracts at the tier/ceiling. No schema or normative-grammar changes; sub-criterion scores are unchanged, only the weighting and resulting totals.
0.6.02026-06

Added

  • Supplier onboarding extension — process-layer objects OnboardingCase (buyer-internal workflow; invited + submitted entry; revalidation/remediation case types) and SupplierQualification (durable status with first-class conditional qualification, value caps and category restrictions). Reuses Credential/Policy/Decision/Event/Consent. Screening results carried as attestations, never performed by SIGNET. Open credentialType codelist; two worked examples. Workflow states are normative; credential types are extensible.
0.5.02026-06

Added

  • Agent demonstration (agent/) — a runnable proof that a synthetic agent can take a governed, accountable, conformant action. An agent reads a SourcingEvent, is bounded by a Mandate (its €12M value exceeds the €10M autonomous ceiling, so human approval is required), applies the published MAT evaluation Policy (weights parsed from the Policy's own expression), and emits an Award Decision with rationale, inputs, policies applied, human approval, and provenance — plus a five-event, hash-chained audit trail.
    • agent-card.json (A2A), mandate.json, two Submission bids, assessment inputs.
    • reasoner.js — the pluggable "Model" (deterministic default; marked seam for a live frontier model via MCP/A2A).
    • agent-runtime.js — the "Harness": mandate gate, policy application, provenance, event-chaining.
    • run-agent.js — runs the scenario, narrates it, and verifies the output is conformance-clean (every object validates; chain holds; tampering detected).
    • LIVE_MODEL_NOTE.md — how to swap in a real model for a live demo with no change to the harness.
  • CI now runs the agent demo on every commit; its output must validate and the event chain must hold.
0.4.02026-06

Added

  • Conformance harness (conformance/) — the machine-runnable suite behind the "SIGNET Certified" mark. Implements CDM §13 and the certification neutrality rules CN-1…CN-4.
    • levels.md — Core vs Full levels; requirements C-DOC, C-EVT, C-PROV (Core) and F-MAP, F-SEM (Full); CN neutrality rules.
    • certification.md — the identical-for-all certification process.
    • runner/run-conformance.js — runs the suite against any implementation via a small adapter, emits a machine-readable report, computes the level achieved.
    • adapter/reference-adapter.js — a complete conformant implementation (reaches Full); adapter/broken-adapter.js — deliberately non-conformant, failed by the harness at C-EVT and F-MAP, proving the suite discriminates.
    • Positive + negative document fixtures (invalid documents that MUST be rejected).
    • report-schema.json — schema every conformance report conforms to (CN-4).
  • CI now runs the harness on every commit: the reference implementation must reach Core+, and the broken implementation must be rejected.

Changed

  • tools/signet-to-ubl.js refactored to export a pure toUBL(invoice) function (shared by the CLI, the harness, and the website); CLI output unchanged.
0.3.02026-06

Added

  • tools/signet-to-ubl.js — a dependency-free reference transform that projects a SIGNET canonical Invoice into a UBL 2.1 Invoice conforming to Peppol BIS Billing 3.0 (EN 16931 compliant). Each mapping is annotated with its BT/BG reference.
  • examples/invoice.ubl.xml — the generated Peppol BIS Billing output for the worked invoice, committed so the projection is visible without running it.
  • tools/verify-ubl.py — parses the generated UBL and reconciles every key EN 16931 Business Term and the monetary totals against the source invoice; exits non-zero on mismatch.
  • CI now runs the transform and verification on every push, so "convertible to Peppol BIS" is a continuously-proven claim, not an assertion.
  • npm run transform and npm run verify-ubl scripts.

Notes

  • This is a faithful reference projection, not a substitute for official Peppol validation. Production use should additionally run the output through the Peppol/EN 16931 XSD + Schematron validation artefacts.
0.2.02026-06

Added

  • Complete process layer. JSON Schema for the remaining OCDS-aligned lifecycle objects: Need, Evaluation, Award, Contract, Order, Catalogue, Obligation, and Invoice.
  • EN 16931 building blocks in the foundation definitions: Unit, InvoiceLine, and VatBreakdown, with field-level mappings to EN 16931 Business Terms.
  • EN 16931-mapped Invoice schema and worked example. The Invoice carries 33 EN 16931 Business Terms / Groups (BT-1…BT-158, BG-4/7/23/25), so a SIGNET invoice is convertible to Peppol BIS Billing / UBL Invoice / Factur-X. This is the structural basis for the EU ViDA cross-border e-invoicing claim.
  • New worked examples: need.json, contract.json (with embedded obligations), and invoice.json (EN 16931-mapped, arithmetically consistent: €6,200 net + €1,302 VAT @ 21% = €7,502 payable), all CI-validated.

Fixed

  • BT-mapping annotations on $ref fields are now preserved under Draft-07 by wrapping the reference in allOf (Draft-07 ignores keywords that sit beside a bare $ref). EN 16931 traceability is now structurally retained in the schema.
0.1.02026-06

Added

  • Foundation layer: Identifier, Party, Value, Period, Classification, Item, Credential, Document, Provenance, Score.
  • Process layer (initial): SourcingEvent, Submission, Policy.
  • Agent layer: SyntheticAgent, Mandate, Decision.
  • Trust layer: Event, Consent.
  • JSON-LD @context aligning to ePO, PROV, and W3C VC.
  • Closed and open codelists (CSV).
  • Worked examples with CI validation.

Notes

  • This is a working draft for community review. Field-level definitions are illustrative of the model's shape and not yet frozen.
  • Targets JSON Schema Draft-07 for maximum implementer-tooling compatibility. A migration to 2020-12 will be considered before v1.0.
Concert

The first GUILD. The first SIGNET.

Concert is building the open infrastructure layer for a new era of governed, intelligent, multi-party commerce. Join the founding consortium.

Get in touch